forgecad 0.9.5 → 0.9.6
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/assets/{AdminPage-uTtcSXtn.js → AdminPage-Da6hhpJx.js} +1 -1
- package/dist/assets/{BlogPage-DYJMjWx3.js → BlogPage-Bl_sKeWb.js} +1 -1
- package/dist/assets/{DocsPage-C58f0K5v.js → DocsPage-Blz3Tp4j.js} +1 -1
- package/dist/assets/{EditorApp-DNH1TEz1.js → EditorApp-CuiPbtn5.js} +32 -7
- package/dist/assets/{EmbedViewer-CMXWA2LX.js → EmbedViewer-BFG6-Ufm.js} +2 -2
- package/dist/assets/{LandingPageProofDriven-CAu2OZFn.js → LandingPageProofDriven-DB9fQd5P.js} +1 -1
- package/dist/assets/{PricingPage-BIgW7m3X.js → PricingPage-BMxYT_F0.js} +1 -1
- package/dist/assets/{SettingsPage-N1l1tMXO.js → SettingsPage-VVQNrCAg.js} +1 -1
- package/dist/assets/{app-CFy7g5WP.js → app-Dl9ymBWC.js} +293 -36
- package/dist/assets/cli/{render-BrVVdj_T.js → render-CFtwKCCY.js} +10 -1081
- package/dist/assets/{sectionPlaneMath-CykEnkvQ.js → distance-BEC2RjJi.js} +1897 -288
- package/dist/assets/{evalWorker-c_SB9gg3.js → evalWorker-CRvbzTXm.js} +555 -83
- package/dist/assets/{manifold-Cjk7WhRs.js → manifold-B9QSr-qP.js} +1 -1
- package/dist/assets/{manifold-Dp6pvFr6.js → manifold-DpBXFS2K.js} +1 -1
- package/dist/assets/{manifold-CRoBhJKH.js → manifold-DzZ4VRPs.js} +2 -2
- package/dist/assets/{renderSceneState-3DfsSASX.js → renderSceneState-BuAXF2jh.js} +1 -1
- package/dist/assets/{reportWorker-BLkuIoS8.js → reportWorker-BNWEnRg1.js} +555 -83
- package/dist/cli/render.html +1 -1
- package/dist/docs/index.html +1 -1
- package/dist/docs-raw/beta-operations.md +4 -0
- package/dist/docs-raw/deployment.md +38 -23
- package/dist/docs-raw/generated/concepts.md +82 -5
- package/dist/docs-raw/generated/curves.md +97 -5
- package/dist/docs-raw/generated/sketch.md +9 -1
- package/dist/docs-raw/guides/inspection-bundles.md +9 -3
- package/dist/docs-raw/runbook.md +3 -3
- package/dist/index.html +1 -1
- package/dist/sitemap.xml +6 -6
- package/dist-cli/forgecad.js +828 -297
- package/dist-cli/forgecad.js.map +1 -1
- package/dist-skill/CONTEXT.md +115 -9
- package/dist-skill/docs/generated/curves.md +97 -5
- package/dist-skill/docs/generated/sketch.md +9 -1
- package/dist-skill/docs/guides/inspection-bundles.md +9 -3
- package/dist-skill/docs-dev/generated/curves.md +97 -5
- package/dist-skill/docs-dev/generated/sketch.md +9 -1
- package/dist-skill/docs-dev/guides/inspection-bundles.md +9 -3
- package/examples/api/guided-loft-olive-oil-bottle.forge.js +135 -0
- package/package.json +20 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports } from "./vendor-react-Da3A2QmU.js";
|
|
2
|
-
import {
|
|
3
|
-
import { g as useForgeStore, ag as getExternalUrl, ah as getGistId, q as fetchUrlModel, p as fetchGistModel, l as buildShareUrl, B as BrandMark, ai as Viewport } from "./app-
|
|
2
|
+
import { bL as initKernel, bM as initSolverWasm } from "./distance-BEC2RjJi.js";
|
|
3
|
+
import { g as useForgeStore, ag as getExternalUrl, ah as getGistId, q as fetchUrlModel, p as fetchGistModel, l as buildShareUrl, B as BrandMark, ai as Viewport } from "./app-Dl9ymBWC.js";
|
|
4
4
|
function EmbedViewer() {
|
|
5
5
|
const kernelReady = useForgeStore((s) => s.kernelReady);
|
|
6
6
|
const setKernelReady = useForgeStore((s) => s.setKernelReady);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { f as useNavigate, r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-Da3A2QmU.js";
|
|
2
|
-
import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-
|
|
2
|
+
import { u as useAuthStore, b as authFetch, B as BrandMark } from "./app-Dl9ymBWC.js";
|
|
3
3
|
import { C as COMMERCIAL_USE_CASES } from "./copy-CQKQppF-.js";
|
|
4
4
|
/* empty css */
|
|
5
5
|
function checkoutIntentPath(interval) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-Da3A2QmU.js";
|
|
2
|
-
import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-
|
|
2
|
+
import { u as useAuthStore, b as authFetch, s as storageUsagePercent, f as formatStorageBytes } from "./app-Dl9ymBWC.js";
|
|
3
3
|
import { P as PRO_STORAGE_UPGRADE_COPY } from "./copy-CQKQppF-.js";
|
|
4
4
|
function timeAgo(dateStr) {
|
|
5
5
|
const ms = Date.now() - new Date(dateStr).getTime();
|
|
@@ -4,7 +4,7 @@ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { en
|
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
var _a2;
|
|
6
6
|
import { c as create, r as reactExports, j as jsxRuntimeExports, a as createWithEqualityFn, R as React, T as Tb, s as schedulerExports, b as clientExports, d as reactDomExports, u as useParams, e as useSearchParams, f as useNavigate, L as Link, B as BrowserRouter, g as Routes, h as Route, N as Navigate } from "./vendor-react-Da3A2QmU.js";
|
|
7
|
-
import { _ as __vitePreload, z as zipSync, s as strToU8, W as WebGLRenderer, R as Raycaster, O as OrthographicCamera$1, P as PerspectiveCamera$1, S as Scene, a as PCFSoftShadowMap, V as VSMShadowMap, b as PCFShadowMap, B as BasicShadowMap, C as ColorManagement, L as LinearSRGBColorSpace, c as SRGBColorSpace, N as NoToneMapping, A as ACESFilmicToneMapping, d as Layers, e as Color, f as RGBAFormat, U as UnsignedByteType, g as Vector3, h as Vector2, i as Clock, T as THREE, D as DoubleSide, j as REVISION, M as Mesh, I as IcosahedronGeometry, k as ShaderMaterial, l as Spherical, Q as Quaternion, m as MOUSE, n as TOUCH, o as Ray, p as Plane, q as DataTextureLoader, H as HalfFloatType, F as FloatType, r as DataUtils, t as LinearFilter, u as RedFormat, v as InstancedBufferGeometry, w as Float32BufferAttribute, x as InstancedInterleavedBuffer, y as InterleavedBufferAttribute, E as WireframeGeometry, G as Box3, J as Sphere, K as UniformsUtils, X as UniformsLib, Y as Vector4, Z as Line3, $ as Matrix4, a0 as MathUtils, a1 as Uniform, a2 as WebGLRenderTarget, a3 as DepthTexture, a4 as BackSide, a5 as ClampToEdgeWrapping, a6 as PlaneGeometry, a7 as UVMapping, a8 as DataTexture, a9 as Texture, aa as MeshBasicMaterial, ab as IntType, ac as ShortType, ad as ByteType, ae as UnsignedIntType, af as Loader, ag as LoadingManager, ah as LinearMipMapLinearFilter, ai as FileLoader, aj as NoBlending, ak as CubeReflectionMapping, al as EquirectangularReflectionMapping, am as CubeTextureLoader, an as WebGLCubeRenderTarget, ao as ConstraintSketch, ap as setSketchPlacement3D, aq as Sketch, ar as PROFILE_BACKEND_MARKER, as as FrozenShape, at as setShapeCompilePlan, au as hasAnyPorts, av as setShapePortsInternal, aw as markShapePortsUsed, ax as setParamOverrides, ay as DEFAULT_ACTIVE_BACKEND, az as isConstraintSketch, aA as updateConstraintValue, aB as getShapeCompilePlan, aC as resolveForgeRenderStyle, aD as publishSolverWasmRunDebug, aE as resolveForgeQualityPreset, aF as resolveImportPath, aG as BufferGeometry, aH as LineBasicMaterial, aI as Line$1, aJ as LineDashedMaterial, aK as DepthStencilFormat, aL as UnsignedInt248Type, aM as MeshNormalMaterial, aN as NearestFilter, aO as BasicDepthPacking, aP as EventDispatcher$1, aQ as NoColorSpace, aR as FrontSide, aS as Material, aT as AlwaysDepth, aU as BufferAttribute, aV as CanvasTexture, aW as Object3D, aX as FogExp2, aY as Fog, aZ as AmbientLight, a_ as HemisphereLight, a$ as SpotLight, b0 as PointLight, b1 as DirectionalLight, b2 as
|
|
7
|
+
import { _ as __vitePreload, z as zipSync, s as strToU8, W as WebGLRenderer, R as Raycaster, O as OrthographicCamera$1, P as PerspectiveCamera$1, S as Scene, a as PCFSoftShadowMap, V as VSMShadowMap, b as PCFShadowMap, B as BasicShadowMap, C as ColorManagement, L as LinearSRGBColorSpace, c as SRGBColorSpace, N as NoToneMapping, A as ACESFilmicToneMapping, d as Layers, e as Color, f as RGBAFormat, U as UnsignedByteType, g as Vector3, h as Vector2, i as Clock, T as THREE, D as DoubleSide, j as REVISION, M as Mesh, I as IcosahedronGeometry, k as ShaderMaterial, l as Spherical, Q as Quaternion, m as MOUSE, n as TOUCH, o as Ray, p as Plane, q as DataTextureLoader, H as HalfFloatType, F as FloatType, r as DataUtils, t as LinearFilter, u as RedFormat, v as InstancedBufferGeometry, w as Float32BufferAttribute, x as InstancedInterleavedBuffer, y as InterleavedBufferAttribute, E as WireframeGeometry, G as Box3, J as Sphere, K as UniformsUtils, X as UniformsLib, Y as Vector4, Z as Line3, $ as Matrix4, a0 as MathUtils, a1 as Uniform, a2 as WebGLRenderTarget, a3 as DepthTexture, a4 as BackSide, a5 as ClampToEdgeWrapping, a6 as PlaneGeometry, a7 as UVMapping, a8 as DataTexture, a9 as Texture, aa as MeshBasicMaterial, ab as IntType, ac as ShortType, ad as ByteType, ae as UnsignedIntType, af as Loader, ag as LoadingManager, ah as LinearMipMapLinearFilter, ai as FileLoader, aj as NoBlending, ak as CubeReflectionMapping, al as EquirectangularReflectionMapping, am as CubeTextureLoader, an as WebGLCubeRenderTarget, ao as ConstraintSketch, ap as setSketchPlacement3D, aq as Sketch, ar as PROFILE_BACKEND_MARKER, as as FrozenShape, at as setShapeCompilePlan, au as hasAnyPorts, av as setShapePortsInternal, aw as markShapePortsUsed, ax as setParamOverrides, ay as DEFAULT_ACTIVE_BACKEND, az as isConstraintSketch, aA as updateConstraintValue, aB as getShapeCompilePlan, aC as resolveForgeRenderStyle, aD as publishSolverWasmRunDebug, aE as resolveForgeQualityPreset, aF as resolveImportPath, aG as BufferGeometry, aH as LineBasicMaterial, aI as Line$1, aJ as LineDashedMaterial, aK as DepthStencilFormat, aL as UnsignedInt248Type, aM as MeshNormalMaterial, aN as NearestFilter, aO as BasicDepthPacking, aP as EventDispatcher$1, aQ as NoColorSpace, aR as FrontSide, aS as Material, aT as AlwaysDepth, aU as BufferAttribute, aV as CanvasTexture, aW as Object3D, aX as FogExp2, aY as Fog, aZ as AmbientLight, a_ as HemisphereLight, a$ as SpotLight, b0 as PointLight, b1 as DirectionalLight, b2 as analyzeCollisionIntersections, b3 as shapeToGeometry, b4 as buildShapeFromCompilePlan, b5 as sketchToSvg, b6 as sketchToDxf, b7 as runScript, b8 as MeshPhysicalMaterial, b9 as LineSegments, ba as analyzeThicknessGeometry, bb as analyzeRoughnessGeometry, bc as getRenderStylePreset, bd as AdditiveBlending, be as CatmullRomCurve3, bf as TubeGeometry, bg as MeshStandardMaterial, bh as compileSdfNode3, bi as buildSdfRaymarchFragmentShader, bj as SDF_RAYMARCH_PROXY_VERTEX_SHADER, bk as Shape, bl as ShapeGeometry, bm as ShaderLib, bn as CylinderGeometry, bo as parseViewportCameraState, bp as createResolvedExplodeConfig, bq as explodeBoundsCenter, br as explodeMergeBounds, bs as resolveExplodeDirective, bt as computeExplodeMotion, bu as getSketchWorldMatrix, bv as explodeAdd, bw as hasExplodeOverride, bx as resolveExplodeLocalFanDirection, by as explodeMul, bz as explodeLeafFanStage, bA as normalizeCutPlane, bB as toClippingPlane, bC as findJointAnimationClip, bD as resolveJointAnimation, bE as resolveJointViewValues, bF as getShapePorts, bG as getShapeUsedPorts, bH as DEFAULT_VIEW_CONFIG, bI as getKernelFaceNameForTriangle, bJ as analyzePhysicalConnectivity, bK as analyzeDistanceInspection, bL as initKernel, bM as initSolverWasm } from "./distance-BEC2RjJi.js";
|
|
8
8
|
function getCsrfToken() {
|
|
9
9
|
const match = document.cookie.match(/(?:^|;\s*)fc-csrf-token=([^;]+)/);
|
|
10
10
|
return match == null ? void 0 : match[1];
|
|
@@ -856,7 +856,7 @@ function toRGB555(colorHex) {
|
|
|
856
856
|
if (!rgb) return 0;
|
|
857
857
|
return 32768 | rgb.r >> 3 << 10 | rgb.g >> 3 << 5 | rgb.b >> 3;
|
|
858
858
|
}
|
|
859
|
-
function rgbToHex(r2, g2, b2) {
|
|
859
|
+
function rgbToHex$1(r2, g2, b2) {
|
|
860
860
|
const toHex = (v) => v.toString(16).padStart(2, "0").toUpperCase();
|
|
861
861
|
return `#${toHex(r2)}${toHex(g2)}${toHex(b2)}`;
|
|
862
862
|
}
|
|
@@ -871,7 +871,7 @@ function buildPure3mfBuffer(objects, options = {}) {
|
|
|
871
871
|
if (obj.color) {
|
|
872
872
|
const rgb = parseHexColor(obj.color);
|
|
873
873
|
if (rgb) {
|
|
874
|
-
const hex = rgbToHex(rgb.r, rgb.g, rgb.b);
|
|
874
|
+
const hex = rgbToHex$1(rgb.r, rgb.g, rgb.b);
|
|
875
875
|
if (!colorMap.has(hex)) {
|
|
876
876
|
colorMap.set(hex, colors.length);
|
|
877
877
|
colors.push({ hex, objectIndices: [] });
|
|
@@ -908,7 +908,7 @@ function buildPure3mfBuffer(objects, options = {}) {
|
|
|
908
908
|
if (obj.color && hasColors) {
|
|
909
909
|
const rgb = parseHexColor(obj.color);
|
|
910
910
|
if (rgb) {
|
|
911
|
-
const hex = rgbToHex(rgb.r, rgb.g, rgb.b);
|
|
911
|
+
const hex = rgbToHex$1(rgb.r, rgb.g, rgb.b);
|
|
912
912
|
const colorIdx = colorMap.get(hex);
|
|
913
913
|
if (colorIdx !== void 0) {
|
|
914
914
|
pidAttr = ` pid="${colorgroupId}" pindex="${colorIdx}"`;
|
|
@@ -15788,7 +15788,7 @@ const CRASH_COOLDOWN_MS = 2e3;
|
|
|
15788
15788
|
class EvalWorkerClient {
|
|
15789
15789
|
constructor(workerFactory = () => new Worker(new URL(
|
|
15790
15790
|
/* @vite-ignore */
|
|
15791
|
-
"/assets/evalWorker-
|
|
15791
|
+
"/assets/evalWorker-CRvbzTXm.js",
|
|
15792
15792
|
import.meta.url
|
|
15793
15793
|
), { type: "module" })) {
|
|
15794
15794
|
__publicField(this, "worker", null);
|
|
@@ -17361,6 +17361,18 @@ const initialActive = (() => {
|
|
|
17361
17361
|
return fallback;
|
|
17362
17362
|
})();
|
|
17363
17363
|
const INITIAL_SAVED = {};
|
|
17364
|
+
const VIEW_INSPECT_CHANNELS = /* @__PURE__ */ new Set([
|
|
17365
|
+
"none",
|
|
17366
|
+
"mask",
|
|
17367
|
+
"connectivity",
|
|
17368
|
+
"distance",
|
|
17369
|
+
"collisions",
|
|
17370
|
+
"thickness",
|
|
17371
|
+
"roughness"
|
|
17372
|
+
]);
|
|
17373
|
+
function resolveViewInspectChannel(value) {
|
|
17374
|
+
return typeof value === "string" && VIEW_INSPECT_CHANNELS.has(value) ? value : "none";
|
|
17375
|
+
}
|
|
17364
17376
|
const initialViewPreferences = readViewPreferences();
|
|
17365
17377
|
const initialPreviewFile = resolvePreviewFile(initialActive, INITIAL_FILES);
|
|
17366
17378
|
const initialObjectSettingsByFile = (() => {
|
|
@@ -18119,6 +18131,12 @@ Switch to LOCAL mode or wait for the server to recover.`,
|
|
|
18119
18131
|
writeViewPreferences({ renderMode: mode });
|
|
18120
18132
|
set({ renderMode: mode });
|
|
18121
18133
|
},
|
|
18134
|
+
inspectChannel: resolveViewInspectChannel(initialViewPreferences.inspectChannel),
|
|
18135
|
+
setInspectChannel: (channel) => {
|
|
18136
|
+
const next = resolveViewInspectChannel(channel);
|
|
18137
|
+
writeViewPreferences({ inspectChannel: next });
|
|
18138
|
+
set({ inspectChannel: next });
|
|
18139
|
+
},
|
|
18122
18140
|
projectionMode: initialViewPreferences.projectionMode ?? "perspective",
|
|
18123
18141
|
setProjectionMode: (mode) => {
|
|
18124
18142
|
writeViewPreferences({ projectionMode: mode });
|
|
@@ -26690,6 +26708,140 @@ function ClippingManager({ active }) {
|
|
|
26690
26708
|
}, [gl, active]);
|
|
26691
26709
|
return null;
|
|
26692
26710
|
}
|
|
26711
|
+
const COLLISION_SOURCE_OPACITY = 0.22;
|
|
26712
|
+
const COLLISION_SOURCE_COLOR = [180, 200, 220];
|
|
26713
|
+
const COLLISION_HIGHLIGHT_COLOR = [255, 68, 16];
|
|
26714
|
+
const COLLISION_PALETTE = [
|
|
26715
|
+
COLLISION_HIGHLIGHT_COLOR,
|
|
26716
|
+
[0, 204, 255],
|
|
26717
|
+
[255, 214, 0],
|
|
26718
|
+
[66, 220, 120],
|
|
26719
|
+
[255, 76, 196],
|
|
26720
|
+
[142, 106, 255],
|
|
26721
|
+
[255, 145, 48],
|
|
26722
|
+
[86, 232, 202],
|
|
26723
|
+
[210, 245, 60],
|
|
26724
|
+
[255, 120, 120],
|
|
26725
|
+
[80, 150, 255],
|
|
26726
|
+
[190, 110, 60]
|
|
26727
|
+
];
|
|
26728
|
+
const MASK_PALETTE = [
|
|
26729
|
+
[230, 25, 75],
|
|
26730
|
+
[60, 180, 75],
|
|
26731
|
+
[255, 225, 25],
|
|
26732
|
+
[0, 130, 200],
|
|
26733
|
+
[245, 130, 48],
|
|
26734
|
+
[145, 30, 180],
|
|
26735
|
+
[70, 240, 240],
|
|
26736
|
+
[240, 50, 230],
|
|
26737
|
+
[210, 245, 60],
|
|
26738
|
+
[250, 190, 190],
|
|
26739
|
+
[0, 128, 128],
|
|
26740
|
+
[230, 190, 255],
|
|
26741
|
+
[170, 110, 40],
|
|
26742
|
+
[255, 250, 200],
|
|
26743
|
+
[128, 0, 0],
|
|
26744
|
+
[170, 255, 195],
|
|
26745
|
+
[128, 128, 0],
|
|
26746
|
+
[255, 215, 180],
|
|
26747
|
+
[0, 0, 128],
|
|
26748
|
+
[128, 128, 128]
|
|
26749
|
+
];
|
|
26750
|
+
const DISTANCE_NEAR_COLOR = [66, 220, 120];
|
|
26751
|
+
const DISTANCE_MID_COLOR = [255, 214, 0];
|
|
26752
|
+
const DISTANCE_FAR_COLOR = [255, 68, 16];
|
|
26753
|
+
const DISTANCE_UNKNOWN_COLOR = [128, 128, 128];
|
|
26754
|
+
function rgbToHex(color2) {
|
|
26755
|
+
return `#${color2.map((value) => value.toString(16).padStart(2, "0")).join("")}`;
|
|
26756
|
+
}
|
|
26757
|
+
function maskRgbForIndex(index) {
|
|
26758
|
+
return MASK_PALETTE[index % MASK_PALETTE.length];
|
|
26759
|
+
}
|
|
26760
|
+
function maskColorForIndex(index) {
|
|
26761
|
+
return rgbToHex(maskRgbForIndex(index));
|
|
26762
|
+
}
|
|
26763
|
+
function collisionColorForIndex(index) {
|
|
26764
|
+
return rgbToHex(COLLISION_PALETTE[(index - 1) % COLLISION_PALETTE.length]);
|
|
26765
|
+
}
|
|
26766
|
+
function lerp$1(a2, b2, t2) {
|
|
26767
|
+
return a2 + (b2 - a2) * Math.max(0, Math.min(1, t2));
|
|
26768
|
+
}
|
|
26769
|
+
function lerpRgb(a2, b2, t2) {
|
|
26770
|
+
return [Math.round(lerp$1(a2[0], b2[0], t2)), Math.round(lerp$1(a2[1], b2[1], t2)), Math.round(lerp$1(a2[2], b2[2], t2))];
|
|
26771
|
+
}
|
|
26772
|
+
function distanceColorForRootDistance(distance, maxDistance) {
|
|
26773
|
+
if (!Number.isFinite(distance)) return rgbToHex(DISTANCE_UNKNOWN_COLOR);
|
|
26774
|
+
if (!Number.isFinite(maxDistance) || maxDistance <= 1e-9) return rgbToHex(DISTANCE_NEAR_COLOR);
|
|
26775
|
+
const t2 = Math.max(0, Math.min(1, distance / maxDistance));
|
|
26776
|
+
if (t2 <= 0.5) return rgbToHex(lerpRgb(DISTANCE_NEAR_COLOR, DISTANCE_MID_COLOR, t2 * 2));
|
|
26777
|
+
return rgbToHex(lerpRgb(DISTANCE_MID_COLOR, DISTANCE_FAR_COLOR, (t2 - 0.5) * 2));
|
|
26778
|
+
}
|
|
26779
|
+
function matrixToCollisionMat4(matrix) {
|
|
26780
|
+
if (!matrix) return void 0;
|
|
26781
|
+
const e2 = matrix.elements;
|
|
26782
|
+
return [e2[0], e2[1], e2[2], e2[3], e2[4], e2[5], e2[6], e2[7], e2[8], e2[9], e2[10], e2[11], e2[12], e2[13], e2[14], e2[15]];
|
|
26783
|
+
}
|
|
26784
|
+
function buildCollisionEntries(objects, objectSettings, objectMatrices) {
|
|
26785
|
+
const entries = [];
|
|
26786
|
+
objects.forEach((obj) => {
|
|
26787
|
+
var _a3;
|
|
26788
|
+
if (!obj.shape) return;
|
|
26789
|
+
if (((_a3 = objectSettings[obj.id]) == null ? void 0 : _a3.visible) === false) return;
|
|
26790
|
+
try {
|
|
26791
|
+
const bb = obj.shape.boundingBox();
|
|
26792
|
+
entries.push({
|
|
26793
|
+
id: obj.id,
|
|
26794
|
+
name: obj.name,
|
|
26795
|
+
shape: obj.shape,
|
|
26796
|
+
min: [bb.min[0], bb.min[1], bb.min[2]],
|
|
26797
|
+
max: [bb.max[0], bb.max[1], bb.max[2]],
|
|
26798
|
+
transform: matrixToCollisionMat4(objectMatrices[obj.id]),
|
|
26799
|
+
groupName: obj.groupName,
|
|
26800
|
+
treePath: obj.treePath,
|
|
26801
|
+
mock: obj.mock
|
|
26802
|
+
});
|
|
26803
|
+
} catch {
|
|
26804
|
+
}
|
|
26805
|
+
});
|
|
26806
|
+
return entries;
|
|
26807
|
+
}
|
|
26808
|
+
function CollisionInspectionOverlay({
|
|
26809
|
+
objects,
|
|
26810
|
+
objectSettings,
|
|
26811
|
+
objectMatrices
|
|
26812
|
+
}) {
|
|
26813
|
+
const collisionGeometries = reactExports.useMemo(() => {
|
|
26814
|
+
const report = analyzeCollisionIntersections(buildCollisionEntries(objects, objectSettings, objectMatrices));
|
|
26815
|
+
return report.collisions.flatMap((collision) => {
|
|
26816
|
+
try {
|
|
26817
|
+
const geometry = shapeToGeometry(collision.shape);
|
|
26818
|
+
return [
|
|
26819
|
+
{
|
|
26820
|
+
id: collision.id,
|
|
26821
|
+
color: collisionColorForIndex(collision.index),
|
|
26822
|
+
solid: geometry.solid,
|
|
26823
|
+
edges: geometry.edges
|
|
26824
|
+
}
|
|
26825
|
+
];
|
|
26826
|
+
} catch {
|
|
26827
|
+
return [];
|
|
26828
|
+
}
|
|
26829
|
+
});
|
|
26830
|
+
}, [objectMatrices, objectSettings, objects]);
|
|
26831
|
+
reactExports.useEffect(() => {
|
|
26832
|
+
return () => {
|
|
26833
|
+
collisionGeometries.forEach((geometry) => {
|
|
26834
|
+
var _a3;
|
|
26835
|
+
geometry.solid.dispose();
|
|
26836
|
+
(_a3 = geometry.edges) == null ? void 0 : _a3.dispose();
|
|
26837
|
+
});
|
|
26838
|
+
};
|
|
26839
|
+
}, [collisionGeometries]);
|
|
26840
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("group", { children: collisionGeometries.map((geometry) => /* @__PURE__ */ jsxRuntimeExports.jsxs("group", { children: [
|
|
26841
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: geometry.solid, renderOrder: 20, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx("meshBasicMaterial", { color: geometry.color, depthTest: true, depthWrite: true, toneMapped: false }) }),
|
|
26842
|
+
geometry.edges && /* @__PURE__ */ jsxRuntimeExports.jsx("lineSegments", { geometry: geometry.edges, renderOrder: 21, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx("lineBasicMaterial", { color: "#ffffff", transparent: true, opacity: 0.65, depthTest: false, toneMapped: false }) })
|
|
26843
|
+
] }, geometry.id)) });
|
|
26844
|
+
}
|
|
26693
26845
|
function ConstructionGhostOverlay({ matrix }) {
|
|
26694
26846
|
const ghost = useForgeStore((s) => s.constructionGhost);
|
|
26695
26847
|
const { solidGeo, edgesGeo } = reactExports.useMemo(() => {
|
|
@@ -28914,7 +29066,7 @@ function generateReportInWorker(options) {
|
|
|
28914
29066
|
return new Promise((resolve2, reject) => {
|
|
28915
29067
|
const worker = new Worker(new URL(
|
|
28916
29068
|
/* @vite-ignore */
|
|
28917
|
-
"/assets/reportWorker-
|
|
29069
|
+
"/assets/reportWorker-BNWEnRg1.js",
|
|
28918
29070
|
import.meta.url
|
|
28919
29071
|
), { type: "module" });
|
|
28920
29072
|
const cleanup = () => {
|
|
@@ -32192,6 +32344,8 @@ function ForgeObject({
|
|
|
32192
32344
|
settings,
|
|
32193
32345
|
renderStyle,
|
|
32194
32346
|
renderMode,
|
|
32347
|
+
inspectChannel = "none",
|
|
32348
|
+
inspectColor,
|
|
32195
32349
|
isInteracting,
|
|
32196
32350
|
matrix,
|
|
32197
32351
|
isHovered,
|
|
@@ -32228,14 +32382,30 @@ function ForgeObject({
|
|
|
32228
32382
|
};
|
|
32229
32383
|
}
|
|
32230
32384
|
}, [obj.shape]);
|
|
32385
|
+
const inspectionGeo = reactExports.useMemo(() => {
|
|
32386
|
+
if (!solidGeo) return null;
|
|
32387
|
+
try {
|
|
32388
|
+
if (inspectChannel === "thickness") return analyzeThicknessGeometry(solidGeo).geometry;
|
|
32389
|
+
if (inspectChannel === "roughness") return analyzeRoughnessGeometry(solidGeo).geometry;
|
|
32390
|
+
return null;
|
|
32391
|
+
} catch {
|
|
32392
|
+
return null;
|
|
32393
|
+
}
|
|
32394
|
+
}, [inspectChannel, solidGeo]);
|
|
32231
32395
|
reactExports.useEffect(() => {
|
|
32232
32396
|
return () => {
|
|
32233
32397
|
solidGeo == null ? void 0 : solidGeo.dispose();
|
|
32234
32398
|
edgesGeo == null ? void 0 : edgesGeo.dispose();
|
|
32235
32399
|
};
|
|
32236
32400
|
}, [edgesGeo, solidGeo]);
|
|
32401
|
+
reactExports.useEffect(() => {
|
|
32402
|
+
return () => {
|
|
32403
|
+
inspectionGeo == null ? void 0 : inspectionGeo.dispose();
|
|
32404
|
+
};
|
|
32405
|
+
}, [inspectionGeo]);
|
|
32237
32406
|
if (!solidGeo || !settings.visible) return null;
|
|
32238
32407
|
const effectiveRenderMode = isInteracting && renderMode === "overlay" ? "solid" : renderMode;
|
|
32408
|
+
const isInspecting = inspectChannel !== "none";
|
|
32239
32409
|
const renderStylePreset = getRenderStylePreset(renderStyle);
|
|
32240
32410
|
const materialDefaults = renderStylePreset.material;
|
|
32241
32411
|
const authoredMaterialOpacity = (_a3 = obj.materialProps) == null ? void 0 : _a3.opacity;
|
|
@@ -32247,9 +32417,9 @@ function ForgeObject({
|
|
|
32247
32417
|
const materialOpacity = Math.min(meshOpacity, styleOpacity);
|
|
32248
32418
|
const transmission = authoredMaterialTransmission ?? transparentDefaults.transmission;
|
|
32249
32419
|
const isTransparent = materialOpacity < 1 || transmission > 0;
|
|
32250
|
-
const showSolid = effectiveRenderMode !== "wireframe";
|
|
32251
|
-
const showEdges = effectiveRenderMode === "overlay";
|
|
32252
|
-
const showWire = effectiveRenderMode === "wireframe";
|
|
32420
|
+
const showSolid = isInspecting || effectiveRenderMode !== "wireframe";
|
|
32421
|
+
const showEdges = !isInspecting && effectiveRenderMode === "overlay";
|
|
32422
|
+
const showWire = !isInspecting && effectiveRenderMode === "wireframe";
|
|
32253
32423
|
const effectiveClippingPlanes = clippingPlanes ?? [];
|
|
32254
32424
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
32255
32425
|
"group",
|
|
@@ -32263,7 +32433,30 @@ function ForgeObject({
|
|
|
32263
32433
|
onDoubleClick,
|
|
32264
32434
|
onContextMenu,
|
|
32265
32435
|
children: [
|
|
32266
|
-
showSolid && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
32436
|
+
showSolid && (inspectChannel === "mask" || inspectChannel === "connectivity" || inspectChannel === "distance") && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
32437
|
+
"meshBasicMaterial",
|
|
32438
|
+
{
|
|
32439
|
+
color: inspectColor ?? settings.color,
|
|
32440
|
+
side: DoubleSide,
|
|
32441
|
+
toneMapped: false,
|
|
32442
|
+
clippingPlanes: effectiveClippingPlanes
|
|
32443
|
+
}
|
|
32444
|
+
) }),
|
|
32445
|
+
showSolid && (inspectChannel === "thickness" || inspectChannel === "roughness") && inspectionGeo && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: inspectionGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("meshBasicMaterial", { vertexColors: true, side: DoubleSide, toneMapped: false, clippingPlanes: effectiveClippingPlanes }) }),
|
|
32446
|
+
showSolid && inspectChannel === "collisions" && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
32447
|
+
"meshPhysicalMaterial",
|
|
32448
|
+
{
|
|
32449
|
+
color: rgbToHex(COLLISION_SOURCE_COLOR),
|
|
32450
|
+
roughness: 0.75,
|
|
32451
|
+
metalness: 0,
|
|
32452
|
+
side: DoubleSide,
|
|
32453
|
+
transparent: true,
|
|
32454
|
+
opacity: COLLISION_SOURCE_OPACITY,
|
|
32455
|
+
depthWrite: false,
|
|
32456
|
+
clippingPlanes: effectiveClippingPlanes
|
|
32457
|
+
}
|
|
32458
|
+
) }),
|
|
32459
|
+
showSolid && inspectChannel === "none" && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, userData: { forgeMesh: true }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
32267
32460
|
"meshPhysicalMaterial",
|
|
32268
32461
|
{
|
|
32269
32462
|
color: settings.color,
|
|
@@ -32288,7 +32481,7 @@ function ForgeObject({
|
|
|
32288
32481
|
clippingPlanes: effectiveClippingPlanes
|
|
32289
32482
|
}
|
|
32290
32483
|
) }),
|
|
32291
|
-
showSolid && hasAuthoredTransparency && renderStylePreset.glassShell.enabled && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, scale: renderStylePreset.glassShell.scale, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
32484
|
+
showSolid && inspectChannel === "none" && hasAuthoredTransparency && renderStylePreset.glassShell.enabled && /* @__PURE__ */ jsxRuntimeExports.jsx("mesh", { geometry: solidGeo, scale: renderStylePreset.glassShell.scale, raycast: () => null, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
32292
32485
|
"meshBasicMaterial",
|
|
32293
32486
|
{
|
|
32294
32487
|
color: renderStylePreset.glassShell.color,
|
|
@@ -37855,6 +38048,7 @@ function useViewportState() {
|
|
|
37855
38048
|
const files = useForgeStore((s) => s.files);
|
|
37856
38049
|
const renderMode = useForgeStore((s) => s.renderMode);
|
|
37857
38050
|
const renderStyle = useForgeStore((s) => s.renderStyle);
|
|
38051
|
+
const inspectChannel = useForgeStore((s) => s.inspectChannel);
|
|
37858
38052
|
const projectionMode = useForgeStore((s) => s.projectionMode);
|
|
37859
38053
|
const gridEnabled = useForgeStore((s) => s.gridEnabled);
|
|
37860
38054
|
const gridSize = useForgeStore((s) => s.gridSize);
|
|
@@ -38181,6 +38375,7 @@ function useViewportState() {
|
|
|
38181
38375
|
files,
|
|
38182
38376
|
renderMode,
|
|
38183
38377
|
renderStyle,
|
|
38378
|
+
inspectChannel,
|
|
38184
38379
|
projectionMode,
|
|
38185
38380
|
gridEnabled,
|
|
38186
38381
|
gridSize,
|
|
@@ -39510,6 +39705,58 @@ function ModelJourneyBar({
|
|
|
39510
39705
|
}
|
|
39511
39706
|
);
|
|
39512
39707
|
}
|
|
39708
|
+
function transformedShapeBounds(obj, matrix) {
|
|
39709
|
+
if (!obj.shape) return null;
|
|
39710
|
+
try {
|
|
39711
|
+
const bb = obj.shape.boundingBox();
|
|
39712
|
+
const bounds = new Box3();
|
|
39713
|
+
if (!expandBoundsByTransformedAabb(bounds, bb.min, bb.max, matrix)) return null;
|
|
39714
|
+
return isFiniteBox3(bounds) ? bounds : null;
|
|
39715
|
+
} catch {
|
|
39716
|
+
return null;
|
|
39717
|
+
}
|
|
39718
|
+
}
|
|
39719
|
+
function bodyCountForShape(obj) {
|
|
39720
|
+
var _a3, _b2;
|
|
39721
|
+
try {
|
|
39722
|
+
const bodyCount = (_b2 = (_a3 = obj.shape) == null ? void 0 : _a3.numBodies) == null ? void 0 : _b2.call(_a3);
|
|
39723
|
+
return typeof bodyCount === "number" && Number.isFinite(bodyCount) ? Math.max(0, Math.round(bodyCount)) : 1;
|
|
39724
|
+
} catch {
|
|
39725
|
+
return 1;
|
|
39726
|
+
}
|
|
39727
|
+
}
|
|
39728
|
+
function buildPhysicalConnectivityEntries(objects, objectSettings, objectMatrices) {
|
|
39729
|
+
const entries = [];
|
|
39730
|
+
objects.forEach((obj) => {
|
|
39731
|
+
var _a3;
|
|
39732
|
+
if (!obj.shape) return;
|
|
39733
|
+
if (((_a3 = objectSettings[obj.id]) == null ? void 0 : _a3.visible) === false) return;
|
|
39734
|
+
const bounds = transformedShapeBounds(obj, objectMatrices[obj.id] ?? new Matrix4());
|
|
39735
|
+
if (!bounds) return;
|
|
39736
|
+
entries.push({
|
|
39737
|
+
id: obj.id,
|
|
39738
|
+
name: obj.name,
|
|
39739
|
+
shape: obj.shape,
|
|
39740
|
+
min: [bounds.min.x, bounds.min.y, bounds.min.z],
|
|
39741
|
+
max: [bounds.max.x, bounds.max.y, bounds.max.z],
|
|
39742
|
+
groupName: obj.groupName,
|
|
39743
|
+
treePath: obj.treePath,
|
|
39744
|
+
mock: obj.mock,
|
|
39745
|
+
bodyCount: bodyCountForShape(obj)
|
|
39746
|
+
});
|
|
39747
|
+
});
|
|
39748
|
+
return entries;
|
|
39749
|
+
}
|
|
39750
|
+
function connectivityColorByObjectId(entries) {
|
|
39751
|
+
const report = analyzePhysicalConnectivity(entries);
|
|
39752
|
+
return Object.fromEntries(report.objects.map((object) => [object.id, maskColorForIndex(object.componentIndex - 1)]));
|
|
39753
|
+
}
|
|
39754
|
+
function distanceColorByObjectId(entries) {
|
|
39755
|
+
const report = analyzeDistanceInspection(entries);
|
|
39756
|
+
return Object.fromEntries(
|
|
39757
|
+
report.objects.map((object) => [object.id, distanceColorForRootDistance(object.rootDistance, report.maxRootDistance)])
|
|
39758
|
+
);
|
|
39759
|
+
}
|
|
39513
39760
|
const anchorTransform = {
|
|
39514
39761
|
center: "translate(-50%, -50%)",
|
|
39515
39762
|
top: "translate(-50%, 0)",
|
|
@@ -39677,6 +39924,7 @@ function Viewport() {
|
|
|
39677
39924
|
evaluationPhase,
|
|
39678
39925
|
renderMode,
|
|
39679
39926
|
renderStyle,
|
|
39927
|
+
inspectChannel,
|
|
39680
39928
|
projectionMode,
|
|
39681
39929
|
gridEnabled,
|
|
39682
39930
|
gridSize,
|
|
@@ -39760,6 +40008,7 @@ function Viewport() {
|
|
|
39760
40008
|
const contextMenuRef = reactExports.useRef(null);
|
|
39761
40009
|
const t2 = themes[themeName];
|
|
39762
40010
|
const renderStylePreset = reactExports.useMemo(() => getRenderStylePreset(renderStyle), [renderStyle]);
|
|
40011
|
+
const inspectChannelActive = inspectChannel !== "none";
|
|
39763
40012
|
const hasVisibleSdfObjects = objects.some((obj) => {
|
|
39764
40013
|
var _a4;
|
|
39765
40014
|
return obj.sdf && (((_a4 = objectSettings[obj.id]) == null ? void 0 : _a4.visible) ?? true);
|
|
@@ -39776,6 +40025,11 @@ function Viewport() {
|
|
|
39776
40025
|
}
|
|
39777
40026
|
return next;
|
|
39778
40027
|
}, [constructionGhost, focusedObjectIdSet, objectSettings, objects]);
|
|
40028
|
+
const physicalInspectColorByObjectId = reactExports.useMemo(() => {
|
|
40029
|
+
if (inspectChannel !== "connectivity" && inspectChannel !== "distance") return {};
|
|
40030
|
+
const entries = buildPhysicalConnectivityEntries(objects, objectSettings, objectMatrices);
|
|
40031
|
+
return inspectChannel === "connectivity" ? connectivityColorByObjectId(entries) : distanceColorByObjectId(entries);
|
|
40032
|
+
}, [inspectChannel, objectMatrices, objectSettings, objects]);
|
|
39779
40033
|
const handlers = useViewportHandlers({
|
|
39780
40034
|
containerRef,
|
|
39781
40035
|
contextMenuRef,
|
|
@@ -39839,7 +40093,7 @@ function Viewport() {
|
|
|
39839
40093
|
Canvas,
|
|
39840
40094
|
{
|
|
39841
40095
|
style: {
|
|
39842
|
-
background: renderStyle === "classic" ? t2.viewportBg : renderStylePreset.background,
|
|
40096
|
+
background: inspectChannelActive ? "#000000" : renderStyle === "classic" ? t2.viewportBg : renderStylePreset.background,
|
|
39843
40097
|
cursor: measureMode ? "crosshair" : "default"
|
|
39844
40098
|
},
|
|
39845
40099
|
dpr: canvasDpr,
|
|
@@ -39907,8 +40161,8 @@ function Viewport() {
|
|
|
39907
40161
|
)
|
|
39908
40162
|
] }),
|
|
39909
40163
|
/* @__PURE__ */ jsxRuntimeExports.jsx(ClippingManager, { active: hasAnyObjectCutPlanes }),
|
|
39910
|
-
sectionExplorerEnabled && /* @__PURE__ */ jsxRuntimeExports.jsx(SectionExplorerGizmo, { size: sectionGuideSize }),
|
|
39911
|
-
sectionPlaneGuidesEnabled && activeCutPlaneDefs.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40164
|
+
!inspectChannelActive && sectionExplorerEnabled && /* @__PURE__ */ jsxRuntimeExports.jsx(SectionExplorerGizmo, { size: sectionGuideSize }),
|
|
40165
|
+
!inspectChannelActive && sectionPlaneGuidesEnabled && activeCutPlaneDefs.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
39912
40166
|
SectionPlaneGuides,
|
|
39913
40167
|
{
|
|
39914
40168
|
cutPlanes: scriptCutPlaneDefs,
|
|
@@ -39940,6 +40194,8 @@ function Viewport() {
|
|
|
39940
40194
|
settings: effectiveSettings,
|
|
39941
40195
|
renderStyle,
|
|
39942
40196
|
renderMode,
|
|
40197
|
+
inspectChannel,
|
|
40198
|
+
inspectColor: physicalInspectColorByObjectId[obj.id] ?? maskColorForIndex(objIndex),
|
|
39943
40199
|
isInteracting: isViewportInteracting,
|
|
39944
40200
|
matrix,
|
|
39945
40201
|
isHovered,
|
|
@@ -40004,7 +40260,8 @@ function Viewport() {
|
|
|
40004
40260
|
}
|
|
40005
40261
|
return null;
|
|
40006
40262
|
}),
|
|
40007
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40263
|
+
inspectChannel === "collisions" && /* @__PURE__ */ jsxRuntimeExports.jsx(CollisionInspectionOverlay, { objects, objectSettings, objectMatrices }),
|
|
40264
|
+
!inspectChannelActive && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40008
40265
|
SectionCaps,
|
|
40009
40266
|
{
|
|
40010
40267
|
sceneVersion,
|
|
@@ -40016,17 +40273,17 @@ function Viewport() {
|
|
|
40016
40273
|
isInteracting: isViewportInteracting
|
|
40017
40274
|
}
|
|
40018
40275
|
),
|
|
40019
|
-
constructionGhost && /* @__PURE__ */ jsxRuntimeExports.jsx(ConstructionGhostOverlay, { matrix: constructionGhostMatrix }),
|
|
40020
|
-
historyMode && /* @__PURE__ */ jsxRuntimeExports.jsx(ConstructionHistoryOverlay, { objectMatrices, objectSettings }),
|
|
40021
|
-
hoveredJointOverlay && /* @__PURE__ */ jsxRuntimeExports.jsx(HoveredJointOverlay, { state: hoveredJointOverlay, config: jointOverlayConfig }),
|
|
40022
|
-
dimensionsVisible && dimensions.map((d) => /* @__PURE__ */ jsxRuntimeExports.jsx(DimensionAnnotation, { def: d, lengthUnit }, d.id)),
|
|
40023
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(RenderLabelsOverlay, { labels: renderLabels }),
|
|
40024
|
-
attachmentsVisible !== "none" && attachmentPoints.map((ap) => {
|
|
40276
|
+
!inspectChannelActive && constructionGhost && /* @__PURE__ */ jsxRuntimeExports.jsx(ConstructionGhostOverlay, { matrix: constructionGhostMatrix }),
|
|
40277
|
+
!inspectChannelActive && historyMode && /* @__PURE__ */ jsxRuntimeExports.jsx(ConstructionHistoryOverlay, { objectMatrices, objectSettings }),
|
|
40278
|
+
!inspectChannelActive && hoveredJointOverlay && /* @__PURE__ */ jsxRuntimeExports.jsx(HoveredJointOverlay, { state: hoveredJointOverlay, config: jointOverlayConfig }),
|
|
40279
|
+
!inspectChannelActive && dimensionsVisible && dimensions.map((d) => /* @__PURE__ */ jsxRuntimeExports.jsx(DimensionAnnotation, { def: d, lengthUnit }, d.id)),
|
|
40280
|
+
!inspectChannelActive && /* @__PURE__ */ jsxRuntimeExports.jsx(RenderLabelsOverlay, { labels: renderLabels }),
|
|
40281
|
+
!inspectChannelActive && attachmentsVisible !== "none" && attachmentPoints.map((ap) => {
|
|
40025
40282
|
const matrix = objectMatrices[ap.objectId];
|
|
40026
40283
|
return matrix ? /* @__PURE__ */ jsxRuntimeExports.jsx("group", { matrixAutoUpdate: false, matrix, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ConnectorAttachmentAnnotation, { def: ap }) }, `${ap.objectId}:${ap.name}`) : /* @__PURE__ */ jsxRuntimeExports.jsx(ConnectorAttachmentAnnotation, { def: ap }, `${ap.objectId}:${ap.name}`);
|
|
40027
40284
|
}),
|
|
40028
40285
|
/* @__PURE__ */ jsxRuntimeExports.jsx(MeasureTool, {}),
|
|
40029
|
-
debugHighlights3D.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(DebugHighlightsOverlay, { highlights: debugHighlights3D }),
|
|
40286
|
+
!inspectChannelActive && debugHighlights3D.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(DebugHighlightsOverlay, { highlights: debugHighlights3D }),
|
|
40030
40287
|
drawFlagEnabled && /* @__PURE__ */ jsxRuntimeExports.jsx(DrawCanvas, {}),
|
|
40031
40288
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40032
40289
|
PerformanceInfoSampler,
|
|
@@ -40039,7 +40296,7 @@ function Viewport() {
|
|
|
40039
40296
|
}
|
|
40040
40297
|
),
|
|
40041
40298
|
/* @__PURE__ */ jsxRuntimeExports.jsx(ZoomSampler, { onZoomChange: setZoomMmPerPx }),
|
|
40042
|
-
gridEnabled && !isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40299
|
+
!inspectChannelActive && gridEnabled && !isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40043
40300
|
Grid,
|
|
40044
40301
|
{
|
|
40045
40302
|
args: [500, 500],
|
|
@@ -40054,7 +40311,7 @@ function Viewport() {
|
|
|
40054
40311
|
infiniteGrid: true
|
|
40055
40312
|
}
|
|
40056
40313
|
),
|
|
40057
|
-
!isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40314
|
+
!inspectChannelActive && !isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40058
40315
|
SdfRaymarchLayer,
|
|
40059
40316
|
{
|
|
40060
40317
|
objects,
|
|
@@ -40069,11 +40326,11 @@ function Viewport() {
|
|
|
40069
40326
|
onContextMenu: (obj, event) => handleObjectContextMenu(obj, event)
|
|
40070
40327
|
}
|
|
40071
40328
|
),
|
|
40072
|
-
!isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(LabeledAxes, {}),
|
|
40073
|
-
isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(SketchAxes, {}),
|
|
40329
|
+
!inspectChannelActive && !isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(LabeledAxes, {}),
|
|
40330
|
+
!inspectChannelActive && isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(SketchAxes, {}),
|
|
40074
40331
|
isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(CursorTracker, { onMove: (x, y) => setCursorPos({ x, y }) }),
|
|
40075
40332
|
isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(SketchRulersUpdater, { hCanvasRef: hRulerRef, vCanvasRef: vRulerRef }),
|
|
40076
|
-
gridEnabled && isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40333
|
+
!inspectChannelActive && gridEnabled && isSketchOnly && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
40077
40334
|
Grid,
|
|
40078
40335
|
{
|
|
40079
40336
|
args: [500, 500],
|
|
@@ -40684,7 +40941,7 @@ function Viewport() {
|
|
|
40684
40941
|
}
|
|
40685
40942
|
);
|
|
40686
40943
|
}
|
|
40687
|
-
const EditorApp$1 = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-
|
|
40944
|
+
const EditorApp$1 = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-CuiPbtn5.js"), true ? __vite__mapDeps([0]) : void 0).then((m2) => ({ default: m2.EditorApp })));
|
|
40688
40945
|
const PENDING_SHARE_COPY_KEY = "fc-pending-share-copy";
|
|
40689
40946
|
function storePendingShareCopy(shareId) {
|
|
40690
40947
|
sessionStorage.setItem(PENDING_SHARE_COPY_KEY, shareId);
|
|
@@ -40871,15 +41128,15 @@ const PublishedModelPage$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Objec
|
|
|
40871
41128
|
consumePendingShareCopy,
|
|
40872
41129
|
storePendingShareCopy
|
|
40873
41130
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
40874
|
-
reactExports.lazy(() => __vitePreload(() => import("./LandingPageProofDriven-
|
|
40875
|
-
const DocsPage = reactExports.lazy(() => __vitePreload(() => import("./DocsPage-
|
|
40876
|
-
reactExports.lazy(() => __vitePreload(() => import("./BlogPage-
|
|
40877
|
-
reactExports.lazy(() => __vitePreload(() => import("./AdminPage-
|
|
41131
|
+
reactExports.lazy(() => __vitePreload(() => import("./LandingPageProofDriven-DB9fQd5P.js"), true ? __vite__mapDeps([1]) : void 0).then((m2) => ({ default: m2.LandingPageProofDriven })));
|
|
41132
|
+
const DocsPage = reactExports.lazy(() => __vitePreload(() => import("./DocsPage-Blz3Tp4j.js"), true ? [] : void 0).then((m2) => ({ default: m2.DocsPage })));
|
|
41133
|
+
reactExports.lazy(() => __vitePreload(() => import("./BlogPage-Bl_sKeWb.js"), true ? [] : void 0).then((m2) => ({ default: m2.BlogPage })));
|
|
41134
|
+
reactExports.lazy(() => __vitePreload(() => import("./AdminPage-Da6hhpJx.js"), true ? [] : void 0).then((m2) => ({ default: m2.AdminPage })));
|
|
40878
41135
|
reactExports.lazy(() => __vitePreload(() => Promise.resolve().then(() => PublishedModelPage$1), true ? void 0 : void 0).then((m2) => ({ default: m2.PublishedModelPage })));
|
|
40879
|
-
reactExports.lazy(() => __vitePreload(() => import("./SettingsPage-
|
|
40880
|
-
reactExports.lazy(() => __vitePreload(() => import("./PricingPage-
|
|
40881
|
-
const EditorApp = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-
|
|
40882
|
-
const EmbedViewer = reactExports.lazy(() => __vitePreload(() => import("./EmbedViewer-
|
|
41136
|
+
reactExports.lazy(() => __vitePreload(() => import("./SettingsPage-VVQNrCAg.js"), true ? [] : void 0).then((m2) => ({ default: m2.SettingsPage })));
|
|
41137
|
+
reactExports.lazy(() => __vitePreload(() => import("./PricingPage-BMxYT_F0.js"), true ? __vite__mapDeps([2,1]) : void 0).then((m2) => ({ default: m2.PricingPage })));
|
|
41138
|
+
const EditorApp = reactExports.lazy(() => __vitePreload(() => import("./EditorApp-CuiPbtn5.js"), true ? __vite__mapDeps([0]) : void 0).then((m2) => ({ default: m2.EditorApp })));
|
|
41139
|
+
const EmbedViewer = reactExports.lazy(() => __vitePreload(() => import("./EmbedViewer-BFG6-Ufm.js"), true ? [] : void 0).then((m2) => ({ default: m2.EmbedViewer })));
|
|
40883
41140
|
const embedMode = isEmbedMode() && !window.location.pathname.startsWith("/m/");
|
|
40884
41141
|
const EDITABLE_CRASH_FILE = /\.(?:forge\.js|[cm]?[jt]sx?|json|md|txt|svg)$/i;
|
|
40885
41142
|
function firstMeaningfulLine(text) {
|