abstract-3d 4.1.3 → 4.1.5
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/lib/renderers/three/appearance/appearance.d.ts.map +1 -1
- package/lib/renderers/three/appearance/appearance.js +6 -2
- package/lib/renderers/three/appearance/appearance.js.map +1 -1
- package/lib/renderers/three/camera/camera.d.ts +3 -2
- package/lib/renderers/three/camera/camera.d.ts.map +1 -1
- package/lib/renderers/three/camera/camera.js +12 -0
- package/lib/renderers/three/camera/camera.js.map +1 -1
- package/lib/renderers/three/camera/gizmo.d.ts +6 -1
- package/lib/renderers/three/camera/gizmo.d.ts.map +1 -1
- package/lib/renderers/three/camera/gizmo.js +60 -2
- package/lib/renderers/three/camera/gizmo.js.map +1 -1
- package/lib/renderers/three/viewer/viewer.d.ts +14 -1
- package/lib/renderers/three/viewer/viewer.d.ts.map +1 -1
- package/lib/renderers/three/viewer/viewer.js +102 -26
- package/lib/renderers/three/viewer/viewer.js.map +1 -1
- package/package.json +1 -1
- package/src/renderers/three/appearance/appearance.test.ts +6 -0
- package/src/renderers/three/appearance/appearance.ts +6 -2
- package/src/renderers/three/camera/camera.ts +16 -3
- package/src/renderers/three/camera/gizmo.ts +67 -2
- package/src/renderers/three/viewer/viewer.ts +114 -26
- package/lib/renderers/svg/svg-order.d.ts +0 -9
- package/lib/renderers/svg/svg-order.d.ts.map +0 -1
- package/lib/renderers/svg/svg-order.js +0 -148
- package/lib/renderers/svg/svg-order.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appearance.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/appearance/appearance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE1D,gHAAgH;AAEhH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAC3D,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1D,wIAAwI;IACxI,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,+GAA+G;AAC/G,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjG,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,mCAAmC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,gGAAgG;IAChG,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,uGAAuG;AACvG,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,QAAQ,IAAI,CAAC;AAgB1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,CAKrH;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,WAAW,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"appearance.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/appearance/appearance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE1D,gHAAgH;AAEhH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAC3D,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC,iFAAiF;AACjF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1D,wIAAwI;IACxI,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,+GAA+G;AAC/G,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjG,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,mCAAmC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAC;CACvC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,gGAAgG;IAChG,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,uGAAuG;AACvG,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,QAAQ,IAAI,CAAC;AAgB1B,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,GAAG,aAAa,CAAC,WAAW,CAAC,CAKrH;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,WAAW,GAAG,aAAa,CA2BpG;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAc3F;AAED,mHAAmH;AACnH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAyB3H"}
|
|
@@ -34,6 +34,10 @@ export function getMaterialClass(item, { materialState, disabled }) {
|
|
|
34
34
|
case "dimension":
|
|
35
35
|
return { ...unlit, side: "front", transparent: (material.opacity ?? 1) < 1 };
|
|
36
36
|
default: {
|
|
37
|
+
// Faded so far that lighting barely shows, so unlit, to need no lit shader compiled when relations turn active
|
|
38
|
+
if (disabled) {
|
|
39
|
+
return { ...unlit, side: item.role === "text" || material.backfaceCulling ? "front" : "double", transparent: true };
|
|
40
|
+
}
|
|
37
41
|
// A material state's color and finish replace the material's
|
|
38
42
|
const mat = materialState ? stateMaterials[materialState] : material;
|
|
39
43
|
// Only a known type, as data may have a type of its own, e.g. a number
|
|
@@ -42,8 +46,8 @@ export function getMaterialClass(item, { materialState, disabled }) {
|
|
|
42
46
|
lit: item.role === "solid",
|
|
43
47
|
...(type ? { type, metalness: mat.metalness, roughness: mat.roughness } : { metalness: mat.metalness ?? 0, roughness: mat.roughness ?? 1 }),
|
|
44
48
|
side: item.role === "text" || material.backfaceCulling ? "front" : "double",
|
|
45
|
-
transparent: getOpacity(material) < 1
|
|
46
|
-
castShadow: item.role === "solid" && getOpacity(material) === 1 &&
|
|
49
|
+
transparent: getOpacity(material) < 1,
|
|
50
|
+
castShadow: item.role === "solid" && getOpacity(material) === 1 && material.castShadow !== false,
|
|
47
51
|
};
|
|
48
52
|
}
|
|
49
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appearance.js","sourceRoot":"","sources":["../../../../src/renderers/three/appearance/appearance.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"appearance.js","sourceRoot":"","sources":["../../../../src/renderers/three/appearance/appearance.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OrthographicCamera, PerspectiveCamera } from "three";
|
|
1
|
+
import type { OrthographicCamera, PerspectiveCamera, Quaternion } from "three";
|
|
2
2
|
import type { Vec3, View } from "../../../abstract-3d.js";
|
|
3
3
|
/** Fitting the camera to the scene, inside buffer zones of the canvas that UI covers; the fit math of the r3f renderer's react-camera.tsx */
|
|
4
4
|
export type CameraOptions = {
|
|
@@ -19,7 +19,8 @@ export type BufferZones = {
|
|
|
19
19
|
readonly bottom?: number;
|
|
20
20
|
};
|
|
21
21
|
export type FitInput = {
|
|
22
|
-
|
|
22
|
+
/** A view, or the camera's orientation, e.g. one the gizmo turns it to */
|
|
23
|
+
readonly view: View | Quaternion;
|
|
23
24
|
/** The scene's size */
|
|
24
25
|
readonly size: Vec3;
|
|
25
26
|
/** In CSS pixels */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/camera/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/camera/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAG/E,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAG1D,6IAA6I;AAE7I,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACtG;IAAE,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/H,MAAM,MAAM,QAAQ,GAAG;IACrB,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC;IACjC,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,oBAAoB;IACpB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,uGAAuG;AACvG,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC;AAEhF,sHAAsH;AACtH,wBAAgB,SAAS,CACvB,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,EAC9C,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,QAAQ,GACnE,SAAS,GAAG,SAAS,CAiCvB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Vector3 } from "three";
|
|
1
2
|
import { exhaustiveCheck } from "ts-exhaustive-check";
|
|
2
3
|
import { vec3 } from "../../../abstract-3d.js";
|
|
3
4
|
/** Sets the camera's projection to fit the scene into the usable area of the canvas, and returns where to place it */
|
|
@@ -34,6 +35,17 @@ export function fitCamera(camera, { view, size: sceneSize, canvas, bufferZones,
|
|
|
34
35
|
}
|
|
35
36
|
/** The direction to look from, the scene's size as seen on screen and its aspect */
|
|
36
37
|
function getViewTransform(view, size) {
|
|
38
|
+
if (typeof view !== "string") {
|
|
39
|
+
// The extent of the scene's box along the camera's right, up and backward axes, which for a view's orientation is the size below
|
|
40
|
+
const orientation = view;
|
|
41
|
+
const extent = (x, y, z) => {
|
|
42
|
+
const axis = new Vector3(x, y, z).applyQuaternion(orientation);
|
|
43
|
+
return Math.abs(axis.x) * size.x + Math.abs(axis.y) * size.y + Math.abs(axis.z) * size.z;
|
|
44
|
+
};
|
|
45
|
+
const back = new Vector3(0, 0, 1).applyQuaternion(orientation);
|
|
46
|
+
const [width, height] = [extent(1, 0, 0), extent(0, 1, 0)];
|
|
47
|
+
return [vec3(back.x, back.y, back.z), vec3(width, height, extent(0, 0, 1)), width / height];
|
|
48
|
+
}
|
|
37
49
|
switch (view) {
|
|
38
50
|
case "front":
|
|
39
51
|
case "back":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../../../../src/renderers/three/camera/camera.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera.js","sourceRoot":"","sources":["../../../../src/renderers/three/camera/camera.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,5 +40,10 @@ export type ControlsHelper = ({
|
|
|
40
40
|
readonly margin?: readonly [number, number];
|
|
41
41
|
};
|
|
42
42
|
};
|
|
43
|
-
export declare function createGizmo(camera: PerspectiveCamera | OrthographicCamera, renderer: WebGLRenderer, container: HTMLElement, helper: ControlsHelper): ViewportGizmo;
|
|
43
|
+
export declare function createGizmo(camera: PerspectiveCamera | OrthographicCamera, renderer: WebGLRenderer, container: HTMLElement, helper: ControlsHelper, onHover: () => void): ViewportGizmo;
|
|
44
|
+
/**
|
|
45
|
+
* Its own dispose() frees only every other child, as it removes them while iterating over them, so it's left to detach it from the controls and DOM;
|
|
46
|
+
* the layer from createGizmo is removed with its listeners
|
|
47
|
+
*/
|
|
48
|
+
export declare function disposeGizmo(gizmo: ViewportGizmo): void;
|
|
44
49
|
//# sourceMappingURL=gizmo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gizmo.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/camera/gizmo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"gizmo.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/camera/gizmo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGlF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,IAAI,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE,CAAC;AAE7F,MAAM,MAAM,eAAe,GAAG;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,mFAAmF;IACnF,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,CACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,eAAe,CAAA;CAAE,GACvE;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAA;CAAE,CACtE,GAAG;IACF,iFAAiF;IACjF,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CACvG,CAAC;AAKF,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,EAC9C,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,MAAM,IAAI,GAClB,aAAa,CAwBf;AAoCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAevD"}
|
|
@@ -1,23 +1,81 @@
|
|
|
1
|
+
import { BufferGeometry, Material, MathUtils, Mesh, MeshBasicMaterial, Spherical, Sprite, SpriteMaterial } from "three";
|
|
1
2
|
import { ViewportGizmo } from "three-viewport-gizmo";
|
|
2
3
|
const size = 110;
|
|
3
4
|
const axes = ["x", "nx", "y", "ny", "z", "nz"];
|
|
4
|
-
export function createGizmo(camera, renderer, container, helper) {
|
|
5
|
+
export function createGizmo(camera, renderer, container, helper, onHover) {
|
|
5
6
|
const [mx, my] = helper.props?.margin ?? [80, 80];
|
|
6
7
|
const options = helper.type === "Viewcube" ? helper.viewcubeProps : helper.viewportProps;
|
|
7
8
|
// "600 24px Helvetica, Arial" is weight 600 of Helvetica, Arial
|
|
8
9
|
const [, weight = 600, family = "Helvetica, Arial, sans-serif"] = /^(?:(\S+)\s+)?[\d.]+px\s+(.+)$/.exec(options?.font ?? "") ?? [];
|
|
10
|
+
// Hovering changes its look without a change event, as it's made for a render loop, so its pointer events are caught as they bubble through a
|
|
11
|
+
// parent of its own, which has no box, so it's placed in the container as before
|
|
12
|
+
const layer = Object.assign(document.createElement("div"), { style: "display: contents" });
|
|
13
|
+
["pointermove", "pointerout"].forEach((type) => layer.addEventListener(type, onHover));
|
|
14
|
+
layer.addEventListener("pointerdown", (event) => dragGizmo(gizmo, event));
|
|
15
|
+
container.append(layer);
|
|
9
16
|
const gizmo = new ViewportGizmo(camera, renderer, {
|
|
10
|
-
container,
|
|
17
|
+
container: layer,
|
|
11
18
|
size,
|
|
12
19
|
placement: helper.props?.alignment ?? "bottom-right",
|
|
13
20
|
offset: { left: mx - size / 2, right: mx - size / 2, top: my - size / 2, bottom: my - size / 2 },
|
|
14
21
|
// A family without a generic fallback, e.g. a web font, would otherwise fall back to the browser's serif
|
|
15
22
|
font: { family: `${family}, sans-serif`, weight },
|
|
23
|
+
// A click moves the camera at once, for the viewer to turn it there, eased and also fitting the scene
|
|
24
|
+
animated: false,
|
|
16
25
|
...(helper.type === "Viewcube" ? getViewcubeOptions(helper.viewcubeProps ?? {}) : getAxesOptions(helper.viewportProps ?? {})),
|
|
17
26
|
});
|
|
18
27
|
gizmo.enabled = !(helper.type === "Viewport" && helper.viewportProps?.disabled);
|
|
19
28
|
return gizmo;
|
|
20
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Its own drag turns the camera only once the pointer moved 10 pixels away, by all of them at once, so a drag turns it here from the first pixel, the
|
|
32
|
+
* same way, from where it was pressed: the turn is half a revolution per gizmo width. As each move's listener here runs after its own, which it adds
|
|
33
|
+
* when pressed, its drag is overridden; a press that moves less than that is still its click. Its press disables the controls, and only a drag or a
|
|
34
|
+
* click on a side ends it, so a release that starts no turn ends it here, enabling them again
|
|
35
|
+
*/
|
|
36
|
+
function dragGizmo(gizmo, press) {
|
|
37
|
+
if (gizmo.enabled && !gizmo.animating) {
|
|
38
|
+
const { camera, target } = gizmo;
|
|
39
|
+
const { theta, phi } = new Spherical().setFromVector3(camera.position.clone().sub(target));
|
|
40
|
+
const listeners = new AbortController();
|
|
41
|
+
const signal = { signal: listeners.signal };
|
|
42
|
+
document.addEventListener("pointermove", (event) => {
|
|
43
|
+
const [x, y] = [((event.clientX - press.clientX) / size) * Math.PI, ((event.clientY - press.clientY) / size) * Math.PI];
|
|
44
|
+
const turned = new Spherical(camera.position.distanceTo(target), MathUtils.clamp(phi - y, 1e-6, Math.PI - 1e-6), theta - x);
|
|
45
|
+
camera.position.setFromSpherical(turned).add(target);
|
|
46
|
+
camera.lookAt(target);
|
|
47
|
+
gizmo.cameraUpdate();
|
|
48
|
+
gizmo.dispatchEvent({ type: "change" });
|
|
49
|
+
}, signal);
|
|
50
|
+
const release = () => {
|
|
51
|
+
listeners.abort();
|
|
52
|
+
if (!gizmo.animating) {
|
|
53
|
+
gizmo.dispatchEvent({ type: "end" });
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
["pointerup", "pointercancel"].forEach((type) => document.addEventListener(type, release, signal));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Its own dispose() frees only every other child, as it removes them while iterating over them, so it's left to detach it from the controls and DOM;
|
|
61
|
+
* the layer from createGizmo is removed with its listeners
|
|
62
|
+
*/
|
|
63
|
+
export function disposeGizmo(gizmo) {
|
|
64
|
+
if (gizmo.options.container instanceof HTMLElement) {
|
|
65
|
+
gizmo.options.container.remove();
|
|
66
|
+
}
|
|
67
|
+
gizmo.children.forEach((child) => {
|
|
68
|
+
// Faces, corners, edges and background are meshes, the axes' ends sprites and their lines a Line2 mesh, each with one material
|
|
69
|
+
if ((child instanceof Mesh || child instanceof Sprite) && child.material instanceof Material && child.geometry instanceof BufferGeometry) {
|
|
70
|
+
if (child.material instanceof MeshBasicMaterial || child.material instanceof SpriteMaterial) {
|
|
71
|
+
child.material.map?.dispose();
|
|
72
|
+
}
|
|
73
|
+
child.material.dispose();
|
|
74
|
+
child.geometry.dispose();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
gizmo.clear().dispose();
|
|
78
|
+
}
|
|
21
79
|
function getViewcubeOptions(options) {
|
|
22
80
|
const { opacity = 1, color = "#f4f5f7", hoverColor = "#cfe0ff", textColor = "#333", strokeColor = "#9aa0a6" } = options;
|
|
23
81
|
const labels = options.faces ?? ["Right", "Left", "Top", "Bottom", "Front", "Back"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gizmo.js","sourceRoot":"","sources":["../../../../src/renderers/three/camera/gizmo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gizmo.js","sourceRoot":"","sources":["../../../../src/renderers/three/camera/gizmo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type BufferGeometry, Group, OrthographicCamera, PerspectiveCamera, Scene as ThreeScene, Vector3, WebGLRenderer, type WebGLRenderTarget } from "three";
|
|
1
|
+
import { type BufferGeometry, Group, OrthographicCamera, PerspectiveCamera, type Quaternion, Scene as ThreeScene, Vector3, WebGLRenderer, type WebGLRenderTarget } from "three";
|
|
2
2
|
import type { ViewportGizmo } from "three-viewport-gizmo";
|
|
3
3
|
import type { View } from "../../../abstract-3d.js";
|
|
4
4
|
import type { StructureState } from "../appearance/appearance.js";
|
|
@@ -21,6 +21,13 @@ type Hit = {
|
|
|
21
21
|
readonly target: number;
|
|
22
22
|
readonly point: Vector3;
|
|
23
23
|
};
|
|
24
|
+
/** Where the camera looks from: it looks at the target from the distance, turned by the quaternion */
|
|
25
|
+
type Pose = {
|
|
26
|
+
readonly quaternion: Quaternion;
|
|
27
|
+
readonly target: Vector3;
|
|
28
|
+
readonly distance: number;
|
|
29
|
+
readonly zoom: number;
|
|
30
|
+
};
|
|
24
31
|
export type Viewer<Content> = {
|
|
25
32
|
options: ViewerOptions<Content>;
|
|
26
33
|
readonly container: HTMLElement;
|
|
@@ -79,6 +86,12 @@ export type Viewer<Content> = {
|
|
|
79
86
|
shadow?: GroundShadow;
|
|
80
87
|
};
|
|
81
88
|
gizmo?: ViewportGizmo;
|
|
89
|
+
/** A gizmo click's turn of the camera, from when it was clicked; where it ends is known once the gizmo moved the camera there */
|
|
90
|
+
turn?: {
|
|
91
|
+
readonly from: Pose;
|
|
92
|
+
readonly to?: Pose;
|
|
93
|
+
readonly start: number;
|
|
94
|
+
};
|
|
82
95
|
shadow?: GroundShadow;
|
|
83
96
|
/** The key light that casts the solids' shadows on themselves */
|
|
84
97
|
keyLight?: Group;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,EAGL,kBAAkB,EAClB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/viewer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import { animateScene, buildScene, cullScene, disposeScene, getPickables, getPic
|
|
|
3
3
|
import { disposeTextures } from "../build/materials.js";
|
|
4
4
|
import { fitCamera } from "../camera/camera.js";
|
|
5
5
|
import { configureControls, createControls, setPose } from "../camera/controls.js";
|
|
6
|
-
import { createGizmo } from "../camera/gizmo.js";
|
|
6
|
+
import { createGizmo, disposeGizmo } from "../camera/gizmo.js";
|
|
7
7
|
import { compileScene } from "../compile/compile.js";
|
|
8
8
|
import { getPixelRatio, recordFrame } from "../quality/quality.js";
|
|
9
9
|
import { createKeyLight, disposeKeyLight } from "../shadow/key-light.js";
|
|
@@ -13,6 +13,8 @@ import { effects } from "./options.js";
|
|
|
13
13
|
import { createOverlayLayer, setOverlays } from "./overlays.js";
|
|
14
14
|
/** Pointer travel in CSS pixels below which a press and release is a click, not a drag */
|
|
15
15
|
const clickTolerance = 4;
|
|
16
|
+
/** How long a gizmo click's turn of the camera takes */
|
|
17
|
+
const turnMs = 400;
|
|
16
18
|
export function createViewer(container, options) {
|
|
17
19
|
if (getComputedStyle(container).position === "static") {
|
|
18
20
|
container.style.position = "relative";
|
|
@@ -101,7 +103,9 @@ export function disposeViewer(v) {
|
|
|
101
103
|
v.listeners.abort();
|
|
102
104
|
v.resizeObserver.disconnect();
|
|
103
105
|
v.controls.orbit.dispose();
|
|
104
|
-
v.gizmo
|
|
106
|
+
if (v.gizmo) {
|
|
107
|
+
disposeGizmo(v.gizmo);
|
|
108
|
+
}
|
|
105
109
|
disposeRetired(v);
|
|
106
110
|
if (v.built) {
|
|
107
111
|
disposeScene(v.built);
|
|
@@ -249,7 +253,12 @@ function renderFrame(v, now) {
|
|
|
249
253
|
}
|
|
250
254
|
const { built, camera, gizmo } = v;
|
|
251
255
|
renderer.info.reset();
|
|
252
|
-
|
|
256
|
+
if (v.turn?.to) {
|
|
257
|
+
turnCamera(v, v.turn.from, v.turn.to, (now - v.turn.start) / turnMs);
|
|
258
|
+
}
|
|
259
|
+
// Not during a turn, as the controls would look at the target with the world's up instead of the turn's roll, which spins the camera near the
|
|
260
|
+
// top and bottom views and snaps it at their end
|
|
261
|
+
const moving = !!v.turn || v.controls.orbit.update(Math.min(interval / 1000, 0.1));
|
|
253
262
|
if (moving && loop.wasMoving && v.governor && recordFrame(v.governor, interval)) {
|
|
254
263
|
renderer.setPixelRatio(getPixelRatio(v.governor.tier, window.devicePixelRatio));
|
|
255
264
|
}
|
|
@@ -307,42 +316,109 @@ function fitPose(v) {
|
|
|
307
316
|
v.fitted = true;
|
|
308
317
|
}
|
|
309
318
|
}
|
|
310
|
-
function fitScene(v) {
|
|
311
|
-
const { scene,
|
|
319
|
+
function fitScene(v, view = v.options.view ?? "front") {
|
|
320
|
+
const { scene, bufferZones = {}, fitPadding = 0 } = v.options;
|
|
312
321
|
return scene && fitCamera(v.camera, { view, size: scene.size_deprecated, canvas: v.size, bufferZones, fitPadding });
|
|
313
322
|
}
|
|
314
|
-
function updateGizmo(v) {
|
|
315
|
-
v.gizmo
|
|
323
|
+
function updateGizmo(v, fontsLoaded = false) {
|
|
324
|
+
if (v.gizmo) {
|
|
325
|
+
disposeGizmo(v.gizmo);
|
|
326
|
+
}
|
|
327
|
+
// A click's turn that the old gizmo hadn't moved the camera to the end of would never end
|
|
328
|
+
if (v.turn && !v.turn.to) {
|
|
329
|
+
endTurn(v);
|
|
330
|
+
}
|
|
316
331
|
const { gizmo } = v.options;
|
|
317
|
-
v.gizmo = gizmo && createGizmo(v.camera, v.renderer, v.container, gizmo).attachControls(v.controls.orbit);
|
|
318
|
-
v.gizmo?.addEventListener("change", () =>
|
|
332
|
+
v.gizmo = gizmo && createGizmo(v.camera, v.renderer, v.container, gizmo, () => invalidate(v)).attachControls(v.controls.orbit);
|
|
333
|
+
v.gizmo?.addEventListener("change", () => onGizmoChange(v));
|
|
319
334
|
v.gizmo?.addEventListener("start", () => onGizmoStart(v));
|
|
320
|
-
|
|
335
|
+
v.gizmo?.addEventListener("end", () => onGizmoEnd(v));
|
|
336
|
+
// Its labels are drawn into its textures once, so ones drawn before their web font loaded are replaced by a new one once it has, unless replaced
|
|
337
|
+
// or disposed meanwhile; loading starts it if nothing has, and gives no faces for a system font or one that failed. Only once, so a font that
|
|
338
|
+
// never checks as loaded can't replace it again and again. Not by its set(options), which leaves it detached from the controls and keeps every
|
|
339
|
+
// other old label
|
|
321
340
|
const created = v.gizmo;
|
|
322
|
-
|
|
323
|
-
|
|
341
|
+
const font = created && `${created.options.font?.weight ?? ""} 16px ${created.options.font?.family ?? "sans-serif"}`;
|
|
342
|
+
if (created && font && !fontsLoaded && !document.fonts.check(font)) {
|
|
343
|
+
document.fonts
|
|
344
|
+
.load(font)
|
|
345
|
+
.then((faces) => faces.length > 0 && v.gizmo === created && !v.disposed && replaceGizmo(v))
|
|
346
|
+
.catch(() => undefined);
|
|
324
347
|
}
|
|
325
348
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
349
|
+
function replaceGizmo(v) {
|
|
350
|
+
updateGizmo(v, true);
|
|
351
|
+
invalidate(v);
|
|
352
|
+
}
|
|
353
|
+
/** A click starts a turn, from where a turn going on has got to */
|
|
354
|
+
function onGizmoStart(v) {
|
|
355
|
+
if (v.gizmo?.animating) {
|
|
356
|
+
v.turn = { from: getPose(v), start: performance.now() };
|
|
331
357
|
}
|
|
332
358
|
}
|
|
359
|
+
/** Dragging the gizmo stops a turn going on; a click's changes come while it's animating, or before the turn knows where it ends */
|
|
360
|
+
function onGizmoChange(v) {
|
|
361
|
+
if (!v.gizmo?.animating && v.turn?.to) {
|
|
362
|
+
v.turn = undefined;
|
|
363
|
+
}
|
|
364
|
+
invalidate(v);
|
|
365
|
+
}
|
|
333
366
|
/**
|
|
334
|
-
*
|
|
335
|
-
* distance
|
|
367
|
+
* The gizmo, not animated, moved the camera to the clicked view at once; it's moved back, to turn from there in the next frames, eased, and with the
|
|
368
|
+
* target and distance too, as a click can also move the target back to the scene's center and fit the scene to the view. An orthographic camera's
|
|
369
|
+
* zoom starts at the one that shows as much on the fitted projection as before
|
|
336
370
|
*/
|
|
337
|
-
function
|
|
338
|
-
const {
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
371
|
+
function onGizmoEnd(v) {
|
|
372
|
+
const { turn, camera } = v;
|
|
373
|
+
if (turn && !turn.to) {
|
|
374
|
+
const { gizmo } = v.options;
|
|
375
|
+
const reset = gizmo?.type === "Viewcube" ? gizmo.viewcubeProps?.resetZoomAndPanOnClick : gizmo?.viewportProps?.resetZoomAndPanOnClick;
|
|
376
|
+
const quaternion = camera.quaternion.clone();
|
|
377
|
+
const height = () => ("isOrthographicCamera" in camera ? camera.top - camera.bottom : 1);
|
|
378
|
+
const before = height();
|
|
379
|
+
const placement = reset ? fitScene(v, quaternion) : undefined;
|
|
380
|
+
const from = { ...turn.from, zoom: (turn.from.zoom * height()) / before };
|
|
381
|
+
const to = placement ? { quaternion, target: new Vector3(), distance: placement.distance, zoom: 1 } : { ...turn.from, quaternion };
|
|
382
|
+
v.turn = { ...turn, from, to };
|
|
383
|
+
setCameraPose(v, from);
|
|
384
|
+
}
|
|
385
|
+
// Its end, also of a press during a turn, enabled the controls, which the turn enables when it ends
|
|
386
|
+
if (v.turn) {
|
|
387
|
+
v.controls.orbit.enabled = false;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
function turnCamera(v, from, to, progress) {
|
|
391
|
+
const t = Math.min(1, progress);
|
|
392
|
+
const eased = t * t * (3 - 2 * t);
|
|
393
|
+
const lerp = (a, b) => a + (b - a) * eased;
|
|
394
|
+
setCameraPose(v, {
|
|
395
|
+
quaternion: from.quaternion.clone().slerp(to.quaternion, eased),
|
|
396
|
+
target: from.target.clone().lerp(to.target, eased),
|
|
397
|
+
distance: lerp(from.distance, to.distance),
|
|
398
|
+
zoom: lerp(from.zoom, to.zoom),
|
|
399
|
+
});
|
|
400
|
+
if (t === 1) {
|
|
401
|
+
endTurn(v);
|
|
344
402
|
}
|
|
345
403
|
}
|
|
404
|
+
/** The controls the click disabled are enabled again */
|
|
405
|
+
function endTurn(v) {
|
|
406
|
+
v.turn = undefined;
|
|
407
|
+
v.controls.orbit.enabled = v.controls.current.options.enabled ?? true;
|
|
408
|
+
}
|
|
409
|
+
function getPose({ camera, controls }) {
|
|
410
|
+
const target = controls.orbit.target.clone();
|
|
411
|
+
return { quaternion: camera.quaternion.clone(), target, distance: camera.position.distanceTo(target), zoom: camera.zoom };
|
|
412
|
+
}
|
|
413
|
+
function setCameraPose(v, { quaternion, target, distance, zoom }) {
|
|
414
|
+
const { camera } = v;
|
|
415
|
+
camera.quaternion.copy(quaternion);
|
|
416
|
+
camera.position.set(0, 0, distance).applyQuaternion(quaternion).add(target);
|
|
417
|
+
camera.zoom = zoom;
|
|
418
|
+
camera.updateProjectionMatrix();
|
|
419
|
+
v.controls.orbit.target.copy(target);
|
|
420
|
+
v.gizmo?.cameraUpdate();
|
|
421
|
+
}
|
|
346
422
|
function onPointerMove(v, event) {
|
|
347
423
|
v.pointer.last = event;
|
|
348
424
|
v.pointer.frame ||= requestAnimationFrame(() => hoverAtPointer(v));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/viewer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../src/renderers/three/viewer/viewer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -88,6 +88,12 @@ describe("getMaterialClass", () => {
|
|
|
88
88
|
expect(classify(solid({ normal: red }), group, { relationsActive: true, activeComponents: { fan: "Accept" } }).transparent).toBe(false);
|
|
89
89
|
});
|
|
90
90
|
|
|
91
|
+
it("draws disabled groups unlit, in one class whatever their finish", () => {
|
|
92
|
+
const disabled = classify(solid({ normal: red, type: "painted" }), group, { relationsActive: true });
|
|
93
|
+
expect(disabled).toMatchObject({ lit: false, side: "double", transparent: true });
|
|
94
|
+
expect(classify(solid({ normal: red, type: "galvanized", metalness: 0.9 }), group, { relationsActive: true })).toEqual(disabled);
|
|
95
|
+
});
|
|
96
|
+
|
|
91
97
|
it("uses the material state's metalness and roughness", () => {
|
|
92
98
|
expect(classify(solid({ normal: red }), group, { activeComponents: { fan: "Error" } })).toMatchObject({ metalness: 0.5, roughness: 0.5 });
|
|
93
99
|
});
|
|
@@ -78,6 +78,10 @@ export function getMaterialClass(item: Item, { materialState, disabled }: Target
|
|
|
78
78
|
case "dimension":
|
|
79
79
|
return { ...unlit, side: "front", transparent: (material.opacity ?? 1) < 1 };
|
|
80
80
|
default: {
|
|
81
|
+
// Faded so far that lighting barely shows, so unlit, to need no lit shader compiled when relations turn active
|
|
82
|
+
if (disabled) {
|
|
83
|
+
return { ...unlit, side: item.role === "text" || material.backfaceCulling ? "front" : "double", transparent: true };
|
|
84
|
+
}
|
|
81
85
|
// A material state's color and finish replace the material's
|
|
82
86
|
const mat = materialState ? stateMaterials[materialState] : material;
|
|
83
87
|
// Only a known type, as data may have a type of its own, e.g. a number
|
|
@@ -86,8 +90,8 @@ export function getMaterialClass(item: Item, { materialState, disabled }: Target
|
|
|
86
90
|
lit: item.role === "solid",
|
|
87
91
|
...(type ? { type, metalness: mat.metalness, roughness: mat.roughness } : { metalness: mat.metalness ?? 0, roughness: mat.roughness ?? 1 }),
|
|
88
92
|
side: item.role === "text" || material.backfaceCulling ? "front" : "double",
|
|
89
|
-
transparent: getOpacity(material) < 1
|
|
90
|
-
castShadow: item.role === "solid" && getOpacity(material) === 1 &&
|
|
93
|
+
transparent: getOpacity(material) < 1,
|
|
94
|
+
castShadow: item.role === "solid" && getOpacity(material) === 1 && material.castShadow !== false,
|
|
91
95
|
};
|
|
92
96
|
}
|
|
93
97
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { OrthographicCamera, PerspectiveCamera } from "three";
|
|
1
|
+
import type { OrthographicCamera, PerspectiveCamera, Quaternion } from "three";
|
|
2
|
+
import { Vector3 } from "three";
|
|
2
3
|
import { exhaustiveCheck } from "ts-exhaustive-check";
|
|
3
4
|
import type { Vec3, View } from "../../../abstract-3d.js";
|
|
4
5
|
import { vec3 } from "../../../abstract-3d.js";
|
|
@@ -13,7 +14,8 @@ export type CameraOptions =
|
|
|
13
14
|
export type BufferZones = { readonly left?: number; readonly right?: number; readonly top?: number; readonly bottom?: number };
|
|
14
15
|
|
|
15
16
|
export type FitInput = {
|
|
16
|
-
|
|
17
|
+
/** A view, or the camera's orientation, e.g. one the gizmo turns it to */
|
|
18
|
+
readonly view: View | Quaternion;
|
|
17
19
|
/** The scene's size */
|
|
18
20
|
readonly size: Vec3;
|
|
19
21
|
/** In CSS pixels */
|
|
@@ -65,7 +67,18 @@ export function fitCamera(
|
|
|
65
67
|
}
|
|
66
68
|
|
|
67
69
|
/** The direction to look from, the scene's size as seen on screen and its aspect */
|
|
68
|
-
function getViewTransform(view: View, size: Vec3): readonly [Vec3, Vec3, number] {
|
|
70
|
+
function getViewTransform(view: View | Quaternion, size: Vec3): readonly [Vec3, Vec3, number] {
|
|
71
|
+
if (typeof view !== "string") {
|
|
72
|
+
// The extent of the scene's box along the camera's right, up and backward axes, which for a view's orientation is the size below
|
|
73
|
+
const orientation = view;
|
|
74
|
+
const extent = (x: number, y: number, z: number): number => {
|
|
75
|
+
const axis = new Vector3(x, y, z).applyQuaternion(orientation);
|
|
76
|
+
return Math.abs(axis.x) * size.x + Math.abs(axis.y) * size.y + Math.abs(axis.z) * size.z;
|
|
77
|
+
};
|
|
78
|
+
const back = new Vector3(0, 0, 1).applyQuaternion(orientation);
|
|
79
|
+
const [width, height] = [extent(1, 0, 0), extent(0, 1, 0)];
|
|
80
|
+
return [vec3(back.x, back.y, back.z), vec3(width, height, extent(0, 0, 1)), width / height];
|
|
81
|
+
}
|
|
69
82
|
switch (view) {
|
|
70
83
|
case "front":
|
|
71
84
|
case "back":
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { OrthographicCamera, PerspectiveCamera, WebGLRenderer } from "three";
|
|
2
|
+
import { BufferGeometry, Material, MathUtils, Mesh, MeshBasicMaterial, Spherical, Sprite, SpriteMaterial } from "three";
|
|
2
3
|
import type { GizmoAxisOptions, GizmoOptions } from "three-viewport-gizmo";
|
|
3
4
|
import { ViewportGizmo } from "three-viewport-gizmo";
|
|
4
5
|
|
|
@@ -48,25 +49,89 @@ export function createGizmo(
|
|
|
48
49
|
camera: PerspectiveCamera | OrthographicCamera,
|
|
49
50
|
renderer: WebGLRenderer,
|
|
50
51
|
container: HTMLElement,
|
|
51
|
-
helper: ControlsHelper
|
|
52
|
+
helper: ControlsHelper,
|
|
53
|
+
onHover: () => void
|
|
52
54
|
): ViewportGizmo {
|
|
53
55
|
const [mx, my] = helper.props?.margin ?? [80, 80];
|
|
54
56
|
const options = helper.type === "Viewcube" ? helper.viewcubeProps : helper.viewportProps;
|
|
55
57
|
// "600 24px Helvetica, Arial" is weight 600 of Helvetica, Arial
|
|
56
58
|
const [, weight = 600, family = "Helvetica, Arial, sans-serif"] = /^(?:(\S+)\s+)?[\d.]+px\s+(.+)$/.exec(options?.font ?? "") ?? [];
|
|
59
|
+
// Hovering changes its look without a change event, as it's made for a render loop, so its pointer events are caught as they bubble through a
|
|
60
|
+
// parent of its own, which has no box, so it's placed in the container as before
|
|
61
|
+
const layer = Object.assign(document.createElement("div"), { style: "display: contents" });
|
|
62
|
+
["pointermove", "pointerout"].forEach((type) => layer.addEventListener(type, onHover));
|
|
63
|
+
layer.addEventListener("pointerdown", (event) => dragGizmo(gizmo, event));
|
|
64
|
+
container.append(layer);
|
|
57
65
|
const gizmo = new ViewportGizmo(camera, renderer, {
|
|
58
|
-
container,
|
|
66
|
+
container: layer,
|
|
59
67
|
size,
|
|
60
68
|
placement: helper.props?.alignment ?? "bottom-right",
|
|
61
69
|
offset: { left: mx - size / 2, right: mx - size / 2, top: my - size / 2, bottom: my - size / 2 },
|
|
62
70
|
// A family without a generic fallback, e.g. a web font, would otherwise fall back to the browser's serif
|
|
63
71
|
font: { family: `${family}, sans-serif`, weight },
|
|
72
|
+
// A click moves the camera at once, for the viewer to turn it there, eased and also fitting the scene
|
|
73
|
+
animated: false,
|
|
64
74
|
...(helper.type === "Viewcube" ? getViewcubeOptions(helper.viewcubeProps ?? {}) : getAxesOptions(helper.viewportProps ?? {})),
|
|
65
75
|
});
|
|
66
76
|
gizmo.enabled = !(helper.type === "Viewport" && helper.viewportProps?.disabled);
|
|
67
77
|
return gizmo;
|
|
68
78
|
}
|
|
69
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Its own drag turns the camera only once the pointer moved 10 pixels away, by all of them at once, so a drag turns it here from the first pixel, the
|
|
82
|
+
* same way, from where it was pressed: the turn is half a revolution per gizmo width. As each move's listener here runs after its own, which it adds
|
|
83
|
+
* when pressed, its drag is overridden; a press that moves less than that is still its click. Its press disables the controls, and only a drag or a
|
|
84
|
+
* click on a side ends it, so a release that starts no turn ends it here, enabling them again
|
|
85
|
+
*/
|
|
86
|
+
function dragGizmo(gizmo: ViewportGizmo, press: PointerEvent): void {
|
|
87
|
+
if (gizmo.enabled && !gizmo.animating) {
|
|
88
|
+
const { camera, target } = gizmo;
|
|
89
|
+
const { theta, phi } = new Spherical().setFromVector3(camera.position.clone().sub(target));
|
|
90
|
+
const listeners = new AbortController();
|
|
91
|
+
const signal = { signal: listeners.signal };
|
|
92
|
+
document.addEventListener(
|
|
93
|
+
"pointermove",
|
|
94
|
+
(event) => {
|
|
95
|
+
const [x, y] = [((event.clientX - press.clientX) / size) * Math.PI, ((event.clientY - press.clientY) / size) * Math.PI];
|
|
96
|
+
const turned = new Spherical(camera.position.distanceTo(target), MathUtils.clamp(phi - y, 1e-6, Math.PI - 1e-6), theta - x);
|
|
97
|
+
camera.position.setFromSpherical(turned).add(target);
|
|
98
|
+
camera.lookAt(target);
|
|
99
|
+
gizmo.cameraUpdate();
|
|
100
|
+
gizmo.dispatchEvent({ type: "change" });
|
|
101
|
+
},
|
|
102
|
+
signal
|
|
103
|
+
);
|
|
104
|
+
const release = (): void => {
|
|
105
|
+
listeners.abort();
|
|
106
|
+
if (!gizmo.animating) {
|
|
107
|
+
gizmo.dispatchEvent({ type: "end" });
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
["pointerup", "pointercancel"].forEach((type) => document.addEventListener(type, release, signal));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Its own dispose() frees only every other child, as it removes them while iterating over them, so it's left to detach it from the controls and DOM;
|
|
116
|
+
* the layer from createGizmo is removed with its listeners
|
|
117
|
+
*/
|
|
118
|
+
export function disposeGizmo(gizmo: ViewportGizmo): void {
|
|
119
|
+
if (gizmo.options.container instanceof HTMLElement) {
|
|
120
|
+
gizmo.options.container.remove();
|
|
121
|
+
}
|
|
122
|
+
gizmo.children.forEach((child) => {
|
|
123
|
+
// Faces, corners, edges and background are meshes, the axes' ends sprites and their lines a Line2 mesh, each with one material
|
|
124
|
+
if ((child instanceof Mesh || child instanceof Sprite) && child.material instanceof Material && child.geometry instanceof BufferGeometry) {
|
|
125
|
+
if (child.material instanceof MeshBasicMaterial || child.material instanceof SpriteMaterial) {
|
|
126
|
+
child.material.map?.dispose();
|
|
127
|
+
}
|
|
128
|
+
child.material.dispose();
|
|
129
|
+
child.geometry.dispose();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
gizmo.clear().dispose();
|
|
133
|
+
}
|
|
134
|
+
|
|
70
135
|
function getViewcubeOptions(options: ViewcubeOptions): GizmoOptions {
|
|
71
136
|
const { opacity = 1, color = "#f4f5f7", hoverColor = "#cfe0ff", textColor = "#333", strokeColor = "#9aa0a6" } = options;
|
|
72
137
|
const labels = options.faces ?? ["Right", "Left", "Top", "Bottom", "Front", "Back"];
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
NeutralToneMapping,
|
|
7
7
|
OrthographicCamera,
|
|
8
8
|
PerspectiveCamera,
|
|
9
|
+
type Quaternion,
|
|
9
10
|
Raycaster,
|
|
10
11
|
Scene as ThreeScene,
|
|
11
12
|
Vector2,
|
|
@@ -24,7 +25,7 @@ import type { Placement } from "../camera/camera.js";
|
|
|
24
25
|
import { fitCamera } from "../camera/camera.js";
|
|
25
26
|
import type { Controls } from "../camera/controls.js";
|
|
26
27
|
import { configureControls, createControls, setPose } from "../camera/controls.js";
|
|
27
|
-
import { createGizmo } from "../camera/gizmo.js";
|
|
28
|
+
import { createGizmo, disposeGizmo } from "../camera/gizmo.js";
|
|
28
29
|
import type { CompiledScene } from "../compile/compile.js";
|
|
29
30
|
import { compileScene } from "../compile/compile.js";
|
|
30
31
|
import type { TierGovernor } from "../quality/quality.js";
|
|
@@ -47,6 +48,9 @@ import { createOverlayLayer, setOverlays } from "./overlays.js";
|
|
|
47
48
|
|
|
48
49
|
type Hit = { readonly item: number; readonly target: number; readonly point: Vector3 };
|
|
49
50
|
|
|
51
|
+
/** Where the camera looks from: it looks at the target from the distance, turned by the quaternion */
|
|
52
|
+
type Pose = { readonly quaternion: Quaternion; readonly target: Vector3; readonly distance: number; readonly zoom: number };
|
|
53
|
+
|
|
50
54
|
export type Viewer<Content> = {
|
|
51
55
|
options: ViewerOptions<Content>;
|
|
52
56
|
readonly container: HTMLElement;
|
|
@@ -77,6 +81,8 @@ export type Viewer<Content> = {
|
|
|
77
81
|
/** The previous build and ground shadow, out of the scene, disposed once the next frame has given their shader programs to the new ones */
|
|
78
82
|
readonly retired: { built?: BuiltScene; shadow?: GroundShadow };
|
|
79
83
|
gizmo?: ViewportGizmo;
|
|
84
|
+
/** A gizmo click's turn of the camera, from when it was clicked; where it ends is known once the gizmo moved the camera there */
|
|
85
|
+
turn?: { readonly from: Pose; readonly to?: Pose; readonly start: number };
|
|
80
86
|
shadow?: GroundShadow;
|
|
81
87
|
/** The key light that casts the solids' shadows on themselves */
|
|
82
88
|
keyLight?: Group;
|
|
@@ -91,6 +97,8 @@ export type Viewer<Content> = {
|
|
|
91
97
|
|
|
92
98
|
/** Pointer travel in CSS pixels below which a press and release is a click, not a drag */
|
|
93
99
|
const clickTolerance = 4;
|
|
100
|
+
/** How long a gizmo click's turn of the camera takes */
|
|
101
|
+
const turnMs = 400;
|
|
94
102
|
|
|
95
103
|
export function createViewer<Content>(container: HTMLElement, options: ViewerOptions<Content>): Viewer<Content> {
|
|
96
104
|
if (getComputedStyle(container).position === "static") {
|
|
@@ -184,7 +192,9 @@ export function disposeViewer<Content>(v: Viewer<Content>): void {
|
|
|
184
192
|
v.listeners.abort();
|
|
185
193
|
v.resizeObserver.disconnect();
|
|
186
194
|
v.controls.orbit.dispose();
|
|
187
|
-
v.gizmo
|
|
195
|
+
if (v.gizmo) {
|
|
196
|
+
disposeGizmo(v.gizmo);
|
|
197
|
+
}
|
|
188
198
|
disposeRetired(v);
|
|
189
199
|
if (v.built) {
|
|
190
200
|
disposeScene(v.built);
|
|
@@ -337,7 +347,12 @@ function renderFrame<Content>(v: Viewer<Content>, now: number): void {
|
|
|
337
347
|
}
|
|
338
348
|
const { built, camera, gizmo } = v;
|
|
339
349
|
renderer.info.reset();
|
|
340
|
-
|
|
350
|
+
if (v.turn?.to) {
|
|
351
|
+
turnCamera(v, v.turn.from, v.turn.to, (now - v.turn.start) / turnMs);
|
|
352
|
+
}
|
|
353
|
+
// Not during a turn, as the controls would look at the target with the world's up instead of the turn's roll, which spins the camera near the
|
|
354
|
+
// top and bottom views and snaps it at their end
|
|
355
|
+
const moving = !!v.turn || v.controls.orbit.update(Math.min(interval / 1000, 0.1));
|
|
341
356
|
if (moving && loop.wasMoving && v.governor && recordFrame(v.governor, interval)) {
|
|
342
357
|
renderer.setPixelRatio(getPixelRatio(v.governor.tier, window.devicePixelRatio));
|
|
343
358
|
}
|
|
@@ -397,46 +412,119 @@ function fitPose<Content>(v: Viewer<Content>): void {
|
|
|
397
412
|
}
|
|
398
413
|
}
|
|
399
414
|
|
|
400
|
-
function fitScene<Content>(v: Viewer<Content
|
|
401
|
-
const { scene,
|
|
415
|
+
function fitScene<Content>(v: Viewer<Content>, view: View | Quaternion = v.options.view ?? "front"): Placement | undefined {
|
|
416
|
+
const { scene, bufferZones = {}, fitPadding = 0 } = v.options;
|
|
402
417
|
return scene && fitCamera(v.camera, { view, size: scene.size_deprecated, canvas: v.size, bufferZones, fitPadding });
|
|
403
418
|
}
|
|
404
419
|
|
|
405
|
-
function updateGizmo<Content>(v: Viewer<Content
|
|
406
|
-
v.gizmo
|
|
420
|
+
function updateGizmo<Content>(v: Viewer<Content>, fontsLoaded = false): void {
|
|
421
|
+
if (v.gizmo) {
|
|
422
|
+
disposeGizmo(v.gizmo);
|
|
423
|
+
}
|
|
424
|
+
// A click's turn that the old gizmo hadn't moved the camera to the end of would never end
|
|
425
|
+
if (v.turn && !v.turn.to) {
|
|
426
|
+
endTurn(v);
|
|
427
|
+
}
|
|
407
428
|
const { gizmo } = v.options;
|
|
408
|
-
v.gizmo = gizmo && createGizmo(v.camera, v.renderer, v.container, gizmo).attachControls(v.controls.orbit);
|
|
409
|
-
v.gizmo?.addEventListener("change", () =>
|
|
429
|
+
v.gizmo = gizmo && createGizmo(v.camera, v.renderer, v.container, gizmo, () => invalidate(v)).attachControls(v.controls.orbit);
|
|
430
|
+
v.gizmo?.addEventListener("change", () => onGizmoChange(v));
|
|
410
431
|
v.gizmo?.addEventListener("start", () => onGizmoStart(v));
|
|
411
|
-
|
|
432
|
+
v.gizmo?.addEventListener("end", () => onGizmoEnd(v));
|
|
433
|
+
// Its labels are drawn into its textures once, so ones drawn before their web font loaded are replaced by a new one once it has, unless replaced
|
|
434
|
+
// or disposed meanwhile; loading starts it if nothing has, and gives no faces for a system font or one that failed. Only once, so a font that
|
|
435
|
+
// never checks as loaded can't replace it again and again. Not by its set(options), which leaves it detached from the controls and keeps every
|
|
436
|
+
// other old label
|
|
412
437
|
const created = v.gizmo;
|
|
413
|
-
|
|
414
|
-
|
|
438
|
+
const font = created && `${created.options.font?.weight ?? ""} 16px ${created.options.font?.family ?? "sans-serif"}`;
|
|
439
|
+
if (created && font && !fontsLoaded && !document.fonts.check(font)) {
|
|
440
|
+
document.fonts
|
|
441
|
+
.load(font)
|
|
442
|
+
.then((faces) => faces.length > 0 && v.gizmo === created && !v.disposed && replaceGizmo(v))
|
|
443
|
+
.catch(() => undefined);
|
|
415
444
|
}
|
|
416
445
|
}
|
|
417
446
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
447
|
+
function replaceGizmo<Content>(v: Viewer<Content>): void {
|
|
448
|
+
updateGizmo(v, true);
|
|
449
|
+
invalidate(v);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/** A click starts a turn, from where a turn going on has got to */
|
|
453
|
+
function onGizmoStart<Content>(v: Viewer<Content>): void {
|
|
454
|
+
if (v.gizmo?.animating) {
|
|
455
|
+
v.turn = { from: getPose(v), start: performance.now() };
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
/** Dragging the gizmo stops a turn going on; a click's changes come while it's animating, or before the turn knows where it ends */
|
|
460
|
+
function onGizmoChange<Content>(v: Viewer<Content>): void {
|
|
461
|
+
if (!v.gizmo?.animating && v.turn?.to) {
|
|
462
|
+
v.turn = undefined;
|
|
423
463
|
}
|
|
464
|
+
invalidate(v);
|
|
424
465
|
}
|
|
425
466
|
|
|
426
467
|
/**
|
|
427
|
-
*
|
|
428
|
-
* distance
|
|
468
|
+
* The gizmo, not animated, moved the camera to the clicked view at once; it's moved back, to turn from there in the next frames, eased, and with the
|
|
469
|
+
* target and distance too, as a click can also move the target back to the scene's center and fit the scene to the view. An orthographic camera's
|
|
470
|
+
* zoom starts at the one that shows as much on the fitted projection as before
|
|
429
471
|
*/
|
|
430
|
-
function
|
|
431
|
-
const {
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
472
|
+
function onGizmoEnd<Content>(v: Viewer<Content>): void {
|
|
473
|
+
const { turn, camera } = v;
|
|
474
|
+
if (turn && !turn.to) {
|
|
475
|
+
const { gizmo } = v.options;
|
|
476
|
+
const reset = gizmo?.type === "Viewcube" ? gizmo.viewcubeProps?.resetZoomAndPanOnClick : gizmo?.viewportProps?.resetZoomAndPanOnClick;
|
|
477
|
+
const quaternion = camera.quaternion.clone();
|
|
478
|
+
const height = (): number => ("isOrthographicCamera" in camera ? camera.top - camera.bottom : 1);
|
|
479
|
+
const before = height();
|
|
480
|
+
const placement = reset ? fitScene(v, quaternion) : undefined;
|
|
481
|
+
const from = { ...turn.from, zoom: (turn.from.zoom * height()) / before };
|
|
482
|
+
const to = placement ? { quaternion, target: new Vector3(), distance: placement.distance, zoom: 1 } : { ...turn.from, quaternion };
|
|
483
|
+
v.turn = { ...turn, from, to };
|
|
484
|
+
setCameraPose(v, from);
|
|
485
|
+
}
|
|
486
|
+
// Its end, also of a press during a turn, enabled the controls, which the turn enables when it ends
|
|
487
|
+
if (v.turn) {
|
|
488
|
+
v.controls.orbit.enabled = false;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
function turnCamera<Content>(v: Viewer<Content>, from: Pose, to: Pose, progress: number): void {
|
|
493
|
+
const t = Math.min(1, progress);
|
|
494
|
+
const eased = t * t * (3 - 2 * t);
|
|
495
|
+
const lerp = (a: number, b: number): number => a + (b - a) * eased;
|
|
496
|
+
setCameraPose(v, {
|
|
497
|
+
quaternion: from.quaternion.clone().slerp(to.quaternion, eased),
|
|
498
|
+
target: from.target.clone().lerp(to.target, eased),
|
|
499
|
+
distance: lerp(from.distance, to.distance),
|
|
500
|
+
zoom: lerp(from.zoom, to.zoom),
|
|
501
|
+
});
|
|
502
|
+
if (t === 1) {
|
|
503
|
+
endTurn(v);
|
|
437
504
|
}
|
|
438
505
|
}
|
|
439
506
|
|
|
507
|
+
/** The controls the click disabled are enabled again */
|
|
508
|
+
function endTurn<Content>(v: Viewer<Content>): void {
|
|
509
|
+
v.turn = undefined;
|
|
510
|
+
v.controls.orbit.enabled = v.controls.current.options.enabled ?? true;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
function getPose<Content>({ camera, controls }: Viewer<Content>): Pose {
|
|
514
|
+
const target = controls.orbit.target.clone();
|
|
515
|
+
return { quaternion: camera.quaternion.clone(), target, distance: camera.position.distanceTo(target), zoom: camera.zoom };
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
function setCameraPose<Content>(v: Viewer<Content>, { quaternion, target, distance, zoom }: Pose): void {
|
|
519
|
+
const { camera } = v;
|
|
520
|
+
camera.quaternion.copy(quaternion);
|
|
521
|
+
camera.position.set(0, 0, distance).applyQuaternion(quaternion).add(target);
|
|
522
|
+
camera.zoom = zoom;
|
|
523
|
+
camera.updateProjectionMatrix();
|
|
524
|
+
v.controls.orbit.target.copy(target);
|
|
525
|
+
v.gizmo?.cameraUpdate();
|
|
526
|
+
}
|
|
527
|
+
|
|
440
528
|
function onPointerMove<Content>(v: Viewer<Content>, event: PointerEvent): void {
|
|
441
529
|
v.pointer.last = event;
|
|
442
530
|
v.pointer.frame ||= requestAnimationFrame(() => hoverAtPointer(v));
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { zOrderElement } from "./svg-geometries/shared.js";
|
|
2
|
-
/**
|
|
3
|
-
* Elements in drawing order, back to front, by Newell's ordering without splitting: of two elements that overlap on screen, one entirely behind the
|
|
4
|
-
* other's plane, or the other entirely in front of its plane, is drawn first. Elements are drawn by mean depth otherwise, each after those it must be
|
|
5
|
-
* drawn after, depth first; elements overlapping in a cycle, which only splitting them could resolve, are drawn where the cycle is met. Elements
|
|
6
|
-
* entirely inside an opaque convex polygon in front of them are left out, as they can't be seen
|
|
7
|
-
*/
|
|
8
|
-
export declare function orderElements(elements: ReadonlyArray<zOrderElement>): ReadonlyArray<zOrderElement>;
|
|
9
|
-
//# sourceMappingURL=svg-order.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"svg-order.d.ts","sourceRoot":"","sources":["../../../src/renderers/svg/svg-order.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CA0DlG"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Elements in drawing order, back to front, by Newell's ordering without splitting: of two elements that overlap on screen, one entirely behind the
|
|
3
|
-
* other's plane, or the other entirely in front of its plane, is drawn first. Elements are drawn by mean depth otherwise, each after those it must be
|
|
4
|
-
* drawn after, depth first; elements overlapping in a cycle, which only splitting them could resolve, are drawn where the cycle is met. Elements
|
|
5
|
-
* entirely inside an opaque convex polygon in front of them are left out, as they can't be seen
|
|
6
|
-
*/
|
|
7
|
-
export function orderElements(elements) {
|
|
8
|
-
const items = [];
|
|
9
|
-
const swept = [];
|
|
10
|
-
const byDepth = [];
|
|
11
|
-
elements.forEach((e, i) => {
|
|
12
|
-
items.push(e.polygon && createItem(e.polygon, !!e.opaque));
|
|
13
|
-
byDepth.push(i);
|
|
14
|
-
if (e.polygon) {
|
|
15
|
-
swept.push(i);
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
swept.sort((a, b) => items[a].min.x - items[b].min.x);
|
|
19
|
-
byDepth.sort((a, b) => elements[a].zOrder - elements[b].zOrder);
|
|
20
|
-
// Sweep along x: each item is compared with the active ones whose bounds still overlap it on screen, dropping the others in the same pass
|
|
21
|
-
const behind = [];
|
|
22
|
-
const hidden = new Uint8Array(elements.length);
|
|
23
|
-
const active = [];
|
|
24
|
-
for (const i of swept) {
|
|
25
|
-
const a = items[i];
|
|
26
|
-
active.length = active.reduce((kept, j) => {
|
|
27
|
-
const b = items[j];
|
|
28
|
-
if (b.max.x <= a.min.x + eps) {
|
|
29
|
-
return kept;
|
|
30
|
-
}
|
|
31
|
-
active[kept] = j;
|
|
32
|
-
const order = b.min.y < a.max.y - eps && a.min.y < b.max.y - eps ? getOrder(a, b) : 0;
|
|
33
|
-
if (order !== 0) {
|
|
34
|
-
const [back, front] = order < 0 ? [i, j] : [j, i];
|
|
35
|
-
(behind[front] ??= []).push(back);
|
|
36
|
-
hidden[back] ||= covers(items[front], items[back]) ? 1 : 0;
|
|
37
|
-
}
|
|
38
|
-
return kept + 1;
|
|
39
|
-
}, 0);
|
|
40
|
-
active.push(i);
|
|
41
|
-
}
|
|
42
|
-
// Depth first: an element is drawn when it's met on the stack again, after the elements behind it; 1 while it waits, 2 once drawn
|
|
43
|
-
const state = new Uint8Array(elements.length);
|
|
44
|
-
const stack = [];
|
|
45
|
-
const ordered = [];
|
|
46
|
-
for (const start of byDepth) {
|
|
47
|
-
stack.push(start);
|
|
48
|
-
while (stack.length > 0) {
|
|
49
|
-
const i = stack.pop();
|
|
50
|
-
if (state[i] === 0) {
|
|
51
|
-
state[i] = 1;
|
|
52
|
-
stack.push(i);
|
|
53
|
-
behind[i]?.forEach((j) => state[j] === 0 && stack.push(j));
|
|
54
|
-
}
|
|
55
|
-
else if (state[i] === 1) {
|
|
56
|
-
state[i] = 2;
|
|
57
|
-
if (!hidden[i]) {
|
|
58
|
-
ordered.push(elements[i]);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return ordered;
|
|
64
|
-
}
|
|
65
|
-
/** Distances below this, in the scene's units, are equal */
|
|
66
|
-
const eps = 1e-3;
|
|
67
|
-
/** In one pass over the points: their bounds, edge normals on screen, plane by Newell's method, and whether they're a convex polygon */
|
|
68
|
-
function createItem(points, opaque) {
|
|
69
|
-
const min = { x: Infinity, y: Infinity, z: Infinity };
|
|
70
|
-
const max = { x: -Infinity, y: -Infinity, z: -Infinity };
|
|
71
|
-
const normal = { x: 0, y: 0, z: 0 };
|
|
72
|
-
// The smallest and largest turn at a corner on screen, the same sign throughout for a convex polygon
|
|
73
|
-
const turns = { min: 0, max: 0 };
|
|
74
|
-
const axes = [];
|
|
75
|
-
points.forEach((p, i) => {
|
|
76
|
-
Object.assign(min, { x: Math.min(min.x, p.x), y: Math.min(min.y, p.y), z: Math.min(min.z, p.z) });
|
|
77
|
-
Object.assign(max, { x: Math.max(max.x, p.x), y: Math.max(max.y, p.y), z: Math.max(max.z, p.z) });
|
|
78
|
-
const q = points[(i + 1) % points.length];
|
|
79
|
-
normal.x += (p.y - q.y) * (p.z + q.z);
|
|
80
|
-
normal.y += (p.z - q.z) * (p.x + q.x);
|
|
81
|
-
normal.z += (p.x - q.x) * (p.y + q.y);
|
|
82
|
-
if (Math.abs(q.x - p.x) + Math.abs(q.y - p.y) > eps) {
|
|
83
|
-
axes.push([q.y - p.y, p.x - q.x]);
|
|
84
|
-
}
|
|
85
|
-
const o = points[(i + points.length - 1) % points.length];
|
|
86
|
-
const turn = (p.x - o.x) * (q.y - p.y) - (p.y - o.y) * (q.x - p.x);
|
|
87
|
-
Object.assign(turns, { min: Math.min(turns.min, turn), max: Math.max(turns.max, turn) });
|
|
88
|
-
});
|
|
89
|
-
const convex = points.length >= 3 && (turns.min >= -eps || turns.max <= eps);
|
|
90
|
-
const occluder = opaque && convex ? Math.sign(normal.z) : 0;
|
|
91
|
-
const length = Math.hypot(normal.x, normal.y, normal.z);
|
|
92
|
-
if (points.length < 3 || length < eps || Math.abs(normal.z) < 1e-6 * length) {
|
|
93
|
-
return { points, min, max, axes, occluder: 0 };
|
|
94
|
-
}
|
|
95
|
-
// Toward the viewer, at +z
|
|
96
|
-
const s = Math.sign(normal.z) / length;
|
|
97
|
-
const n = { x: normal.x * s, y: normal.y * s, z: normal.z * s };
|
|
98
|
-
const p0 = points[0];
|
|
99
|
-
return { points, min, max, axes, plane: { normal: n, d: n.x * p0.x + n.y * p0.y + n.z * p0.z }, occluder };
|
|
100
|
-
}
|
|
101
|
-
/** -1 if `a` is drawn before `b`, 1 if after, 0 if they don't overlap or nothing decides */
|
|
102
|
-
function getOrder(a, b) {
|
|
103
|
-
if (a.max.z <= b.min.z + eps) {
|
|
104
|
-
return -1;
|
|
105
|
-
}
|
|
106
|
-
if (b.max.z <= a.min.z + eps) {
|
|
107
|
-
return 1;
|
|
108
|
-
}
|
|
109
|
-
if (!overlap(a, b)) {
|
|
110
|
-
return 0;
|
|
111
|
-
}
|
|
112
|
-
const aToB = b.plane ? getSide(a.points, b.plane) : 0;
|
|
113
|
-
if (aToB !== 0) {
|
|
114
|
-
return aToB;
|
|
115
|
-
}
|
|
116
|
-
return a.plane ? -getSide(b.points, a.plane) : 0;
|
|
117
|
-
}
|
|
118
|
-
/** -1 if the points are all behind the plane, 1 if all in front of it, 0 if on both sides or in it */
|
|
119
|
-
function getSide(points, { normal: n, d }) {
|
|
120
|
-
const range = { min: Infinity, max: -Infinity };
|
|
121
|
-
points.forEach((p) => {
|
|
122
|
-
const distance = n.x * p.x + n.y * p.y + n.z * p.z - d;
|
|
123
|
-
Object.assign(range, { min: Math.min(range.min, distance), max: Math.max(range.max, distance) });
|
|
124
|
-
});
|
|
125
|
-
return range.max <= eps && range.min < -eps ? -1 : range.min >= -eps && range.max > eps ? 1 : 0;
|
|
126
|
-
}
|
|
127
|
-
/** Whether the polygons overlap on screen by more than touching: no edge normal of either separates them */
|
|
128
|
-
function overlap(a, b) {
|
|
129
|
-
return a.axes.every(([x, y]) => !separates(a, b, x, y)) && b.axes.every(([x, y]) => !separates(a, b, x, y));
|
|
130
|
-
}
|
|
131
|
-
function separates(a, b, x, y) {
|
|
132
|
-
const range = { aMin: Infinity, aMax: -Infinity, bMin: Infinity, bMax: -Infinity };
|
|
133
|
-
a.points.forEach((p) => Object.assign(range, { aMin: Math.min(range.aMin, p.x * x + p.y * y), aMax: Math.max(range.aMax, p.x * x + p.y * y) }));
|
|
134
|
-
b.points.forEach((p) => Object.assign(range, { bMin: Math.min(range.bMin, p.x * x + p.y * y), bMax: Math.max(range.bMax, p.x * x + p.y * y) }));
|
|
135
|
-
const tolerance = eps * Math.hypot(x, y);
|
|
136
|
-
return range.aMax <= range.bMin + tolerance || range.bMax <= range.aMin + tolerance;
|
|
137
|
-
}
|
|
138
|
-
/** Whether the front's opaque convex polygon contains all of the back's points on screen, so the back can't be seen; not for a single point, e.g. text */
|
|
139
|
-
function covers(front, back) {
|
|
140
|
-
const { points, occluder } = front;
|
|
141
|
-
return (occluder !== 0 &&
|
|
142
|
-
back.points.length >= 2 &&
|
|
143
|
-
points.every((p, i) => {
|
|
144
|
-
const q = points[(i + 1) % points.length];
|
|
145
|
-
return back.points.every((r) => occluder * ((q.x - p.x) * (r.y - p.y) - (q.y - p.y) * (r.x - p.x)) >= -eps * Math.hypot(q.x - p.x, q.y - p.y));
|
|
146
|
-
}));
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=svg-order.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"svg-order.js","sourceRoot":"","sources":["../../../src/renderers/svg/svg-order.ts"],"names":[],"mappings":"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"}
|