@code3d/core 0.0.1-alpha.0 → 0.0.1-alpha.3

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 (131) hide show
  1. package/README.md +223 -786
  2. package/THIRD_PARTY.md +40 -0
  3. package/bld/THIRD_PARTY_NOTICES.txt +182 -0
  4. package/bld/chunks/chunk-BF55AIEQ.js +31 -0
  5. package/bld/chunks/chunk-BF55AIEQ.js.map +7 -0
  6. package/bld/chunks/chunk-P5VGKAEM.js +30 -0
  7. package/bld/chunks/chunk-P5VGKAEM.js.map +7 -0
  8. package/bld/chunks/chunk-RPY2WVCB.js +24834 -0
  9. package/bld/chunks/chunk-RPY2WVCB.js.map +7 -0
  10. package/bld/chunks/chunk-TJIN6S4R.js +1 -0
  11. package/bld/chunks/chunk-TJIN6S4R.js.map +7 -0
  12. package/bld/chunks/chunk-U5G2VU2I.js +19 -0
  13. package/bld/chunks/chunk-U5G2VU2I.js.map +7 -0
  14. package/bld/library/cached.d.ts +33 -0
  15. package/bld/library/cached.d.ts.map +1 -0
  16. package/bld/library/font.d.ts +39 -0
  17. package/bld/library/font.d.ts.map +1 -0
  18. package/bld/library/google-font.d.ts +14 -0
  19. package/bld/library/google-font.d.ts.map +1 -0
  20. package/bld/library/index.d.ts +8 -2
  21. package/bld/library/index.d.ts.map +1 -1
  22. package/bld/library/index.js +60 -3
  23. package/bld/library/index.js.map +7 -1
  24. package/bld/library/kernel-artifact-codec.d.ts.map +1 -1
  25. package/bld/library/kernel-cache.d.ts +24 -6
  26. package/bld/library/kernel-cache.d.ts.map +1 -1
  27. package/bld/library/material.d.ts +1 -1
  28. package/bld/library/material.d.ts.map +1 -1
  29. package/bld/library/open-cascade.d.ts +4 -0
  30. package/bld/library/open-cascade.d.ts.map +1 -0
  31. package/bld/library/replicad.d.ts +3 -2
  32. package/bld/library/replicad.d.ts.map +1 -1
  33. package/bld/library/replicad.js +10 -24
  34. package/bld/library/replicad.js.map +7 -1
  35. package/bld/library/retained-memory.d.ts.map +1 -1
  36. package/bld/library/runtime.d.ts +146 -80
  37. package/bld/library/runtime.d.ts.map +1 -1
  38. package/bld/library/sketch-solver.d.ts +1 -1
  39. package/bld/library/sketch-solver.d.ts.map +1 -1
  40. package/bld/library/sketch.d.ts +9 -1
  41. package/bld/library/sketch.d.ts.map +1 -1
  42. package/bld/library/text.d.ts +53 -0
  43. package/bld/library/text.d.ts.map +1 -0
  44. package/bld/library/three.js +3 -3
  45. package/bld/library/three.js.map +7 -1
  46. package/bld/library/topology.d.ts.map +1 -1
  47. package/bld/node/index.d.ts.map +1 -1
  48. package/bld/node/index.js +62 -14
  49. package/bld/node/index.js.map +7 -1
  50. package/bld/node/replicad.js +13 -3
  51. package/bld/node/replicad.js.map +7 -1
  52. package/bld/tooling/index.d.ts +17 -15
  53. package/bld/tooling/index.d.ts.map +1 -1
  54. package/bld/tooling/index.js +147 -19
  55. package/bld/tooling/index.js.map +7 -1
  56. package/package.json +18 -6
  57. package/src/library/cached.ts +132 -0
  58. package/src/library/font.ts +186 -0
  59. package/src/library/google-font.ts +97 -0
  60. package/src/library/index.ts +8 -3
  61. package/src/library/kernel-artifact-codec.ts +129 -20
  62. package/src/library/kernel-cache.ts +128 -34
  63. package/src/library/loft.ts +4 -0
  64. package/src/library/material.ts +3 -4
  65. package/src/library/open-cascade.ts +13 -0
  66. package/src/library/replicad.ts +5 -5
  67. package/src/library/retained-memory.ts +6 -1
  68. package/src/library/runtime.ts +2064 -1730
  69. package/src/library/sketch-solver.ts +3 -1
  70. package/src/library/sketch.ts +81 -13
  71. package/src/library/text.ts +477 -0
  72. package/src/library/topology.ts +24 -0
  73. package/src/library/tsconfig.json +2 -1
  74. package/src/node/index.ts +14 -3
  75. package/src/node/tsconfig.json +2 -1
  76. package/src/tooling/index.ts +48 -46
  77. package/src/tooling/tsconfig.json +2 -1
  78. package/bld/library/alignment-geometry.js +0 -322
  79. package/bld/library/alignment-geometry.js.map +0 -1
  80. package/bld/library/bound-solver.js +0 -252
  81. package/bld/library/bound-solver.js.map +0 -1
  82. package/bld/library/extrude.js +0 -28
  83. package/bld/library/extrude.js.map +0 -1
  84. package/bld/library/kernel-artifact-codec.js +0 -148
  85. package/bld/library/kernel-artifact-codec.js.map +0 -1
  86. package/bld/library/kernel-cache.js +0 -245
  87. package/bld/library/kernel-cache.js.map +0 -1
  88. package/bld/library/kernel-shapes.js +0 -108
  89. package/bld/library/kernel-shapes.js.map +0 -1
  90. package/bld/library/loft.js +0 -161
  91. package/bld/library/loft.js.map +0 -1
  92. package/bld/library/material.js +0 -176
  93. package/bld/library/material.js.map +0 -1
  94. package/bld/library/model-color.js +0 -36
  95. package/bld/library/model-color.js.map +0 -1
  96. package/bld/library/open-cascade-error.js +0 -22
  97. package/bld/library/open-cascade-error.js.map +0 -1
  98. package/bld/library/relation-solver.js +0 -258
  99. package/bld/library/relation-solver.js.map +0 -1
  100. package/bld/library/retained-memory.js +0 -27
  101. package/bld/library/retained-memory.js.map +0 -1
  102. package/bld/library/runtime.js +0 -2954
  103. package/bld/library/runtime.js.map +0 -1
  104. package/bld/library/shell.js +0 -221
  105. package/bld/library/shell.js.map +0 -1
  106. package/bld/library/sketch-curve-intersections.js +0 -117
  107. package/bld/library/sketch-curve-intersections.js.map +0 -1
  108. package/bld/library/sketch-curves.js +0 -89
  109. package/bld/library/sketch-curves.js.map +0 -1
  110. package/bld/library/sketch-drag-rules.js +0 -522
  111. package/bld/library/sketch-drag-rules.js.map +0 -1
  112. package/bld/library/sketch-face.js +0 -72
  113. package/bld/library/sketch-face.js.map +0 -1
  114. package/bld/library/sketch-incidence.js +0 -114
  115. package/bld/library/sketch-incidence.js.map +0 -1
  116. package/bld/library/sketch-precision.js +0 -55
  117. package/bld/library/sketch-precision.js.map +0 -1
  118. package/bld/library/sketch-regions.js +0 -193
  119. package/bld/library/sketch-regions.js.map +0 -1
  120. package/bld/library/sketch-solver.js +0 -578
  121. package/bld/library/sketch-solver.js.map +0 -1
  122. package/bld/library/sketch.js +0 -650
  123. package/bld/library/sketch.js.map +0 -1
  124. package/bld/library/spatial.js +0 -195
  125. package/bld/library/spatial.js.map +0 -1
  126. package/bld/library/topology-id.js +0 -67
  127. package/bld/library/topology-id.js.map +0 -1
  128. package/bld/library/topology-inspection.js +0 -267
  129. package/bld/library/topology-inspection.js.map +0 -1
  130. package/bld/library/topology.js +0 -455
  131. package/bld/library/topology.js.map +0 -1
@@ -1,578 +0,0 @@
1
- import { sketchArcGeometry } from './sketch-curves.js';
2
- import { pointLineDistance } from './sketch-incidence.js';
3
- import { SketchPrecision } from './sketch-precision.js';
4
- export class SketchConstraintError extends Error {
5
- constraints;
6
- constructor(constraints, message) {
7
- super(message);
8
- this.constraints = constraints;
9
- this.name = 'SketchConstraintError';
10
- }
11
- }
12
- let module;
13
- export function installSketchSolver(instance) {
14
- module = instance;
15
- }
16
- /** A fresh native system per solve: no previous solution or native handles escape. */
17
- export function solveSketchProblem(problem, objectives = [], preferredGeometry = problem) {
18
- const authored = preferredGeometry;
19
- const precision = new SketchPrecision(problem);
20
- problem = initializeArcEndpoints(problem, precision);
21
- const { constraints, points } = problem;
22
- if (!points.length)
23
- return {
24
- positions: [],
25
- radii: [],
26
- arcRadii: [],
27
- degreesOfFreedom: 0,
28
- redundant: [],
29
- };
30
- // Unconstrained values and edits do not need a native modeling kernel.
31
- if (!constraints.length && !problem.arcs.length)
32
- return {
33
- positions: points.map((p, index) => {
34
- const targets = objectives
35
- .filter(o => o.kind === 'point')
36
- .filter(o => o.point === index);
37
- return p.position.map((value, axis) => p.locked[axis]
38
- ? value
39
- : leastSquaresTarget(value, targets.map(o => ({
40
- value: o.position[axis],
41
- weight: o.weight,
42
- }))));
43
- }),
44
- radii: problem.circles.map((circle, index) => circle.locked
45
- ? circle.radius
46
- : leastSquaresTarget(circle.radius, objectives
47
- .filter(o => o.kind === 'radius')
48
- .filter(o => o.curve === 'circle' && o.index === index))),
49
- arcRadii: [],
50
- degreesOfFreedom: problem.circles.filter(c => !c.locked).length +
51
- points.reduce((sum, p) => sum + Number(!p.locked[0]) + Number(!p.locked[1]), 0),
52
- redundant: [],
53
- };
54
- const { origin, scale } = precision;
55
- const normalized = (p) => [
56
- (p[0] - origin[0]) / scale,
57
- (p[1] - origin[1]) / scale,
58
- ];
59
- const gcs = new module.GcsSystem();
60
- const geometries = [];
61
- try {
62
- gcs.set_debug_mode(0);
63
- gcs.set_max_iterations(100);
64
- gcs.set_covergence_threshold(precision.convergence);
65
- const indices = points.map(p => normalized(p.position).map((v, axis) => gcs.push_p_param(v, p.locked[axis])));
66
- const nativePoints = indices.map(([x, y]) => {
67
- const point = gcs.make_point(x, y);
68
- geometries.push(point);
69
- return point;
70
- });
71
- const radiusIndices = problem.circles.map(c => gcs.push_p_param(c.radius / scale, c.locked));
72
- const nativeCircles = problem.circles.map((circle, i) => {
73
- const [x, y] = indices[circle.center];
74
- const geometry = gcs.make_circle(x, y, radiusIndices[i]);
75
- geometries.push(geometry);
76
- return geometry;
77
- });
78
- const arcRadiusIndices = [];
79
- const arcAngleIndices = [];
80
- const nativeArcs = problem.arcs.map(arc => {
81
- const center = points[arc.center].position;
82
- const [start, end] = arc.points.map(i => points[i].position);
83
- const radius = Math.hypot(start[0] - center[0], start[1] - center[1]);
84
- if (radius === 0 ||
85
- Math.hypot(end[0] - center[0], end[1] - center[1]) === 0 ||
86
- Math.hypot(end[0] - start[0], end[1] - start[1]) === 0)
87
- throw new Error('Sketch arcs require a nonzero radius and distinct endpoints; use circle for a full circle.');
88
- const curve = sketchArcGeometry(center, start, end, arc.direction);
89
- // Unwrap on the authored directed branch, including major arcs. These
90
- // parameters are solve-local; persisted endpoints reconstruct the branch.
91
- const angles = [curve.start, curve.start + curve.sweep].map(angle => gcs.push_p_param(angle, false));
92
- arcAngleIndices.push(angles);
93
- const radiusIndex = gcs.push_p_param(arc.radius / scale, arc.locked);
94
- arcRadiusIndices.push(radiusIndex);
95
- const [cx, cy] = indices[arc.center], [sx, sy] = indices[arc.points[0]], [ex, ey] = indices[arc.points[1]];
96
- const geometry = gcs.make_arc(cx, cy, sx, sy, ex, ey, angles[0], angles[1], radiusIndex);
97
- geometries.push(geometry);
98
- // Structural equations, not authored constraints or persistent angles.
99
- gcs.add_constraint_arc_rules(geometry, 0, true, 1);
100
- return geometry;
101
- });
102
- const constant = (value) => gcs.push_p_param(value, true);
103
- const constantTags = new Set();
104
- const activeTags = new Set();
105
- // A locked parameter equation has no unknowns. Check it directly instead
106
- // of passing a zero-Jacobian row to native redundancy analysis: that
107
- // analysis also solves the mouse objective and can mistake an already
108
- // satisfied constant row for a conflict when a different axis cannot move.
109
- const checkConstant = (actual, expected, tag, normalization = scale) => {
110
- if (Math.abs(actual - expected) / normalization >
111
- precision.nativeAcceptance)
112
- throw new SketchConstraintError([tag - 1], `Could not satisfy sketch constraints (${tag}). A locked geometry parameter contradicts the constraint.`);
113
- constantTags.add(tag);
114
- };
115
- // ArcRules also determine dimensions from known point coordinates. Such
116
- // dimensions are constant equations just like a locked circle radius;
117
- // sending them again to native redundancy analysis can falsely conflict
118
- // with an unreachable mouse target even though all hard equations hold.
119
- const knownCoordinate = (index, axis) => {
120
- if (points[index].locked[axis])
121
- return points[index].position[axis];
122
- const fixed = constraints.find(c => c.kind === 'fixed' && c.point === index);
123
- if (fixed?.kind === 'fixed')
124
- return fixed.position[axis];
125
- const coordinate = constraints.find(c => c.kind === (axis === 0 ? 'x' : 'y') && c.point === index);
126
- return coordinate && 'value' in coordinate ? coordinate.value : undefined;
127
- };
128
- const knownPosition = (index) => {
129
- const x = knownCoordinate(index, 0), y = knownCoordinate(index, 1);
130
- return x !== undefined && y !== undefined ? [x, y] : undefined;
131
- };
132
- const knownRadius = (kind, index) => {
133
- const curve = (kind === 'circle' ? problem.circles : problem.arcs)[index];
134
- if (curve.locked)
135
- return curve.radius;
136
- if (kind === 'circle')
137
- return undefined;
138
- const arc = problem.arcs[index];
139
- const center = knownPosition(arc.center);
140
- const endpoint = knownPosition(arc.points[0]) ?? knownPosition(arc.points[1]);
141
- return center && endpoint
142
- ? Math.hypot(endpoint[0] - center[0], endpoint[1] - center[1])
143
- : undefined;
144
- };
145
- const coordinate = (point, axis, value, tag, weight = 1) => {
146
- if (points[point].locked[axis]) {
147
- checkConstant(points[point].position[axis], value, tag);
148
- return;
149
- }
150
- activeTags.add(tag);
151
- const method = axis === 0
152
- ? 'add_constraint_coordinate_x'
153
- : 'add_constraint_coordinate_y';
154
- gcs[method](nativePoints[point], constant((value - origin[axis]) / scale), tag, true, weight);
155
- };
156
- constraints.forEach((constraint, index) => {
157
- const tag = index + 1;
158
- if (constraint.kind === 'sweep') {
159
- const arc = problem.arcs[constraint.index];
160
- const center = knownPosition(arc.center), a = knownPosition(arc.points[0]), b = knownPosition(arc.points[1]);
161
- if (center && a && b) {
162
- checkConstant(Math.abs(sketchArcGeometry(center, a, b, arc.direction).sweep), (constraint.value * Math.PI) / 180, tag, 1);
163
- return;
164
- }
165
- const [start, end] = arcAngleIndices[constraint.index];
166
- const sign = problem.arcs[constraint.index].direction === 'ccw' ? 1 : -1;
167
- gcs.add_constraint_difference(start, end, constant((sign * constraint.value * Math.PI) / 180), tag, true, 1);
168
- }
169
- else if (constraint.kind === 'radius') {
170
- const known = knownRadius(constraint.curve, constraint.index);
171
- if (known !== undefined)
172
- checkConstant(known, constraint.value, tag);
173
- else {
174
- activeTags.add(tag);
175
- const args = [
176
- constant(constraint.value / scale),
177
- tag,
178
- true,
179
- 1,
180
- ];
181
- if (constraint.curve === 'arc')
182
- gcs.add_constraint_arc_radius(nativeArcs[constraint.index], ...args);
183
- else
184
- gcs.add_constraint_circle_radius(nativeCircles[constraint.index], ...args);
185
- }
186
- }
187
- else if (constraint.kind === 'fixed') {
188
- coordinate(constraint.point, 0, constraint.position[0], tag);
189
- coordinate(constraint.point, 1, constraint.position[1], tag);
190
- }
191
- else if (constraint.kind === 'x' || constraint.kind === 'y') {
192
- coordinate(constraint.point, constraint.kind === 'x' ? 0 : 1, constraint.value, tag);
193
- }
194
- else if (constraint.kind === 'pointOnCircle') {
195
- const [p, center] = constraint.points;
196
- const a = knownPosition(p), b = knownPosition(center);
197
- const radius = knownRadius(constraint.curve, constraint.index);
198
- if (a && b && radius !== undefined) {
199
- checkConstant(Math.hypot(a[0] - b[0], a[1] - b[1]), radius, tag);
200
- return;
201
- }
202
- gcs.add_constraint_p2p_distance(nativePoints[p], nativePoints[center], (constraint.curve === 'circle' ? radiusIndices : arcRadiusIndices)[constraint.index], tag, true, 1);
203
- }
204
- else if (constraint.kind === 'pointOnLine') {
205
- const [p, a, b] = constraint.points;
206
- const known = constraint.points.map(knownPosition);
207
- if (known.every(p => p !== undefined)) {
208
- checkConstant(pointLineDistance(known[0], known[1], known[2]), 0, tag);
209
- return;
210
- }
211
- gcs.add_constraint_point_on_line_ppp(nativePoints[p], nativePoints[a], nativePoints[b], tag, true, 1);
212
- }
213
- else if (constraint.kind === 'midpoint') {
214
- const [m, a, b] = constraint.points;
215
- // M - A = B - M, independently on each axis. Shared free difference
216
- // parameters keep these equations linear, even when A and B coincide.
217
- // Native point symmetry uses a line/bisector and is singular there.
218
- for (const axis of [0, 1]) {
219
- const difference = gcs.push_p_param((points[m].position[axis] - points[a].position[axis]) / scale, false);
220
- // PlaneGCS difference is second - first, not first - second.
221
- gcs.add_constraint_difference(indices[a][axis], indices[m][axis], difference, tag, true, 1);
222
- gcs.add_constraint_difference(indices[m][axis], indices[b][axis], difference, tag, true, 1);
223
- }
224
- }
225
- else if (constraint.kind === 'parallel' ||
226
- constraint.kind === 'perpendicular' ||
227
- constraint.kind === 'lineAngle') {
228
- if (constraint.points.every(i => knownPosition(i))) {
229
- checkConstant(residual(constraint, points.map((p, i) => knownPosition(i) ?? p.position), [], [], [], scale), 0, tag, 1);
230
- return;
231
- }
232
- const [a, b, c, d] = constraint.points.map(i => nativePoints[i]);
233
- if (constraint.kind === 'parallel') {
234
- const [ia, ib, ic, id] = constraint.points.map(i => indices[i]);
235
- const first = gcs.make_line(ia[0], ia[1], ib[0], ib[1]);
236
- const second = gcs.make_line(ic[0], ic[1], id[0], id[1]);
237
- geometries.push(first, second);
238
- gcs.add_constraint_parallel(first, second, tag, true, 1);
239
- }
240
- else if (constraint.kind === 'perpendicular') {
241
- gcs.add_constraint_perpendicular_pppp(a, b, c, d, tag, true, 1);
242
- }
243
- else {
244
- gcs.add_constraint_l2l_angle_pppp(a, b, c, d, constant((constraint.value * Math.PI) / 180), tag, true, 1);
245
- }
246
- }
247
- else if ('points' in constraint) {
248
- const [a, b] = constraint.points.map(i => nativePoints[i]);
249
- switch (constraint.kind) {
250
- case 'horizontal':
251
- gcs.add_constraint_horizontal_pp(a, b, tag, true, 1);
252
- break;
253
- case 'vertical':
254
- gcs.add_constraint_vertical_pp(a, b, tag, true, 1);
255
- break;
256
- case 'coincident':
257
- gcs.add_constraint_p2p_coincident(a, b, tag, true, 1);
258
- break;
259
- case 'length':
260
- gcs.add_constraint_p2p_distance(a, b, constant(constraint.value / scale), tag, true, 1);
261
- break;
262
- case 'angle':
263
- gcs.add_constraint_p2p_angle(a, b, constant((constraint.value * Math.PI) / 180), tag, true, 1);
264
- break;
265
- }
266
- }
267
- });
268
- // ArcRules introduce an underdetermined radius/angle system. PlaneGCS
269
- // sorts its parameters by native address; DogLeg's FullPivLU step then
270
- // chooses free variables based on allocation history. BFGS initializes
271
- // arcs without that basic-solution pivot choice or new reference locks.
272
- // Keep the existing non-arc seed policy: changing it can create new
273
- // point-on-line incidences before a later drag begins.
274
- const hardAlgorithm = problem.arcs.length ? 0 : 2;
275
- const solve = (algorithm = hardAlgorithm) => {
276
- const status = gcs.solve_system(algorithm);
277
- const conflicting = constraintIndices(gcs, 'get_conflicting');
278
- if (status > 1 || conflicting.length)
279
- throw new SketchConstraintError(conflicting, `Could not satisfy sketch constraints${conflicting.length ? ` (${conflicting.map(i => i + 1).join(', ')})` : ''}. The constraints may conflict or need a different current geometry.`);
280
- gcs.apply_solution();
281
- };
282
- const redundant = [];
283
- if (objectives.length) {
284
- // Diagnose the actual model before adding soft objectives. PlaneGCS 1.2
285
- // otherwise includes negative tags in its redundancy consistency solve.
286
- // Remove only constraints proved fully redundant, retaining every author
287
- // equation for the independent final residual check below.
288
- for (;;) {
289
- solve();
290
- const found = constraintIndices(gcs, 'get_redundant');
291
- if (!found.length)
292
- break;
293
- redundant.push(...found);
294
- for (const index of found)
295
- gcs.clear_by_id(index + 1);
296
- }
297
- }
298
- for (const objective of objectives) {
299
- // Negative tags are PlaneGCS soft objectives; they neither change DOF nor
300
- // weaken persistent constraints. The gesture is not part of the model.
301
- if (objective.kind === 'radius') {
302
- if (knownRadius(objective.curve, objective.index) === undefined) {
303
- const args = [
304
- constant(objective.value / scale),
305
- -1,
306
- true,
307
- objective.weight,
308
- ];
309
- if (objective.curve === 'arc')
310
- gcs.add_constraint_arc_radius(nativeArcs[objective.index], ...args);
311
- else
312
- gcs.add_constraint_circle_radius(nativeCircles[objective.index], ...args);
313
- }
314
- }
315
- else
316
- for (const axis of [0, 1])
317
- if (knownCoordinate(objective.point, axis) === undefined)
318
- coordinate(objective.point, axis, objective.position[axis], -1, objective.weight);
319
- }
320
- // BFGS also accepts a least-squares optimum in soft-only subsystems left
321
- // by equal-coordinate reduction; their residuals need not all vanish.
322
- solve(objectives.length ? 0 : hardAlgorithm);
323
- const positions = indices.map(([x, y], index) => [
324
- points[index].locked[0]
325
- ? points[index].position[0]
326
- : gcs.get_p_param(x) * scale + origin[0],
327
- points[index].locked[1]
328
- ? points[index].position[1]
329
- : gcs.get_p_param(y) * scale + origin[1],
330
- ]);
331
- const radii = radiusIndices.map((index, i) => problem.circles[i].locked
332
- ? problem.circles[i].radius
333
- : gcs.get_p_param(index) * scale);
334
- const arcRadii = arcRadiusIndices.map((index, i) => problem.arcs[i].locked
335
- ? problem.arcs[i].radius
336
- : gcs.get_p_param(index) * scale);
337
- if (!positions.every(p => p.every(Number.isFinite)) ||
338
- !radii.every(Number.isFinite) ||
339
- !arcRadii.every(Number.isFinite))
340
- throw new SketchConstraintError([], 'The sketch solver returned non-finite geometry parameters.');
341
- // PlaneGCS can return Converged after removing redundant equations even
342
- // when the applied solution satisfies every authored constraint. Neither
343
- // Success nor Converged alone is our acceptance criterion: verify all hard
344
- // equations independently, in normalized geometry units.
345
- const unsatisfied = constraints.flatMap((c, i) => residual(c, positions, radii, arcRadii, problem.arcs, scale) <=
346
- precision.nativeAcceptance
347
- ? []
348
- : [i]);
349
- for (const [i, arc] of problem.arcs.entries()) {
350
- const center = positions[arc.center];
351
- if (arcRadii[i] <= 0 ||
352
- arc.points.some(point => Math.abs(Math.hypot(positions[point][0] - center[0], positions[point][1] - center[1]) - arcRadii[i]) /
353
- scale >
354
- precision.nativeAcceptance))
355
- throw new SketchConstraintError([], 'The sketch solver did not satisfy the arc geometry.');
356
- }
357
- if (unsatisfied.length)
358
- throw new SketchConstraintError(unsatisfied, `Sketch constraints ${unsatisfied.map(i => i + 1).join(', ')} did not converge to a valid solution.`);
359
- return {
360
- ...cleanSolution(problem, { positions, radii, arcRadii }, authored, objectives, precision),
361
- degreesOfFreedom: gcs.dof(),
362
- redundant: [
363
- ...new Set([
364
- ...constraintIndices(gcs, 'get_redundant'),
365
- ...redundant,
366
- ...[...constantTags]
367
- .filter(tag => !activeTags.has(tag))
368
- .map(tag => tag - 1),
369
- ]),
370
- ].sort((a, b) => a - b),
371
- };
372
- }
373
- finally {
374
- for (const geometry of geometries)
375
- geometry.delete();
376
- gcs.clear_data();
377
- gcs.delete();
378
- }
379
- }
380
- /**
381
- * Remove numerical tails only within local feature scale, then independently
382
- * check the complete hard system. Exact input/gesture values take precedence;
383
- * close points never acquire shared identity through this numeric operation.
384
- */
385
- function cleanSolution(problem, result, authored, objectives, precision) {
386
- const { pointScales } = precision;
387
- const coordinate = (index, axis, value) => {
388
- if (problem.points[index].locked[axis])
389
- return value;
390
- const fixed = problem.constraints.find(c => (c.kind === 'fixed' || c.kind === (axis === 0 ? 'x' : 'y')) &&
391
- c.point === index);
392
- if (fixed?.kind === 'fixed')
393
- return fixed.position[axis];
394
- if (fixed?.kind === 'x' || fixed?.kind === 'y')
395
- return fixed.value;
396
- return precision.clean(value, pointScales[index], [
397
- ...objectives
398
- .filter(o => o.kind === 'point')
399
- .filter(o => o.point === index)
400
- .map(o => o.position[axis]),
401
- authored.points[index].position[axis],
402
- ]);
403
- };
404
- const radius = (curve, index, value) => {
405
- const entities = curve === 'circle' ? problem.circles : problem.arcs;
406
- if (entities[index].locked)
407
- return value;
408
- const dimension = problem.constraints.find(c => c.kind === 'radius' && c.curve === curve && c.index === index);
409
- if (dimension?.kind === 'radius')
410
- return dimension.value;
411
- return precision.clean(value, value, [
412
- (curve === 'circle' ? authored.circles : authored.arcs)[index].radius,
413
- ]);
414
- };
415
- const candidate = {
416
- positions: result.positions.map((p, i) => p.map((value, axis) => coordinate(i, axis, value))),
417
- radii: result.radii.map((value, i) => radius('circle', i, value)),
418
- arcRadii: result.arcRadii.map((value, i) => radius('arc', i, value)),
419
- };
420
- // A stricter threshold than native solve acceptance prevents cleanup from
421
- // consuming its tolerance budget. Use each equation's own geometry scale.
422
- const valid = problem.constraints.every(c => {
423
- const scale = c.kind === 'length' || c.kind === 'radius'
424
- ? c.value
425
- : c.kind === 'sweep'
426
- ? problem.arcs[c.index].radius
427
- : 'point' in c
428
- ? pointScales[c.point]
429
- : Math.min(...c.points.map(i => pointScales[i]));
430
- return (residual(c, candidate.positions, candidate.radii, candidate.arcRadii, problem.arcs, scale) <= precision.relative);
431
- }) &&
432
- problem.arcs.every((arc, i) => candidate.positions[arc.points[0]].some((v, axis) => v !== candidate.positions[arc.points[1]][axis]) &&
433
- arc.points.every(index => Math.abs(Math.hypot(...candidate.positions[index].map((v, axis) => v - candidate.positions[arc.center][axis])) - candidate.arcRadii[i]) <= precision.tolerance(arc.radius, candidate.arcRadii[i]))) &&
434
- problem.lines.every(([a, b]) => candidate.positions[a].some((v, axis) => v !== candidate.positions[b][axis]));
435
- return valid ? candidate : result;
436
- }
437
- /**
438
- * Radius is current geometry, not a fixed dimension. Seed free endpoint axes
439
- * along their authored directions before solving structural and authored
440
- * equations together. Shared endpoints average simultaneous proposals, the
441
- * least-squares starting position, rather than giving the last arc ownership.
442
- * No initialization objective or lock enters the solver or model DOF.
443
- */
444
- function initializeArcEndpoints(problem, precision) {
445
- if (!problem.arcs.length)
446
- return problem;
447
- // An explicit radius already determines this scalar. Start there rather than
448
- // projecting satisfied endpoints to conflicting data and asking an
449
- // underconstrained solve to shrink them again (which can translate the arc).
450
- // Keep locked values and all equations: contradictory dimensions still fail.
451
- const arcs = problem.arcs.map((arc, index) => {
452
- const dimension = problem.constraints.find(c => c.kind === 'radius' && c.curve === 'arc' && c.index === index);
453
- return !arc.locked && dimension?.kind === 'radius'
454
- ? { ...arc, radius: dimension.value }
455
- : arc;
456
- });
457
- const proposals = problem.points.map(() => []);
458
- for (const arc of arcs) {
459
- const center = problem.points[arc.center].position;
460
- for (const index of arc.points) {
461
- const point = problem.points[index].position;
462
- const dx = point[0] - center[0], dy = point[1] - center[1];
463
- const length = Math.hypot(dx, dy);
464
- if (!length)
465
- throw new Error('Sketch arcs require a nonzero radius and distinct endpoints; use circle for a full circle.');
466
- // Already valid current geometry is a seed, not an instruction to
467
- // re-project rounded solver output on every forward compilation.
468
- if (Math.abs(length - arc.radius) <= precision.tolerance(arc.radius))
469
- continue;
470
- proposals[index].push([
471
- center[0] + (dx / length) * arc.radius,
472
- center[1] + (dy / length) * arc.radius,
473
- ]);
474
- }
475
- }
476
- return {
477
- ...problem,
478
- arcs,
479
- points: problem.points.map((point, index) => {
480
- const coordinate = (axis) => {
481
- const value = point.position[axis];
482
- const targets = proposals[index];
483
- if (!targets.length ||
484
- point.locked[axis] ||
485
- problem.constraints.some(c => (c.kind === 'fixed' || c.kind === 'x' || c.kind === 'y') &&
486
- c.point === index &&
487
- (c.kind === 'fixed' || c.kind === (axis === 0 ? 'x' : 'y'))))
488
- return value;
489
- return targets.reduce((sum, p) => sum + (p[axis] - value) / targets.length, value);
490
- };
491
- return { ...point, position: [coordinate(0), coordinate(1)] };
492
- }),
493
- };
494
- }
495
- function residual(c, positions, radii, arcRadii, arcs, scale) {
496
- switch (c.kind) {
497
- case 'parallel':
498
- case 'perpendicular':
499
- case 'lineAngle': {
500
- const [a, b, d, e] = c.points.map(i => positions[i]);
501
- const x1 = b[0] - a[0], y1 = b[1] - a[1];
502
- const x2 = e[0] - d[0], y2 = e[1] - d[1];
503
- const length = Math.hypot(x1, y1) * Math.hypot(x2, y2);
504
- if (!length)
505
- return Infinity;
506
- if (c.kind === 'parallel')
507
- return Math.abs(x1 * y2 - y1 * x2) / length;
508
- if (c.kind === 'perpendicular')
509
- return Math.abs(x1 * x2 + y1 * y2) / length;
510
- const difference = Math.atan2(y2, x2) - Math.atan2(y1, x1) - (c.value * Math.PI) / 180;
511
- return Math.abs(Math.atan2(Math.sin(difference), Math.cos(difference)));
512
- }
513
- case 'pointOnCircle': {
514
- const [p, center] = c.points.map(i => positions[i]);
515
- const radius = (c.curve === 'circle' ? radii : arcRadii)[c.index];
516
- return (Math.abs(Math.hypot(p[0] - center[0], p[1] - center[1]) - radius) /
517
- scale);
518
- }
519
- case 'pointOnLine': {
520
- const [p, a, b] = c.points.map(i => positions[i]);
521
- return pointLineDistance(p, a, b) / scale;
522
- }
523
- case 'sweep': {
524
- const arc = arcs[c.index];
525
- const curve = sketchArcGeometry(positions[arc.center], positions[arc.points[0]], positions[arc.points[1]], arc.direction);
526
- return Math.abs(Math.abs(curve.sweep) - (c.value * Math.PI) / 180);
527
- }
528
- case 'radius':
529
- return (Math.abs((c.curve === 'circle' ? radii : arcRadii)[c.index] - c.value) /
530
- scale);
531
- case 'fixed':
532
- return Math.hypot(...positions[c.point].map((v, i) => (v - c.position[i]) / scale));
533
- case 'x':
534
- case 'y':
535
- return (Math.abs(positions[c.point][c.kind === 'x' ? 0 : 1] - c.value) / scale);
536
- case 'midpoint': {
537
- const [m, a, b] = c.points.map(i => positions[i]);
538
- return Math.hypot(...m.map((v, axis) => ((v - a[axis]) / scale + (v - b[axis]) / scale) / 2));
539
- }
540
- default: {
541
- const [a, b] = c.points.map(i => positions[i]);
542
- const dx = (b[0] - a[0]) / scale, dy = (b[1] - a[1]) / scale;
543
- switch (c.kind) {
544
- case 'horizontal':
545
- return Math.abs(dy);
546
- case 'vertical':
547
- return Math.abs(dx);
548
- case 'coincident':
549
- return Math.hypot(dx, dy);
550
- case 'length':
551
- return Math.abs(Math.hypot(dx, dy) - c.value / scale);
552
- case 'angle': {
553
- const difference = Math.atan2(dy, dx) - (c.value * Math.PI) / 180;
554
- return Math.abs(Math.atan2(Math.sin(difference), Math.cos(difference)));
555
- }
556
- }
557
- }
558
- }
559
- }
560
- /** Native scale weights multiply residuals, so their squares weight the mean. */
561
- function leastSquaresTarget(current, targets) {
562
- if (!targets.length)
563
- return current;
564
- const total = targets.reduce((sum, target) => sum + target.weight ** 2, 0);
565
- return (targets.reduce((sum, target) => sum + target.value * target.weight ** 2, 0) / total);
566
- }
567
- function constraintIndices(gcs, method) {
568
- const vector = gcs[method]();
569
- try {
570
- return [
571
- ...new Set(Array.from({ length: vector.size() }, (_, i) => vector.get(i) - 1).filter(i => i >= 0)),
572
- ];
573
- }
574
- finally {
575
- vector.delete();
576
- }
577
- }
578
- //# sourceMappingURL=sketch-solver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sketch-solver.js","sourceRoot":"","sources":["../../src/library/sketch-solver.ts"],"names":[],"mappings":"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"}