@fps-games/editor 0.1.1-beta.7 → 0.1.1-beta.8

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 (52) hide show
  1. package/dist/local-editor-harness.d.ts +14 -2
  2. package/dist/local-editor-harness.d.ts.map +1 -1
  3. package/dist/local-editor-harness.js +330 -2
  4. package/dist/local-editor-harness.js.map +1 -1
  5. package/node_modules/@fps-games/editor-babylon/dist/index.d.ts +2 -0
  6. package/node_modules/@fps-games/editor-babylon/dist/index.d.ts.map +1 -1
  7. package/node_modules/@fps-games/editor-babylon/dist/index.js +2 -0
  8. package/node_modules/@fps-games/editor-babylon/dist/index.js.map +1 -1
  9. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts +18 -0
  10. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts.map +1 -1
  11. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js +142 -0
  12. package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js.map +1 -1
  13. package/node_modules/@fps-games/editor-babylon/dist/scene-view-input-controller.d.ts +1 -0
  14. package/node_modules/@fps-games/editor-babylon/dist/scene-view-input-controller.d.ts.map +1 -1
  15. package/node_modules/@fps-games/editor-babylon/dist/scene-view-input-controller.js +3 -1
  16. package/node_modules/@fps-games/editor-babylon/dist/scene-view-input-controller.js.map +1 -1
  17. package/node_modules/@fps-games/editor-babylon/dist/scene-view-measurement-controller.d.ts +20 -0
  18. package/node_modules/@fps-games/editor-babylon/dist/scene-view-measurement-controller.d.ts.map +1 -0
  19. package/node_modules/@fps-games/editor-babylon/dist/scene-view-measurement-controller.js +187 -0
  20. package/node_modules/@fps-games/editor-babylon/dist/scene-view-measurement-controller.js.map +1 -0
  21. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts +20 -0
  22. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -0
  23. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +188 -0
  24. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -0
  25. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +4 -0
  26. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  27. package/node_modules/@fps-games/editor-babylon/package.json +4 -4
  28. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  29. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  30. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +42 -0
  31. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  32. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +16 -1
  33. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  34. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +1 -1
  35. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  36. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +502 -6
  37. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  38. package/node_modules/@fps-games/editor-browser/package.json +2 -2
  39. package/node_modules/@fps-games/editor-core/dist/index.d.ts +1 -0
  40. package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
  41. package/node_modules/@fps-games/editor-core/dist/index.js +1 -0
  42. package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
  43. package/node_modules/@fps-games/editor-core/dist/scene-view-input.d.ts +1 -1
  44. package/node_modules/@fps-games/editor-core/dist/scene-view-input.d.ts.map +1 -1
  45. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +94 -0
  46. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -0
  47. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +58 -0
  48. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -0
  49. package/node_modules/@fps-games/editor-core/package.json +2 -2
  50. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  51. package/node_modules/@fps-games/editor-protocol/package.json +1 -1
  52. package/package.json +6 -6
@@ -1,6 +1,6 @@
1
- import { type AuthoringCommandResult, type AuthoringSourceDescriptor, type DocumentCommand, type EditorPlacementHit, type EditorTransformBatchCommit, type EditorTransformCanonicalConstraint, type EditorTransformSnapshot, type EditorTransformSpace, type EditorTransformTool, type SceneGraphCreateGroupIntent, type SceneGraphCreatePrimitiveIntent, type SceneGraphDeleteIntent, type SceneGraphDropIntent, type SceneGraphGroupSelectionIntent, type SceneGraphMoveIntent, type SceneGraphRenameIntent, type SceneGraphValidationResult, type SerializedMultiObject, type SerializedObject, type InspectorControlKind, type InspectorCommitMode, type InspectorComponentRegistration, type InspectorEditPayload, type InspectorObject, type InspectorPersistenceMode, type InspectorProperty, type InspectorRegistry, type InspectorRegistryConflictStrategy, type InspectorSection, type InspectorSelectionContext, type EditorHostServices, type ProjectAuthoringHost } from '@fps-games/editor-core';
1
+ import { type AuthoringCommandResult, type AuthoringSourceDescriptor, type DocumentCommand, type EditorPlacementHit, type EditorTransformBatchCommit, type EditorTransformCanonicalConstraint, type EditorTransformSnapshot, type EditorTransformSpace, type EditorTransformTool, type EditorViewportGroundMeasurement, type EditorViewportToolState, type SceneGraphCreateGroupIntent, type SceneGraphCreatePrimitiveIntent, type SceneGraphDeleteIntent, type SceneGraphDropIntent, type SceneGraphGroupSelectionIntent, type SceneGraphMoveIntent, type SceneGraphRenameIntent, type SceneGraphValidationResult, type SerializedMultiObject, type SerializedObject, type InspectorControlKind, type InspectorCommitMode, type InspectorComponentRegistration, type InspectorEditPayload, type InspectorObject, type InspectorPersistenceMode, type InspectorProperty, type InspectorRegistry, type InspectorRegistryConflictStrategy, type InspectorSection, type InspectorSelectionContext, type EditorHostServices, type ProjectAuthoringHost } from '@fps-games/editor-core';
2
2
  import { type LocalEditorBrowserUiAssetItem, type LocalEditorBrowserInspectorOptions, type LocalEditorBrowserUiHierarchyItem, type LocalEditorThemeController, type LocalEditorThemeName } from '@fps-games/editor-browser';
3
- import { type BabylonEditorProjectionImportContext, type BabylonEditorProjectionImportResult, type BabylonEditorProjectionNode, type BabylonSceneCameraPreviewRig, type BabylonEditorGridController, type BabylonEditorSkyOptions, type BabylonRuntimeGlobal } from '@fps-games/editor-babylon';
3
+ import { type BabylonSceneViewMeasurementController, type BabylonEditorProjectionImportContext, type BabylonEditorProjectionImportResult, type BabylonEditorProjectionNode, type BabylonSceneCameraPreviewRig, type BabylonEditorGridController, type BabylonEditorSkyOptions, type BabylonRuntimeGlobal } from '@fps-games/editor-babylon';
4
4
  export type LocalEditorHarnessMode = 'game' | 'editor';
5
5
  type LocalEditorMaybePromise<T> = T | Promise<T>;
6
6
  export interface LocalEditorAuthoringFailureStatus {
@@ -14,6 +14,15 @@ export interface LocalEditorHarnessAssetItem {
14
14
  placeable?: boolean;
15
15
  raw?: unknown;
16
16
  }
17
+ export interface LocalEditorHarnessViewportMeasurementState {
18
+ viewportTools: EditorViewportToolState;
19
+ viewportMeasurement: EditorViewportGroundMeasurement;
20
+ sceneViewMeasurement: Pick<BabylonSceneViewMeasurementController, 'beginAt' | 'previewAt' | 'completeAt' | 'clear'> | null;
21
+ status: string;
22
+ statusTone?: 'default' | 'success' | 'warning' | 'error';
23
+ statusToneStatus: string;
24
+ statusDetails: string;
25
+ }
17
26
  export interface LocalEditorHarnessPropertyInput<TDocument = unknown> {
18
27
  document: TDocument;
19
28
  targetId: string;
@@ -282,6 +291,9 @@ export interface LocalEditorHarness<TDocument = unknown> {
282
291
  }
283
292
  export declare function createLocalEditorHarness<TDocument, TPatch, TAsset = LocalEditorHarnessAssetItem>(options: LocalEditorHarnessOptions<TDocument, TPatch, TAsset>): LocalEditorHarness<TDocument> & LocalEditorThemeController;
284
293
  export declare function mergeLocalEditorHarnessInspectorComponentSections<TDocument>(input: LocalEditorHarnessInspectorComponentMergeInput<TDocument>): InspectorObject<TDocument>;
294
+ export declare function applyLocalEditorHarnessViewportMeasurementPointerStart(state: LocalEditorHarnessViewportMeasurementState, event: Pick<PointerEvent, 'clientX' | 'clientY'>): boolean;
295
+ export declare function applyLocalEditorHarnessViewportMeasurementPointerMove(state: LocalEditorHarnessViewportMeasurementState, event: Pick<PointerEvent, 'clientX' | 'clientY'>): boolean;
296
+ export declare function applyLocalEditorHarnessViewportMeasurementPointerEnd(_state: LocalEditorHarnessViewportMeasurementState): boolean;
285
297
  export declare function summarizeLocalEditorAuthoringFailure(result: AuthoringCommandResult<unknown>): LocalEditorAuthoringFailureStatus;
286
298
  export {};
287
299
  //# sourceMappingURL=local-editor-harness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-editor-harness.d.ts","sourceRoot":"","sources":["../src/local-editor-harness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-editor-harness.d.ts","sourceRoot":"","sources":["../src/local-editor-harness.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { createEditorSession, createInspectorRegistry, DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS, createInspectorEditPayload, computeEditorTransformActionTargets, mergeInspectorSections, normalizeEditorTransformConstraint, resolveEditorSelectionCommand, serializedMultiObjectToInspectorObject, serializedObjectToInspectorObject, validateSceneGraphDelete, validateSceneGraphDrop, validateSceneGraphGroupSelection, validateSceneGraphMove, validateSceneGraphRename, } from '@fps-games/editor-core';
1
+ import { createEditorSession, createInspectorRegistry, DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS, DEFAULT_EDITOR_VIEWPORT_TOOL_STATE, createEmptyEditorViewportSpatialOverlayState, cloneEditorViewportToolState, cloneEditorViewportSpatialOverlayState, createInspectorEditPayload, computeEditorTransformActionTargets, mergeInspectorSections, normalizeEditorTransformConstraint, resolveEditorSelectionCommand, serializedMultiObjectToInspectorObject, serializedObjectToInspectorObject, validateSceneGraphDelete, validateSceneGraphDrop, validateSceneGraphGroupSelection, validateSceneGraphMove, validateSceneGraphRename, } from '@fps-games/editor-core';
2
2
  import { createLocalEditorBrowserUi, } from '@fps-games/editor-browser';
3
- import { createBabylonEditorProjection, createBabylonEditorWorld, createBabylonProjectionSelectionController, createBabylonSceneCameraPreviewController, createBabylonSceneViewCameraController, createBabylonSceneViewInputController, createBabylonTransformGizmoController, focusEditorViewportSelection, } from '@fps-games/editor-babylon';
3
+ import { createBabylonEditorProjection, createBabylonEditorWorld, createBabylonProjectionSelectionController, createBabylonSceneCameraPreviewController, createBabylonSceneViewCameraController, createBabylonSceneViewInputController, createBabylonSceneViewMeasurementController, createBabylonSceneViewSpatialOverlayController, createBabylonTransformGizmoController, focusEditorViewportSelection, } from '@fps-games/editor-babylon';
4
4
  export function createLocalEditorHarness(options) {
5
5
  const root = options.root ?? document.body;
6
6
  const state = {
@@ -21,12 +21,17 @@ export function createLocalEditorHarness(options) {
21
21
  sceneCameraPreviewEnabled: false,
22
22
  sceneViewInput: null,
23
23
  sceneViewCamera: null,
24
+ sceneViewMeasurement: null,
25
+ sceneViewSpatialOverlay: null,
24
26
  selectionController: null,
25
27
  boxSelection: null,
26
28
  transformTool: 'select',
27
29
  transformSpace: 'world',
28
30
  transformConstraint: 'axis',
29
31
  transformOperationSettings: cloneTransformOperationSettings(DEFAULT_EDITOR_TRANSFORM_OPERATION_SETTINGS),
32
+ viewportTools: cloneEditorViewportToolState(DEFAULT_EDITOR_VIEWPORT_TOOL_STATE),
33
+ viewportMeasurement: createEmptyViewportMeasurement(),
34
+ viewportSpatialOverlay: createEmptyEditorViewportSpatialOverlayState(),
30
35
  duplicateDrag: null,
31
36
  armedPlacement: null,
32
37
  resizeHandler: null,
@@ -186,6 +191,26 @@ export function createLocalEditorHarness(options) {
186
191
  if (executeTransformAction(state, options, action))
187
192
  harness.render();
188
193
  },
194
+ onViewportViewPresetChange: (preset) => {
195
+ if (setViewportViewPreset(state, preset))
196
+ harness.render();
197
+ },
198
+ onViewportProjectionModeChange: (mode) => {
199
+ if (setViewportProjectionMode(state, mode))
200
+ harness.render();
201
+ },
202
+ onViewportOverlaySettingsChange: (settings) => {
203
+ if (setViewportOverlaySettings(state, settings))
204
+ harness.render();
205
+ },
206
+ onViewportUtilityToolChange: (tool) => {
207
+ if (setViewportUtilityTool(state, tool))
208
+ harness.render();
209
+ },
210
+ onViewportMeasurementClear: () => {
211
+ if (clearViewportMeasurement(state))
212
+ harness.render();
213
+ },
189
214
  onSceneCameraPreviewToggle: (enabled) => {
190
215
  if (setSceneCameraPreviewEnabled(state, options, enabled))
191
216
  harness.render();
@@ -211,6 +236,9 @@ export function createLocalEditorHarness(options) {
211
236
  harness = {
212
237
  render() {
213
238
  syncSceneCameraPreview(state, options);
239
+ syncViewportCameraState(state);
240
+ syncViewportMeasurementState(state);
241
+ syncViewportSpatialOverlay(state);
214
242
  ui.update(createUiState(state, options));
215
243
  },
216
244
  setTheme(theme) {
@@ -424,6 +452,224 @@ function normalizePositiveStep(value) {
424
452
  function normalizePlacementMode(mode) {
425
453
  return mode === 'ground' || mode === 'surface' ? mode : 'off';
426
454
  }
455
+ function normalizeViewportViewPreset(preset) {
456
+ return preset === 'top' || preset === 'front' || preset === 'right' ? preset : 'perspective';
457
+ }
458
+ function normalizeViewportProjectionMode(mode) {
459
+ return mode === 'orthographic' ? 'orthographic' : 'perspective';
460
+ }
461
+ function createEmptyViewportMeasurement() {
462
+ return {
463
+ active: false,
464
+ start: null,
465
+ end: null,
466
+ preview: null,
467
+ distance: null,
468
+ screenStart: null,
469
+ screenEnd: null,
470
+ screenPreview: null,
471
+ label: null,
472
+ };
473
+ }
474
+ function cloneViewportMeasurement(measurement) {
475
+ return {
476
+ active: measurement.active,
477
+ start: measurement.start ? { ...measurement.start } : null,
478
+ end: measurement.end ? { ...measurement.end } : null,
479
+ preview: measurement.preview ? { ...measurement.preview } : null,
480
+ distance: measurement.distance,
481
+ screenStart: measurement.screenStart ? { ...measurement.screenStart } : null,
482
+ screenEnd: measurement.screenEnd ? { ...measurement.screenEnd } : null,
483
+ screenPreview: measurement.screenPreview ? { ...measurement.screenPreview } : null,
484
+ label: measurement.label ? { ...measurement.label } : null,
485
+ };
486
+ }
487
+ function setViewportViewPreset(state, preset) {
488
+ if (state.sceneCameraPreviewEnabled) {
489
+ state.status = 'Viewport view unavailable during Scene Camera preview';
490
+ state.statusTone = 'warning';
491
+ state.statusToneStatus = state.status;
492
+ state.statusDetails = 'Disable Scene Camera preview before switching editor viewport views.';
493
+ return true;
494
+ }
495
+ const nextPreset = normalizeViewportViewPreset(preset);
496
+ const target = resolveViewportPresetTarget(state);
497
+ const radius = resolveViewportPresetRadius(state);
498
+ const changed = state.sceneViewCamera?.setViewPreset(nextPreset, { target, radius }) ?? false;
499
+ if (!changed)
500
+ return false;
501
+ const cameraState = state.sceneViewCamera?.getState();
502
+ state.viewportTools = {
503
+ ...state.viewportTools,
504
+ viewPreset: cameraState?.viewPreset ?? nextPreset,
505
+ projectionMode: cameraState?.projectionMode ?? (nextPreset === 'perspective' ? 'perspective' : 'orthographic'),
506
+ };
507
+ state.status = `Viewport view: ${state.viewportTools.viewPreset}`;
508
+ state.statusTone = 'default';
509
+ state.statusToneStatus = state.status;
510
+ state.statusDetails = '';
511
+ return true;
512
+ }
513
+ function setViewportProjectionMode(state, mode) {
514
+ if (state.sceneCameraPreviewEnabled) {
515
+ state.status = 'Viewport projection unavailable during Scene Camera preview';
516
+ state.statusTone = 'warning';
517
+ state.statusToneStatus = state.status;
518
+ state.statusDetails = 'Disable Scene Camera preview before switching editor viewport projection.';
519
+ return true;
520
+ }
521
+ const nextMode = normalizeViewportProjectionMode(mode);
522
+ const changed = state.sceneViewCamera?.setProjectionMode(nextMode) ?? false;
523
+ if (!changed)
524
+ return false;
525
+ const cameraState = state.sceneViewCamera?.getState();
526
+ state.viewportTools = {
527
+ ...state.viewportTools,
528
+ projectionMode: cameraState?.projectionMode ?? nextMode,
529
+ };
530
+ state.status = `Viewport projection: ${state.viewportTools.projectionMode}`;
531
+ state.statusTone = 'default';
532
+ state.statusToneStatus = state.status;
533
+ state.statusDetails = '';
534
+ return true;
535
+ }
536
+ function setViewportOverlaySettings(state, settings) {
537
+ state.viewportTools = {
538
+ ...state.viewportTools,
539
+ overlay: {
540
+ ...state.viewportTools.overlay,
541
+ bounds: settings.bounds ?? state.viewportTools.overlay.bounds,
542
+ dimensions: settings.dimensions ?? state.viewportTools.overlay.dimensions,
543
+ edgeLengths: settings.edgeLengths ?? state.viewportTools.overlay.edgeLengths,
544
+ anchor: settings.anchor ?? state.viewportTools.overlay.anchor,
545
+ },
546
+ };
547
+ state.status = 'Viewport overlay settings updated';
548
+ state.statusTone = 'default';
549
+ state.statusToneStatus = state.status;
550
+ state.statusDetails = '';
551
+ return true;
552
+ }
553
+ function setViewportUtilityTool(state, tool) {
554
+ const nextTool = tool === 'measure-distance' ? 'measure-distance' : 'none';
555
+ state.viewportTools = {
556
+ ...state.viewportTools,
557
+ activeUtilityTool: nextTool,
558
+ };
559
+ if (nextTool === 'measure-distance') {
560
+ state.viewportMeasurement = {
561
+ ...cloneViewportMeasurement(state.viewportMeasurement),
562
+ active: !!state.viewportMeasurement.start && !state.viewportMeasurement.end,
563
+ };
564
+ state.status = 'Measure distance: pick first XZ ground point';
565
+ }
566
+ else {
567
+ const unfinishedMeasurement = state.viewportMeasurement.active
568
+ || (!!state.viewportMeasurement.start && !state.viewportMeasurement.end);
569
+ state.viewportMeasurement = unfinishedMeasurement
570
+ ? state.sceneViewMeasurement?.clear() ?? createEmptyViewportMeasurement()
571
+ : {
572
+ ...cloneViewportMeasurement(state.viewportMeasurement),
573
+ active: false,
574
+ preview: null,
575
+ screenPreview: null,
576
+ };
577
+ state.status = 'Viewport utility: none';
578
+ }
579
+ state.statusTone = 'default';
580
+ state.statusToneStatus = state.status;
581
+ state.statusDetails = '';
582
+ return true;
583
+ }
584
+ function clearViewportMeasurement(state) {
585
+ state.viewportMeasurement = state.sceneViewMeasurement?.clear() ?? createEmptyViewportMeasurement();
586
+ state.viewportTools = {
587
+ ...state.viewportTools,
588
+ activeUtilityTool: 'none',
589
+ };
590
+ state.status = 'Measurement cleared';
591
+ state.statusTone = 'default';
592
+ state.statusToneStatus = state.status;
593
+ state.statusDetails = '';
594
+ return true;
595
+ }
596
+ export function applyLocalEditorHarnessViewportMeasurementPointerStart(state, event) {
597
+ if (state.viewportTools.activeUtilityTool !== 'measure-distance')
598
+ return false;
599
+ if (!state.viewportMeasurement.start || state.viewportMeasurement.end) {
600
+ const next = state.sceneViewMeasurement?.beginAt(event.clientX, event.clientY) ?? null;
601
+ if (!next)
602
+ return false;
603
+ state.viewportMeasurement = next;
604
+ state.status = 'Measure distance: pick second XZ ground point';
605
+ state.statusTone = 'default';
606
+ state.statusToneStatus = state.status;
607
+ state.statusDetails = '';
608
+ return true;
609
+ }
610
+ const next = state.sceneViewMeasurement?.completeAt(event.clientX, event.clientY) ?? null;
611
+ if (!next)
612
+ return false;
613
+ state.viewportMeasurement = next;
614
+ state.viewportTools = {
615
+ ...state.viewportTools,
616
+ activeUtilityTool: 'none',
617
+ };
618
+ state.status = `Measured distance: ${formatViewportMeasurementDistance(next.distance)} units`;
619
+ state.statusTone = 'default';
620
+ state.statusToneStatus = state.status;
621
+ state.statusDetails = next.start && next.end
622
+ ? `A (${formatViewportMeasurementDistance(next.start.x)}, ${formatViewportMeasurementDistance(next.start.z)}) · B (${formatViewportMeasurementDistance(next.end.x)}, ${formatViewportMeasurementDistance(next.end.z)})`
623
+ : '';
624
+ return true;
625
+ }
626
+ export function applyLocalEditorHarnessViewportMeasurementPointerMove(state, event) {
627
+ if (state.viewportTools.activeUtilityTool !== 'measure-distance')
628
+ return false;
629
+ const next = state.sceneViewMeasurement?.previewAt(event.clientX, event.clientY) ?? null;
630
+ if (!next)
631
+ return false;
632
+ state.viewportMeasurement = next;
633
+ return true;
634
+ }
635
+ export function applyLocalEditorHarnessViewportMeasurementPointerEnd(_state) {
636
+ return false;
637
+ }
638
+ function handleViewportMeasurementStart(state, event) {
639
+ return applyLocalEditorHarnessViewportMeasurementPointerStart(state, event);
640
+ }
641
+ function handleViewportMeasurementMove(state, event) {
642
+ return applyLocalEditorHarnessViewportMeasurementPointerMove(state, event);
643
+ }
644
+ function handleViewportMeasurementEnd(state) {
645
+ return applyLocalEditorHarnessViewportMeasurementPointerEnd(state);
646
+ }
647
+ function formatViewportMeasurementDistance(value) {
648
+ if (!Number.isFinite(value))
649
+ return '0';
650
+ const rounded = Math.abs(value) < 0.005 ? 0 : value;
651
+ return rounded.toFixed(2).replace(/\.?0+$/, '');
652
+ }
653
+ function resolveViewportPresetTarget(state) {
654
+ const selection = state.session?.getState().selection;
655
+ const activeId = selection?.activeId ?? null;
656
+ if (!activeId || selection?.selectedIds.length !== 1)
657
+ return null;
658
+ const bounds = state.projection?.getSelectionBounds([activeId]) ?? null;
659
+ return bounds?.center ?? null;
660
+ }
661
+ function resolveViewportPresetRadius(state) {
662
+ const selection = state.session?.getState().selection;
663
+ const activeId = selection?.activeId ?? null;
664
+ if (!activeId || selection?.selectedIds.length !== 1)
665
+ return undefined;
666
+ const bounds = state.projection?.getSelectionBounds([activeId]) ?? null;
667
+ if (!bounds)
668
+ return undefined;
669
+ const size = bounds.size;
670
+ const radius = Math.hypot(size.x, size.y, size.z);
671
+ return Number.isFinite(radius) && radius > 0 ? Math.max(radius * 1.5, 2) : undefined;
672
+ }
427
673
  function validateTransformActionSelection(state, action) {
428
674
  const selection = state.session?.getState().selection;
429
675
  const selectedCount = selection?.selectedIds.length ?? 0;
@@ -520,6 +766,10 @@ async function createEditorWorld(state, options, render) {
520
766
  render();
521
767
  },
522
768
  });
769
+ const sceneViewMeasurement = createBabylonSceneViewMeasurementController({
770
+ babylon,
771
+ scene: world.scene,
772
+ });
523
773
  const sceneViewInput = createBabylonSceneViewInputController({
524
774
  canvas,
525
775
  isEnabled: () => state.mode === 'editor',
@@ -527,7 +777,13 @@ async function createEditorWorld(state, options, render) {
527
777
  isBoxSelectCandidate: (event) => selectionController.isBoxSelectionCandidate(event),
528
778
  isViewPlaneMoveCandidate: (event) => gizmo.isViewPlaneMoveCandidate(event),
529
779
  isPlacementCandidate: () => isPlacementArmed(state),
780
+ isMeasurementCandidate: () => state.viewportTools.activeUtilityTool === 'measure-distance',
530
781
  onPointerIntentStart(event) {
782
+ if (event.state.intent === 'measurement') {
783
+ if (handleViewportMeasurementStart(state, event.originalEvent))
784
+ render();
785
+ return;
786
+ }
531
787
  if (event.state.intent === 'gizmo-drag') {
532
788
  gizmo.preparePointerDrag(event.originalEvent);
533
789
  return;
@@ -547,6 +803,11 @@ async function createEditorWorld(state, options, render) {
547
803
  }
548
804
  },
549
805
  onPointerIntentMove(event) {
806
+ if (event.state.intent === 'measurement') {
807
+ if (handleViewportMeasurementMove(state, event.originalEvent))
808
+ render();
809
+ return;
810
+ }
550
811
  if (event.state.intent === 'placement') {
551
812
  if (previewArmedPlacement(state, event.originalEvent))
552
813
  render();
@@ -566,6 +827,11 @@ async function createEditorWorld(state, options, render) {
566
827
  }
567
828
  },
568
829
  onPointerIntentEnd(event) {
830
+ if (event.state.intent === 'measurement') {
831
+ if (handleViewportMeasurementEnd(state))
832
+ render();
833
+ return;
834
+ }
569
835
  if (event.state.intent === 'placement') {
570
836
  if (commitArmedPlacement(state, options, event.originalEvent))
571
837
  render();
@@ -581,6 +847,10 @@ async function createEditorWorld(state, options, render) {
581
847
  }
582
848
  },
583
849
  onPointerIntentCancel(event) {
850
+ if (event.state.intent === 'measurement') {
851
+ render();
852
+ return;
853
+ }
584
854
  if (event.state.intent === 'placement') {
585
855
  state.gizmo?.setPlacementMarker(null);
586
856
  render();
@@ -615,6 +885,10 @@ async function createEditorWorld(state, options, render) {
615
885
  scene: world.scene,
616
886
  editorCamera: world.camera,
617
887
  });
888
+ const sceneViewSpatialOverlay = createBabylonSceneViewSpatialOverlayController({
889
+ babylon,
890
+ scene: world.scene,
891
+ });
618
892
  const document = state.session?.getState().workingDocument;
619
893
  if (document) {
620
894
  projection.projectNodes(options.documentAdapter.getProjectionNodes(document));
@@ -634,6 +908,8 @@ async function createEditorWorld(state, options, render) {
634
908
  state.sceneCameraPreview = sceneCameraPreview;
635
909
  state.sceneViewInput = sceneViewInput;
636
910
  state.sceneViewCamera = sceneViewCamera;
911
+ state.sceneViewMeasurement = sceneViewMeasurement;
912
+ state.sceneViewSpatialOverlay = sceneViewSpatialOverlay;
637
913
  state.selectionController = selectionController;
638
914
  state.resizeHandler = resize;
639
915
  }
@@ -647,11 +923,21 @@ function disposeEditorWorld(state) {
647
923
  state.sceneCameraPreviewEnabled = false;
648
924
  state.sceneViewCamera?.dispose();
649
925
  state.sceneViewCamera = null;
926
+ state.sceneViewMeasurement?.dispose();
927
+ state.sceneViewMeasurement = null;
928
+ state.sceneViewSpatialOverlay?.dispose();
929
+ state.sceneViewSpatialOverlay = null;
650
930
  state.sceneViewInput?.dispose();
651
931
  state.sceneViewInput = null;
652
932
  state.selectionController?.dispose();
653
933
  state.selectionController = null;
654
934
  state.boxSelection = null;
935
+ state.viewportSpatialOverlay = createEmptyEditorViewportSpatialOverlayState();
936
+ state.viewportMeasurement = createEmptyViewportMeasurement();
937
+ state.viewportTools = {
938
+ ...state.viewportTools,
939
+ activeUtilityTool: 'none',
940
+ };
655
941
  state.gizmo?.dispose();
656
942
  state.gizmo = null;
657
943
  state.projection?.dispose();
@@ -1654,6 +1940,11 @@ function cancelActiveOperation(state) {
1654
1940
  function cancelEditorIntent(state, options) {
1655
1941
  if (state.mode !== 'editor')
1656
1942
  return false;
1943
+ if (state.viewportTools.activeUtilityTool === 'measure-distance'
1944
+ || state.viewportMeasurement.start
1945
+ || state.viewportMeasurement.end) {
1946
+ return clearViewportMeasurement(state);
1947
+ }
1657
1948
  const selection = state.session?.getSelection();
1658
1949
  if (selection && selection.selectedIds.length > 0) {
1659
1950
  return dispatchSelectionCommand(state, options, { type: 'selection.clear', label: 'Clear Selection' });
@@ -1813,6 +2104,40 @@ function syncSceneCameraPreview(state, options) {
1813
2104
  controller.setActive(true, rig);
1814
2105
  return controller.isActive();
1815
2106
  }
2107
+ function syncViewportCameraState(state) {
2108
+ const cameraState = state.sceneViewCamera?.getState();
2109
+ if (!cameraState)
2110
+ return;
2111
+ state.viewportTools = {
2112
+ ...state.viewportTools,
2113
+ viewPreset: cameraState.viewPreset,
2114
+ projectionMode: cameraState.projectionMode,
2115
+ };
2116
+ }
2117
+ function syncViewportSpatialOverlay(state) {
2118
+ const overlay = state.sceneViewSpatialOverlay;
2119
+ const selection = state.session?.getState().selection;
2120
+ const activeId = selection?.activeId ?? null;
2121
+ if (state.mode !== 'editor' || !overlay || !activeId || selection?.selectedIds.length !== 1) {
2122
+ state.viewportSpatialOverlay = createEmptyEditorViewportSpatialOverlayState();
2123
+ return;
2124
+ }
2125
+ const bounds = state.projection?.getSelectionBounds([activeId]) ?? null;
2126
+ const anchor = state.projection?.readNodeTransform(activeId)?.position ?? bounds?.center ?? null;
2127
+ state.viewportSpatialOverlay = overlay.compute({
2128
+ nodeId: activeId,
2129
+ bounds,
2130
+ anchor,
2131
+ settings: state.viewportTools.overlay,
2132
+ });
2133
+ }
2134
+ function syncViewportMeasurementState(state) {
2135
+ if (state.mode !== 'editor')
2136
+ return;
2137
+ const measurement = state.sceneViewMeasurement?.getState();
2138
+ if (measurement)
2139
+ state.viewportMeasurement = measurement;
2140
+ }
1816
2141
  function hasSceneCameraPreviewRig(state, options) {
1817
2142
  const document = state.session?.getState().workingDocument ?? null;
1818
2143
  return !!document && !!options.documentAdapter.getSceneCameraPreviewRig?.(document);
@@ -1881,6 +2206,9 @@ function createUiState(state, options) {
1881
2206
  canAlign: selectedIds.length >= 2 && activeId != null,
1882
2207
  canDistribute: selectedIds.length >= 3,
1883
2208
  },
2209
+ viewportTools: cloneEditorViewportToolState(state.viewportTools),
2210
+ viewportMeasurement: cloneViewportMeasurement(state.viewportMeasurement),
2211
+ viewportSpatialOverlay: cloneEditorViewportSpatialOverlayState(state.viewportSpatialOverlay),
1884
2212
  sceneCameraPreview: {
1885
2213
  enabled: state.sceneCameraPreviewEnabled,
1886
2214
  available: hasSceneCameraPreviewRig(state, options),