@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,412 @@
|
|
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
|
+
var __read = (this && this.__read) || function (o, n) {
|
28
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
29
|
+
if (!m) return o;
|
30
|
+
var i = m.call(o), r, ar = [], e;
|
31
|
+
try {
|
32
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
33
|
+
}
|
34
|
+
catch (error) { e = { error: error }; }
|
35
|
+
finally {
|
36
|
+
try {
|
37
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
38
|
+
}
|
39
|
+
finally { if (e) throw e.error; }
|
40
|
+
}
|
41
|
+
return ar;
|
42
|
+
};
|
43
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
44
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
45
|
+
if (ar || !(i in from)) {
|
46
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
47
|
+
ar[i] = from[i];
|
48
|
+
}
|
49
|
+
}
|
50
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
51
|
+
};
|
52
|
+
import { AcCmErrors } from '@mlightcad/common';
|
53
|
+
import { AcGeBox2d, AcGePoint2d, AcGeVector2d } from '../math';
|
54
|
+
import { AcGeMathUtil, TAU } from '../util';
|
55
|
+
import { AcGeCurve2d } from './AcGeCurve2d';
|
56
|
+
/**
|
57
|
+
* Represent a circular arc.
|
58
|
+
*/
|
59
|
+
var AcGeCircArc2d = /** @class */ (function (_super) {
|
60
|
+
__extends(AcGeCircArc2d, _super);
|
61
|
+
function AcGeCircArc2d(a, b, c, d, e) {
|
62
|
+
var _this = _super.call(this) || this;
|
63
|
+
var argsLength = +(a !== undefined) +
|
64
|
+
+(b !== undefined) +
|
65
|
+
+(c !== undefined) +
|
66
|
+
+(d !== undefined) +
|
67
|
+
+(e !== undefined);
|
68
|
+
if (argsLength == 3) {
|
69
|
+
if (typeof a == 'object' &&
|
70
|
+
typeof b == 'object' &&
|
71
|
+
typeof c == 'object') {
|
72
|
+
_this.createByThreePoints(a, b, c);
|
73
|
+
}
|
74
|
+
else {
|
75
|
+
_this.createByStartEndPointsAndBulge(a, b, c);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
else if (argsLength == 5) {
|
79
|
+
var center = a;
|
80
|
+
_this.center = new AcGePoint2d(center.x, center.y);
|
81
|
+
_this.radius = b;
|
82
|
+
_this.startAngle = c;
|
83
|
+
_this.endAngle = d;
|
84
|
+
_this.clockwise = e;
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
throw AcCmErrors.ILLEGAL_PARAMETERS;
|
88
|
+
}
|
89
|
+
return _this;
|
90
|
+
}
|
91
|
+
/**
|
92
|
+
* Create arc by three points
|
93
|
+
* @param p1 Input the start point
|
94
|
+
* @param p2 Input one point between the start point and the end point
|
95
|
+
* @param p3 Input the end point
|
96
|
+
*/
|
97
|
+
AcGeCircArc2d.prototype.createByThreePoints = function (p1, p2, p3) {
|
98
|
+
var midpoint = function (p1, p2) { return ({
|
99
|
+
x: (p1.x + p2.x) / 2,
|
100
|
+
y: (p1.y + p2.y) / 2
|
101
|
+
}); };
|
102
|
+
var slope = function (p1, p2) {
|
103
|
+
return (p2.y - p1.y) / (p2.x - p1.x);
|
104
|
+
};
|
105
|
+
var perpSlope = function (m) { return -1 / m; };
|
106
|
+
var midpoint1 = midpoint(p1, p2);
|
107
|
+
var midpoint2 = midpoint(p2, p3);
|
108
|
+
var slope1 = slope(p1, p2);
|
109
|
+
var slope2 = slope(p2, p3);
|
110
|
+
var perpSlope1 = perpSlope(slope1);
|
111
|
+
var perpSlope2 = perpSlope(slope2);
|
112
|
+
var intersect = function (m1, b1, m2, b2) {
|
113
|
+
var x = (b2 - b1) / (m1 - m2);
|
114
|
+
var y = m1 * x + b1;
|
115
|
+
return { x: x, y: y };
|
116
|
+
};
|
117
|
+
var b1 = midpoint1.y - perpSlope1 * midpoint1.x;
|
118
|
+
var b2 = midpoint2.y - perpSlope2 * midpoint2.x;
|
119
|
+
var center = intersect(perpSlope1, b1, perpSlope2, b2);
|
120
|
+
var radius = Math.sqrt(Math.pow(p1.x - center.x, 2) + Math.pow(p1.y - center.y, 2));
|
121
|
+
var angle = function (p, center) {
|
122
|
+
return Math.atan2(p.y - center.y, p.x - center.x);
|
123
|
+
};
|
124
|
+
var startAngle = angle(p1, center);
|
125
|
+
var midAngle = angle(p2, center);
|
126
|
+
var endAngle = angle(p3, center);
|
127
|
+
var isCounterclockwise = (endAngle > startAngle && endAngle < midAngle) ||
|
128
|
+
(startAngle > endAngle && startAngle < midAngle) ||
|
129
|
+
(midAngle > endAngle && midAngle < startAngle);
|
130
|
+
this.center = center;
|
131
|
+
this.radius = radius;
|
132
|
+
this.startAngle = startAngle;
|
133
|
+
this.endAngle = endAngle;
|
134
|
+
this.clockwise = !isCounterclockwise;
|
135
|
+
};
|
136
|
+
/**
|
137
|
+
* Create circular arc by two points and one bugle factor
|
138
|
+
* @param from Input start point
|
139
|
+
* @param to Input end point
|
140
|
+
* @param bulge Input the bulge factor used to indicate how much of an arc segment is present at this
|
141
|
+
* vertex. The bulge factor is the tangent of one fourth the included angle for an arc segment, made
|
142
|
+
* negative if the arc goes clockwise from the start point to the endpoint. A bulge of 0 indicates a
|
143
|
+
* straight segment, and a bulge of 1 is a semicircle. Get more details from the following links.
|
144
|
+
* - https://ezdxf.readthedocs.io/en/stable/dxfentities/lwpolyline.html
|
145
|
+
* - https://www.afralisp.net/archive/lisp/Bulges1.htm
|
146
|
+
*/
|
147
|
+
AcGeCircArc2d.prototype.createByStartEndPointsAndBulge = function (from, to, bulge) {
|
148
|
+
var theta;
|
149
|
+
var a;
|
150
|
+
var b;
|
151
|
+
if (bulge < 0) {
|
152
|
+
theta = Math.atan(-bulge) * 4;
|
153
|
+
a = new AcGeVector2d(from);
|
154
|
+
b = new AcGeVector2d(to);
|
155
|
+
}
|
156
|
+
else {
|
157
|
+
// Default is counter-clockwise
|
158
|
+
theta = Math.atan(bulge) * 4;
|
159
|
+
a = new AcGeVector2d(to);
|
160
|
+
b = new AcGeVector2d(from);
|
161
|
+
}
|
162
|
+
var ab = new AcGeVector2d().subVectors(b, a);
|
163
|
+
var lengthAB = ab.length();
|
164
|
+
var c = new AcGeVector2d().addVectors(a, ab.multiplyScalar(0.5));
|
165
|
+
// Distance from center of arc to line between form and to points
|
166
|
+
var lengthCD = Math.abs(lengthAB / 2 / Math.tan(theta / 2));
|
167
|
+
var normAB = ab.normalize();
|
168
|
+
var d;
|
169
|
+
if (theta < Math.PI) {
|
170
|
+
var normDC = new AcGeVector2d(normAB.x * Math.cos(Math.PI / 2) - normAB.y * Math.sin(Math.PI / 2), normAB.y * Math.cos(Math.PI / 2) + normAB.x * Math.sin(Math.PI / 2));
|
171
|
+
// d is the center of the arc
|
172
|
+
d = c.add(normDC.multiplyScalar(-lengthCD));
|
173
|
+
}
|
174
|
+
else {
|
175
|
+
var normCD = new AcGeVector2d(normAB.x * Math.cos(Math.PI / 2) - normAB.y * Math.sin(Math.PI / 2), normAB.y * Math.cos(Math.PI / 2) + normAB.x * Math.sin(Math.PI / 2));
|
176
|
+
// d is the center of the arc
|
177
|
+
d = c.add(normCD.multiplyScalar(lengthCD));
|
178
|
+
}
|
179
|
+
// Add points between start start and eng angle relative
|
180
|
+
// to the center point
|
181
|
+
if (bulge < 0) {
|
182
|
+
this.startAngle = Math.atan2(a.y - d.y, a.x - d.x);
|
183
|
+
this.endAngle = Math.atan2(b.y - d.y, b.x - d.x);
|
184
|
+
}
|
185
|
+
else {
|
186
|
+
this.startAngle = Math.atan2(b.y - d.y, b.x - d.x);
|
187
|
+
this.endAngle = Math.atan2(a.y - d.y, a.x - d.x);
|
188
|
+
}
|
189
|
+
this.clockwise = bulge < 0;
|
190
|
+
this.center = d;
|
191
|
+
this.radius = b.sub(d).length();
|
192
|
+
};
|
193
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "center", {
|
194
|
+
/**
|
195
|
+
* Center of circular arc
|
196
|
+
*/
|
197
|
+
get: function () {
|
198
|
+
return this._center;
|
199
|
+
},
|
200
|
+
set: function (value) {
|
201
|
+
this._center = new AcGePoint2d(value.x, value.y);
|
202
|
+
this._boundingBoxNeedsUpdate = true;
|
203
|
+
},
|
204
|
+
enumerable: false,
|
205
|
+
configurable: true
|
206
|
+
});
|
207
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "radius", {
|
208
|
+
/**
|
209
|
+
* Radius of circular arc
|
210
|
+
*/
|
211
|
+
get: function () {
|
212
|
+
return this._radius;
|
213
|
+
},
|
214
|
+
set: function (value) {
|
215
|
+
this._radius = value;
|
216
|
+
this._boundingBoxNeedsUpdate = true;
|
217
|
+
},
|
218
|
+
enumerable: false,
|
219
|
+
configurable: true
|
220
|
+
});
|
221
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "startAngle", {
|
222
|
+
/**
|
223
|
+
* Start angle in radians of circular arc in the range 0 to 2 * PI.
|
224
|
+
*/
|
225
|
+
get: function () {
|
226
|
+
return this._startAngle;
|
227
|
+
},
|
228
|
+
set: function (value) {
|
229
|
+
this._startAngle = AcGeMathUtil.normalizeAngle(value);
|
230
|
+
this._boundingBoxNeedsUpdate = true;
|
231
|
+
},
|
232
|
+
enumerable: false,
|
233
|
+
configurable: true
|
234
|
+
});
|
235
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "endAngle", {
|
236
|
+
/**
|
237
|
+
* End angle in radians of circular arc in the range 0 to 2 * PI.
|
238
|
+
*/
|
239
|
+
get: function () {
|
240
|
+
return this._endAngle;
|
241
|
+
},
|
242
|
+
set: function (value) {
|
243
|
+
this._endAngle =
|
244
|
+
this.startAngle == 0 && value == TAU
|
245
|
+
? value
|
246
|
+
: AcGeMathUtil.normalizeAngle(value);
|
247
|
+
this._boundingBoxNeedsUpdate = true;
|
248
|
+
},
|
249
|
+
enumerable: false,
|
250
|
+
configurable: true
|
251
|
+
});
|
252
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "deltaAngle", {
|
253
|
+
/**
|
254
|
+
* Angle between endAngle and startAngle in range 0 to 2*PI
|
255
|
+
*/
|
256
|
+
get: function () {
|
257
|
+
return this.clockwise
|
258
|
+
? AcGeMathUtil.normalizeAngle(this.startAngle - this.endAngle)
|
259
|
+
: AcGeMathUtil.normalizeAngle(this.endAngle - this.startAngle);
|
260
|
+
},
|
261
|
+
enumerable: false,
|
262
|
+
configurable: true
|
263
|
+
});
|
264
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "clockwise", {
|
265
|
+
/**
|
266
|
+
* Rotation direction of the arc.
|
267
|
+
*/
|
268
|
+
get: function () {
|
269
|
+
return this._clockwise;
|
270
|
+
},
|
271
|
+
set: function (value) {
|
272
|
+
this._clockwise = value;
|
273
|
+
this._boundingBoxNeedsUpdate = true;
|
274
|
+
},
|
275
|
+
enumerable: false,
|
276
|
+
configurable: true
|
277
|
+
});
|
278
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "startPoint", {
|
279
|
+
/**
|
280
|
+
* Start point of circular arc
|
281
|
+
*/
|
282
|
+
get: function () {
|
283
|
+
return this.getPointAtAngle(this.startAngle);
|
284
|
+
},
|
285
|
+
enumerable: false,
|
286
|
+
configurable: true
|
287
|
+
});
|
288
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "endPoint", {
|
289
|
+
/**
|
290
|
+
* End point of circular arc
|
291
|
+
*/
|
292
|
+
get: function () {
|
293
|
+
return this.getPointAtAngle(this.endAngle);
|
294
|
+
},
|
295
|
+
enumerable: false,
|
296
|
+
configurable: true
|
297
|
+
});
|
298
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "midPoint", {
|
299
|
+
/**
|
300
|
+
* Middle point of circular arc
|
301
|
+
*/
|
302
|
+
get: function () {
|
303
|
+
var midAngle = AcGeMathUtil.normalizeAngle((this.startAngle + this.endAngle) / 2);
|
304
|
+
return this.getPointAtAngle(midAngle);
|
305
|
+
},
|
306
|
+
enumerable: false,
|
307
|
+
configurable: true
|
308
|
+
});
|
309
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "closed", {
|
310
|
+
/**
|
311
|
+
* Return true if its start point is identical to its end point. Otherwise, return false.
|
312
|
+
*/
|
313
|
+
get: function () {
|
314
|
+
return (Math.abs(this.endAngle - this.startAngle) / Math.PI) % 2 == 0;
|
315
|
+
},
|
316
|
+
enumerable: false,
|
317
|
+
configurable: true
|
318
|
+
});
|
319
|
+
/**
|
320
|
+
* @inheritdoc
|
321
|
+
*/
|
322
|
+
AcGeCircArc2d.prototype.calculateBoundingBox = function () {
|
323
|
+
var e_1, _a;
|
324
|
+
var points = [this.startPoint, this.endPoint];
|
325
|
+
var criticalAngles = [0, Math.PI / 2, Math.PI, (3 * Math.PI) / 2];
|
326
|
+
try {
|
327
|
+
for (var criticalAngles_1 = __values(criticalAngles), criticalAngles_1_1 = criticalAngles_1.next(); !criticalAngles_1_1.done; criticalAngles_1_1 = criticalAngles_1.next()) {
|
328
|
+
var angle = criticalAngles_1_1.value;
|
329
|
+
if (AcGeMathUtil.isBetweenAngle(angle, this.startAngle, this.endAngle, this.clockwise)) {
|
330
|
+
points.push(this.getPointAtAngle(angle));
|
331
|
+
}
|
332
|
+
}
|
333
|
+
}
|
334
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
335
|
+
finally {
|
336
|
+
try {
|
337
|
+
if (criticalAngles_1_1 && !criticalAngles_1_1.done && (_a = criticalAngles_1.return)) _a.call(criticalAngles_1);
|
338
|
+
}
|
339
|
+
finally { if (e_1) throw e_1.error; }
|
340
|
+
}
|
341
|
+
var xValues = points.map(function (p) { return p.x; });
|
342
|
+
var yValues = points.map(function (p) { return p.y; });
|
343
|
+
return new AcGeBox2d(new AcGePoint2d(Math.min.apply(Math, __spreadArray([], __read(xValues), false)), Math.min.apply(Math, __spreadArray([], __read(yValues), false))), new AcGePoint2d(Math.max.apply(Math, __spreadArray([], __read(xValues), false)), Math.max.apply(Math, __spreadArray([], __read(yValues), false))));
|
344
|
+
};
|
345
|
+
Object.defineProperty(AcGeCircArc2d.prototype, "length", {
|
346
|
+
/**
|
347
|
+
* Get length of circular arc
|
348
|
+
*/
|
349
|
+
get: function () {
|
350
|
+
return Math.abs(this.deltaAngle * this.radius);
|
351
|
+
},
|
352
|
+
enumerable: false,
|
353
|
+
configurable: true
|
354
|
+
});
|
355
|
+
/**
|
356
|
+
* @inheritdoc
|
357
|
+
*/
|
358
|
+
AcGeCircArc2d.prototype.transform = function (_matrix) {
|
359
|
+
// TODO: implement it
|
360
|
+
this._boundingBoxNeedsUpdate = true;
|
361
|
+
return this;
|
362
|
+
};
|
363
|
+
/**
|
364
|
+
* @inheritdoc
|
365
|
+
*/
|
366
|
+
AcGeCircArc2d.prototype.clone = function () {
|
367
|
+
return new AcGeCircArc2d(this.center.clone(), this.radius, this.startAngle, this.endAngle, this.clockwise);
|
368
|
+
};
|
369
|
+
/**
|
370
|
+
* Calculate a point on the ellipse at a given angle.
|
371
|
+
* @param angle Input the angle in radians where the point is to be calculated.
|
372
|
+
* @returns Return the 2d coordinates of the point on the circular arc.
|
373
|
+
*/
|
374
|
+
AcGeCircArc2d.prototype.getPointAtAngle = function (angle) {
|
375
|
+
var x = this.center.x + this.radius * Math.cos(angle);
|
376
|
+
var y = this.center.y + this.radius * Math.sin(angle);
|
377
|
+
return new AcGePoint2d(x, y);
|
378
|
+
};
|
379
|
+
/**
|
380
|
+
* Divide this arc into the specified nubmer of points and return those points as an array of points.
|
381
|
+
* @param numPoints Input the nubmer of points returned
|
382
|
+
* @returns Return an array of points
|
383
|
+
*/
|
384
|
+
AcGeCircArc2d.prototype.getPoints = function (numPoints) {
|
385
|
+
if (numPoints === void 0) { numPoints = 100; }
|
386
|
+
var points = [];
|
387
|
+
var deltaAngle = this.deltaAngle;
|
388
|
+
var startAngle = this.startAngle;
|
389
|
+
if (this.closed) {
|
390
|
+
deltaAngle = TAU;
|
391
|
+
startAngle = 0;
|
392
|
+
}
|
393
|
+
if (this.clockwise) {
|
394
|
+
for (var i = 0; i <= numPoints; i++) {
|
395
|
+
var angle = startAngle - deltaAngle * (i / numPoints);
|
396
|
+
var point = this.getPointAtAngle(angle);
|
397
|
+
points.push(new AcGePoint2d(point.x, point.y));
|
398
|
+
}
|
399
|
+
}
|
400
|
+
else {
|
401
|
+
for (var i = 0; i <= numPoints; i++) {
|
402
|
+
var angle = startAngle + deltaAngle * (i / numPoints);
|
403
|
+
var point = this.getPointAtAngle(angle);
|
404
|
+
points.push(new AcGePoint2d(point.x, point.y));
|
405
|
+
}
|
406
|
+
}
|
407
|
+
return points;
|
408
|
+
};
|
409
|
+
return AcGeCircArc2d;
|
410
|
+
}(AcGeCurve2d));
|
411
|
+
export { AcGeCircArc2d };
|
412
|
+
//# sourceMappingURL=AcGeCircArc2d.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AcGeCircArc2d.js","sourceRoot":"","sources":["../../src/geometry/AcGeCircArc2d.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,138 @@
|
|
1
|
+
import { AcGeBox3d, AcGeMatrix3d, AcGePlane, AcGePoint3d, AcGePoint3dLike, AcGePointLike, AcGeVector3d, AcGeVector3dLike } from '../math';
|
2
|
+
import { AcGeCurve3d } from './AcGeCurve3d';
|
3
|
+
/**
|
4
|
+
* The class represeting both full circles and circular arcs in 3d space. The ellipse arc is
|
5
|
+
* defined by a center point, radius, start angle, end angle, a normal vector, and a reference
|
6
|
+
* vector. If start angle is equal to 0 and end angle is equal to 2 * Math.PI, it represents
|
7
|
+
* a full circle.
|
8
|
+
*/
|
9
|
+
export declare class AcGeCircArc3d extends AcGeCurve3d {
|
10
|
+
private _center;
|
11
|
+
private _radius;
|
12
|
+
private _startAngle;
|
13
|
+
private _endAngle;
|
14
|
+
private _normal;
|
15
|
+
private _refVec;
|
16
|
+
/**
|
17
|
+
* Compute center point of the arc given three points
|
18
|
+
* @param startPoint Input start point of the arc
|
19
|
+
* @param endPoint Input end point of the arc
|
20
|
+
* @param pointOnArc Input one point on the arc (P3)
|
21
|
+
* @returns Return center point of the arc
|
22
|
+
*/
|
23
|
+
static computeCenterPoint(startPoint: AcGePoint3dLike, endPoint: AcGePoint3dLike, pointOnArc: AcGePoint3dLike): AcGePoint3d | null;
|
24
|
+
/**
|
25
|
+
* Create arc by three points
|
26
|
+
* @param startPoint Input the start point
|
27
|
+
* @param endPoint Input the end point
|
28
|
+
* @param pointOnArc Input one point between the start point and the end point
|
29
|
+
*/
|
30
|
+
static createByThreePoints(startPoint: AcGePoint3dLike, endPoint: AcGePoint3dLike, pointOnArc: AcGePoint3dLike): AcGeCircArc3d | undefined;
|
31
|
+
/**
|
32
|
+
* Create a 3d circular arc.
|
33
|
+
* @param center The center point of the arc.
|
34
|
+
* @param radius The radius of the arc.
|
35
|
+
* @param startAngle The start angle of the arc.
|
36
|
+
* @param endAngle The end angle of the arc.
|
37
|
+
* @param normal The normal vector of the plane in which the arc lies.
|
38
|
+
* @param refVec The reference vector from which angles are measured. Default value is x axis.
|
39
|
+
*/
|
40
|
+
constructor(center: AcGePointLike, radius: number, startAngle: number, endAngle: number, normal: AcGeVector3dLike, refVec?: AcGeVector3dLike);
|
41
|
+
/**
|
42
|
+
* Center of circular arc
|
43
|
+
*/
|
44
|
+
get center(): AcGePoint3d;
|
45
|
+
set center(value: AcGePointLike);
|
46
|
+
/**
|
47
|
+
* Radius of circular arc
|
48
|
+
*/
|
49
|
+
get radius(): number;
|
50
|
+
set radius(value: number);
|
51
|
+
/**
|
52
|
+
* Start angle in radians of circular arc in the range 0 to 2 * PI.
|
53
|
+
*/
|
54
|
+
get startAngle(): number;
|
55
|
+
set startAngle(value: number);
|
56
|
+
/**
|
57
|
+
* End angle in radians of circular arc in the range 0 to 2 * PI.
|
58
|
+
*/
|
59
|
+
get endAngle(): number;
|
60
|
+
set endAngle(value: number);
|
61
|
+
/**
|
62
|
+
* Return angle between endAngle and startAngle in range 0 to 2*PI
|
63
|
+
*/
|
64
|
+
get deltaAngle(): number;
|
65
|
+
/**
|
66
|
+
* Return true if the arc is a large arc whose delta angle value is greater than PI.
|
67
|
+
*/
|
68
|
+
get isLargeArc(): 0 | 1;
|
69
|
+
/**
|
70
|
+
* Return true if the arc is clockwise from startAngle to endAngle
|
71
|
+
*/
|
72
|
+
get clockwise(): boolean;
|
73
|
+
/**
|
74
|
+
* Normal vector defining the plane of the circular arc
|
75
|
+
*/
|
76
|
+
get normal(): AcGeVector3d;
|
77
|
+
set normal(value: AcGeVector3dLike);
|
78
|
+
/**
|
79
|
+
* The unit reference vector of circular arc
|
80
|
+
*/
|
81
|
+
get refVec(): AcGeVector3d;
|
82
|
+
set refVec(value: AcGeVector3dLike);
|
83
|
+
/**
|
84
|
+
* The start point of circular arc
|
85
|
+
*/
|
86
|
+
get startPoint(): AcGePoint3d;
|
87
|
+
/**
|
88
|
+
* The end point of circular arc
|
89
|
+
*/
|
90
|
+
get endPoint(): AcGePoint3d;
|
91
|
+
/**
|
92
|
+
* @inheritdoc
|
93
|
+
*/
|
94
|
+
get length(): number;
|
95
|
+
/**
|
96
|
+
* @inheritdoc
|
97
|
+
*/
|
98
|
+
calculateBoundingBox(): AcGeBox3d;
|
99
|
+
/**
|
100
|
+
* Return true if its start point is identical to its end point. Otherwise, return false.
|
101
|
+
*/
|
102
|
+
get closed(): boolean;
|
103
|
+
/**
|
104
|
+
* Divide this arc into the specified nubmer of points
|
105
|
+
* those points as an array of points.
|
106
|
+
* @param numPoints Input the nubmer of points returned
|
107
|
+
* @returns Return an array of point
|
108
|
+
*/
|
109
|
+
getPoints(numPoints: number): AcGePoint3d[];
|
110
|
+
/**
|
111
|
+
* @inheritdoc
|
112
|
+
*/
|
113
|
+
transform(matrix: AcGeMatrix3d): this;
|
114
|
+
/**
|
115
|
+
* @inheritdoc
|
116
|
+
*/
|
117
|
+
copy(value: AcGeCircArc3d): this;
|
118
|
+
/**
|
119
|
+
* @inheritdoc
|
120
|
+
*/
|
121
|
+
clone(): AcGeCircArc3d;
|
122
|
+
/**
|
123
|
+
* Calculate angle between the specified vec and the reference vector of this arc.
|
124
|
+
* @param vec Input one vector
|
125
|
+
* @returns Return angle between the specified vec and the reference vector of this arc.
|
126
|
+
*/
|
127
|
+
getAngle(vec: AcGeVector3d): number;
|
128
|
+
/**
|
129
|
+
* Returns the point on the arc at a specific angle.
|
130
|
+
* @param angle The angle at which to get the point.
|
131
|
+
*/
|
132
|
+
getPointAtAngle(angle: number): AcGePoint3d;
|
133
|
+
/**
|
134
|
+
* Return the plane in which the circular arc lies.
|
135
|
+
*/
|
136
|
+
get plane(): AcGePlane;
|
137
|
+
}
|
138
|
+
//# sourceMappingURL=AcGeCircArc3d.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AcGeCircArc3d.d.ts","sourceRoot":"","sources":["../../src/geometry/AcGeCircArc3d.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,YAAY,EACZ,SAAS,EACT,WAAW,EACX,eAAe,EACf,aAAa,EACb,YAAY,EACZ,gBAAgB,EACjB,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C;;;;;GAKG;AACH,qBAAa,aAAc,SAAQ,WAAW;IAC5C,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAe;IAE9B;;;;;;OAMG;IACH,MAAM,CAAC,kBAAkB,CACvB,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,eAAe,GAC1B,WAAW,GAAG,IAAI;IAmDrB;;;;;OAKG;IACH,MAAM,CAAC,mBAAmB,CACxB,UAAU,EAAE,eAAe,EAC3B,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,eAAe;IA4B7B;;;;;;;;OAQG;gBAED,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,gBAAgB,EACxB,MAAM,GAAE,gBAAsC;IAmBhD;;OAEG;IACH,IAAI,MAAM,IAAI,WAAW,CAExB;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,aAAa,EAG9B;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAIvB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IACD,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAG3B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAMzB;IAED;;OAEG;IACH,IAAI,UAAU,WAEb;IAED;;OAEG;IACH,IAAI,UAAU,UAEb;IAED;;OAEG;IACH,IAAI,SAAS,YAEZ;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,YAAY,CAEzB;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAKjC;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,YAAY,CAEzB;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAKjC;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,WAAW,CAE5B;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,WAAW,CAE1B;IAED;;OAEG;IACH,IAAI,MAAM,WAET;IAED;;OAEG;IACH,oBAAoB;IA+BpB;;OAEG;IACH,IAAI,MAAM,YAET;IAED;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE;IAgB3C;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,YAAY;IAsB9B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,aAAa;IAWzB;;OAEG;IACH,KAAK;IAWL;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,YAAY;IAQ1B;;;OAGG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW;IAuB3C;;OAEG;IACH,IAAI,KAAK,IAAI,SAAS,CAGrB;CACF"}
|