@code3d/core 0.0.1-alpha.0 → 0.0.1-alpha.2
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/README.md +223 -786
- package/THIRD_PARTY.md +40 -0
- package/bld/THIRD_PARTY_NOTICES.txt +182 -0
- package/bld/chunks/chunk-5E6VXJU2.js +30 -0
- package/bld/chunks/chunk-5E6VXJU2.js.map +7 -0
- package/bld/chunks/chunk-63ZUQWQ2.js +19 -0
- package/bld/chunks/chunk-63ZUQWQ2.js.map +7 -0
- package/bld/chunks/chunk-AWYI64EE.js +31 -0
- package/bld/chunks/chunk-AWYI64EE.js.map +7 -0
- package/bld/chunks/chunk-F53RTQPT.js +24787 -0
- package/bld/chunks/chunk-F53RTQPT.js.map +7 -0
- package/bld/chunks/chunk-TJIN6S4R.js +1 -0
- package/bld/chunks/chunk-TJIN6S4R.js.map +7 -0
- package/bld/library/cached.d.ts +33 -0
- package/bld/library/cached.d.ts.map +1 -0
- package/bld/library/font.d.ts +39 -0
- package/bld/library/font.d.ts.map +1 -0
- package/bld/library/google-font.d.ts +14 -0
- package/bld/library/google-font.d.ts.map +1 -0
- package/bld/library/index.d.ts +8 -2
- package/bld/library/index.d.ts.map +1 -1
- package/bld/library/index.js +60 -3
- package/bld/library/index.js.map +7 -1
- package/bld/library/kernel-artifact-codec.d.ts.map +1 -1
- package/bld/library/kernel-cache.d.ts +17 -6
- package/bld/library/kernel-cache.d.ts.map +1 -1
- package/bld/library/material.d.ts +1 -1
- package/bld/library/material.d.ts.map +1 -1
- package/bld/library/open-cascade.d.ts +4 -0
- package/bld/library/open-cascade.d.ts.map +1 -0
- package/bld/library/replicad.d.ts +3 -2
- package/bld/library/replicad.d.ts.map +1 -1
- package/bld/library/replicad.js +10 -24
- package/bld/library/replicad.js.map +7 -1
- package/bld/library/retained-memory.d.ts.map +1 -1
- package/bld/library/runtime.d.ts +144 -80
- package/bld/library/runtime.d.ts.map +1 -1
- package/bld/library/sketch-solver.d.ts +1 -1
- package/bld/library/sketch-solver.d.ts.map +1 -1
- package/bld/library/sketch.d.ts +9 -1
- package/bld/library/sketch.d.ts.map +1 -1
- package/bld/library/text.d.ts +53 -0
- package/bld/library/text.d.ts.map +1 -0
- package/bld/library/three.js +3 -3
- package/bld/library/three.js.map +7 -1
- package/bld/node/index.d.ts.map +1 -1
- package/bld/node/index.js +62 -14
- package/bld/node/index.js.map +7 -1
- package/bld/node/replicad.js +13 -3
- package/bld/node/replicad.js.map +7 -1
- package/bld/tooling/index.d.ts +17 -15
- package/bld/tooling/index.d.ts.map +1 -1
- package/bld/tooling/index.js +147 -19
- package/bld/tooling/index.js.map +7 -1
- package/package.json +18 -6
- package/src/library/cached.ts +132 -0
- package/src/library/font.ts +186 -0
- package/src/library/google-font.ts +97 -0
- package/src/library/index.ts +8 -3
- package/src/library/kernel-artifact-codec.ts +129 -20
- package/src/library/kernel-cache.ts +111 -33
- package/src/library/material.ts +3 -4
- package/src/library/open-cascade.ts +13 -0
- package/src/library/replicad.ts +5 -5
- package/src/library/retained-memory.ts +6 -1
- package/src/library/runtime.ts +2049 -1728
- package/src/library/sketch-solver.ts +3 -1
- package/src/library/sketch.ts +81 -13
- package/src/library/text.ts +477 -0
- package/src/library/tsconfig.json +2 -1
- package/src/node/index.ts +14 -3
- package/src/node/tsconfig.json +2 -1
- package/src/tooling/index.ts +48 -46
- package/src/tooling/tsconfig.json +2 -1
- package/bld/library/alignment-geometry.js +0 -322
- package/bld/library/alignment-geometry.js.map +0 -1
- package/bld/library/bound-solver.js +0 -252
- package/bld/library/bound-solver.js.map +0 -1
- package/bld/library/extrude.js +0 -28
- package/bld/library/extrude.js.map +0 -1
- package/bld/library/kernel-artifact-codec.js +0 -148
- package/bld/library/kernel-artifact-codec.js.map +0 -1
- package/bld/library/kernel-cache.js +0 -245
- package/bld/library/kernel-cache.js.map +0 -1
- package/bld/library/kernel-shapes.js +0 -108
- package/bld/library/kernel-shapes.js.map +0 -1
- package/bld/library/loft.js +0 -161
- package/bld/library/loft.js.map +0 -1
- package/bld/library/material.js +0 -176
- package/bld/library/material.js.map +0 -1
- package/bld/library/model-color.js +0 -36
- package/bld/library/model-color.js.map +0 -1
- package/bld/library/open-cascade-error.js +0 -22
- package/bld/library/open-cascade-error.js.map +0 -1
- package/bld/library/relation-solver.js +0 -258
- package/bld/library/relation-solver.js.map +0 -1
- package/bld/library/retained-memory.js +0 -27
- package/bld/library/retained-memory.js.map +0 -1
- package/bld/library/runtime.js +0 -2954
- package/bld/library/runtime.js.map +0 -1
- package/bld/library/shell.js +0 -221
- package/bld/library/shell.js.map +0 -1
- package/bld/library/sketch-curve-intersections.js +0 -117
- package/bld/library/sketch-curve-intersections.js.map +0 -1
- package/bld/library/sketch-curves.js +0 -89
- package/bld/library/sketch-curves.js.map +0 -1
- package/bld/library/sketch-drag-rules.js +0 -522
- package/bld/library/sketch-drag-rules.js.map +0 -1
- package/bld/library/sketch-face.js +0 -72
- package/bld/library/sketch-face.js.map +0 -1
- package/bld/library/sketch-incidence.js +0 -114
- package/bld/library/sketch-incidence.js.map +0 -1
- package/bld/library/sketch-precision.js +0 -55
- package/bld/library/sketch-precision.js.map +0 -1
- package/bld/library/sketch-regions.js +0 -193
- package/bld/library/sketch-regions.js.map +0 -1
- package/bld/library/sketch-solver.js +0 -578
- package/bld/library/sketch-solver.js.map +0 -1
- package/bld/library/sketch.js +0 -650
- package/bld/library/sketch.js.map +0 -1
- package/bld/library/spatial.js +0 -195
- package/bld/library/spatial.js.map +0 -1
- package/bld/library/topology-id.js +0 -67
- package/bld/library/topology-id.js.map +0 -1
- package/bld/library/topology-inspection.js +0 -267
- package/bld/library/topology-inspection.js.map +0 -1
- package/bld/library/topology.js +0 -455
- package/bld/library/topology.js.map +0 -1
package/bld/library/topology.js
DELETED
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
import { getOC, } from 'replicad';
|
|
2
|
-
import { castOwnedShape3D, consumeShapeList, shapeSubshapes, } from './kernel-shapes.js';
|
|
3
|
-
import { formatTopologyId, inheritedTopologyId, isTopologyId, sameTopologyId, TopologyIdSet, } from './topology-id.js';
|
|
4
|
-
/** Visit an owned wrapper; callers must not retain it beyond the callback. */
|
|
5
|
-
export function withTopologyShape(shape, topology, selection, visit) {
|
|
6
|
-
if (selection.kind === 'solid')
|
|
7
|
-
return visit(shape);
|
|
8
|
-
const shapes = topologyShapes(shape, selection.kind);
|
|
9
|
-
try {
|
|
10
|
-
return visit(shapes[resolveTopologyIndex(selection.kind, topology[topologyMetadata[selection.kind].plural], selection.id)]);
|
|
11
|
-
}
|
|
12
|
-
finally {
|
|
13
|
-
deleteShapes(shapes);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/** Child IDs always belong to the original geometry's namespace. */
|
|
17
|
-
export function topologyChildren(shape, topology, selection, kind, ids) {
|
|
18
|
-
const all = topology[topologyMetadata[kind].plural];
|
|
19
|
-
const available = selection.kind === 'solid'
|
|
20
|
-
? all.ids
|
|
21
|
-
: withTopologyShape(shape, topology, selection, selected => {
|
|
22
|
-
const children = topologyShapes(selected, kind);
|
|
23
|
-
const originals = topologyShapes(shape, kind);
|
|
24
|
-
try {
|
|
25
|
-
return all.ids.filter((_, index) => children.some(child => child.isSame(originals[index])));
|
|
26
|
-
}
|
|
27
|
-
finally {
|
|
28
|
-
deleteShapes(children);
|
|
29
|
-
deleteShapes(originals);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
if (!ids)
|
|
33
|
-
return available;
|
|
34
|
-
return ids.map(id => {
|
|
35
|
-
const resolved = resolveTopologyId(kind, all, id);
|
|
36
|
-
if (!available.some(candidate => sameTopologyId(candidate, id))) {
|
|
37
|
-
throw new Error(`${formatTopologyId(kind, id)} does not belong to ${selection.kind}${selection.kind === 'solid' ? '' : ` ${formatTopologyId(selection.kind, selection.id)}`}.`);
|
|
38
|
-
}
|
|
39
|
-
return resolved;
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
function topologyShapes(shape, kind) {
|
|
43
|
-
return shapeSubshapes(shape, kind === 'surface' ? 'face' : kind);
|
|
44
|
-
}
|
|
45
|
-
export function initialShapeTopology(shape) {
|
|
46
|
-
const vertices = shapeVertices(shape);
|
|
47
|
-
const edges = shapeSubshapes(shape, 'edge');
|
|
48
|
-
const surfaces = shapeSubshapes(shape, 'face');
|
|
49
|
-
try {
|
|
50
|
-
return shapeTopology(initialTopology(vertices), initialTopology(edges), initialTopology(surfaces));
|
|
51
|
-
}
|
|
52
|
-
finally {
|
|
53
|
-
deleteShapes(vertices);
|
|
54
|
-
deleteShapes(edges);
|
|
55
|
-
deleteShapes(surfaces);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
export function preserveShapeTopology(shape, source) {
|
|
59
|
-
const vertices = shapeVertices(shape);
|
|
60
|
-
const edges = shapeSubshapes(shape, 'edge');
|
|
61
|
-
const surfaces = shapeSubshapes(shape, 'face');
|
|
62
|
-
try {
|
|
63
|
-
assertTopologyLength('vertex', vertices, source.vertices);
|
|
64
|
-
assertTopologyLength('edge', edges, source.edges);
|
|
65
|
-
assertTopologyLength('surface', surfaces, source.surfaces);
|
|
66
|
-
return source;
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
deleteShapes(vertices);
|
|
70
|
-
deleteShapes(edges);
|
|
71
|
-
deleteShapes(surfaces);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
export function filletEdges(shape, source, radius, edgeIds) {
|
|
75
|
-
return modifyEdges('fillet', shape, source, radius, edgeIds);
|
|
76
|
-
}
|
|
77
|
-
export function chamferEdges(shape, source, distance, edgeIds) {
|
|
78
|
-
return modifyEdges('chamfer', shape, source, distance, edgeIds);
|
|
79
|
-
}
|
|
80
|
-
export function booleanWithTopology(left, right, operation) {
|
|
81
|
-
const oc = getOC();
|
|
82
|
-
const builder = operation === 'fuse'
|
|
83
|
-
? new oc.BRepAlgoAPI_Fuse(left.shape.wrapped, right.shape.wrapped)
|
|
84
|
-
: operation === 'cut'
|
|
85
|
-
? new oc.BRepAlgoAPI_Cut(left.shape.wrapped, right.shape.wrapped)
|
|
86
|
-
: new oc.BRepAlgoAPI_Common(left.shape.wrapped, right.shape.wrapped);
|
|
87
|
-
let result;
|
|
88
|
-
try {
|
|
89
|
-
builder.Build();
|
|
90
|
-
builder.SimplifyResult(true, true, 0.001);
|
|
91
|
-
result = castOwnedShape3D(builder.Shape());
|
|
92
|
-
return {
|
|
93
|
-
shape: result,
|
|
94
|
-
topology: transferShapeTopology([left, right], result, builder),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
result?.delete();
|
|
99
|
-
throw error;
|
|
100
|
-
}
|
|
101
|
-
finally {
|
|
102
|
-
builder.delete();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
export function stableEdgeGroups(shape, topology, groups) {
|
|
106
|
-
const edges = shapeSubshapes(shape, 'edge');
|
|
107
|
-
try {
|
|
108
|
-
const ids = stableGroupIds('edge', edges, topology, groups.map(group => group.edgeId));
|
|
109
|
-
return groups.map((group, index) => ({ ...group, edgeId: ids[index] }));
|
|
110
|
-
}
|
|
111
|
-
finally {
|
|
112
|
-
deleteShapes(edges);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
export function stableSurfaceGroups(shape, topology, groups) {
|
|
116
|
-
const surfaces = shapeSubshapes(shape, 'face');
|
|
117
|
-
try {
|
|
118
|
-
const ids = stableGroupIds('surface', surfaces, topology, groups.map(group => group.faceId));
|
|
119
|
-
return groups.map((group, index) => ({
|
|
120
|
-
start: group.start,
|
|
121
|
-
count: group.count,
|
|
122
|
-
surfaceId: ids[index],
|
|
123
|
-
}));
|
|
124
|
-
}
|
|
125
|
-
finally {
|
|
126
|
-
deleteShapes(surfaces);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
export function stableVertexData(shape, topology) {
|
|
130
|
-
const vertices = shapeVertices(shape);
|
|
131
|
-
try {
|
|
132
|
-
assertTopologyLength('vertex', vertices, topology);
|
|
133
|
-
return {
|
|
134
|
-
positions: new Float32Array(vertices.flatMap(vertex => vertex.asTuple())),
|
|
135
|
-
ids: [...topology.ids],
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
deleteShapes(vertices);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
export function resolveEdgeSelection(topology, requestedIds) {
|
|
143
|
-
if (requestedIds === undefined) {
|
|
144
|
-
return [...topology.ids];
|
|
145
|
-
}
|
|
146
|
-
if (requestedIds.length === 0) {
|
|
147
|
-
throw new Error('An edge selection cannot be empty; omit the second argument to select all edges.');
|
|
148
|
-
}
|
|
149
|
-
return resolveTopologySelection('edge', topology, requestedIds);
|
|
150
|
-
}
|
|
151
|
-
/** Resolve an explicit selection in source order, including an empty selection. */
|
|
152
|
-
export function resolveTopologySelection(kind, topology, requestedIds) {
|
|
153
|
-
const requested = new TopologyIdSet();
|
|
154
|
-
for (const id of requestedIds) {
|
|
155
|
-
assertTopologyId(kind, id);
|
|
156
|
-
requested.add(id);
|
|
157
|
-
}
|
|
158
|
-
const selected = topology.ids.filter(id => requested.has(id));
|
|
159
|
-
const missing = [...requested].filter(id => !selected.some(candidate => sameTopologyId(candidate, id)));
|
|
160
|
-
if (missing.length > 0) {
|
|
161
|
-
throw new Error(`Unknown or retired ${kind} ${missing.map(id => formatTopologyId(kind, id)).join(', ')}.`);
|
|
162
|
-
}
|
|
163
|
-
return selected;
|
|
164
|
-
}
|
|
165
|
-
export function topologyVertexPoints(shape, topology, vertexIds) {
|
|
166
|
-
const vertices = shapeVertices(shape);
|
|
167
|
-
try {
|
|
168
|
-
assertTopologyLength('vertex', vertices, topology);
|
|
169
|
-
return vertexIds.map(vertexId => ({
|
|
170
|
-
position: vertices[resolveTopologyIndex('vertex', topology, vertexId)].asTuple(),
|
|
171
|
-
}));
|
|
172
|
-
}
|
|
173
|
-
finally {
|
|
174
|
-
deleteShapes(vertices);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
export function topologyEdgeDirections(shape, topology, edgeIds) {
|
|
178
|
-
const edges = shapeSubshapes(shape, 'edge');
|
|
179
|
-
try {
|
|
180
|
-
assertTopologyLength('edge', edges, topology);
|
|
181
|
-
return edgeIds.map(edgeId => {
|
|
182
|
-
const edge = edges[resolveTopologyIndex('edge', topology, edgeId)];
|
|
183
|
-
const point = edge.pointAt(0.5);
|
|
184
|
-
const tangent = edge.tangentAt(0.5);
|
|
185
|
-
try {
|
|
186
|
-
return { position: point.toTuple(), direction: tangent.toTuple() };
|
|
187
|
-
}
|
|
188
|
-
finally {
|
|
189
|
-
point.delete();
|
|
190
|
-
tangent.delete();
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
finally {
|
|
195
|
-
deleteShapes(edges);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
export function topologySurfaceDirections(shape, topology, surfaceIds) {
|
|
199
|
-
const surfaces = shapeSubshapes(shape, 'face');
|
|
200
|
-
try {
|
|
201
|
-
assertTopologyLength('surface', surfaces, topology);
|
|
202
|
-
return surfaceIds.map(surfaceId => {
|
|
203
|
-
const surface = surfaces[resolveTopologyIndex('surface', topology, surfaceId)];
|
|
204
|
-
const center = surface.center;
|
|
205
|
-
try {
|
|
206
|
-
// A curved face's centroid need not lie on its surface, and projecting
|
|
207
|
-
// it can be ambiguous (for example, a cylinder's center lies on its axis).
|
|
208
|
-
// Sample the normal at the UV-domain midpoint without a projection.
|
|
209
|
-
const normal = surface.normalAt();
|
|
210
|
-
try {
|
|
211
|
-
return { position: center.toTuple(), direction: normal.toTuple() };
|
|
212
|
-
}
|
|
213
|
-
finally {
|
|
214
|
-
normal.delete();
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
finally {
|
|
218
|
-
center.delete();
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
finally {
|
|
223
|
-
deleteShapes(surfaces);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
function modifyEdges(kind, shape, source, amount, requestedIds) {
|
|
227
|
-
const selectedEdgeIds = resolveEdgeSelection(source.edges, requestedIds);
|
|
228
|
-
if (selectedEdgeIds.length === 0) {
|
|
229
|
-
const result = shape.clone();
|
|
230
|
-
try {
|
|
231
|
-
return {
|
|
232
|
-
shape: result,
|
|
233
|
-
topology: preserveShapeTopology(result, source),
|
|
234
|
-
selectedEdgeIds,
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
result.delete();
|
|
239
|
-
throw error;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
const edges = shapeSubshapes(shape, 'edge');
|
|
243
|
-
const selected = new TopologyIdSet(selectedEdgeIds);
|
|
244
|
-
const oc = getOC();
|
|
245
|
-
const builder = kind === 'fillet'
|
|
246
|
-
? new oc.BRepFilletAPI_MakeFillet(shape.wrapped, oc.ChFi3d_FilletShape.ChFi3d_Rational)
|
|
247
|
-
: new oc.BRepFilletAPI_MakeChamfer(shape.wrapped);
|
|
248
|
-
let result;
|
|
249
|
-
try {
|
|
250
|
-
assertTopologyLength('edge', edges, source.edges);
|
|
251
|
-
edges.forEach((edge, index) => {
|
|
252
|
-
if (selected.has(source.edges.ids[index])) {
|
|
253
|
-
builder.Add(amount, edge.wrapped);
|
|
254
|
-
}
|
|
255
|
-
});
|
|
256
|
-
builder.Build();
|
|
257
|
-
if (!builder.IsDone()) {
|
|
258
|
-
throw edgeModificationError(kind, amount, selectedEdgeIds, builder);
|
|
259
|
-
}
|
|
260
|
-
result = castOwnedShape3D(builder.Shape());
|
|
261
|
-
return {
|
|
262
|
-
shape: result,
|
|
263
|
-
topology: transferShapeTopology([{ shape, topology: source, index: 1 }], result, builder),
|
|
264
|
-
selectedEdgeIds,
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
catch (error) {
|
|
268
|
-
result?.delete();
|
|
269
|
-
throw error;
|
|
270
|
-
}
|
|
271
|
-
finally {
|
|
272
|
-
builder.delete();
|
|
273
|
-
deleteShapes(edges);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
function edgeModificationError(kind, amount, selectedEdgeIds, builder) {
|
|
277
|
-
const parameter = kind === 'fillet' ? 'radius' : 'distance';
|
|
278
|
-
const selection = formattedEdgeSelection(selectedEdgeIds);
|
|
279
|
-
const contourDetail = propagatedContourDetail(builder, selectedEdgeIds);
|
|
280
|
-
return new Error(`Could not construct ${kind} with ${parameter} ${amount} on ${selection}.\n` +
|
|
281
|
-
`${contourDetail} The edge/${parameter} combination may create degenerate, self-intersecting, or otherwise unsupported geometry. Try a slightly different ${parameter} or edge selection.`.trim());
|
|
282
|
-
}
|
|
283
|
-
function propagatedContourDetail(builder, selectedEdgeIds) {
|
|
284
|
-
try {
|
|
285
|
-
const contourCount = builder.NbContours();
|
|
286
|
-
let contourEdgeCount = 0;
|
|
287
|
-
for (let index = 1; index <= contourCount; index += 1) {
|
|
288
|
-
contourEdgeCount += builder.NbEdges(index);
|
|
289
|
-
}
|
|
290
|
-
return contourEdgeCount > selectedEdgeIds.length
|
|
291
|
-
? ` OpenCascade expanded the selection to ${counted(contourCount, 'tangent contour')} containing ${counted(contourEdgeCount, 'edge')}.`
|
|
292
|
-
: '';
|
|
293
|
-
}
|
|
294
|
-
catch {
|
|
295
|
-
return '';
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
function formattedEdgeSelection(edgeIds) {
|
|
299
|
-
const visible = edgeIds
|
|
300
|
-
.slice(0, 8)
|
|
301
|
-
.map(edgeId => formatTopologyId('edge', edgeId));
|
|
302
|
-
return edgeIds.length <= visible.length
|
|
303
|
-
? visible.join(', ')
|
|
304
|
-
: `${visible.join(', ')}, and ${edgeIds.length - visible.length} more`;
|
|
305
|
-
}
|
|
306
|
-
function counted(count, singular) {
|
|
307
|
-
return `${count} ${singular}${count === 1 ? '' : 's'}`;
|
|
308
|
-
}
|
|
309
|
-
function resolveTopologyId(kind, topology, id) {
|
|
310
|
-
return topology.ids[resolveTopologyIndex(kind, topology, id)];
|
|
311
|
-
}
|
|
312
|
-
function resolveTopologyIndex(kind, topology, id) {
|
|
313
|
-
assertTopologyId(kind, id);
|
|
314
|
-
const index = topology.ids.findIndex(candidate => sameTopologyId(candidate, id));
|
|
315
|
-
if (index === -1)
|
|
316
|
-
throw new Error(`Unknown or retired ${kind} ${formatTopologyId(kind, id)}.`);
|
|
317
|
-
return index;
|
|
318
|
-
}
|
|
319
|
-
function assertTopologyId(kind, id) {
|
|
320
|
-
if (!isTopologyId(id)) {
|
|
321
|
-
throw new Error(`${kind[0].toUpperCase()}${kind.slice(1)} IDs must be positive integers or paths of at least two positive integers; received ${JSON.stringify(id)}.`);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
/** Resolve all input candidates together so merges never arbitrarily pick an owner. */
|
|
325
|
-
export function transferShapeTopology(inputs, output, history) {
|
|
326
|
-
const transfer = (kind) => {
|
|
327
|
-
const originals = [];
|
|
328
|
-
const results = topologyShapes(output, kind);
|
|
329
|
-
try {
|
|
330
|
-
const candidates = inputs.flatMap((input, inputIndex) => {
|
|
331
|
-
const shapes = topologyShapes(input.shape, kind);
|
|
332
|
-
originals.push(shapes);
|
|
333
|
-
const source = input.topology[topologyMetadata[kind].plural];
|
|
334
|
-
assertTopologyLength(kind, shapes, source);
|
|
335
|
-
return shapes.map((shape, index) => {
|
|
336
|
-
const id = source.ids[index];
|
|
337
|
-
// Numeric elements in an internal prefix are still new to this
|
|
338
|
-
// operation. Reallocate them with the final traversal, without exposing
|
|
339
|
-
// internal creation steps or reserving numbers for discarded geometry.
|
|
340
|
-
const inherited = input.index !== undefined
|
|
341
|
-
? inheritedTopologyId(input.index, id)
|
|
342
|
-
: typeof id === 'number'
|
|
343
|
-
? undefined
|
|
344
|
-
: id;
|
|
345
|
-
const unchanged = matchingOutputShapes(shape.wrapped, results);
|
|
346
|
-
if (unchanged.length)
|
|
347
|
-
return { id: inherited, matches: unchanged };
|
|
348
|
-
if (typeof history !== 'function') {
|
|
349
|
-
return {
|
|
350
|
-
id: inherited,
|
|
351
|
-
matches: modifiedOutputShapes(shape.wrapped, results, history),
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
const modified = history(shape.wrapped, kind, inputIndex);
|
|
355
|
-
try {
|
|
356
|
-
return {
|
|
357
|
-
id: inherited,
|
|
358
|
-
matches: [
|
|
359
|
-
...new Set(modified.flatMap(candidate => matchingOutputShapes(candidate, results))),
|
|
360
|
-
],
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
finally {
|
|
364
|
-
modified.forEach(candidate => candidate.delete());
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
});
|
|
368
|
-
const counts = new Array(results.length).fill(0);
|
|
369
|
-
for (const candidate of candidates) {
|
|
370
|
-
for (const index of candidate.matches)
|
|
371
|
-
counts[index]++;
|
|
372
|
-
}
|
|
373
|
-
const inherited = new Map();
|
|
374
|
-
for (const candidate of candidates) {
|
|
375
|
-
const [index] = candidate.matches;
|
|
376
|
-
if (candidate.id !== undefined &&
|
|
377
|
-
candidate.matches.length === 1 &&
|
|
378
|
-
counts[index] === 1) {
|
|
379
|
-
inherited.set(index, candidate.id);
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
let nextId = 1;
|
|
383
|
-
return stableTopology(results.map((_, index) => inherited.get(index) ?? nextId++));
|
|
384
|
-
}
|
|
385
|
-
finally {
|
|
386
|
-
originals.forEach(deleteShapes);
|
|
387
|
-
deleteShapes(results);
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
return shapeTopology(transfer('vertex'), transfer('edge'), transfer('surface'));
|
|
391
|
-
}
|
|
392
|
-
function matchingOutputShapes(input, output) {
|
|
393
|
-
const matches = [];
|
|
394
|
-
output.forEach((shape, index) => {
|
|
395
|
-
if (shape.wrapped.IsSame(input))
|
|
396
|
-
matches.push(index);
|
|
397
|
-
});
|
|
398
|
-
return matches;
|
|
399
|
-
}
|
|
400
|
-
function modifiedOutputShapes(input, output, history) {
|
|
401
|
-
const modified = consumeShapeList(history.Modified(input));
|
|
402
|
-
try {
|
|
403
|
-
return [
|
|
404
|
-
...new Set(modified.flatMap(candidate => matchingOutputShapes(candidate, output))),
|
|
405
|
-
];
|
|
406
|
-
}
|
|
407
|
-
finally {
|
|
408
|
-
modified.forEach(candidate => candidate.delete());
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
function stableGroupIds(kind, shapes, topology, kernelIds) {
|
|
412
|
-
assertTopologyLength(kind, shapes, topology);
|
|
413
|
-
const idsByKernelHash = new Map();
|
|
414
|
-
shapes.forEach((shape, index) => {
|
|
415
|
-
const stableId = topology.ids[index];
|
|
416
|
-
const previous = idsByKernelHash.get(shape.hashCode);
|
|
417
|
-
if (previous !== undefined && !sameTopologyId(previous, stableId)) {
|
|
418
|
-
throw new Error(`OpenCascade produced colliding ${kind} hashes for ${formatTopologyId(kind, previous)} and ${formatTopologyId(kind, stableId)}.`);
|
|
419
|
-
}
|
|
420
|
-
idsByKernelHash.set(shape.hashCode, stableId);
|
|
421
|
-
});
|
|
422
|
-
return kernelIds.map(kernelId => {
|
|
423
|
-
const stableId = idsByKernelHash.get(kernelId);
|
|
424
|
-
if (stableId === undefined) {
|
|
425
|
-
throw new Error(`The mesh referenced a ${kind} that is absent from the model topology (${kernelId}).`);
|
|
426
|
-
}
|
|
427
|
-
return stableId;
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
function initialTopology(shapes) {
|
|
431
|
-
return stableTopology(shapes.map((_, index) => index + 1));
|
|
432
|
-
}
|
|
433
|
-
function stableTopology(ids) {
|
|
434
|
-
return { ids };
|
|
435
|
-
}
|
|
436
|
-
function shapeTopology(vertices, edges, surfaces) {
|
|
437
|
-
return { vertices, edges, surfaces };
|
|
438
|
-
}
|
|
439
|
-
function assertTopologyLength(kind, shapes, topology) {
|
|
440
|
-
if (shapes.length !== topology.ids.length) {
|
|
441
|
-
throw new Error(`${kind[0].toUpperCase()}${kind.slice(1)} topology mismatch: the shape has ${shapes.length} ${topologyMetadata[kind].plural} but ${topology.ids.length} IDs.`);
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
const topologyMetadata = {
|
|
445
|
-
vertex: { plural: 'vertices' },
|
|
446
|
-
edge: { plural: 'edges' },
|
|
447
|
-
surface: { plural: 'surfaces' },
|
|
448
|
-
};
|
|
449
|
-
function shapeVertices(shape) {
|
|
450
|
-
return shapeSubshapes(shape, 'vertex');
|
|
451
|
-
}
|
|
452
|
-
function deleteShapes(shapes) {
|
|
453
|
-
shapes.forEach(shape => shape.delete());
|
|
454
|
-
}
|
|
455
|
-
//# sourceMappingURL=topology.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"topology.js","sourceRoot":"","sources":["../../src/library/topology.ts"],"names":[],"mappings":"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"}
|