@viamrobotics/motion-tools 1.19.1 → 1.22.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.
Files changed (53) hide show
  1. package/dist/FrameConfigUpdater.svelte.d.ts +0 -1
  2. package/dist/FrameConfigUpdater.svelte.js +6 -24
  3. package/dist/buf/draw/v1/metadata_pb.d.ts +39 -0
  4. package/dist/buf/draw/v1/metadata_pb.js +55 -0
  5. package/dist/buf/draw/v1/service_connect.d.ts +34 -1
  6. package/dist/buf/draw/v1/service_connect.js +34 -1
  7. package/dist/buf/draw/v1/service_pb.d.ts +136 -0
  8. package/dist/buf/draw/v1/service_pb.js +201 -0
  9. package/dist/components/Entities/Arrows/ArrowGroups.svelte +1 -0
  10. package/dist/components/Entities/Arrows/Arrows.svelte +1 -1
  11. package/dist/components/Entities/Points.svelte +23 -23
  12. package/dist/components/Entities/Pose.svelte +18 -13
  13. package/dist/components/Entities/hooks/useEntityEvents.svelte.js +18 -1
  14. package/dist/components/FileDrop/FileDrop.svelte +8 -1
  15. package/dist/components/FileDrop/useFileDrop.svelte.js +16 -2
  16. package/dist/components/PCD.svelte +9 -1
  17. package/dist/components/PCD.svelte.d.ts +2 -0
  18. package/dist/components/PointerMissBox.svelte +1 -1
  19. package/dist/components/Scene.svelte +2 -0
  20. package/dist/components/SceneProviders.svelte +4 -0
  21. package/dist/components/SelectedTransformControls.svelte +227 -0
  22. package/dist/components/SelectedTransformControls.svelte.d.ts +3 -0
  23. package/dist/components/Snapshot.svelte +12 -7
  24. package/dist/components/StaticGeometries.svelte +3 -56
  25. package/dist/components/overlay/AddRelationship.svelte +25 -3
  26. package/dist/components/overlay/Details.svelte +290 -229
  27. package/dist/components/overlay/dashboard/Button.svelte +4 -2
  28. package/dist/components/overlay/dashboard/Button.svelte.d.ts +1 -1
  29. package/dist/components/overlay/dashboard/Dashboard.svelte +43 -33
  30. package/dist/draw.d.ts +22 -9
  31. package/dist/draw.js +71 -41
  32. package/dist/ecs/relations.js +1 -1
  33. package/dist/ecs/traits.d.ts +17 -0
  34. package/dist/ecs/traits.js +9 -0
  35. package/dist/editing/FrameEditSession.d.ts +37 -0
  36. package/dist/editing/FrameEditSession.js +178 -0
  37. package/dist/hooks/useDrawService.svelte.d.ts +2 -0
  38. package/dist/hooks/useDrawService.svelte.js +139 -20
  39. package/dist/hooks/useFrameEditSession.svelte.d.ts +15 -0
  40. package/dist/hooks/useFrameEditSession.svelte.js +36 -0
  41. package/dist/hooks/useFrames.svelte.js +37 -2
  42. package/dist/hooks/usePartConfig.svelte.js +10 -0
  43. package/dist/hooks/useRelationships.svelte.d.ts +12 -0
  44. package/dist/hooks/useRelationships.svelte.js +78 -0
  45. package/dist/hooks/useSettings.svelte.d.ts +1 -2
  46. package/dist/hooks/useSettings.svelte.js +1 -2
  47. package/dist/hooks/useWorldState.svelte.js +10 -4
  48. package/dist/metadata.d.ts +7 -3
  49. package/dist/metadata.js +26 -2
  50. package/dist/snapshot.d.ts +6 -1
  51. package/dist/snapshot.js +10 -5
  52. package/dist/transform.js +13 -0
  53. package/package.json +7 -4
@@ -8,22 +8,15 @@
8
8
  <script lang="ts">
9
9
  import type { Entity } from 'koota'
10
10
 
11
- import { TransformControls } from '@threlte/extras'
12
11
  import { PressedKeys } from 'runed'
13
12
  import { SvelteSet } from 'svelte/reactivity'
14
- import { Quaternion, Vector3 } from 'three'
15
13
 
16
14
  import { traits, useWorld } from '../ecs'
17
- import { useTransformControls } from '../hooks/useControls.svelte'
18
15
  import { useSelectedEntity } from '../hooks/useSelection.svelte'
19
- import { useSettings } from '../hooks/useSettings.svelte'
20
- import { quaternionToPose, vector3ToPose } from '../transform'
21
16
 
22
17
  import Frame from './Entities/Frame.svelte'
23
18
 
24
19
  const world = useWorld()
25
- const settings = useSettings()
26
- const transformControls = useTransformControls()
27
20
  const selectedEntity = useSelectedEntity()
28
21
 
29
22
  const entities = new SvelteSet<Entity>()
@@ -31,11 +24,6 @@
31
24
  [...entities].find((entity) => entity === selectedEntity.current)
32
25
  )
33
26
 
34
- const mode = $derived(settings.current.transformMode)
35
-
36
- const quaternion = new Quaternion()
37
- const vector3 = new Vector3()
38
-
39
27
  const keys = new PressedKeys()
40
28
 
41
29
  keys.onKeys('=', () => {
@@ -43,7 +31,8 @@
43
31
  traits.Name(`custom geometry ${++index}`),
44
32
  traits.Pose,
45
33
  traits.Box({ x: 100, y: 100, z: 100 }),
46
- traits.Removable
34
+ traits.Removable,
35
+ traits.Transformable
47
36
  )
48
37
 
49
38
  entities.add(entity)
@@ -57,50 +46,8 @@
57
46
  selectedEntity.set()
58
47
  }
59
48
  })
60
-
61
- $effect(() => {
62
- settings.current.transforming = selectedCustomGeometry !== undefined
63
- })
64
49
  </script>
65
50
 
66
51
  {#each entities as entity (entity)}
67
- <Frame {entity}>
68
- {#snippet children({ ref })}
69
- {#if selectedEntity.current === entity}
70
- {#key mode}
71
- <TransformControls
72
- object={ref}
73
- {mode}
74
- translationSnap={settings.current.snapping ? 0.1 : undefined}
75
- rotationSnap={settings.current.snapping ? Math.PI / 24 : undefined}
76
- scaleSnap={settings.current.snapping ? 0.1 : undefined}
77
- onmouseDown={() => {
78
- transformControls.setActive(true)
79
- }}
80
- onmouseUp={() => {
81
- transformControls.setActive(false)
82
-
83
- const pose = entity.get(traits.Pose)
84
- const box = entity.get(traits.Box)
85
-
86
- if (pose && mode === 'translate') {
87
- vector3ToPose(ref.getWorldPosition(vector3), pose)
88
- entity.set(traits.Pose, pose)
89
- } else if (pose && mode === 'rotate') {
90
- quaternionToPose(ref.getWorldQuaternion(quaternion), pose)
91
- ref.quaternion.copy(quaternion)
92
- entity.set(traits.Pose, pose)
93
- } else if (box && mode === 'scale') {
94
- box.x *= ref.scale.x
95
- box.y *= ref.scale.y
96
- box.z *= ref.scale.z
97
- entity.set(traits.Box, box)
98
- ref.scale.setScalar(1)
99
- }
100
- }}
101
- />
102
- {/key}
103
- {/if}
104
- {/snippet}
105
- </Frame>
52
+ <Frame {entity} />
106
53
  {/each}
@@ -4,20 +4,30 @@
4
4
 
5
5
  import { relations, traits, useQuery, useTrait } from '../../ecs'
6
6
  import { SubEntityLinkType } from '../../ecs/relations'
7
+ import { useDrawService } from '../../hooks/useDrawService.svelte'
7
8
 
8
9
  interface Props {
9
10
  entity: Entity | undefined
10
11
  }
11
12
 
12
13
  const { entity }: Props = $props()
14
+ const drawService = useDrawService()
13
15
 
14
16
  const allEntities = useQuery(traits.Name)
15
17
  const name = useTrait(() => entity, traits.Name)
18
+ const drawServiceAPI = useTrait(() => entity, traits.DrawServiceAPI)
19
+ const isServiceManaged = $derived(!!drawServiceAPI.current)
20
+
16
21
  const entityNames = $derived.by(() => {
17
22
  const currentEntityName = name.current
18
23
  return allEntities.current
19
- .map((e: Entity) => e.get(traits.Name))
20
- .filter((n: string | undefined): n is string => n !== undefined && n !== currentEntityName)
24
+ .filter((e: Entity) => {
25
+ const entityName = e.get(traits.Name)
26
+ if (!entityName || entityName === currentEntityName) return false
27
+ if (isServiceManaged) return !!e.get(traits.DrawServiceAPI)
28
+ return true
29
+ })
30
+ .map((e: Entity) => e.get(traits.Name)!)
21
31
  .toSorted()
22
32
  })
23
33
 
@@ -43,7 +53,19 @@
43
53
  const selectedEntity = allEntities.current.find(
44
54
  (e: Entity) => e.get(traits.Name) === selectedRelationshipEntity
45
55
  )
46
- if (selectedEntity) {
56
+ if (!selectedEntity) return
57
+
58
+ if (isServiceManaged) {
59
+ const sourceUuid = entity.get(traits.UUID)
60
+ const targetUuid = selectedEntity.get(traits.UUID)
61
+ if (!sourceUuid || !targetUuid) return
62
+ void drawService.createRelationship(
63
+ sourceUuid,
64
+ targetUuid,
65
+ linkType ?? '',
66
+ relationshipFormula
67
+ )
68
+ } else {
47
69
  entity.add(
48
70
  relations.SubEntityLink(selectedEntity, {
49
71
  indexMapping: relationshipFormula,