Enhance error handling and variable usage in batch transform methods of viewport-host.ts
This commit is contained in:
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user