figureone 0.15.10 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/figureone.min.js +1 -1
  2. package/index.js +79167 -0
  3. package/package.json +15 -1
  4. package/types/index.d.ts +132 -0
  5. package/types/js/figure/Animation/Animation.d.ts +36 -0
  6. package/types/js/figure/Animation/AnimationBuilder.d.ts +173 -0
  7. package/types/js/figure/Animation/AnimationManager.d.ts +392 -0
  8. package/types/js/figure/Animation/AnimationStep/CustomStep.d.ts +99 -0
  9. package/types/js/figure/Animation/AnimationStep/DelayStep.d.ts +24 -0
  10. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/ColorAnimationStep.d.ts +203 -0
  11. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/OpacityAnimationStep.d.ts +220 -0
  12. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/PositionAnimationStep.d.ts +124 -0
  13. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/PulseAnimationStep.d.ts +137 -0
  14. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/PulseTransformAnimationStep.d.ts +52 -0
  15. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/RotationAnimationStep.d.ts +119 -0
  16. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/ScaleAnimationStep.d.ts +93 -0
  17. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/ScenarioAnimationStep.d.ts +204 -0
  18. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep/TransformAnimationStep.d.ts +163 -0
  19. package/types/js/figure/Animation/AnimationStep/ElementAnimationStep.d.ts +56 -0
  20. package/types/js/figure/Animation/AnimationStep/ParallelAnimationStep.d.ts +70 -0
  21. package/types/js/figure/Animation/AnimationStep/SerialAnimationStep.d.ts +84 -0
  22. package/types/js/figure/Animation/AnimationStep/TriggerStep.d.ts +106 -0
  23. package/types/js/figure/Animation/AnimationStep.d.ts +110 -0
  24. package/types/js/figure/DrawContext2D.d.ts +9 -0
  25. package/types/js/figure/DrawingObjects/DrawingObject.d.ts +45 -0
  26. package/types/js/figure/DrawingObjects/GLObject/GLObject.d.ts +146 -0
  27. package/types/js/figure/DrawingObjects/HTMLObject/HTMLObject.d.ts +29 -0
  28. package/types/js/figure/DrawingObjects/TextObject/TextObject.d.ts +94 -0
  29. package/types/js/figure/DrawingObjects/TextObject/glyphMeasures.d.ts +7 -0
  30. package/types/js/figure/DrawingObjects/VertexObject/VertexGeneric.d.ts +21 -0
  31. package/types/js/figure/DrawingObjects/VertexObject/VertexObject.d.ts +0 -0
  32. package/types/js/figure/DrawingObjects/VertexObject/VertexText.d.ts +34 -0
  33. package/types/js/figure/Element.d.ts +1212 -0
  34. package/types/js/figure/Equation/Elements/BaseAnnotationFunction.d.ts +118 -0
  35. package/types/js/figure/Equation/Elements/BaseEquationFunction.d.ts +20 -0
  36. package/types/js/figure/Equation/Elements/Bounds.d.ts +49 -0
  37. package/types/js/figure/Equation/Elements/Color.d.ts +7 -0
  38. package/types/js/figure/Equation/Elements/Container.d.ts +5 -0
  39. package/types/js/figure/Equation/Elements/Element.d.ts +95 -0
  40. package/types/js/figure/Equation/Elements/Fraction.d.ts +5 -0
  41. package/types/js/figure/Equation/Elements/Lines.d.ts +5 -0
  42. package/types/js/figure/Equation/Elements/Matrix.d.ts +5 -0
  43. package/types/js/figure/Equation/Elements/Offset.d.ts +5 -0
  44. package/types/js/figure/Equation/Elements/Scale.d.ts +5 -0
  45. package/types/js/figure/Equation/Equation.d.ts +984 -0
  46. package/types/js/figure/Equation/EquationForm.d.ts +139 -0
  47. package/types/js/figure/Equation/EquationFunctions.d.ts +3367 -0
  48. package/types/js/figure/Equation/EquationSymbols.d.ts +1646 -0
  49. package/types/js/figure/Equation/HTMLEquation.d.ts +56 -0
  50. package/types/js/figure/Equation/Symbols/AngleBracket.d.ts +6 -0
  51. package/types/js/figure/Equation/Symbols/Arrow.d.ts +17 -0
  52. package/types/js/figure/Equation/Symbols/Bar.d.ts +6 -0
  53. package/types/js/figure/Equation/Symbols/Box.d.ts +11 -0
  54. package/types/js/figure/Equation/Symbols/Brace.d.ts +6 -0
  55. package/types/js/figure/Equation/Symbols/Bracket.d.ts +8 -0
  56. package/types/js/figure/Equation/Symbols/Division.d.ts +8 -0
  57. package/types/js/figure/Equation/Symbols/Integral.d.ts +7 -0
  58. package/types/js/figure/Equation/Symbols/Line.d.ts +5 -0
  59. package/types/js/figure/Equation/Symbols/Product.d.ts +6 -0
  60. package/types/js/figure/Equation/Symbols/Radical.d.ts +9 -0
  61. package/types/js/figure/Equation/Symbols/SquareBracket.d.ts +6 -0
  62. package/types/js/figure/Equation/Symbols/Strike.d.ts +8 -0
  63. package/types/js/figure/Equation/Symbols/Sum.d.ts +6 -0
  64. package/types/js/figure/Equation/Symbols/SymbolNew.d.ts +15 -0
  65. package/types/js/figure/Equation/Symbols/Vinculum.d.ts +6 -0
  66. package/types/js/figure/Figure.d.ts +711 -0
  67. package/types/js/figure/FigureCollections/Angle.d.ts +766 -0
  68. package/types/js/figure/FigureCollections/Axis.d.ts +517 -0
  69. package/types/js/figure/FigureCollections/Axis3.d.ts +118 -0
  70. package/types/js/figure/FigureCollections/Button.d.ts +195 -0
  71. package/types/js/figure/FigureCollections/EquationLabel.d.ts +77 -0
  72. package/types/js/figure/FigureCollections/FigureCollections.d.ts +122 -0
  73. package/types/js/figure/FigureCollections/Legend.d.ts +270 -0
  74. package/types/js/figure/FigureCollections/Line.d.ts +587 -0
  75. package/types/js/figure/FigureCollections/Plot.d.ts +558 -0
  76. package/types/js/figure/FigureCollections/PolyLine.d.ts +487 -0
  77. package/types/js/figure/FigureCollections/Rectangle.d.ts +235 -0
  78. package/types/js/figure/FigureCollections/SlideNavigator.d.ts +255 -0
  79. package/types/js/figure/FigureCollections/Slider.d.ts +155 -0
  80. package/types/js/figure/FigureCollections/Text.d.ts +307 -0
  81. package/types/js/figure/FigureCollections/Toggle.d.ts +185 -0
  82. package/types/js/figure/FigureCollections/Trace.d.ts +237 -0
  83. package/types/js/figure/FigurePrimitives/FigureElementPrimitive2DText.d.ts +119 -0
  84. package/types/js/figure/FigurePrimitives/FigureElementPrimitiveGLText.d.ts +94 -0
  85. package/types/js/figure/FigurePrimitives/FigureElementPrimitiveGesture.d.ts +536 -0
  86. package/types/js/figure/FigurePrimitives/FigureElementPrimitiveMorph.d.ts +175 -0
  87. package/types/js/figure/FigurePrimitives/FigurePrimitiveTypes.d.ts +788 -0
  88. package/types/js/figure/FigurePrimitives/FigurePrimitiveTypes2D.d.ts +1324 -0
  89. package/types/js/figure/FigurePrimitives/FigurePrimitiveTypes3D.d.ts +1105 -0
  90. package/types/js/figure/FigurePrimitives/FigurePrimitives.d.ts +173 -0
  91. package/types/js/figure/FigurePrimitives/Generic.d.ts +5 -0
  92. package/types/js/figure/FigurePrimitives/Text.d.ts +17 -0
  93. package/types/js/figure/FontManager.d.ts +113 -0
  94. package/types/js/figure/Gesture.d.ts +39 -0
  95. package/types/js/figure/Recorder/Recorder.d.ts +291 -0
  96. package/types/js/figure/Recorder/parseState.d.ts +3 -0
  97. package/types/js/figure/Recorder/recorder.worker.d.ts +1 -0
  98. package/types/js/figure/Recorder/state.d.ts +7 -0
  99. package/types/js/figure/SlideNavigator.d.ts +606 -0
  100. package/types/js/figure/TimeKeeper.d.ts +174 -0
  101. package/types/js/figure/geometries/arc.d.ts +18 -0
  102. package/types/js/figure/geometries/arrow.d.ts +215 -0
  103. package/types/js/figure/geometries/buffer.d.ts +4 -0
  104. package/types/js/figure/geometries/copy/copy.d.ts +178 -0
  105. package/types/js/figure/geometries/ellipse.d.ts +17 -0
  106. package/types/js/figure/geometries/line.d.ts +13 -0
  107. package/types/js/figure/geometries/lines/corners.d.ts +7 -0
  108. package/types/js/figure/geometries/lines/dashes.d.ts +23 -0
  109. package/types/js/figure/geometries/lines/lines.d.ts +31 -0
  110. package/types/js/figure/geometries/polygon/polygon.d.ts +12 -0
  111. package/types/js/figure/geometries/rectangle.d.ts +19 -0
  112. package/types/js/figure/geometries/triangle.d.ts +27 -0
  113. package/types/js/figure/webgl/Atlas.d.ts +42 -0
  114. package/types/js/figure/webgl/shaders.d.ts +143 -0
  115. package/types/js/figure/webgl/target.d.ts +9 -0
  116. package/types/js/figure/webgl/webgl.d.ts +54 -0
  117. package/types/js/tools/FunctionMap.d.ts +69 -0
  118. package/types/js/tools/color.d.ts +11 -0
  119. package/types/js/tools/colorNames.d.ts +2 -0
  120. package/types/js/tools/d2/polygon.d.ts +60 -0
  121. package/types/js/tools/d2/triangles.d.ts +0 -0
  122. package/types/js/tools/d3/cone.d.ts +57 -0
  123. package/types/js/tools/d3/cube.d.ts +26 -0
  124. package/types/js/tools/d3/cylinder.d.ts +45 -0
  125. package/types/js/tools/d3/line3.d.ts +55 -0
  126. package/types/js/tools/d3/prism.d.ts +49 -0
  127. package/types/js/tools/d3/revolve.d.ts +87 -0
  128. package/types/js/tools/d3/sphere.d.ts +33 -0
  129. package/types/js/tools/d3/surface.d.ts +47 -0
  130. package/types/js/tools/g2.d.ts +242 -0
  131. package/types/js/tools/geometry/Bounds.d.ts +446 -0
  132. package/types/js/tools/geometry/Line.d.ts +314 -0
  133. package/types/js/tools/geometry/Path.d.ts +67 -0
  134. package/types/js/tools/geometry/Plane.d.ts +201 -0
  135. package/types/js/tools/geometry/Point.d.ts +359 -0
  136. package/types/js/tools/geometry/Rect.d.ts +115 -0
  137. package/types/js/tools/geometry/Transform.d.ts +623 -0
  138. package/types/js/tools/geometry/angle.d.ts +105 -0
  139. package/types/js/tools/geometry/common.d.ts +9 -0
  140. package/types/js/tools/geometry/coordinates.d.ts +30 -0
  141. package/types/js/tools/geometry/deceleration.d.ts +13 -0
  142. package/types/js/tools/geometry/polygon.d.ts +4 -0
  143. package/types/js/tools/geometry/quaternion.d.ts +15 -0
  144. package/types/js/tools/geometry/scene.d.ts +282 -0
  145. package/types/js/tools/geometry/tools.d.ts +8 -0
  146. package/types/js/tools/geometry/types.d.ts +2 -0
  147. package/types/js/tools/getCssColors.d.ts +1 -0
  148. package/types/js/tools/getCssVariables.d.ts +4 -0
  149. package/types/js/tools/getImageData.d.ts +1 -0
  150. package/types/js/tools/getScssColors.d.ts +2 -0
  151. package/types/js/tools/htmlGenerator.d.ts +85 -0
  152. package/types/js/tools/m2.d.ts +24 -0
  153. package/types/js/tools/m3.d.ts +71 -0
  154. package/types/js/tools/math.d.ts +112 -0
  155. package/types/js/tools/morph.d.ts +651 -0
  156. package/types/js/tools/styleSheets.d.ts +3 -0
  157. package/types/js/tools/tools.d.ts +281 -0
  158. package/types/js/tools/types.d.ts +305 -0
  159. package/figureone.worker.js +0 -1
@@ -0,0 +1,623 @@
1
+ import { Point } from './Point';
2
+ import type { Type3DMatrix } from '../m3';
3
+ import type { TypeParsablePoint } from './Point';
4
+ import type { OBJ_TranslationPath } from './Path';
5
+ /**
6
+ * Orthonormal basis definition. Use either (i, j, k), (x, y, z) or
7
+ * (right, top, normal). They are identical, but different terminology may
8
+ * be useful for different contexts.
9
+ * @property {TypeParsablePoint} [i]
10
+ * @property {TypeParsablePoint} [j]
11
+ * @property {TypeParsablePoint} [k]
12
+ * @property {TypeParsablePoint} [x]
13
+ * @property {TypeParsablePoint} [y]
14
+ * @property {TypeParsablePoint} [z]
15
+ * @property {TypeParsablePoint} [right]
16
+ * @property {TypeParsablePoint} [top]
17
+ * @property {TypeParsablePoint} [normal]
18
+ * @interface
19
+ * @group Misc Geometry
20
+ */
21
+ export type TypeBasisObjectDefinition = {
22
+ i?: TypeParsablePoint;
23
+ j?: TypeParsablePoint;
24
+ k?: TypeParsablePoint;
25
+ x?: TypeParsablePoint;
26
+ y?: TypeParsablePoint;
27
+ z?: TypeParsablePoint;
28
+ right?: TypeParsablePoint;
29
+ top?: TypeParsablePoint;
30
+ normal?: TypeParsablePoint;
31
+ };
32
+ /**
33
+ * Rotation transform component definition. First number is the rotation value
34
+ * an the next three numbers define the x, y, and z components of the axis
35
+ * vector.
36
+ *
37
+ * `['r', number, number, number, number]`
38
+ * @group Misc Geometry
39
+ */
40
+ export type TypeTransformRotation = ['r', number, number, number, number];
41
+ /**
42
+ * Direction transform component. The numbers are the xyz components of the
43
+ * vector to direct to.
44
+ *
45
+ * This is equivalent to an axis rotation where the axis is the normal
46
+ * to the plane formed by [1, 0, 0] and `d`
47
+ *
48
+ * `['d', number, number, number]`
49
+ * @group Misc Geometry
50
+ */
51
+ export type TypeTransformDirection = ['d', number, number, number];
52
+ /**
53
+ * Translation transform component. The numbers are the xy(z) components of the
54
+ * translation.
55
+ *
56
+ * `['t', number, number, number]`
57
+ * @group Misc Geometry
58
+ */
59
+ export type TypeTransformTranslation = ['t', number, number, number];
60
+ /**
61
+ * Scale transform component. Using just a single number scales xyz components
62
+ * equally. Using two numbers scales the xy components and sets z to 1. Using
63
+ * three numbers defines each xyz component.
64
+ *
65
+ * `['s', number, number, number] | ['s', number, number] | ['s', number]`
66
+ * @group Misc Geometry
67
+ */
68
+ export type TypeTransformScale = ['s', number, number, number];
69
+ /**
70
+ * Custom transform component defined by a 4x4 matrix.
71
+ *
72
+ * `['c', number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number]`
73
+ * @group Misc Geometry
74
+ */
75
+ export type TypeTransformCustom = ['c', number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
76
+ /**
77
+ * Change of basis transform component definition. This is a change of basis
78
+ * from the standard basis: i: (1, 0, 0), j: (0, 1, 0), k: (0, 0, 1).
79
+ *
80
+ * `['b', number, number, number, number, number, number, number, number, number]`
81
+ * @group Misc Geometry
82
+ */
83
+ export type TypeTransformBasis = ['b', number, number, number, number, number, number, number, number, number];
84
+ /**
85
+ * Change of basis transform component definition relative to a specified
86
+ * initial basis.
87
+ *
88
+ * `['bb', number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number]`
89
+ * @group Misc Geometry
90
+ */
91
+ export type TypeTransformBasisToBasis = ['bb', number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
92
+ /**
93
+ * Change of basis transform component definition. This is a change of basis
94
+ * from the standard basis: i: (1, 0, 0), j: (0, 1, 0), k: (0, 0, 1).
95
+ *
96
+ * A basis can be defined with either the definition object
97
+ * {@link TypeBasisObjectDefinition} where only two vectors need to be defined
98
+ * (the third will be automatically calculated), or with 9 numbers where all
99
+ * three vectors need to be defined in (ix, iy, iz, jx, jy, jz, kx, ky, kz)
100
+ * order.
101
+ *
102
+ * ` ['b', `{@link TypeBasisObjectDefinition}`] | ` {@link TypeTransformBasis}
103
+ * @group Misc Geometry
104
+ */
105
+ export type TypeTransformBasisUserDefinition = ['b', TypeBasisObjectDefinition] | TypeTransformBasis;
106
+ /**
107
+ * Change of basis transform component definition relative to a specified
108
+ * initial basis.
109
+ *
110
+ * A basis can be defined with either the definition object
111
+ * {@link TypeBasisObjectDefinition} where only two vectors need to be defined
112
+ * (the third will be automatically calculated), or with 9 numbers where all
113
+ * three vectors need to be defined in (ix, iy, iz, jx, jy, jz, kx, ky, kz)
114
+ * order.
115
+ *
116
+ * In either case, the first object or nine numbers define the initial basis
117
+ * and the second object or nin numbers define the basis to move to.
118
+ *
119
+ * ` ['bb', `{@link TypeBasisObjectDefinition}`, `{@link TypeBasisObjectDefinition}`] | ` {@link TypeTransformBasisToBasis}
120
+ * @group Misc Geometry
121
+ */
122
+ export type TypeTransformBasisToBasisUserDefinition = ['bb', TypeBasisObjectDefinition, TypeBasisObjectDefinition] | TypeTransformBasisToBasis;
123
+ /**
124
+ * Transform Component.
125
+ *
126
+ * {@link TypeTransformRotation} | {@link TypeTransformDirection} | {@link TypeTransformTranslation} | {@link TypeTransformScale} | {@link TypeTransformCustom} | {@link TypeTransformBasis} | {@link TypeTransformBasisToBasis}
127
+ * @group Misc Geometry
128
+ */
129
+ export type TypeTransformComponent = TypeTransformRotation | TypeTransformDirection | TypeTransformTranslation | TypeTransformScale | TypeTransformCustom | TypeTransformBasis | TypeTransformBasisToBasis;
130
+ /**
131
+ * Transform component defined by a user.
132
+ *
133
+ * {@link TypeTransformRotation} | {@link TypeTransformDirection} | {@link TypeTransformTranslation} | {@link TypeTransformScale} | {@link TypeTransformCustom} | {@link TypeTransformBasisUserDefinition} | {@link TypeTransformBasisToBasisUserDefinition}
134
+ * @group Misc Geometry
135
+ */
136
+ export type TypeTransformComponentUserDefinition = TypeTransformRotation | TypeTransformDirection | TypeTransformTranslation | TypeTransformScale | TypeTransformCustom | TypeTransformBasisUserDefinition | TypeTransformBasisToBasisUserDefinition | ['r', number] | ['t', number, number] | ['s', number] | ['s', number, number];
137
+ /**
138
+ * Transform array definition.
139
+ *
140
+ *
141
+ *
142
+ * `Array<`{@link TypeTransformComponent}`>`
143
+ * @group Misc Geometry
144
+ */
145
+ export type TypeTransformDefinition = Array<TypeTransformComponent>;
146
+ /**
147
+ * Transform array user definition.
148
+ *
149
+ * `Array<`{@link TypeTransformComponent}` | `{@link TypeTransformBasisUserDefinition}` | `{@link TypeTransformBasisToBasisUserDefinition}`>`
150
+ * @group Misc Geometry
151
+ */
152
+ export type TypeTransformUserDefinition = Array<TypeTransformComponentUserDefinition>;
153
+ /**
154
+ * Transform state definition of a {@link Transform} that represents an array
155
+ * of transform components.
156
+ *
157
+ * ```
158
+ * {
159
+ * f1Type: 'pl',
160
+ * state: TypeTransformDefinition
161
+ * }
162
+ * ```
163
+ * @see {@link TypeTransformDefinition}
164
+ * @group Misc Geometry
165
+ */
166
+ export type TypeF1DefTransform = {
167
+ f1Type: 'tf';
168
+ state: TypeTransformDefinition;
169
+ };
170
+ export type TypeTransformComponentName = 't' | 's' | 'b' | 'bb' | 'c' | 'd' | 'r';
171
+ /**
172
+ * A transform is defined with either:
173
+ * - an instantiated {@link Transform}
174
+ * - an array of transform components {@link TypeTransformUserDefinition}
175
+ * - a single transform component {@link TypeTransformComponentUserDefinition}
176
+ * - a recorder state definition {@link TypeF1DefTransform}
177
+ * - A string representation of all options except the first
178
+ *
179
+ * @example
180
+ * // t1, t2 and t3 are all equal transforms
181
+ * const t1 = new Fig.Transform().scale(2).rotate(Math.PI / 2).translate(1, 1);
182
+ * const t2 = new Fig.Transform([['s', 2], ['r', Math.PI / 2], ['t', 1, 1]]);
183
+ * const t3 = Fig.getTransform([['s', 2], ['r', Math.PI / 2], ['t', 1, 1]]);
184
+ *
185
+ * @see See {@link Transform} for a summary of transfom components available.
186
+ * @group Geometry
187
+ */
188
+ export type TypeParsableTransform = TypeTransformUserDefinition | TypeTransformComponentUserDefinition | Transform | TypeF1DefTransform;
189
+ export type TypeTransformValue = number | Array<number> | {
190
+ scale?: number;
191
+ position?: number;
192
+ translation?: number;
193
+ rotation?: number;
194
+ custom?: number;
195
+ };
196
+ /**
197
+ * A Transform is a chain or cascade of transform components, such as rotations
198
+ * and translations.
199
+ *
200
+ * The transform components cascade to form a single 3D transform matrix in
201
+ * homogenous coordinates - meaning the result is a 4x4 matrix. This matrix can
202
+ * be used to transform a point in space.
203
+ *
204
+ * There are several built in transform components:
205
+ *
206
+ * - Translation
207
+ * - Scale
208
+ * - Rotation
209
+ * - Direction transform
210
+ * - Custom (where a specific matrix can be defined)
211
+ * - Change of basis from standard basis
212
+ * - Change of basis from an initial basis
213
+ *
214
+ * Matrix multiplication is not commutative, and so chaining transforms is not
215
+ * commutative. This means the order of components is important.
216
+ *
217
+ * For example, if a point (1, 0) is first translated by (1, 0) and then
218
+ * rotated by π / 2, then it will start at (1, 0), then move to (2, 0), then
219
+ * rotate to (0, 2).
220
+ *
221
+ * In comparison if the same point is first rotated by π / 2 then translated by
222
+ * (1, 0) it will start at (1, 0), then rotate to (0, 1), then move to (1, 1).
223
+ *
224
+ * In this Transform object, the order that components are defined, is the order
225
+ * the resulting transform will represent.
226
+ *
227
+ * A transform can be created by either chaining transform component methods on
228
+ * an instantiated Transform object, or using an array definition of
229
+ * components. For example the following two transforms are the same:
230
+ * ```
231
+ * const t1 = new Transform().scale(1).translate(1, 0);
232
+ * const t2 = new Transform([['s', 1], ['t', 1, 0]]);
233
+ * ```
234
+ *
235
+ * @see See {@link TypeParsableTransform} for the different ways to define a transform.
236
+ * @group Geometry
237
+ */
238
+ declare class Transform {
239
+ def: TypeTransformDefinition;
240
+ mat: Type3DMatrix;
241
+ translationIndex: number;
242
+ _type: 'transform';
243
+ /**
244
+ * @param {TypeParsableTransform} chain chain of transform components.
245
+ */
246
+ constructor(chain?: TypeParsableTransform);
247
+ _state(options?: {
248
+ precision: number;
249
+ }): {
250
+ f1Type: string;
251
+ state: TypeTransformDefinition;
252
+ };
253
+ /**
254
+ * Query if transform has a specific component.
255
+ * @param {TypeTransformComponentName} componentName
256
+ * @return {boolean} `true` if component name exists
257
+ */
258
+ hasComponent(componentName: TypeTransformComponentName): boolean;
259
+ /**
260
+ * Set a component at a speicific index of the transform definition.
261
+ *
262
+ * @param {number} index index to set component
263
+ * @param {TypeTransformComponent} def component definition
264
+ *
265
+ * @return {Transform} this transform
266
+ */
267
+ setComponent(index: number, def: TypeTransformComponent): this;
268
+ /**
269
+ * Add a transform component to the chain
270
+ *
271
+ * @param {TypeTransformComponent} def component definition
272
+ * @return {Transform} this transform
273
+ */
274
+ addComponent(def: TypeTransformComponent): this;
275
+ /**
276
+ * Return a duplicate transform with an added translation component.
277
+ *
278
+ * The translation can either be defined as:
279
+ *
280
+ * * A point
281
+ * * x, y values (z will be automatically set to 0)
282
+ * * x, y, and z values
283
+ *
284
+ * @param {number | TypeParsablePoint} xOrTranslation
285
+ * @param {number} y
286
+ * @param {number} z
287
+ *
288
+ * @return {Transform}
289
+ */
290
+ translate(xOrTranslation?: number | TypeParsablePoint, y?: number, z?: number): this;
291
+ /**
292
+ * Return a duplicate transform with an added rotation component.
293
+ * @param {number} rotation
294
+ * @param {number | TypeParsablePoint | 'x' | 'y' | 'z'} axisOrX (`z`)
295
+ * @param {number} y (`0`)
296
+ * @param {number} z (`0`)
297
+ * @return {Transform}
298
+ */
299
+ rotate(rotation: number, axisOrX?: number | TypeParsablePoint | 'x' | 'y' | 'z', y?: number, z?: number): this;
300
+ /**
301
+ * Return a duplicate transform with an added direction transform component.
302
+ *
303
+ * @param {number | TypeParsablePoint} xOrDirection
304
+ * @param {number} y
305
+ * @param {number} z
306
+ * @return {Transform}
307
+ */
308
+ direction(xOrDirection: number | TypeParsablePoint, y?: number, z?: number): this;
309
+ /**
310
+ * Return a duplicate transform with an added change of basis from the
311
+ * standard basis transform component.
312
+ *
313
+ * @param {TypeBasisObjectDefinition} toBasis
314
+ * @return {Transform}
315
+ */
316
+ basis(toBasis: TypeBasisObjectDefinition): this;
317
+ /**
318
+ * Return a duplicate transform with an added change of basis transform
319
+ * component.
320
+ *
321
+ * @param {TypeBasisObjectDefinition} fromeBasis
322
+ * @param {TypeBasisObjectDefinition} toBasis
323
+ * @return {Transform}
324
+ */
325
+ basisToBasis(fromBasis: TypeBasisObjectDefinition, toBasis: TypeBasisObjectDefinition): this;
326
+ /**
327
+ * Return a duplicate transform with an added custom transform
328
+ * component.
329
+ *
330
+ * @param {Type3DMatrix} matrix
331
+ * @return {Transform}
332
+ */
333
+ custom(matrix: Type3DMatrix): this;
334
+ /**
335
+ * Return a duplicate transform with an added scale transform component
336
+ * @param {number | TypeParsablePoint} sOrSxOrPoint
337
+ * @param {number} sy
338
+ * @param {number} sz
339
+ * @return {Transform}
340
+ */
341
+ scale(sOrSxOrPoint: number | TypeParsablePoint, sy?: number | null, sz?: number): this;
342
+ calcMatrix(defStart?: number, defEnd?: number): Type3DMatrix;
343
+ calcAndSetMatrix(): void;
344
+ /**
345
+ * Get the nth transform component index of `type`.
346
+ * @param {TypeTransformComponentName} type
347
+ * @param {number} n (`0`)
348
+ * @return {number} index of component
349
+ */
350
+ getComponentIndex(type: TypeTransformComponentName | Array<TypeTransformComponentName>, n?: number): number;
351
+ /**
352
+ * Clip all rotation (2D, axis, x, y, z rotations) transform components
353
+ * within this transform chain angles between 0º-360º, -180º-180º, or not at
354
+ * all (`null`)
355
+ *
356
+ * Only angle values are clipped. The axis values of the axis rotation is not
357
+ * changed.
358
+ *
359
+ * @param {'0to360' | '-180to180' | null} clipTo
360
+ */
361
+ clipRotation(clipTo: '0to360' | '-180to180' | null): void;
362
+ /**
363
+ * Update the nth translation transform component with a new translation.
364
+ * @param {TypeParsablePoint} translation
365
+ * @param {number} n
366
+ * @return {Transform}
367
+ */
368
+ updateTranslation(translation: TypeParsablePoint, n?: number): this;
369
+ updateComponent(def: TypeTransformComponent, n: number): this;
370
+ /**
371
+ * Return a linearly interpolated transform between this transform and
372
+ * `delta` at some `percent` between the two.
373
+ *
374
+ * For translation transform components, interpolation can either be
375
+ * `'linear'` or '`curved'`.
376
+ * @param {Transform} delta delta transform
377
+ * @param {number} percent percent to interpolate where 0 is this transform
378
+ * and 1 is delta transform
379
+ * @param {'linear' | 'curved' | 'curve' = 'linear'} translationStyle
380
+ * translation style for translation components only
381
+ * @param {OBJ_TranslationPath = {}} translationOptions
382
+ * translation options for translation components only
383
+ * @return {Transform}
384
+ */
385
+ toDelta(delta: Transform, percent: number, translationStyle?: 'linear' | 'curved' | 'curve', translationOptions?: OBJ_TranslationPath): Transform;
386
+ /**
387
+ * Retrieve the nth translation transform component.
388
+ * @param {number} n (`0`)
389
+ * @return {Point}
390
+ */
391
+ t(n?: number): Point | null;
392
+ /**
393
+ * Retrieve the nth scale transform component.
394
+ * @param {number} n (`0`)
395
+ * @return {Point}
396
+ */
397
+ s(n?: number): Point | null;
398
+ /**
399
+ * Retrieve the nth rotation transform component rotation value.
400
+ *
401
+ * @param {number} n (`0`)
402
+ * @return {Point}
403
+ */
404
+ r(n?: number): number;
405
+ /**
406
+ * Retrieve the nth rotation transform component axis.
407
+ *
408
+ * @param {number} n (`0`)
409
+ * @return {Point}
410
+ */
411
+ ra(n?: number): Point;
412
+ /**
413
+ * Retrieve the nth direction transform component.
414
+ * @param {number} n (`0`)
415
+ * @return {Point}
416
+ */
417
+ d(n?: number): (number | "r")[] | (number | "d")[] | (number | "t")[] | (number | "s")[] | (number | "c")[] | (number | "b")[] | (number | "bb")[];
418
+ /**
419
+ * Retrieve the nth custom transform component.
420
+ * @param {number} n (`0`)
421
+ * @return {Point}
422
+ */
423
+ c(n?: number): (number | "r")[] | (number | "d")[] | (number | "t")[] | (number | "s")[] | (number | "c")[] | (number | "b")[] | (number | "bb")[];
424
+ /**
425
+ * Retrieve the nth change of basis from standard basis transform component.
426
+ * @param {number} n (`0`)
427
+ * @return {Point}
428
+ */
429
+ b(n?: number): (number | "r")[] | (number | "d")[] | (number | "t")[] | (number | "s")[] | (number | "c")[] | (number | "b")[] | (number | "bb")[];
430
+ /**
431
+ * Retrieve the nth change of basis transform component.
432
+ * @param {number} n (`0`)
433
+ * @return {Point}
434
+ */
435
+ bb(n?: number): (number | "r")[] | (number | "d")[] | (number | "t")[] | (number | "s")[] | (number | "c")[] | (number | "b")[] | (number | "bb")[];
436
+ /**
437
+ * Update the nth scale transform component with a new scale.
438
+ * @param {TypeParsablePoint} scale
439
+ * @param {number} n
440
+ * @return {Transform}
441
+ */
442
+ updateScale(scale: number | TypeParsablePoint, n?: number): this;
443
+ /**
444
+ * Update the nth rotation transform component.
445
+ * @param {number} r
446
+ * @param {TypeParsablePoint} axis
447
+ * @param {number} n
448
+ * @return {Transform}
449
+ */
450
+ updateRotation(r: number, axis?: TypeParsablePoint | null, n?: number): this;
451
+ /**
452
+ * Update the nth direction transform component.
453
+ * @param {number} d
454
+ * @param {number} n
455
+ * @return {Transform}
456
+ */
457
+ updateDirection(d: TypeParsablePoint, n?: number): this;
458
+ /**
459
+ * Update the nth custom transform component.
460
+ * @param {Type3DMatrix} c
461
+ * @param {number} n
462
+ * @return {Transform}
463
+ */
464
+ updateCustom(c: Type3DMatrix, n?: number): this;
465
+ /**
466
+ * Update the nth change of basis from the standard basis transform component.
467
+ * @param {TypeBasisObjectDefinition} b
468
+ * @param {number} n
469
+ * @return {Transform}
470
+ */
471
+ updateBasis(b: TypeBasisObjectDefinition, n?: number): this;
472
+ /**
473
+ * Update the nth change of basis transform component.
474
+ * @param {TypeBasisObjectDefinition} fromBasis
475
+ * @param {TypeBasisObjectDefinition} toBasis
476
+ * @param {number} n
477
+ * @return {Transform}
478
+ */
479
+ updateBasisToBasis(fromBasis: TypeBasisObjectDefinition, toBasis: TypeBasisObjectDefinition, n?: number): this;
480
+ /**
481
+ * Return the matrix that respresents the cascaded transform chain
482
+ * @return {Type3DMatrix}
483
+ */
484
+ m(): Type3DMatrix;
485
+ /**
486
+ * Return the matrix that respresents the cascaded transform chain
487
+ * @param {number | null} precision round the matrix to some precision or
488
+ * `null` for no rounding (`null`)
489
+ * @return {Type3DMatrix}
490
+ */
491
+ matrix(precision?: number | null): Type3DMatrix;
492
+ /**
493
+ * `true` if `transformToCompare` has the same order of transform components.
494
+ * @param {TypeParsableTransform} transformToCompare
495
+ * @return {boolean}
496
+ */
497
+ isEqualShapeTo(transformToCompare: TypeParsableTransform): boolean;
498
+ /**
499
+ * `true` if `transformToCompare` is equal to this transform within some
500
+ * `precision`.
501
+ * @param {TypeParsableTransform} transformToCompare
502
+ * @return {boolean}
503
+ */
504
+ isEqualTo(transformToCompare: TypeParsableTransform, precision?: number): boolean;
505
+ /**
506
+ * `true` if `transformToCompare` is wihtin some `delta` of this transform.
507
+ * `isEqualTo` rounds the values to some precision to compare values. In
508
+ * comparison this will directly compare the delta between values. This may
509
+ * be more useful than rounding when values are close to rounding thresholds.
510
+ * @param {TypeParsableTransform} transformToCompare
511
+ * @return {boolean}
512
+ */
513
+ isWithinDelta(transformToCompare: TypeParsableTransform, delta?: number): boolean;
514
+ /**
515
+ * Subtract each corresponding transform component. Both transforms must
516
+ * have the same shape.
517
+ *
518
+ * @param {TypeParsableTransform} transformToSubtract
519
+ * @see <a href="#transformisequalshapeto">Transform.isEqualShapeTo</a>
520
+ */
521
+ sub(transformToSubtract?: TypeParsableTransform): Transform;
522
+ /**
523
+ * Subtract each corresponding transform component. Both transforms must
524
+ * have the same shape.
525
+ *
526
+ * @param {TypeParsableTransform} transformToAdd
527
+ * @see <a href="#transformisequalshapeto">Transform.isEqualShapeTo</a>
528
+ */
529
+ add(transformToAdd?: TypeParsableTransform): Transform;
530
+ /**
531
+ * Multiply each corresponding transform component. Both transforms must
532
+ * have the same shape.
533
+ *
534
+ * @param {TypeParsableTransform} transformToMultiply
535
+ * @see <a href="#transformisequalshapeto">Transform.isEqualShapeTo</a>
536
+ */
537
+ mul(transformToMultiply?: TypeParsableTransform): Transform;
538
+ /**
539
+ * Cascade two transforms together such that this transform transforms
540
+ * the input transform. In other words, the transform components of the
541
+ * input transform will performed first before this transform.
542
+ *
543
+ * @param {TypeParsableTransform} transform
544
+ * @return {Transform}
545
+ */
546
+ transform(transform: TypeParsableTransform): Transform;
547
+ /**
548
+ * Cascade two transforms together such that this transform is transformed
549
+ * by the input transform. In other words, the this transform's components
550
+ * of will performed first before the input transform transform.
551
+ *
552
+ * @param {TypeParsableTransform} transform
553
+ * @return {Transform}
554
+ */
555
+ transformBy(transform: TypeParsableTransform): Transform;
556
+ /**
557
+ * Return a duplicate transform with all values rounded to some precision.
558
+ *
559
+ * @param {number} precision (`8`)
560
+ * @return Transform
561
+ */
562
+ round(precision?: number): Transform;
563
+ clipMag(zeroThresholdTransform: TypeTransformValue, maxTransform: TypeTransformValue, vector?: boolean): Transform;
564
+ constant(constant?: number): Transform;
565
+ zero(): Transform;
566
+ /**
567
+ * `true` if all transforms within the transform chain are below the
568
+ * `zeroThreshold`
569
+ *
570
+ * @param {number} zeroThreshold (`0`)
571
+ * @return {boolean}
572
+ */
573
+ isZero(zeroThreshold?: number): boolean;
574
+ /**
575
+ * Return a duplicate transform.
576
+ * @return {Transform}
577
+ */
578
+ _dup(): Transform;
579
+ velocity(previousTransform: Transform, deltaTime: number, zeroThreshold: TypeTransformValue, maxTransform: TypeTransformValue): Transform;
580
+ /**
581
+ * Return a duplicate transform chain where all transform components are
582
+ * the same component type but with identity values.
583
+ * @return {Transform}
584
+ */
585
+ identity(): Transform;
586
+ }
587
+ /**
588
+ * Test if a value can be parsed to create a transform.
589
+ *
590
+ * @see {@link TypeParsableTransform}
591
+ * @param {any} value
592
+ * @return {boolean}
593
+ * @group Misc Geometry
594
+ */
595
+ declare function isParsableTransform(value: any): boolean;
596
+ declare function getMatrix(matrixOrTransform: TypeParsableTransform | Type3DMatrix): Type3DMatrix;
597
+ /**
598
+ * Convert a parsable transform definition to a Transform.
599
+ * @param {TypeParsableTransform} t
600
+ * @return {Transform}
601
+ * @group Misc Geometry
602
+ */
603
+ declare function getTransform(t: TypeParsableTransform): Transform;
604
+ declare function transformValueToArray(transformValue: TypeTransformValue, transform: Transform): Array<number>;
605
+ declare function directionToAxisAngle(direction: TypeParsablePoint | TypeTransformDirection, axisIfCollinear?: TypeParsablePoint): {
606
+ angle: number;
607
+ axis: Point;
608
+ };
609
+ /**
610
+ * Calculate the rotation axis and angle required to move from one
611
+ * vector to another.
612
+ *
613
+ * @param {TypeParsablePoint} fromVector
614
+ * @param {TypeParsablePoint} toVector
615
+ * @param {TypeParsablePoint | null} axisIfCollinear
616
+ * @return {{axis: Point, angle: number}}
617
+ * @group Misc Geometry
618
+ */
619
+ declare function angleFromVectors(fromVector: TypeParsablePoint | TypeTransformDirection, toVector: TypeParsablePoint | TypeTransformDirection, axisIfCollinear?: TypeParsablePoint | null): {
620
+ angle: number;
621
+ axis: Point;
622
+ };
623
+ export { getTransform, Transform, isParsableTransform, transformValueToArray, getMatrix, angleFromVectors, directionToAxisAngle, };