three-cad-viewer 4.3.5 → 4.3.7

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 (58) hide show
  1. package/dist/three-cad-viewer.esm.js +8 -5
  2. package/dist/three-cad-viewer.esm.js.map +1 -1
  3. package/dist/three-cad-viewer.esm.min.js +1 -1
  4. package/dist/three-cad-viewer.js +8 -5
  5. package/dist/three-cad-viewer.min.js +1 -1
  6. package/package.json +2 -3
  7. package/src/_version.ts +0 -1
  8. package/src/camera/camera.ts +0 -445
  9. package/src/camera/controls/CADOrbitControls.ts +0 -241
  10. package/src/camera/controls/CADTrackballControls.ts +0 -598
  11. package/src/camera/controls.ts +0 -380
  12. package/src/core/patches.ts +0 -16
  13. package/src/core/studio-manager.ts +0 -652
  14. package/src/core/types.ts +0 -892
  15. package/src/core/viewer-state.ts +0 -784
  16. package/src/core/viewer.ts +0 -4821
  17. package/src/index.ts +0 -151
  18. package/src/rendering/environment.ts +0 -840
  19. package/src/rendering/light-detection.ts +0 -327
  20. package/src/rendering/material-factory.ts +0 -735
  21. package/src/rendering/material-presets.ts +0 -289
  22. package/src/rendering/raycast.ts +0 -291
  23. package/src/rendering/room-environment.ts +0 -192
  24. package/src/rendering/studio-composer.ts +0 -577
  25. package/src/rendering/studio-floor.ts +0 -108
  26. package/src/rendering/texture-cache.ts +0 -324
  27. package/src/rendering/tree-model.ts +0 -542
  28. package/src/rendering/triplanar.ts +0 -329
  29. package/src/scene/animation.ts +0 -343
  30. package/src/scene/axes.ts +0 -108
  31. package/src/scene/bbox.ts +0 -223
  32. package/src/scene/clipping.ts +0 -650
  33. package/src/scene/grid.ts +0 -864
  34. package/src/scene/nestedgroup.ts +0 -1448
  35. package/src/scene/objectgroup.ts +0 -866
  36. package/src/scene/orientation.ts +0 -259
  37. package/src/scene/render-shape.ts +0 -634
  38. package/src/tools/cad_tools/measure.ts +0 -811
  39. package/src/tools/cad_tools/select.ts +0 -100
  40. package/src/tools/cad_tools/tools.ts +0 -231
  41. package/src/tools/cad_tools/ui.ts +0 -454
  42. package/src/tools/cad_tools/zebra.ts +0 -369
  43. package/src/types/html.d.ts +0 -5
  44. package/src/types/n8ao.d.ts +0 -28
  45. package/src/types/three-augmentation.d.ts +0 -60
  46. package/src/ui/display.ts +0 -3295
  47. package/src/ui/index.html +0 -505
  48. package/src/ui/info.ts +0 -177
  49. package/src/ui/slider.ts +0 -206
  50. package/src/ui/toolbar.ts +0 -347
  51. package/src/ui/treeview.ts +0 -945
  52. package/src/utils/decode-instances.ts +0 -233
  53. package/src/utils/font.ts +0 -60
  54. package/src/utils/gpu-tracker.ts +0 -265
  55. package/src/utils/logger.ts +0 -92
  56. package/src/utils/sizeof.ts +0 -116
  57. package/src/utils/timer.ts +0 -69
  58. package/src/utils/utils.ts +0 -446
@@ -1,100 +0,0 @@
1
- import type { PickedObject } from "../../rendering/raycast.js";
2
- import type { ViewerLike } from "./tools.js";
3
-
4
- class SelectObject {
5
- viewer: ViewerLike;
6
- selectedShapes: PickedObject[];
7
- contextEnabled: boolean;
8
-
9
- constructor(viewer: ViewerLike) {
10
- this.viewer = viewer;
11
- this.selectedShapes = [];
12
- this.contextEnabled = false;
13
- }
14
-
15
- enableContext(): void {
16
- this.contextEnabled = true;
17
- }
18
-
19
- disableContext(): void {
20
- this.contextEnabled = false;
21
- for (const group of this.selectedShapes) {
22
- group.obj.clearHighlights();
23
- }
24
- this.selectedShapes = [];
25
- }
26
-
27
- _getMaxObjSelected(): null {
28
- return null;
29
- }
30
-
31
- private _getIndex(path: string): string {
32
- const object = path.split("|");
33
- const name = object[object.length - 1];
34
- return name.split("_")[1];
35
- }
36
-
37
- private _includes(path: string): boolean {
38
- for (const shape of this.selectedShapes) {
39
- if (path === shape.obj.name) {
40
- return true;
41
- }
42
- }
43
- return false;
44
- }
45
-
46
- notify(): void {
47
- const indices: string[] = [];
48
- for (const shape of this.selectedShapes) {
49
- const path = shape.obj.name;
50
- indices.push(this._getIndex(path));
51
- }
52
- this.viewer.checkChanges({ selected: indices }, true);
53
- }
54
-
55
- handleSelection(selectedObj: PickedObject | null): void {
56
- if (!selectedObj) return;
57
- const path = selectedObj.obj.name;
58
- if (this._includes(path)) {
59
- this.selectedShapes = this.selectedShapes.filter(
60
- (p) => p.obj.name !== path,
61
- );
62
- } else {
63
- this.selectedShapes.push(selectedObj);
64
- }
65
- this.notify();
66
- }
67
-
68
- private _removeLastSelectedObj(shape: PickedObject | undefined): void {
69
- if (shape) {
70
- const objs = shape.objs();
71
- for (const obj of objs) {
72
- obj.clearHighlights();
73
- }
74
- }
75
- this.notify();
76
- }
77
-
78
- removeLastSelectedObj(force: boolean): void {
79
- if (force) {
80
- for (const shape of this.selectedShapes) {
81
- this._removeLastSelectedObj(shape);
82
- }
83
- this.selectedShapes = [];
84
- } else {
85
- const shape = this.selectedShapes.pop();
86
- this._removeLastSelectedObj(shape);
87
- this.notify();
88
- }
89
- }
90
-
91
- update(): void {}
92
-
93
- handleResponse(_response: unknown): void {}
94
-
95
- dispose(): void {
96
- this.disableContext();
97
- }
98
- }
99
-
100
- export { SelectObject };
@@ -1,231 +0,0 @@
1
- import * as THREE from "three";
2
- import { DistanceMeasurement, PropertiesMeasurement } from "./measure.js";
3
- import { SelectObject } from "./select.js";
4
- import type { PickedObject } from "../../rendering/raycast.js";
5
-
6
- /**
7
- * Enum representing tool types.
8
- */
9
- export const ToolTypes = {
10
- NONE: "None",
11
- DISTANCE: "DistanceMeasurement",
12
- PROPERTIES: "PropertiesMeasurement",
13
- SELECT: "SelectObjects",
14
- } as const;
15
-
16
- export type ToolType = typeof ToolTypes[keyof typeof ToolTypes];
17
-
18
- /**
19
- * UI elements for measurement panels.
20
- */
21
- export interface MeasurementPanelElements {
22
- distancePanel: HTMLElement;
23
- propertiesPanel: HTMLElement;
24
- }
25
-
26
- /**
27
- * UI elements for the shape filter dropdown.
28
- */
29
- export interface FilterDropdownElements {
30
- container: HTMLElement;
31
- dropdown: HTMLElement;
32
- icon: HTMLElement;
33
- value: HTMLElement;
34
- content: HTMLElement;
35
- options: {
36
- none: HTMLElement;
37
- vertex: HTMLElement;
38
- edge: HTMLElement;
39
- face: HTMLElement;
40
- solid: HTMLElement;
41
- };
42
- }
43
-
44
- /**
45
- * Minimal display interface for CAD tools.
46
- */
47
- export interface DisplayLike {
48
- container: HTMLElement;
49
- shapeFilterDropDownMenu: {
50
- reset(): void;
51
- };
52
- /** UI elements for measurement panels */
53
- measurementPanels: MeasurementPanelElements;
54
- /** UI elements for filter dropdown */
55
- filterDropdown: FilterDropdownElements;
56
- }
57
-
58
- /**
59
- * Minimal viewer interface for CAD tools.
60
- * Used by measurement, selection, and zebra tools.
61
- */
62
- export interface ViewerLike {
63
- display: DisplayLike;
64
- renderer: THREE.WebGLRenderer;
65
- camera: {
66
- getCamera(): THREE.Camera;
67
- getZoom(): number;
68
- } | null;
69
- state: {
70
- get(key: string): unknown;
71
- };
72
- ortho: boolean;
73
- bb_radius: number;
74
- checkChanges(changes: Record<string, unknown>, notify?: boolean): void;
75
- }
76
-
77
- export interface ToolResponse {
78
- tool_type: ToolType;
79
- [key: string]: unknown;
80
- }
81
-
82
- export class Tools {
83
- viewer: ViewerLike;
84
- distanceMeasurement: DistanceMeasurement;
85
- propertiesMeasurement: PropertiesMeasurement;
86
- selectObject: SelectObject;
87
- enabledTool: ToolType | null;
88
-
89
- constructor(viewer: ViewerLike, debug: boolean) {
90
- this.viewer = viewer;
91
- this.distanceMeasurement = new DistanceMeasurement(viewer, debug);
92
- this.propertiesMeasurement = new PropertiesMeasurement(viewer, debug);
93
- this.selectObject = new SelectObject(viewer);
94
- this.enabledTool = null;
95
- }
96
-
97
- /**
98
- * Enables a specific tool. (Disables the currently enabled tool if any)
99
- */
100
- enable(toolType: ToolType): void {
101
- // Disable the currently enabled tool (if any)
102
- if (this.enabledTool) {
103
- this.disable();
104
- }
105
-
106
- switch (toolType) {
107
- case ToolTypes.DISTANCE:
108
- this.distanceMeasurement.enableContext();
109
- break;
110
- case ToolTypes.PROPERTIES:
111
- this.propertiesMeasurement.enableContext();
112
- break;
113
- case ToolTypes.SELECT:
114
- this.selectObject.enableContext();
115
- break;
116
- default:
117
- throw new Error(`Unknown tool type: ${toolType}`);
118
- }
119
-
120
- this.enabledTool = toolType;
121
- }
122
-
123
- disable(): void {
124
- if (this.enabledTool) {
125
- this.viewer.display.shapeFilterDropDownMenu.reset();
126
- this._disable();
127
- }
128
- }
129
-
130
- /**
131
- * Disables the currently enabled tool.
132
- */
133
- _disable(): void {
134
- if (!this.enabledTool) {
135
- return;
136
- }
137
-
138
- switch (this.enabledTool) {
139
- case ToolTypes.DISTANCE:
140
- this.distanceMeasurement.disableContext();
141
- break;
142
- case ToolTypes.PROPERTIES:
143
- this.propertiesMeasurement.disableContext();
144
- break;
145
- case ToolTypes.SELECT:
146
- this.selectObject.disableContext();
147
- break;
148
- default:
149
- throw new Error(`Unknown tool type: ${this.enabledTool}`);
150
- }
151
-
152
- this.enabledTool = null;
153
- }
154
-
155
- handleRemoveLastSelection(force: boolean = false): void {
156
- if (this.distanceMeasurement.contextEnabled) {
157
- this.distanceMeasurement.removeLastSelectedObj(force);
158
- } else if (this.propertiesMeasurement.contextEnabled) {
159
- this.propertiesMeasurement.removeLastSelectedObj(force);
160
- } else if (this.selectObject.contextEnabled) {
161
- this.selectObject.removeLastSelectedObj(false);
162
- }
163
- }
164
-
165
- /**
166
- * Handle selected object from raycaster.
167
- */
168
- handleSelectedObj(selectedObj: PickedObject, isNewObject: boolean, shift: boolean): void {
169
- if (this.distanceMeasurement.contextEnabled) {
170
- if (isNewObject) {
171
- this.distanceMeasurement.removeLastSelectedObj();
172
- }
173
- this.distanceMeasurement.handleSelection(selectedObj, shift);
174
- } else if (this.propertiesMeasurement.contextEnabled) {
175
- if (isNewObject) {
176
- this.propertiesMeasurement.removeLastSelectedObj();
177
- }
178
- this.propertiesMeasurement.handleSelection(selectedObj);
179
- } else if (this.selectObject.contextEnabled) {
180
- this.selectObject.handleSelection(selectedObj);
181
- }
182
- }
183
-
184
- handleResetSelection(): void {
185
- if (this.distanceMeasurement.contextEnabled) {
186
- this.distanceMeasurement.removeLastSelectedObj(true);
187
- this.distanceMeasurement.removeLastSelectedObj(true);
188
- } else if (this.propertiesMeasurement.contextEnabled) {
189
- this.propertiesMeasurement.removeLastSelectedObj(true);
190
- } else if (this.selectObject.contextEnabled) {
191
- this.selectObject.removeLastSelectedObj(true);
192
- }
193
- }
194
-
195
- /**
196
- * Handle the response from the backend.
197
- */
198
- handleResponse(response: ToolResponse): void {
199
- const toolType = response.tool_type;
200
- switch (toolType) {
201
- case ToolTypes.DISTANCE:
202
- this.distanceMeasurement.handleResponse(response);
203
- break;
204
- case ToolTypes.PROPERTIES:
205
- this.propertiesMeasurement.handleResponse(response);
206
- break;
207
- case ToolTypes.SELECT:
208
- this.selectObject.handleResponse(response);
209
- break;
210
- }
211
- }
212
-
213
- /**
214
- * This is called each time the viewer gets updated
215
- */
216
- update(): void {
217
- if (this.distanceMeasurement.contextEnabled) {
218
- this.distanceMeasurement.update();
219
- } else if (this.propertiesMeasurement.contextEnabled) {
220
- this.propertiesMeasurement.update();
221
- } else if (this.selectObject.contextEnabled) {
222
- this.selectObject.update();
223
- }
224
- }
225
-
226
- dispose(): void {
227
- this.distanceMeasurement.dispose();
228
- this.propertiesMeasurement.dispose();
229
- this.selectObject.dispose();
230
- }
231
- }