brepjs 8.8.2 → 8.8.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.
- package/dist/2d/curves.d.ts.map +1 -1
- package/dist/2d/lib/Curve2D.d.ts.map +1 -1
- package/dist/2d/lib/approximations.d.ts.map +1 -1
- package/dist/2d/lib/makeCurves.d.ts.map +1 -1
- package/dist/2d/lib/ocWrapper.d.ts.map +1 -1
- package/dist/2d.cjs +2 -2
- package/dist/2d.js +3 -3
- package/dist/Blueprint-BmFJ4caY.cjs +1439 -0
- package/dist/Blueprint-DsoGiJNJ.js +1440 -0
- package/dist/{boolean2D-q5FOdOQW.cjs → boolean2D-BQk8LNmZ.cjs} +212 -127
- package/dist/{boolean2D-Dgnuy63w.js → boolean2D-D5O0F3J8.js} +212 -127
- package/dist/{booleanFns-CFit7JYt.cjs → booleanFns-CVM3dOTP.cjs} +210 -130
- package/dist/{booleanFns--Orezl-b.js → booleanFns-DOyKxL7q.js} +210 -130
- package/dist/brepjs.cjs +457 -304
- package/dist/brepjs.js +551 -398
- package/dist/core/disposal.d.ts +44 -3
- package/dist/core/disposal.d.ts.map +1 -1
- package/dist/core/geometryHelpers.d.ts.map +1 -1
- package/dist/core/kernelCall.d.ts +20 -0
- package/dist/core/kernelCall.d.ts.map +1 -1
- package/dist/core/memory.d.ts +1 -1
- package/dist/core/memory.d.ts.map +1 -1
- package/dist/core.cjs +4 -1
- package/dist/core.d.ts +1 -1
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +11 -8
- package/dist/{cornerFinder-KNTFoGrm.js → cornerFinder-DH6EwYfL.js} +1 -1
- package/dist/{cornerFinder-v4un1Fr9.cjs → cornerFinder-XAV2ywVS.cjs} +1 -1
- package/dist/curveFns-BHRYwxBM.js +281 -0
- package/dist/{curveFns-6ovDM_sR.cjs → curveFns-BsAHC3Qv.cjs} +137 -36
- package/dist/{drawFns-WgXeXHH1.cjs → drawFns-CsmUF97U.cjs} +181 -101
- package/dist/{drawFns-XwroLxdb.js → drawFns-hD05g0ZQ.js} +181 -101
- package/dist/faceFns-DNQss51F.cjs +358 -0
- package/dist/faceFns-q5CR9pOW.js +359 -0
- package/dist/{helpers-CRfqaW0Y.cjs → helpers-aylLv0_I.cjs} +13 -10
- package/dist/{helpers-CtBCzEqs.js → helpers-tNdaX01G.js} +13 -10
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/io/importFns.d.ts.map +1 -1
- package/dist/io.cjs +131 -63
- package/dist/io.js +131 -63
- package/dist/loft-CjEEqz2P.cjs +530 -0
- package/dist/loft-DTRcYrq2.js +531 -0
- package/dist/measurement-B6_cxjpw.cjs +200 -0
- package/dist/measurement-BXqFvcGh.js +201 -0
- package/dist/measurement.cjs +1 -1
- package/dist/measurement.js +1 -1
- package/dist/{meshFns-CPNNlpbw.cjs → meshFns-CTc1CRkF.cjs} +1 -1
- package/dist/{meshFns-DAmWVyEp.js → meshFns-DDFl7gLN.js} +1 -1
- package/dist/operations/exporterFns.d.ts.map +1 -1
- package/dist/operations/exporterUtils.d.ts +3 -3
- package/dist/operations/exporterUtils.d.ts.map +1 -1
- package/dist/operations/exporters.d.ts.map +1 -1
- package/dist/operations/extrude.d.ts.map +1 -1
- package/dist/operations/extrudeFns.d.ts.map +1 -1
- package/dist/operations/loft.d.ts.map +1 -1
- package/dist/operations/multiSweepFns.d.ts.map +1 -1
- package/dist/{operations-vN0tcoaU.js → operations-jRE2QbPo.js} +261 -166
- package/dist/{operations-BQ25CPI8.cjs → operations-pxjbW4Er.cjs} +261 -166
- package/dist/operations.cjs +2 -2
- package/dist/operations.js +2 -2
- package/dist/query/shapeDistanceFilter.d.ts.map +1 -1
- package/dist/query.cjs +66 -14
- package/dist/query.js +67 -15
- package/dist/{shapeFns-C785aeVn.cjs → shapeFns-D4CRxxmF.cjs} +61 -7
- package/dist/{shapeFns-ClpALED4.js → shapeFns-DNnBK8fG.js} +61 -7
- package/dist/{shapeTypes-DnwCo942.js → shapeTypes-Bi_9RZa2.js} +50 -19
- package/dist/{shapeTypes-CIijJxCz.cjs → shapeTypes-CWuX602K.cjs} +32 -1
- package/dist/sketching/CompoundSketch.d.ts.map +1 -1
- package/dist/sketching/Sketch.d.ts.map +1 -1
- package/dist/sketching/Sketcher.d.ts.map +1 -1
- package/dist/sketching/Sketcher2d.d.ts.map +1 -1
- package/dist/sketching/cannedSketches.d.ts.map +1 -1
- package/dist/sketching/draw.d.ts.map +1 -1
- package/dist/sketching.cjs +2 -2
- package/dist/sketching.js +2 -2
- package/dist/surfaceBuilders-CLal3WlK.cjs +429 -0
- package/dist/surfaceBuilders-W9Y25CIb.js +430 -0
- package/dist/topology/curveBuilders.d.ts.map +1 -1
- package/dist/topology/shapeFns.d.ts.map +1 -1
- package/dist/topology/solidBuilders.d.ts.map +1 -1
- package/dist/topology/surfaceBuilders.d.ts.map +1 -1
- package/dist/{topology-CqyxpmEh.js → topology-CMM6vAzx.js} +6 -6
- package/dist/{topology-zG8maSDK.cjs → topology-CNw-wsmG.cjs} +6 -6
- package/dist/topology.cjs +6 -6
- package/dist/topology.js +6 -6
- package/package.json +4 -1
- package/dist/Blueprint-BmbNUnGI.cjs +0 -1185
- package/dist/Blueprint-C-JJkkwL.js +0 -1186
- package/dist/curveFns-BhQECv8e.js +0 -180
- package/dist/faceFns-3PDjBeW7.js +0 -272
- package/dist/faceFns-CxaLWOjc.cjs +0 -271
- package/dist/loft-CVb-IjEI.cjs +0 -372
- package/dist/loft-DMFjK6lk.js +0 -373
- package/dist/measurement-CecYIt3s.cjs +0 -134
- package/dist/measurement-DHDLAH7-.js +0 -135
- package/dist/surfaceBuilders-CC0ZQGix.cjs +0 -289
- package/dist/surfaceBuilders-CrJtFu2a.js +0 -290
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
3
|
+
var __typeError = (msg) => {
|
|
4
|
+
throw TypeError(msg);
|
|
5
|
+
};
|
|
6
|
+
var __using = (stack, value, async) => {
|
|
7
|
+
if (value != null) {
|
|
8
|
+
if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
|
|
9
|
+
var dispose, inner;
|
|
10
|
+
if (async) dispose = value[__knownSymbol("asyncDispose")];
|
|
11
|
+
if (dispose === void 0) {
|
|
12
|
+
dispose = value[__knownSymbol("dispose")];
|
|
13
|
+
if (async) inner = dispose;
|
|
14
|
+
}
|
|
15
|
+
if (typeof dispose !== "function") __typeError("Object not disposable");
|
|
16
|
+
if (inner) dispose = function() {
|
|
17
|
+
try {
|
|
18
|
+
inner.call(this);
|
|
19
|
+
} catch (e) {
|
|
20
|
+
return Promise.reject(e);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
stack.push([async, dispose, value]);
|
|
24
|
+
} else if (async) {
|
|
25
|
+
stack.push([async]);
|
|
26
|
+
}
|
|
27
|
+
return value;
|
|
28
|
+
};
|
|
29
|
+
var __callDispose = (stack, error, hasError) => {
|
|
30
|
+
var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
|
|
31
|
+
return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
|
|
32
|
+
};
|
|
33
|
+
var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
|
|
34
|
+
var next = (it) => {
|
|
35
|
+
while (it = stack.pop()) {
|
|
36
|
+
try {
|
|
37
|
+
var result = it[1] && it[1].call(it[2]);
|
|
38
|
+
if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
fail(e);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (hasError) throw error;
|
|
44
|
+
};
|
|
45
|
+
return next();
|
|
46
|
+
};
|
|
47
|
+
const occtBoundary = require("./occtBoundary-Cqfsau2c.cjs");
|
|
48
|
+
const shapeTypes = require("./shapeTypes-CWuX602K.cjs");
|
|
49
|
+
const errors = require("./errors-NNmTtM5u.cjs");
|
|
50
|
+
let _topoMap = null;
|
|
51
|
+
const asTopo = (entity) => {
|
|
52
|
+
if (!_topoMap) {
|
|
53
|
+
const oc = occtBoundary.getKernel().oc;
|
|
54
|
+
const ta = oc.TopAbs_ShapeEnum;
|
|
55
|
+
_topoMap = /* @__PURE__ */ new Map([
|
|
56
|
+
["vertex", ta.TopAbs_VERTEX],
|
|
57
|
+
["edge", ta.TopAbs_EDGE],
|
|
58
|
+
["wire", ta.TopAbs_WIRE],
|
|
59
|
+
["face", ta.TopAbs_FACE],
|
|
60
|
+
["shell", ta.TopAbs_SHELL],
|
|
61
|
+
["solid", ta.TopAbs_SOLID],
|
|
62
|
+
["solidCompound", ta.TopAbs_COMPSOLID],
|
|
63
|
+
["compound", ta.TopAbs_COMPOUND],
|
|
64
|
+
["shape", ta.TopAbs_SHAPE]
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
return _topoMap.get(entity);
|
|
68
|
+
};
|
|
69
|
+
const iterTopo = function* iterTopo2(shape, topo) {
|
|
70
|
+
const topoToShapeType = {
|
|
71
|
+
vertex: "vertex",
|
|
72
|
+
edge: "edge",
|
|
73
|
+
wire: "wire",
|
|
74
|
+
face: "face",
|
|
75
|
+
shell: "shell",
|
|
76
|
+
solid: "solid",
|
|
77
|
+
solidCompound: "compsolid",
|
|
78
|
+
compound: "compound",
|
|
79
|
+
shape: "compound"
|
|
80
|
+
// fallback; 'shape' isn't used in iterShapes
|
|
81
|
+
};
|
|
82
|
+
const shapeType2 = topoToShapeType[topo];
|
|
83
|
+
if (shapeType2) {
|
|
84
|
+
const shapes = occtBoundary.getKernel().iterShapes(shape, shapeType2);
|
|
85
|
+
for (const s of shapes) yield s;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const shapeType = (shape) => {
|
|
89
|
+
if (shape.IsNull()) return errors.err(errors.typeCastError("NULL_SHAPE", "This shape has no type, it is null"));
|
|
90
|
+
return errors.ok(shape.ShapeType());
|
|
91
|
+
};
|
|
92
|
+
let _downcastMap = null;
|
|
93
|
+
function getDowncastMap() {
|
|
94
|
+
if (!_downcastMap) {
|
|
95
|
+
const oc = occtBoundary.getKernel().oc;
|
|
96
|
+
const ta = oc.TopAbs_ShapeEnum;
|
|
97
|
+
_downcastMap = /* @__PURE__ */ new Map([
|
|
98
|
+
[ta.TopAbs_VERTEX, oc.TopoDS.Vertex_1],
|
|
99
|
+
[ta.TopAbs_EDGE, oc.TopoDS.Edge_1],
|
|
100
|
+
[ta.TopAbs_WIRE, oc.TopoDS.Wire_1],
|
|
101
|
+
[ta.TopAbs_FACE, oc.TopoDS.Face_1],
|
|
102
|
+
[ta.TopAbs_SHELL, oc.TopoDS.Shell_1],
|
|
103
|
+
[ta.TopAbs_SOLID, oc.TopoDS.Solid_1],
|
|
104
|
+
[ta.TopAbs_COMPSOLID, oc.TopoDS.CompSolid_1],
|
|
105
|
+
[ta.TopAbs_COMPOUND, oc.TopoDS.Compound_1]
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
return _downcastMap;
|
|
109
|
+
}
|
|
110
|
+
function downcast(shape) {
|
|
111
|
+
return errors.andThen(shapeType(shape), (myType) => {
|
|
112
|
+
const caster = getDowncastMap().get(myType);
|
|
113
|
+
if (!caster)
|
|
114
|
+
return errors.err(errors.typeCastError("NO_WRAPPER", "Could not find a wrapper for this shape type"));
|
|
115
|
+
return errors.ok(caster(shape));
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function cast(shape) {
|
|
119
|
+
if (shape.IsNull()) {
|
|
120
|
+
return errors.err(errors.typeCastError("NULL_SHAPE", "Cannot cast a null shape"));
|
|
121
|
+
}
|
|
122
|
+
return errors.ok(shapeTypes.castShape(shape));
|
|
123
|
+
}
|
|
124
|
+
function isShape3D(shape) {
|
|
125
|
+
return shapeTypes.isShape3D(shape);
|
|
126
|
+
}
|
|
127
|
+
function isWire(shape) {
|
|
128
|
+
return shapeTypes.isWire(shape);
|
|
129
|
+
}
|
|
130
|
+
function isCompSolid(shape) {
|
|
131
|
+
const st = shape.wrapped.ShapeType();
|
|
132
|
+
const oc = occtBoundary.getKernel().oc;
|
|
133
|
+
return st === oc.TopAbs_ShapeEnum.TopAbs_COMPSOLID;
|
|
134
|
+
}
|
|
135
|
+
function fromBREP(data) {
|
|
136
|
+
const oc = occtBoundary.getKernel().oc;
|
|
137
|
+
return cast(oc.BRepToolsWrapper.Read(data));
|
|
138
|
+
}
|
|
139
|
+
function getSurfaceType(face) {
|
|
140
|
+
var _stack = [];
|
|
141
|
+
try {
|
|
142
|
+
const oc = occtBoundary.getKernel().oc;
|
|
143
|
+
const scope = __using(_stack, new shapeTypes.DisposalScope());
|
|
144
|
+
const adaptor = scope.register(new oc.BRepAdaptor_Surface_2(face.wrapped, false));
|
|
145
|
+
const ga = oc.GeomAbs_SurfaceType;
|
|
146
|
+
const CAST_MAP = /* @__PURE__ */ new Map([
|
|
147
|
+
[ga.GeomAbs_Plane, "PLANE"],
|
|
148
|
+
[ga.GeomAbs_Cylinder, "CYLINDRE"],
|
|
149
|
+
[ga.GeomAbs_Cone, "CONE"],
|
|
150
|
+
[ga.GeomAbs_Sphere, "SPHERE"],
|
|
151
|
+
[ga.GeomAbs_Torus, "TORUS"],
|
|
152
|
+
[ga.GeomAbs_BezierSurface, "BEZIER_SURFACE"],
|
|
153
|
+
[ga.GeomAbs_BSplineSurface, "BSPLINE_SURFACE"],
|
|
154
|
+
[ga.GeomAbs_SurfaceOfRevolution, "REVOLUTION_SURFACE"],
|
|
155
|
+
[ga.GeomAbs_SurfaceOfExtrusion, "EXTRUSION_SURFACE"],
|
|
156
|
+
[ga.GeomAbs_OffsetSurface, "OFFSET_SURFACE"],
|
|
157
|
+
[ga.GeomAbs_OtherSurface, "OTHER_SURFACE"]
|
|
158
|
+
]);
|
|
159
|
+
const surfType = CAST_MAP.get(adaptor.GetType());
|
|
160
|
+
if (!surfType) {
|
|
161
|
+
return errors.err(
|
|
162
|
+
errors.typeCastError("UNKNOWN_SURFACE_TYPE", "Unrecognized surface type from OCCT adapter")
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
return errors.ok(surfType);
|
|
166
|
+
} catch (_) {
|
|
167
|
+
var _error = _, _hasError = true;
|
|
168
|
+
} finally {
|
|
169
|
+
__callDispose(_stack, _error, _hasError);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function faceGeomType(face) {
|
|
173
|
+
return errors.unwrap(getSurfaceType(face));
|
|
174
|
+
}
|
|
175
|
+
function faceOrientation(face) {
|
|
176
|
+
const oc = occtBoundary.getKernel().oc;
|
|
177
|
+
const orient = face.wrapped.Orientation_1();
|
|
178
|
+
return orient === oc.TopAbs_Orientation.TopAbs_FORWARD ? "forward" : "backward";
|
|
179
|
+
}
|
|
180
|
+
function flipFaceOrientation(face) {
|
|
181
|
+
return shapeTypes.castShape(face.wrapped.Reversed());
|
|
182
|
+
}
|
|
183
|
+
function uvBounds(face) {
|
|
184
|
+
const oc = occtBoundary.getKernel().oc;
|
|
185
|
+
const uMin = { current: 0 };
|
|
186
|
+
const uMax = { current: 0 };
|
|
187
|
+
const vMin = { current: 0 };
|
|
188
|
+
const vMax = { current: 0 };
|
|
189
|
+
oc.BRepTools.UVBounds_1(face.wrapped, uMin, uMax, vMin, vMax);
|
|
190
|
+
return {
|
|
191
|
+
uMin: uMin.current,
|
|
192
|
+
uMax: uMax.current,
|
|
193
|
+
vMin: vMin.current,
|
|
194
|
+
vMax: vMax.current
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function pointOnSurface(face, u, v) {
|
|
198
|
+
var _stack = [];
|
|
199
|
+
try {
|
|
200
|
+
const oc = occtBoundary.getKernel().oc;
|
|
201
|
+
const scope = __using(_stack, new shapeTypes.DisposalScope());
|
|
202
|
+
const bounds = uvBounds(face);
|
|
203
|
+
const adaptor = scope.register(new oc.BRepAdaptor_Surface_2(face.wrapped, false));
|
|
204
|
+
const p = scope.register(new oc.gp_Pnt_1());
|
|
205
|
+
const absU = u * (bounds.uMax - bounds.uMin) + bounds.uMin;
|
|
206
|
+
const absV = v * (bounds.vMax - bounds.vMin) + bounds.vMin;
|
|
207
|
+
adaptor.D0(absU, absV, p);
|
|
208
|
+
return [p.X(), p.Y(), p.Z()];
|
|
209
|
+
} catch (_) {
|
|
210
|
+
var _error = _, _hasError = true;
|
|
211
|
+
} finally {
|
|
212
|
+
__callDispose(_stack, _error, _hasError);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
function uvCoordinates(face, point) {
|
|
216
|
+
var _stack = [];
|
|
217
|
+
try {
|
|
218
|
+
const oc = occtBoundary.getKernel().oc;
|
|
219
|
+
const scope = __using(_stack, new shapeTypes.DisposalScope());
|
|
220
|
+
const v = occtBoundary.toVec3(point);
|
|
221
|
+
const surface = scope.register(oc.BRep_Tool.Surface_2(face.wrapped));
|
|
222
|
+
const projected = scope.register(
|
|
223
|
+
new oc.GeomAPI_ProjectPointOnSurf_2(
|
|
224
|
+
scope.register(occtBoundary.toOcPnt(v)),
|
|
225
|
+
surface,
|
|
226
|
+
oc.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad
|
|
227
|
+
)
|
|
228
|
+
);
|
|
229
|
+
const uPtr = { current: 0 };
|
|
230
|
+
const vPtr = { current: 0 };
|
|
231
|
+
projected.LowerDistanceParameters(uPtr, vPtr);
|
|
232
|
+
return [uPtr.current, vPtr.current];
|
|
233
|
+
} catch (_) {
|
|
234
|
+
var _error = _, _hasError = true;
|
|
235
|
+
} finally {
|
|
236
|
+
__callDispose(_stack, _error, _hasError);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
function projectPointOnFace(face, point) {
|
|
240
|
+
var _stack = [];
|
|
241
|
+
try {
|
|
242
|
+
const oc = occtBoundary.getKernel().oc;
|
|
243
|
+
const scope = __using(_stack, new shapeTypes.DisposalScope());
|
|
244
|
+
const v = occtBoundary.toVec3(point);
|
|
245
|
+
try {
|
|
246
|
+
const surface = scope.register(oc.BRep_Tool.Surface_2(face.wrapped));
|
|
247
|
+
const projected = scope.register(
|
|
248
|
+
new oc.GeomAPI_ProjectPointOnSurf_2(
|
|
249
|
+
scope.register(occtBoundary.toOcPnt(v)),
|
|
250
|
+
surface,
|
|
251
|
+
oc.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad
|
|
252
|
+
)
|
|
253
|
+
);
|
|
254
|
+
if (projected.NbPoints() === 0) {
|
|
255
|
+
return errors.err(errors.typeCastError("PROJECTION_FAILED", "No projection found on the face"));
|
|
256
|
+
}
|
|
257
|
+
const uPtr = { current: 0 };
|
|
258
|
+
const vPtr = { current: 0 };
|
|
259
|
+
projected.LowerDistanceParameters(uPtr, vPtr);
|
|
260
|
+
const nearestPnt = scope.register(projected.NearestPoint());
|
|
261
|
+
const projectedPoint = [nearestPnt.X(), nearestPnt.Y(), nearestPnt.Z()];
|
|
262
|
+
return errors.ok({
|
|
263
|
+
uv: [uPtr.current, vPtr.current],
|
|
264
|
+
point: projectedPoint,
|
|
265
|
+
distance: projected.LowerDistance()
|
|
266
|
+
});
|
|
267
|
+
} catch (e) {
|
|
268
|
+
return errors.err(
|
|
269
|
+
errors.typeCastError(
|
|
270
|
+
"PROJECTION_FAILED",
|
|
271
|
+
`Point projection failed: ${e instanceof Error ? e.message : String(e)}`
|
|
272
|
+
)
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
} catch (_) {
|
|
276
|
+
var _error = _, _hasError = true;
|
|
277
|
+
} finally {
|
|
278
|
+
__callDispose(_stack, _error, _hasError);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function normalAt(face, locationPoint) {
|
|
282
|
+
var _stack = [];
|
|
283
|
+
try {
|
|
284
|
+
const oc = occtBoundary.getKernel().oc;
|
|
285
|
+
const scope = __using(_stack, new shapeTypes.DisposalScope());
|
|
286
|
+
let u;
|
|
287
|
+
let v;
|
|
288
|
+
if (!locationPoint) {
|
|
289
|
+
const bounds = uvBounds(face);
|
|
290
|
+
u = 0.5 * (bounds.uMin + bounds.uMax);
|
|
291
|
+
v = 0.5 * (bounds.vMin + bounds.vMax);
|
|
292
|
+
} else {
|
|
293
|
+
[u, v] = uvCoordinates(face, locationPoint);
|
|
294
|
+
}
|
|
295
|
+
const p = scope.register(new oc.gp_Pnt_1());
|
|
296
|
+
const vn = scope.register(new oc.gp_Vec_1());
|
|
297
|
+
const props = scope.register(new oc.BRepGProp_Face_2(face.wrapped, false));
|
|
298
|
+
props.Normal(u, v, p, vn);
|
|
299
|
+
return [vn.X(), vn.Y(), vn.Z()];
|
|
300
|
+
} catch (_) {
|
|
301
|
+
var _error = _, _hasError = true;
|
|
302
|
+
} finally {
|
|
303
|
+
__callDispose(_stack, _error, _hasError);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
function faceCenter(face) {
|
|
307
|
+
var _stack = [];
|
|
308
|
+
try {
|
|
309
|
+
const oc = occtBoundary.getKernel().oc;
|
|
310
|
+
const scope = __using(_stack, new shapeTypes.DisposalScope());
|
|
311
|
+
const props = scope.register(new oc.GProp_GProps_1());
|
|
312
|
+
oc.BRepGProp.SurfaceProperties_2(face.wrapped, props, 1e-7, true);
|
|
313
|
+
const center = scope.register(props.CentreOfMass());
|
|
314
|
+
return [center.X(), center.Y(), center.Z()];
|
|
315
|
+
} catch (_) {
|
|
316
|
+
var _error = _, _hasError = true;
|
|
317
|
+
} finally {
|
|
318
|
+
__callDispose(_stack, _error, _hasError);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
function classifyPointOnFace(face, point, tolerance = 1e-6) {
|
|
322
|
+
const [u, v] = uvCoordinates(face, point);
|
|
323
|
+
return occtBoundary.getKernel().classifyPointOnFace(face.wrapped, u, v, tolerance);
|
|
324
|
+
}
|
|
325
|
+
function outerWire(face) {
|
|
326
|
+
const oc = occtBoundary.getKernel().oc;
|
|
327
|
+
return shapeTypes.castShape(oc.BRepTools.OuterWire(face.wrapped));
|
|
328
|
+
}
|
|
329
|
+
function innerWires(face) {
|
|
330
|
+
const outer = outerWire(face);
|
|
331
|
+
const allWires = Array.from(iterTopo(face.wrapped, "wire")).map(
|
|
332
|
+
(w) => shapeTypes.castShape(errors.unwrap(downcast(w)))
|
|
333
|
+
);
|
|
334
|
+
const result = allWires.filter((w) => !w.wrapped.IsSame(outer.wrapped));
|
|
335
|
+
return result;
|
|
336
|
+
}
|
|
337
|
+
exports.asTopo = asTopo;
|
|
338
|
+
exports.cast = cast;
|
|
339
|
+
exports.classifyPointOnFace = classifyPointOnFace;
|
|
340
|
+
exports.downcast = downcast;
|
|
341
|
+
exports.faceCenter = faceCenter;
|
|
342
|
+
exports.faceGeomType = faceGeomType;
|
|
343
|
+
exports.faceOrientation = faceOrientation;
|
|
344
|
+
exports.flipFaceOrientation = flipFaceOrientation;
|
|
345
|
+
exports.fromBREP = fromBREP;
|
|
346
|
+
exports.getSurfaceType = getSurfaceType;
|
|
347
|
+
exports.innerWires = innerWires;
|
|
348
|
+
exports.isCompSolid = isCompSolid;
|
|
349
|
+
exports.isShape3D = isShape3D;
|
|
350
|
+
exports.isWire = isWire;
|
|
351
|
+
exports.iterTopo = iterTopo;
|
|
352
|
+
exports.normalAt = normalAt;
|
|
353
|
+
exports.outerWire = outerWire;
|
|
354
|
+
exports.pointOnSurface = pointOnSurface;
|
|
355
|
+
exports.projectPointOnFace = projectPointOnFace;
|
|
356
|
+
exports.shapeType = shapeType;
|
|
357
|
+
exports.uvBounds = uvBounds;
|
|
358
|
+
exports.uvCoordinates = uvCoordinates;
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
4
|
+
};
|
|
5
|
+
var __using = (stack, value, async) => {
|
|
6
|
+
if (value != null) {
|
|
7
|
+
if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
|
|
8
|
+
var dispose, inner;
|
|
9
|
+
if (async) dispose = value[__knownSymbol("asyncDispose")];
|
|
10
|
+
if (dispose === void 0) {
|
|
11
|
+
dispose = value[__knownSymbol("dispose")];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") __typeError("Object not disposable");
|
|
15
|
+
if (inner) dispose = function() {
|
|
16
|
+
try {
|
|
17
|
+
inner.call(this);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return Promise.reject(e);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
stack.push([async, dispose, value]);
|
|
23
|
+
} else if (async) {
|
|
24
|
+
stack.push([async]);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
var __callDispose = (stack, error, hasError) => {
|
|
29
|
+
var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
|
|
30
|
+
return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
|
|
31
|
+
};
|
|
32
|
+
var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
|
|
33
|
+
var next = (it) => {
|
|
34
|
+
while (it = stack.pop()) {
|
|
35
|
+
try {
|
|
36
|
+
var result = it[1] && it[1].call(it[2]);
|
|
37
|
+
if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
|
|
38
|
+
} catch (e) {
|
|
39
|
+
fail(e);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (hasError) throw error;
|
|
43
|
+
};
|
|
44
|
+
return next();
|
|
45
|
+
};
|
|
46
|
+
import { g as getKernel, a as toVec3, d as toOcPnt } from "./occtBoundary-DvBywHyU.js";
|
|
47
|
+
import { c as castShape, j as isShape3D$1, n as isWire$1, D as DisposalScope } from "./shapeTypes-Bi_9RZa2.js";
|
|
48
|
+
import { e as err, p as typeCastError, l as ok, a as andThen, u as unwrap } from "./errors-DJ92ermb.js";
|
|
49
|
+
let _topoMap = null;
|
|
50
|
+
const asTopo = (entity) => {
|
|
51
|
+
if (!_topoMap) {
|
|
52
|
+
const oc = getKernel().oc;
|
|
53
|
+
const ta = oc.TopAbs_ShapeEnum;
|
|
54
|
+
_topoMap = /* @__PURE__ */ new Map([
|
|
55
|
+
["vertex", ta.TopAbs_VERTEX],
|
|
56
|
+
["edge", ta.TopAbs_EDGE],
|
|
57
|
+
["wire", ta.TopAbs_WIRE],
|
|
58
|
+
["face", ta.TopAbs_FACE],
|
|
59
|
+
["shell", ta.TopAbs_SHELL],
|
|
60
|
+
["solid", ta.TopAbs_SOLID],
|
|
61
|
+
["solidCompound", ta.TopAbs_COMPSOLID],
|
|
62
|
+
["compound", ta.TopAbs_COMPOUND],
|
|
63
|
+
["shape", ta.TopAbs_SHAPE]
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
return _topoMap.get(entity);
|
|
67
|
+
};
|
|
68
|
+
const iterTopo = function* iterTopo2(shape, topo) {
|
|
69
|
+
const topoToShapeType = {
|
|
70
|
+
vertex: "vertex",
|
|
71
|
+
edge: "edge",
|
|
72
|
+
wire: "wire",
|
|
73
|
+
face: "face",
|
|
74
|
+
shell: "shell",
|
|
75
|
+
solid: "solid",
|
|
76
|
+
solidCompound: "compsolid",
|
|
77
|
+
compound: "compound",
|
|
78
|
+
shape: "compound"
|
|
79
|
+
// fallback; 'shape' isn't used in iterShapes
|
|
80
|
+
};
|
|
81
|
+
const shapeType2 = topoToShapeType[topo];
|
|
82
|
+
if (shapeType2) {
|
|
83
|
+
const shapes = getKernel().iterShapes(shape, shapeType2);
|
|
84
|
+
for (const s of shapes) yield s;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const shapeType = (shape) => {
|
|
88
|
+
if (shape.IsNull()) return err(typeCastError("NULL_SHAPE", "This shape has no type, it is null"));
|
|
89
|
+
return ok(shape.ShapeType());
|
|
90
|
+
};
|
|
91
|
+
let _downcastMap = null;
|
|
92
|
+
function getDowncastMap() {
|
|
93
|
+
if (!_downcastMap) {
|
|
94
|
+
const oc = getKernel().oc;
|
|
95
|
+
const ta = oc.TopAbs_ShapeEnum;
|
|
96
|
+
_downcastMap = /* @__PURE__ */ new Map([
|
|
97
|
+
[ta.TopAbs_VERTEX, oc.TopoDS.Vertex_1],
|
|
98
|
+
[ta.TopAbs_EDGE, oc.TopoDS.Edge_1],
|
|
99
|
+
[ta.TopAbs_WIRE, oc.TopoDS.Wire_1],
|
|
100
|
+
[ta.TopAbs_FACE, oc.TopoDS.Face_1],
|
|
101
|
+
[ta.TopAbs_SHELL, oc.TopoDS.Shell_1],
|
|
102
|
+
[ta.TopAbs_SOLID, oc.TopoDS.Solid_1],
|
|
103
|
+
[ta.TopAbs_COMPSOLID, oc.TopoDS.CompSolid_1],
|
|
104
|
+
[ta.TopAbs_COMPOUND, oc.TopoDS.Compound_1]
|
|
105
|
+
]);
|
|
106
|
+
}
|
|
107
|
+
return _downcastMap;
|
|
108
|
+
}
|
|
109
|
+
function downcast(shape) {
|
|
110
|
+
return andThen(shapeType(shape), (myType) => {
|
|
111
|
+
const caster = getDowncastMap().get(myType);
|
|
112
|
+
if (!caster)
|
|
113
|
+
return err(typeCastError("NO_WRAPPER", "Could not find a wrapper for this shape type"));
|
|
114
|
+
return ok(caster(shape));
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
function cast(shape) {
|
|
118
|
+
if (shape.IsNull()) {
|
|
119
|
+
return err(typeCastError("NULL_SHAPE", "Cannot cast a null shape"));
|
|
120
|
+
}
|
|
121
|
+
return ok(castShape(shape));
|
|
122
|
+
}
|
|
123
|
+
function isShape3D(shape) {
|
|
124
|
+
return isShape3D$1(shape);
|
|
125
|
+
}
|
|
126
|
+
function isWire(shape) {
|
|
127
|
+
return isWire$1(shape);
|
|
128
|
+
}
|
|
129
|
+
function isCompSolid(shape) {
|
|
130
|
+
const st = shape.wrapped.ShapeType();
|
|
131
|
+
const oc = getKernel().oc;
|
|
132
|
+
return st === oc.TopAbs_ShapeEnum.TopAbs_COMPSOLID;
|
|
133
|
+
}
|
|
134
|
+
function fromBREP(data) {
|
|
135
|
+
const oc = getKernel().oc;
|
|
136
|
+
return cast(oc.BRepToolsWrapper.Read(data));
|
|
137
|
+
}
|
|
138
|
+
function getSurfaceType(face) {
|
|
139
|
+
var _stack = [];
|
|
140
|
+
try {
|
|
141
|
+
const oc = getKernel().oc;
|
|
142
|
+
const scope = __using(_stack, new DisposalScope());
|
|
143
|
+
const adaptor = scope.register(new oc.BRepAdaptor_Surface_2(face.wrapped, false));
|
|
144
|
+
const ga = oc.GeomAbs_SurfaceType;
|
|
145
|
+
const CAST_MAP = /* @__PURE__ */ new Map([
|
|
146
|
+
[ga.GeomAbs_Plane, "PLANE"],
|
|
147
|
+
[ga.GeomAbs_Cylinder, "CYLINDRE"],
|
|
148
|
+
[ga.GeomAbs_Cone, "CONE"],
|
|
149
|
+
[ga.GeomAbs_Sphere, "SPHERE"],
|
|
150
|
+
[ga.GeomAbs_Torus, "TORUS"],
|
|
151
|
+
[ga.GeomAbs_BezierSurface, "BEZIER_SURFACE"],
|
|
152
|
+
[ga.GeomAbs_BSplineSurface, "BSPLINE_SURFACE"],
|
|
153
|
+
[ga.GeomAbs_SurfaceOfRevolution, "REVOLUTION_SURFACE"],
|
|
154
|
+
[ga.GeomAbs_SurfaceOfExtrusion, "EXTRUSION_SURFACE"],
|
|
155
|
+
[ga.GeomAbs_OffsetSurface, "OFFSET_SURFACE"],
|
|
156
|
+
[ga.GeomAbs_OtherSurface, "OTHER_SURFACE"]
|
|
157
|
+
]);
|
|
158
|
+
const surfType = CAST_MAP.get(adaptor.GetType());
|
|
159
|
+
if (!surfType) {
|
|
160
|
+
return err(
|
|
161
|
+
typeCastError("UNKNOWN_SURFACE_TYPE", "Unrecognized surface type from OCCT adapter")
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
return ok(surfType);
|
|
165
|
+
} catch (_) {
|
|
166
|
+
var _error = _, _hasError = true;
|
|
167
|
+
} finally {
|
|
168
|
+
__callDispose(_stack, _error, _hasError);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
function faceGeomType(face) {
|
|
172
|
+
return unwrap(getSurfaceType(face));
|
|
173
|
+
}
|
|
174
|
+
function faceOrientation(face) {
|
|
175
|
+
const oc = getKernel().oc;
|
|
176
|
+
const orient = face.wrapped.Orientation_1();
|
|
177
|
+
return orient === oc.TopAbs_Orientation.TopAbs_FORWARD ? "forward" : "backward";
|
|
178
|
+
}
|
|
179
|
+
function flipFaceOrientation(face) {
|
|
180
|
+
return castShape(face.wrapped.Reversed());
|
|
181
|
+
}
|
|
182
|
+
function uvBounds(face) {
|
|
183
|
+
const oc = getKernel().oc;
|
|
184
|
+
const uMin = { current: 0 };
|
|
185
|
+
const uMax = { current: 0 };
|
|
186
|
+
const vMin = { current: 0 };
|
|
187
|
+
const vMax = { current: 0 };
|
|
188
|
+
oc.BRepTools.UVBounds_1(face.wrapped, uMin, uMax, vMin, vMax);
|
|
189
|
+
return {
|
|
190
|
+
uMin: uMin.current,
|
|
191
|
+
uMax: uMax.current,
|
|
192
|
+
vMin: vMin.current,
|
|
193
|
+
vMax: vMax.current
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function pointOnSurface(face, u, v) {
|
|
197
|
+
var _stack = [];
|
|
198
|
+
try {
|
|
199
|
+
const oc = getKernel().oc;
|
|
200
|
+
const scope = __using(_stack, new DisposalScope());
|
|
201
|
+
const bounds = uvBounds(face);
|
|
202
|
+
const adaptor = scope.register(new oc.BRepAdaptor_Surface_2(face.wrapped, false));
|
|
203
|
+
const p = scope.register(new oc.gp_Pnt_1());
|
|
204
|
+
const absU = u * (bounds.uMax - bounds.uMin) + bounds.uMin;
|
|
205
|
+
const absV = v * (bounds.vMax - bounds.vMin) + bounds.vMin;
|
|
206
|
+
adaptor.D0(absU, absV, p);
|
|
207
|
+
return [p.X(), p.Y(), p.Z()];
|
|
208
|
+
} catch (_) {
|
|
209
|
+
var _error = _, _hasError = true;
|
|
210
|
+
} finally {
|
|
211
|
+
__callDispose(_stack, _error, _hasError);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function uvCoordinates(face, point) {
|
|
215
|
+
var _stack = [];
|
|
216
|
+
try {
|
|
217
|
+
const oc = getKernel().oc;
|
|
218
|
+
const scope = __using(_stack, new DisposalScope());
|
|
219
|
+
const v = toVec3(point);
|
|
220
|
+
const surface = scope.register(oc.BRep_Tool.Surface_2(face.wrapped));
|
|
221
|
+
const projected = scope.register(
|
|
222
|
+
new oc.GeomAPI_ProjectPointOnSurf_2(
|
|
223
|
+
scope.register(toOcPnt(v)),
|
|
224
|
+
surface,
|
|
225
|
+
oc.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad
|
|
226
|
+
)
|
|
227
|
+
);
|
|
228
|
+
const uPtr = { current: 0 };
|
|
229
|
+
const vPtr = { current: 0 };
|
|
230
|
+
projected.LowerDistanceParameters(uPtr, vPtr);
|
|
231
|
+
return [uPtr.current, vPtr.current];
|
|
232
|
+
} catch (_) {
|
|
233
|
+
var _error = _, _hasError = true;
|
|
234
|
+
} finally {
|
|
235
|
+
__callDispose(_stack, _error, _hasError);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function projectPointOnFace(face, point) {
|
|
239
|
+
var _stack = [];
|
|
240
|
+
try {
|
|
241
|
+
const oc = getKernel().oc;
|
|
242
|
+
const scope = __using(_stack, new DisposalScope());
|
|
243
|
+
const v = toVec3(point);
|
|
244
|
+
try {
|
|
245
|
+
const surface = scope.register(oc.BRep_Tool.Surface_2(face.wrapped));
|
|
246
|
+
const projected = scope.register(
|
|
247
|
+
new oc.GeomAPI_ProjectPointOnSurf_2(
|
|
248
|
+
scope.register(toOcPnt(v)),
|
|
249
|
+
surface,
|
|
250
|
+
oc.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad
|
|
251
|
+
)
|
|
252
|
+
);
|
|
253
|
+
if (projected.NbPoints() === 0) {
|
|
254
|
+
return err(typeCastError("PROJECTION_FAILED", "No projection found on the face"));
|
|
255
|
+
}
|
|
256
|
+
const uPtr = { current: 0 };
|
|
257
|
+
const vPtr = { current: 0 };
|
|
258
|
+
projected.LowerDistanceParameters(uPtr, vPtr);
|
|
259
|
+
const nearestPnt = scope.register(projected.NearestPoint());
|
|
260
|
+
const projectedPoint = [nearestPnt.X(), nearestPnt.Y(), nearestPnt.Z()];
|
|
261
|
+
return ok({
|
|
262
|
+
uv: [uPtr.current, vPtr.current],
|
|
263
|
+
point: projectedPoint,
|
|
264
|
+
distance: projected.LowerDistance()
|
|
265
|
+
});
|
|
266
|
+
} catch (e) {
|
|
267
|
+
return err(
|
|
268
|
+
typeCastError(
|
|
269
|
+
"PROJECTION_FAILED",
|
|
270
|
+
`Point projection failed: ${e instanceof Error ? e.message : String(e)}`
|
|
271
|
+
)
|
|
272
|
+
);
|
|
273
|
+
}
|
|
274
|
+
} catch (_) {
|
|
275
|
+
var _error = _, _hasError = true;
|
|
276
|
+
} finally {
|
|
277
|
+
__callDispose(_stack, _error, _hasError);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function normalAt(face, locationPoint) {
|
|
281
|
+
var _stack = [];
|
|
282
|
+
try {
|
|
283
|
+
const oc = getKernel().oc;
|
|
284
|
+
const scope = __using(_stack, new DisposalScope());
|
|
285
|
+
let u;
|
|
286
|
+
let v;
|
|
287
|
+
if (!locationPoint) {
|
|
288
|
+
const bounds = uvBounds(face);
|
|
289
|
+
u = 0.5 * (bounds.uMin + bounds.uMax);
|
|
290
|
+
v = 0.5 * (bounds.vMin + bounds.vMax);
|
|
291
|
+
} else {
|
|
292
|
+
[u, v] = uvCoordinates(face, locationPoint);
|
|
293
|
+
}
|
|
294
|
+
const p = scope.register(new oc.gp_Pnt_1());
|
|
295
|
+
const vn = scope.register(new oc.gp_Vec_1());
|
|
296
|
+
const props = scope.register(new oc.BRepGProp_Face_2(face.wrapped, false));
|
|
297
|
+
props.Normal(u, v, p, vn);
|
|
298
|
+
return [vn.X(), vn.Y(), vn.Z()];
|
|
299
|
+
} catch (_) {
|
|
300
|
+
var _error = _, _hasError = true;
|
|
301
|
+
} finally {
|
|
302
|
+
__callDispose(_stack, _error, _hasError);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
function faceCenter(face) {
|
|
306
|
+
var _stack = [];
|
|
307
|
+
try {
|
|
308
|
+
const oc = getKernel().oc;
|
|
309
|
+
const scope = __using(_stack, new DisposalScope());
|
|
310
|
+
const props = scope.register(new oc.GProp_GProps_1());
|
|
311
|
+
oc.BRepGProp.SurfaceProperties_2(face.wrapped, props, 1e-7, true);
|
|
312
|
+
const center = scope.register(props.CentreOfMass());
|
|
313
|
+
return [center.X(), center.Y(), center.Z()];
|
|
314
|
+
} catch (_) {
|
|
315
|
+
var _error = _, _hasError = true;
|
|
316
|
+
} finally {
|
|
317
|
+
__callDispose(_stack, _error, _hasError);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
function classifyPointOnFace(face, point, tolerance = 1e-6) {
|
|
321
|
+
const [u, v] = uvCoordinates(face, point);
|
|
322
|
+
return getKernel().classifyPointOnFace(face.wrapped, u, v, tolerance);
|
|
323
|
+
}
|
|
324
|
+
function outerWire(face) {
|
|
325
|
+
const oc = getKernel().oc;
|
|
326
|
+
return castShape(oc.BRepTools.OuterWire(face.wrapped));
|
|
327
|
+
}
|
|
328
|
+
function innerWires(face) {
|
|
329
|
+
const outer = outerWire(face);
|
|
330
|
+
const allWires = Array.from(iterTopo(face.wrapped, "wire")).map(
|
|
331
|
+
(w) => castShape(unwrap(downcast(w)))
|
|
332
|
+
);
|
|
333
|
+
const result = allWires.filter((w) => !w.wrapped.IsSame(outer.wrapped));
|
|
334
|
+
return result;
|
|
335
|
+
}
|
|
336
|
+
export {
|
|
337
|
+
isShape3D as a,
|
|
338
|
+
isWire as b,
|
|
339
|
+
cast as c,
|
|
340
|
+
downcast as d,
|
|
341
|
+
faceCenter as e,
|
|
342
|
+
faceGeomType as f,
|
|
343
|
+
getSurfaceType as g,
|
|
344
|
+
uvCoordinates as h,
|
|
345
|
+
iterTopo as i,
|
|
346
|
+
fromBREP as j,
|
|
347
|
+
innerWires as k,
|
|
348
|
+
asTopo as l,
|
|
349
|
+
classifyPointOnFace as m,
|
|
350
|
+
normalAt as n,
|
|
351
|
+
outerWire as o,
|
|
352
|
+
pointOnSurface as p,
|
|
353
|
+
faceOrientation as q,
|
|
354
|
+
flipFaceOrientation as r,
|
|
355
|
+
isCompSolid as s,
|
|
356
|
+
projectPointOnFace as t,
|
|
357
|
+
uvBounds as u,
|
|
358
|
+
shapeType as v
|
|
359
|
+
};
|