@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.
- package/LICENSE +21 -0
- package/README.md +13 -0
- package/dist/geometry-engine.js +10186 -0
- package/dist/geometry-engine.umd.cjs +4 -0
- package/lib/geometry/AcGeArea2d.d.ts +61 -0
- package/lib/geometry/AcGeArea2d.d.ts.map +1 -0
- package/lib/geometry/AcGeArea2d.js +174 -0
- package/lib/geometry/AcGeArea2d.js.map +1 -0
- package/lib/geometry/AcGeCircArc2d.d.ts +108 -0
- package/lib/geometry/AcGeCircArc2d.d.ts.map +1 -0
- package/lib/geometry/AcGeCircArc2d.js +412 -0
- package/lib/geometry/AcGeCircArc2d.js.map +1 -0
- package/lib/geometry/AcGeCircArc3d.d.ts +138 -0
- package/lib/geometry/AcGeCircArc3d.d.ts.map +1 -0
- package/lib/geometry/AcGeCircArc3d.js +447 -0
- package/lib/geometry/AcGeCircArc3d.js.map +1 -0
- package/lib/geometry/AcGeCurve2d.d.ts +85 -0
- package/lib/geometry/AcGeCurve2d.d.ts.map +1 -0
- package/lib/geometry/AcGeCurve2d.js +213 -0
- package/lib/geometry/AcGeCurve2d.js.map +1 -0
- package/lib/geometry/AcGeCurve3d.d.ts +27 -0
- package/lib/geometry/AcGeCurve3d.d.ts.map +1 -0
- package/lib/geometry/AcGeCurve3d.js +29 -0
- package/lib/geometry/AcGeCurve3d.js.map +1 -0
- package/lib/geometry/AcGeEllipseArc2d.d.ts +105 -0
- package/lib/geometry/AcGeEllipseArc2d.d.ts.map +1 -0
- package/lib/geometry/AcGeEllipseArc2d.js +292 -0
- package/lib/geometry/AcGeEllipseArc2d.js.map +1 -0
- package/lib/geometry/AcGeEllipseArc3d.d.ts +141 -0
- package/lib/geometry/AcGeEllipseArc3d.d.ts.map +1 -0
- package/lib/geometry/AcGeEllipseArc3d.js +442 -0
- package/lib/geometry/AcGeEllipseArc3d.js.map +1 -0
- package/lib/geometry/AcGeLine2d.d.ts +56 -0
- package/lib/geometry/AcGeLine2d.d.ts.map +1 -0
- package/lib/geometry/AcGeLine2d.js +125 -0
- package/lib/geometry/AcGeLine2d.js.map +1 -0
- package/lib/geometry/AcGeLine3d.d.ts +134 -0
- package/lib/geometry/AcGeLine3d.d.ts.map +1 -0
- package/lib/geometry/AcGeLine3d.js +291 -0
- package/lib/geometry/AcGeLine3d.js.map +1 -0
- package/lib/geometry/AcGeLoop2d.d.ts +59 -0
- package/lib/geometry/AcGeLoop2d.d.ts.map +1 -0
- package/lib/geometry/AcGeLoop2d.js +141 -0
- package/lib/geometry/AcGeLoop2d.js.map +1 -0
- package/lib/geometry/AcGePolyline2d.d.ts +90 -0
- package/lib/geometry/AcGePolyline2d.d.ts.map +1 -0
- package/lib/geometry/AcGePolyline2d.js +224 -0
- package/lib/geometry/AcGePolyline2d.js.map +1 -0
- package/lib/geometry/AcGeShape.d.ts +12 -0
- package/lib/geometry/AcGeShape.d.ts.map +1 -0
- package/lib/geometry/AcGeShape.js +22 -0
- package/lib/geometry/AcGeShape.js.map +1 -0
- package/lib/geometry/AcGeShape2d.d.ts +31 -0
- package/lib/geometry/AcGeShape2d.d.ts.map +1 -0
- package/lib/geometry/AcGeShape2d.js +51 -0
- package/lib/geometry/AcGeShape2d.js.map +1 -0
- package/lib/geometry/AcGeShape3d.d.ts +33 -0
- package/lib/geometry/AcGeShape3d.d.ts.map +1 -0
- package/lib/geometry/AcGeShape3d.js +52 -0
- package/lib/geometry/AcGeShape3d.js.map +1 -0
- package/lib/geometry/AcGeSpline3d.d.ts +77 -0
- package/lib/geometry/AcGeSpline3d.d.ts.map +1 -0
- package/lib/geometry/AcGeSpline3d.js +221 -0
- package/lib/geometry/AcGeSpline3d.js.map +1 -0
- package/lib/geometry/index.d.ts +13 -0
- package/lib/geometry/index.d.ts.map +1 -0
- package/lib/geometry/index.js +13 -0
- package/lib/geometry/index.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -0
- package/lib/math/AcGeBox2d.d.ts +173 -0
- package/lib/math/AcGeBox2d.d.ts.map +1 -0
- package/lib/math/AcGeBox2d.js +289 -0
- package/lib/math/AcGeBox2d.js.map +1 -0
- package/lib/math/AcGeBox3d.d.ts +195 -0
- package/lib/math/AcGeBox3d.d.ts.map +1 -0
- package/lib/math/AcGeBox3d.js +378 -0
- package/lib/math/AcGeBox3d.js.map +1 -0
- package/lib/math/AcGeEuler.d.ts +133 -0
- package/lib/math/AcGeEuler.d.ts.map +1 -0
- package/lib/math/AcGeEuler.js +358 -0
- package/lib/math/AcGeEuler.js.map +1 -0
- package/lib/math/AcGeMatrix2d.d.ts +203 -0
- package/lib/math/AcGeMatrix2d.d.ts.map +1 -0
- package/lib/math/AcGeMatrix2d.js +393 -0
- package/lib/math/AcGeMatrix2d.js.map +1 -0
- package/lib/math/AcGeMatrix3d.d.ts +279 -0
- package/lib/math/AcGeMatrix3d.d.ts.map +1 -0
- package/lib/math/AcGeMatrix3d.js +1037 -0
- package/lib/math/AcGeMatrix3d.js.map +1 -0
- package/lib/math/AcGePlane.d.ts +131 -0
- package/lib/math/AcGePlane.d.ts.map +1 -0
- package/lib/math/AcGePlane.js +218 -0
- package/lib/math/AcGePlane.js.map +1 -0
- package/lib/math/AcGePoint.d.ts +4 -0
- package/lib/math/AcGePoint.d.ts.map +1 -0
- package/lib/math/AcGePoint.js +2 -0
- package/lib/math/AcGePoint.js.map +1 -0
- package/lib/math/AcGePoint2d.d.ts +17 -0
- package/lib/math/AcGePoint2d.d.ts.map +1 -0
- package/lib/math/AcGePoint2d.js +40 -0
- package/lib/math/AcGePoint2d.js.map +1 -0
- package/lib/math/AcGePoint3d.d.ts +18 -0
- package/lib/math/AcGePoint3d.d.ts.map +1 -0
- package/lib/math/AcGePoint3d.js +43 -0
- package/lib/math/AcGePoint3d.js.map +1 -0
- package/lib/math/AcGeQuaternion.d.ts +230 -0
- package/lib/math/AcGeQuaternion.d.ts.map +1 -0
- package/lib/math/AcGeQuaternion.js +666 -0
- package/lib/math/AcGeQuaternion.js.map +1 -0
- package/lib/math/AcGeVector.d.ts +9 -0
- package/lib/math/AcGeVector.d.ts.map +1 -0
- package/lib/math/AcGeVector.js +2 -0
- package/lib/math/AcGeVector.js.map +1 -0
- package/lib/math/AcGeVector2d.d.ts +361 -0
- package/lib/math/AcGeVector2d.d.ts.map +1 -0
- package/lib/math/AcGeVector2d.js +622 -0
- package/lib/math/AcGeVector2d.js.map +1 -0
- package/lib/math/AcGeVector3d.d.ts +493 -0
- package/lib/math/AcGeVector3d.d.ts.map +1 -0
- package/lib/math/AcGeVector3d.js +868 -0
- package/lib/math/AcGeVector3d.js.map +1 -0
- package/lib/math/index.d.ts +14 -0
- package/lib/math/index.d.ts.map +1 -0
- package/lib/math/index.js +14 -0
- package/lib/math/index.js.map +1 -0
- package/lib/util/AcGeConstants.d.ts +19 -0
- package/lib/util/AcGeConstants.d.ts.map +1 -0
- package/lib/util/AcGeConstants.js +25 -0
- package/lib/util/AcGeConstants.js.map +1 -0
- package/lib/util/AcGeGeometryUtil.d.ts +16 -0
- package/lib/util/AcGeGeometryUtil.d.ts.map +1 -0
- package/lib/util/AcGeGeometryUtil.js +56 -0
- package/lib/util/AcGeGeometryUtil.js.map +1 -0
- package/lib/util/AcGeMathUtil.d.ts +203 -0
- package/lib/util/AcGeMathUtil.d.ts.map +1 -0
- package/lib/util/AcGeMathUtil.js +585 -0
- package/lib/util/AcGeMathUtil.js.map +1 -0
- package/lib/util/AcGeTol.d.ts +91 -0
- package/lib/util/AcGeTol.d.ts.map +1 -0
- package/lib/util/AcGeTol.js +83 -0
- package/lib/util/AcGeTol.js.map +1 -0
- package/lib/util/index.d.ts +5 -0
- package/lib/util/index.d.ts.map +1 -0
- package/lib/util/index.js +5 -0
- package/lib/util/index.js.map +1 -0
- 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":"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"}
|
@@ -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"}
|