abstract-3d 4.0.10 → 4.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/lib/abstract-3d.d.ts +6 -4
  2. package/lib/abstract-3d.d.ts.map +1 -1
  3. package/lib/abstract-3d.js +12 -0
  4. package/lib/abstract-3d.js.map +1 -1
  5. package/lib/renderers/three/appearance/appearance.d.ts +5 -3
  6. package/lib/renderers/three/appearance/appearance.d.ts.map +1 -1
  7. package/lib/renderers/three/appearance/appearance.js +1 -1
  8. package/lib/renderers/three/appearance/appearance.js.map +1 -1
  9. package/lib/renderers/three/build/materials.d.ts.map +1 -1
  10. package/lib/renderers/three/build/materials.js +8 -6
  11. package/lib/renderers/three/build/materials.js.map +1 -1
  12. package/package.json +3 -3
  13. package/src/abstract-3d.ts +17 -4
  14. package/src/renderers/three/appearance/appearance.test.ts +9 -4
  15. package/src/renderers/three/appearance/appearance.ts +6 -4
  16. package/src/renderers/three/build/materials.ts +8 -6
  17. package/lib/renderers/ifc/ifc.test.d.ts +0 -2
  18. package/lib/renderers/ifc/ifc.test.d.ts.map +0 -1
  19. package/lib/renderers/ifc/ifc.test.js +0 -380
  20. package/lib/renderers/ifc/ifc.test.js.map +0 -1
  21. package/lib/renderers/react/react-camera.d.ts +0 -71
  22. package/lib/renderers/react/react-camera.d.ts.map +0 -1
  23. package/lib/renderers/react/react-camera.js +0 -201
  24. package/lib/renderers/react/react-camera.js.map +0 -1
  25. package/lib/renderers/react/react-dimension.d.ts +0 -27
  26. package/lib/renderers/react/react-dimension.d.ts.map +0 -1
  27. package/lib/renderers/react/react-dimension.js +0 -44
  28. package/lib/renderers/react/react-dimension.js.map +0 -1
  29. package/lib/renderers/react/react-group.d.ts +0 -29
  30. package/lib/renderers/react/react-group.d.ts.map +0 -1
  31. package/lib/renderers/react/react-group.js +0 -82
  32. package/lib/renderers/react/react-group.js.map +0 -1
  33. package/lib/renderers/react/react-image-material.d.ts +0 -30
  34. package/lib/renderers/react/react-image-material.d.ts.map +0 -1
  35. package/lib/renderers/react/react-image-material.js +0 -81
  36. package/lib/renderers/react/react-image-material.js.map +0 -1
  37. package/lib/renderers/react/react-material.d.ts +0 -19
  38. package/lib/renderers/react/react-material.d.ts.map +0 -1
  39. package/lib/renderers/react/react-material.js +0 -39
  40. package/lib/renderers/react/react-material.js.map +0 -1
  41. package/lib/renderers/react/react-mesh.d.ts +0 -11
  42. package/lib/renderers/react/react-mesh.d.ts.map +0 -1
  43. package/lib/renderers/react/react-mesh.js +0 -302
  44. package/lib/renderers/react/react-mesh.js.map +0 -1
  45. package/lib/renderers/react/react-relation.d.ts +0 -10
  46. package/lib/renderers/react/react-relation.d.ts.map +0 -1
  47. package/lib/renderers/react/react-relation.js +0 -31
  48. package/lib/renderers/react/react-relation.js.map +0 -1
  49. package/lib/renderers/react/react-scene.d.ts +0 -25
  50. package/lib/renderers/react/react-scene.d.ts.map +0 -1
  51. package/lib/renderers/react/react-scene.js +0 -13
  52. package/lib/renderers/react/react-scene.js.map +0 -1
  53. package/lib/renderers/react/react-types.d.ts +0 -7
  54. package/lib/renderers/react/react-types.d.ts.map +0 -1
  55. package/lib/renderers/react/react-types.js +0 -3
  56. package/lib/renderers/react/react-types.js.map +0 -1
  57. package/lib/renderers/three/appearance/appearance.test.d.ts +0 -2
  58. package/lib/renderers/three/appearance/appearance.test.d.ts.map +0 -1
  59. package/lib/renderers/three/appearance/appearance.test.js +0 -97
  60. package/lib/renderers/three/appearance/appearance.test.js.map +0 -1
  61. package/lib/renderers/three/appearance.d.ts +0 -41
  62. package/lib/renderers/three/appearance.d.ts.map +0 -1
  63. package/lib/renderers/three/appearance.js +0 -100
  64. package/lib/renderers/three/appearance.js.map +0 -1
  65. package/lib/renderers/three/build/build.test.d.ts +0 -2
  66. package/lib/renderers/three/build/build.test.d.ts.map +0 -1
  67. package/lib/renderers/three/build/build.test.js +0 -120
  68. package/lib/renderers/three/build/build.test.js.map +0 -1
  69. package/lib/renderers/three/build.d.ts +0 -50
  70. package/lib/renderers/three/build.d.ts.map +0 -1
  71. package/lib/renderers/three/build.js +0 -210
  72. package/lib/renderers/three/build.js.map +0 -1
  73. package/lib/renderers/three/camera/camera.test.d.ts +0 -2
  74. package/lib/renderers/three/camera/camera.test.d.ts.map +0 -1
  75. package/lib/renderers/three/camera/camera.test.js +0 -46
  76. package/lib/renderers/three/camera/camera.test.js.map +0 -1
  77. package/lib/renderers/three/camera.d.ts +0 -63
  78. package/lib/renderers/three/camera.d.ts.map +0 -1
  79. package/lib/renderers/three/camera.js +0 -85
  80. package/lib/renderers/three/camera.js.map +0 -1
  81. package/lib/renderers/three/compile/compile.test.d.ts +0 -2
  82. package/lib/renderers/three/compile/compile.test.d.ts.map +0 -1
  83. package/lib/renderers/three/compile/compile.test.js +0 -93
  84. package/lib/renderers/three/compile/compile.test.js.map +0 -1
  85. package/lib/renderers/three/compile.d.ts +0 -58
  86. package/lib/renderers/three/compile.d.ts.map +0 -1
  87. package/lib/renderers/three/compile.js +0 -89
  88. package/lib/renderers/three/compile.js.map +0 -1
  89. package/lib/renderers/three/controls.d.ts +0 -27
  90. package/lib/renderers/three/controls.d.ts.map +0 -1
  91. package/lib/renderers/three/controls.js +0 -115
  92. package/lib/renderers/three/controls.js.map +0 -1
  93. package/lib/renderers/three/geometry/geometry.test.d.ts +0 -2
  94. package/lib/renderers/three/geometry/geometry.test.d.ts.map +0 -1
  95. package/lib/renderers/three/geometry/geometry.test.js +0 -80
  96. package/lib/renderers/three/geometry/geometry.test.js.map +0 -1
  97. package/lib/renderers/three/geometry.d.ts +0 -20
  98. package/lib/renderers/three/geometry.d.ts.map +0 -1
  99. package/lib/renderers/three/geometry.js +0 -164
  100. package/lib/renderers/three/geometry.js.map +0 -1
  101. package/lib/renderers/three/gizmo.d.ts +0 -49
  102. package/lib/renderers/three/gizmo.d.ts.map +0 -1
  103. package/lib/renderers/three/gizmo.js +0 -172
  104. package/lib/renderers/three/gizmo.js.map +0 -1
  105. package/lib/renderers/three/input.d.ts +0 -25
  106. package/lib/renderers/three/input.d.ts.map +0 -1
  107. package/lib/renderers/three/input.js +0 -71
  108. package/lib/renderers/three/input.js.map +0 -1
  109. package/lib/renderers/three/lines.d.ts +0 -16
  110. package/lib/renderers/three/lines.d.ts.map +0 -1
  111. package/lib/renderers/three/lines.js +0 -63
  112. package/lib/renderers/three/lines.js.map +0 -1
  113. package/lib/renderers/three/materials.d.ts +0 -15
  114. package/lib/renderers/three/materials.d.ts.map +0 -1
  115. package/lib/renderers/three/materials.js +0 -70
  116. package/lib/renderers/three/materials.js.map +0 -1
  117. package/lib/renderers/three/options.d.ts +0 -68
  118. package/lib/renderers/three/options.d.ts.map +0 -1
  119. package/lib/renderers/three/options.js +0 -64
  120. package/lib/renderers/three/options.js.map +0 -1
  121. package/lib/renderers/three/overlays.d.ts +0 -25
  122. package/lib/renderers/three/overlays.d.ts.map +0 -1
  123. package/lib/renderers/three/overlays.js +0 -57
  124. package/lib/renderers/three/overlays.js.map +0 -1
  125. package/lib/renderers/three/quality/quality.test.d.ts +0 -2
  126. package/lib/renderers/three/quality/quality.test.d.ts.map +0 -1
  127. package/lib/renderers/three/quality/quality.test.js +0 -23
  128. package/lib/renderers/three/quality/quality.test.js.map +0 -1
  129. package/lib/renderers/three/quality.d.ts +0 -24
  130. package/lib/renderers/three/quality.d.ts.map +0 -1
  131. package/lib/renderers/three/quality.js +0 -67
  132. package/lib/renderers/three/quality.js.map +0 -1
  133. package/lib/renderers/three/text/text.test.d.ts +0 -2
  134. package/lib/renderers/three/text/text.test.d.ts.map +0 -1
  135. package/lib/renderers/three/text/text.test.js +0 -70
  136. package/lib/renderers/three/text/text.test.js.map +0 -1
  137. package/lib/renderers/three/text.d.ts +0 -53
  138. package/lib/renderers/three/text.d.ts.map +0 -1
  139. package/lib/renderers/three/text.js +0 -151
  140. package/lib/renderers/three/text.js.map +0 -1
  141. package/lib/renderers/three/viewer/options.test.d.ts +0 -2
  142. package/lib/renderers/three/viewer/options.test.d.ts.map +0 -1
  143. package/lib/renderers/three/viewer/options.test.js +0 -38
  144. package/lib/renderers/three/viewer/options.test.js.map +0 -1
  145. package/lib/renderers/three/viewer.d.ts +0 -38
  146. package/lib/renderers/three/viewer.d.ts.map +0 -1
  147. package/lib/renderers/three/viewer.js +0 -435
  148. package/lib/renderers/three/viewer.js.map +0 -1
@@ -1,97 +0,0 @@
1
- import { Color, Vector4 } from "three";
2
- import { describe, expect, it } from "vitest";
3
- import { box, line, text, vec3, vec3Zero } from "../../../abstract-3d.js";
4
- import { shade } from "../../../utils.js";
5
- import { getHighlight, getItemColor, getMaterialClass, getTargetStates, HOVERED, SELECTED } from "./appearance.js";
6
- const red = "rgb(255, 0, 0)";
7
- const select = "rgb(14,82,184)";
8
- const item = (mesh, style = "group", role = "solid") => ({
9
- mesh,
10
- role,
11
- style,
12
- matrix: undefined,
13
- target: 0,
14
- data: undefined,
15
- animation: undefined,
16
- });
17
- const solid = (material, style = "group") => item(box(vec3(1, 1, 1), material), style);
18
- const group = { kind: "group", id: "fan", root: 0, rootData: undefined };
19
- const relation = { kind: "relation", relation: { id: "r", pos: vec3Zero } };
20
- const idle = { relationsActive: false, dimensionsClickable: true };
21
- const round = (v) => Math.round(v * 1e4) / 1e4;
22
- const rgba = (color, alpha = 1) => [...new Color(color).toArray(), alpha].map(round);
23
- const classify = (i, target, state = {}) => getMaterialClass(i, getTargetStates([target], { ...idle, ...state })[0]);
24
- const paint = (i, target, partial = {}) => {
25
- const state = { ...idle, ...partial };
26
- return getItemColor(i, getTargetStates([target], state)[0], getHighlight(target, 0, state), new Vector4())
27
- .toArray()
28
- .map(round);
29
- };
30
- describe("getMaterialClass", () => {
31
- it("lights solids, with the material's metalness, roughness and side", () => {
32
- expect(classify(solid({ normal: red, metalness: 0.3, roughness: 0.7 }), group)).toEqual({
33
- lit: true,
34
- metalness: 0.3,
35
- roughness: 0.7,
36
- side: "double",
37
- transparent: false,
38
- });
39
- expect(classify(solid({ normal: red, backfaceCulling: true }), group)).toMatchObject({ side: "front", metalness: 0, roughness: 1 });
40
- });
41
- it("makes translucent materials and disabled groups transparent", () => {
42
- expect(classify(solid({ normal: red, opacity: 0.5 }), group).transparent).toBe(true);
43
- expect(classify(solid({ normal: red }), group, { relationsActive: true }).transparent).toBe(true);
44
- expect(classify(solid({ normal: red }), group, { relationsActive: true, activeComponents: { fan: "Accept" } }).transparent).toBe(false);
45
- });
46
- it("uses the material state's metalness and roughness", () => {
47
- expect(classify(solid({ normal: red }), group, { activeComponents: { fan: "Error" } })).toMatchObject({ metalness: 0.5, roughness: 0.5 });
48
- });
49
- it("draws relations unlit on both sides, and their outlines on the back", () => {
50
- expect(classify(solid({ normal: red }, "relation"), relation)).toMatchObject({ lit: false, side: "double", transparent: false });
51
- expect(classify(solid({ normal: red }, "outline"), relation)).toMatchObject({ lit: false, side: "back" });
52
- });
53
- });
54
- describe("getHighlight", () => {
55
- it("combines hover by the pointer or by id with selection", () => {
56
- expect(getHighlight(group, 0, idle)).toBe(0);
57
- expect(getHighlight(group, 0, { ...idle, hoveredTarget: 1 })).toBe(0);
58
- expect(getHighlight(group, 0, { ...idle, hoveredTarget: 0, selectedIds: { fan: true } })).toBe(HOVERED + SELECTED);
59
- expect(getHighlight(group, 0, { ...idle, hoveredIds: new Set(["fan"]) })).toBe(HOVERED);
60
- });
61
- });
62
- describe("getItemColor", () => {
63
- it("is the material's color and opacity", () => {
64
- expect(paint(solid({ normal: red, opacity: 0.5 }), group)).toEqual(rgba(red, 0.5));
65
- });
66
- it("darkens hovered groups, by the pointer or by id, and colors selected ones", () => {
67
- expect(paint(solid({ normal: red }), group, { hoveredTarget: 0 })).toEqual(rgba(shade(-0.4, red)));
68
- expect(paint(solid({ normal: red }), group, { hoveredIds: new Set(["fan"]) })).toEqual(rgba(shade(-0.4, red)));
69
- expect(paint(solid({ normal: red }), group, { selectedIds: { fan: true } })).toEqual(rgba(select));
70
- expect(paint(solid({ normal: red }), group, { selectedIds: { fan: true }, hoveredTarget: 0 })).toEqual(rgba(shade(-0.4, select)));
71
- });
72
- it("ignores hover by id for groups without an id", () => {
73
- expect(paint(solid({ normal: red }), { ...group, id: "" }, { hoveredIds: new Set([""]) })).toEqual(rgba(red));
74
- });
75
- it("colors groups by their material state and fades disabled ones", () => {
76
- expect(paint(solid({ normal: red }), group, { activeComponents: { fan: "Accept" } })).toEqual(rgba("rgb(0,148,91)"));
77
- expect(paint(solid({ normal: red, opacity: 0.8 }), group, { relationsActive: true })).toEqual(rgba(red, 0.1));
78
- });
79
- it("selects text in a dark blue", () => {
80
- expect(paint(item(text(vec3Zero, "A", 1, { normal: red }), "group", "text"), group, { selectedIds: { fan: true } })).toEqual(rgba("rgb(0, 26, 65)"));
81
- });
82
- it("keeps lines in their material's color", () => {
83
- expect(paint(item(line(vec3Zero, vec3(1, 0, 0), 1, { normal: red }), "group", "line"), group, { selectedIds: { fan: true } })).toEqual(rgba(red));
84
- });
85
- it("highlights clickable dimensions when hovered or selected", () => {
86
- const dimension = { kind: "dimension", id: "fan" };
87
- const d = solid({ normal: red }, "dimension");
88
- expect(paint(d, dimension, { hoveredTarget: 0 })).toEqual(rgba(select));
89
- expect(paint(d, dimension, { selectedIds: { fan: true } })).toEqual(rgba(select));
90
- expect(paint(d, dimension, { selectedIds: { fan: true }, dimensionsClickable: false })).toEqual(rgba(red));
91
- expect(paint(d, dimension, { selectedIds: { fan: true }, relationsActive: true })).toEqual(rgba(red));
92
- });
93
- it("darkens hovered relations", () => {
94
- expect(paint(solid({ normal: red }, "relation"), relation, { hoveredTarget: 0 })).toEqual(rgba(shade(-0.4, red)));
95
- });
96
- });
97
- //# sourceMappingURL=appearance.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appearance.test.js","sourceRoot":"","sources":["../../../../src/renderers/three/appearance/appearance.test.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- import { type Vector4 } from "three";
2
- import type { Material } from "../../abstract-3d.js";
3
- import type { Item, Target } from "./compile.js";
4
- /** Material classes and per-instance colors of items, by the viewer's state */
5
- export type MaterialState = "Accept" | "Error" | "Warning";
6
- export declare const ERROR_IMG_KEY = "error";
7
- /** The state that decides material classes, so changing it rebuilds the scene */
8
- export type StructureState = {
9
- readonly activeComponents?: Record<string, MaterialState>;
10
- /** Relations are active, e.g. to pick one to insert a component on, so only the groups whose material state is Accept can be clicked */
11
- readonly relationsActive: boolean;
12
- };
13
- /** The state that only changes colors */
14
- export type PaintState = StructureState & {
15
- readonly selectedIds?: Record<string, boolean>;
16
- readonly hoveredIds?: ReadonlySet<string>;
17
- /** The target under the pointer */
18
- readonly hoveredTarget?: number;
19
- readonly dimensionsClickable: boolean;
20
- };
21
- export type Side = "front" | "back" | "double";
22
- /** Items of one material class share a material, and are drawn in one batch */
23
- export type MaterialClass = {
24
- readonly lit: boolean;
25
- readonly metalness: number;
26
- readonly roughness: number;
27
- readonly side: Side;
28
- readonly transparent: boolean;
29
- };
30
- export declare const selectMat: Material;
31
- export declare const getMaterialState: (target: Target, state: StructureState) => MaterialState | undefined;
32
- export declare const isDisabled: (target: Target, state: StructureState) => boolean;
33
- export declare function getMaterialClass(item: Item, target: Target, state: StructureState): MaterialClass;
34
- export declare const materialClassKey: (c: MaterialClass) => string;
35
- /** Bit flags of how a target is highlighted, so only targets whose highlight changed need a repaint */
36
- export declare const HOVERED = 1;
37
- export declare const SELECTED = 2;
38
- export declare function getHighlight(target: Target, targetIndex: number, state: PaintState): number;
39
- /** The item's linear color and opacity by its target's highlight, written to `out` */
40
- export declare function getItemColor(item: Item, target: Target, highlight: number, state: StructureState, out: Vector4): Vector4;
41
- //# sourceMappingURL=appearance.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appearance.d.ts","sourceRoot":"","sources":["../../../src/renderers/three/appearance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEjD,+EAA+E;AAE/E,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,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,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B,CAAC;AAMF,eAAO,MAAM,SAAS,EAAE,QAAqF,CAAC;AAI9G,eAAO,MAAM,gBAAgB,WAAY,MAAM,SAAS,cAAc,KAAG,aAAa,GAAG,SACd,CAAC;AAE5E,eAAO,MAAM,UAAU,WAAY,MAAM,SAAS,cAAc,KAAG,OAC+B,CAAC;AAEnG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,aAAa,CAqBjG;AAED,eAAO,MAAM,gBAAgB,MAAO,aAAa,KAAG,MAA6E,CAAC;AAElI,uGAAuG;AACvG,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,QAAQ,IAAI,CAAC;AAE1B,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAc3F;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAoBxH"}
@@ -1,100 +0,0 @@
1
- import { Color } from "three";
2
- import { shade } from "../../utils.js";
3
- export const ERROR_IMG_KEY = "error";
4
- const disabledOpacity = 0.125;
5
- const acceptMat = { normal: "rgb(0,148,91)", opacity: 1.0, metalness: 0.5, roughness: 0.5 };
6
- const errorMat = { normal: "#b82f3a", opacity: 1.0, metalness: 0.5, roughness: 0.5 };
7
- const warningMat = { normal: "rgb(240, 197, 48)", opacity: 1.0, metalness: 0.5, roughness: 0.5 };
8
- export const selectMat = { normal: "rgb(14,82,184)", opacity: 1.0, metalness: 0.5, roughness: 0.5 };
9
- const textSelectMat = { normal: "rgb(0, 26, 65)", opacity: 1.0, metalness: 0.5, roughness: 0.5 };
10
- const stateMats = { Accept: acceptMat, Error: errorMat, Warning: warningMat };
11
- export const getMaterialState = (target, state) => target.kind === "group" ? state.activeComponents?.[target.id] : undefined;
12
- export const isDisabled = (target, state) => target.kind === "group" && state.relationsActive && getMaterialState(target, state) !== "Accept";
13
- export function getMaterialClass(item, target, state) {
14
- const material = item.mesh.material;
15
- switch (item.style) {
16
- case "relation":
17
- return { lit: false, metalness: 0, roughness: 1, side: "double", transparent: false };
18
- case "outline":
19
- return { lit: false, metalness: 0, roughness: 1, side: "back", transparent: false };
20
- case "dimension":
21
- return { lit: false, metalness: 0, roughness: 1, side: "front", transparent: getOpacity(material) < 1 };
22
- default: {
23
- const materialState = getMaterialState(target, state);
24
- const mat = materialState ? stateMats[materialState] : material;
25
- return {
26
- lit: item.role === "solid",
27
- metalness: mat.metalness ?? 0,
28
- roughness: mat.roughness ?? 1,
29
- side: item.role === "text" ? "front" : material.backfaceCulling ? "front" : "double",
30
- transparent: getOpacity(material) < 1 || isDisabled(target, state),
31
- };
32
- }
33
- }
34
- }
35
- export const materialClassKey = (c) => `${c.lit}|${c.metalness}|${c.roughness}|${c.side}|${c.transparent}`;
36
- /** Bit flags of how a target is highlighted, so only targets whose highlight changed need a repaint */
37
- export const HOVERED = 1;
38
- export const SELECTED = 2;
39
- export function getHighlight(target, targetIndex, state) {
40
- const hoveredByPointer = state.hoveredTarget === targetIndex;
41
- switch (target.kind) {
42
- case "relation":
43
- return hoveredByPointer ? HOVERED : 0;
44
- case "dimension": {
45
- const id = state.dimensionsClickable && !state.relationsActive ? target.id : undefined;
46
- return id !== undefined && (hoveredByPointer || !!state.selectedIds?.[id]) ? SELECTED : 0;
47
- }
48
- default: {
49
- const hovered = hoveredByPointer || (target.id !== "" && !!state.hoveredIds?.has(target.id));
50
- return (hovered ? HOVERED : 0) + (state.selectedIds?.[target.id] ? SELECTED : 0);
51
- }
52
- }
53
- }
54
- /** The item's linear color and opacity by its target's highlight, written to `out` */
55
- export function getItemColor(item, target, highlight, state, out) {
56
- const material = item.mesh.material;
57
- const hovered = highlight % SELECTED === HOVERED;
58
- const selected = highlight >= SELECTED;
59
- switch (item.style) {
60
- case "relation":
61
- case "outline":
62
- return rgba(stateColor(false, hovered, material, selectMat), 1, out);
63
- case "dimension":
64
- return rgba(selected ? selectMat.normal : material.normal, getOpacity(material), out);
65
- default: {
66
- if (item.role === "line") {
67
- return rgba(material.normal, 1, out);
68
- }
69
- const materialState = getMaterialState(target, state);
70
- const mat = materialState && item.role !== "image" ? stateMats[materialState] : material;
71
- const opacity = item.role === "solid" && isDisabled(target, state) ? getOpacity(material) * disabledOpacity : getOpacity(material);
72
- return rgba(stateColor(selected, hovered, mat, item.role === "text" ? textSelectMat : selectMat), opacity, out);
73
- }
74
- }
75
- }
76
- const getOpacity = (material) => material.opacity ?? 1;
77
- function stateColor(selected, hovered, mat, selectedMat) {
78
- const color = selected ? selectedMat.normal : mat.normal;
79
- return hovered ? shaded(color) : color;
80
- }
81
- const shadedCache = new Map();
82
- function shaded(color) {
83
- const cached = shadedCache.get(color);
84
- if (cached !== undefined) {
85
- return cached;
86
- }
87
- const result = shade(-0.4, color) ?? color;
88
- shadedCache.set(color, result);
89
- return result;
90
- }
91
- const colorCache = new Map();
92
- function rgba(style, opacity, out) {
93
- const cached = colorCache.get(style);
94
- const color = cached ?? new Color(style);
95
- if (!cached) {
96
- colorCache.set(style, color);
97
- }
98
- return out.set(color.r, color.g, color.b, opacity);
99
- }
100
- //# sourceMappingURL=appearance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appearance.js","sourceRoot":"","sources":["../../../src/renderers/three/appearance.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=build.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.test.d.ts","sourceRoot":"","sources":["../../../../src/renderers/three/build/build.test.ts"],"names":[],"mappings":""}
@@ -1,120 +0,0 @@
1
- import { BatchedMesh, InstancedMesh, Matrix4, PerspectiveCamera, Raycaster, Vector2, Vector3, Vector4 } from "three";
2
- import { describe, expect, it } from "vitest";
3
- import { alignedDimension, box, culledLine, group, sphere, text, vec3, vec3Zero } from "../../../abstract-3d.js";
4
- import { compileScene } from "../compile/compile.js";
5
- import { createGlyphAtlas, SDF_BUFFER } from "../text/text.js";
6
- import { animateScene, buildScene, cullScene, disposeScene, getPickables, getPickedItem, paintScene } from "./build.js";
7
- const red = { normal: "rgb(255, 0, 0)" };
8
- const blue = { normal: "rgb(0, 0, 255)", opacity: 0.5 };
9
- const rasterize = () => {
10
- const [width, height] = [20 + 2 * SDF_BUFFER, 40 + 2 * SDF_BUFFER];
11
- return {
12
- data: new Uint8ClampedArray(width * height),
13
- width,
14
- height,
15
- glyphWidth: 20,
16
- glyphHeight: 40,
17
- glyphLeft: 0,
18
- glyphTop: 30,
19
- glyphAdvance: 24,
20
- };
21
- };
22
- const idle = { relationsActive: false };
23
- const scene = (groups, rest = {}) => ({ size_deprecated: vec3(1, 1, 1), groups, ...rest });
24
- const part = (id, x, material = red) => group([box(vec3(10, 10, 10), material)], vec3(x, 0, 0), vec3Zero, [], { id });
25
- const build = (s, structure = idle, activeRelations) => buildScene(compileScene(s, (g) => g.data?.["id"] ?? ""), { structure, activeRelations, geometries: new Map(), atlas: createGlyphAtlas(rasterize, 256) });
26
- const batches = (built) => built.root.children.filter((o) => o instanceof BatchedMesh);
27
- /** The id of the group under the screen center for a camera at `x` looking down -z */
28
- function pickId(built, x) {
29
- const camera = new PerspectiveCamera(45, 1, 1, 1000);
30
- camera.position.set(x, 0, 100);
31
- camera.updateMatrixWorld();
32
- built.root.updateMatrixWorld();
33
- const raycaster = new Raycaster();
34
- raycaster.setFromCamera(new Vector2(0, 0), camera);
35
- const hit = raycaster.intersectObjects(getPickables(built), false)[0];
36
- const item = hit && getPickedItem(built, hit);
37
- const { compiled } = built;
38
- const target = item === undefined ? undefined : compiled.targets[compiled.items[item].target];
39
- return target?.kind === "group" || target?.kind === "dimension" ? target.id : undefined;
40
- }
41
- describe("buildScene", () => {
42
- it("draws solids of one material class in one batch, whatever their geometry", () => {
43
- const built = build(scene([part("a", 0), part("b", 20), group([sphere(5, red)], vec3(40, 0, 0)), part("c", 60, blue)]));
44
- expect(batches(built).map((b) => b.instanceCount)).toEqual([3, 1]);
45
- expect(built.parts).toHaveLength(2);
46
- });
47
- it("picks the group under the pointer", () => {
48
- const built = build(scene([part("a", 0), part("b", 20)]));
49
- expect([pickId(built, 0), pickId(built, 20), pickId(built, 100)]).toEqual(["a", "b", undefined]);
50
- });
51
- it("picks text by its glyphs", () => {
52
- const built = build(scene([group([text(vec3Zero, "AB", 10, red)], vec3Zero, vec3Zero, [], { id: "label" })]));
53
- expect(built.root.children.some((o) => o instanceof InstancedMesh)).toBe(true);
54
- expect(pickId(built, 0)).toBe("label");
55
- });
56
- it("repaints the hovered and selected targets", () => {
57
- const built = build(scene([part("a", 0), part("b", 20)]));
58
- const [batch] = batches(built);
59
- const color = (instance) => batch
60
- .getColorAt(instance, new Vector4())
61
- .toArray()
62
- .map((v) => Math.round(v * 100) / 100);
63
- const before = color(1);
64
- const state = { ...idle, dimensionsClickable: true, hoveredTarget: 1 };
65
- paintScene(built, state);
66
- expect(color(1)).not.toEqual(before);
67
- expect(color(0)).toEqual([1, 0, 0, 1]);
68
- paintScene(built, { ...state, hoveredTarget: undefined, selectedIds: { a: true } });
69
- expect(color(1)).toEqual(before);
70
- expect(color(0)).not.toEqual([1, 0, 0, 1]);
71
- });
72
- it("keeps dimensions in their own group, and doesn't pick hidden ones", () => {
73
- // Its text is centered half a text height of 44 above the line, here at the origin
74
- const dimension = alignedDimension(vec3(-500, 78, 0), vec3(500, 78, 0), vec3(0, -22, 0), "1000", ["front"], undefined, "dim");
75
- const built = build(scene([], { dimensions_deprecated: { dimensions: [dimension], material: red } }));
76
- expect(built.dimensions.children.length).toBeGreaterThan(0);
77
- expect(pickId(built, 0)).toBe("dim");
78
- built.dimensions.visible = false;
79
- expect(pickId(built, 0)).toBeUndefined();
80
- });
81
- it("builds the active relations only", () => {
82
- const relation = (id) => ({ id, pos: vec3Zero, groups: [group([box(vec3(1, 1, 1), red)])] });
83
- const s = scene([], { relations: [relation("r1"), relation("r2")] });
84
- expect(build(s).parts).toHaveLength(0);
85
- // A relation's box and its outline
86
- expect(batches(build(s, { relationsActive: true }, ["r1"])).map((b) => b.instanceCount)).toEqual([1, 1]);
87
- });
88
- it("fades and moves disabled groups to a transparent batch", () => {
89
- const built = build(scene([part("a", 0), part("b", 20)]), { relationsActive: true, activeComponents: { b: "Accept" } });
90
- expect(batches(built).map((b) => [b.instanceCount, b.material.transparent])).toEqual([
91
- [1, true],
92
- [1, false],
93
- ]);
94
- });
95
- it("animates the instances of animated groups", () => {
96
- const spin = { transform: { rot: vec3(0, 0, Math.PI), trans: vec3Zero }, duration: 1000 };
97
- const built = build(scene([group([box(vec3(1, 1, 1), red)], vec3(5, 0, 0), vec3Zero, [], {}, spin)]));
98
- expect(built.animatedItems).toHaveLength(1);
99
- animateScene(built, 0.5);
100
- const position = new Vector3(1, 0, 0).applyMatrix4(batches(built)[0].getMatrixAt(0, new Matrix4()));
101
- expect(position.toArray().map((v) => Math.round(v * 1000) / 1000 + 0)).toEqual([5, 1, 0]);
102
- });
103
- it("hides culled lines that face away from the camera", () => {
104
- const built = build(scene([group([culledLine(vec3(0, 0, 0), vec3(10, 0, 0), vec3(0, 0, 1), 1, red)])]));
105
- const line = built.parts.find((p) => p.kind === "line");
106
- const endX = () => line.object.geometry.getAttribute("instanceEnd").getX(0);
107
- cullScene(built, new Vector3(0, 0, -100));
108
- expect(endX()).toBe(0);
109
- cullScene(built, new Vector3(0, 0, 100));
110
- expect(endX()).toBe(10);
111
- });
112
- it("disposes its batches and materials", () => {
113
- const built = build(scene([part("a", 0)]));
114
- const disposed = [];
115
- batches(built)[0].material.addEventListener("dispose", () => disposed.push("material"));
116
- disposeScene(built);
117
- expect(disposed).toEqual(["material"]);
118
- });
119
- });
120
- //# sourceMappingURL=build.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.test.js","sourceRoot":"","sources":["../../../../src/renderers/three/build/build.test.ts"],"names":[],"mappings":"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"}
@@ -1,50 +0,0 @@
1
- import { Group, type Intersection, Matrix4, type Object3D, type Vector3, Vector4 } from "three";
2
- import type { PaintState, StructureState } from "./appearance.js";
3
- import type { CompiledScene } from "./compile.js";
4
- import type { GeometryCache } from "./geometry.js";
5
- import type { TextureLoad } from "./materials.js";
6
- import type { GlyphAtlas } from "./text.js";
7
- /** Compiled items → three.js objects: a batch per material class, one text mesh and a line mesh per thickness, images as meshes */
8
- /** Drawn objects of items, each item a slot */
9
- export type Part = {
10
- readonly object: Object3D;
11
- /** Places the slot's item by its world matrix */
12
- readonly place: (slot: number, matrix: Matrix4) => void;
13
- readonly paint: (slot: number, color: Vector4) => void;
14
- /** Uploads what place and paint changed */
15
- readonly flush: () => void;
16
- /** The slot of a hit on the object, for parts that can be picked */
17
- readonly pickSlot?: (hit: Intersection) => number | undefined;
18
- readonly dispose: () => void;
19
- };
20
- export type BuildOptions = {
21
- readonly structure: StructureState;
22
- readonly activeRelations?: ReadonlyArray<string>;
23
- readonly geometries: GeometryCache;
24
- readonly glyphs: GlyphAtlas;
25
- /** Loads images' textures; without it images aren't shown */
26
- readonly loadTexture?: TextureLoad;
27
- readonly materialStateImages?: Record<string, string>;
28
- readonly useAlphaTest?: boolean;
29
- readonly onTextureLoaded?: () => void;
30
- };
31
- export type BuiltScene = {
32
- readonly root: Group;
33
- /** Holds the dimensions, shown or hidden by its `visible` */
34
- readonly dimensions: Group;
35
- /** The shown objects that can be picked */
36
- readonly getPickables: () => ReadonlyArray<Object3D>;
37
- /** The index of the compiled item hit */
38
- readonly getPickedItem: (hit: Intersection) => number | undefined;
39
- /** Repaints the targets whose highlight changed */
40
- readonly paint: (state: PaintState) => void;
41
- readonly animated: boolean;
42
- /** Moves the animated items to `seconds` into their animations */
43
- readonly animate: (seconds: number) => void;
44
- /** Hides the culled lines facing away from a camera at `cameraPosition` */
45
- readonly cull: (cameraPosition: Vector3) => void;
46
- readonly drawCalls: number;
47
- readonly dispose: () => void;
48
- };
49
- export declare function buildScene(compiled: CompiledScene, options: BuildOptions): BuiltScene;
50
- //# sourceMappingURL=build.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/renderers/three/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,EACL,KAAK,YAAY,EAEjB,OAAO,EAGP,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,OAAO,EACR,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAQ,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,WAAW,CAAC;AAGvD,mIAAmI;AAEnI,+CAA+C;AAC/C,MAAM,MAAM,IAAI,GAAG;IACjB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvD,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrD,yCAAyC;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,GAAG,SAAS,CAAC;IAClE,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,kEAAkE;IAClE,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,CAAC,cAAc,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,GAAG,UAAU,CA+JrF"}