13 class CLASS_DECL_ACME matrix
52 matrix(
const matrix&) =
default;
55 matrix& operator = (
const matrix&) =
default;
57 static matrix translation(::f64_point point) {
return translation(point.x, point.y); }
58 static matrix translation(::f64 x, ::f64 y);
59 static matrix rotation(::f64 dAngleRadians);
60 static matrix scaling(::f64 dRateX, ::f64 dRateY);
61 static matrix scaling(::f64_point point) {
return scaling(point.x, point.y); }
62 static matrix scaling(f64_size size) {
return scaling(size.cx, size.cy); }
65 matrix& translate(::f64_point point, e_mode emode = mode_append) {
return translate(point.x, point.y, emode); }
66 matrix& translate(::f64 x, ::f64 y, e_mode emode = mode_append);
67 matrix& rotate(::f64 dAngleRadians, e_mode emode = mode_append);
68 matrix& scale(::f64 dRateX, ::f64 dRateY, e_mode emode = mode_append);
69 matrix& scale(const ::i32_point& point, e_mode emode = mode_append) {
return scale(point.x, point.y, emode); }
72 matrix& prepend(
const matrix& m);
73 matrix& append(
const matrix& m);
76 ::f64 determinant()
const;
78 static bool invert(matrix& aDst,
const matrix& aSrc);
85 if (!invert(*
this, m))
96 matrix& operator * (
const matrix& m);
99 virtual void SetElements(::f32* fa);
102 void transform(i32_sequence2& point);
104 void transform(f64_sequence2& point);
105 void transform(f64_sequence2 * ppoint, ::collection::count c);
107 template < prototype_container CONTAINER >
108 void transform(CONTAINER& container)
109 {
for (
auto&
item : container) transform(
item); }