From 06b6b3d0cec4b056d9878514eb26742d2d813c06 Mon Sep 17 00:00:00 2001 From: Jerald-Golden-B Date: Tue, 26 Aug 2025 12:31:27 +0530 Subject: [PATCH] new TransformControls3D bug fix --- .../selection3D/rotateControls3D.tsx | 19 ++++++++++++++----- .../selection3D/transformControls3D.tsx | 4 ++-- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx b/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx index 66904b2..c4a8d19 100644 --- a/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx +++ b/app/src/modules/scene/controls/selectionControls/selection3D/rotateControls3D.tsx @@ -37,6 +37,7 @@ function RotateControls3D() { const [initialRotations, setInitialRotations] = useState>({}); const [initialPositions, setInitialPositions] = useState>({}); const [isRotating, setIsRotating] = useState(false); + const [isIndividualRotating, setIsIndividualRotating] = useState(false); const prevPointerPosition = useRef(null); const rotationCenter = useRef(null); const mouseButtonsDown = useRef<{ left: boolean; right: boolean }>({ left: false, right: false, }); @@ -120,6 +121,12 @@ function RotateControls3D() { } } + if (event.key.toLowerCase() === 'i') { + if (rotatedObjects.length > 0) { + setIsIndividualRotating(!isIndividualRotating); + } + } + if (event.key.toLowerCase() === "escape") { event.preventDefault(); resetToInitialRotations(); @@ -155,7 +162,7 @@ function RotateControls3D() { canvasElement.removeEventListener("keydown", onKeyDown); canvasElement?.removeEventListener("keyup", onKeyUp); }; - }, [camera, scene, toggleView, toolMode, selectedAssets, rotatedObjects, pastedObjects, duplicatedObjects, movedObjects, keyEvent, initialPositions, initialRotations]); + }, [camera, scene, toggleView, toolMode, selectedAssets, rotatedObjects, pastedObjects, duplicatedObjects, movedObjects, keyEvent, initialPositions, initialRotations, isIndividualRotating]); useEffect(() => { if (activeModule !== "builder" || toolMode !== 'cursor' || toggleView) { @@ -214,10 +221,12 @@ function RotateControls3D() { wasShiftHeldRef }); - const relativePosition = new THREE.Vector3().subVectors(obj.position, center); - const rotationMatrix = new THREE.Matrix4().makeRotationY(angleDelta); - relativePosition.applyMatrix4(rotationMatrix); - obj.position.copy(center).add(relativePosition); + if (!isIndividualRotating) { + const relativePosition = new THREE.Vector3().subVectors(obj.position, center); + const rotationMatrix = new THREE.Matrix4().makeRotationY(angleDelta); + relativePosition.applyMatrix4(rotationMatrix); + obj.position.copy(center).add(relativePosition); + } const rotationQuat = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), angleDelta); obj.quaternion.multiply(rotationQuat); diff --git a/app/src/modules/scene/controls/selectionControls/selection3D/transformControls3D.tsx b/app/src/modules/scene/controls/selectionControls/selection3D/transformControls3D.tsx index a6aa2bb..3f3162b 100644 --- a/app/src/modules/scene/controls/selectionControls/selection3D/transformControls3D.tsx +++ b/app/src/modules/scene/controls/selectionControls/selection3D/transformControls3D.tsx @@ -226,11 +226,11 @@ function TransformControls3D() { const delta = new THREE.Vector3().copy(temp.position).sub(initialPivotPositionRef.current); obj.position.copy(initialPos).add(delta); } else if (controls.mode === 'rotate') { - const deltaQuat = new THREE.Quaternion().setFromEuler(temp.rotation); + const deltaQuat = temp.quaternion.clone(); const relPos = initialPos.clone().sub(initialPivotPositionRef.current); relPos.applyQuaternion(deltaQuat); obj.position.copy(initialPivotPositionRef.current).add(relPos); - obj.quaternion.copy(initialQuat).multiply(deltaQuat); + obj.quaternion.copy(deltaQuat).multiply(initialQuat); } }); };