@mlightcad/geometry-engine 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 (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/dist/geometry-engine.js +10186 -0
  4. package/dist/geometry-engine.umd.cjs +4 -0
  5. package/lib/geometry/AcGeArea2d.d.ts +61 -0
  6. package/lib/geometry/AcGeArea2d.d.ts.map +1 -0
  7. package/lib/geometry/AcGeArea2d.js +174 -0
  8. package/lib/geometry/AcGeArea2d.js.map +1 -0
  9. package/lib/geometry/AcGeCircArc2d.d.ts +108 -0
  10. package/lib/geometry/AcGeCircArc2d.d.ts.map +1 -0
  11. package/lib/geometry/AcGeCircArc2d.js +412 -0
  12. package/lib/geometry/AcGeCircArc2d.js.map +1 -0
  13. package/lib/geometry/AcGeCircArc3d.d.ts +138 -0
  14. package/lib/geometry/AcGeCircArc3d.d.ts.map +1 -0
  15. package/lib/geometry/AcGeCircArc3d.js +447 -0
  16. package/lib/geometry/AcGeCircArc3d.js.map +1 -0
  17. package/lib/geometry/AcGeCurve2d.d.ts +85 -0
  18. package/lib/geometry/AcGeCurve2d.d.ts.map +1 -0
  19. package/lib/geometry/AcGeCurve2d.js +213 -0
  20. package/lib/geometry/AcGeCurve2d.js.map +1 -0
  21. package/lib/geometry/AcGeCurve3d.d.ts +27 -0
  22. package/lib/geometry/AcGeCurve3d.d.ts.map +1 -0
  23. package/lib/geometry/AcGeCurve3d.js +29 -0
  24. package/lib/geometry/AcGeCurve3d.js.map +1 -0
  25. package/lib/geometry/AcGeEllipseArc2d.d.ts +105 -0
  26. package/lib/geometry/AcGeEllipseArc2d.d.ts.map +1 -0
  27. package/lib/geometry/AcGeEllipseArc2d.js +292 -0
  28. package/lib/geometry/AcGeEllipseArc2d.js.map +1 -0
  29. package/lib/geometry/AcGeEllipseArc3d.d.ts +141 -0
  30. package/lib/geometry/AcGeEllipseArc3d.d.ts.map +1 -0
  31. package/lib/geometry/AcGeEllipseArc3d.js +442 -0
  32. package/lib/geometry/AcGeEllipseArc3d.js.map +1 -0
  33. package/lib/geometry/AcGeLine2d.d.ts +56 -0
  34. package/lib/geometry/AcGeLine2d.d.ts.map +1 -0
  35. package/lib/geometry/AcGeLine2d.js +125 -0
  36. package/lib/geometry/AcGeLine2d.js.map +1 -0
  37. package/lib/geometry/AcGeLine3d.d.ts +134 -0
  38. package/lib/geometry/AcGeLine3d.d.ts.map +1 -0
  39. package/lib/geometry/AcGeLine3d.js +291 -0
  40. package/lib/geometry/AcGeLine3d.js.map +1 -0
  41. package/lib/geometry/AcGeLoop2d.d.ts +59 -0
  42. package/lib/geometry/AcGeLoop2d.d.ts.map +1 -0
  43. package/lib/geometry/AcGeLoop2d.js +141 -0
  44. package/lib/geometry/AcGeLoop2d.js.map +1 -0
  45. package/lib/geometry/AcGePolyline2d.d.ts +90 -0
  46. package/lib/geometry/AcGePolyline2d.d.ts.map +1 -0
  47. package/lib/geometry/AcGePolyline2d.js +224 -0
  48. package/lib/geometry/AcGePolyline2d.js.map +1 -0
  49. package/lib/geometry/AcGeShape.d.ts +12 -0
  50. package/lib/geometry/AcGeShape.d.ts.map +1 -0
  51. package/lib/geometry/AcGeShape.js +22 -0
  52. package/lib/geometry/AcGeShape.js.map +1 -0
  53. package/lib/geometry/AcGeShape2d.d.ts +31 -0
  54. package/lib/geometry/AcGeShape2d.d.ts.map +1 -0
  55. package/lib/geometry/AcGeShape2d.js +51 -0
  56. package/lib/geometry/AcGeShape2d.js.map +1 -0
  57. package/lib/geometry/AcGeShape3d.d.ts +33 -0
  58. package/lib/geometry/AcGeShape3d.d.ts.map +1 -0
  59. package/lib/geometry/AcGeShape3d.js +52 -0
  60. package/lib/geometry/AcGeShape3d.js.map +1 -0
  61. package/lib/geometry/AcGeSpline3d.d.ts +77 -0
  62. package/lib/geometry/AcGeSpline3d.d.ts.map +1 -0
  63. package/lib/geometry/AcGeSpline3d.js +221 -0
  64. package/lib/geometry/AcGeSpline3d.js.map +1 -0
  65. package/lib/geometry/index.d.ts +13 -0
  66. package/lib/geometry/index.d.ts.map +1 -0
  67. package/lib/geometry/index.js +13 -0
  68. package/lib/geometry/index.js.map +1 -0
  69. package/lib/index.d.ts +4 -0
  70. package/lib/index.d.ts.map +1 -0
  71. package/lib/index.js +4 -0
  72. package/lib/index.js.map +1 -0
  73. package/lib/math/AcGeBox2d.d.ts +173 -0
  74. package/lib/math/AcGeBox2d.d.ts.map +1 -0
  75. package/lib/math/AcGeBox2d.js +289 -0
  76. package/lib/math/AcGeBox2d.js.map +1 -0
  77. package/lib/math/AcGeBox3d.d.ts +195 -0
  78. package/lib/math/AcGeBox3d.d.ts.map +1 -0
  79. package/lib/math/AcGeBox3d.js +378 -0
  80. package/lib/math/AcGeBox3d.js.map +1 -0
  81. package/lib/math/AcGeEuler.d.ts +133 -0
  82. package/lib/math/AcGeEuler.d.ts.map +1 -0
  83. package/lib/math/AcGeEuler.js +358 -0
  84. package/lib/math/AcGeEuler.js.map +1 -0
  85. package/lib/math/AcGeMatrix2d.d.ts +203 -0
  86. package/lib/math/AcGeMatrix2d.d.ts.map +1 -0
  87. package/lib/math/AcGeMatrix2d.js +393 -0
  88. package/lib/math/AcGeMatrix2d.js.map +1 -0
  89. package/lib/math/AcGeMatrix3d.d.ts +279 -0
  90. package/lib/math/AcGeMatrix3d.d.ts.map +1 -0
  91. package/lib/math/AcGeMatrix3d.js +1037 -0
  92. package/lib/math/AcGeMatrix3d.js.map +1 -0
  93. package/lib/math/AcGePlane.d.ts +131 -0
  94. package/lib/math/AcGePlane.d.ts.map +1 -0
  95. package/lib/math/AcGePlane.js +218 -0
  96. package/lib/math/AcGePlane.js.map +1 -0
  97. package/lib/math/AcGePoint.d.ts +4 -0
  98. package/lib/math/AcGePoint.d.ts.map +1 -0
  99. package/lib/math/AcGePoint.js +2 -0
  100. package/lib/math/AcGePoint.js.map +1 -0
  101. package/lib/math/AcGePoint2d.d.ts +17 -0
  102. package/lib/math/AcGePoint2d.d.ts.map +1 -0
  103. package/lib/math/AcGePoint2d.js +40 -0
  104. package/lib/math/AcGePoint2d.js.map +1 -0
  105. package/lib/math/AcGePoint3d.d.ts +18 -0
  106. package/lib/math/AcGePoint3d.d.ts.map +1 -0
  107. package/lib/math/AcGePoint3d.js +43 -0
  108. package/lib/math/AcGePoint3d.js.map +1 -0
  109. package/lib/math/AcGeQuaternion.d.ts +230 -0
  110. package/lib/math/AcGeQuaternion.d.ts.map +1 -0
  111. package/lib/math/AcGeQuaternion.js +666 -0
  112. package/lib/math/AcGeQuaternion.js.map +1 -0
  113. package/lib/math/AcGeVector.d.ts +9 -0
  114. package/lib/math/AcGeVector.d.ts.map +1 -0
  115. package/lib/math/AcGeVector.js +2 -0
  116. package/lib/math/AcGeVector.js.map +1 -0
  117. package/lib/math/AcGeVector2d.d.ts +361 -0
  118. package/lib/math/AcGeVector2d.d.ts.map +1 -0
  119. package/lib/math/AcGeVector2d.js +622 -0
  120. package/lib/math/AcGeVector2d.js.map +1 -0
  121. package/lib/math/AcGeVector3d.d.ts +493 -0
  122. package/lib/math/AcGeVector3d.d.ts.map +1 -0
  123. package/lib/math/AcGeVector3d.js +868 -0
  124. package/lib/math/AcGeVector3d.js.map +1 -0
  125. package/lib/math/index.d.ts +14 -0
  126. package/lib/math/index.d.ts.map +1 -0
  127. package/lib/math/index.js +14 -0
  128. package/lib/math/index.js.map +1 -0
  129. package/lib/util/AcGeConstants.d.ts +19 -0
  130. package/lib/util/AcGeConstants.d.ts.map +1 -0
  131. package/lib/util/AcGeConstants.js +25 -0
  132. package/lib/util/AcGeConstants.js.map +1 -0
  133. package/lib/util/AcGeGeometryUtil.d.ts +16 -0
  134. package/lib/util/AcGeGeometryUtil.d.ts.map +1 -0
  135. package/lib/util/AcGeGeometryUtil.js +56 -0
  136. package/lib/util/AcGeGeometryUtil.js.map +1 -0
  137. package/lib/util/AcGeMathUtil.d.ts +203 -0
  138. package/lib/util/AcGeMathUtil.d.ts.map +1 -0
  139. package/lib/util/AcGeMathUtil.js +585 -0
  140. package/lib/util/AcGeMathUtil.js.map +1 -0
  141. package/lib/util/AcGeTol.d.ts +91 -0
  142. package/lib/util/AcGeTol.d.ts.map +1 -0
  143. package/lib/util/AcGeTol.js +83 -0
  144. package/lib/util/AcGeTol.js.map +1 -0
  145. package/lib/util/index.d.ts +5 -0
  146. package/lib/util/index.d.ts.map +1 -0
  147. package/lib/util/index.js +5 -0
  148. package/lib/util/index.js.map +1 -0
  149. package/package.json +42 -0
@@ -0,0 +1,447 @@
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __values = (this && this.__values) || function(o) {
17
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
18
+ if (m) return m.call(o);
19
+ if (o && typeof o.length === "number") return {
20
+ next: function () {
21
+ if (o && i >= o.length) o = void 0;
22
+ return { value: o && o[i++], done: !o };
23
+ }
24
+ };
25
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
26
+ };
27
+ import { AcCmErrors } from '@mlightcad/common';
28
+ import { AcGeBox3d, AcGePlane, AcGePoint3d, AcGeVector3d } from '../math';
29
+ import { AcGeMathUtil, ORIGIN_POINT_3D, TAU } from '../util';
30
+ import { AcGeCurve3d } from './AcGeCurve3d';
31
+ import { AcGeLine3d } from './AcGeLine3d';
32
+ /**
33
+ * The class represeting both full circles and circular arcs in 3d space. The ellipse arc is
34
+ * defined by a center point, radius, start angle, end angle, a normal vector, and a reference
35
+ * vector. If start angle is equal to 0 and end angle is equal to 2 * Math.PI, it represents
36
+ * a full circle.
37
+ */
38
+ var AcGeCircArc3d = /** @class */ (function (_super) {
39
+ __extends(AcGeCircArc3d, _super);
40
+ /**
41
+ * Create a 3d circular arc.
42
+ * @param center The center point of the arc.
43
+ * @param radius The radius of the arc.
44
+ * @param startAngle The start angle of the arc.
45
+ * @param endAngle The end angle of the arc.
46
+ * @param normal The normal vector of the plane in which the arc lies.
47
+ * @param refVec The reference vector from which angles are measured. Default value is x axis.
48
+ */
49
+ function AcGeCircArc3d(center, radius, startAngle, endAngle, normal, refVec) {
50
+ if (refVec === void 0) { refVec = AcGeVector3d.X_AXIS; }
51
+ var _this = _super.call(this) || this;
52
+ _this.center = center;
53
+ _this.radius = radius;
54
+ _this.startAngle = startAngle;
55
+ _this.endAngle = endAngle;
56
+ _this.normal = normal;
57
+ _this.refVec = refVec;
58
+ // Check whether it is a full ellipse
59
+ if ((endAngle - startAngle) % TAU == 0) {
60
+ _this.startAngle = 0;
61
+ _this.endAngle = TAU;
62
+ }
63
+ else {
64
+ _this.startAngle = startAngle;
65
+ _this.endAngle = endAngle;
66
+ }
67
+ return _this;
68
+ }
69
+ /**
70
+ * Compute center point of the arc given three points
71
+ * @param startPoint Input start point of the arc
72
+ * @param endPoint Input end point of the arc
73
+ * @param pointOnArc Input one point on the arc (P3)
74
+ * @returns Return center point of the arc
75
+ */
76
+ AcGeCircArc3d.computeCenterPoint = function (startPoint, endPoint, pointOnArc) {
77
+ // Midpoints of the edges
78
+ var mid1 = new AcGeVector3d()
79
+ .addVectors(startPoint, endPoint)
80
+ .multiplyScalar(0.5);
81
+ var mid2 = new AcGeVector3d()
82
+ .addVectors(startPoint, pointOnArc)
83
+ .multiplyScalar(0.5);
84
+ // Vectors perpendicular to the edges
85
+ var vec1 = new AcGeVector3d().subVectors(endPoint, startPoint);
86
+ var vec2 = new AcGeVector3d().subVectors(pointOnArc, startPoint);
87
+ // Normal vector to the plane formed by the triangle
88
+ var normal = new AcGeVector3d().crossVectors(vec1, vec2).normalize();
89
+ if (normal.lengthSq() === 0) {
90
+ // If the points are collinear, the normal vector will have zero length.
91
+ console.error('Points are collinear and cannot form a valid arc.');
92
+ return null;
93
+ }
94
+ // Compute perpendicular vectors on the plane of the triangle
95
+ var perpendicular1 = new AcGeVector3d()
96
+ .crossVectors(vec1, normal)
97
+ .normalize();
98
+ var perpendicular2 = new AcGeVector3d()
99
+ .crossVectors(vec2, normal)
100
+ .normalize();
101
+ // Solve the system of equations to find the intersection point (center of the circle)
102
+ var direction1 = perpendicular1
103
+ .clone()
104
+ .multiplyScalar(Number.MAX_SAFE_INTEGER);
105
+ var direction2 = perpendicular2
106
+ .clone()
107
+ .multiplyScalar(Number.MAX_SAFE_INTEGER);
108
+ var line1 = new AcGeLine3d(mid1, mid1.clone().add(direction1));
109
+ var line2 = new AcGeLine3d(mid2, mid2.clone().add(direction2));
110
+ var center = new AcGeVector3d();
111
+ var result = line1.closestPointToPoint(line2.startPoint, true, center);
112
+ if (!result) {
113
+ console.error('Cannot find a valid center for the arc.');
114
+ return null;
115
+ }
116
+ return center;
117
+ };
118
+ /**
119
+ * Create arc by three points
120
+ * @param startPoint Input the start point
121
+ * @param endPoint Input the end point
122
+ * @param pointOnArc Input one point between the start point and the end point
123
+ */
124
+ AcGeCircArc3d.createByThreePoints = function (startPoint, endPoint, pointOnArc) {
125
+ var center = AcGeCircArc3d.computeCenterPoint(startPoint, endPoint, pointOnArc);
126
+ if (center) {
127
+ var radius = center.distanceTo(startPoint);
128
+ // Compute the vectors from the center to the start and end points
129
+ var centerToStart = new AcGeVector3d().subVectors(startPoint, center);
130
+ var centerToEnd = new AcGeVector3d().subVectors(endPoint, center);
131
+ // Compute the start angle and end angle relative to the x-axis
132
+ var startAngle = Math.atan2(centerToStart.y, centerToStart.x);
133
+ var endAngle = Math.atan2(centerToEnd.y, centerToEnd.x);
134
+ return new AcGeCircArc3d(center, radius, startAngle, endAngle, AcGeVector3d.Z_AXIS);
135
+ }
136
+ };
137
+ Object.defineProperty(AcGeCircArc3d.prototype, "center", {
138
+ /**
139
+ * Center of circular arc
140
+ */
141
+ get: function () {
142
+ return this._center;
143
+ },
144
+ set: function (value) {
145
+ this._center = new AcGePoint3d(value.x, value.y, value.z || 0);
146
+ this._boundingBoxNeedsUpdate = true;
147
+ },
148
+ enumerable: false,
149
+ configurable: true
150
+ });
151
+ Object.defineProperty(AcGeCircArc3d.prototype, "radius", {
152
+ /**
153
+ * Radius of circular arc
154
+ */
155
+ get: function () {
156
+ return this._radius;
157
+ },
158
+ set: function (value) {
159
+ if (value < 0)
160
+ throw AcCmErrors.ILLEGAL_PARAMETERS;
161
+ this._radius = value;
162
+ this._boundingBoxNeedsUpdate = true;
163
+ },
164
+ enumerable: false,
165
+ configurable: true
166
+ });
167
+ Object.defineProperty(AcGeCircArc3d.prototype, "startAngle", {
168
+ /**
169
+ * Start angle in radians of circular arc in the range 0 to 2 * PI.
170
+ */
171
+ get: function () {
172
+ return this._startAngle;
173
+ },
174
+ set: function (value) {
175
+ this._startAngle = AcGeMathUtil.normalizeAngle(value);
176
+ this._boundingBoxNeedsUpdate = true;
177
+ },
178
+ enumerable: false,
179
+ configurable: true
180
+ });
181
+ Object.defineProperty(AcGeCircArc3d.prototype, "endAngle", {
182
+ /**
183
+ * End angle in radians of circular arc in the range 0 to 2 * PI.
184
+ */
185
+ get: function () {
186
+ return this._endAngle;
187
+ },
188
+ set: function (value) {
189
+ this._endAngle =
190
+ this.startAngle == 0 && value == TAU
191
+ ? value
192
+ : AcGeMathUtil.normalizeAngle(value);
193
+ this._boundingBoxNeedsUpdate = true;
194
+ },
195
+ enumerable: false,
196
+ configurable: true
197
+ });
198
+ Object.defineProperty(AcGeCircArc3d.prototype, "deltaAngle", {
199
+ /**
200
+ * Return angle between endAngle and startAngle in range 0 to 2*PI
201
+ */
202
+ get: function () {
203
+ return AcGeMathUtil.normalizeAngle(this.endAngle - this.startAngle);
204
+ },
205
+ enumerable: false,
206
+ configurable: true
207
+ });
208
+ Object.defineProperty(AcGeCircArc3d.prototype, "isLargeArc", {
209
+ /**
210
+ * Return true if the arc is a large arc whose delta angle value is greater than PI.
211
+ */
212
+ get: function () {
213
+ return Math.abs(this.deltaAngle) > Math.PI ? 1 : 0;
214
+ },
215
+ enumerable: false,
216
+ configurable: true
217
+ });
218
+ Object.defineProperty(AcGeCircArc3d.prototype, "clockwise", {
219
+ /**
220
+ * Return true if the arc is clockwise from startAngle to endAngle
221
+ */
222
+ get: function () {
223
+ return this.deltaAngle <= 0;
224
+ },
225
+ enumerable: false,
226
+ configurable: true
227
+ });
228
+ Object.defineProperty(AcGeCircArc3d.prototype, "normal", {
229
+ /**
230
+ * Normal vector defining the plane of the circular arc
231
+ */
232
+ get: function () {
233
+ return this._normal;
234
+ },
235
+ set: function (value) {
236
+ this._normal = new AcGeVector3d(value.x, value.y, value.z);
237
+ // Normalize the normal vector to ensure it's a unit vector
238
+ this._normal.normalize();
239
+ this._boundingBoxNeedsUpdate = true;
240
+ },
241
+ enumerable: false,
242
+ configurable: true
243
+ });
244
+ Object.defineProperty(AcGeCircArc3d.prototype, "refVec", {
245
+ /**
246
+ * The unit reference vector of circular arc
247
+ */
248
+ get: function () {
249
+ return this._refVec;
250
+ },
251
+ set: function (value) {
252
+ this._refVec = new AcGeVector3d(value.x, value.y, value.z);
253
+ // Normalize the normal vector to ensure it's a unit vector
254
+ this._refVec.normalize();
255
+ this._boundingBoxNeedsUpdate = true;
256
+ },
257
+ enumerable: false,
258
+ configurable: true
259
+ });
260
+ Object.defineProperty(AcGeCircArc3d.prototype, "startPoint", {
261
+ /**
262
+ * The start point of circular arc
263
+ */
264
+ get: function () {
265
+ return this.getPointAtAngle(this._startAngle);
266
+ },
267
+ enumerable: false,
268
+ configurable: true
269
+ });
270
+ Object.defineProperty(AcGeCircArc3d.prototype, "endPoint", {
271
+ /**
272
+ * The end point of circular arc
273
+ */
274
+ get: function () {
275
+ return this.getPointAtAngle(this._endAngle);
276
+ },
277
+ enumerable: false,
278
+ configurable: true
279
+ });
280
+ Object.defineProperty(AcGeCircArc3d.prototype, "length", {
281
+ /**
282
+ * @inheritdoc
283
+ */
284
+ get: function () {
285
+ return Math.abs(this.deltaAngle * this.radius);
286
+ },
287
+ enumerable: false,
288
+ configurable: true
289
+ });
290
+ /**
291
+ * @inheritdoc
292
+ */
293
+ AcGeCircArc3d.prototype.calculateBoundingBox = function () {
294
+ var e_1, _a;
295
+ var angles = [this.startAngle, this.endAngle];
296
+ for (var i = 0; i < 2 * Math.PI; i += Math.PI / 2) {
297
+ if (AcGeMathUtil.isBetweenAngle(i, this.startAngle, this.endAngle)) {
298
+ angles.push(i);
299
+ }
300
+ }
301
+ var minX = Infinity, minY = Infinity, minZ = Infinity;
302
+ var maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
303
+ try {
304
+ for (var angles_1 = __values(angles), angles_1_1 = angles_1.next(); !angles_1_1.done; angles_1_1 = angles_1.next()) {
305
+ var angle = angles_1_1.value;
306
+ var point = this.getPointAtAngle(angle);
307
+ if (point.x < minX)
308
+ minX = point.x;
309
+ if (point.y < minY)
310
+ minY = point.y;
311
+ if (point.z < minZ)
312
+ minZ = point.z;
313
+ if (point.x > maxX)
314
+ maxX = point.x;
315
+ if (point.y > maxY)
316
+ maxY = point.y;
317
+ if (point.z > maxZ)
318
+ maxZ = point.z;
319
+ }
320
+ }
321
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
322
+ finally {
323
+ try {
324
+ if (angles_1_1 && !angles_1_1.done && (_a = angles_1.return)) _a.call(angles_1);
325
+ }
326
+ finally { if (e_1) throw e_1.error; }
327
+ }
328
+ return new AcGeBox3d({ x: minX, y: minY, z: minZ }, { x: maxX, y: maxY, z: maxZ });
329
+ };
330
+ Object.defineProperty(AcGeCircArc3d.prototype, "closed", {
331
+ /**
332
+ * Return true if its start point is identical to its end point. Otherwise, return false.
333
+ */
334
+ get: function () {
335
+ return (Math.abs(this.endAngle - this.startAngle) / Math.PI) % 2 == 0;
336
+ },
337
+ enumerable: false,
338
+ configurable: true
339
+ });
340
+ /**
341
+ * Divide this arc into the specified nubmer of points
342
+ * those points as an array of points.
343
+ * @param numPoints Input the nubmer of points returned
344
+ * @returns Return an array of point
345
+ */
346
+ AcGeCircArc3d.prototype.getPoints = function (numPoints) {
347
+ var points = [];
348
+ var deltaAngle = this.deltaAngle;
349
+ var startAngle = this.startAngle;
350
+ if (this.closed) {
351
+ deltaAngle = TAU;
352
+ startAngle = 0;
353
+ }
354
+ for (var i = 0; i <= numPoints; i++) {
355
+ var angle = startAngle + deltaAngle * (i / numPoints);
356
+ var point = this.getPointAtAngle(angle);
357
+ points.push(point);
358
+ }
359
+ return points;
360
+ };
361
+ /**
362
+ * @inheritdoc
363
+ */
364
+ AcGeCircArc3d.prototype.transform = function (matrix) {
365
+ var startVec = _vector3
366
+ .copy(this.refVec)
367
+ .applyAxisAngle(this.normal, this.startAngle)
368
+ .multiplyScalar(this.radius);
369
+ var endVec = _vector3
370
+ .copy(this.refVec)
371
+ .applyAxisAngle(this.normal, this.endAngle)
372
+ .multiplyScalar(this.radius);
373
+ this.center.applyMatrix3d(matrix);
374
+ startVec.applyMatrix3d(matrix);
375
+ endVec.applyMatrix3d(matrix);
376
+ this.normal.applyMatrix3d(matrix).normalize();
377
+ this.refVec.applyMatrix3d(matrix).normalize();
378
+ this.startAngle = this.getAngle(startVec);
379
+ this.endAngle = this.getAngle(endVec);
380
+ this._boundingBoxNeedsUpdate = true;
381
+ return this;
382
+ };
383
+ /**
384
+ * @inheritdoc
385
+ */
386
+ AcGeCircArc3d.prototype.copy = function (value) {
387
+ this.center = value.center;
388
+ this.radius = value.radius;
389
+ this.startAngle = value.startAngle;
390
+ this.endAngle = value.endAngle;
391
+ this.normal = value.normal;
392
+ this.refVec = value.refVec;
393
+ this._boundingBoxNeedsUpdate = true;
394
+ return this;
395
+ };
396
+ /**
397
+ * @inheritdoc
398
+ */
399
+ AcGeCircArc3d.prototype.clone = function () {
400
+ return new AcGeCircArc3d(this.center.clone(), this.radius, this.startAngle, this.endAngle, this.normal, this.refVec);
401
+ };
402
+ /**
403
+ * Calculate angle between the specified vec and the reference vector of this arc.
404
+ * @param vec Input one vector
405
+ * @returns Return angle between the specified vec and the reference vector of this arc.
406
+ */
407
+ AcGeCircArc3d.prototype.getAngle = function (vec) {
408
+ vec.sub(this.center); // 转换到以圆心为中心的坐标系
409
+ return Math.atan2(vec.dot(_vector3.crossVectors(this.refVec, this.normal)), vec.dot(this.refVec));
410
+ };
411
+ /**
412
+ * Returns the point on the arc at a specific angle.
413
+ * @param angle The angle at which to get the point.
414
+ */
415
+ AcGeCircArc3d.prototype.getPointAtAngle = function (angle) {
416
+ // Calculate orthogonal vector to refVec in the plane of the arc
417
+ var n = this.normal;
418
+ var r = this.refVec;
419
+ var orthogonalVec = {
420
+ x: n.y * r.z - n.z * r.y,
421
+ y: n.z * r.x - n.x * r.z,
422
+ z: n.x * r.y - n.y * r.x
423
+ };
424
+ // Point on the arc at the given angle
425
+ var center = this.center;
426
+ var radius = this.radius;
427
+ return new AcGePoint3d(center.x +
428
+ radius * (r.x * Math.cos(angle) + orthogonalVec.x * Math.sin(angle)), center.y +
429
+ radius * (r.y * Math.cos(angle) + orthogonalVec.y * Math.sin(angle)), center.z +
430
+ radius * (r.z * Math.cos(angle) + orthogonalVec.z * Math.sin(angle)));
431
+ };
432
+ Object.defineProperty(AcGeCircArc3d.prototype, "plane", {
433
+ /**
434
+ * Return the plane in which the circular arc lies.
435
+ */
436
+ get: function () {
437
+ var distance = new AcGeVector3d(this.center).distanceTo(ORIGIN_POINT_3D);
438
+ return new AcGePlane(this.normal, distance);
439
+ },
440
+ enumerable: false,
441
+ configurable: true
442
+ });
443
+ return AcGeCircArc3d;
444
+ }(AcGeCurve3d));
445
+ export { AcGeCircArc3d };
446
+ var _vector3 = /*@__PURE__*/ new AcGeVector3d();
447
+ //# sourceMappingURL=AcGeCircArc3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcGeCircArc3d.js","sourceRoot":"","sources":["../../src/geometry/AcGeCircArc3d.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C,OAAO,EACL,SAAS,EAET,SAAS,EACT,WAAW,EAGX,YAAY,EAEb,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC;;;;;GAKG;AACH;IAAmC,iCAAW;IA2G5C;;;;;;;;OAQG;IACH,uBACE,MAAqB,EACrB,MAAc,EACd,UAAkB,EAClB,QAAgB,EAChB,MAAwB,EACxB,MAA8C;QAA9C,uBAAA,EAAA,SAA2B,YAAY,CAAC,MAAM;QAE9C,YAAA,MAAK,WAAE,SAAA;QACP,KAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,KAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,qCAAqC;QACrC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;YACvC,KAAI,CAAC,UAAU,GAAG,CAAC,CAAA;YACnB,KAAI,CAAC,QAAQ,GAAG,GAAG,CAAA;QACrB,CAAC;aAAM,CAAC;YACN,KAAI,CAAC,UAAU,GAAG,UAAU,CAAA;YAC5B,KAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QAC1B,CAAC;;IACH,CAAC;IAnID;;;;;;OAMG;IACI,gCAAkB,GAAzB,UACE,UAA2B,EAC3B,QAAyB,EACzB,UAA2B;QAE3B,yBAAyB;QACzB,IAAM,IAAI,GAAG,IAAI,YAAY,EAAE;aAC5B,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC;aAChC,cAAc,CAAC,GAAG,CAAC,CAAA;QACtB,IAAM,IAAI,GAAG,IAAI,YAAY,EAAE;aAC5B,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC;aAClC,cAAc,CAAC,GAAG,CAAC,CAAA;QAEtB,qCAAqC;QACrC,IAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAChE,IAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QAElE,oDAAoD;QACpD,IAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAA;QAEtE,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5B,wEAAwE;YACxE,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;YAClE,OAAO,IAAI,CAAA;QACb,CAAC;QAED,6DAA6D;QAC7D,IAAM,cAAc,GAAG,IAAI,YAAY,EAAE;aACtC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;aAC1B,SAAS,EAAE,CAAA;QACd,IAAM,cAAc,GAAG,IAAI,YAAY,EAAE;aACtC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;aAC1B,SAAS,EAAE,CAAA;QAEd,sFAAsF;QACtF,IAAM,UAAU,GAAG,cAAc;aAC9B,KAAK,EAAE;aACP,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAC1C,IAAM,UAAU,GAAG,cAAc;aAC9B,KAAK,EAAE;aACP,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QAE1C,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QAChE,IAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAA;QAEhE,IAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAA;QACjC,IAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACxE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;YACxD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;;;OAKG;IACI,iCAAmB,GAA1B,UACE,UAA2B,EAC3B,QAAyB,EACzB,UAA2B;QAE3B,IAAM,MAAM,GAAG,aAAa,CAAC,kBAAkB,CAC7C,UAAU,EACV,QAAQ,EACR,UAAU,CACX,CAAA;QACD,IAAI,MAAM,EAAE,CAAC;YACX,IAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;YAE5C,kEAAkE;YAClE,IAAM,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;YACvE,IAAM,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;YAEnE,+DAA+D;YAC/D,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;YAC/D,IAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;YAEzD,OAAO,IAAI,aAAa,CACtB,MAAM,EACN,MAAM,EACN,UAAU,EACV,QAAQ,EACR,YAAY,CAAC,MAAM,CACpB,CAAA;QACH,CAAC;IACH,CAAC;IAuCD,sBAAI,iCAAM;QAHV;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC;aACD,UAAW,KAAoB;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YAC9D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACrC,CAAC;;;OAJA;IASD,sBAAI,iCAAM;QAHV;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC;aACD,UAAW,KAAa;YACtB,IAAI,KAAK,GAAG,CAAC;gBAAE,MAAM,UAAU,CAAC,kBAAkB,CAAA;YAClD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;YACpB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACrC,CAAC;;;OALA;IAUD,sBAAI,qCAAU;QAHd;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,WAAW,CAAA;QACzB,CAAC;aACD,UAAe,KAAa;YAC1B,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YACrD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACrC,CAAC;;;OAJA;IASD,sBAAI,mCAAQ;QAHZ;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,SAAS,CAAA;QACvB,CAAC;aACD,UAAa,KAAa;YACxB,IAAI,CAAC,SAAS;gBACZ,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG;oBAClC,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;YACxC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACrC,CAAC;;;OAPA;IAYD,sBAAI,qCAAU;QAHd;;WAEG;aACH;YACE,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;QACrE,CAAC;;;OAAA;IAKD,sBAAI,qCAAU;QAHd;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACpD,CAAC;;;OAAA;IAKD,sBAAI,oCAAS;QAHb;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;QAC7B,CAAC;;;OAAA;IAKD,sBAAI,iCAAM;QAHV;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC;aACD,UAAW,KAAuB;YAChC,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1D,2DAA2D;YAC3D,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA;YACxB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACrC,CAAC;;;OANA;IAWD,sBAAI,iCAAM;QAHV;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,OAAO,CAAA;QACrB,CAAC;aACD,UAAW,KAAuB;YAChC,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1D,2DAA2D;YAC3D,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA;YACxB,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACrC,CAAC;;;OANA;IAWD,sBAAI,qCAAU;QAHd;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/C,CAAC;;;OAAA;IAKD,sBAAI,mCAAQ;QAHZ;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC7C,CAAC;;;OAAA;IAKD,sBAAI,iCAAM;QAHV;;WAEG;aACH;YACE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QAChD,CAAC;;;OAAA;IAED;;OAEG;IACH,4CAAoB,GAApB;;QACE,IAAM,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAChB,CAAC;QACH,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,EACjB,IAAI,GAAG,QAAQ,EACf,IAAI,GAAG,QAAQ,CAAA;QACjB,IAAI,IAAI,GAAG,CAAC,QAAQ,EAClB,IAAI,GAAG,CAAC,QAAQ,EAChB,IAAI,GAAG,CAAC,QAAQ,CAAA;;YAElB,KAAoB,IAAA,WAAA,SAAA,MAAM,CAAA,8BAAA,kDAAE,CAAC;gBAAxB,IAAM,KAAK,mBAAA;gBACd,IAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;gBACzC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAA;gBAClC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAA;gBAClC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAA;gBAClC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAA;gBAClC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAA;gBAClC,IAAI,KAAK,CAAC,CAAC,GAAG,IAAI;oBAAE,IAAI,GAAG,KAAK,CAAC,CAAC,CAAA;YACpC,CAAC;;;;;;;;;QAED,OAAO,IAAI,SAAS,CAClB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAC7B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAC9B,CAAA;IACH,CAAC;IAKD,sBAAI,iCAAM;QAHV;;WAEG;aACH;YACE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvE,CAAC;;;OAAA;IAED;;;;;OAKG;IACH,iCAAS,GAAT,UAAU,SAAiB;QACzB,IAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAChC,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,UAAU,GAAG,GAAG,CAAA;YAChB,UAAU,GAAG,CAAC,CAAA;QAChB,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAM,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;YACvD,IAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;YACzC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACH,iCAAS,GAAT,UAAU,MAAoB;QAC5B,IAAM,QAAQ,GAAG,QAAQ;aACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACjB,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;aAC5C,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9B,IAAM,MAAM,GAAG,QAAQ;aACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;aACjB,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;aAC1C,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACjC,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAA;QAE7C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,4BAAI,GAAJ,UAAK,KAAoB;QACvB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC1B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;OAEG;IACH,6BAAK,GAAL;QACE,OAAO,IAAI,aAAa,CACtB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EACnB,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,CACZ,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,gCAAQ,GAAR,UAAS,GAAiB;QACxB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,gBAAgB;QACrC,OAAO,IAAI,CAAC,KAAK,CACf,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EACxD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CACrB,CAAA;IACH,CAAC;IAED;;;OAGG;IACH,uCAAe,GAAf,UAAgB,KAAa;QAC3B,gEAAgE;QAChE,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACrB,IAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACrB,IAAM,aAAa,GAAqB;YACtC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACzB,CAAA;QAED,sCAAsC;QACtC,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,OAAO,IAAI,WAAW,CACpB,MAAM,CAAC,CAAC;YACN,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACtE,MAAM,CAAC,CAAC;YACN,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EACtE,MAAM,CAAC,CAAC;YACN,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CACvE,CAAA;IACH,CAAC;IAKD,sBAAI,gCAAK;QAHT;;WAEG;aACH;YACE,IAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;YAC1E,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC7C,CAAC;;;OAAA;IACH,oBAAC;AAAD,CAAC,AApaD,CAAmC,WAAW,GAoa7C;;AAED,IAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,YAAY,EAAE,CAAA"}
@@ -0,0 +1,85 @@
1
+ import { AcGePoint2d } from '../math/AcGePoint2d';
2
+ import { AcGeShape2d } from './AcGeShape2d';
3
+ /**
4
+ * Abstract base class for all 2d curves. Any class that is derived from this class represents
5
+ * a 2d curve.
6
+ */
7
+ export declare abstract class AcGeCurve2d extends AcGeShape2d {
8
+ protected arcLengthDivisions: number;
9
+ constructor();
10
+ /**
11
+ * Return true if its start point is identical to its end point. Otherwise, return false.
12
+ */
13
+ abstract get closed(): boolean;
14
+ /**
15
+ * Start point of this curve. If the curve is closed, coordinates of start point will be equal to coordinates
16
+ * of end point.
17
+ */
18
+ get startPoint(): AcGePoint2d;
19
+ /**
20
+ * End point of this curve. If the curve is closed, coordinates of start point will be equal to coordinates
21
+ * of end point.
22
+ */
23
+ get endPoint(): AcGePoint2d;
24
+ /**
25
+ * Length of this curve.
26
+ */
27
+ get length(): number;
28
+ /**
29
+ * Return the point for a given position on the curve according to the arc length.
30
+ * @param t Input a position on the curve according to the arc length. Must be in the range [0, 1].
31
+ * @returns Return the point for a given position on the curve according to the arc length.
32
+ */
33
+ getPoint(_t: number): AcGePoint2d;
34
+ /**
35
+ * Return a point for a given position on the curve according to the arc length.
36
+ * @param u Input a position on the curve according to the arc length. Must be in the range [0, 1].
37
+ * @returns Return a point for a given position on the curve according to the arc length.
38
+ */
39
+ getPointAt(u: number): AcGePoint2d;
40
+ /**
41
+ * Return a set of divisions + 1 points using `getPoint(t)`.
42
+ * @param divisions Input number of pieces to divide the curve into. Default is 5.
43
+ * @returns Return a set of divisions + 1 points using `getPoint(t)`
44
+ */
45
+ getPoints(divisions?: number): AcGePoint2d[];
46
+ /**
47
+ * Return a set of divisions + 1 equi-spaced points using `getPointAt(u)`.
48
+ * @param divisions Input number of pieces to divide the curve into. Default is 5.
49
+ * @returns Return a set of divisions + 1 equi-spaced points using `getPointAt(u)`.
50
+ */
51
+ getSpacedPoints(divisions?: number): AcGePoint2d[];
52
+ /**
53
+ * Get total curve arc length.
54
+ * @returns Return total curve arc length.
55
+ */
56
+ getLength(): number;
57
+ /**
58
+ * Get list of cumulative segment lengths.
59
+ * @param divisions Input number of pieces to divide the curve into.
60
+ * @returns Return list of cumulative segment lengths.
61
+ */
62
+ getLengths(divisions?: number): number[];
63
+ /**
64
+ * Given `u` in the range (0 .. 1), returns t also in the range ( 0 .. 1 ). `u` and `t` can then be used to
65
+ * give you points which are equidistant from the ends of the curve, using `getPoint`.
66
+ */
67
+ getUtoTmapping(u: number, distance?: number): number;
68
+ /**
69
+ * Return a unit vector tangent at `t`. If the derived curve does not implement its tangent derivation,
70
+ * two points a small delta apart will be used to find its gradient which seems to give a reasonable
71
+ * approximation.
72
+ * @param t Input a position on the curve. Must be in the range [ 0, 1 ].
73
+ * @returns Return a unit vector tangent at `t`.
74
+ */
75
+ getTangent(t: number): AcGePoint2d;
76
+ /**
77
+ * Return tangent at a point which is equidistant to the ends of the curve from the point given in
78
+ * `getTangent`.
79
+ * @param u Input a position on the curve according to the arc length. Must be in the range [0, 1].
80
+ * @returns Return tangent at a point which is equidistant to the ends of the curve from the point
81
+ * given in `getTangent`.
82
+ */
83
+ getTangentAt(u: number): AcGePoint2d;
84
+ }
85
+ //# sourceMappingURL=AcGeCurve2d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcGeCurve2d.d.ts","sourceRoot":"","sources":["../../src/geometry/AcGeCurve2d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C;;;GAGG;AACH,8BAAsB,WAAY,SAAQ,WAAW;IACnD,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAA;;IAOpC;;OAEG;IACH,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAA;IAE9B;;;OAGG;IACH,IAAI,UAAU,gBAEb;IAED;;;OAGG;IACH,IAAI,QAAQ,gBAEX;IAED;;OAEG;IACH,IAAI,MAAM,WAET;IAED;;;;OAIG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW;IAIjC;;;;OAIG;IACH,UAAU,CAAC,CAAC,EAAE,MAAM;IAKpB;;;;OAIG;IACH,SAAS,CAAC,SAAS,SAAI;IAUvB;;;;OAIG;IACH,eAAe,CAAC,SAAS,SAAI;IAU7B;;;OAGG;IACH,SAAS;IAKT;;;;OAIG;IACH,UAAU,CAAC,SAAS,SAA0B;IAiB9C;;;OAGG;IACH,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IA4D3C;;;;;;OAMG;IACH,UAAU,CAAC,CAAC,EAAE,MAAM;IAkBpB;;;;;;OAMG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM;CAIvB"}