Enhance viewport host for local axis constraint and rotation preview

This commit is contained in:
2026-04-12 00:42:36 +02:00
parent 6a8b480cf0
commit 00ce57dc15

View File

@@ -1399,7 +1399,11 @@ export class ViewportHost {
case "brushFace":
case "brushEdge":
case "brushVertex":
return null;
if (session.preview.kind !== "brush") {
return null;
}
return this.createRotationQuaternion(session.preview.rotationDegrees);
}
}
@@ -2117,7 +2121,8 @@ export class ViewportHost {
session,
origin,
current,
axisConstraint
axisConstraint,
axisConstraintSpace
);
}
@@ -2684,7 +2689,8 @@ export class ViewportHost {
session: ActiveTransformSession,
origin: { x: number; y: number },
current: { x: number; y: number },
axisConstraint: TransformAxis | null
axisConstraint: TransformAxis | null,
axisConstraintSpace: TransformAxisSpace
) {
const initialBrush = this.createTargetPreviewBrush(session);
@@ -2732,6 +2738,40 @@ export class ViewportHost {
};
}
} else {
if (
axisConstraintSpace === "local" &&
supportsLocalTransformAxisConstraint(session, axisConstraint)
) {
const axisVector = this.getConstraintAxisWorldVector(
session,
axisConstraint,
axisConstraintSpace
);
const axisDelta = this.getMovementDistanceAlongWorldAxis(
axisVector,
initialPivot,
origin,
current
);
const snappedAxisDelta = this.whiteboxSnapEnabled
? snapValueToGrid(axisDelta, this.whiteboxSnapStep)
: axisDelta;
const localDelta = {
x: 0,
y: 0,
z: 0
};
localDelta[axisConstraint] = snappedAxisDelta;
const vertexIds = this.getComponentTargetVertexIds(session.target);
const nextGeometry = this.applyDeltaToVertices(
initialBrush,
vertexIds,
localDelta
);
return this.createBrushPreviewFromGeometry(initialBrush, nextGeometry);
}
const axisDelta = this.getAxisMovementDistance(
axisConstraint,
initialPivot,