Library
Module
Module type
Parameter
Class
Class type
Systems of coordinates (inhomogeneous homotheties) relative to other coordinate systems with automatic updates. The automatic update refers to the fact that, if a coordinate system is upated, all coordinate systems which depend on it (possibly through several intermediate coordinate systems), they will use the updated version.
Current transformation matrix of the backend (to be able to restore it with Coordinate.restore
.
After a call to use b c
, all backend operations will be performed in the coordinates c
. It returns the current coordinate system so one can restore it with Coordinate.restore
.
restore b c
restore the coordinate transformation matrix ctm
for the backend b
.
val to_parent : t -> x:float -> y:float -> float * float
to_parent coord x y
returns the location of the point (x,y)
in parent's coordinates.
val from_parent : t -> x:float -> y:float -> float * float
from_child coord x y
returns the location of the point (x,y)
from parent's coordinates.
val to_device : t -> x:float -> y:float -> float * float
to_device coord x y
returns the location of the point (x,y)
in device coordinates.
val to_device_distance : t -> dx:float -> dy:float -> float * float
to_device coord dx dy
returns the distance (dx,dy)
in device coordinates (i.e. the translation in coord
is ignored).
val to_coord : t -> x:float -> y:float -> float * float
to_coord coord x y
converts the (device) point (x,y)
into the corresponding point, expressed in coord
coordinates.
val to_coord_distance : t -> dx:float -> dy:float -> float * float
to_coord coord x y
converts the (device) distance (dx,dy)
into the corresponding distance, expressed in coord
coordinates.
val make_root : Matrix.Homothety.t -> t
make_root m
make a system of coordinates which, when used, amounts to use m
. This coordinate system depends on no other so will never be updated. It can be modified however (the matrix m
is copied so no modification will affect m
).
make_identity coord
defines a new system of coordinates that initially consist in the identity transformation to coord
.
make_translate coord x y
defines a new coordinate system that consists in moving the origin of coord
to the point (x,y)
(understood as coordinates in the system coord
). If coord
is modified, the new system will be updated as well.
make_scale coord x y
defines a new coordinate system that consists in dilating axis X and Y of coord
by a factor of x
and y
respectively. If coord
is modified, the new system will be updated as well.
val make_from_transform : t -> Matrix.Homothety.t -> t
make_from_transform coord tm
defines a new coordinate system that consists first in applying tm
and then the tranformation in coord
. In other words, tm
is the transformation from the desired coordinate system to coord
. If coord
is modified, the new system will be updated as well.
val translate : t -> x:float -> y:float -> unit
translate coord x y
modifies the coordinate system coord
translating its origin to the point (x,y)
(understood as coordinates in the system coord
).
val scale : t -> x:float -> y:float -> unit
scale coord x y
modifies the coordinate system coord
dilating its axis X and Y by a factor of x
and y
respectively.
transform coord tm
modifies the coordinate system coord
changing the transformation matrix to its parent (the one it was created from) to tm
.
monitor coord
creates a new monitor for changes to coord
(initially not set).
val reset : monitor -> unit
reset m
reset the monitor. See Coordinate.changed
.
val changed : monitor -> bool
changed m
tell whether the coordinate system m
is attached to was updated (possibly because of one of the coordinate systems it (transitively) depends on was mofidied) since the last reset
.