Andrew Fenn avatar Andrew Fenn committed 6e7a741

Axis Gizmo now displays correctly in relation to the Ogitor view point

Comments (0)

Files changed (1)

Ogitor/src/OgitorsRootUtilityFunctions.cpp

         }
 
         Ogre::Vector3 position;
-        if(mMultiSelection->getAsSingle()->usesHelper())
+        if(mMultiSelection->getAsSingle()->usesHelper()) {
             position = mMultiSelection->getAsSingle()->getHelper()->getNode()->_getDerivedPosition();
+        } else {
+            position = mMultiSelection->getAsSingle()->getDerivedPosition();
+        }
+
+        /* Rescale the Axis Gizmo so that it is always facing the ogitor camera regardless of
+        view direction. */ 
+        Ogre::Vector3 dist = position - viewport->getCameraEditor()->getDerivedPosition();
+        if (dist.x > 0 && dist.z > 0)
+        {
+            if (CViewportEditor::GetEditorTool() == TOOL_ROTATE)
+            {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale(-1, 1,-1);
+                    mGizmoZ->setScale( 1,-1, 1);
+                    mGizmoY->setScale( 1,-1,-1);
+                } else {
+                    mGizmoX->setScale(-1,-1,-1);
+                    mGizmoZ->setScale( 1,-1,-1);
+                    mGizmoY->setScale( 1,-1,-1);
+                }
+            } else {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale(-1, 1,-1);
+                    mGizmoZ->setScale(-1,-1,-1);
+                    mGizmoY->setScale( 1,-1,-1);
+                } else {
+                    mGizmoX->setScale(-1,-1,-1);
+                    mGizmoZ->setScale(-1,-1,-1);
+                    mGizmoY->setScale(-1,-1,-1);
+                }
+            }
+        }
+        else if (dist.x > 0 && dist.z < 0)
+        {
+            if (CViewportEditor::GetEditorTool() == TOOL_ROTATE)
+            {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale(-1, 1, 1);
+                    mGizmoZ->setScale( 1,-1, 1);
+                    mGizmoY->setScale( 1, 1,-1);
+                } else {
+                    mGizmoX->setScale( 1,-1, 1);
+                    mGizmoZ->setScale( 1,-1,-1);
+                    mGizmoY->setScale( 1, 1,-1);
+                }
+            } else {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale(-1, 1,-1);
+                    mGizmoZ->setScale( 1,-1, 1);
+                    mGizmoY->setScale( 1, 1, 1);
+                } else {
+                    mGizmoX->setScale(-1,-1,-1);
+                    mGizmoZ->setScale( 1,-1, 1);
+                    mGizmoY->setScale(-1, 1, 1);
+                }
+            }
+        }
+        else if (dist.x < 0 && dist.z > 0)
+        {
+            if (CViewportEditor::GetEditorTool() == TOOL_ROTATE)
+            {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale(-1, 1,-1);
+                    mGizmoZ->setScale(-1, 1, 1);
+                    mGizmoY->setScale( 1,-1, 1);
+                } else {
+                    mGizmoX->setScale(-1,-1,-1);
+                    mGizmoZ->setScale(-1, 1,-1);
+                    mGizmoY->setScale( 1,-1, 1);
+                }
+            } else {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale( 1, 1, 1);
+                    mGizmoZ->setScale(-1, 1, 1);
+                    mGizmoY->setScale( 1,-1, 1);
+                } else {
+                    mGizmoX->setScale( 1,-1, 1);
+                    mGizmoZ->setScale(-1, 1, 1);
+                    mGizmoY->setScale(-1,-1,-1);
+                }
+            }
+        }
         else
-            position = mMultiSelection->getAsSingle()->getDerivedPosition();
+        {
+            if (CViewportEditor::GetEditorTool() == TOOL_ROTATE)
+            {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale( 1, 1, 1);
+                    mGizmoZ->setScale( 1, 1, 1);
+                    mGizmoY->setScale( 1, 1, 1);
+                } else {
+                    mGizmoX->setScale(-1,-1, 1);
+                    mGizmoZ->setScale( 1, 1,-1);
+                    mGizmoY->setScale( 1, 1, 1);
+                }
+            } else {
+                if (dist.y < 0)
+                {
+                    mGizmoX->setScale( 1, 1, 1);
+                    mGizmoZ->setScale( 1, 1, 1);
+                    mGizmoY->setScale( 1, 1, 1);
+                } else {
+                    mGizmoX->setScale( 1,-1, 1);
+                    mGizmoZ->setScale( 1, 1, 1);
+                    mGizmoY->setScale(-1, 1,-1);
+                }
+            }
+        }
+
 
         Ogre::Vector4 rect;
         viewport->getRect(rect);
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.