@mlightcad/geometry-engine 2.0.0 → 2.0.1

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.
@@ -0,0 +1,491 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ import verb from 'verb-nurbs-web';
18
+ // Constants
19
+ var SPLINE_DEGREE = 3;
20
+ var MIN_FIT_POINTS_FOR_SPLINE = 3;
21
+ var CLOSED_SPLINE_EXTRA_CONTROL_POINTS = 3;
22
+ /**
23
+ * Utility class for NURBS basis function calculations
24
+ */
25
+ var NurbsBasisCalculator = /** @class */ (function () {
26
+ function NurbsBasisCalculator() {
27
+ }
28
+ /**
29
+ * Evaluates a degree 3 NURBS basis function at a given parameter value
30
+ */
31
+ NurbsBasisCalculator.evaluateDegree3 = function (knotVector, knotCount, parameterValue, controlPointIndex) {
32
+ var interval = this.findKnotInterval(knotVector, knotCount, parameterValue);
33
+ var knots = this.extractKnotValues(knotVector, interval.start);
34
+ return this.applyDeBoorsAlgorithm(parameterValue, controlPointIndex, interval.start, knots);
35
+ };
36
+ NurbsBasisCalculator.findKnotInterval = function (knotVector, knotCount, parameterValue) {
37
+ var knotIntervalStart = 0;
38
+ var knotIntervalEnd = knotCount;
39
+ while (knotIntervalEnd > knotIntervalStart + 1) {
40
+ var middleIndex = (0.5 * (knotIntervalEnd + knotIntervalStart)) | 0;
41
+ if (knotVector[middleIndex] > parameterValue) {
42
+ knotIntervalEnd = middleIndex;
43
+ }
44
+ else {
45
+ knotIntervalStart = middleIndex;
46
+ }
47
+ }
48
+ return { start: knotIntervalStart };
49
+ };
50
+ NurbsBasisCalculator.extractKnotValues = function (knotVector, intervalStart) {
51
+ return [
52
+ knotVector[intervalStart - 2], // knotMinus2
53
+ knotVector[intervalStart - 1], // knotMinus1
54
+ knotVector[intervalStart], // knotZero
55
+ knotVector[intervalStart + 1], // knotPlus1
56
+ knotVector[intervalStart + 2], // knotPlus2
57
+ knotVector[intervalStart + 3] // knotPlus3
58
+ ];
59
+ };
60
+ NurbsBasisCalculator.applyDeBoorsAlgorithm = function (parameterValue, controlPointIndex, intervalStart, knots) {
61
+ var _a = __read(knots, 6), knotMinus2 = _a[0], knotMinus1 = _a[1], knotZero = _a[2], knotPlus1 = _a[3], knotPlus2 = _a[4], knotPlus3 = _a[5];
62
+ // Initialize basis function values
63
+ var basisValueMinus3 = intervalStart - 3 === controlPointIndex ? 1 : 0;
64
+ var basisValueMinus2 = intervalStart - 2 === controlPointIndex ? 1 : 0;
65
+ var basisValueMinus1 = intervalStart - 1 === controlPointIndex ? 1 : 0;
66
+ var basisValueZero = intervalStart === controlPointIndex ? 1 : 0;
67
+ // De Boor's algorithm for degree 3 evaluation - Step 1
68
+ var alpha = (parameterValue - knotZero) / (knotPlus3 - knotZero);
69
+ var beta = 1 - alpha;
70
+ basisValueZero = beta * basisValueMinus1 + alpha * basisValueZero;
71
+ alpha = (parameterValue - knotMinus1) / (knotPlus2 - knotMinus1);
72
+ beta = 1 - alpha;
73
+ basisValueMinus1 = beta * basisValueMinus2 + alpha * basisValueMinus1;
74
+ alpha = (parameterValue - knotMinus2) / (knotPlus1 - knotMinus2);
75
+ beta = 1 - alpha;
76
+ basisValueMinus2 = beta * basisValueMinus3 + alpha * basisValueMinus2;
77
+ // De Boor's algorithm for degree 3 evaluation - Step 2
78
+ alpha = (parameterValue - knotZero) / (knotPlus2 - knotZero);
79
+ beta = 1 - alpha;
80
+ basisValueZero = beta * basisValueMinus1 + alpha * basisValueZero;
81
+ alpha = (parameterValue - knotMinus1) / (knotPlus1 - knotMinus1);
82
+ beta = 1 - alpha;
83
+ basisValueMinus1 = beta * basisValueMinus2 + alpha * basisValueMinus1;
84
+ // De Boor's algorithm for degree 3 evaluation - Step 3
85
+ alpha = (parameterValue - knotZero) / (knotPlus1 - knotZero);
86
+ beta = 1 - alpha;
87
+ basisValueZero = beta * basisValueMinus1 + alpha * basisValueZero;
88
+ return basisValueZero;
89
+ };
90
+ return NurbsBasisCalculator;
91
+ }());
92
+ /**
93
+ * Utility class for knot vector generation
94
+ */
95
+ var KnotVectorGenerator = /** @class */ (function () {
96
+ function KnotVectorGenerator() {
97
+ }
98
+ /**
99
+ * Generates a knot vector based on the specified parameterization type
100
+ */
101
+ KnotVectorGenerator.generate = function (fitPoints, knotParameterization, knotVectorSize) {
102
+ switch (knotParameterization) {
103
+ case 'Uniform':
104
+ return this.generateUniformKnotVector(knotVectorSize);
105
+ case 'Chord':
106
+ return this.generateChordKnotVector(fitPoints, knotVectorSize);
107
+ case 'SqrtChord':
108
+ return this.generateSqrtChordKnotVector(fitPoints, knotVectorSize);
109
+ default:
110
+ throw new Error("Unsupported knot parameterization: ".concat(knotParameterization));
111
+ }
112
+ };
113
+ KnotVectorGenerator.generateUniformKnotVector = function (knotVectorSize) {
114
+ var knotVector = new Array(knotVectorSize);
115
+ for (var i = 0; i < knotVectorSize; i++) {
116
+ knotVector[i] = i;
117
+ }
118
+ return knotVector;
119
+ };
120
+ KnotVectorGenerator.generateChordKnotVector = function (fitPoints, knotVectorSize) {
121
+ var knotVector = new Array(knotVectorSize);
122
+ var fitPointCount = fitPoints.length;
123
+ var cumulativeDistance = 0;
124
+ knotVector[0] = 0;
125
+ for (var i = 1; i < knotVectorSize; i++) {
126
+ var point1 = fitPoints[(i - 4 + fitPointCount) % fitPointCount];
127
+ var point2 = fitPoints[(i - 3 + fitPointCount) % fitPointCount];
128
+ var segmentLength = this.calculateDistance(point1, point2);
129
+ cumulativeDistance += segmentLength;
130
+ knotVector[i] = cumulativeDistance;
131
+ }
132
+ return knotVector;
133
+ };
134
+ KnotVectorGenerator.generateSqrtChordKnotVector = function (fitPoints, knotVectorSize) {
135
+ var knotVector = new Array(knotVectorSize);
136
+ var fitPointCount = fitPoints.length;
137
+ var cumulativeDistance = 0;
138
+ knotVector[0] = 0;
139
+ for (var i = 1; i < knotVectorSize; i++) {
140
+ var point1 = fitPoints[(i - 4 + fitPointCount) % fitPointCount];
141
+ var point2 = fitPoints[(i - 3 + fitPointCount) % fitPointCount];
142
+ var segmentLength = Math.sqrt(this.calculateDistance(point1, point2));
143
+ cumulativeDistance += segmentLength;
144
+ knotVector[i] = cumulativeDistance;
145
+ }
146
+ return knotVector;
147
+ };
148
+ KnotVectorGenerator.calculateDistance = function (point1, point2) {
149
+ return Math.sqrt(Math.pow(point2[0] - point1[0], 2) + Math.pow(point2[1] - point1[1], 2));
150
+ };
151
+ return KnotVectorGenerator;
152
+ }());
153
+ /**
154
+ * Utility class for basis matrix operations
155
+ */
156
+ var BasisMatrixBuilder = /** @class */ (function () {
157
+ function BasisMatrixBuilder() {
158
+ }
159
+ /**
160
+ * Builds the basis matrix for spline interpolation
161
+ */
162
+ BasisMatrixBuilder.buildBasisMatrix = function (fitPoints, knotVector, parameterValues) {
163
+ var fitPointCount = fitPoints.length;
164
+ var controlPointCount = fitPointCount + CLOSED_SPLINE_EXTRA_CONTROL_POINTS;
165
+ var basisMatrix = new Array(fitPointCount);
166
+ for (var i = 0; i < fitPointCount; i++) {
167
+ basisMatrix[i] = new Array(controlPointCount);
168
+ for (var j = 0; j < controlPointCount; j++) {
169
+ basisMatrix[i][j] = NurbsBasisCalculator.evaluateDegree3(knotVector, controlPointCount, parameterValues[i], j);
170
+ }
171
+ }
172
+ return basisMatrix;
173
+ };
174
+ /**
175
+ * Reduces the basis matrix for closed spline interpolation
176
+ */
177
+ BasisMatrixBuilder.reduceForClosedSpline = function (basisMatrix, fitPointCount) {
178
+ var reducedBasisMatrix = new Array(fitPointCount);
179
+ for (var i = 0; i < fitPointCount; i++) {
180
+ reducedBasisMatrix[i] = new Array(fitPointCount);
181
+ reducedBasisMatrix[i][0] = basisMatrix[i][0] + basisMatrix[i][fitPointCount];
182
+ reducedBasisMatrix[i][1] = basisMatrix[i][1] + basisMatrix[i][fitPointCount + 1];
183
+ reducedBasisMatrix[i][2] = basisMatrix[i][2] + basisMatrix[i][fitPointCount + 2];
184
+ for (var j = 3; j < fitPointCount; j++) {
185
+ reducedBasisMatrix[i][j] = basisMatrix[i][j];
186
+ }
187
+ }
188
+ return reducedBasisMatrix;
189
+ };
190
+ return BasisMatrixBuilder;
191
+ }());
192
+ /**
193
+ * Utility class for control point calculations
194
+ */
195
+ var ControlPointCalculator = /** @class */ (function () {
196
+ function ControlPointCalculator() {
197
+ }
198
+ /**
199
+ * Solves for control points using the reduced basis matrix
200
+ */
201
+ ControlPointCalculator.solveControlPoints = function (reducedBasisMatrix, fitPoints) {
202
+ var dimensions = fitPoints[0].length;
203
+ var fitPointCount = fitPoints.length;
204
+ var solvedControlPoints = [];
205
+ // Create dimension matrices from fit points
206
+ for (var i = 0; i < dimensions; i++) {
207
+ var dimensionMatrix = new Array(fitPointCount);
208
+ for (var j = 0; j < fitPointCount; j++) {
209
+ dimensionMatrix[j] = fitPoints[j][i];
210
+ }
211
+ // @ts-expect-error - verb library typing issue
212
+ solvedControlPoints[i] = verb.core.Mat.solve(reducedBasisMatrix, dimensionMatrix);
213
+ }
214
+ return solvedControlPoints;
215
+ };
216
+ /**
217
+ * Constructs control points from solved values
218
+ */
219
+ ControlPointCalculator.constructControlPoints = function (solvedControlPoints, fitPointCount, dimensions) {
220
+ var controlPoints = new Array(fitPointCount);
221
+ // Construct control points from solved values
222
+ for (var i = 0; i < fitPointCount; i++) {
223
+ controlPoints[i] = dimensions >= 3
224
+ ? [solvedControlPoints[0][i], solvedControlPoints[1][i], solvedControlPoints[2][i]]
225
+ : [solvedControlPoints[0][i], solvedControlPoints[1][i]];
226
+ }
227
+ // Add duplicate control points for closed spline
228
+ for (var i = 0; i < CLOSED_SPLINE_EXTRA_CONTROL_POINTS; i++) {
229
+ controlPoints[i + fitPointCount] = dimensions >= 3
230
+ ? [solvedControlPoints[0][i], solvedControlPoints[1][i], solvedControlPoints[2][i]]
231
+ : [solvedControlPoints[0][i], solvedControlPoints[1][i]];
232
+ }
233
+ return controlPoints;
234
+ };
235
+ /**
236
+ * Creates uniform weights array
237
+ */
238
+ ControlPointCalculator.createUniformWeights = function (controlPointCount) {
239
+ return new Array(controlPointCount).fill(1);
240
+ };
241
+ return ControlPointCalculator;
242
+ }());
243
+ /**
244
+ * Utility class for NURBS curve subdivision
245
+ */
246
+ var NurbsSubdivider = /** @class */ (function () {
247
+ function NurbsSubdivider() {
248
+ }
249
+ /**
250
+ * Subdivides a degree 3 NURBS curve at a given parameter value
251
+ */
252
+ NurbsSubdivider.subdivideDegree3 = function (controlPoints, knotVector, subdivisionParameter) {
253
+ var interval = this.findKnotInterval(knotVector, controlPoints.length, subdivisionParameter);
254
+ var knots = this.extractKnotValues(knotVector, interval.start);
255
+ var controlPointCoords = this.extractControlPointCoordinates(controlPoints, interval.start);
256
+ var subdividedPoints = this.applyDeBoorsSubdivision(subdivisionParameter, knots, controlPointCoords);
257
+ return this.constructSubdividedCurves(controlPoints, knotVector, interval.start, subdivisionParameter, subdividedPoints);
258
+ };
259
+ NurbsSubdivider.findKnotInterval = function (knotVector, controlPointCount, subdivisionParameter) {
260
+ var knotIntervalEnd = controlPointCount;
261
+ var knotIntervalStart = 0;
262
+ while (knotIntervalEnd > knotIntervalStart + 1) {
263
+ var middleIndex = (0.5 * (knotIntervalEnd + knotIntervalStart)) | 0;
264
+ if (knotVector[middleIndex] > subdivisionParameter) {
265
+ knotIntervalEnd = middleIndex;
266
+ }
267
+ else {
268
+ knotIntervalStart = middleIndex;
269
+ }
270
+ }
271
+ return { start: knotIntervalStart };
272
+ };
273
+ NurbsSubdivider.extractKnotValues = function (knotVector, intervalStart) {
274
+ return [
275
+ knotVector[intervalStart - 2], // knotMinus2
276
+ knotVector[intervalStart - 1], // knotMinus1
277
+ knotVector[intervalStart], // knotZero
278
+ knotVector[intervalStart + 1], // knotPlus1
279
+ knotVector[intervalStart + 2], // knotPlus2
280
+ knotVector[intervalStart + 3] // knotPlus3
281
+ ];
282
+ };
283
+ NurbsSubdivider.extractControlPointCoordinates = function (controlPoints, intervalStart) {
284
+ var dimensions = controlPoints[0].length;
285
+ return [
286
+ {
287
+ x: controlPoints[intervalStart - 3][0],
288
+ y: controlPoints[intervalStart - 3][1],
289
+ z: dimensions >= 3 ? controlPoints[intervalStart - 3][2] : 0
290
+ },
291
+ {
292
+ x: controlPoints[intervalStart - 2][0],
293
+ y: controlPoints[intervalStart - 2][1],
294
+ z: dimensions >= 3 ? controlPoints[intervalStart - 2][2] : 0
295
+ },
296
+ {
297
+ x: controlPoints[intervalStart - 1][0],
298
+ y: controlPoints[intervalStart - 1][1],
299
+ z: dimensions >= 3 ? controlPoints[intervalStart - 1][2] : 0
300
+ },
301
+ {
302
+ x: controlPoints[intervalStart][0],
303
+ y: controlPoints[intervalStart][1],
304
+ z: dimensions >= 3 ? controlPoints[intervalStart][2] : 0
305
+ }
306
+ ];
307
+ };
308
+ NurbsSubdivider.applyDeBoorsSubdivision = function (subdivisionParameter, knots, controlPoints) {
309
+ var _a = __read(knots, 6), knotMinus2 = _a[0], knotMinus1 = _a[1], knotZero = _a[2], knotPlus1 = _a[3], knotPlus2 = _a[4], knotPlus3 = _a[5];
310
+ var _b = __read(controlPoints, 4), cpMinus3 = _b[0], cpMinus2 = _b[1], cpMinus1 = _b[2], cpZero = _b[3];
311
+ // De Boor's algorithm for degree 3 subdivision - Step 1
312
+ var alphaZero_1 = (subdivisionParameter - knotZero) / (knotPlus3 - knotZero);
313
+ var betaZero_1 = 1 - alphaZero_1;
314
+ var cpZero_1 = this.interpolatePoint(cpMinus1, cpZero, alphaZero_1, betaZero_1);
315
+ var alphaMinus1_1 = (subdivisionParameter - knotMinus1) / (knotPlus2 - knotMinus1);
316
+ var betaMinus1_1 = 1 - alphaMinus1_1;
317
+ var cpMinus1_1 = this.interpolatePoint(cpMinus2, cpMinus1, alphaMinus1_1, betaMinus1_1);
318
+ var alphaMinus2_1 = (subdivisionParameter - knotMinus2) / (knotPlus1 - knotMinus2);
319
+ var betaMinus2_1 = 1 - alphaMinus2_1;
320
+ var cpMinus2_1 = this.interpolatePoint(cpMinus3, cpMinus2, alphaMinus2_1, betaMinus2_1);
321
+ // De Boor's algorithm for degree 3 subdivision - Step 2
322
+ var alphaZero_2 = (subdivisionParameter - knotZero) / (knotPlus2 - knotZero);
323
+ var betaZero_2 = 1 - alphaZero_2;
324
+ var cpZero_2 = this.interpolatePoint(cpMinus1_1, cpZero_1, alphaZero_2, betaZero_2);
325
+ var alphaMinus1_2 = (subdivisionParameter - knotMinus1) / (knotPlus1 - knotMinus1);
326
+ var betaMinus1_2 = 1 - alphaMinus1_2;
327
+ var cpMinus1_2 = this.interpolatePoint(cpMinus2_1, cpMinus1_1, alphaMinus1_2, betaMinus1_2);
328
+ // De Boor's algorithm for degree 3 subdivision - Step 3
329
+ var alphaZero_3 = (subdivisionParameter - knotZero) / (knotPlus1 - knotZero);
330
+ var betaZero_3 = 1 - alphaZero_3;
331
+ var cpZero_3 = this.interpolatePoint(cpMinus1_2, cpZero_2, alphaZero_3, betaZero_3);
332
+ return [cpMinus2_1, cpMinus1_2, cpZero_3, cpZero_2, cpZero_1];
333
+ };
334
+ NurbsSubdivider.interpolatePoint = function (p1, p2, alpha, beta) {
335
+ return {
336
+ x: beta * p1.x + alpha * p2.x,
337
+ y: beta * p1.y + alpha * p2.y,
338
+ z: beta * p1.z + alpha * p2.z
339
+ };
340
+ };
341
+ NurbsSubdivider.constructSubdividedCurves = function (controlPoints, knotVector, intervalStart, subdivisionParameter, subdividedPoints) {
342
+ var dimensions = controlPoints[0].length;
343
+ var _a = __read(subdividedPoints, 5), cpMinus2_1 = _a[0], cpMinus1_2 = _a[1], cpZero_3 = _a[2], cpZero_2 = _a[3], cpZero_1 = _a[4];
344
+ // Construct first subdivided curve (before subdivision point)
345
+ var firstCurveControlPoints = this.buildFirstCurveControlPoints(controlPoints, intervalStart, [cpMinus2_1, cpMinus1_2, cpZero_3], dimensions);
346
+ var firstCurveKnots = this.buildFirstCurveKnots(knotVector, intervalStart, subdivisionParameter);
347
+ // Construct second subdivided curve (after subdivision point)
348
+ var secondCurveControlPoints = this.buildSecondCurveControlPoints(controlPoints, intervalStart, [cpZero_3, cpZero_2, cpZero_1], dimensions);
349
+ var secondCurveKnots = this.buildSecondCurveKnots(knotVector, intervalStart, subdivisionParameter);
350
+ return [
351
+ {
352
+ points: firstCurveControlPoints,
353
+ knots: firstCurveKnots,
354
+ degree: SPLINE_DEGREE
355
+ },
356
+ {
357
+ points: secondCurveControlPoints,
358
+ knots: secondCurveKnots,
359
+ degree: SPLINE_DEGREE
360
+ }
361
+ ];
362
+ };
363
+ NurbsSubdivider.buildFirstCurveControlPoints = function (controlPoints, intervalStart, subdividedPoints, dimensions) {
364
+ var firstCurveControlPoints = [];
365
+ // Add control points before subdivision
366
+ for (var i = 0; i < intervalStart - 2; i++) {
367
+ firstCurveControlPoints[i] = controlPoints[i];
368
+ }
369
+ // Add subdivided control points
370
+ subdividedPoints.forEach(function (point) {
371
+ firstCurveControlPoints.push(dimensions >= 3 ? [point.x, point.y, point.z] : [point.x, point.y]);
372
+ });
373
+ return firstCurveControlPoints;
374
+ };
375
+ NurbsSubdivider.buildFirstCurveKnots = function (knotVector, intervalStart, subdivisionParameter) {
376
+ var firstCurveKnots = [];
377
+ // Add knots before subdivision
378
+ for (var i = 0; i < intervalStart + 1; i++) {
379
+ firstCurveKnots[i] = knotVector[i];
380
+ }
381
+ // Add subdivision parameter knots
382
+ firstCurveKnots.push(subdivisionParameter, subdivisionParameter, subdivisionParameter, subdivisionParameter);
383
+ return firstCurveKnots;
384
+ };
385
+ NurbsSubdivider.buildSecondCurveControlPoints = function (controlPoints, intervalStart, subdividedPoints, dimensions) {
386
+ var secondCurveControlPoints = [];
387
+ // Add subdivided control points
388
+ subdividedPoints.forEach(function (point) {
389
+ secondCurveControlPoints.push(dimensions >= 3 ? [point.x, point.y, point.z] : [point.x, point.y]);
390
+ });
391
+ // Add remaining control points
392
+ for (var i = intervalStart; i < controlPoints.length; i++) {
393
+ secondCurveControlPoints[i + 3 - intervalStart] = controlPoints[i];
394
+ }
395
+ return secondCurveControlPoints;
396
+ };
397
+ NurbsSubdivider.buildSecondCurveKnots = function (knotVector, intervalStart, subdivisionParameter) {
398
+ var secondCurveKnots = [
399
+ subdivisionParameter,
400
+ subdivisionParameter,
401
+ subdivisionParameter,
402
+ subdivisionParameter
403
+ ];
404
+ for (var i = intervalStart + 1; i < knotVector.length; i++) {
405
+ secondCurveKnots[i + 3 - intervalStart] = knotVector[i];
406
+ }
407
+ return secondCurveKnots;
408
+ };
409
+ return NurbsSubdivider;
410
+ }());
411
+ /**
412
+ * Main spline utility class
413
+ */
414
+ var AcGeSplineUtil = /** @class */ (function () {
415
+ function AcGeSplineUtil() {
416
+ }
417
+ /**
418
+ * Creates a NURBS curve from fit points using the specified knot parameterization
419
+ * @param fitPoints Array of fit points in 3D space
420
+ * @param knotParameterization Type of knot parameterization ('Uniform', 'Chord', or 'SqrtChord')
421
+ * @returns A NURBS curve object or undefined if insufficient points
422
+ */
423
+ AcGeSplineUtil.createByFitPoints = function (fitPoints, knotParameterization) {
424
+ if (knotParameterization === void 0) { knotParameterization = 'Uniform'; }
425
+ if (fitPoints.length < MIN_FIT_POINTS_FOR_SPLINE) {
426
+ return undefined;
427
+ }
428
+ var closedSplineData = this.convertClosedFitPointsToControlPoints(fitPoints, knotParameterization);
429
+ var nurbsCurve = verb.geom.NurbsCurve.byKnotsControlPointsWeights(closedSplineData.degree, closedSplineData.knots, closedSplineData.points, closedSplineData.weights);
430
+ return nurbsCurve;
431
+ };
432
+ /**
433
+ * Converts closed fit points to control points for NURBS curve creation
434
+ * @param fitPoints Array of fit points defining the curve
435
+ * @param knotParameterization Type of knot parameterization
436
+ * @returns NURBS curve data with control points, weights, knots, and degree
437
+ */
438
+ AcGeSplineUtil.convertClosedFitPointsToControlPoints = function (fitPoints, knotParameterization) {
439
+ var cleanedFitPoints = this.removeDuplicateEndPoint(fitPoints);
440
+ var closedSplineData = this.createClosedSplineInterpolation(cleanedFitPoints, knotParameterization);
441
+ return this.convertClosedNurbsToClamped(closedSplineData);
442
+ };
443
+ AcGeSplineUtil.removeDuplicateEndPoint = function (fitPoints) {
444
+ var startPoint = fitPoints[0];
445
+ var endPoint = fitPoints[fitPoints.length - 1];
446
+ if (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1]) {
447
+ return fitPoints.slice(0, -1);
448
+ }
449
+ return fitPoints;
450
+ };
451
+ AcGeSplineUtil.createClosedSplineInterpolation = function (fitPoints, knotParameterization) {
452
+ var fitPointCount = fitPoints.length;
453
+ var controlPointCount = fitPointCount + CLOSED_SPLINE_EXTRA_CONTROL_POINTS;
454
+ var knotVectorSize = fitPointCount + CLOSED_SPLINE_EXTRA_CONTROL_POINTS + SPLINE_DEGREE + 1;
455
+ // Generate knot vector
456
+ var knotVector = KnotVectorGenerator.generate(fitPoints, knotParameterization, knotVectorSize);
457
+ // Extract parameter values for fit points
458
+ var parameterValues = knotVector.slice(SPLINE_DEGREE, SPLINE_DEGREE + fitPointCount);
459
+ // Build basis matrix
460
+ var basisMatrix = BasisMatrixBuilder.buildBasisMatrix(fitPoints, knotVector, parameterValues);
461
+ var reducedBasisMatrix = BasisMatrixBuilder.reduceForClosedSpline(basisMatrix, fitPointCount);
462
+ // Solve for control points
463
+ var solvedControlPoints = ControlPointCalculator.solveControlPoints(reducedBasisMatrix, fitPoints);
464
+ var controlPoints = ControlPointCalculator.constructControlPoints(solvedControlPoints, fitPointCount, fitPoints[0].length);
465
+ // Create weights
466
+ var weights = ControlPointCalculator.createUniformWeights(controlPointCount);
467
+ return {
468
+ points: controlPoints,
469
+ weights: weights,
470
+ knots: knotVector,
471
+ degree: SPLINE_DEGREE
472
+ };
473
+ };
474
+ AcGeSplineUtil.convertClosedNurbsToClamped = function (closedSplineData) {
475
+ var splineDegree = closedSplineData.degree;
476
+ var startParameter = closedSplineData.knots[splineDegree];
477
+ var endParameter = closedSplineData.knots[closedSplineData.knots.length - splineDegree - 1];
478
+ if (splineDegree === SPLINE_DEGREE) {
479
+ var subdividedCurves = NurbsSubdivider.subdivideDegree3(closedSplineData.points, closedSplineData.knots, startParameter);
480
+ subdividedCurves = NurbsSubdivider.subdivideDegree3(subdividedCurves[1].points, subdividedCurves[1].knots, endParameter);
481
+ return subdividedCurves[0];
482
+ }
483
+ return closedSplineData;
484
+ };
485
+ return AcGeSplineUtil;
486
+ }());
487
+ export { AcGeSplineUtil };
488
+ // Export the main function for backward compatibility
489
+ export var createByFitPoints = AcGeSplineUtil.createByFitPoints;
490
+ export var convertClosedFitPointsToControlPoints = AcGeSplineUtil.convertClosedFitPointsToControlPoints;
491
+ //# sourceMappingURL=AcGeSplineUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AcGeSplineUtil.js","sourceRoot":"","sources":["../../src/util/AcGeSplineUtil.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mlightcad/geometry-engine",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "keywords": [