Jean Abou Samra <jean@abou-samra.fr> writes:
Le 20/09/2021 à 23:31, David Kastrup a écrit :
Jean Abou Samra <jean@abou-samra.fr> writes:
Thoughts? One would have to look at the most typical use cases
to decide on an interface.
Anything wrong with using a ly:transform? type? It's straightforward to
create and manipulate.
I had already forgotten about those. Given sufficient
documentation, it would probably work well.
I find in the IR:
-- Function: ly:make-transform xx yx xy yy x0 y0
Create a transform. Without options, it is an identity transform.
Given four arguments XX, YX, XY, and YY, it is a linear transform,
given six arguments (with X0 and Y0 last), it is an affine
transform. Transforms can be called as functions on other
transforms (concatening them) or on points given either as complex
number or real number pair. See also ‘ly:make-rotation’,
‘ly:make-scaling’, and ‘ly:make-translation’.
-- Function: ly:transform? x
Is X a ‘Transform’ object?
-- Function: ly:transform->list transform
Convert a transform matrix to a list of six values. Values are XX,
YX, XY, YY, X0, Y0.
-- Function: ly:make-translation x y
Make a transform translating by X and Y. If only X is given, it
can also be a complex number or a pair of numbers indicating the
offset to use.
-- Function: ly:make-rotation angle center
Make a transform rotating by ANGLE in degrees. If CENTER is given
as a pair of coordinates, it is the center of the rotation,
otherwise the rotation is around (0 . 0).
-- Function: ly:make-scaling scale scaley
Create a scaling transform from argument SCALE and optionally
SCALEY. When both arguments are given, they must be real and give
the scale in X and Y direction. If only SCALE is given, it may
also be complex to indicate a scaled rotation in the manner of
complex number rotations, or a pair of reals for specifying
different scales in X and Y direction like with the first calling
convention.