Add axis constraint space parameter to transform session

This commit is contained in:
2026-04-11 02:38:00 +02:00
parent 9e47af9bc6
commit bb422a98f1
2 changed files with 13 additions and 3 deletions

View File

@@ -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<TransformSessionState, { kind: "active" }>),
axisConstraint
axisConstraint,
axisConstraintSpace
}
};
this.emit();

View File

@@ -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;