Forráskód Böngészése

Implemented median center point for scaling gizmo, fixed missing non-retina icon

Ivan Safrin 12 éve
szülő
commit
8a2b71be95

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 3
IDE/Assets/ide_icons.ai


BIN
IDE/Contents/Resources/Images/entityEditor/camera_icon.png


+ 33 - 9
IDE/Contents/Source/TransformGizmo.cpp

@@ -489,6 +489,13 @@ void TransformGizmo::transformSelectedEntities(const Vector3 &move, const Vector
         if(orientation == ORIENTATION_GLOBAL) {
             selectedEntities[i]->Translate(move);
             
+            Quaternion q;
+            Quaternion currentRotation = selectedEntities[i]->getRotationQuat();
+            Vector3 axisVector = transformConstraint;
+            axisVector = currentRotation.Inverse().applyTo(axisVector);
+            q.fromAngleAxis(rotate, axisVector);
+            
+            
             Vector3 newScale = selectedEntities[i]->getRotationQuat().applyTo(scale);
             newScale.x = fabs(newScale.x);
             newScale.y = fabs(newScale.y);
@@ -496,14 +503,6 @@ void TransformGizmo::transformSelectedEntities(const Vector3 &move, const Vector
             if(scale.x < 0 || scale.y < 0 || scale.z < 0) {
                 newScale = newScale * -1.0;
             }
-            selectedEntities[i]->setScale(selectedEntities[i]->getScale() + newScale);
-            
-            Quaternion q;
-            Quaternion currentRotation = selectedEntities[i]->getRotationQuat();
-            Vector3 axisVector = transformConstraint;
-            axisVector = currentRotation.Inverse().applyTo(axisVector);
-            q.fromAngleAxis(rotate, axisVector);
-            
             
             if(centerMode == CENTER_MODE_MEDIAN) {
                 Vector3 globalPosition = selectedEntities[i]->getConcatenatedMatrix().getPosition();
@@ -515,13 +514,25 @@ void TransformGizmo::transformSelectedEntities(const Vector3 &move, const Vector
                 
                 selectedEntities[i]->setPosition(globalPosition - selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().getPosition());
                 selectedEntities[i]->setRotationByQuaternion(currentRotation * q);
+                
+                selectedEntities[i]->setScale(selectedEntities[i]->getScale() + newScale);
+                
+                if(newScale.length() > 0.0) {
+                    Vector3 scalePosition;
+                    scalePosition.x = globalPosition.x + ((globalPosition.x - globalCenter.x) * newScale.x);
+                    scalePosition.y = globalPosition.y + ((globalPosition.y - globalCenter.y) * newScale.y);
+                    scalePosition.z = globalPosition.z + ((globalPosition.z - globalCenter.z) * newScale.z);
+                    scalePosition = selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().Inverse().transpose() * scalePosition;
+                    selectedEntities[i]->setPosition(scalePosition);
+                }
+                
             } else {
                 selectedEntities[i]->setRotationByQuaternion(currentRotation * q);
+                selectedEntities[i]->setScale(selectedEntities[i]->getScale() + newScale);
             }
         } else {
             
             selectedEntities[i]->Translate(getRotationQuat().applyTo(move));
-            selectedEntities[i]->setScale(selectedEntities[i]->getScale() + scale);
             
             Quaternion q;
             Quaternion currentRotation = selectedEntities[i]->getRotationQuat();
@@ -544,8 +555,21 @@ void TransformGizmo::transformSelectedEntities(const Vector3 &move, const Vector
                 
                 selectedEntities[i]->setPosition(globalPosition - selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().getPosition());
                 selectedEntities[i]->setRotationByQuaternion(currentRotation * q);
+                
+                selectedEntities[i]->setScale(selectedEntities[i]->getScale() + scale);
+                
+                if(scale.length() > 0.0) {
+                    Vector3 scalePosition;
+                    scalePosition.x = globalPosition.x + ((globalPosition.x - globalCenter.x) * scale.x);
+                    scalePosition.y = globalPosition.y + ((globalPosition.y - globalCenter.y) * scale.y);
+                    scalePosition.z = globalPosition.z + ((globalPosition.z - globalCenter.z) * scale.z);
+                    scalePosition = selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().Inverse().transpose() * scalePosition;
+                    selectedEntities[i]->setPosition(scalePosition);
+                }
+                
             } else {
                 selectedEntities[i]->setRotationByQuaternion(currentRotation * q);
+                selectedEntities[i]->setScale(selectedEntities[i]->getScale() + scale);
             }
 
             

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott