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
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const occtBoundary = require("./occtBoundary-Cqfsau2c.cjs");
|
|
3
|
-
const shapeTypes = require("./shapeTypes-CIijJxCz.cjs");
|
|
4
|
-
const errors = require("./errors-NNmTtM5u.cjs");
|
|
5
|
-
let _topoMap = null;
|
|
6
|
-
const asTopo = (entity) => {
|
|
7
|
-
if (!_topoMap) {
|
|
8
|
-
const oc = occtBoundary.getKernel().oc;
|
|
9
|
-
const ta = oc.TopAbs_ShapeEnum;
|
|
10
|
-
_topoMap = /* @__PURE__ */ new Map([
|
|
11
|
-
["vertex", ta.TopAbs_VERTEX],
|
|
12
|
-
["edge", ta.TopAbs_EDGE],
|
|
13
|
-
["wire", ta.TopAbs_WIRE],
|
|
14
|
-
["face", ta.TopAbs_FACE],
|
|
15
|
-
["shell", ta.TopAbs_SHELL],
|
|
16
|
-
["solid", ta.TopAbs_SOLID],
|
|
17
|
-
["solidCompound", ta.TopAbs_COMPSOLID],
|
|
18
|
-
["compound", ta.TopAbs_COMPOUND],
|
|
19
|
-
["shape", ta.TopAbs_SHAPE]
|
|
20
|
-
]);
|
|
21
|
-
}
|
|
22
|
-
return _topoMap.get(entity);
|
|
23
|
-
};
|
|
24
|
-
const iterTopo = function* iterTopo2(shape, topo) {
|
|
25
|
-
const topoToShapeType = {
|
|
26
|
-
vertex: "vertex",
|
|
27
|
-
edge: "edge",
|
|
28
|
-
wire: "wire",
|
|
29
|
-
face: "face",
|
|
30
|
-
shell: "shell",
|
|
31
|
-
solid: "solid",
|
|
32
|
-
solidCompound: "compsolid",
|
|
33
|
-
compound: "compound",
|
|
34
|
-
shape: "compound"
|
|
35
|
-
// fallback; 'shape' isn't used in iterShapes
|
|
36
|
-
};
|
|
37
|
-
const shapeType2 = topoToShapeType[topo];
|
|
38
|
-
if (shapeType2) {
|
|
39
|
-
const shapes = occtBoundary.getKernel().iterShapes(shape, shapeType2);
|
|
40
|
-
for (const s of shapes) yield s;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
const shapeType = (shape) => {
|
|
44
|
-
if (shape.IsNull()) return errors.err(errors.typeCastError("NULL_SHAPE", "This shape has no type, it is null"));
|
|
45
|
-
return errors.ok(shape.ShapeType());
|
|
46
|
-
};
|
|
47
|
-
let _downcastMap = null;
|
|
48
|
-
function getDowncastMap() {
|
|
49
|
-
if (!_downcastMap) {
|
|
50
|
-
const oc = occtBoundary.getKernel().oc;
|
|
51
|
-
const ta = oc.TopAbs_ShapeEnum;
|
|
52
|
-
_downcastMap = /* @__PURE__ */ new Map([
|
|
53
|
-
[ta.TopAbs_VERTEX, oc.TopoDS.Vertex_1],
|
|
54
|
-
[ta.TopAbs_EDGE, oc.TopoDS.Edge_1],
|
|
55
|
-
[ta.TopAbs_WIRE, oc.TopoDS.Wire_1],
|
|
56
|
-
[ta.TopAbs_FACE, oc.TopoDS.Face_1],
|
|
57
|
-
[ta.TopAbs_SHELL, oc.TopoDS.Shell_1],
|
|
58
|
-
[ta.TopAbs_SOLID, oc.TopoDS.Solid_1],
|
|
59
|
-
[ta.TopAbs_COMPSOLID, oc.TopoDS.CompSolid_1],
|
|
60
|
-
[ta.TopAbs_COMPOUND, oc.TopoDS.Compound_1]
|
|
61
|
-
]);
|
|
62
|
-
}
|
|
63
|
-
return _downcastMap;
|
|
64
|
-
}
|
|
65
|
-
function downcast(shape) {
|
|
66
|
-
return errors.andThen(shapeType(shape), (myType) => {
|
|
67
|
-
const caster = getDowncastMap().get(myType);
|
|
68
|
-
if (!caster)
|
|
69
|
-
return errors.err(errors.typeCastError("NO_WRAPPER", "Could not find a wrapper for this shape type"));
|
|
70
|
-
return errors.ok(caster(shape));
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
function cast(shape) {
|
|
74
|
-
if (shape.IsNull()) {
|
|
75
|
-
return errors.err(errors.typeCastError("NULL_SHAPE", "Cannot cast a null shape"));
|
|
76
|
-
}
|
|
77
|
-
return errors.ok(shapeTypes.castShape(shape));
|
|
78
|
-
}
|
|
79
|
-
function isShape3D(shape) {
|
|
80
|
-
return shapeTypes.isShape3D(shape);
|
|
81
|
-
}
|
|
82
|
-
function isWire(shape) {
|
|
83
|
-
return shapeTypes.isWire(shape);
|
|
84
|
-
}
|
|
85
|
-
function isCompSolid(shape) {
|
|
86
|
-
const st = shape.wrapped.ShapeType();
|
|
87
|
-
const oc = occtBoundary.getKernel().oc;
|
|
88
|
-
return st === oc.TopAbs_ShapeEnum.TopAbs_COMPSOLID;
|
|
89
|
-
}
|
|
90
|
-
function fromBREP(data) {
|
|
91
|
-
const oc = occtBoundary.getKernel().oc;
|
|
92
|
-
return cast(oc.BRepToolsWrapper.Read(data));
|
|
93
|
-
}
|
|
94
|
-
function getSurfaceType(face) {
|
|
95
|
-
const oc = occtBoundary.getKernel().oc;
|
|
96
|
-
const r = shapeTypes.gcWithScope();
|
|
97
|
-
const adaptor = r(new oc.BRepAdaptor_Surface_2(face.wrapped, false));
|
|
98
|
-
const ga = oc.GeomAbs_SurfaceType;
|
|
99
|
-
const CAST_MAP = /* @__PURE__ */ new Map([
|
|
100
|
-
[ga.GeomAbs_Plane, "PLANE"],
|
|
101
|
-
[ga.GeomAbs_Cylinder, "CYLINDRE"],
|
|
102
|
-
[ga.GeomAbs_Cone, "CONE"],
|
|
103
|
-
[ga.GeomAbs_Sphere, "SPHERE"],
|
|
104
|
-
[ga.GeomAbs_Torus, "TORUS"],
|
|
105
|
-
[ga.GeomAbs_BezierSurface, "BEZIER_SURFACE"],
|
|
106
|
-
[ga.GeomAbs_BSplineSurface, "BSPLINE_SURFACE"],
|
|
107
|
-
[ga.GeomAbs_SurfaceOfRevolution, "REVOLUTION_SURFACE"],
|
|
108
|
-
[ga.GeomAbs_SurfaceOfExtrusion, "EXTRUSION_SURFACE"],
|
|
109
|
-
[ga.GeomAbs_OffsetSurface, "OFFSET_SURFACE"],
|
|
110
|
-
[ga.GeomAbs_OtherSurface, "OTHER_SURFACE"]
|
|
111
|
-
]);
|
|
112
|
-
const surfType = CAST_MAP.get(adaptor.GetType());
|
|
113
|
-
if (!surfType) {
|
|
114
|
-
return errors.err(
|
|
115
|
-
errors.typeCastError("UNKNOWN_SURFACE_TYPE", "Unrecognized surface type from OCCT adapter")
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
return errors.ok(surfType);
|
|
119
|
-
}
|
|
120
|
-
function faceGeomType(face) {
|
|
121
|
-
return errors.unwrap(getSurfaceType(face));
|
|
122
|
-
}
|
|
123
|
-
function faceOrientation(face) {
|
|
124
|
-
const oc = occtBoundary.getKernel().oc;
|
|
125
|
-
const orient = face.wrapped.Orientation_1();
|
|
126
|
-
return orient === oc.TopAbs_Orientation.TopAbs_FORWARD ? "forward" : "backward";
|
|
127
|
-
}
|
|
128
|
-
function flipFaceOrientation(face) {
|
|
129
|
-
return shapeTypes.castShape(face.wrapped.Reversed());
|
|
130
|
-
}
|
|
131
|
-
function uvBounds(face) {
|
|
132
|
-
const oc = occtBoundary.getKernel().oc;
|
|
133
|
-
const uMin = { current: 0 };
|
|
134
|
-
const uMax = { current: 0 };
|
|
135
|
-
const vMin = { current: 0 };
|
|
136
|
-
const vMax = { current: 0 };
|
|
137
|
-
oc.BRepTools.UVBounds_1(face.wrapped, uMin, uMax, vMin, vMax);
|
|
138
|
-
return {
|
|
139
|
-
uMin: uMin.current,
|
|
140
|
-
uMax: uMax.current,
|
|
141
|
-
vMin: vMin.current,
|
|
142
|
-
vMax: vMax.current
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
function pointOnSurface(face, u, v) {
|
|
146
|
-
const oc = occtBoundary.getKernel().oc;
|
|
147
|
-
const r = shapeTypes.gcWithScope();
|
|
148
|
-
const bounds = uvBounds(face);
|
|
149
|
-
const adaptor = r(new oc.BRepAdaptor_Surface_2(face.wrapped, false));
|
|
150
|
-
const p = r(new oc.gp_Pnt_1());
|
|
151
|
-
const absU = u * (bounds.uMax - bounds.uMin) + bounds.uMin;
|
|
152
|
-
const absV = v * (bounds.vMax - bounds.vMin) + bounds.vMin;
|
|
153
|
-
adaptor.D0(absU, absV, p);
|
|
154
|
-
return [p.X(), p.Y(), p.Z()];
|
|
155
|
-
}
|
|
156
|
-
function uvCoordinates(face, point) {
|
|
157
|
-
const oc = occtBoundary.getKernel().oc;
|
|
158
|
-
const r = shapeTypes.gcWithScope();
|
|
159
|
-
const v = occtBoundary.toVec3(point);
|
|
160
|
-
const surface = r(oc.BRep_Tool.Surface_2(face.wrapped));
|
|
161
|
-
const projected = r(
|
|
162
|
-
new oc.GeomAPI_ProjectPointOnSurf_2(
|
|
163
|
-
r(occtBoundary.toOcPnt(v)),
|
|
164
|
-
surface,
|
|
165
|
-
oc.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad
|
|
166
|
-
)
|
|
167
|
-
);
|
|
168
|
-
const uPtr = { current: 0 };
|
|
169
|
-
const vPtr = { current: 0 };
|
|
170
|
-
projected.LowerDistanceParameters(uPtr, vPtr);
|
|
171
|
-
return [uPtr.current, vPtr.current];
|
|
172
|
-
}
|
|
173
|
-
function projectPointOnFace(face, point) {
|
|
174
|
-
const oc = occtBoundary.getKernel().oc;
|
|
175
|
-
const r = shapeTypes.gcWithScope();
|
|
176
|
-
const v = occtBoundary.toVec3(point);
|
|
177
|
-
try {
|
|
178
|
-
const surface = r(oc.BRep_Tool.Surface_2(face.wrapped));
|
|
179
|
-
const projected = r(
|
|
180
|
-
new oc.GeomAPI_ProjectPointOnSurf_2(
|
|
181
|
-
r(occtBoundary.toOcPnt(v)),
|
|
182
|
-
surface,
|
|
183
|
-
oc.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad
|
|
184
|
-
)
|
|
185
|
-
);
|
|
186
|
-
if (projected.NbPoints() === 0) {
|
|
187
|
-
return errors.err(errors.typeCastError("PROJECTION_FAILED", "No projection found on the face"));
|
|
188
|
-
}
|
|
189
|
-
const uPtr = { current: 0 };
|
|
190
|
-
const vPtr = { current: 0 };
|
|
191
|
-
projected.LowerDistanceParameters(uPtr, vPtr);
|
|
192
|
-
const nearestPnt = r(projected.NearestPoint());
|
|
193
|
-
const projectedPoint = [nearestPnt.X(), nearestPnt.Y(), nearestPnt.Z()];
|
|
194
|
-
return errors.ok({
|
|
195
|
-
uv: [uPtr.current, vPtr.current],
|
|
196
|
-
point: projectedPoint,
|
|
197
|
-
distance: projected.LowerDistance()
|
|
198
|
-
});
|
|
199
|
-
} catch (e) {
|
|
200
|
-
return errors.err(
|
|
201
|
-
errors.typeCastError(
|
|
202
|
-
"PROJECTION_FAILED",
|
|
203
|
-
`Point projection failed: ${e instanceof Error ? e.message : String(e)}`
|
|
204
|
-
)
|
|
205
|
-
);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
function normalAt(face, locationPoint) {
|
|
209
|
-
const oc = occtBoundary.getKernel().oc;
|
|
210
|
-
const r = shapeTypes.gcWithScope();
|
|
211
|
-
let u;
|
|
212
|
-
let v;
|
|
213
|
-
if (!locationPoint) {
|
|
214
|
-
const bounds = uvBounds(face);
|
|
215
|
-
u = 0.5 * (bounds.uMin + bounds.uMax);
|
|
216
|
-
v = 0.5 * (bounds.vMin + bounds.vMax);
|
|
217
|
-
} else {
|
|
218
|
-
[u, v] = uvCoordinates(face, locationPoint);
|
|
219
|
-
}
|
|
220
|
-
const p = r(new oc.gp_Pnt_1());
|
|
221
|
-
const vn = r(new oc.gp_Vec_1());
|
|
222
|
-
const props = r(new oc.BRepGProp_Face_2(face.wrapped, false));
|
|
223
|
-
props.Normal(u, v, p, vn);
|
|
224
|
-
return [vn.X(), vn.Y(), vn.Z()];
|
|
225
|
-
}
|
|
226
|
-
function faceCenter(face) {
|
|
227
|
-
const oc = occtBoundary.getKernel().oc;
|
|
228
|
-
const r = shapeTypes.gcWithScope();
|
|
229
|
-
const props = r(new oc.GProp_GProps_1());
|
|
230
|
-
oc.BRepGProp.SurfaceProperties_2(face.wrapped, props, 1e-7, true);
|
|
231
|
-
const center = r(props.CentreOfMass());
|
|
232
|
-
return [center.X(), center.Y(), center.Z()];
|
|
233
|
-
}
|
|
234
|
-
function classifyPointOnFace(face, point, tolerance = 1e-6) {
|
|
235
|
-
const [u, v] = uvCoordinates(face, point);
|
|
236
|
-
return occtBoundary.getKernel().classifyPointOnFace(face.wrapped, u, v, tolerance);
|
|
237
|
-
}
|
|
238
|
-
function outerWire(face) {
|
|
239
|
-
const oc = occtBoundary.getKernel().oc;
|
|
240
|
-
return shapeTypes.castShape(oc.BRepTools.OuterWire(face.wrapped));
|
|
241
|
-
}
|
|
242
|
-
function innerWires(face) {
|
|
243
|
-
const outer = outerWire(face);
|
|
244
|
-
const allWires = Array.from(iterTopo(face.wrapped, "wire")).map(
|
|
245
|
-
(w) => shapeTypes.castShape(errors.unwrap(downcast(w)))
|
|
246
|
-
);
|
|
247
|
-
const result = allWires.filter((w) => !w.wrapped.IsSame(outer.wrapped));
|
|
248
|
-
return result;
|
|
249
|
-
}
|
|
250
|
-
exports.asTopo = asTopo;
|
|
251
|
-
exports.cast = cast;
|
|
252
|
-
exports.classifyPointOnFace = classifyPointOnFace;
|
|
253
|
-
exports.downcast = downcast;
|
|
254
|
-
exports.faceCenter = faceCenter;
|
|
255
|
-
exports.faceGeomType = faceGeomType;
|
|
256
|
-
exports.faceOrientation = faceOrientation;
|
|
257
|
-
exports.flipFaceOrientation = flipFaceOrientation;
|
|
258
|
-
exports.fromBREP = fromBREP;
|
|
259
|
-
exports.getSurfaceType = getSurfaceType;
|
|
260
|
-
exports.innerWires = innerWires;
|
|
261
|
-
exports.isCompSolid = isCompSolid;
|
|
262
|
-
exports.isShape3D = isShape3D;
|
|
263
|
-
exports.isWire = isWire;
|
|
264
|
-
exports.iterTopo = iterTopo;
|
|
265
|
-
exports.normalAt = normalAt;
|
|
266
|
-
exports.outerWire = outerWire;
|
|
267
|
-
exports.pointOnSurface = pointOnSurface;
|
|
268
|
-
exports.projectPointOnFace = projectPointOnFace;
|
|
269
|
-
exports.shapeType = shapeType;
|
|
270
|
-
exports.uvBounds = uvBounds;
|
|
271
|
-
exports.uvCoordinates = uvCoordinates;
|
package/dist/loft-CVb-IjEI.cjs
DELETED
|
@@ -1,372 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const occtBoundary = require("./occtBoundary-Cqfsau2c.cjs");
|
|
3
|
-
const vecOps = require("./vecOps-CjRL1jau.cjs");
|
|
4
|
-
const faceFns = require("./faceFns-CxaLWOjc.cjs");
|
|
5
|
-
const errors = require("./errors-NNmTtM5u.cjs");
|
|
6
|
-
const shapeTypes = require("./shapeTypes-CIijJxCz.cjs");
|
|
7
|
-
const surfaceBuilders = require("./surfaceBuilders-CC0ZQGix.cjs");
|
|
8
|
-
function buildLawFromProfile(extrusionLength, { profile, endFactor = 1 }) {
|
|
9
|
-
const oc = occtBoundary.getKernel().oc;
|
|
10
|
-
const r = shapeTypes.gcWithScope();
|
|
11
|
-
let law;
|
|
12
|
-
if (profile === "s-curve") {
|
|
13
|
-
law = r(new oc.Law_S());
|
|
14
|
-
law.Set_1(0, 1, extrusionLength, endFactor);
|
|
15
|
-
} else if (profile === "linear") {
|
|
16
|
-
law = r(new oc.Law_Linear());
|
|
17
|
-
law.Set(0, 1, extrusionLength, endFactor);
|
|
18
|
-
} else {
|
|
19
|
-
return errors.err(
|
|
20
|
-
errors.validationError("UNSUPPORTED_PROFILE", `Unsupported extrusion profile: ${String(profile)}`)
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
return errors.ok(law.Trim(0, extrusionLength, 1e-6));
|
|
24
|
-
}
|
|
25
|
-
function weldShapes(facesOrShells) {
|
|
26
|
-
const sewn = occtBoundary.getKernel().sew(facesOrShells.map((s) => s.wrapped));
|
|
27
|
-
return errors.unwrap(faceFns.cast(errors.unwrap(faceFns.downcast(sewn))));
|
|
28
|
-
}
|
|
29
|
-
function weldShellsAndFaces(facesOrShells, ignoreType = false) {
|
|
30
|
-
const shell = weldShapes(facesOrShells);
|
|
31
|
-
if (!ignoreType && !shapeTypes.isShell(shell))
|
|
32
|
-
return errors.err(errors.typeCastError("WELD_NOT_SHELL", "Could not make a shell from faces and shells"));
|
|
33
|
-
return errors.ok(shell);
|
|
34
|
-
}
|
|
35
|
-
function makeCylinder(radius, height, location = [0, 0, 0], direction = [0, 0, 1]) {
|
|
36
|
-
const oc = occtBoundary.getKernel().oc;
|
|
37
|
-
const r = shapeTypes.gcWithScope();
|
|
38
|
-
const axis = r(occtBoundary.makeOcAx2(location, direction));
|
|
39
|
-
const cylinder = r(new oc.BRepPrimAPI_MakeCylinder_3(axis, radius, height));
|
|
40
|
-
return shapeTypes.createSolid(cylinder.Shape());
|
|
41
|
-
}
|
|
42
|
-
function makeSphere(radius) {
|
|
43
|
-
const oc = occtBoundary.getKernel().oc;
|
|
44
|
-
const r = shapeTypes.gcWithScope();
|
|
45
|
-
const sphereMaker = r(new oc.BRepPrimAPI_MakeSphere_1(radius));
|
|
46
|
-
return shapeTypes.createSolid(sphereMaker.Shape());
|
|
47
|
-
}
|
|
48
|
-
function makeCone(radius1, radius2, height, location = [0, 0, 0], direction = [0, 0, 1]) {
|
|
49
|
-
const oc = occtBoundary.getKernel().oc;
|
|
50
|
-
const r = shapeTypes.gcWithScope();
|
|
51
|
-
const axis = r(occtBoundary.makeOcAx2(location, direction));
|
|
52
|
-
const coneMaker = r(new oc.BRepPrimAPI_MakeCone_3(axis, radius1, radius2, height));
|
|
53
|
-
return shapeTypes.createSolid(coneMaker.Shape());
|
|
54
|
-
}
|
|
55
|
-
function makeTorus(majorRadius, minorRadius, location = [0, 0, 0], direction = [0, 0, 1]) {
|
|
56
|
-
const oc = occtBoundary.getKernel().oc;
|
|
57
|
-
const r = shapeTypes.gcWithScope();
|
|
58
|
-
const axis = r(occtBoundary.makeOcAx2(location, direction));
|
|
59
|
-
const torusMaker = r(new oc.BRepPrimAPI_MakeTorus_5(axis, majorRadius, minorRadius));
|
|
60
|
-
return shapeTypes.createSolid(torusMaker.Shape());
|
|
61
|
-
}
|
|
62
|
-
function makeEllipsoidTransform(x, y, z) {
|
|
63
|
-
const oc = occtBoundary.getKernel().oc;
|
|
64
|
-
const r = shapeTypes.gcWithScope();
|
|
65
|
-
const xyRatio = Math.sqrt(x * y / z);
|
|
66
|
-
const xzRatio = x / xyRatio;
|
|
67
|
-
const yzRatio = y / xyRatio;
|
|
68
|
-
const ax1 = r(occtBoundary.makeOcAx1([0, 0, 0], [0, 1, 0]));
|
|
69
|
-
const ax2 = r(occtBoundary.makeOcAx1([0, 0, 0], [0, 0, 1]));
|
|
70
|
-
const ax3 = r(occtBoundary.makeOcAx1([0, 0, 0], [1, 0, 0]));
|
|
71
|
-
const transform = new oc.gp_GTrsf_1();
|
|
72
|
-
transform.SetAffinity_1(ax1, xzRatio);
|
|
73
|
-
const xy = r(new oc.gp_GTrsf_1());
|
|
74
|
-
xy.SetAffinity_1(ax2, xyRatio);
|
|
75
|
-
const yz = r(new oc.gp_GTrsf_1());
|
|
76
|
-
yz.SetAffinity_1(ax3, yzRatio);
|
|
77
|
-
transform.Multiply(xy);
|
|
78
|
-
transform.Multiply(yz);
|
|
79
|
-
return {
|
|
80
|
-
transform,
|
|
81
|
-
applyToPoint(p) {
|
|
82
|
-
const r2 = shapeTypes.gcWithScope();
|
|
83
|
-
const coords = r2(p.XYZ());
|
|
84
|
-
transform.Transforms_1(coords);
|
|
85
|
-
return new oc.gp_Pnt_2(coords);
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
function convertToJSArray(arrayOfPoints) {
|
|
90
|
-
const newArray = [];
|
|
91
|
-
for (let row = arrayOfPoints.LowerRow(); row <= arrayOfPoints.UpperRow(); row++) {
|
|
92
|
-
const rowArr = [];
|
|
93
|
-
newArray.push(rowArr);
|
|
94
|
-
for (let c = arrayOfPoints.LowerCol(); c <= arrayOfPoints.UpperCol(); c++) {
|
|
95
|
-
const pnt = arrayOfPoints.Value(row, c);
|
|
96
|
-
rowArr.push(pnt);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return newArray;
|
|
100
|
-
}
|
|
101
|
-
function makeEllipsoid(aLength, bLength, cLength) {
|
|
102
|
-
const oc = occtBoundary.getKernel().oc;
|
|
103
|
-
const r = shapeTypes.gcWithScope();
|
|
104
|
-
const sphere = r(new oc.gp_Sphere_1());
|
|
105
|
-
sphere.SetRadius(1);
|
|
106
|
-
const sphericalSurface = r(new oc.Geom_SphericalSurface_2(sphere));
|
|
107
|
-
const baseSurface = oc.GeomConvert.SurfaceToBSplineSurface(sphericalSurface.UReversed()).get();
|
|
108
|
-
try {
|
|
109
|
-
const poles = convertToJSArray(baseSurface.Poles_2());
|
|
110
|
-
const ellipsoidTrsf = makeEllipsoidTransform(aLength, bLength, cLength);
|
|
111
|
-
poles.forEach((columns, rowIdx) => {
|
|
112
|
-
columns.forEach((value, colIdx) => {
|
|
113
|
-
const newPoint = ellipsoidTrsf.applyToPoint(value);
|
|
114
|
-
baseSurface.SetPole_1(rowIdx + 1, colIdx + 1, newPoint);
|
|
115
|
-
newPoint.delete();
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
ellipsoidTrsf.transform.delete();
|
|
119
|
-
const shell = errors.unwrap(
|
|
120
|
-
faceFns.cast(r(new oc.BRepBuilderAPI_MakeShell_2(baseSurface.UReversed(), false)).Shell())
|
|
121
|
-
);
|
|
122
|
-
return errors.unwrap(makeSolid([shell]));
|
|
123
|
-
} finally {
|
|
124
|
-
baseSurface.delete();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
function makeVertex(point) {
|
|
128
|
-
const oc = occtBoundary.getKernel().oc;
|
|
129
|
-
const r = shapeTypes.gcWithScope();
|
|
130
|
-
const pnt = r(occtBoundary.toOcPnt(point));
|
|
131
|
-
const vertexMaker = r(new oc.BRepBuilderAPI_MakeVertex(pnt));
|
|
132
|
-
return shapeTypes.createVertex(vertexMaker.Vertex());
|
|
133
|
-
}
|
|
134
|
-
function makeOffset(face, offset, tolerance = 1e-6) {
|
|
135
|
-
const oc = occtBoundary.getKernel().oc;
|
|
136
|
-
const progress = new oc.Message_ProgressRange_1();
|
|
137
|
-
const offsetBuilder = new oc.BRepOffsetAPI_MakeOffsetShape();
|
|
138
|
-
try {
|
|
139
|
-
offsetBuilder.PerformByJoin(
|
|
140
|
-
face.wrapped,
|
|
141
|
-
offset,
|
|
142
|
-
tolerance,
|
|
143
|
-
oc.BRepOffset_Mode.BRepOffset_Skin,
|
|
144
|
-
false,
|
|
145
|
-
false,
|
|
146
|
-
oc.GeomAbs_JoinType.GeomAbs_Arc,
|
|
147
|
-
false,
|
|
148
|
-
progress
|
|
149
|
-
);
|
|
150
|
-
return errors.andThen(
|
|
151
|
-
faceFns.downcast(offsetBuilder.Shape()),
|
|
152
|
-
(downcasted) => errors.andThen(faceFns.cast(downcasted), (newShape) => {
|
|
153
|
-
if (!shapeTypes.isShape3D(newShape))
|
|
154
|
-
return errors.err(errors.typeCastError("OFFSET_NOT_3D", "Could not offset to a 3d shape"));
|
|
155
|
-
return errors.ok(newShape);
|
|
156
|
-
})
|
|
157
|
-
);
|
|
158
|
-
} finally {
|
|
159
|
-
offsetBuilder.delete();
|
|
160
|
-
progress.delete();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
function makeCompound(shapeArray) {
|
|
164
|
-
const oc = occtBoundary.getKernel().oc;
|
|
165
|
-
const builder = new oc.TopoDS_Builder();
|
|
166
|
-
const compound = new oc.TopoDS_Compound();
|
|
167
|
-
builder.MakeCompound(compound);
|
|
168
|
-
for (const s of shapeArray) {
|
|
169
|
-
builder.Add(compound, s.wrapped);
|
|
170
|
-
}
|
|
171
|
-
builder.delete();
|
|
172
|
-
return shapeTypes.createCompound(compound);
|
|
173
|
-
}
|
|
174
|
-
function makeSolid(facesOrShells) {
|
|
175
|
-
const r = shapeTypes.gcWithScope();
|
|
176
|
-
const oc = occtBoundary.getKernel().oc;
|
|
177
|
-
const shell = weldShapes(facesOrShells);
|
|
178
|
-
return errors.andThen(faceFns.cast(r(new oc.ShapeFix_Solid_1()).SolidFromShell(shell.wrapped)), (solid) => {
|
|
179
|
-
if (!shapeTypes.isSolid(solid))
|
|
180
|
-
return errors.err(errors.typeCastError("SOLID_BUILD_FAILED", "Could not make a solid of faces and shells"));
|
|
181
|
-
return errors.ok(solid);
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
const basicFaceExtrusion = (face, extrusionVec) => {
|
|
185
|
-
const oc = occtBoundary.getKernel().oc;
|
|
186
|
-
const [r, gc] = shapeTypes.localGC();
|
|
187
|
-
const vec = occtBoundary.toVec3(extrusionVec);
|
|
188
|
-
const ocVec = r(new oc.gp_Vec_4(vec[0], vec[1], vec[2]));
|
|
189
|
-
const solidBuilder = r(new oc.BRepPrimAPI_MakePrism_1(face.wrapped, ocVec, false, true));
|
|
190
|
-
const solid = shapeTypes.createSolid(errors.unwrap(faceFns.downcast(solidBuilder.Shape())));
|
|
191
|
-
gc();
|
|
192
|
-
return solid;
|
|
193
|
-
};
|
|
194
|
-
const revolution = (face, center = [0, 0, 0], direction = [0, 0, 1], angle = 360) => {
|
|
195
|
-
const oc = occtBoundary.getKernel().oc;
|
|
196
|
-
const [r, gc] = shapeTypes.localGC();
|
|
197
|
-
const centerVec = occtBoundary.toVec3(center);
|
|
198
|
-
const directionVec = occtBoundary.toVec3(direction);
|
|
199
|
-
const ax = r(occtBoundary.makeOcAx1(centerVec, directionVec));
|
|
200
|
-
const revolBuilder = r(new oc.BRepPrimAPI_MakeRevol_1(face.wrapped, ax, angle * vecOps.DEG2RAD, false));
|
|
201
|
-
const result = errors.andThen(faceFns.cast(revolBuilder.Shape()), (shape) => {
|
|
202
|
-
if (!faceFns.isShape3D(shape))
|
|
203
|
-
return errors.err(errors.typeCastError("REVOLUTION_NOT_3D", "Revolution did not produce a 3D shape"));
|
|
204
|
-
return errors.ok(shape);
|
|
205
|
-
});
|
|
206
|
-
gc();
|
|
207
|
-
return result;
|
|
208
|
-
};
|
|
209
|
-
function genericSweep(wire, spine, {
|
|
210
|
-
frenet = false,
|
|
211
|
-
auxiliarySpine,
|
|
212
|
-
law = null,
|
|
213
|
-
transitionMode = "right",
|
|
214
|
-
withContact,
|
|
215
|
-
support,
|
|
216
|
-
forceProfileSpineOthogonality,
|
|
217
|
-
mode: sweepMode,
|
|
218
|
-
tolerance,
|
|
219
|
-
boundTolerance,
|
|
220
|
-
angularTolerance,
|
|
221
|
-
maxDegree,
|
|
222
|
-
maxSegments
|
|
223
|
-
} = {}, shellMode = false) {
|
|
224
|
-
if (sweepMode === "simple" && !shellMode) {
|
|
225
|
-
const kernel = occtBoundary.getKernel();
|
|
226
|
-
const resultOc = kernel.simplePipe(wire.wrapped, spine.wrapped);
|
|
227
|
-
const result = errors.andThen(faceFns.cast(resultOc), (shape2) => {
|
|
228
|
-
if (!faceFns.isShape3D(shape2))
|
|
229
|
-
return errors.err(errors.typeCastError("SWEEP_NOT_3D", "Simple pipe did not produce a 3D shape"));
|
|
230
|
-
return errors.ok(shape2);
|
|
231
|
-
});
|
|
232
|
-
return result;
|
|
233
|
-
}
|
|
234
|
-
const oc = occtBoundary.getKernel().oc;
|
|
235
|
-
const [r, gc] = shapeTypes.localGC();
|
|
236
|
-
const withCorrection = transitionMode === "round" ? true : !!forceProfileSpineOthogonality;
|
|
237
|
-
const sweepBuilder = r(new oc.BRepOffsetAPI_MakePipeShell(spine.wrapped));
|
|
238
|
-
if (tolerance !== void 0) {
|
|
239
|
-
sweepBuilder.SetTolerance(tolerance, boundTolerance ?? tolerance, angularTolerance ?? 1e-7);
|
|
240
|
-
}
|
|
241
|
-
if (maxDegree !== void 0) {
|
|
242
|
-
sweepBuilder.SetMaxDegree(maxDegree);
|
|
243
|
-
}
|
|
244
|
-
if (maxSegments !== void 0) {
|
|
245
|
-
sweepBuilder.SetMaxSegments(maxSegments);
|
|
246
|
-
}
|
|
247
|
-
{
|
|
248
|
-
const mode = {
|
|
249
|
-
transformed: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_Transformed,
|
|
250
|
-
round: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_RoundCorner,
|
|
251
|
-
right: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_RightCorner
|
|
252
|
-
}[transitionMode];
|
|
253
|
-
if (mode) sweepBuilder.SetTransitionMode(mode);
|
|
254
|
-
}
|
|
255
|
-
if (support) {
|
|
256
|
-
sweepBuilder.SetMode_4(support);
|
|
257
|
-
} else if (frenet) {
|
|
258
|
-
sweepBuilder.SetMode_1(frenet);
|
|
259
|
-
}
|
|
260
|
-
if (auxiliarySpine) {
|
|
261
|
-
sweepBuilder.SetMode_5(
|
|
262
|
-
auxiliarySpine.wrapped,
|
|
263
|
-
false,
|
|
264
|
-
oc.BRepFill_TypeOfContact.BRepFill_NoContact
|
|
265
|
-
);
|
|
266
|
-
}
|
|
267
|
-
if (!law) sweepBuilder.Add_1(wire.wrapped, !!withContact, withCorrection);
|
|
268
|
-
else sweepBuilder.SetLaw_1(wire.wrapped, law, !!withContact, withCorrection);
|
|
269
|
-
const progress = r(new oc.Message_ProgressRange_1());
|
|
270
|
-
sweepBuilder.Build(progress);
|
|
271
|
-
if (!sweepBuilder.IsDone()) {
|
|
272
|
-
gc();
|
|
273
|
-
return errors.err(errors.occtError("SWEEP_FAILED", "Sweep operation failed"));
|
|
274
|
-
}
|
|
275
|
-
if (!shellMode) {
|
|
276
|
-
sweepBuilder.MakeSolid();
|
|
277
|
-
}
|
|
278
|
-
const shape = errors.unwrap(faceFns.cast(sweepBuilder.Shape()));
|
|
279
|
-
if (!faceFns.isShape3D(shape)) {
|
|
280
|
-
gc();
|
|
281
|
-
return errors.err(errors.typeCastError("SWEEP_NOT_3D", "Sweep did not produce a 3D shape"));
|
|
282
|
-
}
|
|
283
|
-
if (shellMode) {
|
|
284
|
-
const startWire = errors.unwrap(faceFns.cast(sweepBuilder.FirstShape()));
|
|
285
|
-
const endWire = errors.unwrap(faceFns.cast(sweepBuilder.LastShape()));
|
|
286
|
-
if (!faceFns.isWire(startWire)) {
|
|
287
|
-
gc();
|
|
288
|
-
return errors.err(errors.typeCastError("SWEEP_START_NOT_WIRE", "Sweep did not produce a start Wire"));
|
|
289
|
-
}
|
|
290
|
-
if (!faceFns.isWire(endWire)) {
|
|
291
|
-
gc();
|
|
292
|
-
return errors.err(errors.typeCastError("SWEEP_END_NOT_WIRE", "Sweep did not produce an end Wire"));
|
|
293
|
-
}
|
|
294
|
-
gc();
|
|
295
|
-
return errors.ok([shape, startWire, endWire]);
|
|
296
|
-
}
|
|
297
|
-
gc();
|
|
298
|
-
return errors.ok(shape);
|
|
299
|
-
}
|
|
300
|
-
function complexExtrude(wire, center, normal, profileShape, shellMode = false) {
|
|
301
|
-
const [r, gc] = shapeTypes.localGC();
|
|
302
|
-
const centerVec = occtBoundary.toVec3(center);
|
|
303
|
-
const normalVec = occtBoundary.toVec3(normal);
|
|
304
|
-
const endVec = vecOps.vecAdd(centerVec, normalVec);
|
|
305
|
-
const mainSpineEdge = r(surfaceBuilders.makeLine(centerVec, endVec));
|
|
306
|
-
const spine = r(errors.unwrap(surfaceBuilders.assembleWire([mainSpineEdge])));
|
|
307
|
-
const law = profileShape ? r(errors.unwrap(buildLawFromProfile(vecOps.vecLength(normalVec), profileShape))) : null;
|
|
308
|
-
const result = shellMode ? genericSweep(wire, spine, { law }, shellMode) : genericSweep(wire, spine, { law });
|
|
309
|
-
gc();
|
|
310
|
-
return result;
|
|
311
|
-
}
|
|
312
|
-
function twistExtrude(wire, angleDegrees, center, normal, profileShape, shellMode = false) {
|
|
313
|
-
const [r, gc] = shapeTypes.localGC();
|
|
314
|
-
const centerVec = occtBoundary.toVec3(center);
|
|
315
|
-
const normalVec = occtBoundary.toVec3(normal);
|
|
316
|
-
const endVec = vecOps.vecAdd(centerVec, normalVec);
|
|
317
|
-
const mainSpineEdge = r(surfaceBuilders.makeLine(centerVec, endVec));
|
|
318
|
-
const spine = r(errors.unwrap(surfaceBuilders.assembleWire([mainSpineEdge])));
|
|
319
|
-
const extrusionLength = vecOps.vecLength(normalVec);
|
|
320
|
-
const pitch = 360 / angleDegrees * extrusionLength;
|
|
321
|
-
const radius = 1;
|
|
322
|
-
const auxiliarySpine = r(surfaceBuilders.makeHelix(pitch, extrusionLength, radius, centerVec, normalVec));
|
|
323
|
-
const law = profileShape ? r(errors.unwrap(buildLawFromProfile(extrusionLength, profileShape))) : null;
|
|
324
|
-
const result = shellMode ? genericSweep(wire, spine, { auxiliarySpine, law }, shellMode) : genericSweep(wire, spine, { auxiliarySpine, law });
|
|
325
|
-
gc();
|
|
326
|
-
return result;
|
|
327
|
-
}
|
|
328
|
-
const loft = (wires, { ruled = true, startPoint, endPoint } = {}, returnShell = false) => {
|
|
329
|
-
if (wires.length === 0 && !startPoint && !endPoint) {
|
|
330
|
-
return errors.err(errors.validationError("LOFT_EMPTY", "Loft requires at least one wire or start/end point"));
|
|
331
|
-
}
|
|
332
|
-
const oc = occtBoundary.getKernel().oc;
|
|
333
|
-
const [r, gc] = shapeTypes.localGC();
|
|
334
|
-
const loftBuilder = r(new oc.BRepOffsetAPI_ThruSections(!returnShell, ruled, 1e-6));
|
|
335
|
-
if (startPoint) {
|
|
336
|
-
loftBuilder.AddVertex(r(makeVertex(occtBoundary.toVec3(startPoint))).wrapped);
|
|
337
|
-
}
|
|
338
|
-
wires.forEach((w) => loftBuilder.AddWire(w.wrapped));
|
|
339
|
-
if (endPoint) {
|
|
340
|
-
loftBuilder.AddVertex(r(makeVertex(occtBoundary.toVec3(endPoint))).wrapped);
|
|
341
|
-
}
|
|
342
|
-
const progress = r(new oc.Message_ProgressRange_1());
|
|
343
|
-
loftBuilder.Build(progress);
|
|
344
|
-
if (!loftBuilder.IsDone()) {
|
|
345
|
-
gc();
|
|
346
|
-
return errors.err(errors.occtError("LOFT_FAILED", "Loft operation failed"));
|
|
347
|
-
}
|
|
348
|
-
const result = errors.andThen(faceFns.cast(loftBuilder.Shape()), (shape) => {
|
|
349
|
-
if (!faceFns.isShape3D(shape))
|
|
350
|
-
return errors.err(errors.typeCastError("LOFT_NOT_3D", "Loft did not produce a 3D shape"));
|
|
351
|
-
return errors.ok(shape);
|
|
352
|
-
});
|
|
353
|
-
gc();
|
|
354
|
-
return result;
|
|
355
|
-
};
|
|
356
|
-
exports.basicFaceExtrusion = basicFaceExtrusion;
|
|
357
|
-
exports.buildLawFromProfile = buildLawFromProfile;
|
|
358
|
-
exports.complexExtrude = complexExtrude;
|
|
359
|
-
exports.genericSweep = genericSweep;
|
|
360
|
-
exports.loft = loft;
|
|
361
|
-
exports.makeCompound = makeCompound;
|
|
362
|
-
exports.makeCone = makeCone;
|
|
363
|
-
exports.makeCylinder = makeCylinder;
|
|
364
|
-
exports.makeEllipsoid = makeEllipsoid;
|
|
365
|
-
exports.makeOffset = makeOffset;
|
|
366
|
-
exports.makeSolid = makeSolid;
|
|
367
|
-
exports.makeSphere = makeSphere;
|
|
368
|
-
exports.makeTorus = makeTorus;
|
|
369
|
-
exports.makeVertex = makeVertex;
|
|
370
|
-
exports.revolution = revolution;
|
|
371
|
-
exports.twistExtrude = twistExtrude;
|
|
372
|
-
exports.weldShellsAndFaces = weldShellsAndFaces;
|