@tableslayer/ui 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/MarkerTooltip/MarkerTooltip.svelte +9 -1
- package/dist/components/MarkerTooltip/MarkerTooltip.svelte.d.ts +13 -16
- package/dist/components/index.d.ts +0 -5
- package/dist/components/index.js +0 -5
- package/package.json +1 -8
- package/dist/components/DrawingSliders/DrawingSliders.svelte +0 -379
- package/dist/components/DrawingSliders/DrawingSliders.svelte.d.ts +0 -16
- package/dist/components/DrawingSliders/index.d.ts +0 -1
- package/dist/components/DrawingSliders/index.js +0 -1
- package/dist/components/MyCounterButton.svelte +0 -11
- package/dist/components/MyCounterButton.svelte.d.ts +0 -3
- package/dist/components/PropsTable/PropsTable.svelte +0 -107
- package/dist/components/PropsTable/PropsTable.svelte.d.ts +0 -26
- package/dist/components/RadialMenu/EffectPreview.svelte +0 -36
- package/dist/components/RadialMenu/EffectPreview.svelte.d.ts +0 -9
- package/dist/components/RadialMenu/EffectPreviewScene.svelte +0 -194
- package/dist/components/RadialMenu/EffectPreviewScene.svelte.d.ts +0 -8
- package/dist/components/RadialMenu/RadialMenu.svelte +0 -503
- package/dist/components/RadialMenu/RadialMenu.svelte.d.ts +0 -4
- package/dist/components/RadialMenu/RadialMenuItem.svelte +0 -176
- package/dist/components/RadialMenu/RadialMenuItem.svelte.d.ts +0 -11
- package/dist/components/RadialMenu/index.d.ts +0 -2
- package/dist/components/RadialMenu/index.js +0 -2
- package/dist/components/RadialMenu/types.d.ts +0 -35
- package/dist/components/RadialMenu/types.js +0 -1
- package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte +0 -445
- package/dist/components/Stage/components/AnnotationLayer/AnnotationLayer.svelte.d.ts +0 -19
- package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte +0 -167
- package/dist/components/Stage/components/AnnotationLayer/AnnotationMaterial.svelte.d.ts +0 -20
- package/dist/components/Stage/components/AnnotationLayer/types.d.ts +0 -121
- package/dist/components/Stage/components/AnnotationLayer/types.js +0 -71
- package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte +0 -148
- package/dist/components/Stage/components/CursorLayer/CursorLayer.svelte.d.ts +0 -7
- package/dist/components/Stage/components/CursorLayer/cursor.svg +0 -26
- package/dist/components/Stage/components/CursorLayer/index.d.ts +0 -2
- package/dist/components/Stage/components/CursorLayer/index.js +0 -1
- package/dist/components/Stage/components/CursorLayer/types.d.ts +0 -28
- package/dist/components/Stage/components/CursorLayer/types.js +0 -1
- package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte +0 -364
- package/dist/components/Stage/components/DrawingLayer/DrawingMaterial.svelte.d.ts +0 -24
- package/dist/components/Stage/components/DrawingLayer/types.d.ts +0 -56
- package/dist/components/Stage/components/DrawingLayer/types.js +0 -23
- package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte +0 -72
- package/dist/components/Stage/components/EdgeOverlayLayer/EdgeOverlayLayer.svelte.d.ts +0 -11
- package/dist/components/Stage/components/EdgeOverlayLayer/types.d.ts +0 -29
- package/dist/components/Stage/components/EdgeOverlayLayer/types.js +0 -1
- package/dist/components/Stage/components/FogLayer/FogLayer.svelte +0 -75
- package/dist/components/Stage/components/FogLayer/FogLayer.svelte.d.ts +0 -11
- package/dist/components/Stage/components/FogLayer/types.d.ts +0 -42
- package/dist/components/Stage/components/FogLayer/types.js +0 -1
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte +0 -249
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarLayer.svelte.d.ts +0 -19
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte +0 -200
- package/dist/components/Stage/components/FogOfWarLayer/FogOfWarMaterial.svelte.d.ts +0 -18
- package/dist/components/Stage/components/FogOfWarLayer/types.d.ts +0 -143
- package/dist/components/Stage/components/FogOfWarLayer/types.js +0 -1
- package/dist/components/Stage/components/GridLayer/GridLayer.svelte +0 -20
- package/dist/components/Stage/components/GridLayer/GridLayer.svelte.d.ts +0 -12
- package/dist/components/Stage/components/GridLayer/GridMaterial.svelte +0 -69
- package/dist/components/Stage/components/GridLayer/GridMaterial.svelte.d.ts +0 -10
- package/dist/components/Stage/components/GridLayer/types.d.ts +0 -65
- package/dist/components/Stage/components/GridLayer/types.js +0 -10
- package/dist/components/Stage/components/LayerInput/LayerInput.svelte +0 -300
- package/dist/components/Stage/components/LayerInput/LayerInput.svelte.d.ts +0 -20
- package/dist/components/Stage/components/MapLayer/MapLayer.svelte +0 -196
- package/dist/components/Stage/components/MapLayer/MapLayer.svelte.d.ts +0 -24
- package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.d.ts +0 -93
- package/dist/components/Stage/components/MapLayer/dataSources/GifDataSource.js +0 -229
- package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.d.ts +0 -51
- package/dist/components/Stage/components/MapLayer/dataSources/IMapDataSource.js +0 -1
- package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.d.ts +0 -49
- package/dist/components/Stage/components/MapLayer/dataSources/ImageDataSource.js +0 -87
- package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.d.ts +0 -52
- package/dist/components/Stage/components/MapLayer/dataSources/VideoDataSource.js +0 -141
- package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.d.ts +0 -21
- package/dist/components/Stage/components/MapLayer/dataSources/dataSourceFactory.js +0 -44
- package/dist/components/Stage/components/MapLayer/dataSources/index.d.ts +0 -15
- package/dist/components/Stage/components/MapLayer/dataSources/index.js +0 -14
- package/dist/components/Stage/components/MapLayer/types.d.ts +0 -54
- package/dist/components/Stage/components/MapLayer/types.js +0 -9
- package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte +0 -398
- package/dist/components/Stage/components/MarkerLayer/MarkerLayer.svelte.d.ts +0 -24
- package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte +0 -262
- package/dist/components/Stage/components/MarkerLayer/MarkerToken.svelte.d.ts +0 -27
- package/dist/components/Stage/components/MarkerLayer/types.d.ts +0 -109
- package/dist/components/Stage/components/MarkerLayer/types.js +0 -21
- package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte +0 -364
- package/dist/components/Stage/components/MeasurementLayer/MeasurementLayer.svelte.d.ts +0 -49
- package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte +0 -473
- package/dist/components/Stage/components/MeasurementLayer/MeasurementManager.svelte.d.ts +0 -24
- package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.d.ts +0 -150
- package/dist/components/Stage/components/MeasurementLayer/measurements/BaseMeasurement.js +0 -274
- package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.d.ts +0 -10
- package/dist/components/Stage/components/MeasurementLayer/measurements/BeamMeasurement.js +0 -58
- package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.d.ts +0 -9
- package/dist/components/Stage/components/MeasurementLayer/measurements/CircleMeasurement.js +0 -66
- package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.d.ts +0 -10
- package/dist/components/Stage/components/MeasurementLayer/measurements/ConeMeasurement.js +0 -103
- package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.d.ts +0 -9
- package/dist/components/Stage/components/MeasurementLayer/measurements/LineMeasurement.js +0 -75
- package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.d.ts +0 -9
- package/dist/components/Stage/components/MeasurementLayer/measurements/RectangleMeasurement.js +0 -73
- package/dist/components/Stage/components/MeasurementLayer/measurements/index.d.ts +0 -2
- package/dist/components/Stage/components/MeasurementLayer/measurements/index.js +0 -7
- package/dist/components/Stage/components/MeasurementLayer/types.d.ts +0 -76
- package/dist/components/Stage/components/MeasurementLayer/types.js +0 -9
- package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.d.ts +0 -83
- package/dist/components/Stage/components/MeasurementLayer/utils/canvasDrawing.js +0 -267
- package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.d.ts +0 -74
- package/dist/components/Stage/components/MeasurementLayer/utils/distanceCalculations.js +0 -130
- package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte +0 -220
- package/dist/components/Stage/components/ParticleSystem/ParticleSystem.svelte.d.ts +0 -9
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/ash.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/leaves.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/rain.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/particles/atlases/snow.png +0 -0
- package/dist/components/Stage/components/ParticleSystem/rng.d.ts +0 -7
- package/dist/components/Stage/components/ParticleSystem/rng.js +0 -20
- package/dist/components/Stage/components/ParticleSystem/types.d.ts +0 -88
- package/dist/components/Stage/components/ParticleSystem/types.js +0 -37
- package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte +0 -144
- package/dist/components/Stage/components/PerformanceDebugger/PerformanceDebugger.svelte.d.ts +0 -19
- package/dist/components/Stage/components/PerformanceDebugger/index.d.ts +0 -1
- package/dist/components/Stage/components/PerformanceDebugger/index.js +0 -1
- package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte +0 -208
- package/dist/components/Stage/components/PerformanceOverlay/PerformanceOverlay.svelte.d.ts +0 -7
- package/dist/components/Stage/components/PerformanceOverlay/index.d.ts +0 -1
- package/dist/components/Stage/components/PerformanceOverlay/index.js +0 -1
- package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte +0 -201
- package/dist/components/Stage/components/PointerInputManager/PointerInputManager.svelte.d.ts +0 -17
- package/dist/components/Stage/components/Scene/Scene.svelte +0 -651
- package/dist/components/Stage/components/Scene/Scene.svelte.d.ts +0 -88
- package/dist/components/Stage/components/Scene/luts.d.ts +0 -7
- package/dist/components/Stage/components/Scene/luts.js +0 -33
- package/dist/components/Stage/components/Scene/types.d.ts +0 -207
- package/dist/components/Stage/components/Scene/types.js +0 -35
- package/dist/components/Stage/components/Stage/Stage.svelte +0 -332
- package/dist/components/Stage/components/Stage/Stage.svelte.d.ts +0 -86
- package/dist/components/Stage/components/Stage/types.d.ts +0 -163
- package/dist/components/Stage/components/Stage/types.js +0 -5
- package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte +0 -135
- package/dist/components/Stage/components/WeatherLayer/WeatherLayer.svelte.d.ts +0 -13
- package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/AshPreset.js +0 -69
- package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/LeavesPreset.js +0 -68
- package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/RainPreset.js +0 -67
- package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.d.ts +0 -3
- package/dist/components/Stage/components/WeatherLayer/presets/SnowPreset.js +0 -68
- package/dist/components/Stage/components/WeatherLayer/presets/index.d.ts +0 -5
- package/dist/components/Stage/components/WeatherLayer/presets/index.js +0 -5
- package/dist/components/Stage/components/WeatherLayer/types.d.ts +0 -31
- package/dist/components/Stage/components/WeatherLayer/types.js +0 -9
- package/dist/components/Stage/helpers/clippingPlaneStore.svelte.d.ts +0 -7
- package/dist/components/Stage/helpers/clippingPlaneStore.svelte.js +0 -23
- package/dist/components/Stage/helpers/debugState.svelte.d.ts +0 -10
- package/dist/components/Stage/helpers/debugState.svelte.js +0 -13
- package/dist/components/Stage/helpers/grid.d.ts +0 -72
- package/dist/components/Stage/helpers/grid.js +0 -444
- package/dist/components/Stage/helpers/lazyBrush.d.ts +0 -63
- package/dist/components/Stage/helpers/lazyBrush.js +0 -137
- package/dist/components/Stage/helpers/performanceMetrics.svelte.d.ts +0 -62
- package/dist/components/Stage/helpers/performanceMetrics.svelte.js +0 -165
- package/dist/components/Stage/helpers/utils.d.ts +0 -3
- package/dist/components/Stage/helpers/utils.js +0 -18
- package/dist/components/Stage/index.d.ts +0 -21
- package/dist/components/Stage/index.js +0 -21
- package/dist/components/Stage/shaders/AnnotationEffects.frag +0 -1070
- package/dist/components/Stage/shaders/Annotations.frag +0 -29
- package/dist/components/Stage/shaders/Drawing.frag +0 -83
- package/dist/components/Stage/shaders/Drawing.vert +0 -5
- package/dist/components/Stage/shaders/Fog.frag +0 -147
- package/dist/components/Stage/shaders/FractalNoise.frag +0 -96
- package/dist/components/Stage/shaders/GridShader.frag +0 -174
- package/dist/components/Stage/shaders/Overlay.frag +0 -23
- package/dist/components/Stage/shaders/Overlay.vert +0 -0
- package/dist/components/Stage/shaders/Particles.frag +0 -27
- package/dist/components/Stage/shaders/Particles.vert +0 -51
- package/dist/components/Stage/shaders/ToolOutline.frag +0 -59
- package/dist/components/Stage/shaders/default.vert +0 -8
- package/dist/components/Stage/types.d.ts +0 -4
- package/dist/components/Stage/types.js +0 -1
|
@@ -1,473 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import * as THREE from 'three';
|
|
3
|
-
import { T, useTask } from '@threlte/core';
|
|
4
|
-
import { onDestroy } from 'svelte';
|
|
5
|
-
import { MeasurementType, type MeasurementLayerProps } from './types';
|
|
6
|
-
import type { IMeasurement } from './measurements/BaseMeasurement';
|
|
7
|
-
import { LineMeasurement } from './measurements/LineMeasurement';
|
|
8
|
-
import { CircleMeasurement } from './measurements/CircleMeasurement';
|
|
9
|
-
import { RectangleMeasurement } from './measurements/RectangleMeasurement';
|
|
10
|
-
import { BeamMeasurement } from './measurements/BeamMeasurement';
|
|
11
|
-
import { ConeMeasurement } from './measurements/ConeMeasurement';
|
|
12
|
-
import { drawCircle } from './utils/canvasDrawing';
|
|
13
|
-
import type { DisplayProps } from '../Stage/types';
|
|
14
|
-
import type { GridLayerProps } from '../GridLayer/types';
|
|
15
|
-
import { SceneLayer, SceneLayerOrder } from '../Scene/types';
|
|
16
|
-
|
|
17
|
-
interface Props {
|
|
18
|
-
props: MeasurementLayerProps;
|
|
19
|
-
visible: boolean;
|
|
20
|
-
displayProps: DisplayProps;
|
|
21
|
-
gridProps: GridLayerProps;
|
|
22
|
-
sceneRotation?: number;
|
|
23
|
-
onFadeComplete?: () => void;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const { props, visible, displayProps, gridProps, sceneRotation = 0, onFadeComplete }: Props = $props();
|
|
27
|
-
|
|
28
|
-
$effect(() => {
|
|
29
|
-
console.log('[MeasurementManager] Grid props:', gridProps);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
let currentMeasurement: IMeasurement | null = null;
|
|
33
|
-
let measurementGroup = $state(new THREE.Group());
|
|
34
|
-
let autoHideTimeoutId: ReturnType<typeof setTimeout> | null = null;
|
|
35
|
-
|
|
36
|
-
// Fade animation state
|
|
37
|
-
let isFading = $state(false);
|
|
38
|
-
let fadeStartTime = $state(0);
|
|
39
|
-
let fadeOpacity = $state(1.0);
|
|
40
|
-
let receivedFadeoutTime = $state<number | null>(null); // Store fadeout time for received measurements
|
|
41
|
-
|
|
42
|
-
// Preview indicator
|
|
43
|
-
let previewMesh = $state(new THREE.Mesh());
|
|
44
|
-
let previewMaterial = $state(new THREE.MeshBasicMaterial());
|
|
45
|
-
let previewGeometry = $state(new THREE.PlaneGeometry());
|
|
46
|
-
let previewSize = $derived(props ? props.markerSize + props.outlineThickness * 2 : 22);
|
|
47
|
-
let showPreview = $state(false);
|
|
48
|
-
|
|
49
|
-
// Task for fade animation
|
|
50
|
-
useTask(() => {
|
|
51
|
-
if (isFading && props) {
|
|
52
|
-
const now = performance.now();
|
|
53
|
-
const fadeElapsed = now - fadeStartTime;
|
|
54
|
-
// Use receivedFadeoutTime if set, otherwise use props.fadeoutTime
|
|
55
|
-
const fadeTime = receivedFadeoutTime ?? props.fadeoutTime;
|
|
56
|
-
const progress = Math.min(fadeElapsed / fadeTime, 1);
|
|
57
|
-
|
|
58
|
-
fadeOpacity = 1 - progress;
|
|
59
|
-
|
|
60
|
-
// Update the opacity of all materials in the measurement group
|
|
61
|
-
if (currentMeasurement) {
|
|
62
|
-
if (currentMeasurement.shapeMesh.material instanceof THREE.MeshBasicMaterial) {
|
|
63
|
-
currentMeasurement.shapeMesh.material.opacity = props.opacity * fadeOpacity;
|
|
64
|
-
}
|
|
65
|
-
if (currentMeasurement.textMesh.material instanceof THREE.MeshBasicMaterial) {
|
|
66
|
-
currentMeasurement.textMesh.material.opacity = props.opacity * fadeOpacity;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (progress >= 1) {
|
|
71
|
-
isFading = false;
|
|
72
|
-
clearMeasurement();
|
|
73
|
-
// Notify parent that fade is complete
|
|
74
|
-
if (onFadeComplete) {
|
|
75
|
-
onFadeComplete();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
onDestroy(() => {
|
|
82
|
-
// Clear any pending auto-hide timeout
|
|
83
|
-
if (autoHideTimeoutId !== null) {
|
|
84
|
-
clearTimeout(autoHideTimeoutId);
|
|
85
|
-
autoHideTimeoutId = null;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Stop fade animation
|
|
89
|
-
isFading = false;
|
|
90
|
-
|
|
91
|
-
currentMeasurement?.dispose();
|
|
92
|
-
if (previewGeometry) {
|
|
93
|
-
previewGeometry.dispose();
|
|
94
|
-
}
|
|
95
|
-
if (previewMaterial) {
|
|
96
|
-
if (previewMaterial.map) {
|
|
97
|
-
previewMaterial.map.dispose();
|
|
98
|
-
}
|
|
99
|
-
previewMaterial.dispose();
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Creates a canvas texture for the preview marker that matches the measurement point styling.
|
|
105
|
-
* The marker uses the same visual properties (color, thickness, outline) as measurement start/end points.
|
|
106
|
-
*/
|
|
107
|
-
$effect(() => {
|
|
108
|
-
if (!props) return;
|
|
109
|
-
|
|
110
|
-
// Create the preview marker texture
|
|
111
|
-
const markerCanvas = createMarkerCanvas();
|
|
112
|
-
const markerTexture = new THREE.CanvasTexture(markerCanvas);
|
|
113
|
-
markerTexture.needsUpdate = true;
|
|
114
|
-
|
|
115
|
-
// Dispose the old texture before assigning new one to prevent memory leak
|
|
116
|
-
if (previewMaterial.map) {
|
|
117
|
-
previewMaterial.map.dispose();
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
// Assign the texture to the preview material
|
|
121
|
-
previewMaterial.map = markerTexture;
|
|
122
|
-
previewMaterial.needsUpdate = true;
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Updates the preview indicator position and visibility based on mouse position and measurement state.
|
|
127
|
-
* The preview is automatically hidden when a measurement is currently being created.
|
|
128
|
-
*
|
|
129
|
-
* @param {THREE.Vector2 | null} position - The world position where the preview should be displayed, or null to hide
|
|
130
|
-
* @param {boolean} [visible=true] - Whether the preview should be visible (defaults to true)
|
|
131
|
-
* @returns {void}
|
|
132
|
-
*/
|
|
133
|
-
function updatePreview(position: THREE.Vector2 | null, visible: boolean = true): void {
|
|
134
|
-
if (!position || currentMeasurement) {
|
|
135
|
-
showPreview = false;
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
showPreview = visible;
|
|
140
|
-
if (previewMesh && showPreview) {
|
|
141
|
-
previewMesh.position.set(position.x, position.y, 0);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Hides the preview indicator from view.
|
|
147
|
-
* Used when measurements are active or when the cursor leaves the measurement area.
|
|
148
|
-
* @returns {void}
|
|
149
|
-
*/
|
|
150
|
-
function hidePreview(): void {
|
|
151
|
-
showPreview = false;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Shows the preview indicator if no measurement is currently active.
|
|
156
|
-
* Provides visual feedback for where the next measurement point will be placed.
|
|
157
|
-
* @returns {void}
|
|
158
|
-
*/
|
|
159
|
-
function showPreviewIndicator(): void {
|
|
160
|
-
if (!currentMeasurement) {
|
|
161
|
-
showPreview = true;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Creates a canvas texture for the measurement marker that matches the measurement point styling.
|
|
167
|
-
* The marker uses the same visual properties (color, thickness, outline) as measurement start/end points.
|
|
168
|
-
*
|
|
169
|
-
* @returns {HTMLCanvasElement} A canvas element with the rendered marker that can be used as a texture
|
|
170
|
-
*/
|
|
171
|
-
function createMarkerCanvas(): HTMLCanvasElement {
|
|
172
|
-
const canvas = document.createElement('canvas');
|
|
173
|
-
const context = canvas.getContext('2d', { colorSpace: 'srgb' })!;
|
|
174
|
-
|
|
175
|
-
const width = previewSize;
|
|
176
|
-
const height = previewSize;
|
|
177
|
-
|
|
178
|
-
canvas.width = width;
|
|
179
|
-
canvas.height = height;
|
|
180
|
-
|
|
181
|
-
context.clearRect(0, 0, canvas.width, canvas.height);
|
|
182
|
-
|
|
183
|
-
if (props) {
|
|
184
|
-
drawCircle(
|
|
185
|
-
context,
|
|
186
|
-
previewSize / 2,
|
|
187
|
-
previewSize / 2,
|
|
188
|
-
props.markerSize / 2,
|
|
189
|
-
props.color,
|
|
190
|
-
props.outlineColor,
|
|
191
|
-
props.outlineThickness
|
|
192
|
-
);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
return canvas;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Starts a new measurement at the specified point based on the current measurement type.
|
|
200
|
-
* Clears any existing measurement and creates the appropriate measurement class instance.
|
|
201
|
-
*
|
|
202
|
-
* @param {THREE.Vector2} startPoint - The world coordinates where the measurement should begin
|
|
203
|
-
* @returns {void}
|
|
204
|
-
*/
|
|
205
|
-
function startMeasurement(startPoint: THREE.Vector2): void {
|
|
206
|
-
if (!props) return;
|
|
207
|
-
|
|
208
|
-
// Clear any existing auto-hide timeout
|
|
209
|
-
if (autoHideTimeoutId !== null) {
|
|
210
|
-
clearTimeout(autoHideTimeoutId);
|
|
211
|
-
autoHideTimeoutId = null;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
// Reset fade state
|
|
215
|
-
isFading = false;
|
|
216
|
-
fadeOpacity = 1.0;
|
|
217
|
-
|
|
218
|
-
clearMeasurement();
|
|
219
|
-
showPreview = false; // Hide preview when starting measurement
|
|
220
|
-
|
|
221
|
-
// Create new measurement based on type
|
|
222
|
-
let measurement: IMeasurement;
|
|
223
|
-
|
|
224
|
-
switch (props.type) {
|
|
225
|
-
case MeasurementType.Line:
|
|
226
|
-
measurement = new LineMeasurement(startPoint, props, displayProps, gridProps);
|
|
227
|
-
break;
|
|
228
|
-
case MeasurementType.Beam:
|
|
229
|
-
measurement = new BeamMeasurement(startPoint, props, displayProps, gridProps);
|
|
230
|
-
break;
|
|
231
|
-
case MeasurementType.Cone:
|
|
232
|
-
measurement = new ConeMeasurement(startPoint, props, displayProps, gridProps);
|
|
233
|
-
break;
|
|
234
|
-
case MeasurementType.Circle:
|
|
235
|
-
measurement = new CircleMeasurement(startPoint, props, displayProps, gridProps);
|
|
236
|
-
break;
|
|
237
|
-
case MeasurementType.Square:
|
|
238
|
-
measurement = new RectangleMeasurement(startPoint, props, displayProps, gridProps);
|
|
239
|
-
break;
|
|
240
|
-
default:
|
|
241
|
-
measurement = new LineMeasurement(startPoint, props, displayProps, gridProps);
|
|
242
|
-
break;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
currentMeasurement = measurement;
|
|
246
|
-
measurementGroup.add(measurement.object);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
* Updates the current measurement with a new end point, typically called during mouse movement.
|
|
251
|
-
* Recalculates measurement geometry and updates the visual representation in real-time.
|
|
252
|
-
*
|
|
253
|
-
* @param {THREE.Vector2} endPoint - The world coordinates for the current end point of the measurement
|
|
254
|
-
* @returns {void}
|
|
255
|
-
*/
|
|
256
|
-
function updateMeasurement(endPoint: THREE.Vector2): void {
|
|
257
|
-
currentMeasurement?.update(endPoint, sceneRotation);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Completes the current measurement and schedules its automatic removal.
|
|
262
|
-
* The measurement is displayed for the duration specified by autoHideDelay, then fades out over fadeoutTime before being cleared.
|
|
263
|
-
* @returns {void}
|
|
264
|
-
*/
|
|
265
|
-
function finishMeasurement(): void {
|
|
266
|
-
if (!currentMeasurement || !props) return;
|
|
267
|
-
|
|
268
|
-
// Don't finish measurements with zero distance (same start and end point)
|
|
269
|
-
const distance = currentMeasurement.startPoint.distanceTo(currentMeasurement.endPoint);
|
|
270
|
-
if (distance === 0) {
|
|
271
|
-
clearMeasurement();
|
|
272
|
-
return;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
autoHideTimeoutId = setTimeout(() => {
|
|
276
|
-
// Start the fade animation
|
|
277
|
-
fadeStartTime = performance.now();
|
|
278
|
-
isFading = true;
|
|
279
|
-
}, props.autoHideDelay);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Removes the current measurement from the scene and disposes of its resources.
|
|
284
|
-
* Cleans up Three.js objects to prevent memory leaks and resets the measurement state.
|
|
285
|
-
* @returns {void}
|
|
286
|
-
*/
|
|
287
|
-
function clearMeasurement(): void {
|
|
288
|
-
// Clear any existing auto-hide timeout
|
|
289
|
-
if (autoHideTimeoutId !== null) {
|
|
290
|
-
clearTimeout(autoHideTimeoutId);
|
|
291
|
-
autoHideTimeoutId = null;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
// Reset fade state
|
|
295
|
-
isFading = false;
|
|
296
|
-
fadeOpacity = 1.0;
|
|
297
|
-
receivedFadeoutTime = null; // Reset received fadeout time
|
|
298
|
-
|
|
299
|
-
if (currentMeasurement) {
|
|
300
|
-
currentMeasurement.dispose();
|
|
301
|
-
currentMeasurement = null;
|
|
302
|
-
measurementGroup.clear();
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
/**
|
|
307
|
-
* Displays a measurement received from another user (via Y.js).
|
|
308
|
-
* Creates the measurement and immediately sets it to finished state to trigger auto-fade.
|
|
309
|
-
*
|
|
310
|
-
* @param {THREE.Vector2} startPoint - The starting point of the measurement
|
|
311
|
-
* @param {THREE.Vector2} endPoint - The ending point of the measurement
|
|
312
|
-
* @param {number} type - The type of measurement (MeasurementType enum)
|
|
313
|
-
* @returns {void}
|
|
314
|
-
*/
|
|
315
|
-
function displayReceivedMeasurement(
|
|
316
|
-
startPoint: THREE.Vector2,
|
|
317
|
-
endPoint: THREE.Vector2,
|
|
318
|
-
type: number,
|
|
319
|
-
beamWidth?: number,
|
|
320
|
-
coneAngle?: number,
|
|
321
|
-
color?: string,
|
|
322
|
-
thickness?: number,
|
|
323
|
-
outlineColor?: string,
|
|
324
|
-
outlineThickness?: number,
|
|
325
|
-
opacity?: number,
|
|
326
|
-
markerSize?: number,
|
|
327
|
-
autoHideDelay?: number,
|
|
328
|
-
fadeoutTime?: number,
|
|
329
|
-
showDistance?: boolean,
|
|
330
|
-
snapToGrid?: boolean,
|
|
331
|
-
enableDMG252?: boolean
|
|
332
|
-
): void {
|
|
333
|
-
if (!props) {
|
|
334
|
-
console.log('[MeasurementManager] No props available for displayReceivedMeasurement');
|
|
335
|
-
return;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
console.log('[MeasurementManager] displayReceivedMeasurement called:', {
|
|
339
|
-
startPoint,
|
|
340
|
-
endPoint,
|
|
341
|
-
type,
|
|
342
|
-
beamWidth,
|
|
343
|
-
coneAngle,
|
|
344
|
-
thickness,
|
|
345
|
-
hasCurrentMeasurement: !!currentMeasurement
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
// Clear any existing measurement
|
|
349
|
-
clearMeasurement();
|
|
350
|
-
|
|
351
|
-
// Create the appropriate measurement type
|
|
352
|
-
let measurement: IMeasurement;
|
|
353
|
-
|
|
354
|
-
// Use the received properties if provided, override the props temporarily
|
|
355
|
-
const measurementProps = {
|
|
356
|
-
...props,
|
|
357
|
-
type,
|
|
358
|
-
...(beamWidth !== undefined && { beamWidth }),
|
|
359
|
-
...(coneAngle !== undefined && { coneAngle }),
|
|
360
|
-
...(color !== undefined && { color }),
|
|
361
|
-
...(thickness !== undefined && { thickness }),
|
|
362
|
-
...(outlineColor !== undefined && { outlineColor }),
|
|
363
|
-
...(outlineThickness !== undefined && { outlineThickness }),
|
|
364
|
-
...(opacity !== undefined && { opacity }),
|
|
365
|
-
...(markerSize !== undefined && { markerSize }),
|
|
366
|
-
...(autoHideDelay !== undefined && { autoHideDelay }),
|
|
367
|
-
...(fadeoutTime !== undefined && { fadeoutTime }),
|
|
368
|
-
...(showDistance !== undefined && { showDistance }),
|
|
369
|
-
...(snapToGrid !== undefined && { snapToGrid }),
|
|
370
|
-
...(enableDMG252 !== undefined && { enableDMG252 })
|
|
371
|
-
};
|
|
372
|
-
|
|
373
|
-
switch (type) {
|
|
374
|
-
case MeasurementType.Line:
|
|
375
|
-
measurement = new LineMeasurement(startPoint, measurementProps, displayProps, gridProps);
|
|
376
|
-
break;
|
|
377
|
-
case MeasurementType.Beam:
|
|
378
|
-
measurement = new BeamMeasurement(startPoint, measurementProps, displayProps, gridProps);
|
|
379
|
-
break;
|
|
380
|
-
case MeasurementType.Cone:
|
|
381
|
-
measurement = new ConeMeasurement(startPoint, measurementProps, displayProps, gridProps);
|
|
382
|
-
break;
|
|
383
|
-
case MeasurementType.Circle:
|
|
384
|
-
measurement = new CircleMeasurement(startPoint, measurementProps, displayProps, gridProps);
|
|
385
|
-
break;
|
|
386
|
-
case MeasurementType.Square:
|
|
387
|
-
measurement = new RectangleMeasurement(startPoint, measurementProps, displayProps, gridProps);
|
|
388
|
-
break;
|
|
389
|
-
default:
|
|
390
|
-
measurement = new LineMeasurement(startPoint, measurementProps, displayProps, gridProps);
|
|
391
|
-
break;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// Set the measurement
|
|
395
|
-
currentMeasurement = measurement;
|
|
396
|
-
measurementGroup.add(measurement.object);
|
|
397
|
-
|
|
398
|
-
console.log('[MeasurementManager] Measurement created and added to group:', {
|
|
399
|
-
groupChildren: measurementGroup.children.length,
|
|
400
|
-
measurementObject: measurement.object,
|
|
401
|
-
visible: measurementGroup.visible
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
// Update to the end point
|
|
405
|
-
currentMeasurement.update(endPoint, sceneRotation);
|
|
406
|
-
|
|
407
|
-
console.log('[MeasurementManager] Measurement updated to endpoint');
|
|
408
|
-
|
|
409
|
-
// Store the fadeout time if provided for the fade animation
|
|
410
|
-
if (fadeoutTime !== undefined) {
|
|
411
|
-
receivedFadeoutTime = fadeoutTime;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
// Schedule auto-fade with the received timing properties
|
|
415
|
-
const delay = autoHideDelay ?? props.autoHideDelay;
|
|
416
|
-
console.log(
|
|
417
|
-
'[MeasurementManager] Scheduling auto-fade with delay:',
|
|
418
|
-
delay,
|
|
419
|
-
'fadeTime:',
|
|
420
|
-
fadeoutTime ?? props.fadeoutTime
|
|
421
|
-
);
|
|
422
|
-
|
|
423
|
-
autoHideTimeoutId = setTimeout(() => {
|
|
424
|
-
// Start the fade animation
|
|
425
|
-
fadeStartTime = performance.now();
|
|
426
|
-
isFading = true;
|
|
427
|
-
}, delay);
|
|
428
|
-
|
|
429
|
-
console.log('[MeasurementManager] Measurement auto-fade scheduled');
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
// Export the methods for use by parent components
|
|
433
|
-
export {
|
|
434
|
-
startMeasurement,
|
|
435
|
-
updateMeasurement,
|
|
436
|
-
finishMeasurement,
|
|
437
|
-
clearMeasurement,
|
|
438
|
-
updatePreview,
|
|
439
|
-
hidePreview,
|
|
440
|
-
showPreviewIndicator,
|
|
441
|
-
displayReceivedMeasurement
|
|
442
|
-
};
|
|
443
|
-
</script>
|
|
444
|
-
|
|
445
|
-
<!-- Measurement Group -->
|
|
446
|
-
<!-- Always visible to show received measurements in playfield -->
|
|
447
|
-
<T.Group
|
|
448
|
-
bind:ref={measurementGroup}
|
|
449
|
-
visible={true}
|
|
450
|
-
layers={[SceneLayer.Overlay]}
|
|
451
|
-
renderOrder={SceneLayerOrder.Measurement}
|
|
452
|
-
>
|
|
453
|
-
<!-- Measurement objects will be added here dynamically -->
|
|
454
|
-
</T.Group>
|
|
455
|
-
|
|
456
|
-
<!-- Preview indicator -->
|
|
457
|
-
<T.Mesh
|
|
458
|
-
bind:ref={previewMesh}
|
|
459
|
-
visible={showPreview && visible}
|
|
460
|
-
layers={[SceneLayer.Overlay]}
|
|
461
|
-
renderOrder={SceneLayerOrder.Measurement}
|
|
462
|
-
>
|
|
463
|
-
<T.MeshBasicMaterial
|
|
464
|
-
bind:ref={previewMaterial}
|
|
465
|
-
transparent={true}
|
|
466
|
-
opacity={props?.opacity ?? 1}
|
|
467
|
-
side={THREE.DoubleSide}
|
|
468
|
-
depthWrite={false}
|
|
469
|
-
depthTest={false}
|
|
470
|
-
toneMapped={false}
|
|
471
|
-
/>
|
|
472
|
-
<T.PlaneGeometry bind:ref={previewGeometry} args={[previewSize, previewSize]} />
|
|
473
|
-
</T.Mesh>
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { type MeasurementLayerProps } from './types';
|
|
3
|
-
import type { DisplayProps } from '../Stage/types';
|
|
4
|
-
import type { GridLayerProps } from '../GridLayer/types';
|
|
5
|
-
interface Props {
|
|
6
|
-
props: MeasurementLayerProps;
|
|
7
|
-
visible: boolean;
|
|
8
|
-
displayProps: DisplayProps;
|
|
9
|
-
gridProps: GridLayerProps;
|
|
10
|
-
sceneRotation?: number;
|
|
11
|
-
onFadeComplete?: () => void;
|
|
12
|
-
}
|
|
13
|
-
declare const MeasurementManager: import("svelte").Component<Props, {
|
|
14
|
-
startMeasurement: (startPoint: THREE.Vector2) => void;
|
|
15
|
-
updateMeasurement: (endPoint: THREE.Vector2) => void;
|
|
16
|
-
finishMeasurement: () => void;
|
|
17
|
-
clearMeasurement: () => void;
|
|
18
|
-
updatePreview: (position: THREE.Vector2 | null, visible?: boolean) => void;
|
|
19
|
-
hidePreview: () => void;
|
|
20
|
-
showPreviewIndicator: () => void;
|
|
21
|
-
displayReceivedMeasurement: (startPoint: THREE.Vector2, endPoint: THREE.Vector2, type: number, beamWidth?: number, coneAngle?: number, color?: string, thickness?: number, outlineColor?: string, outlineThickness?: number, opacity?: number, markerSize?: number, autoHideDelay?: number, fadeoutTime?: number, showDistance?: boolean, snapToGrid?: boolean, enableDMG252?: boolean) => void;
|
|
22
|
-
}, "">;
|
|
23
|
-
type MeasurementManager = ReturnType<typeof MeasurementManager>;
|
|
24
|
-
export default MeasurementManager;
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import type { GridLayerProps } from '../../GridLayer/types';
|
|
3
|
-
import type { DisplayProps } from '../../Stage/types';
|
|
4
|
-
import { MeasurementType, type MeasurementLayerProps } from '../types';
|
|
5
|
-
/**
|
|
6
|
-
* Interface defining the contract that all measurement implementations must follow.
|
|
7
|
-
* Provides methods for lifecycle management, rendering, and data access for measurements.
|
|
8
|
-
*/
|
|
9
|
-
export interface IMeasurement {
|
|
10
|
-
/** The Three.js group object containing the measurement visualization */
|
|
11
|
-
object: THREE.Group;
|
|
12
|
-
/** The rendered shape object in the Three.js scene */
|
|
13
|
-
shapeMesh: THREE.Mesh;
|
|
14
|
-
/** The rendered text object in the Three.js scene */
|
|
15
|
-
textMesh: THREE.Mesh;
|
|
16
|
-
/** Starting point of the measurement in world coordinates */
|
|
17
|
-
startPoint: THREE.Vector2;
|
|
18
|
-
/** Current end point of the measurement in world coordinates */
|
|
19
|
-
endPoint: THREE.Vector2;
|
|
20
|
-
/**
|
|
21
|
-
* Updates the measurement with a new end point, typically called during mouse movement.
|
|
22
|
-
* @param {THREE.Vector2} endPoint - The new end point coordinates in world space
|
|
23
|
-
* @param {number} sceneRotation - Optional scene rotation in degrees
|
|
24
|
-
* @returns {void}
|
|
25
|
-
*/
|
|
26
|
-
update(endPoint: THREE.Vector2, sceneRotation?: number): void;
|
|
27
|
-
/**
|
|
28
|
-
* Renders only the shape portion of the measurement (without text labels).
|
|
29
|
-
* @returns {void}
|
|
30
|
-
*/
|
|
31
|
-
renderShape(): void;
|
|
32
|
-
/**
|
|
33
|
-
* Cleans up all Three.js resources and removes the measurement from memory.
|
|
34
|
-
* Should be called when the measurement is no longer needed.
|
|
35
|
-
* @returns {void}
|
|
36
|
-
*/
|
|
37
|
-
dispose(): void;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Abstract base class providing common functionality for all measurement types.
|
|
41
|
-
* Handles shared behavior like distance calculation, text rendering, resource management,
|
|
42
|
-
* and coordinate transformations while allowing subclasses to implement specific shapes.
|
|
43
|
-
*/
|
|
44
|
-
export declare abstract class BaseMeasurement implements IMeasurement {
|
|
45
|
-
/** Unique identifier for this measurement instance */
|
|
46
|
-
id: string;
|
|
47
|
-
/** The type of measurement (line, circle, rectangle, etc.) */
|
|
48
|
-
type: MeasurementType;
|
|
49
|
-
/** Starting point of the measurement in world coordinates */
|
|
50
|
-
startPoint: THREE.Vector2;
|
|
51
|
-
/** Current end point of the measurement in world coordinates */
|
|
52
|
-
endPoint: THREE.Vector2;
|
|
53
|
-
/** Timestamp when the measurement was created */
|
|
54
|
-
createdAt: number;
|
|
55
|
-
/** Primary color for the measurement visualization */
|
|
56
|
-
color: string;
|
|
57
|
-
/** Opacity level for the measurement (0.0 to 1.0) */
|
|
58
|
-
opacity: number;
|
|
59
|
-
/** Line thickness for drawing measurement elements */
|
|
60
|
-
thickness: number;
|
|
61
|
-
/** Diameter of the measurement markers/points */
|
|
62
|
-
markerSize: number;
|
|
63
|
-
/** Thickness of outline strokes around measurement elements */
|
|
64
|
-
outlineThickness: number;
|
|
65
|
-
/** Color used for outline strokes */
|
|
66
|
-
outlineColor: string;
|
|
67
|
-
/** Whether to display distance text labels */
|
|
68
|
-
showDistance: boolean;
|
|
69
|
-
/** Whether to snap measurement points to the grid */
|
|
70
|
-
snapToGrid: boolean;
|
|
71
|
-
/** Whether to use DMG 252 measurement calculations */
|
|
72
|
-
enableDMG252: boolean;
|
|
73
|
-
/** Display properties containing resolution and size information */
|
|
74
|
-
protected displayProps: DisplayProps;
|
|
75
|
-
/** Grid properties containing spacing and units information */
|
|
76
|
-
protected gridProps: GridLayerProps;
|
|
77
|
-
/** Scene rotation in degrees for text alignment */
|
|
78
|
-
protected sceneRotation: number;
|
|
79
|
-
/** The group object in the Three.js scene */
|
|
80
|
-
object: THREE.Group;
|
|
81
|
-
/** The rendered shape object in the Three.js scene */
|
|
82
|
-
shapeMesh: THREE.Mesh;
|
|
83
|
-
/** The rendered text object in the Three.js scene */
|
|
84
|
-
textMesh: THREE.Mesh;
|
|
85
|
-
/** Flag indicating whether this measurement has been disposed */
|
|
86
|
-
protected isDisposed: boolean;
|
|
87
|
-
/**
|
|
88
|
-
* Creates a new measurement instance with the specified properties.
|
|
89
|
-
* Initializes all measurement parameters and sets up the coordinate system.
|
|
90
|
-
*
|
|
91
|
-
* @param {MeasurementType} type - The specific type of measurement being created
|
|
92
|
-
* @param {THREE.Vector2} startPoint - Initial starting point in world coordinates
|
|
93
|
-
* @param {MeasurementLayerProps} measurementProps - Configuration properties for the measurement
|
|
94
|
-
* @param {DisplayProps} displayProps - Display settings including resolution and dimensions
|
|
95
|
-
* @param {GridLayerProps} gridProps - Grid configuration for snapping and units
|
|
96
|
-
*/
|
|
97
|
-
constructor(type: MeasurementType, startPoint: THREE.Vector2, measurementProps: MeasurementLayerProps, displayProps: DisplayProps, gridProps: GridLayerProps);
|
|
98
|
-
/**
|
|
99
|
-
* Updates the measurement with a new end point and recalculates all derived values.
|
|
100
|
-
* Recreates the shape and text objects to reflect the new measurement geometry.
|
|
101
|
-
* This method is called continuously during measurement creation as the user moves the mouse.
|
|
102
|
-
*
|
|
103
|
-
* @param {THREE.Vector2} endPoint - The new end point coordinates in world space
|
|
104
|
-
* @param {number} sceneRotation - Optional scene rotation in degrees
|
|
105
|
-
* @returns {void}
|
|
106
|
-
*/
|
|
107
|
-
update(endPoint: THREE.Vector2, sceneRotation?: number): void;
|
|
108
|
-
/**
|
|
109
|
-
* Renders the distance text label for this measurement with standard positioning logic.
|
|
110
|
-
* Positions text 150 pixels away from the end point in the direction of the measurement.
|
|
111
|
-
* All measurement types share this text positioning and styling approach.
|
|
112
|
-
* Returns an empty group if distance display is disabled.
|
|
113
|
-
*
|
|
114
|
-
* @returns {void}
|
|
115
|
-
*/
|
|
116
|
-
renderText(): void;
|
|
117
|
-
/**
|
|
118
|
-
* Abstract method that must be implemented by each measurement type to render its specific shape.
|
|
119
|
-
* Should create and return a Three.js object representing the measurement's visual geometry
|
|
120
|
-
* (line, circle, rectangle, etc.) based on the current start and end points.
|
|
121
|
-
* The mesh should be stored in the `this.mesh` property.
|
|
122
|
-
*
|
|
123
|
-
* @returns {void}
|
|
124
|
-
*/
|
|
125
|
-
abstract renderShape(): void;
|
|
126
|
-
/**
|
|
127
|
-
* Creates a Three.js mesh displaying text with consistent styling across all measurements.
|
|
128
|
-
* Generates a canvas-based texture with the specified text and applies standard material settings
|
|
129
|
-
* for proper transparency, layering, and visual appearance.
|
|
130
|
-
*
|
|
131
|
-
* @param {string} text - The text content to display
|
|
132
|
-
* @param {THREE.Vector2} position - World coordinates where the text should be positioned
|
|
133
|
-
* @returns {THREE.Mesh} A Three.js mesh containing the rendered text
|
|
134
|
-
*/
|
|
135
|
-
protected createTextMesh(text: string, position: THREE.Vector2): THREE.Mesh;
|
|
136
|
-
/**
|
|
137
|
-
* Updates the shape mesh with a new geometry and texture.
|
|
138
|
-
* @param {THREE.PlaneGeometry} geometry - The new geometry to use
|
|
139
|
-
* @param {THREE.CanvasTexture} texture - The new texture to use
|
|
140
|
-
* @returns {void}
|
|
141
|
-
*/
|
|
142
|
-
protected updateShapeMesh(geometry: THREE.PlaneGeometry, texture: THREE.CanvasTexture): void;
|
|
143
|
-
/**
|
|
144
|
-
* Completely destroys this measurement instance and cleans up all associated resources.
|
|
145
|
-
* Removes objects from the scene, disposes of Three.js resources, and marks the measurement as disposed.
|
|
146
|
-
* Should be called when the measurement is no longer needed to prevent memory leaks.
|
|
147
|
-
* @returns {void}
|
|
148
|
-
*/
|
|
149
|
-
dispose(): void;
|
|
150
|
-
}
|