brepjs 18.123.0 → 18.124.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2d.cjs +6 -6
- package/dist/2d.js +6 -6
- package/dist/{adjacencyFns-YdbeJQOQ.cjs → adjacencyFns-BJ6jcQ-N.cjs} +2 -2
- package/dist/{adjacencyFns-BjQlu_ta.js → adjacencyFns-CnehwLNj.js} +2 -2
- package/dist/{blueprint-D15K1m3D.js → blueprint-BGWbpQ-w.js} +5 -5
- package/dist/{blueprint-DRdJngbT.cjs → blueprint-BSfG0Uik.cjs} +5 -5
- package/dist/{blueprintFns-BYBj5nAC.js → blueprintFns-Bt1hKlL7.js} +2 -2
- package/dist/{blueprintFns-DjhpKV3P.cjs → blueprintFns-C0-nGqlW.cjs} +2 -2
- package/dist/{blueprintSketcher-BrqUJtEJ.js → blueprintSketcher-BTGRoQ_G.js} +9 -5
- package/dist/{blueprintSketcher-BwrJrjxs.cjs → blueprintSketcher-Bd5ZS9p6.cjs} +9 -5
- package/dist/{boolean2D-DzfMpynm.cjs → boolean2D-Cr6oLsbf.cjs} +4 -4
- package/dist/{boolean2D-D68EbJPa.js → boolean2D-zZ9-qR5a.js} +4 -4
- package/dist/brepjs.cjs +27 -27
- package/dist/brepjs.js +27 -27
- package/dist/{cameraFns-BcMH4Nmd.js → cameraFns-CGMawqfi.js} +3 -3
- package/dist/{cameraFns-BoJrdghV.cjs → cameraFns-j2I9G3L_.cjs} +3 -3
- package/dist/core.cjs +2 -2
- package/dist/core.js +2 -2
- package/dist/{cornerFinder-Cbx8rGjg.cjs → cornerFinder-CPwSLgpM.cjs} +1 -1
- package/dist/{cornerFinder-DG-lilYY.js → cornerFinder-CaXBdZz9.js} +1 -1
- package/dist/{curveFns-BuqWKNvF.cjs → curveFns-BBLaLG1U.cjs} +1 -1
- package/dist/{curveFns-o05jCVtr.js → curveFns-BoHbhtqX.js} +1 -1
- package/dist/{drawFns-q-Ooe6d4.js → drawFns-BrRbAeYB.js} +12 -12
- package/dist/{drawFns-BiOerjkt.cjs → drawFns-DOkSdo8E.cjs} +12 -12
- package/dist/{faceFns-Dgiv4Jhb.js → faceFns-Ce7Fq6j5.js} +2 -2
- package/dist/{faceFns-DeTAgvu_.cjs → faceFns-UozswcwP.cjs} +2 -2
- package/dist/{healingFns-BDfz7tDU.js → healingFns-Dn0EFSHm.js} +4 -4
- package/dist/{healingFns-BvB2hVj5.cjs → healingFns-mKogaVOk.cjs} +4 -4
- package/dist/{helpers-DEN_M6k_.js → helpers-CZsK8STz.js} +6 -6
- package/dist/{helpers-B6br6W9E.cjs → helpers-DuTAcGVX.cjs} +6 -6
- package/dist/{importFns--rKvxKFm.js → importFns-CE4byS-8.js} +2 -2
- package/dist/{importFns-3RGNUkR-.cjs → importFns-Ch2YwieP.cjs} +2 -2
- package/dist/io.cjs +2 -2
- package/dist/io.js +2 -2
- package/dist/{loftFns-Cufcyuqt.cjs → loftFns-BYiUcAxk.cjs} +1 -1
- package/dist/{loftFns-BVkAi4-a.js → loftFns-DQVg8qxM.js} +1 -1
- package/dist/{measureFns-DcgzCTfb.js → measureFns-BbLLBg5q.js} +3 -3
- package/dist/{measureFns-CG3O8Mzp.cjs → measureFns-Cao9gY1L.cjs} +3 -3
- package/dist/measurement.cjs +1 -1
- package/dist/measurement.js +1 -1
- package/dist/{meshFns-DhFraVIQ.js → meshFns-B6NveFwc.js} +3 -3
- package/dist/{meshFns-BLqWnKyU.cjs → meshFns-CnYIUU9b.cjs} +3 -3
- package/dist/operations.cjs +2 -2
- package/dist/operations.js +2 -2
- package/dist/{originTrackingFns-4c8Sw44l.js → originTrackingFns-DXcggmgf.js} +2 -2
- package/dist/{originTrackingFns-7tC4igk0.cjs → originTrackingFns-uz38yuMp.cjs} +2 -2
- package/dist/{primitiveFns-D695dXsj.js → primitiveFns-CmmTWOkO.js} +4 -4
- package/dist/{primitiveFns-CFibG_KT.cjs → primitiveFns-DmEPf6av.cjs} +4 -4
- package/dist/projection.cjs +1 -1
- package/dist/projection.js +1 -1
- package/dist/query.cjs +2 -2
- package/dist/query.js +2 -2
- package/dist/{refResolveFns-u-3Okd3D.cjs → refResolveFns-CnPEaqHw.cjs} +6 -6
- package/dist/{refResolveFns-BwEBGVGr.js → refResolveFns-DqY7Cd00.js} +6 -6
- package/dist/{shapeFns-BqmsBoBy.cjs → shapeFns-BLZ1dDSz.cjs} +2 -2
- package/dist/{shapeFns-BvPYFFCd.js → shapeFns-mYczuWOy.js} +2 -2
- package/dist/shapeRef.cjs +1 -1
- package/dist/shapeRef.js +1 -1
- package/dist/{shapeTypes-D9TjxkdO.cjs → shapeTypes-DZKuRt24.cjs} +384 -13
- package/dist/{shapeTypes-u60nsijI.js → shapeTypes-bHlssytH.js} +384 -13
- package/dist/sketching.cjs +3 -3
- package/dist/sketching.js +3 -3
- package/dist/{solidBuilders-BRrbDIpu.cjs → solidBuilders-5tA9O1SM.cjs} +5 -5
- package/dist/{solidBuilders-DOafY0bO.js → solidBuilders-9s-j-ZiW.js} +5 -5
- package/dist/{surfaceBuilders-B4Yn-xOW.cjs → surfaceBuilders-0x7j0ibk.cjs} +3 -3
- package/dist/{surfaceBuilders-BnkTJeD4.js → surfaceBuilders-B7UnwkQz.js} +3 -3
- package/dist/text.cjs +2 -2
- package/dist/text.js +2 -2
- package/dist/{textBlueprints-DPldA7fV.cjs → textBlueprints-BPbIpA4-.cjs} +7 -7
- package/dist/{textBlueprints-B1JdMBb0.js → textBlueprints-DE3M-E9o.js} +7 -7
- package/dist/{textMetrics-YfWZZTIk.js → textMetrics-D3Bly1w4.js} +1 -1
- package/dist/{textMetrics-19pWWvqT.cjs → textMetrics-rRuWxQG_.cjs} +1 -1
- package/dist/{threadFns-B2YuXmV6.js → threadFns-BAjFNk2_.js} +7 -7
- package/dist/{threadFns-BDMSW3Od.cjs → threadFns-BMT6ziG_.cjs} +7 -7
- package/dist/topology.cjs +9 -9
- package/dist/topology.js +9 -9
- package/dist/{topologyQueryFns-DiuoNPqI.js → topologyQueryFns-DVhWxBwT.js} +1 -1
- package/dist/{topologyQueryFns-CUbx6oRW.cjs → topologyQueryFns-DZUpJz2p.cjs} +1 -1
- package/dist/{validityTypes-phPr-BRp.js → validityTypes-19mfqWVv.js} +1 -1
- package/dist/{validityTypes-DuiGeQhe.cjs → validityTypes-CCnRq3A9.cjs} +1 -1
- package/package.json +1 -1
|
@@ -11762,7 +11762,7 @@ function meshVertices(shape) {
|
|
|
11762
11762
|
function spinePath(spine, segments) {
|
|
11763
11763
|
const shape = asShape$1(spine);
|
|
11764
11764
|
const params = shape.node?.params;
|
|
11765
|
-
const recorded = params?.["path"] ?? params?.["points"];
|
|
11765
|
+
const recorded = params?.["path"] ?? params?.["points"] ?? params?.["ring"];
|
|
11766
11766
|
if (recorded && recorded.length >= 2) return recorded.map((p) => [
|
|
11767
11767
|
p[0],
|
|
11768
11768
|
p[1],
|
|
@@ -12109,12 +12109,21 @@ function makeSweepOps(module) {
|
|
|
12109
12109
|
}),
|
|
12110
12110
|
...sweepFamilyEntries(module),
|
|
12111
12111
|
draftPrism: (shape, face, _baseFace, height, angleDeg, fuse) => draftPrismOp(module, shape, face, height, angleDeg, fuse),
|
|
12112
|
-
buildExtrusionLaw: (profile, length, endFactor) =>
|
|
12113
|
-
|
|
12114
|
-
|
|
12115
|
-
|
|
12116
|
-
|
|
12117
|
-
|
|
12112
|
+
buildExtrusionLaw: (profile, length, endFactor) => {
|
|
12113
|
+
const law = {
|
|
12114
|
+
type: "extrusionLaw",
|
|
12115
|
+
profile,
|
|
12116
|
+
length,
|
|
12117
|
+
endFactor,
|
|
12118
|
+
Trim: (first, last, _tol) => ({
|
|
12119
|
+
...law,
|
|
12120
|
+
trimFirst: first,
|
|
12121
|
+
trimLast: last
|
|
12122
|
+
}),
|
|
12123
|
+
delete: () => {}
|
|
12124
|
+
};
|
|
12125
|
+
return law;
|
|
12126
|
+
},
|
|
12118
12127
|
loftBatch: () => notImplemented("loftBatch"),
|
|
12119
12128
|
extrudeBatch: (entries) => entries.map((e) => extrudeOp(module, e.face, e.direction, e.length))
|
|
12120
12129
|
};
|
|
@@ -14590,6 +14599,320 @@ function makeRepairOps(_module) {
|
|
|
14590
14599
|
//#endregion
|
|
14591
14600
|
//#region src/kernel/manifold/kernel2dNative.ts
|
|
14592
14601
|
var CHORD_TOL = .004;
|
|
14602
|
+
/**
|
|
14603
|
+
* Closest parameter on a native curve to (x, y), in that curve's own
|
|
14604
|
+
* parametrization: signed distance for a line, angle for a conic, [0,1] for a
|
|
14605
|
+
* bezier. Exact where the geometry allows it, and a bounded golden-section
|
|
14606
|
+
* search where it does not (general ellipse, bezier) — both of which are
|
|
14607
|
+
* unimodal in distance over a single arc, so the search cannot land on a
|
|
14608
|
+
* spurious local minimum.
|
|
14609
|
+
*/
|
|
14610
|
+
function closestParamOn(c, x, y) {
|
|
14611
|
+
if (c.k === "line") {
|
|
14612
|
+
const dx = c.p2[0] - c.p1[0];
|
|
14613
|
+
const dy = c.p2[1] - c.p1[1];
|
|
14614
|
+
const len = Math.hypot(dx, dy);
|
|
14615
|
+
if (len === 0) return 0;
|
|
14616
|
+
const t = ((x - c.p1[0]) * dx + (y - c.p1[1]) * dy) / len;
|
|
14617
|
+
return Math.min(Math.max(t, 0), len);
|
|
14618
|
+
}
|
|
14619
|
+
if (c.k === "conic") {
|
|
14620
|
+
const ru = Math.hypot(c.u[0], c.u[1]);
|
|
14621
|
+
const rv = Math.hypot(c.v[0], c.v[1]);
|
|
14622
|
+
if (Math.abs(ru - rv) < 1e-12 && Math.abs(c.u[0] * c.v[0] + c.u[1] * c.v[1]) < 1e-12) {
|
|
14623
|
+
const px = x - c.c[0];
|
|
14624
|
+
const py = y - c.c[1];
|
|
14625
|
+
return clampToArc(Math.atan2((px * c.v[0] + py * c.v[1]) / (rv * rv || 1), (px * c.u[0] + py * c.u[1]) / (ru * ru || 1)), c.a0, c.a1);
|
|
14626
|
+
}
|
|
14627
|
+
return bracketedMin(c.a0, c.a1, (t) => distSqAt(c, t, x, y), stepsFor(c, CHORD_TOL));
|
|
14628
|
+
}
|
|
14629
|
+
return bracketedMin(0, 1, (t) => distSqAt(c, t, x, y), stepsFor(c, CHORD_TOL));
|
|
14630
|
+
}
|
|
14631
|
+
/**
|
|
14632
|
+
* Global minimum of f over [lo, hi].
|
|
14633
|
+
*
|
|
14634
|
+
* Distance to an eccentric ellipse or a cubic-or-higher bezier is NOT unimodal
|
|
14635
|
+
* — a point inside a flat ellipse has one minimum per end, and a self-nearing
|
|
14636
|
+
* bezier can have several. So scan coarsely for the best sample, then refine
|
|
14637
|
+
* only inside the bracket around it, which is unimodal by construction.
|
|
14638
|
+
*/
|
|
14639
|
+
function bracketedMin(lo, hi, f, steps) {
|
|
14640
|
+
const N = Math.max(8, steps);
|
|
14641
|
+
let bestI = 0;
|
|
14642
|
+
let best = Infinity;
|
|
14643
|
+
for (let i = 0; i <= N; i++) {
|
|
14644
|
+
const v = f(lo + (hi - lo) * i / N);
|
|
14645
|
+
if (v < best) {
|
|
14646
|
+
best = v;
|
|
14647
|
+
bestI = i;
|
|
14648
|
+
}
|
|
14649
|
+
}
|
|
14650
|
+
return goldenMin(lo + (hi - lo) * Math.max(0, bestI - 1) / N, lo + (hi - lo) * Math.min(N, bestI + 1) / N, f);
|
|
14651
|
+
}
|
|
14652
|
+
/** Wrap an angle into [a0, a1] where possible, else clamp to the nearer end. */
|
|
14653
|
+
function clampToArc(a, a0, a1) {
|
|
14654
|
+
if (a1 - a0 >= 2 * Math.PI - 1e-12) return a;
|
|
14655
|
+
let t = a;
|
|
14656
|
+
while (t < a0) t += 2 * Math.PI;
|
|
14657
|
+
while (t > a0 + 2 * Math.PI) t -= 2 * Math.PI;
|
|
14658
|
+
if (t <= a1) return t;
|
|
14659
|
+
return t - a1 < a0 + 2 * Math.PI - t ? a1 : a0;
|
|
14660
|
+
}
|
|
14661
|
+
function distSqAt(c, t, x, y) {
|
|
14662
|
+
const p = nativeAt(c, t);
|
|
14663
|
+
const dx = p[0] - x;
|
|
14664
|
+
const dy = p[1] - y;
|
|
14665
|
+
return dx * dx + dy * dy;
|
|
14666
|
+
}
|
|
14667
|
+
function nativeAt(c, t) {
|
|
14668
|
+
if (c.k === "line") {
|
|
14669
|
+
const dx = c.p2[0] - c.p1[0];
|
|
14670
|
+
const dy = c.p2[1] - c.p1[1];
|
|
14671
|
+
const len = Math.hypot(dx, dy) || 1;
|
|
14672
|
+
return [c.p1[0] + dx * t / len, c.p1[1] + dy * t / len];
|
|
14673
|
+
}
|
|
14674
|
+
if (c.k === "bezier") return bezierAt(c.pts, t);
|
|
14675
|
+
return [c.c[0] + c.u[0] * Math.cos(t) + c.v[0] * Math.sin(t), c.c[1] + c.u[1] * Math.cos(t) + c.v[1] * Math.sin(t)];
|
|
14676
|
+
}
|
|
14677
|
+
/** Golden-section minimum of a unimodal f over [lo, hi]. */
|
|
14678
|
+
function goldenMin(lo, hi, f) {
|
|
14679
|
+
const phi = (Math.sqrt(5) - 1) / 2;
|
|
14680
|
+
let a = lo;
|
|
14681
|
+
let b = hi;
|
|
14682
|
+
let c1 = b - phi * (b - a);
|
|
14683
|
+
let d1 = a + phi * (b - a);
|
|
14684
|
+
for (let i = 0; i < 80 && b - a > 1e-12; i++) if (f(c1) < f(d1)) {
|
|
14685
|
+
b = d1;
|
|
14686
|
+
d1 = c1;
|
|
14687
|
+
c1 = b - phi * (b - a);
|
|
14688
|
+
} else {
|
|
14689
|
+
a = c1;
|
|
14690
|
+
c1 = d1;
|
|
14691
|
+
d1 = a + phi * (b - a);
|
|
14692
|
+
}
|
|
14693
|
+
return (a + b) / 2;
|
|
14694
|
+
}
|
|
14695
|
+
/**
|
|
14696
|
+
* Curve-curve intersection over the shim's own polyline discretization.
|
|
14697
|
+
*
|
|
14698
|
+
* Manifold has no exact curve algebra, so candidate crossings come from
|
|
14699
|
+
* segment pairs and are then refined by alternating projection: each point is
|
|
14700
|
+
* projected onto the other curve until it stops moving. That converges to a
|
|
14701
|
+
* genuine crossing when the segments really cross, and to the closest approach
|
|
14702
|
+
* when they only nearly touch — which the tolerance check then rejects.
|
|
14703
|
+
*/
|
|
14704
|
+
function intersectNative(a, b, tol) {
|
|
14705
|
+
const pa = sample(a);
|
|
14706
|
+
const pb = sample(b);
|
|
14707
|
+
const points = [];
|
|
14708
|
+
const params = [];
|
|
14709
|
+
for (let i = 0; i + 1 < pa.length; i++) for (let j = 0; j + 1 < pb.length; j++) {
|
|
14710
|
+
const hit = segSeg(pa[i], pa[i + 1], pb[j], pb[j + 1]);
|
|
14711
|
+
if (!hit) continue;
|
|
14712
|
+
let p = hit;
|
|
14713
|
+
for (let k = 0; k < 24; k++) {
|
|
14714
|
+
const qa = nativeAt(a, closestParamOn(a, p[0], p[1]));
|
|
14715
|
+
const qb = nativeAt(b, closestParamOn(b, qa[0], qa[1]));
|
|
14716
|
+
const moved = Math.hypot(qb[0] - p[0], qb[1] - p[1]);
|
|
14717
|
+
p = [(qa[0] + qb[0]) / 2, (qa[1] + qb[1]) / 2];
|
|
14718
|
+
if (moved < 1e-12) break;
|
|
14719
|
+
}
|
|
14720
|
+
const ta = closestParamOn(a, p[0], p[1]);
|
|
14721
|
+
const tb = closestParamOn(b, p[0], p[1]);
|
|
14722
|
+
const d = sub2(nativeAt(a, ta), nativeAt(b, tb));
|
|
14723
|
+
if (Math.hypot(d[0], d[1]) > Math.max(tol, 1e-7)) continue;
|
|
14724
|
+
if (points.some((q) => Math.hypot(q[0] - p[0], q[1] - p[1]) <= Math.max(tol, 1e-9))) continue;
|
|
14725
|
+
points.push(p);
|
|
14726
|
+
params.push(ta);
|
|
14727
|
+
}
|
|
14728
|
+
return dropOverlapPoints(points, params, contactRuns(a, b, tol, points, params), tol);
|
|
14729
|
+
}
|
|
14730
|
+
/**
|
|
14731
|
+
* Spans of `a` that lie on `b` within tolerance.
|
|
14732
|
+
*
|
|
14733
|
+
* Coincident spans and tangential touches never register as segment crossings —
|
|
14734
|
+
* collinear chords are parallel, and a tangency grazes without passing through.
|
|
14735
|
+
* Walking a's parameter range finds both: a run with length is a common
|
|
14736
|
+
* segment, an isolated dip is a tangential point (appended to `points`).
|
|
14737
|
+
*/
|
|
14738
|
+
function contactRuns(a, b, tol, points, params) {
|
|
14739
|
+
const { first, last } = nativeBounds(a);
|
|
14740
|
+
const M = 192;
|
|
14741
|
+
const on = [];
|
|
14742
|
+
for (let i = 0; i <= M; i++) {
|
|
14743
|
+
const p = nativeAt(a, first + (last - first) * i / M);
|
|
14744
|
+
const tb = closestParamOn(b, p[0], p[1]);
|
|
14745
|
+
on.push(Math.sqrt(distSqAt(b, tb, p[0], p[1])) <= Math.max(tol, 1e-9));
|
|
14746
|
+
}
|
|
14747
|
+
const segments = [];
|
|
14748
|
+
let runStart = -1;
|
|
14749
|
+
for (let i = 0; i <= 193; i++) {
|
|
14750
|
+
const inside = i <= M && on[i] === true;
|
|
14751
|
+
if (inside && runStart < 0) runStart = i;
|
|
14752
|
+
if (inside || runStart < 0) continue;
|
|
14753
|
+
const t0 = first + (last - first) * runStart / M;
|
|
14754
|
+
const t1 = first + (last - first) * (i - 1) / M;
|
|
14755
|
+
let physical = 0;
|
|
14756
|
+
for (let k = runStart; k < i - 1; k++) {
|
|
14757
|
+
const q0 = nativeAt(a, first + (last - first) * k / M);
|
|
14758
|
+
const q1 = nativeAt(a, first + (last - first) * (k + 1) / M);
|
|
14759
|
+
physical += Math.hypot(q1[0] - q0[0], q1[1] - q0[1]);
|
|
14760
|
+
}
|
|
14761
|
+
if (physical > Math.max(tol, CHORD_TOL)) segments.push(trimNative(a, t0, t1));
|
|
14762
|
+
else {
|
|
14763
|
+
const p = nativeAt(a, t0);
|
|
14764
|
+
if (!points.some((q) => Math.hypot(q[0] - p[0], q[1] - p[1]) <= Math.max(tol, 1e-9))) {
|
|
14765
|
+
points.push(p);
|
|
14766
|
+
params.push(t0);
|
|
14767
|
+
}
|
|
14768
|
+
}
|
|
14769
|
+
runStart = -1;
|
|
14770
|
+
}
|
|
14771
|
+
return segments;
|
|
14772
|
+
}
|
|
14773
|
+
/**
|
|
14774
|
+
* A coincident span makes the crossing search fire at every sampled chord pair
|
|
14775
|
+
* along it — 79 "intersections" for two identical circles. Those points are the
|
|
14776
|
+
* overlap, not isolated crossings, so drop any that land on a reported segment.
|
|
14777
|
+
*/
|
|
14778
|
+
function dropOverlapPoints(points, params, segments, tol) {
|
|
14779
|
+
if (segments.length === 0) return {
|
|
14780
|
+
points,
|
|
14781
|
+
params,
|
|
14782
|
+
segments
|
|
14783
|
+
};
|
|
14784
|
+
const keep = [];
|
|
14785
|
+
for (let i = 0; i < points.length; i++) {
|
|
14786
|
+
const p = points[i];
|
|
14787
|
+
if (!segments.some((seg) => {
|
|
14788
|
+
const t = closestParamOn(seg, p[0], p[1]);
|
|
14789
|
+
return Math.sqrt(distSqAt(seg, t, p[0], p[1])) <= Math.max(tol, CHORD_TOL);
|
|
14790
|
+
})) keep.push(i);
|
|
14791
|
+
}
|
|
14792
|
+
return {
|
|
14793
|
+
points: keep.map((i) => points[i]),
|
|
14794
|
+
params: keep.map((i) => params[i]),
|
|
14795
|
+
segments
|
|
14796
|
+
};
|
|
14797
|
+
}
|
|
14798
|
+
function sub2(a, b) {
|
|
14799
|
+
return [a[0] - b[0], a[1] - b[1]];
|
|
14800
|
+
}
|
|
14801
|
+
/** Intersection point of two segments, or null when they do not cross. */
|
|
14802
|
+
function segSeg(p1, p2, p3, p4) {
|
|
14803
|
+
const d1x = p2[0] - p1[0];
|
|
14804
|
+
const d1y = p2[1] - p1[1];
|
|
14805
|
+
const d2x = p4[0] - p3[0];
|
|
14806
|
+
const d2y = p4[1] - p3[1];
|
|
14807
|
+
const den = d1x * d2y - d1y * d2x;
|
|
14808
|
+
if (Math.abs(den) < 1e-15) return null;
|
|
14809
|
+
const t = ((p3[0] - p1[0]) * d2y - (p3[1] - p1[1]) * d2x) / den;
|
|
14810
|
+
const u = ((p3[0] - p1[0]) * d1y - (p3[1] - p1[1]) * d1x) / den;
|
|
14811
|
+
if (t < -1e-9 || t > 1.000000001 || u < -1e-9 || u > 1.000000001) return null;
|
|
14812
|
+
return [p1[0] + d1x * t, p1[1] + d1y * t];
|
|
14813
|
+
}
|
|
14814
|
+
/**
|
|
14815
|
+
* How many parameter steps resolve `c` to within `tol`.
|
|
14816
|
+
*
|
|
14817
|
+
* A fixed step count is wrong at both ends: wasteful on a short line and blind
|
|
14818
|
+
* to a feature narrower than one interval on a long or wiggly curve. Deriving
|
|
14819
|
+
* it from the curve's own extent — control-polygon length for a bezier, arc
|
|
14820
|
+
* length for a conic — ties the resolution to the geometry and the caller's
|
|
14821
|
+
* tolerance, the same way conicSegments already does for discretization.
|
|
14822
|
+
*
|
|
14823
|
+
* This bounds the miss, it does not remove it: any sampling scheme can still
|
|
14824
|
+
* step over a feature narrower than its own interval. Exactly resolving that
|
|
14825
|
+
* needs polynomial root-finding on the distance function, which is a different
|
|
14826
|
+
* and much larger piece of machinery than this shim carries.
|
|
14827
|
+
*/
|
|
14828
|
+
function stepsFor(c, tol) {
|
|
14829
|
+
const t = Math.max(tol, 1e-9);
|
|
14830
|
+
if (c.k === "line") return 2;
|
|
14831
|
+
let extent;
|
|
14832
|
+
if (c.k === "conic") {
|
|
14833
|
+
const r = Math.max(Math.hypot(c.u[0], c.u[1]), Math.hypot(c.v[0], c.v[1]));
|
|
14834
|
+
extent = Math.abs(c.a1 - c.a0) * r;
|
|
14835
|
+
} else {
|
|
14836
|
+
extent = 0;
|
|
14837
|
+
for (let i = 0; i + 1 < c.pts.length; i++) {
|
|
14838
|
+
const a = c.pts[i];
|
|
14839
|
+
const b = c.pts[i + 1];
|
|
14840
|
+
extent += Math.hypot(b[0] - a[0], b[1] - a[1]);
|
|
14841
|
+
}
|
|
14842
|
+
}
|
|
14843
|
+
return Math.min(2e4, Math.max(64, Math.ceil(2 * extent / t)));
|
|
14844
|
+
}
|
|
14845
|
+
/** Parameter range of a native curve, matching getCurve2dBounds. */
|
|
14846
|
+
function nativeBounds(c) {
|
|
14847
|
+
if (c.k === "conic") return {
|
|
14848
|
+
first: c.a0,
|
|
14849
|
+
last: c.a1
|
|
14850
|
+
};
|
|
14851
|
+
if (c.k === "line") return {
|
|
14852
|
+
first: 0,
|
|
14853
|
+
last: Math.hypot(c.p2[0] - c.p1[0], c.p2[1] - c.p1[1])
|
|
14854
|
+
};
|
|
14855
|
+
return {
|
|
14856
|
+
first: 0,
|
|
14857
|
+
last: 1
|
|
14858
|
+
};
|
|
14859
|
+
}
|
|
14860
|
+
/** Restrict a native curve to [from, to] in its own parametrization. */
|
|
14861
|
+
function trimNative(c, from, to) {
|
|
14862
|
+
if (c.k === "conic") return {
|
|
14863
|
+
...c,
|
|
14864
|
+
a0: from,
|
|
14865
|
+
a1: to
|
|
14866
|
+
};
|
|
14867
|
+
if (c.k === "line") {
|
|
14868
|
+
const p1 = nativeAt(c, from);
|
|
14869
|
+
const p2 = nativeAt(c, to);
|
|
14870
|
+
return {
|
|
14871
|
+
...c,
|
|
14872
|
+
p1,
|
|
14873
|
+
p2
|
|
14874
|
+
};
|
|
14875
|
+
}
|
|
14876
|
+
const right = deCasteljauRight(c.pts, from);
|
|
14877
|
+
const span = 1 - from;
|
|
14878
|
+
const t2 = span <= 1e-15 ? 1 : (to - from) / span;
|
|
14879
|
+
return {
|
|
14880
|
+
...c,
|
|
14881
|
+
pts: deCasteljauLeft(right, t2)
|
|
14882
|
+
};
|
|
14883
|
+
}
|
|
14884
|
+
function deCasteljauLeft(pts, t) {
|
|
14885
|
+
const out = [];
|
|
14886
|
+
let cur = pts.map((p) => [p[0], p[1]]);
|
|
14887
|
+
out.push(cur[0]);
|
|
14888
|
+
while (cur.length > 1) {
|
|
14889
|
+
const next = [];
|
|
14890
|
+
for (let i = 0; i + 1 < cur.length; i++) {
|
|
14891
|
+
const a = cur[i];
|
|
14892
|
+
const b = cur[i + 1];
|
|
14893
|
+
next.push([a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]);
|
|
14894
|
+
}
|
|
14895
|
+
cur = next;
|
|
14896
|
+
out.push(cur[0]);
|
|
14897
|
+
}
|
|
14898
|
+
return out;
|
|
14899
|
+
}
|
|
14900
|
+
function deCasteljauRight(pts, t) {
|
|
14901
|
+
const out = [];
|
|
14902
|
+
let cur = pts.map((p) => [p[0], p[1]]);
|
|
14903
|
+
out.push(cur[cur.length - 1]);
|
|
14904
|
+
while (cur.length > 1) {
|
|
14905
|
+
const next = [];
|
|
14906
|
+
for (let i = 0; i + 1 < cur.length; i++) {
|
|
14907
|
+
const a = cur[i];
|
|
14908
|
+
const b = cur[i + 1];
|
|
14909
|
+
next.push([a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]);
|
|
14910
|
+
}
|
|
14911
|
+
cur = next;
|
|
14912
|
+
out.push(cur[cur.length - 1]);
|
|
14913
|
+
}
|
|
14914
|
+
return out.reverse();
|
|
14915
|
+
}
|
|
14593
14916
|
function isNative(x) {
|
|
14594
14917
|
return !!x && typeof x === "object" && x.__nativeC2d === true;
|
|
14595
14918
|
}
|
|
@@ -15151,14 +15474,62 @@ function makeNativeKernel2DOps(module, occt) {
|
|
|
15151
15474
|
},
|
|
15152
15475
|
makeBSpline2d: (points, options) => occtOr("makeBSpline2d").makeBSpline2d(points, options),
|
|
15153
15476
|
offsetCurve2d: (c, offset) => occtOr("offsetCurve2d").offsetCurve2d(toOcct(c), offset),
|
|
15154
|
-
intersectCurves2d: (c1, c2, tol) =>
|
|
15155
|
-
|
|
15156
|
-
|
|
15477
|
+
intersectCurves2d: (c1, c2, tol) => {
|
|
15478
|
+
if (!isNative(c1) || !isNative(c2)) return occtOr("intersectCurves2d").intersectCurves2d(toOcct(c1), toOcct(c2), tol);
|
|
15479
|
+
const { points, segments } = intersectNative(asC(c1), asC(c2), tol);
|
|
15480
|
+
return {
|
|
15481
|
+
points: points.map((p) => [p[0], p[1]]),
|
|
15482
|
+
segments
|
|
15483
|
+
};
|
|
15484
|
+
},
|
|
15485
|
+
projectPointOnCurve2d: (c, x, y) => {
|
|
15486
|
+
if (!isNative(c)) return occtOr("projectPointOnCurve2d").projectPointOnCurve2d(toOcct(c), x, y);
|
|
15487
|
+
const n = asC(c);
|
|
15488
|
+
const param = closestParamOn(n, x, y);
|
|
15489
|
+
return {
|
|
15490
|
+
param,
|
|
15491
|
+
distance: Math.sqrt(distSqAt(n, param, x, y))
|
|
15492
|
+
};
|
|
15493
|
+
},
|
|
15494
|
+
distanceBetweenCurves2d: (c1, c2, s1, e1, s2, e2) => {
|
|
15495
|
+
if (!isNative(c1) || !isNative(c2)) return occtOr("distanceBetweenCurves2d").distanceBetweenCurves2d(toOcct(c1), toOcct(c2), s1, e1, s2, e2);
|
|
15496
|
+
const a = asC(c1);
|
|
15497
|
+
const b = asC(c2);
|
|
15498
|
+
const N = 256;
|
|
15499
|
+
let best = Infinity;
|
|
15500
|
+
for (let i = 0; i <= N; i++) {
|
|
15501
|
+
const p = nativeAt(a, s1 + (e1 - s1) * i / N);
|
|
15502
|
+
const q = closestParamOn(b, p[0], p[1]);
|
|
15503
|
+
best = Math.min(best, Math.sqrt(distSqAt(b, Math.min(Math.max(q, Math.min(s2, e2)), Math.max(s2, e2)), p[0], p[1])));
|
|
15504
|
+
}
|
|
15505
|
+
return best;
|
|
15506
|
+
},
|
|
15157
15507
|
approximateCurve2dAsBSpline: (c, tol, cont, maxSeg) => occtOr("approximateCurve2dAsBSpline").approximateCurve2dAsBSpline(toOcct(c), tol, cont, maxSeg),
|
|
15158
15508
|
decomposeBSpline2dToBeziers: (c) => occtOr("decomposeBSpline2dToBeziers").decomposeBSpline2dToBeziers(toOcct(c)),
|
|
15159
|
-
serializeCurve2d: (c) =>
|
|
15160
|
-
|
|
15161
|
-
|
|
15509
|
+
serializeCurve2d: (c) => isNative(c) ? JSON.stringify({
|
|
15510
|
+
__nativeC2d: 1,
|
|
15511
|
+
c: asC(c)
|
|
15512
|
+
}) : occtOr("serializeCurve2d").serializeCurve2d(toOcct(c)),
|
|
15513
|
+
deserializeCurve2d: (data) => {
|
|
15514
|
+
if (data.startsWith("{\"__nativeC2d\"")) return {
|
|
15515
|
+
__nativeC2d: true,
|
|
15516
|
+
...JSON.parse(data).c
|
|
15517
|
+
};
|
|
15518
|
+
return occtOr("deserializeCurve2d").deserializeCurve2d(data);
|
|
15519
|
+
},
|
|
15520
|
+
splitCurve2d: (c, params) => {
|
|
15521
|
+
if (!isNative(c)) return occtOr("splitCurve2d").splitCurve2d(toOcct(c), params);
|
|
15522
|
+
const n = asC(c);
|
|
15523
|
+
const { first, last } = nativeBounds(n);
|
|
15524
|
+
const cuts = [
|
|
15525
|
+
first,
|
|
15526
|
+
...params.filter((t) => t > first && t < last).sort((a, b) => a - b),
|
|
15527
|
+
last
|
|
15528
|
+
];
|
|
15529
|
+
const out = [];
|
|
15530
|
+
for (let i = 0; i + 1 < cuts.length; i++) out.push(trimNative(n, cuts[i] ?? 0, cuts[i + 1] ?? 0));
|
|
15531
|
+
return out;
|
|
15532
|
+
},
|
|
15162
15533
|
getCurve2dEllipseData: (c) => occtOr("getCurve2dEllipseData").getCurve2dEllipseData(toOcct(c)),
|
|
15163
15534
|
getCurve2dBezierPoles: (c) => occtOr("getCurve2dBezierPoles").getCurve2dBezierPoles(toOcct(c)),
|
|
15164
15535
|
getCurve2dBezierDegree: (c) => occtOr("getCurve2dBezierDegree").getCurve2dBezierDegree(toOcct(c)),
|
package/dist/sketching.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_blueprintSketcher = require("./blueprintSketcher-
|
|
3
|
-
const require_drawFns = require("./drawFns-
|
|
4
|
-
const require_textBlueprints = require("./textBlueprints-
|
|
2
|
+
const require_blueprintSketcher = require("./blueprintSketcher-Bd5ZS9p6.cjs");
|
|
3
|
+
const require_drawFns = require("./drawFns-DOkSdo8E.cjs");
|
|
4
|
+
const require_textBlueprints = require("./textBlueprints-BPbIpA4-.cjs");
|
|
5
5
|
//#region src/sketching.ts
|
|
6
6
|
/**
|
|
7
7
|
* brepjs/sketching — Sketcher, Drawing, and sketch-to-shape operations.
|
package/dist/sketching.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as BaseSketcher2d, t as BlueprintSketcher } from "./blueprintSketcher-
|
|
2
|
-
import { A as sketchEllipse, C as DrawingPen, D as makeBaseBox, E as deserializeDrawing, F as sketchRectangle, I as sketchRoundedRectangle, L as FaceSketcher, M as sketchHelix, N as sketchParametricFunction, O as polysideInnerRadius, P as sketchPolysides, R as Sketcher, S as drawText, T as Drawing, _ as drawPolysides, a as drawingIntersect, b as drawSingleCircle, c as rotateDrawing, d as drawFaceOutline, f as drawProjection, g as drawPointsInterpolation, h as drawParametricFunction, i as drawingFuse, j as sketchFaceOffset, k as sketchCircle, l as scaleDrawing, m as drawEllipse, n as drawingCut, o as drawingToSketchOnPlane, p as drawCircle, r as drawingFillet, s as mirrorDrawing, t as drawingChamfer, u as translateDrawing, v as drawRectangle, w as draw, x as drawSingleEllipse, y as drawRoundedRectangle } from "./drawFns-
|
|
3
|
-
import { a as Sketch, c as compoundSketchLoft, d as sketchFace, f as sketchLoft, h as sketchWires, i as Sketches, l as compoundSketchRevolve, m as sketchSweep, o as compoundSketchExtrude, p as sketchRevolve, s as compoundSketchFace, u as sketchExtrude, v as CompoundSketch } from "./textBlueprints-
|
|
1
|
+
import { n as BaseSketcher2d, t as BlueprintSketcher } from "./blueprintSketcher-BTGRoQ_G.js";
|
|
2
|
+
import { A as sketchEllipse, C as DrawingPen, D as makeBaseBox, E as deserializeDrawing, F as sketchRectangle, I as sketchRoundedRectangle, L as FaceSketcher, M as sketchHelix, N as sketchParametricFunction, O as polysideInnerRadius, P as sketchPolysides, R as Sketcher, S as drawText, T as Drawing, _ as drawPolysides, a as drawingIntersect, b as drawSingleCircle, c as rotateDrawing, d as drawFaceOutline, f as drawProjection, g as drawPointsInterpolation, h as drawParametricFunction, i as drawingFuse, j as sketchFaceOffset, k as sketchCircle, l as scaleDrawing, m as drawEllipse, n as drawingCut, o as drawingToSketchOnPlane, p as drawCircle, r as drawingFillet, s as mirrorDrawing, t as drawingChamfer, u as translateDrawing, v as drawRectangle, w as draw, x as drawSingleEllipse, y as drawRoundedRectangle } from "./drawFns-BrRbAeYB.js";
|
|
3
|
+
import { a as Sketch, c as compoundSketchLoft, d as sketchFace, f as sketchLoft, h as sketchWires, i as Sketches, l as compoundSketchRevolve, m as sketchSweep, o as compoundSketchExtrude, p as sketchRevolve, s as compoundSketchFace, u as sketchExtrude, v as CompoundSketch } from "./textBlueprints-DE3M-E9o.js";
|
|
4
4
|
//#region src/sketching.ts
|
|
5
5
|
/**
|
|
6
6
|
* brepjs/sketching — Sketcher, Drawing, and sketch-to-shape operations.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-DZKuRt24.cjs");
|
|
2
2
|
const require_errors = require("./errors-RHkKO5bZ.cjs");
|
|
3
|
-
const require_topologyQueryFns = require("./topologyQueryFns-
|
|
3
|
+
const require_topologyQueryFns = require("./topologyQueryFns-DZUpJz2p.cjs");
|
|
4
4
|
const require_constants = require("./constants-BOVyEYGH.cjs");
|
|
5
5
|
const require_vecOps = require("./vecOps-CCnJt-yH.cjs");
|
|
6
6
|
const require_planeOps = require("./planeOps-VlFxtvzY.cjs");
|
|
7
|
-
const require_faceFns = require("./faceFns-
|
|
8
|
-
const require_originTrackingFns = require("./originTrackingFns-
|
|
7
|
+
const require_faceFns = require("./faceFns-UozswcwP.cjs");
|
|
8
|
+
const require_originTrackingFns = require("./originTrackingFns-uz38yuMp.cjs");
|
|
9
9
|
const require_arrayAccess = require("./arrayAccess-e4H9cBfh.cjs");
|
|
10
|
-
const require_surfaceBuilders = require("./surfaceBuilders-
|
|
10
|
+
const require_surfaceBuilders = require("./surfaceBuilders-0x7j0ibk.cjs");
|
|
11
11
|
//#region src/topology/metadata/faceTagFns.ts
|
|
12
12
|
var shapeTagStore = /* @__PURE__ */ new WeakMap();
|
|
13
13
|
var tagMetadataStore = /* @__PURE__ */ new WeakMap();
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { C as isSolid, E as getShapeKind, K as getKernel, S as isShell, W as _usingCtx, d as createSolid, f as createVertex, h as disposeResultShape, i as castShape, m as disposeDowncastSource, n as castResultShape, s as createCompound, x as isShape3D } from "./shapeTypes-
|
|
1
|
+
import { C as isSolid, E as getShapeKind, K as getKernel, S as isShell, W as _usingCtx, d as createSolid, f as createVertex, h as disposeResultShape, i as castShape, m as disposeDowncastSource, n as castResultShape, s as createCompound, x as isShape3D } from "./shapeTypes-bHlssytH.js";
|
|
2
2
|
import { E as ok, P as unwrap, b as isErr, d as validationError, g as err, i as kernelError, l as typeCastError, m as andThen, t as BrepErrorCode } from "./errors-MHLiNE-C.js";
|
|
3
|
-
import { S as subShapeHashes, c as getFaces, f as getVertices, p as getWires, s as getEdges } from "./topologyQueryFns-
|
|
3
|
+
import { S as subShapeHashes, c as getFaces, f as getVertices, p as getWires, s as getEdges } from "./topologyQueryFns-DVhWxBwT.js";
|
|
4
4
|
import { n as HASH_CODE_MAX } from "./constants-ITRzCnCp.js";
|
|
5
5
|
import { a as vecDot, g as vecSub, h as vecScale, t as vecAdd } from "./vecOps-SKPRvPH-.js";
|
|
6
6
|
import { o as resolvePlane } from "./planeOps-CQahLrCx.js";
|
|
7
|
-
import { _ as cast, y as downcast } from "./faceFns-
|
|
8
|
-
import { n as propagateOriginsByHash, r as propagateOriginsFromEvolution, t as getFaceOrigins } from "./originTrackingFns-
|
|
7
|
+
import { _ as cast, y as downcast } from "./faceFns-Ce7Fq6j5.js";
|
|
8
|
+
import { n as propagateOriginsByHash, r as propagateOriginsFromEvolution, t as getFaceOrigins } from "./originTrackingFns-DXcggmgf.js";
|
|
9
9
|
import { n as getAtOrThrow, t as firstOrThrow } from "./arrayAccess-DrUGPADn.js";
|
|
10
|
-
import { r as makeFace } from "./surfaceBuilders-
|
|
10
|
+
import { r as makeFace } from "./surfaceBuilders-B7UnwkQz.js";
|
|
11
11
|
//#region src/topology/metadata/faceTagFns.ts
|
|
12
12
|
var shapeTagStore = /* @__PURE__ */ new WeakMap();
|
|
13
13
|
var tagMetadataStore = /* @__PURE__ */ new WeakMap();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-DZKuRt24.cjs");
|
|
2
2
|
const require_errors = require("./errors-RHkKO5bZ.cjs");
|
|
3
|
-
const require_validityTypes = require("./validityTypes-
|
|
4
|
-
const require_faceFns = require("./faceFns-
|
|
3
|
+
const require_validityTypes = require("./validityTypes-CCnRq3A9.cjs");
|
|
4
|
+
const require_faceFns = require("./faceFns-UozswcwP.cjs");
|
|
5
5
|
//#region src/utils/range.ts
|
|
6
6
|
/** Generate an array of integers `[0, 1, …, len - 1]`. */
|
|
7
7
|
function range(len) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { K as getKernel, M as DisposalScope, W as _usingCtx, c as createEdge, l as createFace, p as createWire, y as isFace } from "./shapeTypes-
|
|
1
|
+
import { K as getKernel, M as DisposalScope, W as _usingCtx, c as createEdge, l as createFace, p as createWire, y as isFace } from "./shapeTypes-bHlssytH.js";
|
|
2
2
|
import { E as ok, d as validationError, g as err, i as kernelError, m as andThen } from "./errors-MHLiNE-C.js";
|
|
3
|
-
import { a as isPlanarFace } from "./validityTypes-
|
|
4
|
-
import { _ as cast, u as outerWire } from "./faceFns-
|
|
3
|
+
import { a as isPlanarFace } from "./validityTypes-19mfqWVv.js";
|
|
4
|
+
import { _ as cast, u as outerWire } from "./faceFns-Ce7Fq6j5.js";
|
|
5
5
|
//#region src/utils/range.ts
|
|
6
6
|
/** Generate an array of integers `[0, 1, …, len - 1]`. */
|
|
7
7
|
function range(len) {
|
package/dist/text.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_textBlueprints = require("./textBlueprints-
|
|
3
|
-
const require_textMetrics = require("./textMetrics-
|
|
2
|
+
const require_textBlueprints = require("./textBlueprints-BPbIpA4-.cjs");
|
|
3
|
+
const require_textMetrics = require("./textMetrics-rRuWxQG_.cjs");
|
|
4
4
|
exports.fontMetrics = require_textMetrics.fontMetrics;
|
|
5
5
|
exports.getFont = require_textBlueprints.getFont;
|
|
6
6
|
exports.loadFont = require_textBlueprints.loadFont;
|
package/dist/text.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as getFont, r as loadFont, t as textBlueprints } from "./textBlueprints-
|
|
2
|
-
import { n as textMetrics, r as sketchText, t as fontMetrics } from "./textMetrics-
|
|
1
|
+
import { n as getFont, r as loadFont, t as textBlueprints } from "./textBlueprints-DE3M-E9o.js";
|
|
2
|
+
import { n as textMetrics, r as sketchText, t as fontMetrics } from "./textMetrics-D3Bly1w4.js";
|
|
3
3
|
export { fontMetrics, getFont, loadFont, sketchText, textBlueprints, textMetrics };
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
const require_rolldown_runtime = require("./rolldown-runtime-DakpK96I.cjs");
|
|
2
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
2
|
+
const require_shapeTypes = require("./shapeTypes-DZKuRt24.cjs");
|
|
3
3
|
const require_bug = require("./bug-O02CsAmt.cjs");
|
|
4
4
|
const require_errors = require("./errors-RHkKO5bZ.cjs");
|
|
5
5
|
const require_types = require("./types-KjA8tY4Y.cjs");
|
|
6
6
|
const require_vecOps = require("./vecOps-CCnJt-yH.cjs");
|
|
7
7
|
const require_planeOps = require("./planeOps-VlFxtvzY.cjs");
|
|
8
|
-
const require_faceFns = require("./faceFns-
|
|
9
|
-
const require_solidBuilders = require("./solidBuilders-
|
|
10
|
-
const require_curveFns = require("./curveFns-
|
|
8
|
+
const require_faceFns = require("./faceFns-UozswcwP.cjs");
|
|
9
|
+
const require_solidBuilders = require("./solidBuilders-5tA9O1SM.cjs");
|
|
10
|
+
const require_curveFns = require("./curveFns-BBLaLG1U.cjs");
|
|
11
11
|
const require_arrayAccess = require("./arrayAccess-e4H9cBfh.cjs");
|
|
12
|
-
const require_surfaceBuilders = require("./surfaceBuilders-
|
|
13
|
-
const require_blueprintSketcher = require("./blueprintSketcher-
|
|
14
|
-
const require_loftFns = require("./loftFns-
|
|
12
|
+
const require_surfaceBuilders = require("./surfaceBuilders-0x7j0ibk.cjs");
|
|
13
|
+
const require_blueprintSketcher = require("./blueprintSketcher-Bd5ZS9p6.cjs");
|
|
14
|
+
const require_loftFns = require("./loftFns-BYiUcAxk.cjs");
|
|
15
15
|
let opentype_js = require("opentype.js");
|
|
16
16
|
opentype_js = require_rolldown_runtime.__toESM(opentype_js, 1);
|
|
17
17
|
//#region src/operations/extrudeFns.ts
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { K as getKernel, d as createSolid, h as disposeResultShape, l as createFace, m as disposeDowncastSource, n as castResultShape, p as createWire, x as isShape3D } from "./shapeTypes-
|
|
1
|
+
import { K as getKernel, d as createSolid, h as disposeResultShape, l as createFace, m as disposeDowncastSource, n as castResultShape, p as createWire, x as isShape3D } from "./shapeTypes-bHlssytH.js";
|
|
2
2
|
import { n as bug } from "./bug-BdOHwn_e.js";
|
|
3
3
|
import { E as ok, P as unwrap, d as validationError, g as err, i as kernelError, l as typeCastError, r as ioError, t as BrepErrorCode } from "./errors-MHLiNE-C.js";
|
|
4
4
|
import { r as toVec3 } from "./types-D24Y27N0.js";
|
|
5
5
|
import { c as vecLength, d as vecNormalize, h as vecScale, r as vecCross } from "./vecOps-SKPRvPH-.js";
|
|
6
6
|
import { n as createPlane } from "./planeOps-CQahLrCx.js";
|
|
7
|
-
import { v as copyShape } from "./faceFns-
|
|
8
|
-
import { o as makeSolid, p as cutAll, t as makeCompound } from "./solidBuilders-
|
|
9
|
-
import { l as curveStartPoint, u as curveTangentAt } from "./curveFns-
|
|
7
|
+
import { v as copyShape } from "./faceFns-Ce7Fq6j5.js";
|
|
8
|
+
import { o as makeSolid, p as cutAll, t as makeCompound } from "./solidBuilders-9s-j-ZiW.js";
|
|
9
|
+
import { l as curveStartPoint, u as curveTangentAt } from "./curveFns-BoHbhtqX.js";
|
|
10
10
|
import { n as getAtOrThrow, t as firstOrThrow } from "./arrayAccess-DrUGPADn.js";
|
|
11
|
-
import { i as makeNewFaceWithinFace, r as makeFace, t as addHolesInFace } from "./surfaceBuilders-
|
|
12
|
-
import { r as organiseBlueprints, t as BlueprintSketcher } from "./blueprintSketcher-
|
|
13
|
-
import { c as twistExtrude, r as complexExtrude, s as sweep, t as loft } from "./loftFns-
|
|
11
|
+
import { i as makeNewFaceWithinFace, r as makeFace, t as addHolesInFace } from "./surfaceBuilders-B7UnwkQz.js";
|
|
12
|
+
import { r as organiseBlueprints, t as BlueprintSketcher } from "./blueprintSketcher-BTGRoQ_G.js";
|
|
13
|
+
import { c as twistExtrude, r as complexExtrude, s as sweep, t as loft } from "./loftFns-DQVg8qxM.js";
|
|
14
14
|
import opentype from "opentype.js";
|
|
15
15
|
//#region src/operations/extrudeFns.ts
|
|
16
16
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { E as ok, d as validationError, g as err, t as BrepErrorCode } from "./errors-MHLiNE-C.js";
|
|
2
|
-
import { g as wrapSketchData, i as Sketches, n as getFont, t as textBlueprints, v as CompoundSketch } from "./textBlueprints-
|
|
2
|
+
import { g as wrapSketchData, i as Sketches, n as getFont, t as textBlueprints, v as CompoundSketch } from "./textBlueprints-DE3M-E9o.js";
|
|
3
3
|
//#region src/text/sketchText.ts
|
|
4
4
|
/**
|
|
5
5
|
* Render text as 3D sketch outlines on a plane.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const require_errors = require("./errors-RHkKO5bZ.cjs");
|
|
2
|
-
const require_textBlueprints = require("./textBlueprints-
|
|
2
|
+
const require_textBlueprints = require("./textBlueprints-BPbIpA4-.cjs");
|
|
3
3
|
//#region src/text/sketchText.ts
|
|
4
4
|
/**
|
|
5
5
|
* Render text as 3D sketch outlines on a plane.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { K as getKernel, M as DisposalScope, P as createKernelHandle, W as _usingCtx, n as castResultShape, x as isShape3D } from "./shapeTypes-
|
|
1
|
+
import { K as getKernel, M as DisposalScope, P as createKernelHandle, W as _usingCtx, n as castResultShape, x as isShape3D } from "./shapeTypes-bHlssytH.js";
|
|
2
2
|
import { E as ok, d as validationError, g as err, n as computationError, r as ioError, t as BrepErrorCode, x as isOk } from "./errors-MHLiNE-C.js";
|
|
3
3
|
import { d as vecNormalize, s as vecIsZero } from "./vecOps-SKPRvPH-.js";
|
|
4
|
-
import { b as fromBREP } from "./faceFns-
|
|
5
|
-
import { h as fuseAll } from "./solidBuilders-
|
|
6
|
-
import { E as wire, h as line } from "./primitiveFns-
|
|
7
|
-
import { s as toBREP } from "./shapeFns-
|
|
8
|
-
import { t as loft } from "./loftFns-
|
|
9
|
-
import { c as resolveRefParams } from "./refResolveFns-
|
|
4
|
+
import { b as fromBREP } from "./faceFns-Ce7Fq6j5.js";
|
|
5
|
+
import { h as fuseAll } from "./solidBuilders-9s-j-ZiW.js";
|
|
6
|
+
import { E as wire, h as line } from "./primitiveFns-CmmTWOkO.js";
|
|
7
|
+
import { s as toBREP } from "./shapeFns-mYczuWOy.js";
|
|
8
|
+
import { t as loft } from "./loftFns-DQVg8qxM.js";
|
|
9
|
+
import { c as resolveRefParams } from "./refResolveFns-DqY7Cd00.js";
|
|
10
10
|
//#region src/utils/uuid.ts
|
|
11
11
|
/** Generate a v4-style UUID string using `crypto.getRandomValues`. */
|
|
12
12
|
function uuidv() {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
const require_shapeTypes = require("./shapeTypes-
|
|
1
|
+
const require_shapeTypes = require("./shapeTypes-DZKuRt24.cjs");
|
|
2
2
|
const require_errors = require("./errors-RHkKO5bZ.cjs");
|
|
3
3
|
const require_vecOps = require("./vecOps-CCnJt-yH.cjs");
|
|
4
|
-
const require_faceFns = require("./faceFns-
|
|
5
|
-
const require_solidBuilders = require("./solidBuilders-
|
|
6
|
-
const require_primitiveFns = require("./primitiveFns-
|
|
7
|
-
const require_shapeFns = require("./shapeFns-
|
|
8
|
-
const require_loftFns = require("./loftFns-
|
|
9
|
-
const require_refResolveFns = require("./refResolveFns-
|
|
4
|
+
const require_faceFns = require("./faceFns-UozswcwP.cjs");
|
|
5
|
+
const require_solidBuilders = require("./solidBuilders-5tA9O1SM.cjs");
|
|
6
|
+
const require_primitiveFns = require("./primitiveFns-DmEPf6av.cjs");
|
|
7
|
+
const require_shapeFns = require("./shapeFns-BLZ1dDSz.cjs");
|
|
8
|
+
const require_loftFns = require("./loftFns-BYiUcAxk.cjs");
|
|
9
|
+
const require_refResolveFns = require("./refResolveFns-CnPEaqHw.cjs");
|
|
10
10
|
//#region src/utils/uuid.ts
|
|
11
11
|
/** Generate a v4-style UUID string using `crypto.getRandomValues`. */
|
|
12
12
|
function uuidv() {
|