@viamrobotics/motion-tools 1.5.0 → 1.9.0
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/README.md +16 -9
- package/dist/components/App.svelte +17 -0
- package/dist/components/Frame.svelte +0 -7
- package/dist/components/HoveredEntities.svelte +19 -0
- package/dist/components/HoveredEntities.svelte.d.ts +3 -0
- package/dist/components/HoveredEntityTooltip.svelte +241 -0
- package/dist/components/HoveredEntityTooltip.svelte.d.ts +7 -0
- package/dist/components/MeasureTool/MeasurePoint.svelte +47 -0
- package/dist/components/MeasureTool/MeasurePoint.svelte.d.ts +8 -0
- package/dist/components/MeasureTool/MeasureTool.svelte +176 -0
- package/dist/components/MeasureTool/MeasureTool.svelte.d.ts +3 -0
- package/dist/components/Overlay/Popover.svelte +28 -0
- package/dist/components/Overlay/Popover.svelte.d.ts +9 -0
- package/dist/components/Overlay/ToggleGroup.svelte +60 -0
- package/dist/components/Overlay/ToggleGroup.svelte.d.ts +13 -0
- package/dist/components/Scene.svelte +1 -1
- package/dist/components/Tree/Settings.svelte +23 -22
- package/dist/components/Tree/Widgets.svelte +44 -0
- package/dist/components/Tree/Widgets.svelte.d.ts +2 -17
- package/dist/components/dashboard/Button.svelte +7 -3
- package/dist/components/dashboard/Button.svelte.d.ts +3 -2
- package/dist/components/widgets/Camera.svelte +195 -0
- package/dist/components/widgets/Camera.svelte.d.ts +6 -0
- package/dist/ecs/traits.d.ts +18 -12
- package/dist/ecs/traits.js +17 -11
- package/dist/ecs/useQuery.svelte.js +10 -10
- package/dist/hooks/use3DModels.svelte.js +1 -3
- package/dist/hooks/useObjectEvents.svelte.d.ts +1 -0
- package/dist/hooks/useObjectEvents.svelte.js +24 -0
- package/dist/hooks/useSettings.svelte.d.ts +5 -0
- package/dist/hooks/useSettings.svelte.js +5 -0
- package/dist/hooks/useWeblabs.svelte.d.ts +1 -3
- package/dist/hooks/useWeblabs.svelte.js +1 -3
- package/dist/three/InstancedArrows/raycast.js +2 -6
- package/package.json +6 -2
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ArmClient } from '@viamrobotics/sdk';
|
|
2
2
|
import { createResourceClient, useResourceNames } from '@viamrobotics/svelte-sdk';
|
|
3
3
|
import { getContext, setContext } from 'svelte';
|
|
4
|
-
import { useWeblabs, WEBLABS_EXPERIMENTS } from './useWeblabs.svelte';
|
|
5
4
|
import { useSettings } from './useSettings.svelte';
|
|
6
5
|
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
|
|
7
6
|
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
|
|
@@ -11,7 +10,6 @@ dracoLoader.setDecoderPath('https://www.gstatic.com/draco/versioned/decoders/1.5
|
|
|
11
10
|
gltfLoader.setDRACOLoader(dracoLoader);
|
|
12
11
|
const key = Symbol('3d-models-context');
|
|
13
12
|
export const provide3DModels = (partID) => {
|
|
14
|
-
const weblabs = useWeblabs();
|
|
15
13
|
const settings = useSettings();
|
|
16
14
|
let current = $state.raw({});
|
|
17
15
|
const arms = useResourceNames(partID, 'arm');
|
|
@@ -52,7 +50,7 @@ export const provide3DModels = (partID) => {
|
|
|
52
50
|
const shouldFetchModels = settings.current.isLoaded &&
|
|
53
51
|
(settings.current.renderArmModels === 'model' ||
|
|
54
52
|
settings.current.renderArmModels === 'colliders+model');
|
|
55
|
-
if (
|
|
53
|
+
if (shouldFetchModels) {
|
|
56
54
|
fetch3DModels();
|
|
57
55
|
}
|
|
58
56
|
});
|
|
@@ -3,6 +3,7 @@ import type { Entity } from 'koota';
|
|
|
3
3
|
export declare const useObjectEvents: (entity: () => Entity | undefined) => {
|
|
4
4
|
readonly visible: boolean;
|
|
5
5
|
onpointerenter: (event: IntersectionEvent<MouseEvent>) => void;
|
|
6
|
+
onpointermove: (event: IntersectionEvent<MouseEvent>) => void;
|
|
6
7
|
onpointerleave: (event: IntersectionEvent<MouseEvent>) => void;
|
|
7
8
|
ondblclick: (event: IntersectionEvent<MouseEvent>) => void;
|
|
8
9
|
onpointerdown: (event: IntersectionEvent<MouseEvent>) => void;
|
|
@@ -2,6 +2,7 @@ import { useCursor } from '@threlte/extras';
|
|
|
2
2
|
import { useFocusedEntity, useSelectedEntity } from './useSelection.svelte';
|
|
3
3
|
import { useVisibility } from './useVisibility.svelte';
|
|
4
4
|
import { Vector2 } from 'three';
|
|
5
|
+
import { traits } from '../ecs';
|
|
5
6
|
export const useObjectEvents = (entity) => {
|
|
6
7
|
const down = new Vector2();
|
|
7
8
|
const selectedEntity = useSelectedEntity();
|
|
@@ -13,10 +14,32 @@ export const useObjectEvents = (entity) => {
|
|
|
13
14
|
const onpointerenter = (event) => {
|
|
14
15
|
event.stopPropagation();
|
|
15
16
|
cursor.onPointerEnter();
|
|
17
|
+
if (currentEntity && !currentEntity.has(traits.Hover)) {
|
|
18
|
+
currentEntity.add(traits.Hover({
|
|
19
|
+
index: -1,
|
|
20
|
+
x: event.point.x,
|
|
21
|
+
y: event.point.y,
|
|
22
|
+
z: event.point.z,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const onpointermove = (event) => {
|
|
27
|
+
event.stopPropagation();
|
|
28
|
+
if (currentEntity && currentEntity.has(traits.Hover)) {
|
|
29
|
+
currentEntity.set(traits.Hover, {
|
|
30
|
+
index: event.index ?? -1,
|
|
31
|
+
x: event.point.x,
|
|
32
|
+
y: event.point.y,
|
|
33
|
+
z: event.point.z,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
16
36
|
};
|
|
17
37
|
const onpointerleave = (event) => {
|
|
18
38
|
event.stopPropagation();
|
|
19
39
|
cursor.onPointerLeave();
|
|
40
|
+
if (currentEntity?.has(traits.Hover)) {
|
|
41
|
+
currentEntity.remove(traits.Hover);
|
|
42
|
+
}
|
|
20
43
|
};
|
|
21
44
|
const ondblclick = (event) => {
|
|
22
45
|
event.stopPropagation();
|
|
@@ -41,6 +64,7 @@ export const useObjectEvents = (entity) => {
|
|
|
41
64
|
return visible;
|
|
42
65
|
},
|
|
43
66
|
onpointerenter,
|
|
67
|
+
onpointermove,
|
|
44
68
|
onpointerleave,
|
|
45
69
|
ondblclick,
|
|
46
70
|
onpointerdown,
|
|
@@ -13,13 +13,18 @@ export interface Settings {
|
|
|
13
13
|
lineWidth: number;
|
|
14
14
|
lineDotSize: number;
|
|
15
15
|
enableMeasure: boolean;
|
|
16
|
+
enableMeasureAxisX: boolean;
|
|
17
|
+
enableMeasureAxisY: boolean;
|
|
18
|
+
enableMeasureAxisZ: boolean;
|
|
16
19
|
enableLabels: boolean;
|
|
17
20
|
enableKeybindings: boolean;
|
|
18
21
|
enableQueryDevtools: boolean;
|
|
19
22
|
enableXR: boolean;
|
|
20
23
|
enableArmPositionsWidget: boolean;
|
|
24
|
+
openCameraWidgets: Record<string, string[]>;
|
|
21
25
|
renderStats: boolean;
|
|
22
26
|
renderArmModels: 'colliders' | 'colliders+model' | 'model';
|
|
27
|
+
renderSubEntityHoverDetail: boolean;
|
|
23
28
|
}
|
|
24
29
|
interface Context {
|
|
25
30
|
current: Settings;
|
|
@@ -16,13 +16,18 @@ const defaults = () => ({
|
|
|
16
16
|
lineWidth: 0.005,
|
|
17
17
|
lineDotSize: 0.01,
|
|
18
18
|
enableMeasure: false,
|
|
19
|
+
enableMeasureAxisX: true,
|
|
20
|
+
enableMeasureAxisY: true,
|
|
21
|
+
enableMeasureAxisZ: true,
|
|
19
22
|
enableLabels: false,
|
|
20
23
|
enableKeybindings: true,
|
|
21
24
|
enableQueryDevtools: false,
|
|
22
25
|
enableXR: false,
|
|
23
26
|
enableArmPositionsWidget: false,
|
|
27
|
+
openCameraWidgets: {},
|
|
24
28
|
renderStats: false,
|
|
25
29
|
renderArmModels: 'colliders+model',
|
|
30
|
+
renderSubEntityHoverDetail: false,
|
|
26
31
|
});
|
|
27
32
|
export const provideSettings = () => {
|
|
28
33
|
let settings = $state(defaults());
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
export declare const WEBLABS_EXPERIMENTS: {
|
|
2
|
-
readonly MOTION_TOOLS_RENDER_ARM_MODELS: "MOTION_TOOLS_RENDER_ARM_MODELS";
|
|
3
|
-
};
|
|
1
|
+
export declare const WEBLABS_EXPERIMENTS: {};
|
|
4
2
|
export declare const WEBLABS_CONTEXT_KEY: unique symbol;
|
|
5
3
|
interface Context {
|
|
6
4
|
load: (experiments: string[]) => void;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { getContext, setContext } from 'svelte';
|
|
2
2
|
import { SvelteSet } from 'svelte/reactivity';
|
|
3
|
-
export const WEBLABS_EXPERIMENTS = {
|
|
4
|
-
MOTION_TOOLS_RENDER_ARM_MODELS: 'MOTION_TOOLS_RENDER_ARM_MODELS',
|
|
5
|
-
};
|
|
3
|
+
export const WEBLABS_EXPERIMENTS = {};
|
|
6
4
|
export const WEBLABS_CONTEXT_KEY = Symbol('weblabs-context');
|
|
7
5
|
const getCookie = (name) => {
|
|
8
6
|
const value = `; ${document.cookie}`;
|
|
@@ -2,7 +2,6 @@ import { Object3D, BufferGeometry, Ray, Matrix4, Raycaster, Vector3, Box3, RawSh
|
|
|
2
2
|
const vec3 = new Vector3();
|
|
3
3
|
const inverseMatrix = new Matrix4();
|
|
4
4
|
const localRay = new Ray();
|
|
5
|
-
const ray = new Ray();
|
|
6
5
|
const box = new Box3();
|
|
7
6
|
const segmentStart = new Vector3();
|
|
8
7
|
const segmentEnd = new Vector3();
|
|
@@ -46,17 +45,14 @@ export function meshBoundsRaycast(raycaster, intersects) {
|
|
|
46
45
|
this.geometry.computeBoundingBox();
|
|
47
46
|
}
|
|
48
47
|
box.copy(this.geometry.boundingBox ?? box);
|
|
49
|
-
box.applyMatrix4(this.matrixWorld);
|
|
50
48
|
if (!raycaster.ray.intersectsBox(box)) {
|
|
51
49
|
return;
|
|
52
50
|
}
|
|
53
|
-
|
|
54
|
-
ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);
|
|
51
|
+
raycaster.ray.intersectBox(box, vec3);
|
|
55
52
|
const distance = vec3.distanceTo(raycaster.ray.origin);
|
|
56
|
-
const point = vec3.clone();
|
|
57
53
|
intersects.push({
|
|
58
54
|
distance,
|
|
59
|
-
point,
|
|
55
|
+
point: vec3.clone(),
|
|
60
56
|
object: this,
|
|
61
57
|
});
|
|
62
58
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@viamrobotics/motion-tools",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "Motion visualization with Viam",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -41,7 +41,9 @@
|
|
|
41
41
|
"@vitest/coverage-v8": "^3.2.4",
|
|
42
42
|
"@zag-js/collapsible": "1.22.1",
|
|
43
43
|
"@zag-js/floating-panel": "1.22.1",
|
|
44
|
+
"@zag-js/popover": "1.22.1",
|
|
44
45
|
"@zag-js/svelte": "1.22.1",
|
|
46
|
+
"@zag-js/toggle-group": "1.22.1",
|
|
45
47
|
"@zag-js/tree-view": "1.22.1",
|
|
46
48
|
"camera-controls": "3.1.0",
|
|
47
49
|
"eslint": "9.34.0",
|
|
@@ -87,7 +89,9 @@
|
|
|
87
89
|
"@zag-js/collapsible": ">=1",
|
|
88
90
|
"@zag-js/dialog": ">=1.31",
|
|
89
91
|
"@zag-js/floating-panel": ">=1",
|
|
92
|
+
"@zag-js/popover": ">=1",
|
|
90
93
|
"@zag-js/svelte": ">=1",
|
|
94
|
+
"@zag-js/toggle-group": ">=1",
|
|
91
95
|
"@zag-js/tree-view": ">=1",
|
|
92
96
|
"camera-controls": ">=3",
|
|
93
97
|
"idb-keyval": ">=6",
|
|
@@ -128,7 +132,7 @@
|
|
|
128
132
|
"@bufbuild/protobuf": "1.10.1",
|
|
129
133
|
"@neodrag/svelte": "^2.3.3",
|
|
130
134
|
"@tanstack/svelte-query-devtools": "^6.0.2",
|
|
131
|
-
"koota": "
|
|
135
|
+
"koota": "0.6.5",
|
|
132
136
|
"lodash-es": "4.17.23",
|
|
133
137
|
"uuid-tool": "^2.0.3"
|
|
134
138
|
},
|