@fps-games/editor 0.2.1-beta.1 → 0.2.1-beta.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.
Files changed (245) hide show
  1. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
  2. package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
  3. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
  4. package/dist/build-info.json +43 -43
  5. package/dist/internal/material-preview.d.ts +22 -0
  6. package/dist/internal/material-preview.d.ts.map +1 -0
  7. package/dist/internal/material-preview.js +186 -0
  8. package/dist/internal/material-preview.js.map +1 -0
  9. package/dist/internal/project-model-preview.d.ts +4 -0
  10. package/dist/internal/project-model-preview.d.ts.map +1 -0
  11. package/dist/internal/project-model-preview.js +359 -0
  12. package/dist/internal/project-model-preview.js.map +1 -0
  13. package/dist/local-editor-agent-context.d.ts +12 -1
  14. package/dist/local-editor-agent-context.d.ts.map +1 -1
  15. package/dist/local-editor-agent-context.js +47 -0
  16. package/dist/local-editor-agent-context.js.map +1 -1
  17. package/dist/local-editor-harness.d.ts +15 -2
  18. package/dist/local-editor-harness.d.ts.map +1 -1
  19. package/dist/local-editor-harness.js +310 -21
  20. package/dist/local-editor-harness.js.map +1 -1
  21. package/dist/local-editor-tools.d.ts +1 -0
  22. package/dist/local-editor-tools.d.ts.map +1 -1
  23. package/dist/local-editor-tools.js +3 -0
  24. package/dist/local-editor-tools.js.map +1 -1
  25. package/dist/playable-local-editor-host.d.ts +4 -0
  26. package/dist/playable-local-editor-host.d.ts.map +1 -1
  27. package/dist/playable-local-editor-host.js +27 -0
  28. package/dist/playable-local-editor-host.js.map +1 -1
  29. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  30. package/dist/playable-product-scene-capabilities.js +9 -3
  31. package/dist/playable-product-scene-capabilities.js.map +1 -1
  32. package/dist/playable-standard-project.d.ts.map +1 -1
  33. package/dist/playable-standard-project.js +5 -2
  34. package/dist/playable-standard-project.js.map +1 -1
  35. package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
  36. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
  37. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  38. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
  39. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  40. package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
  41. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  42. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
  43. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
  44. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  45. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
  46. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  47. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
  48. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  49. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
  50. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  51. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
  52. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  53. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
  54. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  55. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  56. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  57. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
  58. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  59. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
  60. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  61. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
  62. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
  63. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
  64. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
  65. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
  66. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
  67. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
  68. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
  69. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
  70. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
  71. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
  72. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
  73. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
  74. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
  75. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
  76. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
  77. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
  78. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
  79. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
  80. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
  81. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
  82. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
  83. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
  84. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
  85. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
  86. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
  87. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
  88. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
  89. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
  90. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
  91. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  92. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
  93. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
  94. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
  95. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
  96. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  97. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  98. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
  99. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  100. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
  101. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  102. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
  103. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  104. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
  105. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  106. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
  107. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  108. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
  109. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  110. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  111. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
  112. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  113. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
  114. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  115. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
  116. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  117. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
  118. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  119. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
  123. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  124. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
  125. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
  126. package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
  127. package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
  128. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
  129. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  130. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
  131. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  132. package/node_modules/@fps-games/editor-core/package.json +6 -6
  133. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  134. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
  135. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
  137. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  138. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
  139. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
  141. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  142. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
  143. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
  144. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  145. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
  146. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
  147. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  148. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
  149. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
  150. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  151. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
  152. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  153. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
  154. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  155. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
  156. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
  157. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
  158. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  159. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
  160. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
  161. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
  162. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
  163. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
  164. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
  165. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
  166. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
  167. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
  168. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
  169. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
  170. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
  171. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
  172. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
  173. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
  174. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
  175. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  196. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
  197. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  198. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  199. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  200. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  201. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
  202. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
  203. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
  204. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  205. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  206. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  207. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  208. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  209. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  210. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  211. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  212. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  213. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  214. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  215. package/node_modules/@fps-games/plugin-assets/package.json +5 -5
  216. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  217. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  218. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  219. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  220. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  221. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  222. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  223. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  224. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  225. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  226. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  227. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  228. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  229. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  230. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  231. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  232. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  233. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  234. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  235. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  236. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  237. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  238. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  239. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  240. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  241. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  242. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  243. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  244. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  245. package/package.json +22 -22
@@ -1 +1 @@
1
- {"version":3,"file":"marker-overlay.js","sourceRoot":"","sources":["../src/marker-overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isEditorTransformTrsSnapshot,\n type EditorTransformTrsSnapshot,\n type EditorTransformPivot,\n type EditorTransformSnapshot,\n type EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport type {\n SpatialMarkerBoxGeometry,\n SpatialMarkerGeometry,\n SpatialMarkerNode,\n} from '@fps-games/editor-protocol';\nimport type {\n BabylonEditorProjection,\n BabylonEditorProjectionBounds,\n} from './projection';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeScene,\n} from './types';\n\nexport interface BabylonEditorMarkerOverlayOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n}\n\nexport interface BabylonEditorMarkerOverlayEntry {\n markerRowId: string;\n marker: SpatialMarkerNode;\n markerTypeLabel?: string;\n selected?: boolean;\n active?: boolean;\n}\n\nexport interface BabylonEditorMarkerOverlayRelationEntry {\n id: string;\n type: string;\n label?: string;\n from: EditorTransformVec3;\n to: EditorTransformVec3;\n directed?: boolean;\n active?: boolean;\n color?: MarkerOverlayColor;\n}\n\nexport interface BabylonEditorMarkerOverlaySyncInput {\n markers: readonly BabylonEditorMarkerOverlayEntry[];\n relations?: readonly BabylonEditorMarkerOverlayRelationEntry[];\n selectedMarkerRowIds?: readonly string[];\n activeMarkerRowId?: string | null;\n}\n\nexport interface BabylonEditorMarkerOverlayController {\n sync(input: BabylonEditorMarkerOverlaySyncInput): boolean;\n getAttachableRoot(markerRowId: string): any | null;\n readMarkerTransform(markerRowId: string): EditorTransformSnapshot | null;\n readMarkerTransforms(markerRowIds: readonly string[]): Record<string, EditorTransformSnapshot>;\n setMarkerTransformPreview(markerRowId: string, transform: EditorTransformSnapshot): boolean;\n setMarkerTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): string[];\n getSelectionPivot(markerRowIds: readonly string[]): EditorTransformPivot | null;\n getSelectionBounds(markerRowIds: readonly string[]): BabylonEditorProjectionBounds | null;\n resolvePickSelectionNodeId(target: unknown): string | null;\n pickMarkerRowIdAt(clientX: number, clientY: number): string | null;\n dispose(): void;\n}\n\ninterface ActiveMarkerOverlay {\n markerRowId: string;\n markerId: string;\n presentation: MarkerOverlayPresentation;\n root: any;\n lines: any | null;\n frameRoot: any | null;\n frameLines: any | null;\n anchorMesh: any | null;\n forwardShaft: any | null;\n forwardHead: any | null;\n frameMaterial: any | null;\n pickMesh: any | null;\n pickMaterial: any | null;\n labelRoot: any | null;\n labelPlane: any | null;\n labelMaterial: any | null;\n labelTexture: any | null;\n labelText: string;\n selected: boolean;\n active: boolean;\n color: MarkerOverlayColor;\n}\n\ntype MarkerOverlayPresentation = 'region' | 'point' | 'anchor' | 'object';\n\nexport interface MarkerOverlayColor {\n r: number;\n g: number;\n b: number;\n}\n\ninterface ActiveMarkerRelationOverlay {\n id: string;\n root: any;\n dashMeshes: any[];\n dashGeometryKey: string;\n arrowHead: any | null;\n material: any | null;\n color: MarkerOverlayColor;\n directed: boolean;\n active: boolean;\n}\n\nconst UNIT_BOX_LINES: Array<[EditorTransformVec3, EditorTransformVec3]> = [\n [{ x: -0.5, y: -0.5, z: -0.5 }, { x: 0.5, y: -0.5, z: -0.5 }],\n [{ x: 0.5, y: -0.5, z: -0.5 }, { x: 0.5, y: 0.5, z: -0.5 }],\n [{ x: 0.5, y: 0.5, z: -0.5 }, { x: -0.5, y: 0.5, z: -0.5 }],\n [{ x: -0.5, y: 0.5, z: -0.5 }, { x: -0.5, y: -0.5, z: -0.5 }],\n [{ x: -0.5, y: -0.5, z: 0.5 }, { x: 0.5, y: -0.5, z: 0.5 }],\n [{ x: 0.5, y: -0.5, z: 0.5 }, { x: 0.5, y: 0.5, z: 0.5 }],\n [{ x: 0.5, y: 0.5, z: 0.5 }, { x: -0.5, y: 0.5, z: 0.5 }],\n [{ x: -0.5, y: 0.5, z: 0.5 }, { x: -0.5, y: -0.5, z: 0.5 }],\n [{ x: -0.5, y: -0.5, z: -0.5 }, { x: -0.5, y: -0.5, z: 0.5 }],\n [{ x: 0.5, y: -0.5, z: -0.5 }, { x: 0.5, y: -0.5, z: 0.5 }],\n [{ x: 0.5, y: 0.5, z: -0.5 }, { x: 0.5, y: 0.5, z: 0.5 }],\n [{ x: -0.5, y: 0.5, z: -0.5 }, { x: -0.5, y: 0.5, z: 0.5 }],\n];\n\nconst MARKER_FRAME_LINES: Array<[EditorTransformVec3, EditorTransformVec3]> = [\n [{ x: -0.08, y: 0, z: 0 }, { x: 0.08, y: 0, z: 0 }],\n [{ x: 0, y: -0.08, z: 0 }, { x: 0, y: 0.08, z: 0 }],\n [{ x: 0, y: 0, z: -0.08 }, { x: 0, y: 0, z: 0.08 }],\n [{ x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0.72 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: -0.08, y: 0, z: 0.58 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: 0.08, y: 0, z: 0.58 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: 0, y: 0.08, z: 0.58 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: 0, y: -0.08, z: 0.58 }],\n];\n\nconst RELATION_DASH_MAX_COUNT = 64;\nconst RELATION_DASH_MIN_SEGMENT_LENGTH = 0.04;\nconst RELATION_ACTIVE_PULSE_PERIOD_MS = 1100;\nconst MARKER_LABEL_WORLD_SCALE = 1.55;\n\nexport function createBabylonEditorMarkerOverlayController(\n options: BabylonEditorMarkerOverlayOptions,\n): BabylonEditorMarkerOverlayController {\n const overlays = new Map<string, ActiveMarkerOverlay>();\n const relationOverlays = new Map<string, ActiveMarkerRelationOverlay>();\n let relationAnimationObserver: unknown = null;\n let relationAnimationTimeMs = 0;\n let disposed = false;\n\n function disposeOverlay(markerRowId: string): boolean {\n const overlay = overlays.get(markerRowId);\n if (!overlay) return false;\n disposeActiveMarkerOverlay(overlay);\n overlays.delete(markerRowId);\n return true;\n }\n\n function disposeRelationOverlay(relationId: string): boolean {\n const overlay = relationOverlays.get(relationId);\n if (!overlay) return false;\n disposeActiveMarkerRelationOverlay(overlay);\n relationOverlays.delete(relationId);\n syncRelationAnimationObserver();\n return true;\n }\n\n function sync(input: BabylonEditorMarkerOverlaySyncInput): boolean {\n if (disposed) return false;\n let changed = false;\n const nextRowIds = new Set<string>();\n const selectedMarkerRowIds = new Set(input.selectedMarkerRowIds ?? []);\n for (const entry of input.markers) {\n if (!entry.markerRowId) continue;\n const presentation = resolveMarkerOverlayPresentation(entry.marker);\n nextRowIds.add(entry.markerRowId);\n let overlay = overlays.get(entry.markerRowId) ?? null;\n if (!overlay || overlay.markerId !== entry.marker.id || overlay.presentation !== presentation) {\n if (overlay) disposeOverlay(entry.markerRowId);\n overlay = createActiveMarkerOverlay(options, entry.markerRowId, entry.marker.id, presentation);\n if (!overlay) continue;\n overlays.set(entry.markerRowId, overlay);\n changed = true;\n }\n const selected = entry.selected === true || selectedMarkerRowIds.has(entry.markerRowId);\n const active = entry.active === true || input.activeMarkerRowId === entry.markerRowId;\n const color = readMarkerOverlayColor(entry.marker);\n const labelText = createMarkerOverlayLabelText(entry.marker, entry.markerTypeLabel);\n if (\n overlay.selected !== selected\n || overlay.active !== active\n || !markerOverlayColorsEqual(overlay.color, color)\n || overlay.labelText !== labelText\n ) changed = true;\n overlay.selected = selected;\n overlay.active = active;\n overlay.color = color;\n overlay.labelText = labelText;\n applyMarkerGeometryToOverlay(options, overlay, entry.marker);\n applyMarkerVisualState(options, overlay);\n applyMarkerLabelVisualState(options, overlay);\n changed = true;\n }\n for (const markerRowId of [...overlays.keys()]) {\n if (!nextRowIds.has(markerRowId)) changed = disposeOverlay(markerRowId) || changed;\n }\n changed = syncRelationOverlays(input.relations ?? []) || changed;\n return changed;\n }\n\n function getAttachableRoot(markerRowId: string): any | null {\n if (disposed) return null;\n return overlays.get(markerRowId)?.root ?? null;\n }\n\n function readMarkerTransform(markerRowId: string): EditorTransformTrsSnapshot | null {\n if (disposed) return null;\n return readRootTransform(overlays.get(markerRowId)?.root ?? null);\n }\n\n function readMarkerTransforms(markerRowIds: readonly string[]): Record<string, EditorTransformTrsSnapshot> {\n const transforms: Record<string, EditorTransformTrsSnapshot> = {};\n for (const markerRowId of markerRowIds) {\n const transform = readMarkerTransform(markerRowId);\n if (transform) transforms[markerRowId] = transform;\n }\n return transforms;\n }\n\n function setMarkerTransformPreview(markerRowId: string, transform: EditorTransformSnapshot): boolean {\n if (disposed) return false;\n const overlay = overlays.get(markerRowId);\n if (!overlay) return false;\n if (!isEditorTransformTrsSnapshot(transform)) return false;\n applyTransformToOverlay(options, overlay, transform);\n return true;\n }\n\n function setMarkerTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): string[] {\n const applied: string[] = [];\n for (const [markerRowId, transform] of Object.entries(transforms)) {\n if (setMarkerTransformPreview(markerRowId, transform)) applied.push(markerRowId);\n }\n return applied;\n }\n\n function getSelectionPivot(markerRowIds: readonly string[]): EditorTransformPivot | null {\n const transforms = Object.values(readMarkerTransforms(markerRowIds));\n if (transforms.length === 0) return null;\n return {\n mode: 'selection-center',\n position: averagePositions(transforms),\n };\n }\n\n function getSelectionBounds(markerRowIds: readonly string[]): BabylonEditorProjectionBounds | null {\n const transforms = Object.values(readMarkerTransforms(markerRowIds));\n if (transforms.length === 0) return null;\n return combineTransformBounds(transforms);\n }\n\n function resolvePickSelectionNodeId(target: unknown): string | null {\n if (disposed) return null;\n let current: any = target;\n while (current) {\n const markerRowId = current.metadata?.editorMarkerRowId;\n if (typeof markerRowId === 'string' && overlays.has(markerRowId)) return markerRowId;\n current = current.parent ?? null;\n }\n return null;\n }\n\n function pickMarkerRowIdAt(clientX: number, clientY: number): string | null {\n if (disposed) return null;\n const scene = options.scene as any;\n const canvas = scene.getEngine?.().getRenderingCanvas?.() ?? null;\n if (!canvas || typeof scene.pick !== 'function') return null;\n const rect = typeof canvas.getBoundingClientRect === 'function'\n ? canvas.getBoundingClientRect()\n : { left: 0, top: 0 };\n const pickResult = scene.pick(\n clientX - (rect.left ?? 0),\n clientY - (rect.top ?? 0),\n (mesh: unknown) => resolvePickSelectionNodeId(mesh) != null,\n );\n return resolvePickSelectionNodeId(pickResult?.pickedMesh ?? null);\n }\n\n return {\n sync,\n getAttachableRoot,\n readMarkerTransform,\n readMarkerTransforms,\n setMarkerTransformPreview,\n setMarkerTransformsPreview,\n getSelectionPivot,\n getSelectionBounds,\n resolvePickSelectionNodeId,\n pickMarkerRowIdAt,\n dispose() {\n if (disposed) return;\n for (const markerRowId of [...overlays.keys()]) disposeOverlay(markerRowId);\n for (const relationId of [...relationOverlays.keys()]) disposeRelationOverlay(relationId);\n removeRelationAnimationObserver();\n disposed = true;\n },\n };\n\n function syncRelationOverlays(\n relations: readonly BabylonEditorMarkerOverlayRelationEntry[],\n ): boolean {\n let changed = false;\n const nextRelationIds = new Set<string>();\n for (const entry of relations) {\n if (!entry.id) continue;\n nextRelationIds.add(entry.id);\n let overlay = relationOverlays.get(entry.id) ?? null;\n if (!overlay) {\n overlay = createActiveMarkerRelationOverlay(options, entry);\n if (!overlay) continue;\n relationOverlays.set(entry.id, overlay);\n changed = true;\n }\n const color = entry.color ?? createMarkerRelationOverlayColor(entry.type);\n const directed = entry.directed !== false;\n const active = entry.active === true;\n if (\n !markerOverlayColorsEqual(overlay.color, color)\n || overlay.directed !== directed\n || overlay.active !== active\n ) changed = true;\n overlay.color = color;\n overlay.directed = directed;\n overlay.active = active;\n applyMarkerRelationOverlayState(options, overlay, entry);\n changed = true;\n }\n for (const relationId of [...relationOverlays.keys()]) {\n if (!nextRelationIds.has(relationId)) changed = disposeRelationOverlay(relationId) || changed;\n }\n syncRelationAnimationObserver();\n return changed;\n }\n\n function syncRelationAnimationObserver(): void {\n if (disposed) return;\n const shouldAnimate = [...relationOverlays.values()].some(overlay => overlay.active);\n const observable = (options.scene as any).onBeforeRenderObservable;\n if (shouldAnimate && !relationAnimationObserver && typeof observable?.add === 'function') {\n relationAnimationObserver = observable.add(() => updateActiveRelationAnimations());\n updateActiveRelationAnimations(0);\n return;\n }\n if (!shouldAnimate) removeRelationAnimationObserver();\n }\n\n function removeRelationAnimationObserver(): void {\n if (!relationAnimationObserver) return;\n try {\n (options.scene as any).onBeforeRenderObservable?.remove?.(relationAnimationObserver);\n } catch {}\n relationAnimationObserver = null;\n }\n\n function updateActiveRelationAnimations(deltaOverrideMs?: number): void {\n const rawDelta = deltaOverrideMs ?? Number((options.scene as any).getEngine?.()?.getDeltaTime?.() ?? 16.67);\n const deltaMs = Number.isFinite(rawDelta) ? Math.max(0, Math.min(80, rawDelta)) : 16.67;\n relationAnimationTimeMs = (relationAnimationTimeMs + deltaMs) % RELATION_ACTIVE_PULSE_PERIOD_MS;\n for (const overlay of relationOverlays.values()) {\n if (overlay.active) applyMarkerRelationPulseFrame(options, overlay, relationAnimationTimeMs);\n }\n }\n}\n\nexport function createBabylonMarkerOverlayProjectionAdapter(\n projection: BabylonEditorProjection,\n markerOverlay: BabylonEditorMarkerOverlayController,\n): BabylonEditorProjection {\n return {\n ...projection,\n getAttachableRoot(nodeId) {\n return markerOverlay.getAttachableRoot(nodeId) ?? projection.getAttachableRoot(nodeId);\n },\n readNodeTransform(nodeId) {\n return markerOverlay.readMarkerTransform(nodeId) ?? projection.readNodeTransform(nodeId);\n },\n readNodeTransforms(nodeIds) {\n return {\n ...projection.readNodeTransforms(nodeIds),\n ...markerOverlay.readMarkerTransforms(nodeIds),\n };\n },\n setNodeTransformPreview(nodeId, transform) {\n if (markerOverlay.setMarkerTransformPreview(nodeId, transform)) return;\n projection.setNodeTransformPreview(nodeId, transform);\n },\n setNodeTransformsPreview(transforms) {\n const markerIds = new Set(markerOverlay.setMarkerTransformsPreview(transforms));\n const projectionTransforms: Record<string, EditorTransformSnapshot> = {};\n for (const [nodeId, transform] of Object.entries(transforms)) {\n if (!markerIds.has(nodeId)) projectionTransforms[nodeId] = transform;\n }\n projection.setNodeTransformsPreview(projectionTransforms);\n },\n syncNodeMetadata(node) {\n projection.syncNodeMetadata(node);\n },\n getSelectionPivot(nodeIds) {\n const markerPivot = markerOverlay.getSelectionPivot(nodeIds);\n if (!markerPivot) return projection.getSelectionPivot(nodeIds);\n const transforms = {\n ...projection.readNodeTransforms(nodeIds),\n ...markerOverlay.readMarkerTransforms(nodeIds),\n };\n const values = Object.values(transforms).filter(isEditorTransformTrsSnapshot);\n return values.length > 0\n ? { mode: 'selection-center', position: averagePositions(values) }\n : markerPivot;\n },\n getSelectionBounds(nodeIds) {\n const markerBounds = markerOverlay.getSelectionBounds(nodeIds);\n const projectionBounds = projection.getSelectionBounds(nodeIds);\n return combineBounds(projectionBounds, markerBounds);\n },\n resolvePickSelectionNodeId(target) {\n return markerOverlay.resolvePickSelectionNodeId(target) ?? projection.resolvePickSelectionNodeId(target);\n },\n pickNodeIdAt(clientX, clientY) {\n return markerOverlay.pickMarkerRowIdAt(clientX, clientY) ?? projection.pickNodeIdAt(clientX, clientY);\n },\n };\n}\n\nfunction createActiveMarkerOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n markerRowId: string,\n markerId: string,\n presentation: MarkerOverlayPresentation,\n): ActiveMarkerOverlay | null {\n const TransformNode = (options.babylon as any).TransformNode;\n if (!TransformNode) return null;\n const root = new TransformNode(`editor.markerGraph.${presentation}.${markerId}`, options.scene);\n root.metadata = {\n ...(root.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerPresentation: presentation,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n root.isPickable = false;\n const lines = presentation === 'region' || presentation === 'object'\n ? createBoxLineHelper(options, root, markerId, markerRowId)\n : null;\n const frameHelper = createMarkerFrameHelper(options, markerId, markerRowId);\n const { pickMesh, pickMaterial } = presentation === 'region' || presentation === 'object'\n ? createBoxPickHelper(options, root, markerId, markerRowId)\n : createPointPickHelper(options, root, markerId, markerRowId, presentation);\n const { labelRoot, labelPlane, labelMaterial, labelTexture } = createMarkerLabelHelper(options, markerId, markerRowId);\n return {\n markerRowId,\n markerId,\n presentation,\n root,\n lines,\n ...frameHelper,\n pickMesh,\n pickMaterial,\n labelRoot,\n labelPlane,\n labelMaterial,\n labelTexture,\n labelText: '',\n selected: false,\n active: false,\n color: createMarkerOverlayColor(0.1, 0.85, 1),\n };\n}\n\nfunction disposeActiveMarkerOverlay(overlay: ActiveMarkerOverlay): void {\n try { overlay.lines?.dispose?.(); } catch {}\n try { overlay.anchorMesh?.dispose?.(); } catch {}\n try { overlay.forwardShaft?.dispose?.(); } catch {}\n try { overlay.forwardHead?.dispose?.(); } catch {}\n try { overlay.frameLines?.dispose?.(); } catch {}\n try { overlay.frameMaterial?.dispose?.(); } catch {}\n try { overlay.frameRoot?.dispose?.(); } catch {}\n try { overlay.pickMesh?.dispose?.(); } catch {}\n try { overlay.pickMaterial?.dispose?.(); } catch {}\n try { overlay.labelPlane?.dispose?.(); } catch {}\n try { overlay.labelTexture?.dispose?.(); } catch {}\n try { overlay.labelMaterial?.dispose?.(); } catch {}\n try { overlay.labelRoot?.dispose?.(); } catch {}\n try { overlay.root?.dispose?.(); } catch {}\n}\n\nfunction createActiveMarkerRelationOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n): ActiveMarkerRelationOverlay | null {\n const TransformNode = (options.babylon as any).TransformNode;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n if (!TransformNode || !MeshBuilder?.CreateCylinder) return null;\n const root = new TransformNode(`editor.markerGraph.relation.${entry.id}`, options.scene);\n root.metadata = createMarkerRelationMetadata(root.metadata, entry);\n root.isPickable = false;\n const material = StandardMaterial\n ? new StandardMaterial(`editor.markerGraph.relation.${entry.id}.material`, options.scene)\n : null;\n if (material) {\n material.backFaceCulling = false;\n material.disableLighting = true;\n material.disableDepthWrite = true;\n material.alpha = 0.96;\n material.zOffset = -3;\n }\n if (Color3 && material) {\n const color = entry.color ?? createMarkerRelationOverlayColor(entry.type);\n material.diffuseColor = new Color3(color.r, color.g, color.b);\n material.emissiveColor = new Color3(color.r, color.g, color.b);\n }\n const arrowHead = MeshBuilder.CreateCylinder\n ? MeshBuilder.CreateCylinder(\n `editor.markerGraph.relation.${entry.id}.arrow`,\n { height: 1, diameterTop: 0, diameterBottom: 1, tessellation: 24 },\n options.scene,\n )\n : null;\n if (arrowHead) {\n arrowHead.parent = root;\n arrowHead.isPickable = false;\n arrowHead.metadata = createMarkerRelationMetadata(arrowHead.metadata, entry, {\n editorMarkerRelationArrow: true,\n });\n arrowHead.renderingGroupId = 2;\n arrowHead.material = material;\n }\n return {\n id: entry.id,\n root,\n dashMeshes: [],\n dashGeometryKey: '',\n arrowHead,\n material,\n color: entry.color ?? createMarkerRelationOverlayColor(entry.type),\n directed: entry.directed !== false,\n active: entry.active === true,\n };\n}\n\nfunction disposeActiveMarkerRelationOverlay(overlay: ActiveMarkerRelationOverlay): void {\n disposeMarkerRelationDashMeshes(overlay);\n try { overlay.arrowHead?.dispose?.(); } catch {}\n try { overlay.material?.dispose?.(); } catch {}\n try { overlay.root?.dispose?.(); } catch {}\n}\n\nfunction createMarkerRelationMetadata(\n metadata: Record<string, unknown> | null | undefined,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n extras?: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n ...(metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerRelationOverlay: true,\n editorMarkerRelationId: entry.id,\n editorMarkerRelationType: entry.type,\n ...(extras ?? {}),\n };\n}\n\nfunction createMarkerFrameHelper(\n options: BabylonEditorMarkerOverlayOptions,\n markerId: string,\n markerRowId: string,\n): Pick<ActiveMarkerOverlay, 'frameRoot' | 'frameLines' | 'anchorMesh' | 'forwardShaft' | 'forwardHead' | 'frameMaterial'> {\n const TransformNode = (options.babylon as any).TransformNode;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n const Vector3 = (options.babylon as any).Vector3;\n if (!TransformNode || !Vector3) {\n return {\n frameRoot: null,\n frameLines: null,\n anchorMesh: null,\n forwardShaft: null,\n forwardHead: null,\n frameMaterial: null,\n };\n }\n\n const frameRoot = new TransformNode(`editor.markerGraph.box.${markerId}.frameRoot`, options.scene);\n frameRoot.metadata = createMarkerFrameMetadata(frameRoot.metadata, markerId, markerRowId);\n frameRoot.isPickable = false;\n\n let frameMaterial: any | null = null;\n if (StandardMaterial) {\n frameMaterial = new StandardMaterial(`editor.markerGraph.box.${markerId}.frameMaterial`, options.scene);\n if (Color3) {\n frameMaterial.diffuseColor = new Color3(1, 0.9, 0.08);\n frameMaterial.emissiveColor = new Color3(1, 0.72, 0.05);\n }\n frameMaterial.alpha = 0.98;\n frameMaterial.backFaceCulling = false;\n frameMaterial.disableLighting = true;\n frameMaterial.disableDepthWrite = true;\n frameMaterial.zOffset = -2;\n }\n\n const anchorMesh = MeshBuilder?.CreateSphere\n ? MeshBuilder.CreateSphere(`editor.markerGraph.box.${markerId}.anchor`, { diameter: 1, segments: 16 }, options.scene)\n : null;\n if (anchorMesh) configureMarkerFrameMesh(anchorMesh, frameRoot, frameMaterial, markerId, markerRowId);\n\n const forwardShaft = MeshBuilder?.CreateCylinder\n ? MeshBuilder.CreateCylinder(\n `editor.markerGraph.box.${markerId}.forwardShaft`,\n { height: 1, diameter: 1, tessellation: 16 },\n options.scene,\n )\n : null;\n if (forwardShaft) {\n configureMarkerFrameMesh(forwardShaft, frameRoot, frameMaterial, markerId, markerRowId);\n forwardShaft.rotation = new Vector3(Math.PI / 2, 0, 0);\n }\n\n const forwardHead = MeshBuilder?.CreateCylinder\n ? MeshBuilder.CreateCylinder(\n `editor.markerGraph.box.${markerId}.forwardHead`,\n { height: 1, diameterTop: 0, diameterBottom: 1, tessellation: 24 },\n options.scene,\n )\n : null;\n if (forwardHead) {\n configureMarkerFrameMesh(forwardHead, frameRoot, frameMaterial, markerId, markerRowId);\n forwardHead.rotation = new Vector3(Math.PI / 2, 0, 0);\n }\n\n const frameLines = !anchorMesh && !forwardShaft && !forwardHead && MeshBuilder?.CreateLineSystem\n ? MeshBuilder.CreateLineSystem(\n `editor.markerGraph.box.${markerId}.frame`,\n {\n lines: MARKER_FRAME_LINES.map(line => line.map(point => new Vector3(point.x, point.y, point.z))),\n updatable: false,\n },\n options.scene,\n )\n : null;\n if (frameLines) {\n frameLines.parent = frameRoot;\n frameLines.isPickable = true;\n frameLines.metadata = createMarkerFrameMetadata(frameLines.metadata, markerId, markerRowId);\n frameLines.renderingGroupId = 2;\n if (Color3) frameLines.color = new Color3(1, 0.9, 0.08);\n }\n\n return {\n frameRoot,\n frameLines,\n anchorMesh,\n forwardShaft,\n forwardHead,\n frameMaterial,\n };\n}\n\nfunction configureMarkerFrameMesh(\n mesh: any,\n frameRoot: any,\n material: any | null,\n markerId: string,\n markerRowId: string,\n): void {\n mesh.parent = frameRoot;\n mesh.isPickable = true;\n mesh.material = material;\n mesh.metadata = createMarkerFrameMetadata(mesh.metadata, markerId, markerRowId);\n mesh.renderingGroupId = 2;\n}\n\nfunction createMarkerFrameMetadata(\n metadata: Record<string, unknown> | null | undefined,\n markerId: string,\n markerRowId: string,\n): Record<string, unknown> {\n return {\n ...(metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerFrame: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n}\n\nfunction createBoxLineHelper(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n markerId: string,\n markerRowId: string,\n): any | null {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const Color3 = (options.babylon as any).Color3;\n const Vector3 = (options.babylon as any).Vector3;\n if (!MeshBuilder?.CreateLineSystem || !Vector3) return null;\n const lines = MeshBuilder.CreateLineSystem(\n `editor.markerGraph.box.${markerId}.lines`,\n {\n lines: UNIT_BOX_LINES.map(line => line.map(point => new Vector3(point.x, point.y, point.z))),\n updatable: false,\n },\n options.scene,\n );\n lines.parent = root;\n lines.isPickable = true;\n lines.metadata = {\n ...(lines.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n if (Color3) lines.color = new Color3(0.1, 0.85, 1);\n return lines;\n}\n\nfunction createBoxPickHelper(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n markerId: string,\n markerRowId: string,\n): { pickMesh: any | null; pickMaterial: any | null } {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n if (!MeshBuilder?.CreateBox) return { pickMesh: null, pickMaterial: null };\n const pickMesh = MeshBuilder.CreateBox(\n `editor.markerGraph.box.${markerId}.pick`,\n { size: 1 },\n options.scene,\n );\n pickMesh.parent = root;\n pickMesh.isPickable = true;\n pickMesh.metadata = {\n ...(pickMesh.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerOverlayPickTarget: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n let pickMaterial: any | null = null;\n if (StandardMaterial) {\n pickMaterial = new StandardMaterial(`editor.markerGraph.box.${markerId}.material`, options.scene);\n if (Color3) {\n pickMaterial.diffuseColor = new Color3(0.1, 0.85, 1);\n pickMaterial.emissiveColor = new Color3(0.02, 0.18, 0.22);\n }\n pickMaterial.alpha = 0.065;\n pickMaterial.backFaceCulling = false;\n pickMesh.material = pickMaterial;\n } else {\n pickMesh.visibility = 0.065;\n }\n return { pickMesh, pickMaterial };\n}\n\nfunction createPointPickHelper(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n markerId: string,\n markerRowId: string,\n presentation: MarkerOverlayPresentation,\n): { pickMesh: any | null; pickMaterial: any | null } {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n if (!MeshBuilder?.CreateSphere) return { pickMesh: null, pickMaterial: null };\n const diameter = presentation === 'anchor' ? 0.82 : presentation === 'object' ? 0.72 : 0.62;\n const pickMesh = MeshBuilder.CreateSphere(\n `editor.markerGraph.${presentation}.${markerId}.pick`,\n { diameter, segments: 24 },\n options.scene,\n );\n pickMesh.parent = root;\n pickMesh.isPickable = true;\n pickMesh.metadata = {\n ...(pickMesh.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerOverlayPickTarget: true,\n editorMarkerPresentation: presentation,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n let pickMaterial: any | null = null;\n if (StandardMaterial) {\n pickMaterial = new StandardMaterial(`editor.markerGraph.${presentation}.${markerId}.material`, options.scene);\n if (Color3) {\n pickMaterial.diffuseColor = new Color3(0.1, 0.85, 1);\n pickMaterial.emissiveColor = new Color3(0.04, 0.35, 0.42);\n }\n pickMaterial.alpha = 0.38;\n pickMaterial.backFaceCulling = false;\n pickMaterial.disableLighting = true;\n pickMesh.material = pickMaterial;\n } else {\n pickMesh.visibility = 0.38;\n }\n return { pickMesh, pickMaterial };\n}\n\nfunction createMarkerLabelHelper(\n options: BabylonEditorMarkerOverlayOptions,\n markerId: string,\n markerRowId: string,\n): { labelRoot: any | null; labelPlane: any | null; labelMaterial: any | null; labelTexture: any | null } {\n const TransformNode = (options.babylon as any).TransformNode;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const DynamicTexture = (options.babylon as any).DynamicTexture;\n const Color3 = (options.babylon as any).Color3;\n const Mesh = (options.babylon as any).Mesh;\n if (!TransformNode) return { labelRoot: null, labelPlane: null, labelMaterial: null, labelTexture: null };\n const labelRoot = new TransformNode(`editor.markerGraph.box.${markerId}.labelRoot`, options.scene);\n labelRoot.metadata = {\n ...(labelRoot.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerLabel: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n labelRoot.isPickable = false;\n if (!MeshBuilder?.CreatePlane) return { labelRoot, labelPlane: null, labelMaterial: null, labelTexture: null };\n const labelPlane = MeshBuilder.CreatePlane(\n `editor.markerGraph.box.${markerId}.label`,\n { size: 1 },\n options.scene,\n );\n labelPlane.parent = labelRoot;\n labelPlane.isPickable = false;\n labelPlane.billboardMode = Mesh?.BILLBOARDMODE_ALL ?? 7;\n labelPlane.metadata = {\n ...(labelPlane.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerLabel: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n let labelTexture: any | null = null;\n let labelMaterial: any | null = null;\n if (DynamicTexture) {\n labelTexture = new DynamicTexture(\n `editor.markerGraph.box.${markerId}.labelTexture`,\n { width: 512, height: 192 },\n options.scene,\n false,\n );\n labelTexture.hasAlpha = true;\n }\n if (StandardMaterial) {\n labelMaterial = new StandardMaterial(`editor.markerGraph.box.${markerId}.labelMaterial`, options.scene);\n if (Color3) {\n labelMaterial.emissiveColor = new Color3(1, 1, 1);\n labelMaterial.diffuseColor = new Color3(1, 1, 1);\n }\n labelMaterial.backFaceCulling = false;\n labelMaterial.disableLighting = true;\n labelMaterial.alpha = 0.94;\n if (labelTexture) {\n labelMaterial.diffuseTexture = labelTexture;\n labelMaterial.emissiveTexture = labelTexture;\n labelMaterial.useAlphaFromDiffuseTexture = true;\n }\n labelPlane.material = labelMaterial;\n }\n return { labelRoot, labelPlane, labelMaterial, labelTexture };\n}\n\nfunction applyMarkerVisualState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n): void {\n const Color3 = (options.babylon as any).Color3;\n const selected = overlay.selected || overlay.active;\n if (Color3 && overlay.lines) {\n const lineColor = selected ? brightenMarkerOverlayColor(overlay.color, 0.28) : overlay.color;\n overlay.lines.color = new Color3(lineColor.r, lineColor.g, lineColor.b);\n }\n if (Color3 && overlay.frameLines) {\n const frameColor = selected ? createMarkerOverlayColor(1, 0.96, 0.22) : createMarkerOverlayColor(1, 0.78, 0.08);\n overlay.frameLines.color = new Color3(frameColor.r, frameColor.g, frameColor.b);\n }\n if (Color3 && overlay.frameMaterial) {\n const frameColor = selected ? createMarkerOverlayColor(1, 0.96, 0.22) : createMarkerOverlayColor(1, 0.78, 0.08);\n overlay.frameMaterial.diffuseColor = new Color3(frameColor.r, frameColor.g, frameColor.b);\n overlay.frameMaterial.emissiveColor = new Color3(frameColor.r, Math.max(0.45, frameColor.g * 0.82), 0.04);\n overlay.frameMaterial.alpha = selected ? 1 : 0.96;\n }\n const alpha = overlay.presentation === 'region'\n ? (overlay.active ? 0.18 : overlay.selected ? 0.13 : 0.065)\n : overlay.presentation === 'object'\n ? (overlay.active ? 0.16 : overlay.selected ? 0.1 : 0.055)\n : (overlay.active ? 0.84 : overlay.selected ? 0.68 : 0.46);\n if (overlay.pickMaterial) {\n overlay.pickMaterial.alpha = alpha;\n if (Color3) {\n const fillColor = selected ? brightenMarkerOverlayColor(overlay.color, 0.18) : overlay.color;\n overlay.pickMaterial.diffuseColor = new Color3(fillColor.r, fillColor.g, fillColor.b);\n overlay.pickMaterial.emissiveColor = new Color3(\n Math.min(0.28, fillColor.r * 0.18),\n Math.min(0.28, fillColor.g * 0.18),\n Math.min(0.28, fillColor.b * 0.18),\n );\n }\n } else if (overlay.pickMesh) {\n overlay.pickMesh.visibility = alpha;\n }\n}\n\nfunction applyMarkerRelationOverlayState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n): void {\n const Color3 = (options.babylon as any).Color3;\n const active = entry.active === true;\n const visualColor = active ? createMarkerOverlayColor(1, 0.86, 0.1) : overlay.color;\n if (Color3 && overlay.material) {\n overlay.material.diffuseColor = new Color3(visualColor.r, visualColor.g, visualColor.b);\n overlay.material.emissiveColor = new Color3(visualColor.r, visualColor.g, visualColor.b);\n overlay.material.alpha = active ? 1 : 0.96;\n overlay.material.zOffset = active ? -5 : -3;\n }\n const directed = entry.directed !== false;\n updateMarkerRelationDashes(options, overlay, entry, directed, active);\n updateMarkerRelationArrow(options, overlay, entry.from, entry.to, directed, active);\n if (active) applyMarkerRelationPulseFrame(options, overlay, 0);\n else resetMarkerRelationPulseState(options, overlay);\n}\n\nfunction applyMarkerRelationPulseFrame(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n timeMs: number,\n): void {\n const Color3 = (options.babylon as any).Color3;\n const Vector3 = (options.babylon as any).Vector3;\n const phase = (timeMs % RELATION_ACTIVE_PULSE_PERIOD_MS) / RELATION_ACTIVE_PULSE_PERIOD_MS;\n const pulse = 0.5 + 0.5 * Math.sin(phase * Math.PI * 2);\n const color = brightenMarkerOverlayColor(createMarkerOverlayColor(1, 0.86, 0.08), 0.38 * pulse);\n if (Color3 && overlay.material) {\n overlay.material.diffuseColor = new Color3(color.r, color.g, color.b);\n overlay.material.emissiveColor = new Color3(color.r, color.g, color.b);\n overlay.material.alpha = 0.72 + 0.28 * pulse;\n overlay.material.zOffset = -6;\n }\n if (Vector3) {\n const pulseScale = 1.0 + 0.55 * pulse;\n for (const dash of overlay.dashMeshes) {\n dash.scaling = new Vector3(pulseScale, 1, pulseScale);\n }\n }\n}\n\nfunction resetMarkerRelationPulseState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!Vector3) return;\n for (const dash of overlay.dashMeshes) {\n dash.scaling = new Vector3(1, 1, 1);\n }\n}\n\nfunction updateMarkerRelationDashes(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n directed: boolean,\n active: boolean,\n): void {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const Vector3 = (options.babylon as any).Vector3;\n if (!MeshBuilder?.CreateCylinder || !Vector3) return;\n const nextDashGeometryKey = createMarkerRelationDashGeometryKey(entry.from, entry.to, directed, active);\n if (overlay.dashGeometryKey === nextDashGeometryKey) return;\n overlay.dashGeometryKey = nextDashGeometryKey;\n disposeMarkerRelationDashMeshes(overlay);\n\n const direction = subtractVec3(entry.to, entry.from);\n const length = vec3Length(direction);\n if (length < 0.000001) return;\n\n const unit = scaleVec3(direction, 1 / length);\n const arrowClearance = directed ? Math.max(0.28, Math.min(0.56, length * 0.14)) : 0;\n const usableLength = Math.max(0, length - arrowClearance);\n if (usableLength < RELATION_DASH_MIN_SEGMENT_LENGTH) return;\n\n const dashLength = Math.max(0.3, Math.min(0.74, length * 0.12));\n const gapLength = Math.max(0.18, Math.min(0.44, dashLength * 0.62));\n const baseDashDiameter = Math.max(0.0375, Math.min(0.065, length * 0.009));\n const dashDiameter = active ? baseDashDiameter * 2.6 : baseDashDiameter;\n let cursor = 0;\n let dashIndex = 0;\n while (cursor < usableLength && dashIndex < RELATION_DASH_MAX_COUNT) {\n const dashEnd = Math.min(cursor + dashLength, usableLength);\n const segmentLength = dashEnd - cursor;\n if (segmentLength >= RELATION_DASH_MIN_SEGMENT_LENGTH) {\n const segmentCenterDistance = cursor + segmentLength / 2;\n const center = addVec3(entry.from, scaleVec3(unit, segmentCenterDistance));\n const dash = MeshBuilder.CreateCylinder(\n `editor.markerGraph.relation.${entry.id}.dash.${dashIndex}`,\n {\n height: segmentLength,\n diameter: dashDiameter,\n tessellation: 12,\n },\n options.scene,\n );\n if (dash) {\n dash.parent = overlay.root;\n dash.isPickable = false;\n dash.metadata = createMarkerRelationMetadata(dash.metadata, entry, {\n editorMarkerRelationDash: true,\n editorMarkerRelationDashIndex: dashIndex,\n });\n dash.renderingGroupId = 2;\n dash.material = overlay.material;\n dash.position = new Vector3(center.x, center.y, center.z);\n dash.rotationQuaternion = null;\n dash.rotation = createCylinderRotationTowardDirection(options, unit);\n overlay.dashMeshes.push(dash);\n }\n }\n cursor += dashLength + gapLength;\n dashIndex += 1;\n }\n}\n\nfunction disposeMarkerRelationDashMeshes(overlay: ActiveMarkerRelationOverlay): void {\n for (const dash of overlay.dashMeshes) {\n try { dash?.dispose?.(); } catch {}\n }\n overlay.dashMeshes = [];\n}\n\nfunction createMarkerRelationDashGeometryKey(\n from: EditorTransformVec3,\n to: EditorTransformVec3,\n directed: boolean,\n active: boolean,\n): string {\n return [\n from.x,\n from.y,\n from.z,\n to.x,\n to.y,\n to.z,\n ].map(value => value.toFixed(4)).join(':') + `:${directed ? 1 : 0}:${active ? 1 : 0}`;\n}\n\nfunction updateMarkerRelationArrow(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n from: EditorTransformVec3,\n to: EditorTransformVec3,\n directed: boolean,\n active: boolean,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!overlay.arrowHead || !Vector3) return;\n overlay.arrowHead.setEnabled?.(directed);\n overlay.arrowHead.isVisible = directed;\n if (!directed) return;\n const direction = subtractVec3(to, from);\n const length = vec3Length(direction);\n if (length < 0.000001) {\n overlay.arrowHead.isVisible = false;\n return;\n }\n const unit = scaleVec3(direction, 1 / length);\n const arrowLength = Math.max(0.18, Math.min(0.42, length * 0.12));\n const baseArrowDiameter = Math.max(0.12, Math.min(0.28, arrowLength * 0.72));\n const arrowDiameter = active ? baseArrowDiameter * 1.35 : baseArrowDiameter;\n const center = addVec3(to, scaleVec3(unit, -arrowLength / 2));\n overlay.arrowHead.position = new Vector3(center.x, center.y, center.z);\n overlay.arrowHead.scaling = new Vector3(arrowDiameter, arrowLength, arrowDiameter);\n overlay.arrowHead.rotationQuaternion = null;\n overlay.arrowHead.rotation = createCylinderRotationTowardDirection(options, unit);\n}\n\nfunction createCylinderRotationTowardDirection(\n options: BabylonEditorMarkerOverlayOptions,\n direction: EditorTransformVec3,\n): any {\n const Vector3 = (options.babylon as any).Vector3;\n const yaw = Math.atan2(direction.x, direction.z);\n const horizontal = Math.sqrt(direction.x * direction.x + direction.z * direction.z);\n const pitch = Math.atan2(direction.y, horizontal);\n return Vector3 ? new Vector3(Math.PI / 2 - pitch, yaw, 0) : { x: Math.PI / 2 - pitch, y: yaw, z: 0 };\n}\n\nfunction applyMarkerLabelTransform(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n transform: EditorTransformSnapshot,\n): void {\n if (!isEditorTransformTrsSnapshot(transform)) return;\n const Vector3 = (options.babylon as any).Vector3;\n if (!overlay.labelRoot || !Vector3) return;\n overlay.labelRoot.position = new Vector3(\n transform.position.x,\n transform.position.y + Math.abs(transform.scale.y) / 2 + 0.78,\n transform.position.z,\n );\n overlay.labelRoot.rotationQuaternion = null;\n overlay.labelRoot.rotation = new Vector3(0, 0, 0);\n overlay.labelRoot.scaling = new Vector3(1, 1, 1);\n}\n\nfunction applyMarkerLabelVisualState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n): void {\n if (!overlay.labelPlane) return;\n const Vector3 = (options.babylon as any).Vector3;\n const lines = normalizeMarkerOverlayLabelLines(overlay.labelText);\n const maxChars = Math.max(...lines.map(line => line.length), 8);\n const width = Math.max(0.85, Math.min(1.85, 0.045 * maxChars + 0.35)) * MARKER_LABEL_WORLD_SCALE;\n const height = Math.max(0.3, Math.min(0.54, 0.11 * lines.length + 0.16)) * MARKER_LABEL_WORLD_SCALE;\n if (Vector3) overlay.labelPlane.scaling = new Vector3(width, height, 1);\n updateMarkerLabelTexture(options, overlay, lines);\n if (overlay.labelMaterial) overlay.labelMaterial.alpha = overlay.active || overlay.selected ? 0.98 : 0.86;\n}\n\nfunction updateMarkerLabelTexture(\n _options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n lines: readonly string[],\n): void {\n const texture = overlay.labelTexture;\n if (!texture) return;\n const context = texture.getContext?.();\n if (!context) {\n texture.drawText?.(\n lines.join(' / '),\n 18,\n 76,\n 'bold 42px sans-serif',\n 'rgba(255, 255, 255, 0.94)',\n 'rgba(12, 18, 24, 0.86)',\n true,\n );\n return;\n }\n const width = 512;\n const height = 192;\n context.save?.();\n context.clearRect?.(0, 0, width, height);\n context.fillStyle = 'rgba(12, 18, 24, 0.78)';\n context.fillRect?.(0, 0, width, height);\n context.fillStyle = markerOverlayColorToCss(overlay.color);\n context.fillRect?.(0, 0, 10, height);\n context.fillStyle = 'rgba(255, 255, 255, 0.94)';\n context.font = '700 42px system-ui, -apple-system, BlinkMacSystemFont, sans-serif';\n context.textBaseline = 'top';\n context.fillText?.(truncateMarkerLabelLine(lines[0] ?? '', 26), 28, 22);\n context.font = '600 30px system-ui, -apple-system, BlinkMacSystemFont, sans-serif';\n context.fillStyle = 'rgba(225, 235, 245, 0.86)';\n if (lines[1]) context.fillText?.(truncateMarkerLabelLine(lines[1], 34), 28, 78);\n if (lines[2]) context.fillText?.(truncateMarkerLabelLine(lines[2], 40), 28, 120);\n context.restore?.();\n texture.update?.();\n}\n\nfunction createMarkerOverlayLabelText(marker: SpatialMarkerNode, markerTypeLabel?: string): string {\n const tags = marker.tags?.filter(tag => !!tag.trim()).join(', ') ?? '';\n return [\n marker.label,\n `Type: ${markerTypeLabel || marker.markerType}`,\n tags ? `Tags: ${tags}` : '',\n ].filter(Boolean).join('\\n');\n}\n\nfunction normalizeMarkerOverlayLabelLines(text: string): string[] {\n const lines = text.split('\\n').map(line => line.trim()).filter(Boolean);\n return lines.length > 0 ? lines.slice(0, 3) : ['Marker'];\n}\n\nfunction truncateMarkerLabelLine(line: string, maxLength: number): string {\n return line.length > maxLength ? `${line.slice(0, Math.max(0, maxLength - 1))}...` : line;\n}\n\nfunction markerOverlayColorToCss(color: MarkerOverlayColor): string {\n const r = Math.round(Math.min(1, Math.max(0, color.r)) * 255);\n const g = Math.round(Math.min(1, Math.max(0, color.g)) * 255);\n const b = Math.round(Math.min(1, Math.max(0, color.b)) * 255);\n return `rgb(${r}, ${g}, ${b})`;\n}\n\nfunction readMarkerOverlayColor(marker: SpatialMarkerNode): MarkerOverlayColor {\n const raw = marker.metadata?.color;\n if (!raw || typeof raw !== 'object') return createMarkerOverlayColor(0.1, 0.85, 1);\n const candidate = raw as { r?: unknown; g?: unknown; b?: unknown };\n const r = readMarkerOverlayColorChannel(candidate.r);\n const g = readMarkerOverlayColorChannel(candidate.g);\n const b = readMarkerOverlayColorChannel(candidate.b);\n return r == null || g == null || b == null\n ? createMarkerOverlayColor(0.1, 0.85, 1)\n : createMarkerOverlayColor(r, g, b);\n}\n\nfunction readMarkerOverlayColorChannel(value: unknown): number | null {\n const channel = Number(value);\n if (!Number.isFinite(channel)) return null;\n return Math.min(1, Math.max(0, channel));\n}\n\nfunction createMarkerOverlayColor(r: number, g: number, b: number): MarkerOverlayColor {\n return { r, g, b };\n}\n\nfunction createMarkerRelationOverlayColor(type: string): MarkerOverlayColor {\n let hash = 2166136261;\n for (const char of type) {\n hash ^= char.charCodeAt(0);\n hash = Math.imul(hash, 16777619);\n }\n const hue = Math.abs(hash % 360);\n return hslToMarkerOverlayColor(hue / 360, 0.72, 0.58);\n}\n\nfunction hslToMarkerOverlayColor(h: number, s: number, l: number): MarkerOverlayColor {\n const hueToRgb = (p: number, q: number, tInput: number): number => {\n let t = tInput;\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n return {\n r: hueToRgb(p, q, h + 1 / 3),\n g: hueToRgb(p, q, h),\n b: hueToRgb(p, q, h - 1 / 3),\n };\n}\n\nfunction brightenMarkerOverlayColor(color: MarkerOverlayColor, amount: number): MarkerOverlayColor {\n return {\n r: color.r + (1 - color.r) * amount,\n g: color.g + (1 - color.g) * amount,\n b: color.b + (1 - color.b) * amount,\n };\n}\n\nfunction markerOverlayColorsEqual(left: MarkerOverlayColor, right: MarkerOverlayColor): boolean {\n return Math.abs(left.r - right.r) < 0.000001\n && Math.abs(left.g - right.g) < 0.000001\n && Math.abs(left.b - right.b) < 0.000001;\n}\n\nfunction resolveMarkerOverlayPresentation(marker: SpatialMarkerNode): MarkerOverlayPresentation {\n const kind = marker.kind?.trim().toLowerCase();\n if (kind === 'region') return 'region';\n if (kind === 'anchor') return 'anchor';\n if (isObjectBoundMarkerPresentation(kind, marker.geometry.kind)) return 'object';\n if (marker.geometry.kind === 'box' && !kind) return 'region';\n return 'point';\n}\n\nfunction isObjectBoundMarkerPresentation(\n kind: string | undefined,\n geometryKind: SpatialMarkerGeometry['kind'],\n): boolean {\n return kind === 'object'\n || kind === 'object-bound'\n || kind === 'object-bounds'\n || geometryKind === 'object-bounds';\n}\n\nfunction applyMarkerGeometryToOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n marker: SpatialMarkerNode,\n): void {\n applyTransformToOverlay(options, overlay, createMarkerOverlayTransform(marker, overlay.presentation));\n}\n\nfunction applyBoxGeometryToOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n geometry: SpatialMarkerBoxGeometry,\n): void {\n applyTransformToOverlay(options, overlay, {\n position: geometry.center,\n rotation: geometry.rotation ?? { x: 0, y: 0, z: 0 },\n scale: geometry.size,\n });\n}\n\nfunction createMarkerOverlayTransform(\n marker: SpatialMarkerNode,\n presentation: MarkerOverlayPresentation,\n): EditorTransformTrsSnapshot {\n const origin = getMarkerOverlayOrigin(marker.geometry, marker, presentation);\n return {\n position: origin,\n rotation: getMarkerOverlayRotation(marker),\n scale: getMarkerOverlayScale(marker, presentation),\n };\n}\n\nfunction getMarkerOverlayOrigin(\n geometry: SpatialMarkerGeometry,\n marker: SpatialMarkerNode,\n presentation: MarkerOverlayPresentation,\n): EditorTransformVec3 {\n if (presentation === 'object') {\n if (marker.spatial?.bounds?.center) return { ...marker.spatial.bounds.center };\n if (marker.spatial?.origin) return { ...marker.spatial.origin };\n }\n switch (geometry.kind) {\n case 'box':\n return { ...geometry.center };\n case 'point':\n if (geometry.coordinateSpace === 'world') return { ...geometry.position };\n return marker.semanticFrame?.origin\n ? { ...marker.semanticFrame.origin }\n : marker.spatial?.origin\n ? { ...marker.spatial.origin }\n : { ...geometry.position };\n case 'object-bounds':\n if (marker.spatial?.bounds?.center) return { ...marker.spatial.bounds.center };\n if (marker.spatial?.origin) return { ...marker.spatial.origin };\n if (marker.semanticFrame?.origin) return { ...marker.semanticFrame.origin };\n return { x: 0, y: 0, z: 0 };\n case 'polyhedron':\n return marker.semanticFrame?.origin\n ? { ...marker.semanticFrame.origin }\n : geometry.vertices.length > 0\n ? averageVec3(geometry.vertices)\n : { x: 0, y: 0, z: 0 };\n }\n}\n\nfunction getMarkerOverlayRotation(marker: SpatialMarkerNode): EditorTransformVec3 {\n if (marker.geometry.kind === 'box') return marker.geometry.rotation ? { ...marker.geometry.rotation } : { x: 0, y: 0, z: 0 };\n const forward = marker.semanticFrame?.forward ?? marker.spatial?.localFrame?.forward;\n return forward ? createEulerFromForward(forward) : { x: 0, y: 0, z: 0 };\n}\n\nfunction getMarkerOverlayScale(\n marker: SpatialMarkerNode,\n presentation: MarkerOverlayPresentation,\n): EditorTransformVec3 {\n if (presentation === 'region' && marker.geometry.kind === 'box') return { ...marker.geometry.size };\n if (presentation === 'object' && marker.spatial?.bounds?.size) return { ...marker.spatial.bounds.size };\n if (presentation === 'anchor') return { x: 0.66, y: 0.66, z: 0.66 };\n if (presentation === 'object') return { x: 0.58, y: 0.58, z: 0.58 };\n return { x: 0.5, y: 0.5, z: 0.5 };\n}\n\nfunction averageVec3(points: readonly EditorTransformVec3[]): EditorTransformVec3 {\n return {\n x: points.reduce((sum, point) => sum + point.x, 0) / points.length,\n y: points.reduce((sum, point) => sum + point.y, 0) / points.length,\n z: points.reduce((sum, point) => sum + point.z, 0) / points.length,\n };\n}\n\nfunction createEulerFromForward(forward: EditorTransformVec3): EditorTransformVec3 {\n const length = vec3Length(forward);\n if (length < 0.000001) return { x: 0, y: 0, z: 0 };\n const unit = scaleVec3(forward, 1 / length);\n const yaw = Math.atan2(unit.x, unit.z);\n const horizontal = Math.sqrt(unit.x * unit.x + unit.z * unit.z);\n const pitch = -Math.atan2(unit.y, horizontal);\n return { x: pitch, y: yaw, z: 0 };\n}\n\nfunction applyTransformToOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n transform: EditorTransformTrsSnapshot,\n): void {\n applyTransformToRoot(options, overlay.root, transform);\n applyMarkerFocusFrameToRoot(overlay.root, transform);\n applyMarkerFrameTransform(options, overlay, transform);\n applyMarkerLabelTransform(options, overlay, transform);\n}\n\nfunction applyMarkerFocusFrameToRoot(root: any, transform: EditorTransformTrsSnapshot): void {\n if (!root) return;\n const bounds = createTransformBounds(transform);\n const radius = Math.max(1, Math.hypot(bounds.size.x, bounds.size.y, bounds.size.z) / 2);\n root.metadata = {\n ...(root.metadata ?? {}),\n editorFocusFrame: {\n center: { ...bounds.center },\n radius,\n },\n };\n}\n\nfunction applyMarkerFrameTransform(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n transform: EditorTransformTrsSnapshot,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!Vector3 || !overlay.frameRoot) return;\n overlay.frameRoot.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n overlay.frameRoot.rotationQuaternion = null;\n overlay.frameRoot.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n overlay.frameRoot.scaling = new Vector3(1, 1, 1);\n applyMarkerFrameDimensions(options, overlay, transform.scale);\n}\n\nfunction applyMarkerFrameDimensions(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n markerSize: EditorTransformVec3,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!Vector3) return;\n const maxSize = Math.max(Math.abs(markerSize.x), Math.abs(markerSize.y), Math.abs(markerSize.z));\n const presentationScale = overlay.presentation === 'anchor' ? 1.55 : overlay.presentation === 'point' ? 1.18 : 1;\n const shaftLength = Math.max(0.75, Math.min(2.2, maxSize * 0.45 * presentationScale));\n const headLength = Math.max(0.2, Math.min(0.34, shaftLength * 0.28));\n const shaftDiameter = Math.max(0.055, Math.min(0.12, shaftLength * 0.075 * presentationScale));\n const headDiameter = Math.max(0.18, Math.min(0.3, shaftLength * 0.22));\n const anchorDiameter = Math.max(0.18, Math.min(0.34, shaftLength * 0.2 * presentationScale));\n if (overlay.anchorMesh) {\n overlay.anchorMesh.position = new Vector3(0, 0, 0);\n overlay.anchorMesh.scaling = new Vector3(anchorDiameter, anchorDiameter, anchorDiameter);\n }\n if (overlay.forwardShaft) {\n overlay.forwardShaft.position = new Vector3(0, 0, shaftLength / 2);\n overlay.forwardShaft.scaling = new Vector3(shaftDiameter, shaftLength, shaftDiameter);\n }\n if (overlay.forwardHead) {\n overlay.forwardHead.position = new Vector3(0, 0, shaftLength + headLength / 2);\n overlay.forwardHead.scaling = new Vector3(headDiameter, headLength, headDiameter);\n }\n if (overlay.frameLines) {\n const lineScale = Math.max(1, Math.min(3, shaftLength / 0.72));\n overlay.frameLines.scaling = new Vector3(lineScale, lineScale, lineScale);\n }\n}\n\nfunction applyTransformToRoot(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n transform: EditorTransformTrsSnapshot,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!root || !Vector3) return;\n root.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n root.rotationQuaternion = null;\n root.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n root.scaling = new Vector3(transform.scale.x, transform.scale.y, transform.scale.z);\n}\n\nfunction readRootTransform(root: any): EditorTransformTrsSnapshot | null {\n if (!root) return null;\n const rotation = root.rotationQuaternion?.toEulerAngles?.() ?? root.rotation;\n const transform = {\n position: readVec3(root.position),\n rotation: readVec3(rotation),\n scale: readVec3(root.scaling),\n };\n if (!transform.position || !transform.rotation || !transform.scale) return null;\n return transform as EditorTransformTrsSnapshot;\n}\n\nfunction readVec3(value: any): EditorTransformVec3 | null {\n if (!Number.isFinite(value?.x) || !Number.isFinite(value?.y) || !Number.isFinite(value?.z)) return null;\n return {\n x: Number(value.x),\n y: Number(value.y),\n z: Number(value.z),\n };\n}\n\nfunction averagePositions(transforms: readonly EditorTransformTrsSnapshot[]): EditorTransformVec3 {\n return {\n x: transforms.reduce((sum, transform) => sum + transform.position.x, 0) / transforms.length,\n y: transforms.reduce((sum, transform) => sum + transform.position.y, 0) / transforms.length,\n z: transforms.reduce((sum, transform) => sum + transform.position.z, 0) / transforms.length,\n };\n}\n\nfunction addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n}\n\nfunction subtractVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x - right.x,\n y: left.y - right.y,\n z: left.z - right.z,\n };\n}\n\nfunction scaleVec3(value: EditorTransformVec3, scalar: number): EditorTransformVec3 {\n return {\n x: value.x * scalar,\n y: value.y * scalar,\n z: value.z * scalar,\n };\n}\n\nfunction vec3Length(value: EditorTransformVec3): number {\n return Math.sqrt(value.x * value.x + value.y * value.y + value.z * value.z);\n}\n\nfunction combineTransformBounds(transforms: readonly EditorTransformTrsSnapshot[]): BabylonEditorProjectionBounds | null {\n let combined: BabylonEditorProjectionBounds | null = null;\n for (const transform of transforms) {\n combined = combineBounds(combined, createTransformBounds(transform));\n }\n return combined;\n}\n\nfunction createTransformBounds(transform: EditorTransformTrsSnapshot): BabylonEditorProjectionBounds {\n const half = {\n x: Math.abs(transform.scale.x) / 2,\n y: Math.abs(transform.scale.y) / 2,\n z: Math.abs(transform.scale.z) / 2,\n };\n const corners = [\n { x: -half.x, y: -half.y, z: -half.z },\n { x: half.x, y: -half.y, z: -half.z },\n { x: -half.x, y: half.y, z: -half.z },\n { x: half.x, y: half.y, z: -half.z },\n { x: -half.x, y: -half.y, z: half.z },\n { x: half.x, y: -half.y, z: half.z },\n { x: -half.x, y: half.y, z: half.z },\n { x: half.x, y: half.y, z: half.z },\n ].map(corner => addVec3(rotateVec3ByEuler(corner, transform.rotation), transform.position));\n const min = {\n x: Math.min(...corners.map(corner => corner.x)),\n y: Math.min(...corners.map(corner => corner.y)),\n z: Math.min(...corners.map(corner => corner.z)),\n };\n const max = {\n x: Math.max(...corners.map(corner => corner.x)),\n y: Math.max(...corners.map(corner => corner.y)),\n z: Math.max(...corners.map(corner => corner.z)),\n };\n return {\n min,\n max,\n center: {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n },\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n };\n}\n\nfunction rotateVec3ByEuler(\n value: EditorTransformVec3,\n rotation: EditorTransformVec3,\n): EditorTransformVec3 {\n const cx = Math.cos(rotation.x);\n const sx = Math.sin(rotation.x);\n const cy = Math.cos(rotation.y);\n const sy = Math.sin(rotation.y);\n const cz = Math.cos(rotation.z);\n const sz = Math.sin(rotation.z);\n const afterX = {\n x: value.x,\n y: value.y * cx - value.z * sx,\n z: value.y * sx + value.z * cx,\n };\n const afterY = {\n x: afterX.x * cy + afterX.z * sy,\n y: afterX.y,\n z: -afterX.x * sy + afterX.z * cy,\n };\n return {\n x: afterY.x * cz - afterY.y * sz,\n y: afterY.x * sz + afterY.y * cz,\n z: afterY.z,\n };\n}\n\nfunction combineBounds(\n left: BabylonEditorProjectionBounds | null,\n right: BabylonEditorProjectionBounds | null,\n): BabylonEditorProjectionBounds | null {\n if (!left) return right ? cloneBounds(right) : null;\n if (!right) return cloneBounds(left);\n const min = {\n x: Math.min(left.min.x, right.min.x),\n y: Math.min(left.min.y, right.min.y),\n z: Math.min(left.min.z, right.min.z),\n };\n const max = {\n x: Math.max(left.max.x, right.max.x),\n y: Math.max(left.max.y, right.max.y),\n z: Math.max(left.max.z, right.max.z),\n };\n return {\n min,\n max,\n center: {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n },\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n };\n}\n\nfunction cloneBounds(bounds: BabylonEditorProjectionBounds): BabylonEditorProjectionBounds {\n return {\n min: { ...bounds.min },\n max: { ...bounds.max },\n center: { ...bounds.center },\n size: { ...bounds.size },\n };\n}\n"]}
1
+ {"version":3,"file":"marker-overlay.js","sourceRoot":"","sources":["../src/marker-overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n isEditorTransformTrsSnapshot,\n type EditorTransformTrsSnapshot,\n type EditorTransformPivot,\n type EditorTransformSnapshot,\n type EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport type {\n SpatialMarkerBoxGeometry,\n SpatialMarkerGeometry,\n SpatialMarkerNode,\n} from '@fps-games/editor-protocol';\nimport type {\n BabylonEditorProjection,\n BabylonEditorProjectionBounds,\n} from './projection';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeScene,\n} from './types';\n\nexport interface BabylonEditorMarkerOverlayOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n}\n\nexport interface BabylonEditorMarkerOverlayEntry {\n markerRowId: string;\n marker: SpatialMarkerNode;\n markerTypeLabel?: string;\n selected?: boolean;\n active?: boolean;\n}\n\nexport interface BabylonEditorMarkerOverlayRelationEntry {\n id: string;\n type: string;\n label?: string;\n from: EditorTransformVec3;\n to: EditorTransformVec3;\n directed?: boolean;\n active?: boolean;\n color?: MarkerOverlayColor;\n}\n\nexport interface BabylonEditorMarkerOverlaySyncInput {\n markers: readonly BabylonEditorMarkerOverlayEntry[];\n relations?: readonly BabylonEditorMarkerOverlayRelationEntry[];\n selectedMarkerRowIds?: readonly string[];\n activeMarkerRowId?: string | null;\n}\n\nexport interface BabylonEditorMarkerOverlayController {\n sync(input: BabylonEditorMarkerOverlaySyncInput): boolean;\n getAttachableRoot(markerRowId: string): any | null;\n readMarkerTransform(markerRowId: string): EditorTransformSnapshot | null;\n readMarkerTransforms(markerRowIds: readonly string[]): Record<string, EditorTransformSnapshot>;\n setMarkerTransformPreview(markerRowId: string, transform: EditorTransformSnapshot): boolean;\n setMarkerTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): string[];\n getSelectionPivot(markerRowIds: readonly string[]): EditorTransformPivot | null;\n getSelectionBounds(markerRowIds: readonly string[]): BabylonEditorProjectionBounds | null;\n resolvePickSelectionNodeId(target: unknown): string | null;\n pickMarkerRowIdAt(clientX: number, clientY: number): string | null;\n dispose(): void;\n}\n\ninterface ActiveMarkerOverlay {\n markerRowId: string;\n markerId: string;\n presentation: MarkerOverlayPresentation;\n root: any;\n lines: any | null;\n frameRoot: any | null;\n frameLines: any | null;\n anchorMesh: any | null;\n forwardShaft: any | null;\n forwardHead: any | null;\n frameMaterial: any | null;\n pickMesh: any | null;\n pickMaterial: any | null;\n labelRoot: any | null;\n labelPlane: any | null;\n labelMaterial: any | null;\n labelTexture: any | null;\n labelText: string;\n selected: boolean;\n active: boolean;\n color: MarkerOverlayColor;\n}\n\ntype MarkerOverlayPresentation = 'region' | 'point' | 'anchor' | 'object';\n\nexport interface MarkerOverlayColor {\n r: number;\n g: number;\n b: number;\n}\n\ninterface ActiveMarkerRelationOverlay {\n id: string;\n root: any;\n dashMeshes: any[];\n dashGeometryKey: string;\n arrowHead: any | null;\n material: any | null;\n color: MarkerOverlayColor;\n directed: boolean;\n active: boolean;\n}\n\nconst UNIT_BOX_LINES: Array<[EditorTransformVec3, EditorTransformVec3]> = [\n [{ x: -0.5, y: -0.5, z: -0.5 }, { x: 0.5, y: -0.5, z: -0.5 }],\n [{ x: 0.5, y: -0.5, z: -0.5 }, { x: 0.5, y: 0.5, z: -0.5 }],\n [{ x: 0.5, y: 0.5, z: -0.5 }, { x: -0.5, y: 0.5, z: -0.5 }],\n [{ x: -0.5, y: 0.5, z: -0.5 }, { x: -0.5, y: -0.5, z: -0.5 }],\n [{ x: -0.5, y: -0.5, z: 0.5 }, { x: 0.5, y: -0.5, z: 0.5 }],\n [{ x: 0.5, y: -0.5, z: 0.5 }, { x: 0.5, y: 0.5, z: 0.5 }],\n [{ x: 0.5, y: 0.5, z: 0.5 }, { x: -0.5, y: 0.5, z: 0.5 }],\n [{ x: -0.5, y: 0.5, z: 0.5 }, { x: -0.5, y: -0.5, z: 0.5 }],\n [{ x: -0.5, y: -0.5, z: -0.5 }, { x: -0.5, y: -0.5, z: 0.5 }],\n [{ x: 0.5, y: -0.5, z: -0.5 }, { x: 0.5, y: -0.5, z: 0.5 }],\n [{ x: 0.5, y: 0.5, z: -0.5 }, { x: 0.5, y: 0.5, z: 0.5 }],\n [{ x: -0.5, y: 0.5, z: -0.5 }, { x: -0.5, y: 0.5, z: 0.5 }],\n];\n\nconst MARKER_FRAME_LINES: Array<[EditorTransformVec3, EditorTransformVec3]> = [\n [{ x: -0.08, y: 0, z: 0 }, { x: 0.08, y: 0, z: 0 }],\n [{ x: 0, y: -0.08, z: 0 }, { x: 0, y: 0.08, z: 0 }],\n [{ x: 0, y: 0, z: -0.08 }, { x: 0, y: 0, z: 0.08 }],\n [{ x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0.72 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: -0.08, y: 0, z: 0.58 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: 0.08, y: 0, z: 0.58 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: 0, y: 0.08, z: 0.58 }],\n [{ x: 0, y: 0, z: 0.72 }, { x: 0, y: -0.08, z: 0.58 }],\n];\n\nconst RELATION_DASH_MAX_COUNT = 64;\nconst RELATION_DASH_MIN_SEGMENT_LENGTH = 0.04;\nconst RELATION_ACTIVE_PULSE_PERIOD_MS = 1100;\nconst MARKER_LABEL_WORLD_SCALE = 1.55;\n\nexport function createBabylonEditorMarkerOverlayController(\n options: BabylonEditorMarkerOverlayOptions,\n): BabylonEditorMarkerOverlayController {\n const overlays = new Map<string, ActiveMarkerOverlay>();\n const relationOverlays = new Map<string, ActiveMarkerRelationOverlay>();\n let relationAnimationObserver: unknown = null;\n let relationAnimationTimeMs = 0;\n let disposed = false;\n\n function disposeOverlay(markerRowId: string): boolean {\n const overlay = overlays.get(markerRowId);\n if (!overlay) return false;\n disposeActiveMarkerOverlay(overlay);\n overlays.delete(markerRowId);\n return true;\n }\n\n function disposeRelationOverlay(relationId: string): boolean {\n const overlay = relationOverlays.get(relationId);\n if (!overlay) return false;\n disposeActiveMarkerRelationOverlay(overlay);\n relationOverlays.delete(relationId);\n syncRelationAnimationObserver();\n return true;\n }\n\n function sync(input: BabylonEditorMarkerOverlaySyncInput): boolean {\n if (disposed) return false;\n let changed = false;\n const nextRowIds = new Set<string>();\n const selectedMarkerRowIds = new Set(input.selectedMarkerRowIds ?? []);\n for (const entry of input.markers) {\n if (!entry.markerRowId) continue;\n const presentation = resolveMarkerOverlayPresentation(entry.marker);\n nextRowIds.add(entry.markerRowId);\n let overlay = overlays.get(entry.markerRowId) ?? null;\n if (!overlay || overlay.markerId !== entry.marker.id || overlay.presentation !== presentation) {\n if (overlay) disposeOverlay(entry.markerRowId);\n overlay = createActiveMarkerOverlay(options, entry.markerRowId, entry.marker.id, presentation);\n if (!overlay) continue;\n overlays.set(entry.markerRowId, overlay);\n changed = true;\n }\n const selected = entry.selected === true || selectedMarkerRowIds.has(entry.markerRowId);\n const active = entry.active === true || input.activeMarkerRowId === entry.markerRowId;\n const color = readMarkerOverlayColor(entry.marker);\n const labelText = createMarkerOverlayLabelText(entry.marker, entry.markerTypeLabel);\n if (\n overlay.selected !== selected\n || overlay.active !== active\n || !markerOverlayColorsEqual(overlay.color, color)\n || overlay.labelText !== labelText\n ) changed = true;\n overlay.selected = selected;\n overlay.active = active;\n overlay.color = color;\n overlay.labelText = labelText;\n applyMarkerGeometryToOverlay(options, overlay, entry.marker);\n applyMarkerVisualState(options, overlay);\n applyMarkerLabelVisualState(options, overlay);\n changed = true;\n }\n for (const markerRowId of [...overlays.keys()]) {\n if (!nextRowIds.has(markerRowId)) changed = disposeOverlay(markerRowId) || changed;\n }\n changed = syncRelationOverlays(input.relations ?? []) || changed;\n return changed;\n }\n\n function getAttachableRoot(markerRowId: string): any | null {\n if (disposed) return null;\n return overlays.get(markerRowId)?.root ?? null;\n }\n\n function readMarkerTransform(markerRowId: string): EditorTransformTrsSnapshot | null {\n if (disposed) return null;\n return readRootTransform(overlays.get(markerRowId)?.root ?? null);\n }\n\n function readMarkerTransforms(markerRowIds: readonly string[]): Record<string, EditorTransformTrsSnapshot> {\n const transforms: Record<string, EditorTransformTrsSnapshot> = {};\n for (const markerRowId of markerRowIds) {\n const transform = readMarkerTransform(markerRowId);\n if (transform) transforms[markerRowId] = transform;\n }\n return transforms;\n }\n\n function setMarkerTransformPreview(markerRowId: string, transform: EditorTransformSnapshot): boolean {\n if (disposed) return false;\n const overlay = overlays.get(markerRowId);\n if (!overlay) return false;\n if (!isEditorTransformTrsSnapshot(transform)) return false;\n applyTransformToOverlay(options, overlay, transform);\n return true;\n }\n\n function setMarkerTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): string[] {\n const applied: string[] = [];\n for (const [markerRowId, transform] of Object.entries(transforms)) {\n if (setMarkerTransformPreview(markerRowId, transform)) applied.push(markerRowId);\n }\n return applied;\n }\n\n function getSelectionPivot(markerRowIds: readonly string[]): EditorTransformPivot | null {\n const transforms = Object.values(readMarkerTransforms(markerRowIds));\n if (transforms.length === 0) return null;\n return {\n mode: 'selection-center',\n position: averagePositions(transforms),\n };\n }\n\n function getSelectionBounds(markerRowIds: readonly string[]): BabylonEditorProjectionBounds | null {\n const transforms = Object.values(readMarkerTransforms(markerRowIds));\n if (transforms.length === 0) return null;\n return combineTransformBounds(transforms);\n }\n\n function resolvePickSelectionNodeId(target: unknown): string | null {\n if (disposed) return null;\n let current: any = target;\n while (current) {\n const markerRowId = current.metadata?.editorMarkerRowId;\n if (typeof markerRowId === 'string' && overlays.has(markerRowId)) return markerRowId;\n current = current.parent ?? null;\n }\n return null;\n }\n\n function pickMarkerRowIdAt(clientX: number, clientY: number): string | null {\n if (disposed) return null;\n const scene = options.scene as any;\n const canvas = scene.getEngine?.().getRenderingCanvas?.() ?? null;\n if (!canvas || typeof scene.pick !== 'function') return null;\n const rect = typeof canvas.getBoundingClientRect === 'function'\n ? canvas.getBoundingClientRect()\n : { left: 0, top: 0 };\n const pickResult = scene.pick(\n clientX - (rect.left ?? 0),\n clientY - (rect.top ?? 0),\n (mesh: unknown) => resolvePickSelectionNodeId(mesh) != null,\n );\n return resolvePickSelectionNodeId(pickResult?.pickedMesh ?? null);\n }\n\n return {\n sync,\n getAttachableRoot,\n readMarkerTransform,\n readMarkerTransforms,\n setMarkerTransformPreview,\n setMarkerTransformsPreview,\n getSelectionPivot,\n getSelectionBounds,\n resolvePickSelectionNodeId,\n pickMarkerRowIdAt,\n dispose() {\n if (disposed) return;\n for (const markerRowId of [...overlays.keys()]) disposeOverlay(markerRowId);\n for (const relationId of [...relationOverlays.keys()]) disposeRelationOverlay(relationId);\n removeRelationAnimationObserver();\n disposed = true;\n },\n };\n\n function syncRelationOverlays(\n relations: readonly BabylonEditorMarkerOverlayRelationEntry[],\n ): boolean {\n let changed = false;\n const nextRelationIds = new Set<string>();\n for (const entry of relations) {\n if (!entry.id) continue;\n nextRelationIds.add(entry.id);\n let overlay = relationOverlays.get(entry.id) ?? null;\n if (!overlay) {\n overlay = createActiveMarkerRelationOverlay(options, entry);\n if (!overlay) continue;\n relationOverlays.set(entry.id, overlay);\n changed = true;\n }\n const color = entry.color ?? createMarkerRelationOverlayColor(entry.type);\n const directed = entry.directed !== false;\n const active = entry.active === true;\n if (\n !markerOverlayColorsEqual(overlay.color, color)\n || overlay.directed !== directed\n || overlay.active !== active\n ) changed = true;\n overlay.color = color;\n overlay.directed = directed;\n overlay.active = active;\n applyMarkerRelationOverlayState(options, overlay, entry);\n changed = true;\n }\n for (const relationId of [...relationOverlays.keys()]) {\n if (!nextRelationIds.has(relationId)) changed = disposeRelationOverlay(relationId) || changed;\n }\n syncRelationAnimationObserver();\n return changed;\n }\n\n function syncRelationAnimationObserver(): void {\n if (disposed) return;\n const shouldAnimate = [...relationOverlays.values()].some(overlay => overlay.active);\n const observable = (options.scene as any).onBeforeRenderObservable;\n if (shouldAnimate && !relationAnimationObserver && typeof observable?.add === 'function') {\n relationAnimationObserver = observable.add(() => updateActiveRelationAnimations());\n updateActiveRelationAnimations(0);\n return;\n }\n if (!shouldAnimate) removeRelationAnimationObserver();\n }\n\n function removeRelationAnimationObserver(): void {\n if (!relationAnimationObserver) return;\n try {\n (options.scene as any).onBeforeRenderObservable?.remove?.(relationAnimationObserver);\n } catch {}\n relationAnimationObserver = null;\n }\n\n function updateActiveRelationAnimations(deltaOverrideMs?: number): void {\n const rawDelta = deltaOverrideMs ?? Number((options.scene as any).getEngine?.()?.getDeltaTime?.() ?? 16.67);\n const deltaMs = Number.isFinite(rawDelta) ? Math.max(0, Math.min(80, rawDelta)) : 16.67;\n relationAnimationTimeMs = (relationAnimationTimeMs + deltaMs) % RELATION_ACTIVE_PULSE_PERIOD_MS;\n for (const overlay of relationOverlays.values()) {\n if (overlay.active) applyMarkerRelationPulseFrame(options, overlay, relationAnimationTimeMs);\n }\n }\n}\n\nexport function createBabylonMarkerOverlayProjectionAdapter(\n projection: BabylonEditorProjection,\n markerOverlay: BabylonEditorMarkerOverlayController,\n): BabylonEditorProjection {\n return {\n ...projection,\n getAttachableRoot(nodeId) {\n return markerOverlay.getAttachableRoot(nodeId) ?? projection.getAttachableRoot(nodeId);\n },\n readNodeTransform(nodeId) {\n return markerOverlay.readMarkerTransform(nodeId) ?? projection.readNodeTransform(nodeId);\n },\n readNodeTransforms(nodeIds) {\n return {\n ...projection.readNodeTransforms(nodeIds),\n ...markerOverlay.readMarkerTransforms(nodeIds),\n };\n },\n setNodeTransformPreview(nodeId, transform) {\n if (markerOverlay.setMarkerTransformPreview(nodeId, transform)) return;\n projection.setNodeTransformPreview(nodeId, transform);\n },\n setNodeTransformsPreview(transforms) {\n const markerIds = new Set(markerOverlay.setMarkerTransformsPreview(transforms));\n const projectionTransforms: Record<string, EditorTransformSnapshot> = {};\n for (const [nodeId, transform] of Object.entries(transforms)) {\n if (!markerIds.has(nodeId)) projectionTransforms[nodeId] = transform;\n }\n projection.setNodeTransformsPreview(projectionTransforms);\n },\n syncNodeMetadata(node) {\n projection.syncNodeMetadata(node);\n },\n getSelectionPivot(nodeIds) {\n const markerPivot = markerOverlay.getSelectionPivot(nodeIds);\n if (!markerPivot) return projection.getSelectionPivot(nodeIds);\n const transforms = {\n ...projection.readNodeTransforms(nodeIds),\n ...markerOverlay.readMarkerTransforms(nodeIds),\n };\n const values = Object.values(transforms).filter(isEditorTransformTrsSnapshot);\n return values.length > 0\n ? { mode: 'selection-center', position: averagePositions(values) }\n : markerPivot;\n },\n getSelectionBounds(nodeIds) {\n const markerBounds = markerOverlay.getSelectionBounds(nodeIds);\n const projectionBounds = projection.getSelectionBounds(nodeIds);\n return combineBounds(projectionBounds, markerBounds);\n },\n resolvePickSelectionNodeId(target) {\n return markerOverlay.resolvePickSelectionNodeId(target) ?? projection.resolvePickSelectionNodeId(target);\n },\n pickNodeIdAt(clientX, clientY) {\n return markerOverlay.pickMarkerRowIdAt(clientX, clientY) ?? projection.pickNodeIdAt(clientX, clientY);\n },\n };\n}\n\nfunction createActiveMarkerOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n markerRowId: string,\n markerId: string,\n presentation: MarkerOverlayPresentation,\n): ActiveMarkerOverlay | null {\n const TransformNode = (options.babylon as any).TransformNode;\n if (!TransformNode) return null;\n const root = new TransformNode(`editor.markerGraph.${presentation}.${markerId}`, options.scene);\n root.metadata = {\n ...(root.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerPresentation: presentation,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n root.isPickable = false;\n const lines = presentation === 'region' || presentation === 'object'\n ? createBoxLineHelper(options, root, markerId, markerRowId)\n : null;\n const frameHelper = createMarkerFrameHelper(options, markerId, markerRowId);\n const { pickMesh, pickMaterial } = presentation === 'region' || presentation === 'object'\n ? createBoxPickHelper(options, root, markerId, markerRowId)\n : createPointPickHelper(options, root, markerId, markerRowId, presentation);\n const { labelRoot, labelPlane, labelMaterial, labelTexture } = createMarkerLabelHelper(options, markerId, markerRowId);\n return {\n markerRowId,\n markerId,\n presentation,\n root,\n lines,\n ...frameHelper,\n pickMesh,\n pickMaterial,\n labelRoot,\n labelPlane,\n labelMaterial,\n labelTexture,\n labelText: '',\n selected: false,\n active: false,\n color: createMarkerOverlayColor(0.1, 0.85, 1),\n };\n}\n\nfunction disposeActiveMarkerOverlay(overlay: ActiveMarkerOverlay): void {\n try { overlay.lines?.dispose?.(); } catch {}\n try { overlay.anchorMesh?.dispose?.(); } catch {}\n try { overlay.forwardShaft?.dispose?.(); } catch {}\n try { overlay.forwardHead?.dispose?.(); } catch {}\n try { overlay.frameLines?.dispose?.(); } catch {}\n try { overlay.frameMaterial?.dispose?.(); } catch {}\n try { overlay.frameRoot?.dispose?.(); } catch {}\n try { overlay.pickMesh?.dispose?.(); } catch {}\n try { overlay.pickMaterial?.dispose?.(); } catch {}\n try { overlay.labelPlane?.dispose?.(); } catch {}\n try { overlay.labelTexture?.dispose?.(); } catch {}\n try { overlay.labelMaterial?.dispose?.(); } catch {}\n try { overlay.labelRoot?.dispose?.(); } catch {}\n try { overlay.root?.dispose?.(); } catch {}\n}\n\nfunction createActiveMarkerRelationOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n): ActiveMarkerRelationOverlay | null {\n const TransformNode = (options.babylon as any).TransformNode;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n if (!TransformNode || !MeshBuilder?.CreateCylinder) return null;\n const root = new TransformNode(`editor.markerGraph.relation.${entry.id}`, options.scene);\n root.metadata = createMarkerRelationMetadata(root.metadata, entry);\n root.isPickable = false;\n const material = StandardMaterial\n ? new StandardMaterial(`editor.markerGraph.relation.${entry.id}.material`, options.scene)\n : null;\n if (material) {\n material.backFaceCulling = false;\n material.disableLighting = true;\n material.disableDepthWrite = true;\n material.alpha = 0.96;\n material.zOffset = -3;\n }\n if (Color3 && material) {\n const color = entry.color ?? createMarkerRelationOverlayColor(entry.type);\n material.diffuseColor = new Color3(color.r, color.g, color.b);\n material.emissiveColor = new Color3(color.r, color.g, color.b);\n }\n const arrowHead = MeshBuilder.CreateCylinder\n ? MeshBuilder.CreateCylinder(\n `editor.markerGraph.relation.${entry.id}.arrow`,\n { height: 1, diameterTop: 0, diameterBottom: 1, tessellation: 24 },\n options.scene,\n )\n : null;\n if (arrowHead) {\n arrowHead.parent = root;\n arrowHead.isPickable = false;\n arrowHead.metadata = createMarkerRelationMetadata(arrowHead.metadata, entry, {\n editorMarkerRelationArrow: true,\n });\n arrowHead.renderingGroupId = 2;\n arrowHead.material = material;\n }\n return {\n id: entry.id,\n root,\n dashMeshes: [],\n dashGeometryKey: '',\n arrowHead,\n material,\n color: entry.color ?? createMarkerRelationOverlayColor(entry.type),\n directed: entry.directed !== false,\n active: entry.active === true,\n };\n}\n\nfunction disposeActiveMarkerRelationOverlay(overlay: ActiveMarkerRelationOverlay): void {\n disposeMarkerRelationDashMeshes(overlay);\n try { overlay.arrowHead?.dispose?.(); } catch {}\n try { overlay.material?.dispose?.(); } catch {}\n try { overlay.root?.dispose?.(); } catch {}\n}\n\nfunction createMarkerRelationMetadata(\n metadata: Record<string, unknown> | null | undefined,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n extras?: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n ...(metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerRelationOverlay: true,\n editorMarkerRelationId: entry.id,\n editorMarkerRelationType: entry.type,\n ...(extras ?? {}),\n };\n}\n\nfunction createMarkerFrameHelper(\n options: BabylonEditorMarkerOverlayOptions,\n markerId: string,\n markerRowId: string,\n): Pick<ActiveMarkerOverlay, 'frameRoot' | 'frameLines' | 'anchorMesh' | 'forwardShaft' | 'forwardHead' | 'frameMaterial'> {\n const TransformNode = (options.babylon as any).TransformNode;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n const Vector3 = (options.babylon as any).Vector3;\n if (!TransformNode || !Vector3) {\n return {\n frameRoot: null,\n frameLines: null,\n anchorMesh: null,\n forwardShaft: null,\n forwardHead: null,\n frameMaterial: null,\n };\n }\n\n const frameRoot = new TransformNode(`editor.markerGraph.box.${markerId}.frameRoot`, options.scene);\n frameRoot.metadata = createMarkerFrameMetadata(frameRoot.metadata, markerId, markerRowId);\n frameRoot.isPickable = false;\n\n let frameMaterial: any | null = null;\n if (StandardMaterial) {\n frameMaterial = new StandardMaterial(`editor.markerGraph.box.${markerId}.frameMaterial`, options.scene);\n if (Color3) {\n frameMaterial.diffuseColor = new Color3(1, 0.9, 0.08);\n frameMaterial.emissiveColor = new Color3(1, 0.72, 0.05);\n }\n frameMaterial.alpha = 0.98;\n frameMaterial.backFaceCulling = false;\n frameMaterial.disableLighting = true;\n frameMaterial.disableDepthWrite = true;\n frameMaterial.zOffset = -2;\n }\n\n const anchorMesh = MeshBuilder?.CreateSphere\n ? MeshBuilder.CreateSphere(`editor.markerGraph.box.${markerId}.anchor`, { diameter: 1, segments: 16 }, options.scene)\n : null;\n if (anchorMesh) configureMarkerFrameMesh(anchorMesh, frameRoot, frameMaterial, markerId, markerRowId);\n\n const forwardShaft = MeshBuilder?.CreateCylinder\n ? MeshBuilder.CreateCylinder(\n `editor.markerGraph.box.${markerId}.forwardShaft`,\n { height: 1, diameter: 1, tessellation: 16 },\n options.scene,\n )\n : null;\n if (forwardShaft) {\n configureMarkerFrameMesh(forwardShaft, frameRoot, frameMaterial, markerId, markerRowId);\n forwardShaft.rotation = new Vector3(Math.PI / 2, 0, 0);\n }\n\n const forwardHead = MeshBuilder?.CreateCylinder\n ? MeshBuilder.CreateCylinder(\n `editor.markerGraph.box.${markerId}.forwardHead`,\n { height: 1, diameterTop: 0, diameterBottom: 1, tessellation: 24 },\n options.scene,\n )\n : null;\n if (forwardHead) {\n configureMarkerFrameMesh(forwardHead, frameRoot, frameMaterial, markerId, markerRowId);\n forwardHead.rotation = new Vector3(Math.PI / 2, 0, 0);\n }\n\n const frameLines = !anchorMesh && !forwardShaft && !forwardHead && MeshBuilder?.CreateLineSystem\n ? MeshBuilder.CreateLineSystem(\n `editor.markerGraph.box.${markerId}.frame`,\n {\n lines: MARKER_FRAME_LINES.map(line => line.map(point => new Vector3(point.x, point.y, point.z))),\n updatable: false,\n },\n options.scene,\n )\n : null;\n if (frameLines) {\n frameLines.parent = frameRoot;\n frameLines.isPickable = true;\n frameLines.metadata = createMarkerFrameMetadata(frameLines.metadata, markerId, markerRowId);\n frameLines.renderingGroupId = 2;\n if (Color3) frameLines.color = new Color3(1, 0.9, 0.08);\n }\n\n return {\n frameRoot,\n frameLines,\n anchorMesh,\n forwardShaft,\n forwardHead,\n frameMaterial,\n };\n}\n\nfunction configureMarkerFrameMesh(\n mesh: any,\n frameRoot: any,\n material: any | null,\n markerId: string,\n markerRowId: string,\n): void {\n mesh.parent = frameRoot;\n mesh.isPickable = true;\n mesh.material = material;\n mesh.metadata = createMarkerFrameMetadata(mesh.metadata, markerId, markerRowId);\n mesh.renderingGroupId = 2;\n}\n\nfunction createMarkerFrameMetadata(\n metadata: Record<string, unknown> | null | undefined,\n markerId: string,\n markerRowId: string,\n): Record<string, unknown> {\n return {\n ...(metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerFrame: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n}\n\nfunction createBoxLineHelper(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n markerId: string,\n markerRowId: string,\n): any | null {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const Color3 = (options.babylon as any).Color3;\n const Vector3 = (options.babylon as any).Vector3;\n if (!MeshBuilder?.CreateLineSystem || !Vector3) return null;\n const lines = MeshBuilder.CreateLineSystem(\n `editor.markerGraph.box.${markerId}.lines`,\n {\n lines: UNIT_BOX_LINES.map(line => line.map(point => new Vector3(point.x, point.y, point.z))),\n updatable: false,\n },\n options.scene,\n );\n lines.parent = root;\n lines.isPickable = true;\n lines.metadata = {\n ...(lines.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n if (Color3) lines.color = new Color3(0.1, 0.85, 1);\n return lines;\n}\n\nfunction createBoxPickHelper(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n markerId: string,\n markerRowId: string,\n): { pickMesh: any | null; pickMaterial: any | null } {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n if (!MeshBuilder?.CreateBox) return { pickMesh: null, pickMaterial: null };\n const pickMesh = MeshBuilder.CreateBox(\n `editor.markerGraph.box.${markerId}.pick`,\n { size: 1 },\n options.scene,\n );\n pickMesh.parent = root;\n pickMesh.isPickable = true;\n pickMesh.metadata = {\n ...(pickMesh.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerOverlayPickTarget: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n let pickMaterial: any | null = null;\n if (StandardMaterial) {\n pickMaterial = new StandardMaterial(`editor.markerGraph.box.${markerId}.material`, options.scene);\n if (Color3) {\n pickMaterial.diffuseColor = new Color3(0.1, 0.85, 1);\n pickMaterial.emissiveColor = new Color3(0.02, 0.18, 0.22);\n }\n pickMaterial.alpha = 0.065;\n pickMaterial.backFaceCulling = false;\n pickMesh.material = pickMaterial;\n } else {\n pickMesh.visibility = 0.065;\n }\n return { pickMesh, pickMaterial };\n}\n\nfunction createPointPickHelper(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n markerId: string,\n markerRowId: string,\n presentation: MarkerOverlayPresentation,\n): { pickMesh: any | null; pickMaterial: any | null } {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const Color3 = (options.babylon as any).Color3;\n if (!MeshBuilder?.CreateSphere) return { pickMesh: null, pickMaterial: null };\n const diameter = presentation === 'anchor' ? 0.82 : presentation === 'object' ? 0.72 : 0.62;\n const pickMesh = MeshBuilder.CreateSphere(\n `editor.markerGraph.${presentation}.${markerId}.pick`,\n { diameter, segments: 24 },\n options.scene,\n );\n pickMesh.parent = root;\n pickMesh.isPickable = true;\n pickMesh.metadata = {\n ...(pickMesh.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerOverlayPickTarget: true,\n editorMarkerPresentation: presentation,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n let pickMaterial: any | null = null;\n if (StandardMaterial) {\n pickMaterial = new StandardMaterial(`editor.markerGraph.${presentation}.${markerId}.material`, options.scene);\n if (Color3) {\n pickMaterial.diffuseColor = new Color3(0.1, 0.85, 1);\n pickMaterial.emissiveColor = new Color3(0.04, 0.35, 0.42);\n }\n pickMaterial.alpha = 0.38;\n pickMaterial.backFaceCulling = false;\n pickMaterial.disableLighting = true;\n pickMesh.material = pickMaterial;\n } else {\n pickMesh.visibility = 0.38;\n }\n return { pickMesh, pickMaterial };\n}\n\nfunction createMarkerLabelHelper(\n options: BabylonEditorMarkerOverlayOptions,\n markerId: string,\n markerRowId: string,\n): { labelRoot: any | null; labelPlane: any | null; labelMaterial: any | null; labelTexture: any | null } {\n const TransformNode = (options.babylon as any).TransformNode;\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const StandardMaterial = (options.babylon as any).StandardMaterial;\n const DynamicTexture = (options.babylon as any).DynamicTexture;\n const Color3 = (options.babylon as any).Color3;\n const Mesh = (options.babylon as any).Mesh;\n if (!TransformNode) return { labelRoot: null, labelPlane: null, labelMaterial: null, labelTexture: null };\n const labelRoot = new TransformNode(`editor.markerGraph.box.${markerId}.labelRoot`, options.scene);\n labelRoot.metadata = {\n ...(labelRoot.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerLabel: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n labelRoot.isPickable = false;\n if (!MeshBuilder?.CreatePlane) return { labelRoot, labelPlane: null, labelMaterial: null, labelTexture: null };\n const labelPlane = MeshBuilder.CreatePlane(\n `editor.markerGraph.box.${markerId}.label`,\n { size: 1 },\n options.scene,\n );\n labelPlane.parent = labelRoot;\n labelPlane.isPickable = false;\n labelPlane.billboardMode = Mesh?.BILLBOARDMODE_ALL ?? 7;\n labelPlane.metadata = {\n ...(labelPlane.metadata ?? {}),\n editorProjectionHelper: true,\n editorMarkerOverlay: true,\n editorMarkerLabel: true,\n editorMarkerId: markerId,\n editorMarkerRowId: markerRowId,\n };\n let labelTexture: any | null = null;\n let labelMaterial: any | null = null;\n if (DynamicTexture) {\n labelTexture = new DynamicTexture(\n `editor.markerGraph.box.${markerId}.labelTexture`,\n { width: 512, height: 192 },\n options.scene,\n false,\n );\n labelTexture.hasAlpha = true;\n }\n if (StandardMaterial) {\n labelMaterial = new StandardMaterial(`editor.markerGraph.box.${markerId}.labelMaterial`, options.scene);\n if (Color3) {\n labelMaterial.emissiveColor = new Color3(1, 1, 1);\n labelMaterial.diffuseColor = new Color3(1, 1, 1);\n }\n labelMaterial.backFaceCulling = false;\n labelMaterial.disableLighting = true;\n labelMaterial.alpha = 0.94;\n if (labelTexture) {\n labelMaterial.diffuseTexture = labelTexture;\n labelMaterial.emissiveTexture = labelTexture;\n labelMaterial.useAlphaFromDiffuseTexture = true;\n }\n labelPlane.material = labelMaterial;\n }\n return { labelRoot, labelPlane, labelMaterial, labelTexture };\n}\n\nfunction applyMarkerVisualState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n): void {\n const Color3 = (options.babylon as any).Color3;\n const selected = overlay.selected || overlay.active;\n if (Color3 && overlay.lines) {\n const lineColor = selected ? brightenMarkerOverlayColor(overlay.color, 0.28) : overlay.color;\n overlay.lines.color = new Color3(lineColor.r, lineColor.g, lineColor.b);\n }\n if (Color3 && overlay.frameLines) {\n const frameColor = selected ? createMarkerOverlayColor(1, 0.96, 0.22) : createMarkerOverlayColor(1, 0.78, 0.08);\n overlay.frameLines.color = new Color3(frameColor.r, frameColor.g, frameColor.b);\n }\n if (Color3 && overlay.frameMaterial) {\n const frameColor = selected ? createMarkerOverlayColor(1, 0.96, 0.22) : createMarkerOverlayColor(1, 0.78, 0.08);\n overlay.frameMaterial.diffuseColor = new Color3(frameColor.r, frameColor.g, frameColor.b);\n overlay.frameMaterial.emissiveColor = new Color3(frameColor.r, Math.max(0.45, frameColor.g * 0.82), 0.04);\n overlay.frameMaterial.alpha = selected ? 1 : 0.96;\n }\n const alpha = overlay.presentation === 'region'\n ? (overlay.active ? 0.18 : overlay.selected ? 0.13 : 0.065)\n : overlay.presentation === 'object'\n ? (overlay.active ? 0.16 : overlay.selected ? 0.1 : 0.055)\n : (overlay.active ? 0.84 : overlay.selected ? 0.68 : 0.46);\n if (overlay.pickMaterial) {\n overlay.pickMaterial.alpha = alpha;\n if (Color3) {\n const fillColor = selected ? brightenMarkerOverlayColor(overlay.color, 0.18) : overlay.color;\n overlay.pickMaterial.diffuseColor = new Color3(fillColor.r, fillColor.g, fillColor.b);\n overlay.pickMaterial.emissiveColor = new Color3(\n Math.min(0.28, fillColor.r * 0.18),\n Math.min(0.28, fillColor.g * 0.18),\n Math.min(0.28, fillColor.b * 0.18),\n );\n }\n } else if (overlay.pickMesh) {\n overlay.pickMesh.visibility = alpha;\n }\n}\n\nfunction applyMarkerRelationOverlayState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n): void {\n const Color3 = (options.babylon as any).Color3;\n const active = entry.active === true;\n const visualColor = active ? createMarkerOverlayColor(1, 0.86, 0.1) : overlay.color;\n if (Color3 && overlay.material) {\n overlay.material.diffuseColor = new Color3(visualColor.r, visualColor.g, visualColor.b);\n overlay.material.emissiveColor = new Color3(visualColor.r, visualColor.g, visualColor.b);\n overlay.material.alpha = active ? 1 : 0.96;\n overlay.material.zOffset = active ? -5 : -3;\n }\n const directed = entry.directed !== false;\n updateMarkerRelationDashes(options, overlay, entry, directed, active);\n updateMarkerRelationArrow(options, overlay, entry.from, entry.to, directed, active);\n if (active) applyMarkerRelationPulseFrame(options, overlay, 0);\n else resetMarkerRelationPulseState(options, overlay);\n}\n\nfunction applyMarkerRelationPulseFrame(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n timeMs: number,\n): void {\n const Color3 = (options.babylon as any).Color3;\n const Vector3 = (options.babylon as any).Vector3;\n const phase = (timeMs % RELATION_ACTIVE_PULSE_PERIOD_MS) / RELATION_ACTIVE_PULSE_PERIOD_MS;\n const pulse = 0.5 + 0.5 * Math.sin(phase * Math.PI * 2);\n const color = brightenMarkerOverlayColor(createMarkerOverlayColor(1, 0.86, 0.08), 0.38 * pulse);\n if (Color3 && overlay.material) {\n overlay.material.diffuseColor = new Color3(color.r, color.g, color.b);\n overlay.material.emissiveColor = new Color3(color.r, color.g, color.b);\n overlay.material.alpha = 0.72 + 0.28 * pulse;\n overlay.material.zOffset = -6;\n }\n if (Vector3) {\n const pulseScale = 1.0 + 0.55 * pulse;\n for (const dash of overlay.dashMeshes) {\n dash.scaling = new Vector3(pulseScale, 1, pulseScale);\n }\n }\n}\n\nfunction resetMarkerRelationPulseState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!Vector3) return;\n for (const dash of overlay.dashMeshes) {\n dash.scaling = new Vector3(1, 1, 1);\n }\n}\n\nfunction updateMarkerRelationDashes(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n entry: BabylonEditorMarkerOverlayRelationEntry,\n directed: boolean,\n active: boolean,\n): void {\n const MeshBuilder = (options.babylon as any).MeshBuilder;\n const Vector3 = (options.babylon as any).Vector3;\n if (!MeshBuilder?.CreateCylinder || !Vector3) return;\n const nextDashGeometryKey = createMarkerRelationDashGeometryKey(entry.from, entry.to, directed, active);\n if (overlay.dashGeometryKey === nextDashGeometryKey) return;\n overlay.dashGeometryKey = nextDashGeometryKey;\n disposeMarkerRelationDashMeshes(overlay);\n\n const direction = subtractVec3(entry.to, entry.from);\n const length = vec3Length(direction);\n if (length < 0.000001) return;\n\n const unit = scaleVec3(direction, 1 / length);\n const arrowClearance = directed ? Math.max(0.28, Math.min(0.56, length * 0.14)) : 0;\n const usableLength = Math.max(0, length - arrowClearance);\n if (usableLength < RELATION_DASH_MIN_SEGMENT_LENGTH) return;\n\n const dashLength = Math.max(0.3, Math.min(0.74, length * 0.12));\n const gapLength = Math.max(0.18, Math.min(0.44, dashLength * 0.62));\n const baseDashDiameter = Math.max(0.0375, Math.min(0.065, length * 0.009));\n const dashDiameter = active ? baseDashDiameter * 2.6 : baseDashDiameter;\n let cursor = 0;\n let dashIndex = 0;\n while (cursor < usableLength && dashIndex < RELATION_DASH_MAX_COUNT) {\n const dashEnd = Math.min(cursor + dashLength, usableLength);\n const segmentLength = dashEnd - cursor;\n if (segmentLength >= RELATION_DASH_MIN_SEGMENT_LENGTH) {\n const segmentCenterDistance = cursor + segmentLength / 2;\n const center = addVec3(entry.from, scaleVec3(unit, segmentCenterDistance));\n const dash = MeshBuilder.CreateCylinder(\n `editor.markerGraph.relation.${entry.id}.dash.${dashIndex}`,\n {\n height: segmentLength,\n diameter: dashDiameter,\n tessellation: 12,\n },\n options.scene,\n );\n if (dash) {\n dash.parent = overlay.root;\n dash.isPickable = false;\n dash.metadata = createMarkerRelationMetadata(dash.metadata, entry, {\n editorMarkerRelationDash: true,\n editorMarkerRelationDashIndex: dashIndex,\n });\n dash.renderingGroupId = 2;\n dash.material = overlay.material;\n dash.position = new Vector3(center.x, center.y, center.z);\n dash.rotationQuaternion = null;\n dash.rotation = createCylinderRotationTowardDirection(options, unit);\n overlay.dashMeshes.push(dash);\n }\n }\n cursor += dashLength + gapLength;\n dashIndex += 1;\n }\n}\n\nfunction disposeMarkerRelationDashMeshes(overlay: ActiveMarkerRelationOverlay): void {\n for (const dash of overlay.dashMeshes) {\n try { dash?.dispose?.(); } catch {}\n }\n overlay.dashMeshes = [];\n}\n\nfunction createMarkerRelationDashGeometryKey(\n from: EditorTransformVec3,\n to: EditorTransformVec3,\n directed: boolean,\n active: boolean,\n): string {\n return [\n from.x,\n from.y,\n from.z,\n to.x,\n to.y,\n to.z,\n ].map(value => value.toFixed(4)).join(':') + `:${directed ? 1 : 0}:${active ? 1 : 0}`;\n}\n\nfunction updateMarkerRelationArrow(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerRelationOverlay,\n from: EditorTransformVec3,\n to: EditorTransformVec3,\n directed: boolean,\n active: boolean,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!overlay.arrowHead || !Vector3) return;\n overlay.arrowHead.setEnabled?.(directed);\n overlay.arrowHead.isVisible = directed;\n if (!directed) return;\n const direction = subtractVec3(to, from);\n const length = vec3Length(direction);\n if (length < 0.000001) {\n overlay.arrowHead.isVisible = false;\n return;\n }\n const unit = scaleVec3(direction, 1 / length);\n const arrowLength = Math.max(0.18, Math.min(0.42, length * 0.12));\n const baseArrowDiameter = Math.max(0.12, Math.min(0.28, arrowLength * 0.72));\n const arrowDiameter = active ? baseArrowDiameter * 1.35 : baseArrowDiameter;\n const center = addVec3(to, scaleVec3(unit, -arrowLength / 2));\n overlay.arrowHead.position = new Vector3(center.x, center.y, center.z);\n overlay.arrowHead.scaling = new Vector3(arrowDiameter, arrowLength, arrowDiameter);\n overlay.arrowHead.rotationQuaternion = null;\n overlay.arrowHead.rotation = createCylinderRotationTowardDirection(options, unit);\n}\n\nfunction createCylinderRotationTowardDirection(\n options: BabylonEditorMarkerOverlayOptions,\n direction: EditorTransformVec3,\n): any {\n const Vector3 = (options.babylon as any).Vector3;\n const yaw = Math.atan2(direction.x, direction.z);\n const horizontal = Math.sqrt(direction.x * direction.x + direction.z * direction.z);\n const pitch = Math.atan2(direction.y, horizontal);\n return Vector3 ? new Vector3(Math.PI / 2 - pitch, yaw, 0) : { x: Math.PI / 2 - pitch, y: yaw, z: 0 };\n}\n\nfunction applyMarkerLabelTransform(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n transform: EditorTransformSnapshot,\n): void {\n if (!isEditorTransformTrsSnapshot(transform)) return;\n const Vector3 = (options.babylon as any).Vector3;\n if (!overlay.labelRoot || !Vector3) return;\n overlay.labelRoot.position = new Vector3(\n transform.position.x,\n transform.position.y + Math.abs(transform.scale.y) / 2 + 0.78,\n transform.position.z,\n );\n overlay.labelRoot.rotationQuaternion = null;\n overlay.labelRoot.rotation = new Vector3(0, 0, 0);\n overlay.labelRoot.scaling = new Vector3(1, 1, 1);\n}\n\nfunction applyMarkerLabelVisualState(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n): void {\n if (!overlay.labelPlane) return;\n const Vector3 = (options.babylon as any).Vector3;\n const lines = normalizeMarkerOverlayLabelLines(overlay.labelText);\n const maxChars = Math.max(...lines.map(line => line.length), 8);\n const width = Math.max(0.85, Math.min(1.85, 0.045 * maxChars + 0.35)) * MARKER_LABEL_WORLD_SCALE;\n const height = Math.max(0.3, Math.min(0.54, 0.11 * lines.length + 0.16)) * MARKER_LABEL_WORLD_SCALE;\n if (Vector3) overlay.labelPlane.scaling = new Vector3(width, height, 1);\n updateMarkerLabelTexture(options, overlay, lines);\n if (overlay.labelMaterial) overlay.labelMaterial.alpha = overlay.active || overlay.selected ? 0.98 : 0.86;\n}\n\nfunction updateMarkerLabelTexture(\n _options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n lines: readonly string[],\n): void {\n const texture = overlay.labelTexture;\n if (!texture) return;\n const context = texture.getContext?.();\n if (!context) {\n texture.drawText?.(\n lines.join(' / '),\n 18,\n 76,\n 'bold 42px sans-serif',\n 'rgba(255, 255, 255, 0.94)',\n 'rgba(12, 18, 24, 0.86)',\n true,\n );\n return;\n }\n const width = 512;\n const height = 192;\n context.save?.();\n context.clearRect?.(0, 0, width, height);\n context.fillStyle = 'rgba(12, 18, 24, 0.78)';\n context.fillRect?.(0, 0, width, height);\n context.fillStyle = markerOverlayColorToCss(overlay.color);\n context.fillRect?.(0, 0, 10, height);\n context.fillStyle = 'rgba(255, 255, 255, 0.94)';\n context.font = '700 42px system-ui, -apple-system, BlinkMacSystemFont, sans-serif';\n context.textBaseline = 'top';\n context.fillText?.(truncateMarkerLabelLine(lines[0] ?? '', 26), 28, 22);\n context.font = '600 30px system-ui, -apple-system, BlinkMacSystemFont, sans-serif';\n context.fillStyle = 'rgba(225, 235, 245, 0.86)';\n if (lines[1]) context.fillText?.(truncateMarkerLabelLine(lines[1], 34), 28, 78);\n if (lines[2]) context.fillText?.(truncateMarkerLabelLine(lines[2], 40), 28, 120);\n context.restore?.();\n texture.update?.();\n}\n\nfunction createMarkerOverlayLabelText(marker: SpatialMarkerNode, markerTypeLabel?: string): string {\n const tags = marker.tags?.filter(tag => !!tag.trim()).join(', ') ?? '';\n return [\n marker.label,\n `Type: ${markerTypeLabel || marker.markerType}`,\n tags ? `Tags: ${tags}` : '',\n ].filter(Boolean).join('\\n');\n}\n\nfunction normalizeMarkerOverlayLabelLines(text: string): string[] {\n const lines = text.split('\\n').map(line => line.trim()).filter(Boolean);\n return lines.length > 0 ? lines.slice(0, 3) : ['Marker'];\n}\n\nfunction truncateMarkerLabelLine(line: string, maxLength: number): string {\n return line.length > maxLength ? `${line.slice(0, Math.max(0, maxLength - 1))}...` : line;\n}\n\nfunction markerOverlayColorToCss(color: MarkerOverlayColor): string {\n const r = Math.round(Math.min(1, Math.max(0, color.r)) * 255);\n const g = Math.round(Math.min(1, Math.max(0, color.g)) * 255);\n const b = Math.round(Math.min(1, Math.max(0, color.b)) * 255);\n return `rgb(${r}, ${g}, ${b})`;\n}\n\nfunction readMarkerOverlayColor(marker: SpatialMarkerNode): MarkerOverlayColor {\n const raw = marker.metadata?.color;\n if (!raw || typeof raw !== 'object') return createMarkerOverlayColor(0.1, 0.85, 1);\n const candidate = raw as { r?: unknown; g?: unknown; b?: unknown };\n const r = readMarkerOverlayColorChannel(candidate.r);\n const g = readMarkerOverlayColorChannel(candidate.g);\n const b = readMarkerOverlayColorChannel(candidate.b);\n return r == null || g == null || b == null\n ? createMarkerOverlayColor(0.1, 0.85, 1)\n : createMarkerOverlayColor(r, g, b);\n}\n\nfunction readMarkerOverlayColorChannel(value: unknown): number | null {\n const channel = Number(value);\n if (!Number.isFinite(channel)) return null;\n return Math.min(1, Math.max(0, channel));\n}\n\nfunction createMarkerOverlayColor(r: number, g: number, b: number): MarkerOverlayColor {\n return { r, g, b };\n}\n\nfunction createMarkerRelationOverlayColor(type: string): MarkerOverlayColor {\n let hash = 2166136261;\n for (const char of type) {\n hash ^= char.charCodeAt(0);\n hash = Math.imul(hash, 16777619);\n }\n const hue = Math.abs(hash % 360);\n return hslToMarkerOverlayColor(hue / 360, 0.72, 0.58);\n}\n\nfunction hslToMarkerOverlayColor(h: number, s: number, l: number): MarkerOverlayColor {\n const hueToRgb = (p: number, q: number, tInput: number): number => {\n let t = tInput;\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n return {\n r: hueToRgb(p, q, h + 1 / 3),\n g: hueToRgb(p, q, h),\n b: hueToRgb(p, q, h - 1 / 3),\n };\n}\n\nfunction brightenMarkerOverlayColor(color: MarkerOverlayColor, amount: number): MarkerOverlayColor {\n return {\n r: color.r + (1 - color.r) * amount,\n g: color.g + (1 - color.g) * amount,\n b: color.b + (1 - color.b) * amount,\n };\n}\n\nfunction markerOverlayColorsEqual(left: MarkerOverlayColor, right: MarkerOverlayColor): boolean {\n return Math.abs(left.r - right.r) < 0.000001\n && Math.abs(left.g - right.g) < 0.000001\n && Math.abs(left.b - right.b) < 0.000001;\n}\n\nfunction resolveMarkerOverlayPresentation(marker: SpatialMarkerNode): MarkerOverlayPresentation {\n const kind = marker.kind?.trim().toLowerCase();\n if (kind === 'region') return 'region';\n if (kind === 'anchor') return 'anchor';\n if (isObjectBoundMarkerPresentation(kind, marker.geometry.kind)) return 'object';\n if (marker.geometry.kind === 'box' && !kind) return 'region';\n return 'point';\n}\n\nfunction isObjectBoundMarkerPresentation(\n kind: string | undefined,\n geometryKind: SpatialMarkerGeometry['kind'],\n): boolean {\n return kind === 'object'\n || kind === 'object-bound'\n || kind === 'object-bounds'\n || geometryKind === 'object-bounds';\n}\n\nfunction applyMarkerGeometryToOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n marker: SpatialMarkerNode,\n): void {\n applyTransformToOverlay(options, overlay, createMarkerOverlayTransform(marker, overlay.presentation));\n}\n\nfunction applyBoxGeometryToOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n geometry: SpatialMarkerBoxGeometry,\n): void {\n applyTransformToOverlay(options, overlay, {\n position: geometry.center,\n rotation: geometry.rotation ?? { x: 0, y: 0, z: 0 },\n scale: geometry.size,\n });\n}\n\nfunction createMarkerOverlayTransform(\n marker: SpatialMarkerNode,\n presentation: MarkerOverlayPresentation,\n): EditorTransformTrsSnapshot {\n const origin = getMarkerOverlayOrigin(marker.geometry, marker, presentation);\n return {\n position: origin,\n rotation: getMarkerOverlayRotation(marker),\n scale: getMarkerOverlayScale(marker, presentation),\n };\n}\n\nfunction getMarkerOverlayOrigin(\n geometry: SpatialMarkerGeometry,\n marker: SpatialMarkerNode,\n presentation: MarkerOverlayPresentation,\n): EditorTransformVec3 {\n if (presentation === 'object') {\n if (marker.spatial?.bounds?.center) return { ...marker.spatial.bounds.center };\n if (marker.spatial?.origin) return { ...marker.spatial.origin };\n }\n switch (geometry.kind) {\n case 'box':\n return { ...geometry.center };\n case 'point':\n if (geometry.coordinateSpace === 'world') return { ...geometry.position };\n return marker.semanticFrame?.origin\n ? { ...marker.semanticFrame.origin }\n : marker.spatial?.origin\n ? { ...marker.spatial.origin }\n : { ...geometry.position };\n case 'object-bounds':\n if (marker.spatial?.bounds?.center) return { ...marker.spatial.bounds.center };\n if (marker.spatial?.origin) return { ...marker.spatial.origin };\n if (marker.semanticFrame?.origin) return { ...marker.semanticFrame.origin };\n return { x: 0, y: 0, z: 0 };\n case 'polyhedron':\n return marker.semanticFrame?.origin\n ? { ...marker.semanticFrame.origin }\n : geometry.vertices.length > 0\n ? averageVec3(geometry.vertices)\n : { x: 0, y: 0, z: 0 };\n }\n}\n\nfunction getMarkerOverlayRotation(marker: SpatialMarkerNode): EditorTransformVec3 {\n if (marker.geometry.kind === 'box') return marker.geometry.rotation ? { ...marker.geometry.rotation } : { x: 0, y: 0, z: 0 };\n const forward = marker.semanticFrame?.forward ?? marker.spatial?.localFrame?.forward;\n return forward ? createEulerFromForward(forward) : { x: 0, y: 0, z: 0 };\n}\n\nfunction getMarkerOverlayScale(\n marker: SpatialMarkerNode,\n presentation: MarkerOverlayPresentation,\n): EditorTransformVec3 {\n if (presentation === 'region' && marker.geometry.kind === 'box') return { ...marker.geometry.size };\n if (presentation === 'object' && marker.spatial?.bounds?.size) return { ...marker.spatial.bounds.size };\n if (presentation === 'anchor') return { x: 0.66, y: 0.66, z: 0.66 };\n if (presentation === 'object') return { x: 0.58, y: 0.58, z: 0.58 };\n return { x: 0.5, y: 0.5, z: 0.5 };\n}\n\nfunction averageVec3(points: readonly EditorTransformVec3[]): EditorTransformVec3 {\n return {\n x: points.reduce((sum, point) => sum + point.x, 0) / points.length,\n y: points.reduce((sum, point) => sum + point.y, 0) / points.length,\n z: points.reduce((sum, point) => sum + point.z, 0) / points.length,\n };\n}\n\nfunction createEulerFromForward(forward: EditorTransformVec3): EditorTransformVec3 {\n const length = vec3Length(forward);\n if (length < 0.000001) return { x: 0, y: 0, z: 0 };\n const unit = scaleVec3(forward, 1 / length);\n const yaw = Math.atan2(unit.x, unit.z);\n const horizontal = Math.sqrt(unit.x * unit.x + unit.z * unit.z);\n const pitch = -Math.atan2(unit.y, horizontal);\n return { x: pitch, y: yaw, z: 0 };\n}\n\nfunction applyTransformToOverlay(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n transform: EditorTransformTrsSnapshot,\n): void {\n applyTransformToRoot(options, overlay.root, transform);\n applyMarkerFocusFrameToRoot(overlay.root, transform);\n applyMarkerFrameTransform(options, overlay, transform);\n applyMarkerLabelTransform(options, overlay, transform);\n}\n\nfunction applyMarkerFocusFrameToRoot(root: any, transform: EditorTransformTrsSnapshot): void {\n if (!root) return;\n const bounds = createTransformBounds(transform);\n const radius = Math.max(1, Math.hypot(bounds.size.x, bounds.size.y, bounds.size.z) / 2);\n root.metadata = {\n ...(root.metadata ?? {}),\n editorFocusFrame: {\n center: { ...bounds.center },\n radius,\n },\n };\n}\n\nfunction applyMarkerFrameTransform(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n transform: EditorTransformTrsSnapshot,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!Vector3 || !overlay.frameRoot) return;\n overlay.frameRoot.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n overlay.frameRoot.rotationQuaternion = null;\n overlay.frameRoot.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n overlay.frameRoot.scaling = new Vector3(1, 1, 1);\n applyMarkerFrameDimensions(options, overlay, transform.scale);\n}\n\nfunction applyMarkerFrameDimensions(\n options: BabylonEditorMarkerOverlayOptions,\n overlay: ActiveMarkerOverlay,\n markerSize: EditorTransformVec3,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!Vector3) return;\n const maxSize = Math.max(Math.abs(markerSize.x), Math.abs(markerSize.y), Math.abs(markerSize.z));\n const presentationScale = overlay.presentation === 'anchor' ? 1.55 : overlay.presentation === 'point' ? 1.18 : 1;\n const shaftLength = Math.max(0.75, Math.min(2.2, maxSize * 0.45 * presentationScale));\n const headLength = Math.max(0.2, Math.min(0.34, shaftLength * 0.28));\n const shaftDiameter = Math.max(0.055, Math.min(0.12, shaftLength * 0.075 * presentationScale));\n const headDiameter = Math.max(0.18, Math.min(0.3, shaftLength * 0.22));\n const anchorDiameter = Math.max(0.18, Math.min(0.34, shaftLength * 0.2 * presentationScale));\n if (overlay.anchorMesh) {\n overlay.anchorMesh.position = new Vector3(0, 0, 0);\n overlay.anchorMesh.scaling = new Vector3(anchorDiameter, anchorDiameter, anchorDiameter);\n }\n if (overlay.forwardShaft) {\n overlay.forwardShaft.position = new Vector3(0, 0, shaftLength / 2);\n overlay.forwardShaft.scaling = new Vector3(shaftDiameter, shaftLength, shaftDiameter);\n }\n if (overlay.forwardHead) {\n overlay.forwardHead.position = new Vector3(0, 0, shaftLength + headLength / 2);\n overlay.forwardHead.scaling = new Vector3(headDiameter, headLength, headDiameter);\n }\n if (overlay.frameLines) {\n const lineScale = Math.max(1, Math.min(3, shaftLength / 0.72));\n overlay.frameLines.scaling = new Vector3(lineScale, lineScale, lineScale);\n }\n}\n\nfunction applyTransformToRoot(\n options: BabylonEditorMarkerOverlayOptions,\n root: any,\n transform: EditorTransformTrsSnapshot,\n): void {\n const Vector3 = (options.babylon as any).Vector3;\n if (!root || !Vector3) return;\n root.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n root.rotationQuaternion = null;\n root.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n root.scaling = new Vector3(transform.scale.x, transform.scale.y, transform.scale.z);\n}\n\nfunction readRootTransform(root: any): EditorTransformTrsSnapshot | null {\n if (!root) return null;\n const rotation = root.rotationQuaternion?.toEulerAngles?.() ?? root.rotation;\n const transform = {\n position: readVec3(root.position),\n rotation: readVec3(rotation),\n scale: readVec3(root.scaling),\n };\n if (!transform.position || !transform.rotation || !transform.scale) return null;\n return transform as EditorTransformTrsSnapshot;\n}\n\nfunction readVec3(value: any): EditorTransformVec3 | null {\n if (!Number.isFinite(value?.x) || !Number.isFinite(value?.y) || !Number.isFinite(value?.z)) return null;\n return {\n x: Number(value.x),\n y: Number(value.y),\n z: Number(value.z),\n };\n}\n\nfunction averagePositions(transforms: readonly EditorTransformTrsSnapshot[]): EditorTransformVec3 {\n return {\n x: transforms.reduce((sum, transform) => sum + transform.position.x, 0) / transforms.length,\n y: transforms.reduce((sum, transform) => sum + transform.position.y, 0) / transforms.length,\n z: transforms.reduce((sum, transform) => sum + transform.position.z, 0) / transforms.length,\n };\n}\n\nfunction addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n}\n\nfunction subtractVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x - right.x,\n y: left.y - right.y,\n z: left.z - right.z,\n };\n}\n\nfunction scaleVec3(value: EditorTransformVec3, scalar: number): EditorTransformVec3 {\n return {\n x: value.x * scalar,\n y: value.y * scalar,\n z: value.z * scalar,\n };\n}\n\nfunction vec3Length(value: EditorTransformVec3): number {\n return Math.sqrt(value.x * value.x + value.y * value.y + value.z * value.z);\n}\n\nfunction combineTransformBounds(transforms: readonly EditorTransformTrsSnapshot[]): BabylonEditorProjectionBounds | null {\n let combined: BabylonEditorProjectionBounds | null = null;\n for (const transform of transforms) {\n combined = combineBounds(combined, createTransformBounds(transform));\n }\n return combined;\n}\n\nfunction createTransformBounds(transform: EditorTransformTrsSnapshot): BabylonEditorProjectionBounds {\n const half = {\n x: Math.abs(transform.scale.x) / 2,\n y: Math.abs(transform.scale.y) / 2,\n z: Math.abs(transform.scale.z) / 2,\n };\n const corners = [\n { x: -half.x, y: -half.y, z: -half.z },\n { x: half.x, y: -half.y, z: -half.z },\n { x: -half.x, y: half.y, z: -half.z },\n { x: half.x, y: half.y, z: -half.z },\n { x: -half.x, y: -half.y, z: half.z },\n { x: half.x, y: -half.y, z: half.z },\n { x: -half.x, y: half.y, z: half.z },\n { x: half.x, y: half.y, z: half.z },\n ].map(corner => addVec3(rotateVec3ByEuler(corner, transform.rotation), transform.position));\n const min = {\n x: Math.min(...corners.map(corner => corner.x)),\n y: Math.min(...corners.map(corner => corner.y)),\n z: Math.min(...corners.map(corner => corner.z)),\n };\n const max = {\n x: Math.max(...corners.map(corner => corner.x)),\n y: Math.max(...corners.map(corner => corner.y)),\n z: Math.max(...corners.map(corner => corner.z)),\n };\n return {\n min,\n max,\n center: {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n },\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n oriented: {\n center: { ...transform.position },\n size: {\n x: Math.abs(transform.scale.x),\n y: Math.abs(transform.scale.y),\n z: Math.abs(transform.scale.z),\n },\n axes: {\n x: rotateVec3ByEuler({ x: 1, y: 0, z: 0 }, transform.rotation),\n y: rotateVec3ByEuler({ x: 0, y: 1, z: 0 }, transform.rotation),\n z: rotateVec3ByEuler({ x: 0, y: 0, z: 1 }, transform.rotation),\n },\n },\n };\n}\n\nfunction rotateVec3ByEuler(\n value: EditorTransformVec3,\n rotation: EditorTransformVec3,\n): EditorTransformVec3 {\n const cx = Math.cos(rotation.x);\n const sx = Math.sin(rotation.x);\n const cy = Math.cos(rotation.y);\n const sy = Math.sin(rotation.y);\n const cz = Math.cos(rotation.z);\n const sz = Math.sin(rotation.z);\n const afterX = {\n x: value.x,\n y: value.y * cx - value.z * sx,\n z: value.y * sx + value.z * cx,\n };\n const afterY = {\n x: afterX.x * cy + afterX.z * sy,\n y: afterX.y,\n z: -afterX.x * sy + afterX.z * cy,\n };\n return {\n x: afterY.x * cz - afterY.y * sz,\n y: afterY.x * sz + afterY.y * cz,\n z: afterY.z,\n };\n}\n\nfunction combineBounds(\n left: BabylonEditorProjectionBounds | null,\n right: BabylonEditorProjectionBounds | null,\n): BabylonEditorProjectionBounds | null {\n if (!left) return right ? cloneBounds(right) : null;\n if (!right) return cloneBounds(left);\n const min = {\n x: Math.min(left.min.x, right.min.x),\n y: Math.min(left.min.y, right.min.y),\n z: Math.min(left.min.z, right.min.z),\n };\n const max = {\n x: Math.max(left.max.x, right.max.x),\n y: Math.max(left.max.y, right.max.y),\n z: Math.max(left.max.z, right.max.z),\n };\n return {\n min,\n max,\n center: {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n },\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n };\n}\n\nfunction cloneBounds(bounds: BabylonEditorProjectionBounds): BabylonEditorProjectionBounds {\n return {\n min: { ...bounds.min },\n max: { ...bounds.max },\n center: { ...bounds.center },\n size: { ...bounds.size },\n ...(bounds.oriented ? {\n oriented: {\n center: { ...bounds.oriented.center },\n size: { ...bounds.oriented.size },\n axes: {\n x: { ...bounds.oriented.axes.x },\n y: { ...bounds.oriented.axes.y },\n z: { ...bounds.oriented.axes.z },\n },\n },\n } : {}),\n };\n}\n"]}