@code3d/core 0.0.1-alpha.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 +22 -0
- package/README.md +824 -0
- package/THIRD_PARTY.md +28 -0
- package/bld/library/alignment-geometry.d.ts +50 -0
- package/bld/library/alignment-geometry.d.ts.map +1 -0
- package/bld/library/alignment-geometry.js +322 -0
- package/bld/library/alignment-geometry.js.map +1 -0
- package/bld/library/bound-solver.d.ts +33 -0
- package/bld/library/bound-solver.d.ts.map +1 -0
- package/bld/library/bound-solver.js +252 -0
- package/bld/library/bound-solver.js.map +1 -0
- package/bld/library/extrude.d.ts +8 -0
- package/bld/library/extrude.d.ts.map +1 -0
- package/bld/library/extrude.js +28 -0
- package/bld/library/extrude.js.map +1 -0
- package/bld/library/index.d.ts +7 -0
- package/bld/library/index.d.ts.map +1 -0
- package/bld/library/index.js +3 -0
- package/bld/library/index.js.map +1 -0
- package/bld/library/kernel-artifact-codec.d.ts +3 -0
- package/bld/library/kernel-artifact-codec.d.ts.map +1 -0
- package/bld/library/kernel-artifact-codec.js +148 -0
- package/bld/library/kernel-artifact-codec.js.map +1 -0
- package/bld/library/kernel-cache.d.ts +63 -0
- package/bld/library/kernel-cache.d.ts.map +1 -0
- package/bld/library/kernel-cache.js +245 -0
- package/bld/library/kernel-cache.js.map +1 -0
- package/bld/library/kernel-shapes.d.ts +20 -0
- package/bld/library/kernel-shapes.d.ts.map +1 -0
- package/bld/library/kernel-shapes.js +108 -0
- package/bld/library/kernel-shapes.js.map +1 -0
- package/bld/library/loft.d.ts +7 -0
- package/bld/library/loft.d.ts.map +1 -0
- package/bld/library/loft.js +161 -0
- package/bld/library/loft.js.map +1 -0
- package/bld/library/material.d.ts +12 -0
- package/bld/library/material.d.ts.map +1 -0
- package/bld/library/material.js +176 -0
- package/bld/library/material.js.map +1 -0
- package/bld/library/model-color.d.ts +8 -0
- package/bld/library/model-color.d.ts.map +1 -0
- package/bld/library/model-color.js +36 -0
- package/bld/library/model-color.js.map +1 -0
- package/bld/library/open-cascade-error.d.ts +2 -0
- package/bld/library/open-cascade-error.d.ts.map +1 -0
- package/bld/library/open-cascade-error.js +22 -0
- package/bld/library/open-cascade-error.js.map +1 -0
- package/bld/library/relation-solver.d.ts +29 -0
- package/bld/library/relation-solver.d.ts.map +1 -0
- package/bld/library/relation-solver.js +258 -0
- package/bld/library/relation-solver.js.map +1 -0
- package/bld/library/replicad.d.ts +17 -0
- package/bld/library/replicad.d.ts.map +1 -0
- package/bld/library/replicad.js +24 -0
- package/bld/library/replicad.js.map +1 -0
- package/bld/library/retained-memory.d.ts +7 -0
- package/bld/library/retained-memory.d.ts.map +1 -0
- package/bld/library/retained-memory.js +27 -0
- package/bld/library/retained-memory.js.map +1 -0
- package/bld/library/runtime.d.ts +775 -0
- package/bld/library/runtime.d.ts.map +1 -0
- package/bld/library/runtime.js +2954 -0
- package/bld/library/runtime.js.map +1 -0
- package/bld/library/shell.d.ts +7 -0
- package/bld/library/shell.d.ts.map +1 -0
- package/bld/library/shell.js +221 -0
- package/bld/library/shell.js.map +1 -0
- package/bld/library/sketch-curve-intersections.d.ts +13 -0
- package/bld/library/sketch-curve-intersections.d.ts.map +1 -0
- package/bld/library/sketch-curve-intersections.js +117 -0
- package/bld/library/sketch-curve-intersections.js.map +1 -0
- package/bld/library/sketch-curves.d.ts +31 -0
- package/bld/library/sketch-curves.d.ts.map +1 -0
- package/bld/library/sketch-curves.js +89 -0
- package/bld/library/sketch-curves.js.map +1 -0
- package/bld/library/sketch-drag-rules.d.ts +35 -0
- package/bld/library/sketch-drag-rules.d.ts.map +1 -0
- package/bld/library/sketch-drag-rules.js +522 -0
- package/bld/library/sketch-drag-rules.js.map +1 -0
- package/bld/library/sketch-face.d.ts +4 -0
- package/bld/library/sketch-face.d.ts.map +1 -0
- package/bld/library/sketch-face.js +72 -0
- package/bld/library/sketch-face.js.map +1 -0
- package/bld/library/sketch-incidence.d.ts +26 -0
- package/bld/library/sketch-incidence.d.ts.map +1 -0
- package/bld/library/sketch-incidence.js +114 -0
- package/bld/library/sketch-incidence.js.map +1 -0
- package/bld/library/sketch-precision.d.ts +19 -0
- package/bld/library/sketch-precision.d.ts.map +1 -0
- package/bld/library/sketch-precision.js +55 -0
- package/bld/library/sketch-precision.js.map +1 -0
- package/bld/library/sketch-regions.d.ts +12 -0
- package/bld/library/sketch-regions.d.ts.map +1 -0
- package/bld/library/sketch-regions.js +193 -0
- package/bld/library/sketch-regions.js.map +1 -0
- package/bld/library/sketch-solver.d.ts +97 -0
- package/bld/library/sketch-solver.d.ts.map +1 -0
- package/bld/library/sketch-solver.js +578 -0
- package/bld/library/sketch-solver.js.map +1 -0
- package/bld/library/sketch.d.ts +142 -0
- package/bld/library/sketch.d.ts.map +1 -0
- package/bld/library/sketch.js +650 -0
- package/bld/library/sketch.js.map +1 -0
- package/bld/library/spatial.d.ts +28 -0
- package/bld/library/spatial.d.ts.map +1 -0
- package/bld/library/spatial.js +195 -0
- package/bld/library/spatial.js.map +1 -0
- package/bld/library/three.d.ts +3 -0
- package/bld/library/three.d.ts.map +1 -0
- package/bld/library/three.js +3 -0
- package/bld/library/three.js.map +1 -0
- package/bld/library/topology-id.d.ts +24 -0
- package/bld/library/topology-id.d.ts.map +1 -0
- package/bld/library/topology-id.js +67 -0
- package/bld/library/topology-id.js.map +1 -0
- package/bld/library/topology-inspection.d.ts +64 -0
- package/bld/library/topology-inspection.d.ts.map +1 -0
- package/bld/library/topology-inspection.js +267 -0
- package/bld/library/topology-inspection.js.map +1 -0
- package/bld/library/topology.d.ts +94 -0
- package/bld/library/topology.d.ts.map +1 -0
- package/bld/library/topology.js +455 -0
- package/bld/library/topology.js.map +1 -0
- package/bld/node/index.d.ts +2 -0
- package/bld/node/index.d.ts.map +1 -0
- package/bld/node/index.js +14 -0
- package/bld/node/index.js.map +1 -0
- package/bld/node/replicad.d.ts +3 -0
- package/bld/node/replicad.d.ts.map +1 -0
- package/bld/node/replicad.js +3 -0
- package/bld/node/replicad.js.map +1 -0
- package/bld/tooling/index.d.ts +26 -0
- package/bld/tooling/index.d.ts.map +1 -0
- package/bld/tooling/index.js +19 -0
- package/bld/tooling/index.js.map +1 -0
- package/package.json +53 -0
- package/src/library/alignment-geometry.ts +431 -0
- package/src/library/bound-solver.ts +410 -0
- package/src/library/extrude.ts +38 -0
- package/src/library/index.ts +88 -0
- package/src/library/kernel-artifact-codec.ts +166 -0
- package/src/library/kernel-cache.ts +337 -0
- package/src/library/kernel-shapes.ts +135 -0
- package/src/library/loft.ts +196 -0
- package/src/library/material.ts +228 -0
- package/src/library/model-color.ts +47 -0
- package/src/library/open-cascade-error.ts +26 -0
- package/src/library/relation-solver.ts +479 -0
- package/src/library/replicad.ts +40 -0
- package/src/library/retained-memory.ts +23 -0
- package/src/library/runtime.ts +5146 -0
- package/src/library/shell.ts +281 -0
- package/src/library/sketch-curve-intersections.ts +154 -0
- package/src/library/sketch-curves.ts +161 -0
- package/src/library/sketch-drag-rules.ts +767 -0
- package/src/library/sketch-face.ts +89 -0
- package/src/library/sketch-incidence.ts +204 -0
- package/src/library/sketch-precision.ts +81 -0
- package/src/library/sketch-regions.ts +271 -0
- package/src/library/sketch-solver.ts +973 -0
- package/src/library/sketch.ts +977 -0
- package/src/library/spatial.ts +254 -0
- package/src/library/three.ts +2 -0
- package/src/library/topology-id.ts +81 -0
- package/src/library/topology-inspection.ts +368 -0
- package/src/library/topology.ts +776 -0
- package/src/library/tsconfig.json +11 -0
- package/src/node/index.ts +20 -0
- package/src/node/replicad.ts +3 -0
- package/src/node/tsconfig.json +16 -0
- package/src/tooling/index.ts +160 -0
- package/src/tooling/tsconfig.json +15 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { BoundingBox, getOC, measureShapeLinearProperties, measureShapeSurfaceProperties, } from 'replicad';
|
|
2
|
+
import { shapeSubshapes } from './kernel-shapes.js';
|
|
3
|
+
import { sameTopologyId } from './topology-id.js';
|
|
4
|
+
import { identityRigidTransform, quaternionAxisAngle, } from './spatial.js';
|
|
5
|
+
/** Query retained B-rep geometry and its actual ID namespace, never the render mesh. */
|
|
6
|
+
export function inspectShapeTopology(original, topology, options = {}) {
|
|
7
|
+
const offset = options.offset ?? 0;
|
|
8
|
+
const limit = options.limit ?? 48;
|
|
9
|
+
if (!Number.isSafeInteger(offset) ||
|
|
10
|
+
offset < 0 ||
|
|
11
|
+
!Number.isSafeInteger(limit) ||
|
|
12
|
+
limit < 1 ||
|
|
13
|
+
limit > 200)
|
|
14
|
+
throw new Error('Topology pages require a nonnegative offset and a limit from 1 to 200.');
|
|
15
|
+
if (options.ids && !options.kind)
|
|
16
|
+
throw new Error('Specify a topology kind when filtering IDs.');
|
|
17
|
+
const transform = options.transform ?? identityRigidTransform;
|
|
18
|
+
const scale = transform.scale ?? [1, 1, 1];
|
|
19
|
+
if (scale.some(value => !Number.isFinite(value) || value === 0 || value !== scale[0]))
|
|
20
|
+
throw new Error('Topology inspection requires a uniform nonzero scale.');
|
|
21
|
+
let shape = original.clone();
|
|
22
|
+
const owned = [];
|
|
23
|
+
try {
|
|
24
|
+
if (scale[0] !== 1)
|
|
25
|
+
shape = shape.scale(scale[0]);
|
|
26
|
+
const { axis, angleDegrees } = quaternionAxisAngle(transform.quaternion);
|
|
27
|
+
if (Math.abs(angleDegrees) > 1e-9)
|
|
28
|
+
shape = shape.rotate(angleDegrees, [0, 0, 0], [...axis]);
|
|
29
|
+
shape = shape.translate([...transform.position]);
|
|
30
|
+
const vertices = shapeSubshapes(shape, 'vertex');
|
|
31
|
+
owned.push(...vertices);
|
|
32
|
+
const edges = shapeSubshapes(shape, 'edge');
|
|
33
|
+
owned.push(...edges);
|
|
34
|
+
const surfaces = shapeSubshapes(shape, 'face');
|
|
35
|
+
owned.push(...surfaces);
|
|
36
|
+
const shapes = { vertex: vertices, edge: edges, surface: surfaces };
|
|
37
|
+
const ids = {
|
|
38
|
+
vertex: topology.vertices.ids,
|
|
39
|
+
edge: topology.edges.ids,
|
|
40
|
+
surface: topology.surfaces.ids,
|
|
41
|
+
};
|
|
42
|
+
for (const kind of ['vertex', 'edge', 'surface'])
|
|
43
|
+
if (shapes[kind].length !== ids[kind].length)
|
|
44
|
+
throw new Error('Retained geometry does not match its topology namespace.');
|
|
45
|
+
if (options.ids?.some(id => !ids[options.kind].some(available => sameTopologyId(available, id))))
|
|
46
|
+
throw new Error('A requested topology ID is absent from this model snapshot.');
|
|
47
|
+
const all = (options.kind ? [options.kind] : ['surface', 'edge', 'vertex']).flatMap(kind => ids[kind].flatMap((id, index) => !options.ids ||
|
|
48
|
+
options.ids.some(requested => sameTopologyId(requested, id))
|
|
49
|
+
? [{ kind, id, index }]
|
|
50
|
+
: []));
|
|
51
|
+
const page = all.slice(offset, offset + limit);
|
|
52
|
+
const childIndices = (parent, kind) => {
|
|
53
|
+
const children = shapeSubshapes(parent, kind);
|
|
54
|
+
try {
|
|
55
|
+
return shapes[kind].flatMap((candidate, index) => children.some(child => child.isSame(candidate)) ? [index] : []);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
children.forEach(child => child.delete());
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const edgeVertices = new Map();
|
|
62
|
+
const surfaceEdges = new Map();
|
|
63
|
+
const verticesOf = (index) => {
|
|
64
|
+
if (!edgeVertices.has(index))
|
|
65
|
+
edgeVertices.set(index, childIndices(edges[index], 'vertex'));
|
|
66
|
+
return edgeVertices.get(index);
|
|
67
|
+
};
|
|
68
|
+
const edgesOf = (index) => {
|
|
69
|
+
if (!surfaceEdges.has(index))
|
|
70
|
+
surfaceEdges.set(index, childIndices(surfaces[index], 'edge'));
|
|
71
|
+
return surfaceEdges.get(index);
|
|
72
|
+
};
|
|
73
|
+
const items = page.map(({ kind, id, index }) => {
|
|
74
|
+
try {
|
|
75
|
+
if (kind === 'vertex')
|
|
76
|
+
return {
|
|
77
|
+
kind,
|
|
78
|
+
id,
|
|
79
|
+
geometry: { type: 'POINT', position: vertices[index].asTuple() },
|
|
80
|
+
edges: edges.flatMap((_, edge) => verticesOf(edge).includes(index) ? [ids.edge[edge]] : []),
|
|
81
|
+
};
|
|
82
|
+
if (kind === 'edge')
|
|
83
|
+
return {
|
|
84
|
+
kind,
|
|
85
|
+
id,
|
|
86
|
+
geometry: inspectEdge(edges[index]),
|
|
87
|
+
vertices: verticesOf(index).map(vertex => ids.vertex[vertex]),
|
|
88
|
+
surfaces: surfaces.flatMap((_, surface) => edgesOf(surface).includes(index) ? [ids.surface[surface]] : []),
|
|
89
|
+
};
|
|
90
|
+
return {
|
|
91
|
+
kind,
|
|
92
|
+
id,
|
|
93
|
+
geometry: inspectSurface(surfaces[index]),
|
|
94
|
+
edges: edgesOf(index).map(edge => ids.edge[edge]),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return {
|
|
99
|
+
kind,
|
|
100
|
+
id,
|
|
101
|
+
unavailable: error instanceof Error
|
|
102
|
+
? error.message
|
|
103
|
+
: 'Kernel geometry query failed.',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
const box = new BoundingBox();
|
|
108
|
+
let min, max;
|
|
109
|
+
try {
|
|
110
|
+
getOC().BRepBndLib.Add(shape.wrapped, box.wrapped, false);
|
|
111
|
+
[min, max] = box.bounds;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
box.delete();
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
counts: {
|
|
118
|
+
vertex: vertices.length,
|
|
119
|
+
edge: edges.length,
|
|
120
|
+
surface: surfaces.length,
|
|
121
|
+
},
|
|
122
|
+
bounds: {
|
|
123
|
+
min,
|
|
124
|
+
max,
|
|
125
|
+
size: [max[0] - min[0], max[1] - min[1], max[2] - min[2]],
|
|
126
|
+
method: 'kernel-enclosure',
|
|
127
|
+
},
|
|
128
|
+
total: all.length,
|
|
129
|
+
offset,
|
|
130
|
+
...(offset + page.length < all.length
|
|
131
|
+
? { nextOffset: offset + page.length }
|
|
132
|
+
: {}),
|
|
133
|
+
items,
|
|
134
|
+
units: 'model',
|
|
135
|
+
coordinates: 'scene',
|
|
136
|
+
geometrySource: 'kernel',
|
|
137
|
+
transform,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
owned.forEach(value => value.delete());
|
|
142
|
+
shape.delete();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
function vector(value, normalize = false) {
|
|
146
|
+
try {
|
|
147
|
+
const tuple = value.toTuple();
|
|
148
|
+
if (!normalize)
|
|
149
|
+
return tuple;
|
|
150
|
+
const length = Math.hypot(...tuple);
|
|
151
|
+
if (length < 1e-14)
|
|
152
|
+
throw new Error('The sampled direction is singular.');
|
|
153
|
+
return [tuple[0] / length, tuple[1] / length, tuple[2] / length];
|
|
154
|
+
}
|
|
155
|
+
finally {
|
|
156
|
+
value.delete();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
function xyz(value) {
|
|
160
|
+
try {
|
|
161
|
+
return [value.X(), value.Y(), value.Z()];
|
|
162
|
+
}
|
|
163
|
+
finally {
|
|
164
|
+
value.delete();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function analytic(value) {
|
|
168
|
+
try {
|
|
169
|
+
const axis = value.Axis();
|
|
170
|
+
try {
|
|
171
|
+
return { center: xyz(value.Location()), axis: xyz(axis.Direction()) };
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
axis.delete();
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
value.delete();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function inspectEdge(edge) {
|
|
182
|
+
const properties = measureShapeLinearProperties(edge);
|
|
183
|
+
let length;
|
|
184
|
+
try {
|
|
185
|
+
length = properties.length;
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
properties.delete();
|
|
189
|
+
}
|
|
190
|
+
const type = edge.geomType;
|
|
191
|
+
const result = {
|
|
192
|
+
type,
|
|
193
|
+
length,
|
|
194
|
+
start: vector(edge.startPoint),
|
|
195
|
+
end: vector(edge.endPoint),
|
|
196
|
+
closed: edge.isClosed,
|
|
197
|
+
};
|
|
198
|
+
if (type === 'LINE')
|
|
199
|
+
result.direction = vector(edge.tangentAt(0.5), true);
|
|
200
|
+
if (type === 'CIRCLE' || type === 'ELLIPSE') {
|
|
201
|
+
const curve = new (getOC().BRepAdaptor_Curve)(edge.wrapped);
|
|
202
|
+
try {
|
|
203
|
+
if (type === 'CIRCLE') {
|
|
204
|
+
const circle = curve.Circle();
|
|
205
|
+
result.radius = circle.Radius();
|
|
206
|
+
Object.assign(result, analytic(circle));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
const ellipse = curve.Ellipse();
|
|
210
|
+
result.majorRadius = ellipse.MajorRadius();
|
|
211
|
+
result.minorRadius = ellipse.MinorRadius();
|
|
212
|
+
Object.assign(result, analytic(ellipse));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
finally {
|
|
216
|
+
curve.delete();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return result;
|
|
220
|
+
}
|
|
221
|
+
function inspectSurface(face) {
|
|
222
|
+
const properties = measureShapeSurfaceProperties(face);
|
|
223
|
+
const type = face.geomType;
|
|
224
|
+
let result;
|
|
225
|
+
try {
|
|
226
|
+
result = {
|
|
227
|
+
type: type === 'CYLINDRE' ? 'CYLINDER' : type,
|
|
228
|
+
area: properties.area,
|
|
229
|
+
centroid: properties.centerOfMass,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
properties.delete();
|
|
234
|
+
}
|
|
235
|
+
if (type === 'PLANE')
|
|
236
|
+
result.normal = vector(face.normalAt(), true);
|
|
237
|
+
else
|
|
238
|
+
result.normalSample = {
|
|
239
|
+
position: vector(face.pointOnSurface(0.5, 0.5)),
|
|
240
|
+
normal: vector(face.normalAt(), true),
|
|
241
|
+
method: 'uv-domain-midpoint',
|
|
242
|
+
trimMembership: 'unchecked',
|
|
243
|
+
};
|
|
244
|
+
const surface = face.surface;
|
|
245
|
+
try {
|
|
246
|
+
if (type === 'CYLINDRE') {
|
|
247
|
+
const cylinder = surface.wrapped.Cylinder();
|
|
248
|
+
result.radius = cylinder.Radius();
|
|
249
|
+
Object.assign(result, analytic(cylinder));
|
|
250
|
+
}
|
|
251
|
+
if (type === 'SPHERE') {
|
|
252
|
+
const sphere = surface.wrapped.Sphere();
|
|
253
|
+
try {
|
|
254
|
+
result.radius = sphere.Radius();
|
|
255
|
+
result.center = xyz(sphere.Location());
|
|
256
|
+
}
|
|
257
|
+
finally {
|
|
258
|
+
sphere.delete();
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
surface.delete();
|
|
264
|
+
}
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=topology-inspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-inspection.js","sourceRoot":"","sources":["../../src/library/topology-inspection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { type AnyShape, type Shape3D } from 'replicad';
|
|
2
|
+
import type { NCollection_List_TopoDS_Shape, TopoDS_Shape } from 'replicad-opencascadejs';
|
|
3
|
+
import { type TopologyId, type TopologyKind, type VertexId, type EdgeId, type SurfaceId } from './topology-id.js';
|
|
4
|
+
export type { TopologyId, TopologyKind, VertexId, EdgeId, SurfaceId, } from './topology-id.js';
|
|
5
|
+
export type TopologySelection = Readonly<{
|
|
6
|
+
kind: 'solid';
|
|
7
|
+
}> | Readonly<{
|
|
8
|
+
kind: TopologyKind;
|
|
9
|
+
id: TopologyId;
|
|
10
|
+
}>;
|
|
11
|
+
/** Visit an owned wrapper; callers must not retain it beyond the callback. */
|
|
12
|
+
export declare function withTopologyShape<T>(shape: AnyShape, topology: ShapeTopology, selection: TopologySelection, visit: (selected: AnyShape) => T): T;
|
|
13
|
+
/** Child IDs always belong to the original geometry's namespace. */
|
|
14
|
+
export declare function topologyChildren(shape: AnyShape, topology: ShapeTopology, selection: TopologySelection, kind: TopologyKind, ids?: readonly TopologyId[]): readonly TopologyId[];
|
|
15
|
+
type StableTopology = Readonly<{
|
|
16
|
+
/** IDs aligned with the corresponding shape traversal order. */
|
|
17
|
+
ids: readonly TopologyId[];
|
|
18
|
+
}>;
|
|
19
|
+
export type VertexTopology = StableTopology;
|
|
20
|
+
export type EdgeTopology = StableTopology;
|
|
21
|
+
export type SurfaceTopology = StableTopology;
|
|
22
|
+
export type ShapeTopology = Readonly<{
|
|
23
|
+
vertices: VertexTopology;
|
|
24
|
+
edges: EdgeTopology;
|
|
25
|
+
surfaces: SurfaceTopology;
|
|
26
|
+
}>;
|
|
27
|
+
export type VertexRenderData = Readonly<{
|
|
28
|
+
positions: Float32Array;
|
|
29
|
+
ids: readonly VertexId[];
|
|
30
|
+
}>;
|
|
31
|
+
export type EdgeModificationResult = Readonly<{
|
|
32
|
+
shape: Shape3D;
|
|
33
|
+
topology: ShapeTopology;
|
|
34
|
+
selectedEdgeIds: readonly EdgeId[];
|
|
35
|
+
}>;
|
|
36
|
+
export type BooleanTopologyOperation = 'cut' | 'fuse' | 'intersect';
|
|
37
|
+
export type BooleanTopologyResult = Readonly<{
|
|
38
|
+
shape: Shape3D;
|
|
39
|
+
topology: ShapeTopology;
|
|
40
|
+
}>;
|
|
41
|
+
export type TopologyPointData = Readonly<{
|
|
42
|
+
position: readonly [x: number, y: number, z: number];
|
|
43
|
+
}>;
|
|
44
|
+
export type TopologyDirectionData = TopologyPointData & Readonly<{
|
|
45
|
+
direction: readonly [x: number, y: number, z: number];
|
|
46
|
+
}>;
|
|
47
|
+
type ShapeHistory = Readonly<{
|
|
48
|
+
Modified(shape: TopoDS_Shape): NCollection_List_TopoDS_Shape;
|
|
49
|
+
}>;
|
|
50
|
+
type RawEdgeGroup = Readonly<{
|
|
51
|
+
start: number;
|
|
52
|
+
count: number;
|
|
53
|
+
edgeId: number;
|
|
54
|
+
}>;
|
|
55
|
+
type RawSurfaceGroup = Readonly<{
|
|
56
|
+
start: number;
|
|
57
|
+
count: number;
|
|
58
|
+
faceId: number;
|
|
59
|
+
}>;
|
|
60
|
+
type StableEdgeGroup = Readonly<{
|
|
61
|
+
start: number;
|
|
62
|
+
count: number;
|
|
63
|
+
edgeId: EdgeId;
|
|
64
|
+
}>;
|
|
65
|
+
type StableSurfaceGroup = Readonly<{
|
|
66
|
+
start: number;
|
|
67
|
+
count: number;
|
|
68
|
+
surfaceId: SurfaceId;
|
|
69
|
+
}>;
|
|
70
|
+
export declare function initialShapeTopology(shape: AnyShape): ShapeTopology;
|
|
71
|
+
export declare function preserveShapeTopology(shape: AnyShape, source: ShapeTopology): ShapeTopology;
|
|
72
|
+
export declare function filletEdges(shape: Shape3D, source: ShapeTopology, radius: number, edgeIds?: readonly EdgeId[]): EdgeModificationResult;
|
|
73
|
+
export declare function chamferEdges(shape: Shape3D, source: ShapeTopology, distance: number, edgeIds?: readonly EdgeId[]): EdgeModificationResult;
|
|
74
|
+
export declare function booleanWithTopology(left: TopologyInput, right: TopologyInput, operation: BooleanTopologyOperation): BooleanTopologyResult;
|
|
75
|
+
export declare function stableEdgeGroups(shape: AnyShape, topology: EdgeTopology, groups: readonly RawEdgeGroup[]): readonly StableEdgeGroup[];
|
|
76
|
+
export declare function stableSurfaceGroups(shape: AnyShape, topology: SurfaceTopology, groups: readonly RawSurfaceGroup[]): readonly StableSurfaceGroup[];
|
|
77
|
+
export declare function stableVertexData(shape: AnyShape, topology: VertexTopology): VertexRenderData;
|
|
78
|
+
export declare function resolveEdgeSelection(topology: EdgeTopology, requestedIds: readonly EdgeId[] | undefined): readonly EdgeId[];
|
|
79
|
+
/** Resolve an explicit selection in source order, including an empty selection. */
|
|
80
|
+
export declare function resolveTopologySelection(kind: TopologyKind, topology: StableTopology, requestedIds: readonly TopologyId[]): readonly TopologyId[];
|
|
81
|
+
export declare function topologyVertexPoints(shape: AnyShape, topology: VertexTopology, vertexIds: readonly VertexId[]): readonly TopologyPointData[];
|
|
82
|
+
export declare function topologyEdgeDirections(shape: AnyShape, topology: EdgeTopology, edgeIds: readonly EdgeId[]): readonly TopologyDirectionData[];
|
|
83
|
+
export declare function topologySurfaceDirections(shape: AnyShape, topology: SurfaceTopology, surfaceIds: readonly SurfaceId[]): readonly TopologyDirectionData[];
|
|
84
|
+
export type TopologyInput = Readonly<{
|
|
85
|
+
shape: AnyShape;
|
|
86
|
+
topology: ShapeTopology;
|
|
87
|
+
/** Omitted only for intermediate results inside a single operation. */
|
|
88
|
+
index?: number;
|
|
89
|
+
}>;
|
|
90
|
+
/** Returns owned handles, released by the transfer after matching. */
|
|
91
|
+
type TopologyHistory = (input: TopoDS_Shape, kind: TopologyKind, inputIndex: number) => readonly TopoDS_Shape[];
|
|
92
|
+
/** Resolve all input candidates together so merges never arbitrarily pick an owner. */
|
|
93
|
+
export declare function transferShapeTopology(inputs: readonly TopologyInput[], output: AnyShape, history: ShapeHistory | TopologyHistory): ShapeTopology;
|
|
94
|
+
//# sourceMappingURL=topology.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology.d.ts","sourceRoot":"","sources":["../../src/library/topology.ts"],"names":[],"mappings":"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"}
|