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.
Files changed (98) hide show
  1. package/dist/2d/curves.d.ts.map +1 -1
  2. package/dist/2d/lib/Curve2D.d.ts.map +1 -1
  3. package/dist/2d/lib/approximations.d.ts.map +1 -1
  4. package/dist/2d/lib/makeCurves.d.ts.map +1 -1
  5. package/dist/2d/lib/ocWrapper.d.ts.map +1 -1
  6. package/dist/2d.cjs +2 -2
  7. package/dist/2d.js +3 -3
  8. package/dist/Blueprint-BmFJ4caY.cjs +1439 -0
  9. package/dist/Blueprint-DsoGiJNJ.js +1440 -0
  10. package/dist/{boolean2D-q5FOdOQW.cjs → boolean2D-BQk8LNmZ.cjs} +212 -127
  11. package/dist/{boolean2D-Dgnuy63w.js → boolean2D-D5O0F3J8.js} +212 -127
  12. package/dist/{booleanFns-CFit7JYt.cjs → booleanFns-CVM3dOTP.cjs} +210 -130
  13. package/dist/{booleanFns--Orezl-b.js → booleanFns-DOyKxL7q.js} +210 -130
  14. package/dist/brepjs.cjs +457 -304
  15. package/dist/brepjs.js +551 -398
  16. package/dist/core/disposal.d.ts +44 -3
  17. package/dist/core/disposal.d.ts.map +1 -1
  18. package/dist/core/geometryHelpers.d.ts.map +1 -1
  19. package/dist/core/kernelCall.d.ts +20 -0
  20. package/dist/core/kernelCall.d.ts.map +1 -1
  21. package/dist/core/memory.d.ts +1 -1
  22. package/dist/core/memory.d.ts.map +1 -1
  23. package/dist/core.cjs +4 -1
  24. package/dist/core.d.ts +1 -1
  25. package/dist/core.d.ts.map +1 -1
  26. package/dist/core.js +11 -8
  27. package/dist/{cornerFinder-KNTFoGrm.js → cornerFinder-DH6EwYfL.js} +1 -1
  28. package/dist/{cornerFinder-v4un1Fr9.cjs → cornerFinder-XAV2ywVS.cjs} +1 -1
  29. package/dist/curveFns-BHRYwxBM.js +281 -0
  30. package/dist/{curveFns-6ovDM_sR.cjs → curveFns-BsAHC3Qv.cjs} +137 -36
  31. package/dist/{drawFns-WgXeXHH1.cjs → drawFns-CsmUF97U.cjs} +181 -101
  32. package/dist/{drawFns-XwroLxdb.js → drawFns-hD05g0ZQ.js} +181 -101
  33. package/dist/faceFns-DNQss51F.cjs +358 -0
  34. package/dist/faceFns-q5CR9pOW.js +359 -0
  35. package/dist/{helpers-CRfqaW0Y.cjs → helpers-aylLv0_I.cjs} +13 -10
  36. package/dist/{helpers-CtBCzEqs.js → helpers-tNdaX01G.js} +13 -10
  37. package/dist/index.d.ts +2 -2
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/io/importFns.d.ts.map +1 -1
  40. package/dist/io.cjs +131 -63
  41. package/dist/io.js +131 -63
  42. package/dist/loft-CjEEqz2P.cjs +530 -0
  43. package/dist/loft-DTRcYrq2.js +531 -0
  44. package/dist/measurement-B6_cxjpw.cjs +200 -0
  45. package/dist/measurement-BXqFvcGh.js +201 -0
  46. package/dist/measurement.cjs +1 -1
  47. package/dist/measurement.js +1 -1
  48. package/dist/{meshFns-CPNNlpbw.cjs → meshFns-CTc1CRkF.cjs} +1 -1
  49. package/dist/{meshFns-DAmWVyEp.js → meshFns-DDFl7gLN.js} +1 -1
  50. package/dist/operations/exporterFns.d.ts.map +1 -1
  51. package/dist/operations/exporterUtils.d.ts +3 -3
  52. package/dist/operations/exporterUtils.d.ts.map +1 -1
  53. package/dist/operations/exporters.d.ts.map +1 -1
  54. package/dist/operations/extrude.d.ts.map +1 -1
  55. package/dist/operations/extrudeFns.d.ts.map +1 -1
  56. package/dist/operations/loft.d.ts.map +1 -1
  57. package/dist/operations/multiSweepFns.d.ts.map +1 -1
  58. package/dist/{operations-vN0tcoaU.js → operations-jRE2QbPo.js} +261 -166
  59. package/dist/{operations-BQ25CPI8.cjs → operations-pxjbW4Er.cjs} +261 -166
  60. package/dist/operations.cjs +2 -2
  61. package/dist/operations.js +2 -2
  62. package/dist/query/shapeDistanceFilter.d.ts.map +1 -1
  63. package/dist/query.cjs +66 -14
  64. package/dist/query.js +67 -15
  65. package/dist/{shapeFns-C785aeVn.cjs → shapeFns-D4CRxxmF.cjs} +61 -7
  66. package/dist/{shapeFns-ClpALED4.js → shapeFns-DNnBK8fG.js} +61 -7
  67. package/dist/{shapeTypes-DnwCo942.js → shapeTypes-Bi_9RZa2.js} +50 -19
  68. package/dist/{shapeTypes-CIijJxCz.cjs → shapeTypes-CWuX602K.cjs} +32 -1
  69. package/dist/sketching/CompoundSketch.d.ts.map +1 -1
  70. package/dist/sketching/Sketch.d.ts.map +1 -1
  71. package/dist/sketching/Sketcher.d.ts.map +1 -1
  72. package/dist/sketching/Sketcher2d.d.ts.map +1 -1
  73. package/dist/sketching/cannedSketches.d.ts.map +1 -1
  74. package/dist/sketching/draw.d.ts.map +1 -1
  75. package/dist/sketching.cjs +2 -2
  76. package/dist/sketching.js +2 -2
  77. package/dist/surfaceBuilders-CLal3WlK.cjs +429 -0
  78. package/dist/surfaceBuilders-W9Y25CIb.js +430 -0
  79. package/dist/topology/curveBuilders.d.ts.map +1 -1
  80. package/dist/topology/shapeFns.d.ts.map +1 -1
  81. package/dist/topology/solidBuilders.d.ts.map +1 -1
  82. package/dist/topology/surfaceBuilders.d.ts.map +1 -1
  83. package/dist/{topology-CqyxpmEh.js → topology-CMM6vAzx.js} +6 -6
  84. package/dist/{topology-zG8maSDK.cjs → topology-CNw-wsmG.cjs} +6 -6
  85. package/dist/topology.cjs +6 -6
  86. package/dist/topology.js +6 -6
  87. package/package.json +4 -1
  88. package/dist/Blueprint-BmbNUnGI.cjs +0 -1185
  89. package/dist/Blueprint-C-JJkkwL.js +0 -1186
  90. package/dist/curveFns-BhQECv8e.js +0 -180
  91. package/dist/faceFns-3PDjBeW7.js +0 -272
  92. package/dist/faceFns-CxaLWOjc.cjs +0 -271
  93. package/dist/loft-CVb-IjEI.cjs +0 -372
  94. package/dist/loft-DMFjK6lk.js +0 -373
  95. package/dist/measurement-CecYIt3s.cjs +0 -134
  96. package/dist/measurement-DHDLAH7-.js +0 -135
  97. package/dist/surfaceBuilders-CC0ZQGix.cjs +0 -289
  98. package/dist/surfaceBuilders-CrJtFu2a.js +0 -290
package/dist/brepjs.cjs CHANGED
@@ -1,29 +1,74 @@
1
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 result2 = it[1] && it[1].call(it[2]);
38
+ if (it[0]) return Promise.resolve(result2).then(next, (e) => (fail(e), next()));
39
+ } catch (e) {
40
+ fail(e);
41
+ }
42
+ }
43
+ if (hasError) throw error;
44
+ };
45
+ return next();
46
+ };
2
47
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
48
  const occtBoundary = require("./occtBoundary-Cqfsau2c.cjs");
4
49
  const errors = require("./errors-NNmTtM5u.cjs");
5
- const shapeTypes = require("./shapeTypes-CIijJxCz.cjs");
50
+ const shapeTypes = require("./shapeTypes-CWuX602K.cjs");
6
51
  const vecOps = require("./vecOps-CjRL1jau.cjs");
7
- const Blueprint = require("./Blueprint-BmbNUnGI.cjs");
8
- const curveFns = require("./curveFns-6ovDM_sR.cjs");
9
- const loft$2 = require("./loft-CVb-IjEI.cjs");
10
- const operations = require("./operations-BQ25CPI8.cjs");
11
- const boolean2D = require("./boolean2D-q5FOdOQW.cjs");
52
+ const Blueprint = require("./Blueprint-BmFJ4caY.cjs");
53
+ const curveFns = require("./curveFns-BsAHC3Qv.cjs");
54
+ const loft$2 = require("./loft-CjEEqz2P.cjs");
55
+ const operations = require("./operations-pxjbW4Er.cjs");
56
+ const boolean2D = require("./boolean2D-BQk8LNmZ.cjs");
12
57
  const _2d = require("./2d.cjs");
13
- const helpers = require("./helpers-CRfqaW0Y.cjs");
58
+ const helpers = require("./helpers-aylLv0_I.cjs");
14
59
  const io = require("./io.cjs");
15
- const drawFns = require("./drawFns-WgXeXHH1.cjs");
60
+ const drawFns = require("./drawFns-CsmUF97U.cjs");
16
61
  const vectors = require("./vectors-CGLqemPY.cjs");
17
- const shapeFns = require("./shapeFns-C785aeVn.cjs");
18
- const booleanFns = require("./booleanFns-CFit7JYt.cjs");
19
- const topology = require("./topology-zG8maSDK.cjs");
20
- const faceFns = require("./faceFns-CxaLWOjc.cjs");
21
- const meshFns = require("./meshFns-CPNNlpbw.cjs");
22
- const measurement = require("./measurement-CecYIt3s.cjs");
23
- const surfaceBuilders = require("./surfaceBuilders-CC0ZQGix.cjs");
62
+ const shapeFns = require("./shapeFns-D4CRxxmF.cjs");
63
+ const booleanFns = require("./booleanFns-CVM3dOTP.cjs");
64
+ const topology = require("./topology-CNw-wsmG.cjs");
65
+ const faceFns = require("./faceFns-DNQss51F.cjs");
66
+ const meshFns = require("./meshFns-CTc1CRkF.cjs");
67
+ const measurement = require("./measurement-B6_cxjpw.cjs");
68
+ const surfaceBuilders = require("./surfaceBuilders-CLal3WlK.cjs");
24
69
  const query = require("./query.cjs");
25
70
  const result = require("./result.cjs");
26
- const cornerFinder = require("./cornerFinder-v4un1Fr9.cjs");
71
+ const cornerFinder = require("./cornerFinder-XAV2ywVS.cjs");
27
72
  const worker = require("./worker.cjs");
28
73
  const errorFactories = {
29
74
  OCCT_OPERATION: (code, message, cause) => ({ kind: "OCCT_OPERATION", code, message, cause }),
@@ -53,6 +98,17 @@ function kernelCallRaw(fn, code, message, kind = "OCCT_OPERATION") {
53
98
  return errors.err(errorFactories[kind](code, `${message}: ${translatedMessage}`, e));
54
99
  }
55
100
  }
101
+ function kernelCallScoped(fn, code, message, kind = "OCCT_OPERATION") {
102
+ var _stack = [];
103
+ try {
104
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
105
+ return kernelCall(() => fn(scope), code, message, kind);
106
+ } catch (_) {
107
+ var _error = _, _hasError = true;
108
+ } finally {
109
+ __callDispose(_stack, _error, _hasError);
110
+ }
111
+ }
56
112
  function isNumber(r) {
57
113
  return typeof r === "number";
58
114
  }
@@ -414,56 +470,70 @@ function hull(shapes, options = {}) {
414
470
  }
415
471
  }
416
472
  function detectSphere(shape2) {
417
- const oc = occtBoundary.getKernel().oc;
418
- const faces = shapeFns.getFaces(shape2);
419
- if (faces.length !== 1) return null;
420
- const face2 = faces[0];
421
- const r = shapeTypes.gcWithScope();
422
- const adaptor = r(new oc.BRepAdaptor_Surface_2(face2.wrapped, true));
423
- const surfType = adaptor.GetType();
424
- if (surfType !== oc.GeomAbs_SurfaceType.GeomAbs_Sphere) return null;
425
- const ocSphere = adaptor.Sphere();
426
- const radius = ocSphere.Radius();
427
- ocSphere.delete();
428
- return radius;
473
+ var _stack = [];
474
+ try {
475
+ const oc = occtBoundary.getKernel().oc;
476
+ const faces = shapeFns.getFaces(shape2);
477
+ if (faces.length !== 1) return null;
478
+ const face2 = faces[0];
479
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
480
+ const adaptor = scope.register(new oc.BRepAdaptor_Surface_2(face2.wrapped, true));
481
+ const surfType = adaptor.GetType();
482
+ if (surfType !== oc.GeomAbs_SurfaceType.GeomAbs_Sphere) return null;
483
+ const ocSphere = adaptor.Sphere();
484
+ const radius = ocSphere.Radius();
485
+ ocSphere.delete();
486
+ return radius;
487
+ } catch (_) {
488
+ var _error = _, _hasError = true;
489
+ } finally {
490
+ __callDispose(_stack, _error, _hasError);
491
+ }
429
492
  }
430
493
  function minkowskiSphere(shape2, radius, tolerance) {
431
- const oc = occtBoundary.getKernel().oc;
432
- const r = shapeTypes.gcWithScope();
494
+ var _stack = [];
433
495
  try {
434
- const offsetMaker = r(new oc.BRepOffsetAPI_MakeOffsetShape());
435
- const progress = r(new oc.Message_ProgressRange_1());
436
- offsetMaker.PerformByJoin(
437
- shape2.wrapped,
438
- radius,
439
- tolerance,
440
- oc.BRepOffset_Mode.BRepOffset_Skin,
441
- false,
442
- false,
443
- oc.GeomAbs_JoinType.GeomAbs_Arc,
444
- false,
445
- progress
446
- );
447
- const resultShape = offsetMaker.Shape();
448
- const wrapped = shapeTypes.castShape(resultShape);
449
- if (!shapeTypes.isShape3D(wrapped)) {
450
- wrapped[Symbol.dispose]();
496
+ const oc = occtBoundary.getKernel().oc;
497
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
498
+ try {
499
+ const offsetMaker = scope.register(new oc.BRepOffsetAPI_MakeOffsetShape());
500
+ const progress = scope.register(new oc.Message_ProgressRange_1());
501
+ offsetMaker.PerformByJoin(
502
+ shape2.wrapped,
503
+ radius,
504
+ tolerance,
505
+ oc.BRepOffset_Mode.BRepOffset_Skin,
506
+ false,
507
+ false,
508
+ oc.GeomAbs_JoinType.GeomAbs_Arc,
509
+ false,
510
+ progress
511
+ );
512
+ const resultShape = offsetMaker.Shape();
513
+ const wrapped = shapeTypes.castShape(resultShape);
514
+ if (!shapeTypes.isShape3D(wrapped)) {
515
+ wrapped[Symbol.dispose]();
516
+ return errors.err(
517
+ errors.typeCastError(
518
+ errors.BrepErrorCode.MINKOWSKI_NOT_3D,
519
+ "Minkowski sphere offset did not produce a 3D shape"
520
+ )
521
+ );
522
+ }
523
+ return errors.ok(wrapped);
524
+ } catch (e) {
525
+ const raw = e instanceof Error ? e.message : String(e);
451
526
  return errors.err(
452
- errors.typeCastError(
453
- errors.BrepErrorCode.MINKOWSKI_NOT_3D,
454
- "Minkowski sphere offset did not produce a 3D shape"
455
- )
527
+ errors.occtError(errors.BrepErrorCode.MINKOWSKI_FAILED, `Minkowski sphere offset failed: ${raw}`, e, {
528
+ operation: "minkowski",
529
+ fastPath: "sphere"
530
+ })
456
531
  );
457
532
  }
458
- return errors.ok(wrapped);
459
- } catch (e) {
460
- const raw = e instanceof Error ? e.message : String(e);
461
- return errors.err(
462
- errors.occtError(errors.BrepErrorCode.MINKOWSKI_FAILED, `Minkowski sphere offset failed: ${raw}`, e, {
463
- operation: "minkowski",
464
- fastPath: "sphere"
465
- })
466
- );
533
+ } catch (_) {
534
+ var _error = _, _hasError = true;
535
+ } finally {
536
+ __callDispose(_stack, _error, _hasError);
467
537
  }
468
538
  }
469
539
  function minkowskiGeneral(shape2, tool, tolerance) {
@@ -485,14 +555,28 @@ function minkowskiGeneral(shape2, tool, tolerance) {
485
555
  }
486
556
  const sumPoints = [];
487
557
  for (const sv of shapeVerts) {
488
- const r1 = shapeTypes.gcWithScope();
489
- const pa = r1(oc.BRep_Tool.Pnt(sv.wrapped));
490
- const ax = pa.X(), ay = pa.Y(), az = pa.Z();
491
- for (const tv of toolVerts) {
492
- const r2 = shapeTypes.gcWithScope();
493
- const pb = r2(oc.BRep_Tool.Pnt(tv.wrapped));
494
- const bx = pb.X(), by = pb.Y(), bz = pb.Z();
495
- sumPoints.push({ x: ax + bx, y: ay + by, z: az + bz });
558
+ var _stack2 = [];
559
+ try {
560
+ const scope1 = __using(_stack2, new shapeTypes.DisposalScope());
561
+ const pa = scope1.register(oc.BRep_Tool.Pnt(sv.wrapped));
562
+ const ax = pa.X(), ay = pa.Y(), az = pa.Z();
563
+ for (const tv of toolVerts) {
564
+ var _stack = [];
565
+ try {
566
+ const scope2 = __using(_stack, new shapeTypes.DisposalScope());
567
+ const pb = scope2.register(oc.BRep_Tool.Pnt(tv.wrapped));
568
+ const bx = pb.X(), by = pb.Y(), bz = pb.Z();
569
+ sumPoints.push({ x: ax + bx, y: ay + by, z: az + bz });
570
+ } catch (_) {
571
+ var _error = _, _hasError = true;
572
+ } finally {
573
+ __callDispose(_stack, _error, _hasError);
574
+ }
575
+ }
576
+ } catch (_2) {
577
+ var _error2 = _2, _hasError2 = true;
578
+ } finally {
579
+ __callDispose(_stack2, _error2, _hasError2);
496
580
  }
497
581
  }
498
582
  const kernel = occtBoundary.getKernel();
@@ -597,48 +681,57 @@ function multiSectionSweep(sections, spine, options) {
597
681
  }
598
682
  const { solid: solid2 = true, ruled = false, tolerance = 1e-6 } = options ?? {};
599
683
  try {
600
- const oc = occtBoundary.getKernel().oc;
601
- const r = shapeTypes.gcWithScope();
602
- const adaptor = r(new oc.BRepAdaptor_CompCurve_2(spine.wrapped, false));
603
- const uFirst = Number(adaptor.FirstParameter());
604
- const uLast = Number(adaptor.LastParameter());
605
- const uRange = uLast - uFirst;
606
- const params = sections.map((s, i) => {
607
- if (s.location !== void 0) {
608
- return uFirst + s.location * uRange;
684
+ var _stack = [];
685
+ try {
686
+ const oc = occtBoundary.getKernel().oc;
687
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
688
+ const adaptor = scope.register(new oc.BRepAdaptor_CompCurve_2(spine.wrapped, false));
689
+ const uFirst = Number(adaptor.FirstParameter());
690
+ const uLast = Number(adaptor.LastParameter());
691
+ const uRange = uLast - uFirst;
692
+ const params = sections.map((s, i) => {
693
+ if (s.location !== void 0) {
694
+ return uFirst + s.location * uRange;
695
+ }
696
+ return uFirst + i / (sections.length - 1) * uRange;
697
+ });
698
+ const builder = scope.register(new oc.BRepOffsetAPI_ThruSections(solid2, ruled, tolerance));
699
+ for (let i = 0; i < sections.length; i++) {
700
+ const param = params[i];
701
+ const section2 = sections[i];
702
+ if (param === void 0 || section2 === void 0) continue;
703
+ const pnt = scope.register(new oc.gp_Pnt_1());
704
+ const tangent = scope.register(new oc.gp_Vec_1());
705
+ adaptor.D1(param, pnt, tangent);
706
+ const tangentDir = scope.register(new oc.gp_Dir_2(tangent));
707
+ const toAx3 = scope.register(new oc.gp_Ax3_4(pnt, tangentDir));
708
+ const trsf = scope.register(new oc.gp_Trsf_1());
709
+ trsf.SetTransformation_2(toAx3);
710
+ trsf.Invert();
711
+ const transformer = scope.register(
712
+ new oc.BRepBuilderAPI_Transform_2(section2.wire.wrapped, trsf, true)
713
+ );
714
+ const transformedShape = transformer.Shape();
715
+ const transformedWire = oc.TopoDS.Wire_1(transformedShape);
716
+ builder.AddWire(transformedWire);
609
717
  }
610
- return uFirst + i / (sections.length - 1) * uRange;
611
- });
612
- const builder = r(new oc.BRepOffsetAPI_ThruSections(solid2, ruled, tolerance));
613
- for (let i = 0; i < sections.length; i++) {
614
- const param = params[i];
615
- const section2 = sections[i];
616
- if (param === void 0 || section2 === void 0) continue;
617
- const pnt = r(new oc.gp_Pnt_1());
618
- const tangent = r(new oc.gp_Vec_1());
619
- adaptor.D1(param, pnt, tangent);
620
- const tangentDir = r(new oc.gp_Dir_2(tangent));
621
- const toAx3 = r(new oc.gp_Ax3_4(pnt, tangentDir));
622
- const trsf = r(new oc.gp_Trsf_1());
623
- trsf.SetTransformation_2(toAx3);
624
- trsf.Invert();
625
- const transformer = r(new oc.BRepBuilderAPI_Transform_2(section2.wire.wrapped, trsf, true));
626
- const transformedShape = transformer.Shape();
627
- const transformedWire = oc.TopoDS.Wire_1(transformedShape);
628
- builder.AddWire(transformedWire);
629
- }
630
- const progress = r(new oc.Message_ProgressRange_1());
631
- builder.Build(progress);
632
- if (!builder.IsDone()) {
633
- return errors.err(errors.occtError(errors.BrepErrorCode.MULTI_SWEEP_FAILED, "Multi-section sweep build failed"));
634
- }
635
- const result2 = shapeTypes.castShape(builder.Shape());
636
- if (!shapeTypes.isShape3D(result2)) {
637
- return errors.err(
638
- errors.typeCastError("MULTI_SWEEP_NOT_3D", "Multi-section sweep did not produce a 3D shape")
639
- );
718
+ const progress = scope.register(new oc.Message_ProgressRange_1());
719
+ builder.Build(progress);
720
+ if (!builder.IsDone()) {
721
+ return errors.err(errors.occtError(errors.BrepErrorCode.MULTI_SWEEP_FAILED, "Multi-section sweep build failed"));
722
+ }
723
+ const result2 = shapeTypes.castShape(builder.Shape());
724
+ if (!shapeTypes.isShape3D(result2)) {
725
+ return errors.err(
726
+ errors.typeCastError("MULTI_SWEEP_NOT_3D", "Multi-section sweep did not produce a 3D shape")
727
+ );
728
+ }
729
+ return errors.ok(result2);
730
+ } catch (_) {
731
+ var _error = _, _hasError = true;
732
+ } finally {
733
+ __callDispose(_stack, _error, _hasError);
640
734
  }
641
- return errors.ok(result2);
642
735
  } catch (e) {
643
736
  const raw = e instanceof Error ? e.message : String(e);
644
737
  return errors.err(
@@ -649,36 +742,43 @@ function multiSectionSweep(sections, spine, options) {
649
742
  function guidedSweep(profile, spine, guides, options = {}) {
650
743
  const { transition = "transformed", solid: solid2 = true, tolerance } = options;
651
744
  try {
652
- const oc = occtBoundary.getKernel().oc;
653
- const r = shapeTypes.gcWithScope();
654
- const builder = r(new oc.BRepOffsetAPI_MakePipeShell(spine.wrapped));
655
- const modeMap = {
656
- transformed: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_Transformed,
657
- round: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_RoundCorner,
658
- right: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_RightCorner
659
- };
660
- builder.SetTransitionMode(modeMap[transition]);
661
- if (tolerance !== void 0) {
662
- builder.SetTolerance(tolerance, tolerance, 1e-7);
663
- }
664
- if (guides.length > 0) {
665
- const firstGuide = guides[0];
666
- builder.SetMode_5(firstGuide.wrapped, false, oc.BRepFill_TypeOfContact.BRepFill_NoContact);
667
- }
668
- builder.Add_1(profile.wrapped, false, false);
669
- const progress = r(new oc.Message_ProgressRange_1());
670
- builder.Build(progress);
671
- if (!builder.IsDone()) {
672
- return errors.err(errors.occtError(errors.BrepErrorCode.GUIDED_SWEEP_FAILED, "Guided sweep build failed"));
673
- }
674
- if (solid2) {
675
- builder.MakeSolid();
676
- }
677
- const result2 = shapeTypes.castShape(builder.Shape());
678
- if (!shapeTypes.isShape3D(result2)) {
679
- return errors.err(errors.typeCastError("GUIDED_SWEEP_NOT_3D", "Guided sweep did not produce a 3D shape"));
745
+ var _stack = [];
746
+ try {
747
+ const oc = occtBoundary.getKernel().oc;
748
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
749
+ const builder = scope.register(new oc.BRepOffsetAPI_MakePipeShell(spine.wrapped));
750
+ const modeMap = {
751
+ transformed: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_Transformed,
752
+ round: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_RoundCorner,
753
+ right: oc.BRepBuilderAPI_TransitionMode.BRepBuilderAPI_RightCorner
754
+ };
755
+ builder.SetTransitionMode(modeMap[transition]);
756
+ if (tolerance !== void 0) {
757
+ builder.SetTolerance(tolerance, tolerance, 1e-7);
758
+ }
759
+ if (guides.length > 0) {
760
+ const firstGuide = guides[0];
761
+ builder.SetMode_5(firstGuide.wrapped, false, oc.BRepFill_TypeOfContact.BRepFill_NoContact);
762
+ }
763
+ builder.Add_1(profile.wrapped, false, false);
764
+ const progress = scope.register(new oc.Message_ProgressRange_1());
765
+ builder.Build(progress);
766
+ if (!builder.IsDone()) {
767
+ return errors.err(errors.occtError(errors.BrepErrorCode.GUIDED_SWEEP_FAILED, "Guided sweep build failed"));
768
+ }
769
+ if (solid2) {
770
+ builder.MakeSolid();
771
+ }
772
+ const result2 = shapeTypes.castShape(builder.Shape());
773
+ if (!shapeTypes.isShape3D(result2)) {
774
+ return errors.err(errors.typeCastError("GUIDED_SWEEP_NOT_3D", "Guided sweep did not produce a 3D shape"));
775
+ }
776
+ return errors.ok(result2);
777
+ } catch (_) {
778
+ var _error = _, _hasError = true;
779
+ } finally {
780
+ __callDispose(_stack, _error, _hasError);
680
781
  }
681
- return errors.ok(result2);
682
782
  } catch (e) {
683
783
  const raw = e instanceof Error ? e.message : String(e);
684
784
  return errors.err(errors.occtError(errors.BrepErrorCode.GUIDED_SWEEP_FAILED, `Guided sweep failed: ${raw}`, e));
@@ -1753,15 +1853,22 @@ function resolve3D(s) {
1753
1853
  return resolve(s);
1754
1854
  }
1755
1855
  function box(width, depth, height, options) {
1756
- const oc = occtBoundary.getKernel().oc;
1757
- const r = shapeTypes.gcWithScope();
1758
- const maker = r(new oc.BRepPrimAPI_MakeBox_2(width, depth, height));
1759
- const solid2 = shapeTypes.createSolid(maker.Solid());
1760
- const center = options?.at ?? (options?.centered ? [0, 0, 0] : void 0);
1761
- if (center) {
1762
- return shapeFns.translate(solid2, [center[0] - width / 2, center[1] - depth / 2, center[2] - height / 2]);
1856
+ var _stack = [];
1857
+ try {
1858
+ const oc = occtBoundary.getKernel().oc;
1859
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
1860
+ const maker = scope.register(new oc.BRepPrimAPI_MakeBox_2(width, depth, height));
1861
+ const solid2 = shapeTypes.createSolid(maker.Solid());
1862
+ const center = options?.at ?? (options?.centered ? [0, 0, 0] : void 0);
1863
+ if (center) {
1864
+ return shapeFns.translate(solid2, [center[0] - width / 2, center[1] - depth / 2, center[2] - height / 2]);
1865
+ }
1866
+ return solid2;
1867
+ } catch (_) {
1868
+ var _error = _, _hasError = true;
1869
+ } finally {
1870
+ __callDispose(_stack, _error, _hasError);
1763
1871
  }
1764
- return solid2;
1765
1872
  }
1766
1873
  function cylinder(radius, height, options) {
1767
1874
  const at = options?.at ?? [0, 0, 0];
@@ -1896,18 +2003,25 @@ function thicken$1(shape2, thickness) {
1896
2003
  const check = validateNotNull(shape2, "thicken: shape");
1897
2004
  if (errors.isErr(check)) return check;
1898
2005
  try {
1899
- const oc = occtBoundary.getKernel().oc;
1900
- const r = shapeTypes.gcWithScope();
1901
- const builder = r(new oc.BRepOffsetAPI_MakeThickSolid());
1902
- builder.MakeThickSolidBySimple(shape2.wrapped, thickness);
1903
- const progress = r(new oc.Message_ProgressRange_1());
1904
- builder.Build(progress);
1905
- const resultOc = builder.Shape();
1906
- const cast = shapeTypes.castShape(resultOc);
1907
- shapeFns.propagateOrigins(builder, [shape2], cast);
1908
- booleanFns.propagateFaceTags(builder, [shape2], cast);
1909
- booleanFns.propagateColors(builder, [shape2], cast);
1910
- return errors.ok(cast);
2006
+ var _stack = [];
2007
+ try {
2008
+ const oc = occtBoundary.getKernel().oc;
2009
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
2010
+ const builder = scope.register(new oc.BRepOffsetAPI_MakeThickSolid());
2011
+ builder.MakeThickSolidBySimple(shape2.wrapped, thickness);
2012
+ const progress = scope.register(new oc.Message_ProgressRange_1());
2013
+ builder.Build(progress);
2014
+ const resultOc = builder.Shape();
2015
+ const cast = shapeTypes.castShape(resultOc);
2016
+ shapeFns.propagateOrigins(builder, [shape2], cast);
2017
+ booleanFns.propagateFaceTags(builder, [shape2], cast);
2018
+ booleanFns.propagateColors(builder, [shape2], cast);
2019
+ return errors.ok(cast);
2020
+ } catch (_) {
2021
+ var _error = _, _hasError = true;
2022
+ } finally {
2023
+ __callDispose(_stack, _error, _hasError);
2024
+ }
1911
2025
  } catch (e) {
1912
2026
  const raw = e instanceof Error ? e.message : String(e);
1913
2027
  return errors.err(errors.occtError("THICKEN_FAILED", `Thicken operation failed: ${raw}`, e));
@@ -1951,29 +2065,36 @@ function fillet$1(shape2, edges, radius) {
1951
2065
  );
1952
2066
  }
1953
2067
  try {
1954
- const oc = occtBoundary.getKernel().oc;
1955
- const r = shapeTypes.gcWithScope();
1956
- const builder = r(
1957
- new oc.BRepFilletAPI_MakeFillet(shape2.wrapped, oc.ChFi3d_FilletShape.ChFi3d_Rational)
1958
- );
1959
- for (const edge of selectedEdges) {
1960
- const rad = typeof radius === "function" ? radius(edge) ?? 0 : radius;
1961
- if (typeof rad === "number") {
1962
- if (rad > 0) builder.Add_2(rad, edge.wrapped);
1963
- } else {
1964
- const [r1, r2] = rad;
1965
- if (r1 > 0 && r2 > 0) builder.Add_3(r1, r2, edge.wrapped);
2068
+ var _stack = [];
2069
+ try {
2070
+ const oc = occtBoundary.getKernel().oc;
2071
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
2072
+ const builder = scope.register(
2073
+ new oc.BRepFilletAPI_MakeFillet(shape2.wrapped, oc.ChFi3d_FilletShape.ChFi3d_Rational)
2074
+ );
2075
+ for (const edge of selectedEdges) {
2076
+ const rad = typeof radius === "function" ? radius(edge) ?? 0 : radius;
2077
+ if (typeof rad === "number") {
2078
+ if (rad > 0) builder.Add_2(rad, edge.wrapped);
2079
+ } else {
2080
+ const [r1, r2] = rad;
2081
+ if (r1 > 0 && r2 > 0) builder.Add_3(r1, r2, edge.wrapped);
2082
+ }
1966
2083
  }
2084
+ const resultOc = builder.Shape();
2085
+ const cast = shapeTypes.castShape(resultOc);
2086
+ if (!shapeTypes.isShape3D(cast)) {
2087
+ return errors.err(errors.occtError(errors.BrepErrorCode.FILLET_NOT_3D, "Fillet result is not a 3D shape"));
2088
+ }
2089
+ shapeFns.propagateOrigins(builder, [shape2], cast);
2090
+ booleanFns.propagateFaceTags(builder, [shape2], cast);
2091
+ booleanFns.propagateColors(builder, [shape2], cast);
2092
+ return errors.ok(cast);
2093
+ } catch (_) {
2094
+ var _error = _, _hasError = true;
2095
+ } finally {
2096
+ __callDispose(_stack, _error, _hasError);
1967
2097
  }
1968
- const resultOc = builder.Shape();
1969
- const cast = shapeTypes.castShape(resultOc);
1970
- if (!shapeTypes.isShape3D(cast)) {
1971
- return errors.err(errors.occtError(errors.BrepErrorCode.FILLET_NOT_3D, "Fillet result is not a 3D shape"));
1972
- }
1973
- shapeFns.propagateOrigins(builder, [shape2], cast);
1974
- booleanFns.propagateFaceTags(builder, [shape2], cast);
1975
- booleanFns.propagateColors(builder, [shape2], cast);
1976
- return errors.ok(cast);
1977
2098
  } catch (e) {
1978
2099
  const raw = e instanceof Error ? e.message : String(e);
1979
2100
  return errors.err(
@@ -2015,61 +2136,68 @@ function chamfer$1(shape2, edges, distance) {
2015
2136
  return errors.err(errors.validationError(errors.BrepErrorCode.CHAMFER_NO_EDGES, "No edges found for chamfer"));
2016
2137
  }
2017
2138
  try {
2018
- let getEdgeFaceMap = function() {
2019
- if (edgeFaceMap) return edgeFaceMap;
2020
- edgeFaceMap = /* @__PURE__ */ new Map();
2021
- const faceExp = new oc.TopExp_Explorer_2(
2022
- shape2.wrapped,
2023
- oc.TopAbs_ShapeEnum.TopAbs_FACE,
2024
- oc.TopAbs_ShapeEnum.TopAbs_SHAPE
2025
- );
2026
- while (faceExp.More()) {
2027
- const face2 = oc.TopoDS.Face_1(faceExp.Current());
2028
- const edgeExp = new oc.TopExp_Explorer_2(
2029
- face2,
2030
- oc.TopAbs_ShapeEnum.TopAbs_EDGE,
2139
+ var _stack = [];
2140
+ try {
2141
+ let getEdgeFaceMap = function() {
2142
+ if (edgeFaceMap) return edgeFaceMap;
2143
+ edgeFaceMap = /* @__PURE__ */ new Map();
2144
+ const faceExp = new oc.TopExp_Explorer_2(
2145
+ shape2.wrapped,
2146
+ oc.TopAbs_ShapeEnum.TopAbs_FACE,
2031
2147
  oc.TopAbs_ShapeEnum.TopAbs_SHAPE
2032
2148
  );
2033
- while (edgeExp.More()) {
2034
- const hash = edgeExp.Current().HashCode(2147483647);
2035
- if (!edgeFaceMap.has(hash)) {
2036
- edgeFaceMap.set(hash, face2);
2149
+ while (faceExp.More()) {
2150
+ const face2 = oc.TopoDS.Face_1(faceExp.Current());
2151
+ const edgeExp = new oc.TopExp_Explorer_2(
2152
+ face2,
2153
+ oc.TopAbs_ShapeEnum.TopAbs_EDGE,
2154
+ oc.TopAbs_ShapeEnum.TopAbs_SHAPE
2155
+ );
2156
+ while (edgeExp.More()) {
2157
+ const hash = edgeExp.Current().HashCode(2147483647);
2158
+ if (!edgeFaceMap.has(hash)) {
2159
+ edgeFaceMap.set(hash, face2);
2160
+ }
2161
+ edgeExp.Next();
2037
2162
  }
2038
- edgeExp.Next();
2163
+ edgeExp.delete();
2164
+ faceExp.Next();
2039
2165
  }
2040
- edgeExp.delete();
2041
- faceExp.Next();
2042
- }
2043
- faceExp.delete();
2044
- return edgeFaceMap;
2045
- };
2046
- const oc = occtBoundary.getKernel().oc;
2047
- const r = shapeTypes.gcWithScope();
2048
- const builder = r(new oc.BRepFilletAPI_MakeChamfer(shape2.wrapped));
2049
- let edgeFaceMap = null;
2050
- for (const edge of selectedEdges) {
2051
- const d = typeof distance === "function" ? distance(edge) ?? 0 : distance;
2052
- if (typeof d === "number") {
2053
- if (d > 0) builder.Add_2(d, edge.wrapped);
2054
- } else {
2055
- const [d1, d2] = d;
2056
- if (d1 > 0 && d2 > 0) {
2057
- const face2 = getEdgeFaceMap().get(edge.wrapped.HashCode(2147483647));
2058
- if (face2) {
2059
- builder.Add_3(d1, d2, oc.TopoDS.Edge_1(edge.wrapped), face2);
2166
+ faceExp.delete();
2167
+ return edgeFaceMap;
2168
+ };
2169
+ const oc = occtBoundary.getKernel().oc;
2170
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
2171
+ const builder = scope.register(new oc.BRepFilletAPI_MakeChamfer(shape2.wrapped));
2172
+ let edgeFaceMap = null;
2173
+ for (const edge of selectedEdges) {
2174
+ const d = typeof distance === "function" ? distance(edge) ?? 0 : distance;
2175
+ if (typeof d === "number") {
2176
+ if (d > 0) builder.Add_2(d, edge.wrapped);
2177
+ } else {
2178
+ const [d1, d2] = d;
2179
+ if (d1 > 0 && d2 > 0) {
2180
+ const face2 = getEdgeFaceMap().get(edge.wrapped.HashCode(2147483647));
2181
+ if (face2) {
2182
+ builder.Add_3(d1, d2, oc.TopoDS.Edge_1(edge.wrapped), face2);
2183
+ }
2060
2184
  }
2061
2185
  }
2062
2186
  }
2187
+ const resultOc = builder.Shape();
2188
+ const cast = shapeTypes.castShape(resultOc);
2189
+ if (!shapeTypes.isShape3D(cast)) {
2190
+ return errors.err(errors.occtError(errors.BrepErrorCode.CHAMFER_NOT_3D, "Chamfer result is not a 3D shape"));
2191
+ }
2192
+ shapeFns.propagateOrigins(builder, [shape2], cast);
2193
+ booleanFns.propagateFaceTags(builder, [shape2], cast);
2194
+ booleanFns.propagateColors(builder, [shape2], cast);
2195
+ return errors.ok(cast);
2196
+ } catch (_) {
2197
+ var _error = _, _hasError = true;
2198
+ } finally {
2199
+ __callDispose(_stack, _error, _hasError);
2063
2200
  }
2064
- const resultOc = builder.Shape();
2065
- const cast = shapeTypes.castShape(resultOc);
2066
- if (!shapeTypes.isShape3D(cast)) {
2067
- return errors.err(errors.occtError(errors.BrepErrorCode.CHAMFER_NOT_3D, "Chamfer result is not a 3D shape"));
2068
- }
2069
- shapeFns.propagateOrigins(builder, [shape2], cast);
2070
- booleanFns.propagateFaceTags(builder, [shape2], cast);
2071
- booleanFns.propagateColors(builder, [shape2], cast);
2072
- return errors.ok(cast);
2073
2201
  } catch (e) {
2074
2202
  const raw = e instanceof Error ? e.message : String(e);
2075
2203
  return errors.err(
@@ -2091,35 +2219,42 @@ function shell$1(shape2, faces, thickness, tolerance = 1e-3) {
2091
2219
  return errors.err(errors.validationError("NO_FACES", "At least one face must be specified for shell"));
2092
2220
  }
2093
2221
  try {
2094
- const oc = occtBoundary.getKernel().oc;
2095
- const r = shapeTypes.gcWithScope();
2096
- const facesToRemove = r(new oc.TopTools_ListOfShape_1());
2097
- for (const face2 of faces) {
2098
- facesToRemove.Append_1(face2.wrapped);
2099
- }
2100
- const progress = r(new oc.Message_ProgressRange_1());
2101
- const builder = r(new oc.BRepOffsetAPI_MakeThickSolid());
2102
- builder.MakeThickSolidByJoin(
2103
- shape2.wrapped,
2104
- facesToRemove,
2105
- -thickness,
2106
- tolerance,
2107
- oc.BRepOffset_Mode.BRepOffset_Skin,
2108
- false,
2109
- false,
2110
- oc.GeomAbs_JoinType.GeomAbs_Arc,
2111
- false,
2112
- progress
2113
- );
2114
- const resultOc = builder.Shape();
2115
- const cast = shapeTypes.castShape(resultOc);
2116
- if (!shapeTypes.isShape3D(cast)) {
2117
- return errors.err(errors.occtError("SHELL_RESULT_NOT_3D", "Shell result is not a 3D shape"));
2222
+ var _stack = [];
2223
+ try {
2224
+ const oc = occtBoundary.getKernel().oc;
2225
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
2226
+ const facesToRemove = scope.register(new oc.TopTools_ListOfShape_1());
2227
+ for (const face2 of faces) {
2228
+ facesToRemove.Append_1(face2.wrapped);
2229
+ }
2230
+ const progress = scope.register(new oc.Message_ProgressRange_1());
2231
+ const builder = scope.register(new oc.BRepOffsetAPI_MakeThickSolid());
2232
+ builder.MakeThickSolidByJoin(
2233
+ shape2.wrapped,
2234
+ facesToRemove,
2235
+ -thickness,
2236
+ tolerance,
2237
+ oc.BRepOffset_Mode.BRepOffset_Skin,
2238
+ false,
2239
+ false,
2240
+ oc.GeomAbs_JoinType.GeomAbs_Arc,
2241
+ false,
2242
+ progress
2243
+ );
2244
+ const resultOc = builder.Shape();
2245
+ const cast = shapeTypes.castShape(resultOc);
2246
+ if (!shapeTypes.isShape3D(cast)) {
2247
+ return errors.err(errors.occtError("SHELL_RESULT_NOT_3D", "Shell result is not a 3D shape"));
2248
+ }
2249
+ shapeFns.propagateOrigins(builder, [shape2], cast);
2250
+ booleanFns.propagateFaceTags(builder, [shape2], cast);
2251
+ booleanFns.propagateColors(builder, [shape2], cast);
2252
+ return errors.ok(cast);
2253
+ } catch (_) {
2254
+ var _error = _, _hasError = true;
2255
+ } finally {
2256
+ __callDispose(_stack, _error, _hasError);
2118
2257
  }
2119
- shapeFns.propagateOrigins(builder, [shape2], cast);
2120
- booleanFns.propagateFaceTags(builder, [shape2], cast);
2121
- booleanFns.propagateColors(builder, [shape2], cast);
2122
- return errors.ok(cast);
2123
2258
  } catch (e) {
2124
2259
  const raw = e instanceof Error ? e.message : String(e);
2125
2260
  return errors.err(
@@ -2138,30 +2273,37 @@ function offset$1(shape2, distance, tolerance = 1e-6) {
2138
2273
  return errors.err(errors.validationError("ZERO_OFFSET", "Offset distance cannot be zero"));
2139
2274
  }
2140
2275
  try {
2141
- const oc = occtBoundary.getKernel().oc;
2142
- const r = shapeTypes.gcWithScope();
2143
- const progress = r(new oc.Message_ProgressRange_1());
2144
- const builder = r(new oc.BRepOffsetAPI_MakeOffsetShape());
2145
- builder.PerformByJoin(
2146
- shape2.wrapped,
2147
- distance,
2148
- tolerance,
2149
- oc.BRepOffset_Mode.BRepOffset_Skin,
2150
- false,
2151
- false,
2152
- oc.GeomAbs_JoinType.GeomAbs_Arc,
2153
- false,
2154
- progress
2155
- );
2156
- const resultOc = builder.Shape();
2157
- const cast = shapeTypes.castShape(resultOc);
2158
- if (!shapeTypes.isShape3D(cast)) {
2159
- return errors.err(errors.occtError("OFFSET_RESULT_NOT_3D", "Offset result is not a 3D shape"));
2276
+ var _stack = [];
2277
+ try {
2278
+ const oc = occtBoundary.getKernel().oc;
2279
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
2280
+ const progress = scope.register(new oc.Message_ProgressRange_1());
2281
+ const builder = scope.register(new oc.BRepOffsetAPI_MakeOffsetShape());
2282
+ builder.PerformByJoin(
2283
+ shape2.wrapped,
2284
+ distance,
2285
+ tolerance,
2286
+ oc.BRepOffset_Mode.BRepOffset_Skin,
2287
+ false,
2288
+ false,
2289
+ oc.GeomAbs_JoinType.GeomAbs_Arc,
2290
+ false,
2291
+ progress
2292
+ );
2293
+ const resultOc = builder.Shape();
2294
+ const cast = shapeTypes.castShape(resultOc);
2295
+ if (!shapeTypes.isShape3D(cast)) {
2296
+ return errors.err(errors.occtError("OFFSET_RESULT_NOT_3D", "Offset result is not a 3D shape"));
2297
+ }
2298
+ shapeFns.propagateOrigins(builder, [shape2], cast);
2299
+ booleanFns.propagateFaceTags(builder, [shape2], cast);
2300
+ booleanFns.propagateColors(builder, [shape2], cast);
2301
+ return errors.ok(cast);
2302
+ } catch (_) {
2303
+ var _error = _, _hasError = true;
2304
+ } finally {
2305
+ __callDispose(_stack, _error, _hasError);
2160
2306
  }
2161
- shapeFns.propagateOrigins(builder, [shape2], cast);
2162
- booleanFns.propagateFaceTags(builder, [shape2], cast);
2163
- booleanFns.propagateColors(builder, [shape2], cast);
2164
- return errors.ok(cast);
2165
2307
  } catch (e) {
2166
2308
  const raw = e instanceof Error ? e.message : String(e);
2167
2309
  return errors.err(errors.occtError("OFFSET_FAILED", `Offset operation failed: ${raw}`, e));
@@ -2320,35 +2462,42 @@ function isEmpty(shape2) {
2320
2462
  return shapeFns.isEmpty(resolve(shape2));
2321
2463
  }
2322
2464
  function loft$1(wires, { ruled = true, startPoint, endPoint } = {}, returnShell = false) {
2323
- if (wires.length === 0 && !startPoint && !endPoint) {
2324
- return errors.err(errors.validationError("LOFT_EMPTY", "Loft requires at least one wire or start/end point"));
2325
- }
2326
- const oc = occtBoundary.getKernel().oc;
2327
- const r = shapeTypes.gcWithScope();
2328
- const builder = r(new oc.BRepOffsetAPI_ThruSections(!returnShell, ruled, 1e-6));
2329
- if (startPoint) {
2330
- const pnt = r(occtBoundary.toOcPnt(occtBoundary.toVec3(startPoint)));
2331
- const vMaker = r(new oc.BRepBuilderAPI_MakeVertex(pnt));
2332
- builder.AddVertex(vMaker.Vertex());
2333
- }
2334
- for (const w of wires) {
2335
- builder.AddWire(w.wrapped);
2336
- }
2337
- if (endPoint) {
2338
- const pnt = r(occtBoundary.toOcPnt(occtBoundary.toVec3(endPoint)));
2339
- const vMaker = r(new oc.BRepBuilderAPI_MakeVertex(pnt));
2340
- builder.AddVertex(vMaker.Vertex());
2341
- }
2342
- const progress = r(new oc.Message_ProgressRange_1());
2343
- builder.Build(progress);
2344
- if (!builder.IsDone()) {
2345
- return errors.err(errors.occtError("LOFT_FAILED", "Loft operation failed"));
2346
- }
2347
- const result2 = shapeTypes.castShape(builder.Shape());
2348
- if (!shapeTypes.isShape3D(result2)) {
2349
- return errors.err(errors.typeCastError("LOFT_NOT_3D", "Loft did not produce a 3D shape"));
2465
+ var _stack = [];
2466
+ try {
2467
+ if (wires.length === 0 && !startPoint && !endPoint) {
2468
+ return errors.err(errors.validationError("LOFT_EMPTY", "Loft requires at least one wire or start/end point"));
2469
+ }
2470
+ const oc = occtBoundary.getKernel().oc;
2471
+ const scope = __using(_stack, new shapeTypes.DisposalScope());
2472
+ const builder = scope.register(new oc.BRepOffsetAPI_ThruSections(!returnShell, ruled, 1e-6));
2473
+ if (startPoint) {
2474
+ const pnt = scope.register(occtBoundary.toOcPnt(occtBoundary.toVec3(startPoint)));
2475
+ const vMaker = scope.register(new oc.BRepBuilderAPI_MakeVertex(pnt));
2476
+ builder.AddVertex(vMaker.Vertex());
2477
+ }
2478
+ for (const w of wires) {
2479
+ builder.AddWire(w.wrapped);
2480
+ }
2481
+ if (endPoint) {
2482
+ const pnt = scope.register(occtBoundary.toOcPnt(occtBoundary.toVec3(endPoint)));
2483
+ const vMaker = scope.register(new oc.BRepBuilderAPI_MakeVertex(pnt));
2484
+ builder.AddVertex(vMaker.Vertex());
2485
+ }
2486
+ const progress = scope.register(new oc.Message_ProgressRange_1());
2487
+ builder.Build(progress);
2488
+ if (!builder.IsDone()) {
2489
+ return errors.err(errors.occtError("LOFT_FAILED", "Loft operation failed"));
2490
+ }
2491
+ const result2 = shapeTypes.castShape(builder.Shape());
2492
+ if (!shapeTypes.isShape3D(result2)) {
2493
+ return errors.err(errors.typeCastError("LOFT_NOT_3D", "Loft did not produce a 3D shape"));
2494
+ }
2495
+ return errors.ok(result2);
2496
+ } catch (_) {
2497
+ var _error = _, _hasError = true;
2498
+ } finally {
2499
+ __callDispose(_stack, _error, _hasError);
2350
2500
  }
2351
- return errors.ok(result2);
2352
2501
  }
2353
2502
  function extrude(face2, height) {
2354
2503
  const f = resolve(face2);
@@ -2718,6 +2867,7 @@ exports.getShapeKind = shapeTypes.getShapeKind;
2718
2867
  exports.isCompound = shapeTypes.isCompound;
2719
2868
  exports.isEdge = shapeTypes.isEdge;
2720
2869
  exports.isFace = shapeTypes.isFace;
2870
+ exports.isLive = shapeTypes.isLive;
2721
2871
  exports.isShape1D = shapeTypes.isShape1D;
2722
2872
  exports.isShape3D = shapeTypes.isShape3D;
2723
2873
  exports.isShell = shapeTypes.isShell;
@@ -2726,6 +2876,8 @@ exports.isVertex = shapeTypes.isVertex;
2726
2876
  exports.isWire = shapeTypes.isWire;
2727
2877
  exports.localGC = shapeTypes.localGC;
2728
2878
  exports.withScope = shapeTypes.withScope;
2879
+ exports.withScopeResult = shapeTypes.withScopeResult;
2880
+ exports.withScopeResultAsync = shapeTypes.withScopeResultAsync;
2729
2881
  exports.DEG2RAD = vecOps.DEG2RAD;
2730
2882
  exports.HASH_CODE_MAX = vecOps.HASH_CODE_MAX;
2731
2883
  exports.RAD2DEG = vecOps.RAD2DEG;
@@ -3054,6 +3206,7 @@ exports.isNumber = isNumber;
3054
3206
  exports.isValid = isValid;
3055
3207
  exports.kernelCall = kernelCall;
3056
3208
  exports.kernelCallRaw = kernelCallRaw;
3209
+ exports.kernelCallScoped = kernelCallScoped;
3057
3210
  exports.line = line;
3058
3211
  exports.loft = loft;
3059
3212
  exports.mesh = mesh;