Enhance error handling and variable usage in batch transform methods of viewport-host.ts

This commit is contained in:
2026-04-15 15:02:30 +02:00
parent 567fa62b7d
commit 250466f76b

View File

@@ -2940,7 +2940,16 @@ export class ViewportHost {
axisConstraint: TransformAxis | null, axisConstraint: TransformAxis | null,
axisConstraintSpace: TransformAxisSpace axisConstraintSpace: TransformAxisSpace
) { ) {
const initialPivot = session.target.initialPivot; if (
session.target.kind !== "brushes" &&
session.target.kind !== "modelInstances" &&
session.target.kind !== "entities"
) {
throw new Error("Batch translate preview requires a batch target.");
}
const target = session.target;
const initialPivot = target.initialPivot;
let nextPivot = { let nextPivot = {
...initialPivot ...initialPivot
}; };
@@ -3034,11 +3043,11 @@ export class ViewportHost {
z: nextPivot.z - initialPivot.z z: nextPivot.z - initialPivot.z
}; };
if (session.target.kind === "brushes") { if (target.kind === "brushes") {
return { return {
kind: "brushes" as const, kind: "brushes" as const,
pivot: nextPivot, pivot: nextPivot,
items: session.target.items.map((item) => ({ items: target.items.map((item) => ({
brushId: item.brushId, brushId: item.brushId,
center: { center: {
x: item.initialCenter.x + worldDelta.x, x: item.initialCenter.x + worldDelta.x,
@@ -3056,11 +3065,11 @@ export class ViewportHost {
}; };
} }
if (session.target.kind === "modelInstances") { if (target.kind === "modelInstances") {
return { return {
kind: "modelInstances" as const, kind: "modelInstances" as const,
pivot: nextPivot, pivot: nextPivot,
items: session.target.items.map((item) => ({ items: target.items.map((item) => ({
modelInstanceId: item.modelInstanceId, modelInstanceId: item.modelInstanceId,
position: { position: {
x: item.initialPosition.x + worldDelta.x, x: item.initialPosition.x + worldDelta.x,
@@ -3080,7 +3089,7 @@ export class ViewportHost {
return { return {
kind: "entities" as const, kind: "entities" as const,
pivot: nextPivot, pivot: nextPivot,
items: session.target.items.map((item) => ({ items: target.items.map((item) => ({
entityId: item.entityId, entityId: item.entityId,
position: { position: {
x: item.initialPosition.x + worldDelta.x, x: item.initialPosition.x + worldDelta.x,
@@ -3114,12 +3123,21 @@ export class ViewportHost {
axisConstraint: TransformAxis | null, axisConstraint: TransformAxis | null,
axisConstraintSpace: TransformAxisSpace axisConstraintSpace: TransformAxisSpace
) { ) {
if (
session.target.kind !== "brushes" &&
session.target.kind !== "modelInstances" &&
session.target.kind !== "entities"
) {
throw new Error("Batch rotate preview requires a batch target.");
}
const target = session.target;
const effectiveAxis = const effectiveAxis =
axisConstraint ?? this.getEffectiveRotationAxis(session); axisConstraint ?? this.getEffectiveRotationAxis(session);
const pointerDeltaDegrees = const pointerDeltaDegrees =
(current.x - origin.x - (current.y - origin.y)) * 0.5; (current.x - origin.x - (current.y - origin.y)) * 0.5;
const pointerDeltaRadians = (pointerDeltaDegrees * Math.PI) / 180; const pointerDeltaRadians = (pointerDeltaDegrees * Math.PI) / 180;
const pivotWorld = session.target.initialPivot; const pivotWorld = target.initialPivot;
const rotationAxis = const rotationAxis =
axisConstraint !== null && axisConstraint !== null &&
axisConstraintSpace === "local" && axisConstraintSpace === "local" &&
@@ -3137,13 +3155,13 @@ export class ViewportHost {
); );
const pivotVector = new Vector3(pivotWorld.x, pivotWorld.y, pivotWorld.z); const pivotVector = new Vector3(pivotWorld.x, pivotWorld.y, pivotWorld.z);
if (session.target.kind === "brushes") { if (target.kind === "brushes") {
return { return {
kind: "brushes" as const, kind: "brushes" as const,
pivot: { pivot: {
...pivotWorld ...pivotWorld
}, },
items: session.target.items.map((item) => { items: target.items.map((item) => {
const nextCenter = new Vector3( const nextCenter = new Vector3(
item.initialCenter.x - pivotWorld.x, item.initialCenter.x - pivotWorld.x,
item.initialCenter.y - pivotWorld.y, item.initialCenter.y - pivotWorld.y,
@@ -3187,13 +3205,13 @@ export class ViewportHost {
}; };
} }
if (session.target.kind === "modelInstances") { if (target.kind === "modelInstances") {
return { return {
kind: "modelInstances" as const, kind: "modelInstances" as const,
pivot: { pivot: {
...pivotWorld ...pivotWorld
}, },
items: session.target.items.map((item) => { items: target.items.map((item) => {
const nextPosition = new Vector3( const nextPosition = new Vector3(
item.initialPosition.x - pivotWorld.x, item.initialPosition.x - pivotWorld.x,
item.initialPosition.y - pivotWorld.y, item.initialPosition.y - pivotWorld.y,
@@ -3241,7 +3259,7 @@ export class ViewportHost {
pivot: { pivot: {
...pivotWorld ...pivotWorld
}, },
items: session.target.items.map((item) => { items: target.items.map((item) => {
const nextPosition = new Vector3( const nextPosition = new Vector3(
item.initialPosition.x - pivotWorld.x, item.initialPosition.x - pivotWorld.x,
item.initialPosition.y - pivotWorld.y, item.initialPosition.y - pivotWorld.y,
@@ -3340,7 +3358,15 @@ export class ViewportHost {
current: { x: number; y: number }, current: { x: number; y: number },
axisConstraint: TransformAxis | null axisConstraint: TransformAxis | null
) { ) {
const initialPivot = session.target.initialPivot; if (
session.target.kind !== "brushes" &&
session.target.kind !== "modelInstances"
) {
throw new Error("Batch scale preview requires a scalable batch target.");
}
const target = session.target;
const initialPivot = target.initialPivot;
const scaleFactor = const scaleFactor =
axisConstraint === null axisConstraint === null
? 1 + (current.x - origin.x - (current.y - origin.y)) * 0.01 ? 1 + (current.x - origin.x - (current.y - origin.y)) * 0.01
@@ -3353,13 +3379,13 @@ export class ViewportHost {
) * ) *
0.45; 0.45;
if (session.target.kind === "brushes") { if (target.kind === "brushes") {
return { return {
kind: "brushes" as const, kind: "brushes" as const,
pivot: { pivot: {
...initialPivot ...initialPivot
}, },
items: session.target.items.map((item) => { items: target.items.map((item) => {
const nextSize = { const nextSize = {
...item.initialSize ...item.initialSize
}; };
@@ -3407,7 +3433,7 @@ export class ViewportHost {
pivot: { pivot: {
...initialPivot ...initialPivot
}, },
items: session.target.items.map((item) => { items: target.items.map((item) => {
const nextScale = { const nextScale = {
...item.initialScale ...item.initialScale
}; };