Update brush geometry and transformation functions

This commit is contained in:
2026-04-15 07:58:59 +02:00
parent 4825b6dc0b
commit e070366e14

View File

@@ -2872,7 +2872,7 @@ export class ViewportHost {
center: { ...initialBrush.center }, center: { ...initialBrush.center },
rotationDegrees: { ...initialBrush.rotationDegrees }, rotationDegrees: { ...initialBrush.rotationDegrees },
size: { ...initialBrush.size }, size: { ...initialBrush.size },
geometry: cloneBoxBrushGeometry(initialBrush.geometry) geometry: cloneBrushGeometry(initialBrush.geometry)
} }
}); });
let worldDelta = { let worldDelta = {
@@ -2946,7 +2946,7 @@ export class ViewportHost {
worldDelta = this.setAxisComponent(worldDelta, axisConstraint, axisDelta); worldDelta = this.setAxisComponent(worldDelta, axisConstraint, axisDelta);
} }
const localDelta = transformBoxBrushWorldVectorToLocal( const localDelta = transformBrushWorldVectorToLocal(
initialBrush, initialBrush,
worldDelta worldDelta
); );
@@ -2985,19 +2985,19 @@ export class ViewportHost {
center: { ...initialBrush.center }, center: { ...initialBrush.center },
rotationDegrees: { ...initialBrush.rotationDegrees }, rotationDegrees: { ...initialBrush.rotationDegrees },
size: { ...initialBrush.size }, size: { ...initialBrush.size },
geometry: cloneBoxBrushGeometry(initialBrush.geometry) geometry: cloneBrushGeometry(initialBrush.geometry)
} }
}); });
const pivotLocal = transformBoxBrushWorldPointToLocal( const pivotLocal = transformBrushWorldPointToLocal(
initialBrush, initialBrush,
pivotWorld pivotWorld
); );
const rotationAxis = this.axisVector(effectiveAxis).normalize(); const rotationAxis = this.axisVector(effectiveAxis).normalize();
const vertexIds = this.getComponentTargetVertexIds(session.target); const vertexIds = this.getComponentTargetVertexIds(session.target);
const nextGeometry = cloneBoxBrushGeometry(initialBrush.geometry); const nextGeometry = cloneBrushGeometry(initialBrush.geometry);
for (const vertexId of vertexIds) { for (const vertexId of vertexIds) {
const vertex = getBoxBrushLocalVertexPosition(initialBrush, vertexId); const vertex = getBrushLocalVertexPosition(initialBrush, vertexId);
const next = new Vector3( const next = new Vector3(
vertex.x - pivotLocal.x, vertex.x - pivotLocal.x,
vertex.y - pivotLocal.y, vertex.y - pivotLocal.y,
@@ -3036,19 +3036,19 @@ export class ViewportHost {
center: { ...initialBrush.center }, center: { ...initialBrush.center },
rotationDegrees: { ...initialBrush.rotationDegrees }, rotationDegrees: { ...initialBrush.rotationDegrees },
size: { ...initialBrush.size }, size: { ...initialBrush.size },
geometry: cloneBoxBrushGeometry(initialBrush.geometry) geometry: cloneBrushGeometry(initialBrush.geometry)
} }
}); });
const pivotLocal = transformBoxBrushWorldPointToLocal( const pivotLocal = transformBrushWorldPointToLocal(
initialBrush, initialBrush,
pivotWorld pivotWorld
); );
const nextGeometry = cloneBoxBrushGeometry(initialBrush.geometry); const nextGeometry = cloneBrushGeometry(initialBrush.geometry);
const vertexIds = this.getComponentTargetVertexIds(session.target); const vertexIds = this.getComponentTargetVertexIds(session.target);
if (session.target.kind === "brushFace") { if (session.target.kind === "brushFace") {
const meta = getBoxBrushFaceTransformMeta(session.target.faceId); const axis =
const axis = axisConstraint ?? meta.axis; axisConstraint ?? getBrushFaceAxis(initialBrush, session.target.faceId);
const scaleFactor = const scaleFactor =
1 + 1 +
this.getAxisMovementDistance(axis, pivotWorld, origin, current) * 0.45; this.getAxisMovementDistance(axis, pivotWorld, origin, current) * 0.45;
@@ -3060,12 +3060,10 @@ export class ViewportHost {
); );
} }
} else if (session.target.kind === "brushEdge") { } else if (session.target.kind === "brushEdge") {
const meta = getBoxBrushEdgeTransformMeta(session.target.edgeId); const affectedAxes = getBrushEdgeScaleAxes(
const affectedAxes = (["x", "y", "z"] as const).filter( initialBrush,
(axis) => session.target.edgeId
meta.signs[axis] !== null && ).filter((axis) => axisConstraint === null || axisConstraint === axis);
(axisConstraint === null || axisConstraint === axis)
);
for (const axis of affectedAxes) { for (const axis of affectedAxes) {
const scaleFactor = const scaleFactor =
@@ -3099,7 +3097,7 @@ export class ViewportHost {
renderObjects.edges.geometry = new EdgesGeometry(nextGeometry); renderObjects.edges.geometry = new EdgesGeometry(nextGeometry);
for (const edgeHelper of renderObjects.edgeHelpers) { for (const edgeHelper of renderObjects.edgeHelpers) {
const segment = getBoxBrushEdgeWorldSegment(brush, edgeHelper.id); const segment = getBrushEdgeWorldSegment(brush, edgeHelper.id);
const nextEdgeGeometry = new BufferGeometry().setFromPoints([ const nextEdgeGeometry = new BufferGeometry().setFromPoints([
new Vector3(segment.start.x, segment.start.y, segment.start.z), new Vector3(segment.start.x, segment.start.y, segment.start.z),
new Vector3(segment.end.x, segment.end.y, segment.end.z) new Vector3(segment.end.x, segment.end.y, segment.end.z)
@@ -3109,7 +3107,7 @@ export class ViewportHost {
} }
for (const vertexHelper of renderObjects.vertexHelpers) { for (const vertexHelper of renderObjects.vertexHelpers) {
const vertex = getBoxBrushVertexWorldPosition(brush, vertexHelper.id); const vertex = getBrushVertexWorldPosition(brush, vertexHelper.id);
vertexHelper.mesh.position.set(vertex.x, vertex.y, vertex.z); vertexHelper.mesh.position.set(vertex.x, vertex.y, vertex.z);
} }
} }