forgecad 0.9.14 → 0.9.16
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/LICENSE +6 -4
- package/README.md +8 -4
- package/dist/assets/{AdminPage-eWGs2K6H.js → AdminPage-CXvls4-J.js} +2 -2
- package/dist/assets/{BenchmarkPage-CTrLKfpo.js → BenchmarkPage-B27zk8xL.js} +4 -15
- package/dist/assets/{BlogPage-5nPesyds.js → BlogPage-CMAVvgQL.js} +2 -2
- package/dist/assets/{DocsPage-C4Y3nbYc.js → DocsPage-knf4I4h7.js} +9 -3
- package/dist/assets/EditorApp-BHMQlJ-D.js +14686 -0
- package/dist/assets/{EditorApp-BAnckbsk.css → EditorApp-BpjZgzk0.css} +846 -0
- package/dist/assets/{EmbedViewer-C8fB4n5U.js → EmbedViewer-D7ZGlFjx.js} +3 -3
- package/dist/assets/{LandingPageProofDriven-jSz0LaMM.js → LandingPageProofDriven-CnevhTE8.js} +36 -38
- package/dist/assets/LegalPage-BPTUmqeg.js +39 -0
- package/dist/assets/LegalPage-BRlScr9A.css +91 -0
- package/dist/assets/{PricingPage-B83B90zh.js → PricingPage-B0D4goG_.js} +19 -19
- package/dist/assets/{PricingPage-BMedqFef.css → PricingPage-BPF6HKyO.css} +25 -0
- package/dist/assets/{SettingsPage-DY889pcu.js → SettingsPage-CFF-UgjI.js} +2 -2
- package/dist/assets/app-CE3sYcV7.css +3890 -0
- package/dist/assets/{app-bEww1ic4.js → app-T0pDcSX4.js} +3382 -1069
- package/dist/assets/cli/{render-Cho2uKG_.js → render-C5pcIISc.js} +477 -29
- package/dist/assets/{constructionHistoryWorker-HYwzJY4m.js → constructionHistoryWorker-Ba2Hm58b.js} +928 -243
- package/dist/assets/{evalWorker-CjQwJSE-.js → evalWorker-vkx310U2.js} +8883 -6040
- package/dist/assets/{forgecad_geometry-CH2nvuLA.js → forgecad_geometry-Dgceylq9.js} +43 -1
- package/dist/assets/forgecad_geometry_bg-dD4RNQF1.wasm +0 -0
- package/dist/assets/{inspectWorker-DeRnMVv1.js → inspectWorker-BuTJDVX6.js} +1179 -273
- package/dist/assets/{javascript-70-4uGcz.js → javascript-1kQXfVaz.js} +1 -1
- package/dist/assets/{targets-D6PWsv6X.js → jointPose-B_Cgedn9.js} +71 -3
- package/dist/assets/landing-proof-driven-DiGqdtWa.js +18 -0
- package/dist/assets/{landing-proof-driven-oFYW6mjz.css → landing-proof-driven-ORyigZ6p.css} +13 -7
- package/dist/assets/legalContent-ZfFGMmi4.js +251 -0
- package/dist/assets/{manifold-rmfAcdwF.js → manifold-BWgsjmAM.js} +1 -1
- package/dist/assets/{manifold-uRzgk5O8.js → manifold-D6IFSkhH.js} +2 -2
- package/dist/assets/{manifold-CG9Fokx-.js → manifold-rZexZI0G.js} +1 -1
- package/dist/assets/{reportWorker-4cW_ZpoS.js → reportWorker-0AGij1Ru.js} +8659 -12771
- package/dist/assets/{scalar-sampling-budget-CfDiFvh7.js → scalar-sampling-budget-J5cuzxT1.js} +8050 -6203
- package/dist/assets/{scanProxyWorker-Bs2TDgLw.js → scanProxyWorker-Vl4Wxa1y.js} +50 -6
- package/dist/assets/{solver-DuJAO8S6.js → solver-BZ9LPTHs.js} +1 -1
- package/dist/assets/solver_bg-DAHZJ_rw.wasm +0 -0
- package/dist/assets/{vendor-react-Da3A2QmU.js → vendor-react-6j1Kke-Y.js} +6 -5
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +2 -2
- package/dist/docs-raw/AI/ai-native-cad.md +50 -0
- package/dist/docs-raw/AI/usage.md +5 -12
- package/dist/docs-raw/CLI.md +34 -10
- package/dist/docs-raw/component-model.md +27 -11
- package/dist/docs-raw/generated/assembly.md +374 -187
- package/dist/docs-raw/generated/concepts.md +245 -237
- package/dist/docs-raw/generated/core.md +283 -6
- package/dist/docs-raw/generated/curves.md +274 -361
- package/dist/docs-raw/generated/lib.md +9 -19
- package/dist/docs-raw/generated/output.md +29 -4
- package/dist/docs-raw/generated/runtime-names.md +49 -0
- package/dist/docs-raw/generated/sdf.md +31 -0
- package/dist/docs-raw/generated/sheet-metal.md +9 -0
- package/dist/docs-raw/generated/sketch.md +44 -1
- package/dist/docs-raw/generated/viewport.md +11 -3
- package/dist/docs-raw/guides/coordinate-system.md +20 -16
- package/dist/docs-raw/guides/geometry-conventions.md +2 -2
- package/dist/docs-raw/guides/inspection-bundles.md +2 -1
- package/dist/docs-raw/guides/joint-design.md +24 -0
- package/dist/docs-raw/guides/positioning.md +13 -3
- package/dist/docs-raw/legal/privacy.md +63 -0
- package/dist/docs-raw/legal/software-license.md +55 -0
- package/dist/docs-raw/legal/terms.md +87 -0
- package/dist/docs-raw/skills/forgecad-3d-reconstruction.md +1 -1
- package/dist/docs-raw/skills/forgecad-blockout-model.md +1 -1
- package/dist/docs-raw/skills/forgecad-component-model.md +11 -2
- package/dist/docs-raw/skills/forgecad-high-level-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad-image-replicator.md +8 -8
- package/dist/docs-raw/skills/forgecad-lld.md +1 -1
- package/dist/docs-raw/skills/forgecad-make-a-model.md +40 -39
- package/dist/docs-raw/skills/forgecad-model-grader.md +2 -2
- package/dist/docs-raw/skills/forgecad-prepare-prompt.md +2 -2
- package/dist/docs-raw/skills/forgecad-project.md +3 -1
- package/dist/docs-raw/skills/forgecad-reconstruction-benchmark.md +1 -1
- package/dist/docs-raw/skills/forgecad-render-inspect.md +4 -2
- package/dist/docs-raw/skills/forgecad-visual-spec.md +1 -1
- package/dist/docs-raw/skills/forgecad.md +4 -3
- package/dist/docs-raw/welcome.md +2 -0
- package/dist/index.html +40 -12
- package/dist/llms.txt +8 -0
- package/dist/site.webmanifest +1 -1
- package/dist/sitemap.xml +49 -13
- package/dist-cli/{check-compiler-U5SOPN7X.js → check-compiler-SYQ2PWOB.js} +1 -2
- package/dist-cli/{check-query-propagation-XOKNSSYU.js → check-query-propagation-HIAGV62W.js} +1 -2
- package/dist-cli/{chunk-EXWGNL6K.js → chunk-SPZE3DUY.js} +20659 -17930
- package/dist-cli/forgecad.js +3568 -1250
- package/dist-cli/{forgecad_geometry-GYVNKPIE.js → forgecad_geometry-QOQIIP53.js} +42 -1
- package/dist-cli/forgecad_geometry_bg.wasm +0 -0
- package/dist-cli/{solver-46FFSK2U.js → solver-OK4HECRH.js} +0 -1
- package/dist-cli/solver_bg.wasm +0 -0
- package/dist-skill/CONTEXT.md +1192 -725
- package/dist-skill/SKILL.md +3 -2
- package/dist-skill/docs/API/core/concepts.md +64 -1
- package/dist-skill/docs/CLI.md +34 -10
- package/dist-skill/docs/generated/assembly.md +339 -213
- package/dist-skill/docs/generated/core.md +283 -6
- package/dist-skill/docs/generated/curves.md +272 -362
- package/dist-skill/docs/generated/lib.md +9 -19
- package/dist-skill/docs/generated/output.md +29 -4
- package/dist-skill/docs/generated/runtime-names.md +40 -0
- package/dist-skill/docs/generated/sdf.md +31 -0
- package/dist-skill/docs/generated/sheet-metal.md +9 -0
- package/dist-skill/docs/generated/sketch.md +44 -2
- package/dist-skill/docs/generated/viewport.md +2 -87
- package/dist-skill/docs/guides/coordinate-system.md +20 -16
- package/dist-skill/docs/guides/geometry-conventions.md +2 -2
- package/dist-skill/docs/guides/inspection-bundles.md +2 -1
- package/dist-skill/docs/guides/joint-design.md +24 -0
- package/dist-skill/docs/guides/positioning.md +13 -3
- package/dist-skill/library/forgecad-component-model/SKILL.md +10 -1
- package/dist-skill/library/forgecad-image-replicator/SKILL.md +6 -6
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.py +166 -0
- package/dist-skill/library/forgecad-make-a-model/SKILL.md +39 -38
- package/dist-skill/library/forgecad-model-grader/SKILL.md +1 -1
- package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
- package/dist-skill/library/forgecad-project/SKILL.md +2 -0
- package/dist-skill/library/forgecad-render-inspect/SKILL.md +3 -1
- package/examples/api/assembly-kinematics-foundation.forge.js +65 -0
- package/examples/api/assembly-kinematics-four-bar.forge.js +115 -0
- package/examples/api/assembly-kinematics-limb.forge.js +116 -0
- package/examples/api/connector-frame-rig-chain.forge.js +102 -0
- package/examples/api/exact-sheet-shell-assembly.forge.js +0 -2
- package/examples/api/exact-surface-studio.forge.js +6 -8
- package/examples/api/helix-basics.forge.js +8 -8
- package/examples/api/lean-foundations/README.md +12 -0
- package/examples/api/lean-foundations/curve-blend-exact.forge.js +22 -0
- package/examples/api/lean-foundations/curve-fit-interpolation.forge.js +18 -0
- package/examples/api/lean-foundations/curve-helix-canonicalization.forge.js +27 -0
- package/examples/api/lean-foundations/curve-route-canonicalization.forge.js +16 -0
- package/examples/api/lean-foundations/curve-trim-reverse.forge.js +24 -0
- package/examples/api/lean-foundations/exact-curve-arc.forge.js +36 -0
- package/examples/api/mixed-edge-finishes-proof.forge.js +8 -11
- package/examples/api/route3d-elbow.forge.js +71 -0
- package/examples/api/transition-curves.forge.js +44 -15
- package/examples/api/variable-sweep-test.forge.js +3 -1
- package/examples/api/y-blend-corner-showcase.forge.js +0 -2
- package/examples/generative/coral-vase.forge.js +1 -1
- package/examples/nurbs-tube.forge.js +1 -1
- package/package.json +17 -13
- package/dist/assets/EditorApp-lXv53A1m.js +0 -13610
- package/dist/assets/app-CsHnaBWt.css +0 -1789
- package/dist/assets/forgecad_geometry_bg-C5_E9Oa9.wasm +0 -0
- package/dist/assets/solver_bg-CWvv4lnN.wasm +0 -0
- package/dist/docs-raw/API/README.md +0 -16
- package/dist/docs-raw/API/core/concepts.md +0 -118
- package/dist/docs-raw/INDEX.md +0 -138
- package/dist/docs-raw/RELEASING.md +0 -87
- package/dist/docs-raw/agent-native-api.md +0 -27
- package/dist/docs-raw/beta-deployment.md +0 -304
- package/dist/docs-raw/beta-operations.md +0 -325
- package/dist/docs-raw/blueprint-first.md +0 -145
- package/dist/docs-raw/cli-monetization.md +0 -112
- package/dist/docs-raw/coding-best-practices.md +0 -120
- package/dist/docs-raw/coding.md +0 -340
- package/dist/docs-raw/deployment.md +0 -374
- package/dist/docs-raw/guides/skill-maintenance.md +0 -161
- package/dist/docs-raw/guides/surface-members.md +0 -82
- package/dist/docs-raw/harbor-cli.md +0 -854
- package/dist/docs-raw/internals/backend-vocabulary.md +0 -35
- package/dist/docs-raw/internals/compiler.md +0 -307
- package/dist/docs-raw/internals/constraint-solver-quality.md +0 -161
- package/dist/docs-raw/internals/constraint-solver.md +0 -176
- package/dist/docs-raw/internals/shape-from-slices.md +0 -152
- package/dist/docs-raw/internals/sketch-2d-pipeline.md +0 -108
- package/dist/docs-raw/platform/admin.md +0 -45
- package/dist/docs-raw/platform/architecture.md +0 -82
- package/dist/docs-raw/platform/auth.md +0 -139
- package/dist/docs-raw/platform/email.md +0 -67
- package/dist/docs-raw/platform/google-oauth-setup.md +0 -88
- package/dist/docs-raw/platform/observability.md +0 -197
- package/dist/docs-raw/platform/projects.md +0 -111
- package/dist/docs-raw/platform/sharing.md +0 -90
- package/dist/docs-raw/product/README.md +0 -39
- package/dist/docs-raw/product/api-as-product-language.md +0 -13
- package/dist/docs-raw/product/business-model.md +0 -15
- package/dist/docs-raw/product/competitive-positioning.md +0 -17
- package/dist/docs-raw/product/creative-manufacturing.md +0 -15
- package/dist/docs-raw/product/founder-story.md +0 -11
- package/dist/docs-raw/product/manufacturing-workflows.md +0 -15
- package/dist/docs-raw/product/onboarding-first-experience.md +0 -256
- package/dist/docs-raw/product/product-loop.md +0 -17
- package/dist/docs-raw/product/strategic-decisions.md +0 -22
- package/dist/docs-raw/product/user-outreach-email-templates.md +0 -161
- package/dist/docs-raw/product/user-segments.md +0 -15
- package/dist/docs-raw/product/vision.md +0 -26
- package/dist/docs-raw/rl-environments.md +0 -350
- package/dist/docs-raw/runbook.md +0 -611
- package/dist-cli/check-compiler-U5SOPN7X.js.map +0 -1
- package/dist-cli/check-query-propagation-XOKNSSYU.js.map +0 -1
- package/dist-cli/chunk-EXWGNL6K.js.map +0 -1
- package/dist-cli/forgecad.js.map +0 -1
- package/dist-cli/forgecad_geometry-GYVNKPIE.js.map +0 -1
- package/dist-cli/solver-46FFSK2U.js.map +0 -1
- package/dist-skill/SKILL-dev.md +0 -145
- package/dist-skill/docs-dev/API/core/concepts.md +0 -118
- package/dist-skill/docs-dev/CLI.md +0 -677
- package/dist-skill/docs-dev/agent-native-api.md +0 -27
- package/dist-skill/docs-dev/blueprint-first.md +0 -145
- package/dist-skill/docs-dev/coding-best-practices.md +0 -120
- package/dist-skill/docs-dev/coding.md +0 -340
- package/dist-skill/docs-dev/component-model.md +0 -164
- package/dist-skill/docs-dev/generated/assembly.md +0 -794
- package/dist-skill/docs-dev/generated/core.md +0 -2117
- package/dist-skill/docs-dev/generated/curves.md +0 -2583
- package/dist-skill/docs-dev/generated/lib.md +0 -169
- package/dist-skill/docs-dev/generated/output.md +0 -247
- package/dist-skill/docs-dev/generated/sdf.md +0 -446
- package/dist-skill/docs-dev/generated/sheet-metal.md +0 -504
- package/dist-skill/docs-dev/generated/sketch.md +0 -1811
- package/dist-skill/docs-dev/generated/viewport.md +0 -585
- package/dist-skill/docs-dev/generated/wood.md +0 -108
- package/dist-skill/docs-dev/guides/coordinate-system.md +0 -46
- package/dist-skill/docs-dev/guides/geometry-conventions.md +0 -52
- package/dist-skill/docs-dev/guides/inspection-bundles.md +0 -485
- package/dist-skill/docs-dev/guides/joint-design.md +0 -78
- package/dist-skill/docs-dev/guides/modeling-recipes.md +0 -78
- package/dist-skill/docs-dev/guides/positioning.md +0 -161
- package/dist-skill/docs-dev/guides/skill-maintenance.md +0 -161
- package/dist-skill/docs-dev/internals/backend-vocabulary.md +0 -35
- package/dist-skill/docs-dev/internals/compiler.md +0 -307
- package/dist-skill/docs-dev/internals/constraint-solver-quality.md +0 -161
- package/dist-skill/docs-dev/internals/constraint-solver.md +0 -176
- package/dist-skill/docs-dev/internals/sketch-2d-pipeline.md +0 -108
- package/dist-skill/library/forgecad-image-replicator/scripts/compare_images.mjs +0 -289
- package/examples/api/bolted-service-cover.forge.js +0 -17
- package/examples/api/cable-gland-anchor.forge.js +0 -14
- package/examples/api/captured-cartridge-guide.forge.js +0 -14
- package/examples/api/captured-linear-slide.forge.js +0 -13
- package/examples/api/clevis-pin-joint.forge.js +0 -13
- package/examples/api/datum-enclosure.forge.js +0 -16
- package/examples/api/hose-barb-port.forge.js +0 -14
- package/examples/api/knuckled-hinge-assembly.forge.js +0 -15
- package/examples/api/living-hinge-cover.forge.js +0 -14
- package/examples/api/pcb-terminal-block.forge.js +0 -22
- package/examples/api/pinned-lever-pivot-stack.forge.js +0 -14
- package/examples/api/retained-shaft-knob-stack.forge.js +0 -15
- package/examples/api/routed-tube-clip.forge.js +0 -15
- package/examples/api/seated-bearing-stack.forge.js +0 -30
- package/examples/api/snap-latch-cover.forge.js +0 -14
- package/examples/api/thumb-screw-clamp.forge.js +0 -15
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Demonstrates
|
|
3
|
-
// and weighted blending (G1 + G2 continuity).
|
|
1
|
+
// Curve blends — smooth connections between edges
|
|
2
|
+
// Demonstrates Curve.Blend(), sweep(), local edge recipes, and weighted blending.
|
|
4
3
|
|
|
5
4
|
const weight = Param.number("Weight A", 1.0, { min: 0.1, max: 5.0, step: 0.1 });
|
|
6
5
|
const weightB = Param.number("Weight B", 1.0, { min: 0.1, max: 5.0, step: 0.1 });
|
|
@@ -12,9 +11,43 @@ function anchor(pos) {
|
|
|
12
11
|
return box(s, s, s).translate(pos[0], pos[1], pos[2]);
|
|
13
12
|
}
|
|
14
13
|
|
|
14
|
+
function blendTube(edgeA, edgeB, options = {}) {
|
|
15
|
+
const curve = Curve.Blend(
|
|
16
|
+
{ point: edgeA.point, tangent: edgeA.tangent, weight: options.weightA },
|
|
17
|
+
{ point: edgeB.point, tangent: edgeB.tangent, weight: options.weightB },
|
|
18
|
+
);
|
|
19
|
+
const profile = options.profile ?? circle2d(options.radius ?? radius);
|
|
20
|
+
return sweep(profile, curve, { samples: options.samples, up: options.up });
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function normalized(vec, fallback = [1, 0, 0]) {
|
|
24
|
+
const length = Math.hypot(vec[0], vec[1], vec[2]);
|
|
25
|
+
return length > 1e-9 ? [vec[0] / length, vec[1] / length, vec[2] / length] : fallback;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function edgePoint(edge, which = 'mid') {
|
|
29
|
+
if (which === 'start') return edge.start;
|
|
30
|
+
if (which === 'end') return edge.end;
|
|
31
|
+
return edge.midpoint;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function edgeOutward(edge) {
|
|
35
|
+
const a = edge.normalA ?? [0, 0, 0];
|
|
36
|
+
const b = edge.normalB ?? [0, 0, 0];
|
|
37
|
+
return normalized([a[0] + b[0], a[1] + b[1], a[2] + b[2]], edge.direction ?? [1, 0, 0]);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function edgeBlendTube(edgeA, edgeB, options = {}) {
|
|
41
|
+
return blendTube(
|
|
42
|
+
{ point: edgePoint(edgeA, options.endA), tangent: edgeOutward(edgeA) },
|
|
43
|
+
{ point: edgePoint(edgeB, options.endB), tangent: edgeOutward(edgeB) },
|
|
44
|
+
options,
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
15
48
|
// ── 1. L-bend: 90-degree pipe turn ──────────────────────────────
|
|
16
49
|
const pA1 = [0, 0, 0], pB1 = [30, 20, 0];
|
|
17
|
-
const lBend =
|
|
50
|
+
const lBend = blendTube(
|
|
18
51
|
{ point: pA1, tangent: [1, 0, 0] },
|
|
19
52
|
{ point: pB1, tangent: [0, 1, 0] },
|
|
20
53
|
{ radius, weightA: weight, weightB: weightB },
|
|
@@ -22,7 +55,7 @@ const lBend = transitionSurface(
|
|
|
22
55
|
|
|
23
56
|
// ── 2. S-curve: opposing tangents ────────────────────────────────
|
|
24
57
|
const pA2 = [0, 40, 0], pB2 = [30, 60, 0];
|
|
25
|
-
const sCurve =
|
|
58
|
+
const sCurve = blendTube(
|
|
26
59
|
{ point: pA2, tangent: [1, 0, 0] },
|
|
27
60
|
{ point: pB2, tangent: [-1, 0, 0] },
|
|
28
61
|
{ radius, weightA: weight, weightB: weightB },
|
|
@@ -30,7 +63,7 @@ const sCurve = transitionSurface(
|
|
|
30
63
|
|
|
31
64
|
// ── 3. 3D transition: going up and around ────────────────────────
|
|
32
65
|
const pA3 = [0, 0, 30], pB3 = [25, 15, 45];
|
|
33
|
-
const transition3D =
|
|
66
|
+
const transition3D = blendTube(
|
|
34
67
|
{ point: pA3, tangent: [1, 0, 0] },
|
|
35
68
|
{ point: pB3, tangent: [0, 0, 1] },
|
|
36
69
|
{ radius, weightA: weight, weightB: weightB, up: [0, 1, 0] },
|
|
@@ -38,7 +71,7 @@ const transition3D = transitionSurface(
|
|
|
38
71
|
|
|
39
72
|
// ── 4. Asymmetric weight (3:0.5) ────────────────────────────────
|
|
40
73
|
const pA4 = [55, 0, 0], pB4 = [85, 20, 0];
|
|
41
|
-
const weighted =
|
|
74
|
+
const weighted = blendTube(
|
|
42
75
|
{ point: pA4, tangent: [1, 0, 0] },
|
|
43
76
|
{ point: pB4, tangent: [0, 1, 0] },
|
|
44
77
|
{ radius, weightA: 3.0, weightB: 0.5 },
|
|
@@ -51,25 +84,21 @@ const boxB = box(10, 10, 10).translate(35, 15, -20);
|
|
|
51
84
|
const topEdgeA = selectEdge(boxA, { atZ: -25, parallel: [1, 0, 0] });
|
|
52
85
|
const bottomEdgeB = selectEdge(boxB, { atZ: -20, parallel: [1, 0, 0] });
|
|
53
86
|
|
|
54
|
-
const edgeConnector =
|
|
87
|
+
const edgeConnector = edgeBlendTube(topEdgeA, bottomEdgeB, {
|
|
55
88
|
endA: 'mid',
|
|
56
89
|
endB: 'mid',
|
|
57
|
-
tangentModeA: 'outward',
|
|
58
|
-
tangentModeB: 'outward',
|
|
59
90
|
radius: 2,
|
|
60
91
|
weightA: weight,
|
|
61
92
|
weightB: weightB,
|
|
62
93
|
});
|
|
63
94
|
|
|
64
|
-
// ── 6.
|
|
95
|
+
// ── 6. Same local edge recipe on vertical side edges ─────────────
|
|
65
96
|
const sideEdgeA = selectEdge(boxA, { near: [5, 0, -30], parallel: [0, 0, 1] });
|
|
66
97
|
const sideEdgeB = selectEdge(boxB, { near: [30, 15, -15], parallel: [0, 0, 1] });
|
|
67
98
|
|
|
68
|
-
const shortcutConnector =
|
|
99
|
+
const shortcutConnector = edgeBlendTube(sideEdgeA, sideEdgeB, {
|
|
69
100
|
endA: 'mid',
|
|
70
101
|
endB: 'mid',
|
|
71
|
-
tangentModeA: 'outward',
|
|
72
|
-
tangentModeB: 'outward',
|
|
73
102
|
radius: 1.5,
|
|
74
103
|
weightA: weight,
|
|
75
104
|
weightB: weightB,
|
|
@@ -85,7 +114,7 @@ const box2 = box(12, 12, 12).translate(25, -55, 25);
|
|
|
85
114
|
// Cylinder rim at Y=-55: full radius available, so X=8 is on the rim.
|
|
86
115
|
// Box left face at X=25, Y=-55 is on the face edge, Z=31 is mid-height.
|
|
87
116
|
// End tangent [1,0,0] means the curve arrives going +X (into the face).
|
|
88
|
-
const cylToBox =
|
|
117
|
+
const cylToBox = blendTube(
|
|
89
118
|
{ point: [8, -55, 20], tangent: [1, 0, 0.65] },
|
|
90
119
|
{ point: [25, -55, 31], tangent: [1, 0, 0] },
|
|
91
120
|
{ radius: 1.5, weightA: weight, weightB: weightB },
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Variable Sweep test — tapered tube along a curved spine
|
|
2
2
|
// Demonstrates variableSweep() with different cross-sections at different t values
|
|
3
3
|
|
|
4
|
-
const spine =
|
|
4
|
+
const spine = Curve.Spline([
|
|
5
5
|
[0, 0, 0],
|
|
6
6
|
[20, 0, 10],
|
|
7
7
|
[40, 10, 20],
|
|
@@ -20,4 +20,6 @@ const tapered = variableSweep(spine, [
|
|
|
20
20
|
samples: 64,
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
+
verify.boundingBoxSize('variableSweep along Curve.Spline keeps the tapered tube envelope', tapered, [66, 22, 36], 8);
|
|
24
|
+
|
|
23
25
|
return tapered.color('#8899aa');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "forgecad",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.16",
|
|
4
4
|
"description": "Code-first parametric CAD for JavaScript/TypeScript, in the browser and CLI.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://forgecad.io",
|
|
@@ -32,6 +32,9 @@
|
|
|
32
32
|
"check": {
|
|
33
33
|
"description": "Run model-focused readiness checks."
|
|
34
34
|
},
|
|
35
|
+
"context": {
|
|
36
|
+
"description": "Read and render submitted marker context for agent workflows."
|
|
37
|
+
},
|
|
35
38
|
"compare": {
|
|
36
39
|
"description": "Compare ForgeCAD scripts and imported 3D assets."
|
|
37
40
|
},
|
|
@@ -66,7 +69,9 @@
|
|
|
66
69
|
},
|
|
67
70
|
"files": [
|
|
68
71
|
"dist-cli",
|
|
72
|
+
"!dist-cli/**/*.map",
|
|
69
73
|
"dist",
|
|
74
|
+
"!dist/**/*.map",
|
|
70
75
|
"dist-skill",
|
|
71
76
|
"examples",
|
|
72
77
|
"!examples/todo.md",
|
|
@@ -99,16 +104,15 @@
|
|
|
99
104
|
"build:geometry:native:parallel": "node scripts/geometry-build.mjs --native --release --parallel",
|
|
100
105
|
"bench:geometry:native": "cargo run --manifest-path geometry/Cargo.toml --release --features parallel --example server_parallel_bench -- --require-parallel",
|
|
101
106
|
"bench:edge-finishes": "node scripts/truck-edge-finish-parity-benchmark.mjs",
|
|
102
|
-
"build:benchmark-data": "node scripts/gen-benchmark-data.mjs",
|
|
103
107
|
"test:solver": "node scripts/solver-test.mjs",
|
|
104
108
|
"test:geometry": "node scripts/geometry-test.mjs",
|
|
105
109
|
"build:sitemap": "node scripts/gen-sitemap.mjs",
|
|
106
|
-
"build": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run build:sitemap && vite build && npm run build:cli",
|
|
107
|
-
"build:hosted": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run build:sitemap && FORGE_HOSTED=true vite build",
|
|
110
|
+
"build": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run gen:public-docs && npm run build:docs && npm run build:sitemap && vite build && npm run build:cli",
|
|
111
|
+
"build:hosted": "npm run build:solver && npm run build:geometry && npm run build:skill:forgecad && tsc && npm run gen:public-docs && npm run build:docs && npm run build:sitemap && FORGE_HOSTED=true vite build",
|
|
108
112
|
"dev:cli": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsup cli/forgecad.ts --format esm --platform node --target node20 --out-dir dist-cli --sourcemap --external typescript && node scripts/copy-cli-assets.mjs dist-cli",
|
|
109
|
-
"build:cli": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsup cli/forgecad.ts --format esm --platform node --target node20 --out-dir dist-cli --clean --
|
|
110
|
-
"
|
|
111
|
-
"build:backend": "npm run build:
|
|
113
|
+
"build:cli": "npm run build:solver:if-missing && npm run build:geometry:if-missing && tsup cli/forgecad.ts --format esm --platform node --target node20 --out-dir dist-cli --clean --external typescript && node scripts/copy-cli-assets.mjs dist-cli",
|
|
114
|
+
"build:native-occt": "node scripts/build-native-occt.mjs",
|
|
115
|
+
"build:backend": "npm run build:native-occt && tsup apps/backend/src/server.ts apps/backend/src/nativeOcctWorker.ts --format esm --platform node --target node20 --out-dir dist-backend --clean --sourcemap",
|
|
112
116
|
"build:binary": "node scripts/build-binary.mjs",
|
|
113
117
|
"build:binary:all": "node scripts/build-binary.mjs --all",
|
|
114
118
|
"bundle:offline": "node scripts/build-install-bundle.mjs",
|
|
@@ -130,21 +134,18 @@
|
|
|
130
134
|
"test:examples:smoke": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check examples --profile smoke",
|
|
131
135
|
"test:examples:full": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check examples --profile full",
|
|
132
136
|
"test:brep": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check brep",
|
|
137
|
+
"test:native-occt-ir": "npm run build:native-occt && vitest run test/nativeOcctIrCompute.test.ts test/computeRoutesAccess.test.ts",
|
|
133
138
|
"test:api": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check api",
|
|
134
139
|
"test:text": "npm run test:prepare && FORGECAD_INTERNAL_CHECKS=1 node dist-cli/forgecad.js check text",
|
|
135
140
|
"verify:surface-member-render-evidence": "node scripts/verify-surface-member-render-evidence.mjs",
|
|
136
141
|
"verify:global-install": "node scripts/verify-global-install-sandbox.mjs",
|
|
142
|
+
"verify:npm-artifacts": "node scripts/verify-npm-artifacts.mjs",
|
|
137
143
|
"build:skill:forgecad": "node scripts/build-forgecad-skill.mjs",
|
|
138
144
|
"sync:public-skills": "node scripts/sync-public-skills.mjs",
|
|
139
145
|
"build:docs": "node scripts/build-docs-site.mjs",
|
|
140
|
-
"benchmark:reconstruction": "node scripts/forgecad-internal.mjs benchmark reconstruction",
|
|
141
|
-
"benchmark:reconstruction:list": "node scripts/forgecad-internal.mjs benchmark reconstruction list-tasks",
|
|
142
|
-
"benchmark:reconstruction:import-harbor": "node scripts/forgecad-internal.mjs benchmark reconstruction import-harbor",
|
|
143
|
-
"benchmark:reconstruction:leaderboard": "node scripts/forgecad-internal.mjs benchmark reconstruction leaderboard",
|
|
144
|
-
"benchmark:reconstruction:report": "node scripts/forgecad-internal.mjs benchmark reconstruction report",
|
|
145
146
|
"prepare": "npm run build:cli && npm run install-hooks",
|
|
146
147
|
"install-hooks": "git config core.hooksPath scripts/git-hooks",
|
|
147
|
-
"prepublishOnly": "npm run build",
|
|
148
|
+
"prepublishOnly": "npm run build && npm run verify:npm-artifacts",
|
|
148
149
|
"release:pack": "node scripts/release-docker-check.mjs pack",
|
|
149
150
|
"release:docker:create": "node scripts/release-docker-check.mjs container",
|
|
150
151
|
"release:docker:copy": "node scripts/release-docker-check.mjs copy",
|
|
@@ -187,6 +188,8 @@
|
|
|
187
188
|
"prod:promote-beta": "fish scripts/promote-beta-to-prod.fish",
|
|
188
189
|
"prod:help": "bash scripts/prod.sh help",
|
|
189
190
|
"paid-user-note": "node scripts/create-paid-user-note.mjs",
|
|
191
|
+
"gen:legal-docs": "tsx scripts/gen-legal-docs.ts",
|
|
192
|
+
"gen:public-docs": "tsx scripts/gen-public-docs.ts",
|
|
190
193
|
"gen:types": "node scripts/gen-forge-types.mjs",
|
|
191
194
|
"gen:docs": "node scripts/gen-api-docs.mjs",
|
|
192
195
|
"gen:cli-docs": "node scripts/gen-cli-docs.mjs",
|
|
@@ -214,6 +217,7 @@
|
|
|
214
217
|
"meshoptimizer": "^1.0.1",
|
|
215
218
|
"mp4-muxer": "^5.2.1",
|
|
216
219
|
"nanoid": "^5.1.7",
|
|
220
|
+
"node-addon-api": "^8.8.0",
|
|
217
221
|
"opencascade.js": "2.0.0-beta.b5ff984",
|
|
218
222
|
"opentype.js": "^1.3.4",
|
|
219
223
|
"pino": "^10.3.1",
|