@viamrobotics/motion-tools 1.32.0 → 1.33.1

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 (132) hide show
  1. package/dist/components/App.svelte +17 -11
  2. package/dist/components/App.svelte.d.ts +14 -7
  3. package/dist/components/Entities/Entities.svelte +18 -25
  4. package/dist/components/Entities/Entities.svelte.d.ts +2 -17
  5. package/dist/components/Entities/Label.svelte +79 -13
  6. package/dist/components/Entities/Label.svelte.d.ts +2 -1
  7. package/dist/components/Entities/Labels.svelte +36 -0
  8. package/dist/components/Entities/Labels.svelte.d.ts +3 -0
  9. package/dist/components/Entities/LineDots.svelte +8 -3
  10. package/dist/components/Entities/labelLayout/applyTeleports.d.ts +9 -0
  11. package/dist/components/Entities/labelLayout/applyTeleports.js +39 -0
  12. package/dist/components/Entities/labelLayout/buildNeighborhood.d.ts +8 -0
  13. package/dist/components/Entities/labelLayout/buildNeighborhood.js +26 -0
  14. package/dist/components/Entities/labelLayout/cameraHash.d.ts +8 -0
  15. package/dist/components/Entities/labelLayout/cameraHash.js +25 -0
  16. package/dist/components/Entities/labelLayout/cost.d.ts +44 -0
  17. package/dist/components/Entities/labelLayout/cost.js +126 -0
  18. package/dist/components/Entities/labelLayout/createLabelLayout.d.ts +27 -0
  19. package/dist/components/Entities/labelLayout/createLabelLayout.js +194 -0
  20. package/dist/components/Entities/labelLayout/geometry.d.ts +20 -0
  21. package/dist/components/Entities/labelLayout/geometry.js +151 -0
  22. package/dist/components/Entities/labelLayout/labelStore.svelte.d.ts +17 -0
  23. package/dist/components/Entities/labelLayout/labelStore.svelte.js +28 -0
  24. package/dist/components/Entities/labelLayout/measure.d.ts +13 -0
  25. package/dist/components/Entities/labelLayout/measure.js +42 -0
  26. package/dist/components/Entities/labelLayout/slots.d.ts +11 -0
  27. package/dist/components/Entities/labelLayout/slots.js +47 -0
  28. package/dist/components/Entities/labelLayout/solve.d.ts +11 -0
  29. package/dist/components/Entities/labelLayout/solve.js +93 -0
  30. package/dist/components/Entities/labelLayout/spatialHash.d.ts +15 -0
  31. package/dist/components/Entities/labelLayout/spatialHash.js +53 -0
  32. package/dist/components/Entities/labelLayout/types.d.ts +105 -0
  33. package/dist/components/Entities/labelLayout/types.js +19 -0
  34. package/dist/components/Entities/labelLayout/writeBack.d.ts +20 -0
  35. package/dist/components/Entities/labelLayout/writeBack.js +51 -0
  36. package/dist/components/Scene.svelte +42 -48
  37. package/dist/components/SceneProviders.svelte +0 -3
  38. package/dist/components/SelectedTransformControls.svelte +65 -47
  39. package/dist/components/overlay/Details.svelte +198 -224
  40. package/dist/components/overlay/Details.svelte.d.ts +1 -1
  41. package/dist/components/overlay/Popover.svelte +6 -4
  42. package/dist/components/overlay/Popover.svelte.d.ts +6 -2
  43. package/dist/components/overlay/dashboard/Button.svelte +7 -2
  44. package/dist/components/overlay/dashboard/Button.svelte.d.ts +2 -1
  45. package/dist/components/overlay/details/AxesHelperDetails.svelte +32 -0
  46. package/dist/components/overlay/details/AxesHelperDetails.svelte.d.ts +7 -0
  47. package/dist/components/overlay/details/ColorDetails.svelte +35 -0
  48. package/dist/components/overlay/details/ColorDetails.svelte.d.ts +7 -0
  49. package/dist/components/overlay/details/GeometryDetails.svelte +104 -0
  50. package/dist/components/overlay/details/GeometryDetails.svelte.d.ts +7 -0
  51. package/dist/components/overlay/details/LineDetails/LineDetails.svelte +196 -0
  52. package/dist/components/overlay/details/LineDetails/LineDetails.svelte.d.ts +7 -0
  53. package/dist/components/overlay/details/LineDetails/linePositions.d.ts +3 -0
  54. package/dist/components/overlay/details/LineDetails/linePositions.js +30 -0
  55. package/dist/components/overlay/details/OpacityDetails.svelte +44 -0
  56. package/dist/components/overlay/details/OpacityDetails.svelte.d.ts +7 -0
  57. package/dist/components/overlay/details/PoseDetails.svelte +189 -0
  58. package/dist/components/overlay/details/PoseDetails.svelte.d.ts +14 -0
  59. package/dist/components/overlay/settings/ConnectionSettings.svelte +42 -0
  60. package/dist/components/overlay/settings/ConnectionSettings.svelte.d.ts +18 -0
  61. package/dist/components/overlay/settings/DebugSettings.svelte +13 -0
  62. package/dist/components/{xr/frame-configure/Controllers.svelte.d.ts → overlay/settings/DebugSettings.svelte.d.ts} +3 -3
  63. package/dist/components/overlay/settings/PointcloudSettings.svelte +61 -0
  64. package/dist/components/overlay/settings/PointcloudSettings.svelte.d.ts +3 -0
  65. package/dist/components/overlay/settings/SceneSettings.svelte +110 -0
  66. package/dist/components/overlay/settings/SceneSettings.svelte.d.ts +18 -0
  67. package/dist/components/overlay/settings/Settings.svelte +27 -312
  68. package/dist/components/overlay/settings/Settings.svelte.d.ts +8 -1
  69. package/dist/components/overlay/settings/Tabs.svelte +5 -3
  70. package/dist/components/overlay/settings/Tabs.svelte.d.ts +3 -3
  71. package/dist/components/overlay/settings/VisionSettings.svelte +31 -0
  72. package/dist/components/overlay/settings/VisionSettings.svelte.d.ts +3 -0
  73. package/dist/components/overlay/settings/WeblabSettings.svelte +27 -0
  74. package/dist/components/overlay/settings/WeblabSettings.svelte.d.ts +18 -0
  75. package/dist/components/overlay/settings/WidgetSettings.svelte +49 -0
  76. package/dist/components/overlay/settings/WidgetSettings.svelte.d.ts +3 -0
  77. package/dist/components/overlay/widgets/FramePov.svelte +1 -12
  78. package/dist/ecs/traits.d.ts +1 -1
  79. package/dist/ecs/traits.js +1 -1
  80. package/dist/hooks/useWorldState.svelte.js +39 -50
  81. package/dist/{components/xr → plugins/XR}/ArmTeleop.svelte +3 -5
  82. package/dist/plugins/XR/DebugPanel.svelte +29 -0
  83. package/dist/plugins/XR/DebugPanel.svelte.d.ts +3 -0
  84. package/dist/plugins/XR/OriginMarker.svelte +341 -0
  85. package/dist/plugins/XR/PendingEditsPanel.svelte +60 -0
  86. package/dist/plugins/XR/PendingEditsPanel.svelte.d.ts +18 -0
  87. package/dist/plugins/XR/WristDisplay.svelte +60 -0
  88. package/dist/plugins/XR/WristDisplay.svelte.d.ts +19 -0
  89. package/dist/{components/xr → plugins/XR}/XR.svelte +69 -23
  90. package/dist/plugins/XR/XRPlugins.svelte +9 -0
  91. package/dist/plugins/XR/XRPlugins.svelte.d.ts +26 -0
  92. package/dist/plugins/XR/XRSettings.svelte +240 -0
  93. package/dist/plugins/XR/XRSettings.svelte.d.ts +3 -0
  94. package/dist/{components/xr → plugins/XR}/XRToast.svelte +6 -9
  95. package/dist/plugins/XR/debug.svelte.d.ts +7 -0
  96. package/dist/plugins/XR/debug.svelte.js +13 -0
  97. package/dist/plugins/XR/frame-configure/Controllers.svelte +413 -0
  98. package/dist/plugins/XR/teleop/Controllers.svelte.d.ts +3 -0
  99. package/dist/{components/xr → plugins/XR}/useAnchors.svelte.d.ts +4 -0
  100. package/dist/{components/xr → plugins/XR}/useAnchors.svelte.js +22 -0
  101. package/dist/plugins/XR/useOrigin.svelte.d.ts +24 -0
  102. package/dist/plugins/XR/useOrigin.svelte.js +50 -0
  103. package/dist/plugins/index.d.ts +2 -0
  104. package/dist/plugins/index.js +2 -0
  105. package/dist/three/OBBHelper.js +1 -0
  106. package/package.json +3 -1
  107. package/dist/components/xr/OriginMarker.svelte +0 -151
  108. package/dist/components/xr/XRControllerSettings.svelte +0 -242
  109. package/dist/components/xr/XRControllerSettings.svelte.d.ts +0 -3
  110. package/dist/components/xr/frame-configure/Controllers.svelte +0 -6
  111. package/dist/components/xr/useOrigin.svelte.d.ts +0 -9
  112. package/dist/components/xr/useOrigin.svelte.js +0 -27
  113. /package/dist/{components/xr → plugins/XR}/ArmTeleop.svelte.d.ts +0 -0
  114. /package/dist/{components/xr → plugins/XR}/BentPlaneGeometry.svelte +0 -0
  115. /package/dist/{components/xr → plugins/XR}/BentPlaneGeometry.svelte.d.ts +0 -0
  116. /package/dist/{components/xr → plugins/XR}/CameraFeed.svelte +0 -0
  117. /package/dist/{components/xr → plugins/XR}/CameraFeed.svelte.d.ts +0 -0
  118. /package/dist/{components/xr → plugins/XR}/JointLimitsWidget.svelte +0 -0
  119. /package/dist/{components/xr → plugins/XR}/JointLimitsWidget.svelte.d.ts +0 -0
  120. /package/dist/{components/xr → plugins/XR}/OriginMarker.svelte.d.ts +0 -0
  121. /package/dist/{components/xr → plugins/XR}/PointDistance.svelte +0 -0
  122. /package/dist/{components/xr → plugins/XR}/PointDistance.svelte.d.ts +0 -0
  123. /package/dist/{components/xr → plugins/XR}/XR.svelte.d.ts +0 -0
  124. /package/dist/{components/xr → plugins/XR}/XRConfigPanel.svelte +0 -0
  125. /package/dist/{components/xr → plugins/XR}/XRConfigPanel.svelte.d.ts +0 -0
  126. /package/dist/{components/xr → plugins/XR}/XRToast.svelte.d.ts +0 -0
  127. /package/dist/{components/xr/teleop → plugins/XR/frame-configure}/Controllers.svelte.d.ts +0 -0
  128. /package/dist/{components/xr → plugins/XR}/math.d.ts +0 -0
  129. /package/dist/{components/xr → plugins/XR}/math.js +0 -0
  130. /package/dist/{components/xr → plugins/XR}/teleop/Controllers.svelte +0 -0
  131. /package/dist/{components/xr → plugins/XR}/toasts.svelte.d.ts +0 -0
  132. /package/dist/{components/xr → plugins/XR}/toasts.svelte.js +0 -0
@@ -1,7 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { useThrelte } from '@threlte/core'
3
3
  import { TransformControls } from '@threlte/extras'
4
- import { Matrix4, Quaternion, Vector3 } from 'three'
4
+ import { Matrix4 } from 'three'
5
5
 
6
6
  import type { FrameEditSession } from '../editing/FrameEditSession'
7
7
 
@@ -11,14 +11,7 @@
11
11
  import { useFrameEditSession } from '../hooks/useFrameEditSession.svelte'
12
12
  import { usePartConfig } from '../hooks/usePartConfig.svelte'
13
13
  import { useSettings } from '../hooks/useSettings.svelte'
14
- import {
15
- createPose,
16
- matrixToPose,
17
- poseToMatrix,
18
- quaternionToPose,
19
- solveEditedMatrix,
20
- vector3ToPose,
21
- } from '../transform'
14
+ import { createPose, matrixToPose, poseToMatrix, solveEditedMatrix } from '../transform'
22
15
 
23
16
  const { scene } = useThrelte()
24
17
  const settings = useSettings()
@@ -64,9 +57,10 @@
64
57
  })
65
58
  const isSphereScale = $derived(activeMode === 'scale' && sphere.current !== undefined)
66
59
  const isCapsuleScale = $derived(activeMode === 'scale' && capsule.current !== undefined)
60
+ const transforming = $derived(
61
+ ref && entity && activeMode && !isFragmentComponentWithVariables && !invisible.current
62
+ )
67
63
 
68
- const quaternion = new Quaternion()
69
- const vector3 = new Vector3()
70
64
  const refPose = createPose()
71
65
  const tempRefMatrix = new Matrix4()
72
66
  const tempEditedMatrix = new Matrix4()
@@ -119,28 +113,14 @@
119
113
  }
120
114
 
121
115
  const onChange = () => {
122
- if (!ref || !entity || !activeMode) {
123
- return
124
- }
116
+ if (!ref || !entity || !activeMode) return
125
117
 
126
118
  const isFrameEntity = entity.has(traits.FramesAPI)
127
-
128
119
  if (activeMode === 'translate' || activeMode === 'rotate') {
129
120
  if (isFrameEntity) {
130
121
  stageFrameTransform()
131
122
  } else {
132
- const matrix = entity.get(traits.Matrix)
133
- if (matrix) {
134
- matrixToPose(matrix, tempPose)
135
- if (activeMode === 'translate') {
136
- vector3ToPose(ref.getWorldPosition(vector3), tempPose)
137
- } else {
138
- quaternionToPose(ref.getWorldQuaternion(quaternion), tempPose)
139
- ref.quaternion.copy(quaternion)
140
- }
141
- poseToMatrix(tempPose, matrix)
142
- entity.changed(traits.Matrix)
143
- }
123
+ stageLocalTransform()
144
124
  }
145
125
  } else {
146
126
  // scale → bake the gizmo's scale factor into the geometry trait,
@@ -194,40 +174,46 @@
194
174
  }
195
175
 
196
176
  /**
197
- * Frame.svelte renders frame entities by writing the entity's WorldMatrix
198
- * into group.matrix and decomposing it into position/quaternion. The gizmo's
199
- * Three.js parent has identity world, so `ref.position` / `ref.quaternion`
200
- * are world-space values. Matrix and EditedMatrix store local-to-parent
201
- * transforms, so we left-multiply by the parent's inverted WorldMatrix
202
- * before staging — otherwise WorldMatrix recomposition (parent × edited)
203
- * re-applies the parent's rotation/translation and the frame ends up at
204
- * parent × where-the-user-pulled-it.
177
+ * Build the entity's parent-relative drag target from the gizmo's world-space
178
+ * `ref` transform into `out`.
205
179
  *
206
- * With a kinematic offset (LiveMatrix + Matrix both present), the local
207
- * target M(local) feeds solveEditedMatrix to back out the EditedMatrix
208
- * that satisfies live × baseline⁻¹ × edited = local.
180
+ * Entity renderers mount at the scene root with `matrixAutoUpdate = false`
181
+ * and recompose `group.matrix` from the `WorldMatrix` trait, so
182
+ * `ref.position` / `ref.quaternion` are world-space. Matrix-shaped traits
183
+ * store local-to-parent, so we left-multiply by the parent's inverted
184
+ * WorldMatrix. Otherwise recomposition (parentWorld × local) re-applies the
185
+ * parent transform and the entity lands at parentWorld × where-it-was-dragged.
209
186
  */
210
- const stageFrameTransform = () => {
187
+ const computeLocalDragTarget = (out: Matrix4) => {
211
188
  if (!ref || !entity) return
212
189
 
213
- tempRefMatrix.makeRotationFromQuaternion(ref.quaternion)
214
- tempRefMatrix.setPosition(ref.position)
190
+ out.makeRotationFromQuaternion(ref.quaternion)
191
+ out.setPosition(ref.position)
215
192
 
216
- const parentEntity = entity.targetFor(relations.ChildOf)
217
- const parentWorld = parentEntity?.get(traits.WorldMatrix)
193
+ const parentWorld = entity.targetFor(relations.ChildOf)?.get(traits.WorldMatrix)
218
194
  if (parentWorld) {
219
195
  tempParentInverse.copy(parentWorld).invert()
220
- tempRefMatrix.premultiply(tempParentInverse)
196
+ out.premultiply(tempParentInverse)
221
197
  }
198
+ }
199
+
200
+ /**
201
+ * Stages a translate/rotate drag for a frame system entity into the edit
202
+ * session. With a kinematic offset (LiveMatrix + Matrix both present), the
203
+ * parent-relative target feeds solveEditedMatrix to back out the EditedMatrix
204
+ * satisfying live × baseline⁻¹ × edited = local. Without one, Frame.svelte's
205
+ * blend short-circuits to EditedMatrix, so we stage the target pose directly.
206
+ */
207
+ const stageFrameTransform = () => {
208
+ if (!ref || !entity) return
222
209
 
210
+ computeLocalDragTarget(tempRefMatrix)
223
211
  matrixToPose(tempRefMatrix, refPose)
224
212
 
225
213
  const live = liveMatrix.current
226
214
  const config = configMatrix.current
227
215
 
228
216
  if (!live || !config) {
229
- // No live matrix available — Frame.svelte's blend short-circuits to
230
- // editedMatrix, so the parent-relative target is what we stage.
231
217
  if (activeMode === 'translate') {
232
218
  session?.stagePose(entity, {
233
219
  x: refPose.x,
@@ -249,9 +235,41 @@
249
235
  matrixToPose(tempEditedMatrix, tempPose)
250
236
  session?.stagePose(entity, { ...tempPose })
251
237
  }
238
+
239
+ /**
240
+ * Stages a translate/rotate drag for a non-frame-system entity (e.g. a gizmo)
241
+ * by writing the dragged component into the Matrix trait. Gizmos carry no
242
+ * LiveMatrix, so there's no live-pose blend to invert — the parent-relative
243
+ * target is the new local transform.
244
+ */
245
+ const stageLocalTransform = () => {
246
+ if (!ref || !entity) return
247
+
248
+ const matrix = entity.get(traits.Matrix)
249
+ if (!matrix) return
250
+
251
+ computeLocalDragTarget(tempRefMatrix)
252
+
253
+ // update only the dragged component
254
+ matrixToPose(matrix, tempPose)
255
+ matrixToPose(tempRefMatrix, refPose)
256
+ if (activeMode === 'translate') {
257
+ tempPose.x = refPose.x
258
+ tempPose.y = refPose.y
259
+ tempPose.z = refPose.z
260
+ } else {
261
+ tempPose.oX = refPose.oX
262
+ tempPose.oY = refPose.oY
263
+ tempPose.oZ = refPose.oZ
264
+ tempPose.theta = refPose.theta
265
+ }
266
+
267
+ poseToMatrix(tempPose, matrix)
268
+ entity.changed(traits.Matrix)
269
+ }
252
270
  </script>
253
271
 
254
- {#if ref && entity && activeMode && !isFragmentComponentWithVariables && !invisible.current}
272
+ {#if transforming}
255
273
  {#key entity}
256
274
  <TransformControls
257
275
  object={ref}