diff --git a/src/app/editor-store.ts b/src/app/editor-store.ts index 4ea667f3..0504eaa7 100644 --- a/src/app/editor-store.ts +++ b/src/app/editor-store.ts @@ -12,6 +12,7 @@ import { cloneTransformSession, createInactiveTransformSession, type TransformAxis, + type TransformAxisSpace, type TransformSessionState } from "../core/transform-session"; import { createEmptySceneDocument, type SceneDocument } from "../document/scene-document"; @@ -292,12 +293,15 @@ export class EditorStore { this.emit(); } - setTransformAxisConstraint(axisConstraint: TransformAxis | null) { + setTransformAxisConstraint(axisConstraint: TransformAxis | null, axisConstraintSpace: TransformAxisSpace = "world") { if (this.viewportTransientState.transformSession.kind !== "active") { return; } - if (this.viewportTransientState.transformSession.axisConstraint === axisConstraint) { + if ( + this.viewportTransientState.transformSession.axisConstraint === axisConstraint && + this.viewportTransientState.transformSession.axisConstraintSpace === axisConstraintSpace + ) { return; } @@ -305,7 +309,8 @@ export class EditorStore { ...this.viewportTransientState, transformSession: { ...(cloneTransformSession(this.viewportTransientState.transformSession) as Extract), - axisConstraint + axisConstraint, + axisConstraintSpace } }; this.emit(); diff --git a/src/viewport-three/viewport-host.ts b/src/viewport-three/viewport-host.ts index bd9597e8..5a31eb08 100644 --- a/src/viewport-three/viewport-host.ts +++ b/src/viewport-three/viewport-host.ts @@ -9,6 +9,7 @@ import { CylinderGeometry, DirectionalLight, EdgesGeometry, + Euler, GridHelper, Group, Line, @@ -56,10 +57,12 @@ import { createTransformPreviewFromTarget, createTransformSession, resolveTransformTarget, + supportsLocalTransformAxisConstraint, supportsTransformOperation, supportsTransformAxisConstraint, type ActiveTransformSession, type TransformAxis, + type TransformAxisSpace, type TransformSessionState } from "../core/transform-session"; import type { ToolMode } from "../core/tool-mode"; @@ -257,6 +260,8 @@ const SCALE_SNAP_STEP = 0.1; const MIN_SCALE_COMPONENT = 0.1; const MIN_BOX_SIZE_COMPONENT = 0.01; const WATER_REFLECTION_UPDATE_INTERVAL_MS = 96; +const VIEWPORT_GRID_VISUAL_SIZE = 400; +const VIEWPORT_GRID_VISUAL_DIVISIONS = 400; interface CachedMaterialTexture { signature: string;