@viamrobotics/motion-tools 0.18.1 → 0.18.2

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.
@@ -8,8 +8,12 @@
8
8
  import { useObjectEvents } from '../hooks/useObjectEvents.svelte'
9
9
  import { Color, type Object3D } from 'three'
10
10
  import Geometry from './Geometry.svelte'
11
+ import { useWeblabs } from '../hooks/useWeblabs.svelte'
11
12
  import { useSelected } from '../hooks/useSelection.svelte'
13
+ import { useSettings } from '../hooks/useSettings.svelte'
14
+ import { use3DModels } from '../hooks/use3DModels.svelte'
12
15
  import { colors, darkenColor } from '../color'
16
+ import { WEBLABS_EXPERIMENTS } from '../hooks/useWeblabs.svelte'
13
17
 
14
18
  interface Props {
15
19
  uuid: string
@@ -20,16 +24,34 @@
20
24
  children?: Snippet<[{ ref: Object3D }]>
21
25
  }
22
26
 
23
- let { uuid, ...rest }: Props = $props()
27
+ let { uuid, name, ...rest }: Props = $props()
24
28
 
29
+ const settings = useSettings()
30
+ const componentModels = use3DModels()
25
31
  const selected = useSelected()
32
+ const weblabs = useWeblabs()
26
33
  const events = useObjectEvents(() => uuid)
27
34
 
28
35
  const color = $derived(rest.metadata.color ?? colors.default)
36
+
37
+ const model = $derived.by(() => {
38
+ if (!weblabs.isActive(WEBLABS_EXPERIMENTS.MOTION_TOOLS_RENDER_ARM_MODELS)) {
39
+ return
40
+ }
41
+
42
+ const [componentName, id] = name.split(':')
43
+ if (!componentName || !id) {
44
+ return
45
+ }
46
+ return componentModels.current?.[componentName]?.[id]
47
+ })
29
48
  </script>
30
49
 
31
50
  <Geometry
32
51
  {uuid}
52
+ {name}
53
+ {model}
54
+ renderMode={settings.current.renderArmModels}
33
55
  color={selected.current === uuid
34
56
  ? `#${darkenColor(color, 75).getHexString()}`
35
57
  : `#${colorUtil.set(color).getHexString()}`}
@@ -1,3 +1,9 @@
1
+ <!--
2
+
3
+ This component is consumed as a library export
4
+ and should remain pure, i.e. no hooks should be used.
5
+
6
+ -->
1
7
  <script lang="ts">
2
8
  import { T, type Props as ThrelteProps } from '@threlte/core'
3
9
  import { type Snippet } from 'svelte'
@@ -10,14 +16,7 @@
10
16
  import type { WorldObject } from '../WorldObject.svelte'
11
17
  import { PLYLoader } from 'three/addons/loaders/PLYLoader.js'
12
18
 
13
- import { WEBLABS_EXPERIMENTS } from '../hooks/useWeblabs.svelte'
14
- import { useSettings } from '../hooks/useSettings.svelte'
15
- import { useWeblabs } from '../hooks/useWeblabs.svelte'
16
- import { use3DModels } from '../hooks/use3DModels.svelte'
17
- const settings = useSettings()
18
19
  const plyLoader = new PLYLoader()
19
- const weblabs = useWeblabs()
20
- const componentModels = use3DModels()
21
20
 
22
21
  interface Props extends ThrelteProps<Group> {
23
22
  uuid: string
@@ -25,8 +24,10 @@
25
24
  geometry?: WorldObject['geometry']
26
25
  pose: WorldObject['pose']
27
26
  metadata: WorldObject['metadata']
28
- children?: Snippet<[{ ref: Group }]>
29
27
  color?: string
28
+ model?: Group
29
+ renderMode?: 'model' | 'colliders' | 'colliders+model'
30
+ children?: Snippet<[{ ref: Group }]>
30
31
  }
31
32
 
32
33
  let {
@@ -36,32 +37,15 @@
36
37
  metadata,
37
38
  pose,
38
39
  color: overrideColor,
40
+ model,
41
+ renderMode = 'colliders',
39
42
  children,
40
43
  ...rest
41
44
  }: Props = $props()
42
45
 
43
- const gltfModel = $derived.by(() => {
44
- const [componentName, id] = name.split(':')
45
- if (!componentName || !id) {
46
- return undefined
47
- }
48
- return componentModels.current?.[componentName]?.[id]
49
- })
50
-
51
46
  const type = $derived(geometry?.geometryType?.case)
52
47
  const color = $derived(overrideColor ?? metadata.color ?? colors.default)
53
48
 
54
- const renderModels = $derived(
55
- (settings.current.renderArmModels === 'model' ||
56
- settings.current.renderArmModels === 'colliders+model') &&
57
- gltfModel
58
- )
59
- const renderPrimitives = $derived(
60
- settings.current.renderArmModels === 'colliders' ||
61
- settings.current.renderArmModels === 'colliders+model' ||
62
- !gltfModel
63
- )
64
-
65
49
  const group = new Group()
66
50
  const mesh = $derived.by(() => {
67
51
  if (type === undefined) {
@@ -76,16 +60,6 @@
76
60
  return result
77
61
  })
78
62
 
79
- $effect.pre(() => {
80
- if (
81
- weblabs.isActive(WEBLABS_EXPERIMENTS.MOTION_TOOLS_RENDER_ARM_MODELS) &&
82
- renderModels &&
83
- !renderPrimitives
84
- ) {
85
- geo = undefined
86
- }
87
- })
88
-
89
63
  $effect.pre(() => {
90
64
  if (geometry?.center && mesh) {
91
65
  poseToObject3d(geometry.center, mesh)
@@ -139,11 +113,11 @@
139
113
  {uuid}
140
114
  bvh={{ enabled: false }}
141
115
  >
142
- {#if weblabs.isActive(WEBLABS_EXPERIMENTS.MOTION_TOOLS_RENDER_ARM_MODELS) && renderModels}
143
- <T is={gltfModel} />
116
+ {#if model && renderMode.includes('model')}
117
+ <T is={model} />
144
118
  {/if}
145
119
 
146
- {#if !weblabs.isActive(WEBLABS_EXPERIMENTS.MOTION_TOOLS_RENDER_ARM_MODELS) || renderPrimitives}
120
+ {#if renderMode.includes('colliders')}
147
121
  {#if geometry.geometryType.case === 'bufferGeometry'}
148
122
  <T
149
123
  is={geometry.geometryType.value}
@@ -193,7 +167,7 @@
193
167
  opacity={metadata.opacity ?? 0.7}
194
168
  />
195
169
 
196
- {#if geo}
170
+ {#if geo && renderMode.includes('colliders')}
197
171
  <T.LineSegments
198
172
  raycast={() => null}
199
173
  bvh={{ enabled: false }}
@@ -8,10 +8,12 @@ interface Props extends ThrelteProps<Group> {
8
8
  geometry?: WorldObject['geometry'];
9
9
  pose: WorldObject['pose'];
10
10
  metadata: WorldObject['metadata'];
11
+ color?: string;
12
+ model?: Group;
13
+ renderMode?: 'model' | 'colliders' | 'colliders+model';
11
14
  children?: Snippet<[{
12
15
  ref: Group;
13
16
  }]>;
14
- color?: string;
15
17
  }
16
18
  declare const Geometry: import("svelte").Component<Props, {}, "">;
17
19
  type Geometry = ReturnType<typeof Geometry>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viamrobotics/motion-tools",
3
- "version": "0.18.1",
3
+ "version": "0.18.2",
4
4
  "description": "Motion visualization with Viam",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",