      ### 3.5.5 Applying CLIM Transformations

Transforming a region applies a coordinate transformation to that region, thus moving its position on the drawing plane, rotating it, or scaling it. Note that transforming a region does not affect the region argument; it is free to either create a new region or return an existing (cached) region.

These generic functions are implemented for all classes of transformations. Furthermore, all subclasses of region and ink implement methods for transform-region and untransform-region . That is, methods for the following generic functions will typically specialize both the transformation and region arguments.

transform-region [Generic Function]

Arguments: transformation region

Summary: Applies transformation to the region region , and returns the transformed region.

untransform-region [Generic Function]

Arguments: transformation region

Summary: This is exactly equivalent to :

(transform-region (invert-transformation ``` transformation``` ) ``` region``` )

CLIM provides a default method for untransform-region on the transformation protocol class that does exactly this.

transform-position [Generic Function]

Arguments: transformation x y

Summary: Applies the transformation transformation to the point whose coordinates are the real numbers x and y , and returns two values, the transformed x coordinate and the transformed y coordinate.

transform-position is the spread version of transform-region in the case where the region is a point.

untransform-position [Generic Function]

Arguments: transformation x y

Summary: This is exactly equivalent to:

(transform-position (invert-transformation ``` transformation``` ) ``` x``` ``` y``` )

CLIM provides a default method for untransform-position on the transformation protocol class that does exactly this.

transform-distance [Generic Function]

Arguments: transformation dx dy

Summary: Applies the transformation transformation to the distance represented by the real numbers dx and dy , and returns two values, the transformed dx and the transformed dy .

A distance represents the difference between two points. It does not transform like a point.

untransform-distance [Generic Function]

Arguments: transformation dx dy

Summary: This is exactly equivalent to:

(transform-distance (invert-transformation ``` transformation``` ) ``` dx``` ``` dy``` )

CLIM provides a default method for untransform-distance on the transformation protocol class that does exactly this.

transform-rectangle* [Generic Function]

Arguments: transformation x1 y1 x2 y2

Summary: Applies the transformation transformation t o the rectangle specified by the four coordinate arguments, which are real numbers. The arguments x1 , y1 , x2 , and y 2 are canonicalized in the same way as for make-bounding-rectangle . Returns four values that specify the minimum and maximum points of the transformed rectangle in the order min-x , min-y , max-x , and max-y .

It is an error if transformation does not satisfy rectilinear-transformation-p .

transform-rectangle* is the spread version of transform-region in the case where the transformation is rectilinear and the region is a rectangle.

untransform-rectangle* [Generic Function]

Arguments: transformation x1 y1 x2 y2

Summary: This is exactly equivalent to:

(transform-rectangle* (invert-transformation ``` transformation``` ) ``` x1``` ``` y1``` ``` x2``` ``` y2``` )

CLIM provides a default method for untransform-rectangle* on the transformation protocol class that does exactly this.

Common Lisp Interface Manager 2.0 User's Guide - 7 Aug 2017