@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.
Files changed (172) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +824 -0
  3. package/THIRD_PARTY.md +28 -0
  4. package/bld/library/alignment-geometry.d.ts +50 -0
  5. package/bld/library/alignment-geometry.d.ts.map +1 -0
  6. package/bld/library/alignment-geometry.js +322 -0
  7. package/bld/library/alignment-geometry.js.map +1 -0
  8. package/bld/library/bound-solver.d.ts +33 -0
  9. package/bld/library/bound-solver.d.ts.map +1 -0
  10. package/bld/library/bound-solver.js +252 -0
  11. package/bld/library/bound-solver.js.map +1 -0
  12. package/bld/library/extrude.d.ts +8 -0
  13. package/bld/library/extrude.d.ts.map +1 -0
  14. package/bld/library/extrude.js +28 -0
  15. package/bld/library/extrude.js.map +1 -0
  16. package/bld/library/index.d.ts +7 -0
  17. package/bld/library/index.d.ts.map +1 -0
  18. package/bld/library/index.js +3 -0
  19. package/bld/library/index.js.map +1 -0
  20. package/bld/library/kernel-artifact-codec.d.ts +3 -0
  21. package/bld/library/kernel-artifact-codec.d.ts.map +1 -0
  22. package/bld/library/kernel-artifact-codec.js +148 -0
  23. package/bld/library/kernel-artifact-codec.js.map +1 -0
  24. package/bld/library/kernel-cache.d.ts +63 -0
  25. package/bld/library/kernel-cache.d.ts.map +1 -0
  26. package/bld/library/kernel-cache.js +245 -0
  27. package/bld/library/kernel-cache.js.map +1 -0
  28. package/bld/library/kernel-shapes.d.ts +20 -0
  29. package/bld/library/kernel-shapes.d.ts.map +1 -0
  30. package/bld/library/kernel-shapes.js +108 -0
  31. package/bld/library/kernel-shapes.js.map +1 -0
  32. package/bld/library/loft.d.ts +7 -0
  33. package/bld/library/loft.d.ts.map +1 -0
  34. package/bld/library/loft.js +161 -0
  35. package/bld/library/loft.js.map +1 -0
  36. package/bld/library/material.d.ts +12 -0
  37. package/bld/library/material.d.ts.map +1 -0
  38. package/bld/library/material.js +176 -0
  39. package/bld/library/material.js.map +1 -0
  40. package/bld/library/model-color.d.ts +8 -0
  41. package/bld/library/model-color.d.ts.map +1 -0
  42. package/bld/library/model-color.js +36 -0
  43. package/bld/library/model-color.js.map +1 -0
  44. package/bld/library/open-cascade-error.d.ts +2 -0
  45. package/bld/library/open-cascade-error.d.ts.map +1 -0
  46. package/bld/library/open-cascade-error.js +22 -0
  47. package/bld/library/open-cascade-error.js.map +1 -0
  48. package/bld/library/relation-solver.d.ts +29 -0
  49. package/bld/library/relation-solver.d.ts.map +1 -0
  50. package/bld/library/relation-solver.js +258 -0
  51. package/bld/library/relation-solver.js.map +1 -0
  52. package/bld/library/replicad.d.ts +17 -0
  53. package/bld/library/replicad.d.ts.map +1 -0
  54. package/bld/library/replicad.js +24 -0
  55. package/bld/library/replicad.js.map +1 -0
  56. package/bld/library/retained-memory.d.ts +7 -0
  57. package/bld/library/retained-memory.d.ts.map +1 -0
  58. package/bld/library/retained-memory.js +27 -0
  59. package/bld/library/retained-memory.js.map +1 -0
  60. package/bld/library/runtime.d.ts +775 -0
  61. package/bld/library/runtime.d.ts.map +1 -0
  62. package/bld/library/runtime.js +2954 -0
  63. package/bld/library/runtime.js.map +1 -0
  64. package/bld/library/shell.d.ts +7 -0
  65. package/bld/library/shell.d.ts.map +1 -0
  66. package/bld/library/shell.js +221 -0
  67. package/bld/library/shell.js.map +1 -0
  68. package/bld/library/sketch-curve-intersections.d.ts +13 -0
  69. package/bld/library/sketch-curve-intersections.d.ts.map +1 -0
  70. package/bld/library/sketch-curve-intersections.js +117 -0
  71. package/bld/library/sketch-curve-intersections.js.map +1 -0
  72. package/bld/library/sketch-curves.d.ts +31 -0
  73. package/bld/library/sketch-curves.d.ts.map +1 -0
  74. package/bld/library/sketch-curves.js +89 -0
  75. package/bld/library/sketch-curves.js.map +1 -0
  76. package/bld/library/sketch-drag-rules.d.ts +35 -0
  77. package/bld/library/sketch-drag-rules.d.ts.map +1 -0
  78. package/bld/library/sketch-drag-rules.js +522 -0
  79. package/bld/library/sketch-drag-rules.js.map +1 -0
  80. package/bld/library/sketch-face.d.ts +4 -0
  81. package/bld/library/sketch-face.d.ts.map +1 -0
  82. package/bld/library/sketch-face.js +72 -0
  83. package/bld/library/sketch-face.js.map +1 -0
  84. package/bld/library/sketch-incidence.d.ts +26 -0
  85. package/bld/library/sketch-incidence.d.ts.map +1 -0
  86. package/bld/library/sketch-incidence.js +114 -0
  87. package/bld/library/sketch-incidence.js.map +1 -0
  88. package/bld/library/sketch-precision.d.ts +19 -0
  89. package/bld/library/sketch-precision.d.ts.map +1 -0
  90. package/bld/library/sketch-precision.js +55 -0
  91. package/bld/library/sketch-precision.js.map +1 -0
  92. package/bld/library/sketch-regions.d.ts +12 -0
  93. package/bld/library/sketch-regions.d.ts.map +1 -0
  94. package/bld/library/sketch-regions.js +193 -0
  95. package/bld/library/sketch-regions.js.map +1 -0
  96. package/bld/library/sketch-solver.d.ts +97 -0
  97. package/bld/library/sketch-solver.d.ts.map +1 -0
  98. package/bld/library/sketch-solver.js +578 -0
  99. package/bld/library/sketch-solver.js.map +1 -0
  100. package/bld/library/sketch.d.ts +142 -0
  101. package/bld/library/sketch.d.ts.map +1 -0
  102. package/bld/library/sketch.js +650 -0
  103. package/bld/library/sketch.js.map +1 -0
  104. package/bld/library/spatial.d.ts +28 -0
  105. package/bld/library/spatial.d.ts.map +1 -0
  106. package/bld/library/spatial.js +195 -0
  107. package/bld/library/spatial.js.map +1 -0
  108. package/bld/library/three.d.ts +3 -0
  109. package/bld/library/three.d.ts.map +1 -0
  110. package/bld/library/three.js +3 -0
  111. package/bld/library/three.js.map +1 -0
  112. package/bld/library/topology-id.d.ts +24 -0
  113. package/bld/library/topology-id.d.ts.map +1 -0
  114. package/bld/library/topology-id.js +67 -0
  115. package/bld/library/topology-id.js.map +1 -0
  116. package/bld/library/topology-inspection.d.ts +64 -0
  117. package/bld/library/topology-inspection.d.ts.map +1 -0
  118. package/bld/library/topology-inspection.js +267 -0
  119. package/bld/library/topology-inspection.js.map +1 -0
  120. package/bld/library/topology.d.ts +94 -0
  121. package/bld/library/topology.d.ts.map +1 -0
  122. package/bld/library/topology.js +455 -0
  123. package/bld/library/topology.js.map +1 -0
  124. package/bld/node/index.d.ts +2 -0
  125. package/bld/node/index.d.ts.map +1 -0
  126. package/bld/node/index.js +14 -0
  127. package/bld/node/index.js.map +1 -0
  128. package/bld/node/replicad.d.ts +3 -0
  129. package/bld/node/replicad.d.ts.map +1 -0
  130. package/bld/node/replicad.js +3 -0
  131. package/bld/node/replicad.js.map +1 -0
  132. package/bld/tooling/index.d.ts +26 -0
  133. package/bld/tooling/index.d.ts.map +1 -0
  134. package/bld/tooling/index.js +19 -0
  135. package/bld/tooling/index.js.map +1 -0
  136. package/package.json +53 -0
  137. package/src/library/alignment-geometry.ts +431 -0
  138. package/src/library/bound-solver.ts +410 -0
  139. package/src/library/extrude.ts +38 -0
  140. package/src/library/index.ts +88 -0
  141. package/src/library/kernel-artifact-codec.ts +166 -0
  142. package/src/library/kernel-cache.ts +337 -0
  143. package/src/library/kernel-shapes.ts +135 -0
  144. package/src/library/loft.ts +196 -0
  145. package/src/library/material.ts +228 -0
  146. package/src/library/model-color.ts +47 -0
  147. package/src/library/open-cascade-error.ts +26 -0
  148. package/src/library/relation-solver.ts +479 -0
  149. package/src/library/replicad.ts +40 -0
  150. package/src/library/retained-memory.ts +23 -0
  151. package/src/library/runtime.ts +5146 -0
  152. package/src/library/shell.ts +281 -0
  153. package/src/library/sketch-curve-intersections.ts +154 -0
  154. package/src/library/sketch-curves.ts +161 -0
  155. package/src/library/sketch-drag-rules.ts +767 -0
  156. package/src/library/sketch-face.ts +89 -0
  157. package/src/library/sketch-incidence.ts +204 -0
  158. package/src/library/sketch-precision.ts +81 -0
  159. package/src/library/sketch-regions.ts +271 -0
  160. package/src/library/sketch-solver.ts +973 -0
  161. package/src/library/sketch.ts +977 -0
  162. package/src/library/spatial.ts +254 -0
  163. package/src/library/three.ts +2 -0
  164. package/src/library/topology-id.ts +81 -0
  165. package/src/library/topology-inspection.ts +368 -0
  166. package/src/library/topology.ts +776 -0
  167. package/src/library/tsconfig.json +11 -0
  168. package/src/node/index.ts +20 -0
  169. package/src/node/replicad.ts +3 -0
  170. package/src/node/tsconfig.json +16 -0
  171. package/src/tooling/index.ts +160 -0
  172. 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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"}