# Module Pdftransform

    module Pdftransform: sig .. end

Affine Transformations in Two Dimensions

### Types

    type transform_op =

`|` | `Scale of `(float * float) * float * float``
`|` | `Rotate of `(float * float) * float``
`|` | `Translate of `float * float``
`|` | `ShearX of `(float * float) * float``
`|` | `ShearY of `(float * float) * float``

A single transformation operation.

    type transform = transform_op list

A list of transformations, the first at the end of the list (thus, to append another transformation, just cons to the beginning.)

    type transform_matrix = {

`` | `a : `float`;`
`` | `b : `float`;`
`` | `c : `float`;`
`` | `d : `float`;`
`` | `e : `float`;`
`` | `f : `float`;`

`}`

A transformation matrix (first row `a c e`, second row `b d f`, third row `0 0 1`)

    val i : transform

The identity transform

    val string_of_transform : transform -> string

Make a string of a transform for debug purposes.

### Making transformation matrices

    val i_matrix : transform_matrix

The identity matrix

    val string_of_matrix : transform_matrix -> string

String of a transformation matrix.

    val mktranslate : float -> float -> transform_matrix

Make a transformation matrix from x and y translation.

    val mkscale : float * float -> float -> float -> transform_matrix

Make a transformation matrix from an x and y scale and a point to scale about.

    val mkrotate : float * float -> float -> transform_matrix

Make a rotation matrix to rotate by a number of radians around a point.

    val mkshearx : float * float -> float -> transform_matrix

Matrix to shear in x by a given factor about a point.

    val mksheary : float * float -> float -> transform_matrix

Matrix to shear in y by a given factor about a point.

### Composing and manipulating transforms

    val compose : transform_op -> transform -> transform

`compose t ts` adds operation `t` to the transform `ts`.

    val append : transform -> transform -> transform

`append a b` is a transform with the same effect as performing b then a

    val matrix_compose : transform_matrix ->
           transform_matrix -> transform_matrix

`compose a b` produces a matrix equivalent to performing `b` then `a`.

    val matrix_of_op : transform_op -> transform_matrix

Make a matrix from a single transformation operation

    val matrix_of_transform : transform -> transform_matrix

Make a matrix from a transform

### Inverting transforms

    exception NonInvertable

Exception raised if a matrix is non-invertable

    val matrix_invert : transform_matrix -> transform_matrix

Matrix inversion. May raise `NonInvertable`

    val transform : transform -> float * float -> float * float

Transform a coordinate by a given transform.

    val transform_matrix : transform_matrix -> float * float -> float * float

Transform a coordinate by a given transformation matrix.

### Decomposing and recomposing matrices

    val decompose : transform_matrix ->
           float * float * float * float * float * float

Decompose a transformation matrix to scale, aspect, rotation, shear, translation in x, translation in y. Always succeeds, but results are not guaranteed to mean anything.

    val recompose : float ->
           float -> float -> float -> float -> float -> transform_matrix

Recompose from the above information. It is not guaranteed that recompose (decompose t) = t