Browse Source

SDK Scenecomposer : now right clicking will cancel current transformation for the Scale, Rotate and Move Tool, looks like the selectTools shortcut
- improved these tool feedback, its easier to begin the tranformation as its start on the first click instead of the first dragg

Maselbas 10 years ago
parent
commit
18bee5d752

+ 58 - 43
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/MoveTool.java

@@ -60,11 +60,44 @@ public class MoveTool extends SceneEditTool {
                 wasDragging = false;
                 wasDragging = false;
             }
             }
             pickManager.reset();
             pickManager.reset();
+        } else {
+            if (toolController.getSelectedSpatial() == null) {
+                return;
+            }
+
+            if (pickedMarker == null) {
+                pickedMarker = pickAxisMarker(camera, screenCoord, axisPickType);
+                if (pickedMarker == null) {
+                    return;
+                }
+
+                if (pickedMarker.equals(QUAD_XY)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
+                } else if (pickedMarker.equals(QUAD_XZ)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
+                } else if (pickedMarker.equals(QUAD_YZ)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
+                } else if (pickedMarker.equals(ARROW_X)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
+                    constraintAxis = Vector3f.UNIT_X; // move only X
+                } else if (pickedMarker.equals(ARROW_Y)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
+                    constraintAxis = Vector3f.UNIT_Y; // move only Y
+                } else if (pickedMarker.equals(ARROW_Z)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
+                    constraintAxis = Vector3f.UNIT_Z; // move only Z
+                }
+                startPosition = toolController.getSelectedSpatial().getLocalTranslation().clone();
+                wasDragging = true;
+            }
         }
         }
     }
     }
 
 
     @Override
     @Override
     public void actionSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) {
     public void actionSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) {
+        if (pressed) {
+            cancel();
+        }
     }
     }
 
 
     @Override
     @Override
@@ -89,58 +122,40 @@ public class MoveTool extends SceneEditTool {
                 wasDragging = false;
                 wasDragging = false;
             }
             }
             pickManager.reset();
             pickManager.reset();
-            return;
-        }
-
-        if (toolController.getSelectedSpatial() == null) {
-            return;
-        }
-
-        if (pickedMarker == null) {
-            pickedMarker = pickAxisMarker(camera, screenCoord, axisPickType);
-            if (pickedMarker == null) {
+        } else if (wasDragging == true) {
+            if (!pickManager.updatePick(camera, screenCoord)) {
                 return;
                 return;
             }
             }
+            Vector3f diff = Vector3f.ZERO;
+            if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
+                diff = pickManager.getTranslation();
 
 
-            if (pickedMarker.equals(QUAD_XY)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
-            } else if (pickedMarker.equals(QUAD_XZ)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
-            } else if (pickedMarker.equals(QUAD_YZ)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
-            } else if (pickedMarker.equals(ARROW_X)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
-                constraintAxis = Vector3f.UNIT_X; // move only X
-            } else if (pickedMarker.equals(ARROW_Y)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
-                constraintAxis = Vector3f.UNIT_Y; // move only Y
-            } else if (pickedMarker.equals(ARROW_Z)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
-                constraintAxis = Vector3f.UNIT_Z; // move only Z
+            } else if (pickedMarker.equals(ARROW_X) || pickedMarker.equals(ARROW_Y) || pickedMarker.equals(ARROW_Z)) {
+                diff = pickManager.getTranslation(constraintAxis);
             }
             }
-            startPosition = toolController.getSelectedSpatial().getLocalTranslation().clone();
-
-        }
-        if (!pickManager.updatePick(camera, screenCoord)) {
-            return;
-        }
-        Vector3f diff = Vector3f.ZERO;
-        if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
-            diff = pickManager.getTranslation();
-
-        } else if (pickedMarker.equals(ARROW_X) || pickedMarker.equals(ARROW_Y) || pickedMarker.equals(ARROW_Z)) {
-            diff = pickManager.getTranslation(constraintAxis);
+            Vector3f position = startPosition.add(diff);
+            lastPosition = position;
+            toolController.getSelectedSpatial().setLocalTranslation(position);
+            updateToolsTransformation();
         }
         }
-        Vector3f position = startPosition.add(diff);
-        lastPosition = position;
-        toolController.getSelectedSpatial().setLocalTranslation(position);
-        updateToolsTransformation();
-
-        wasDragging = true;
     }
     }
 
 
     @Override
     @Override
     public void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
     public void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
+        if (pressed) {
+            cancel();
+        }
+    }
+
+    private void cancel() {
+        if (wasDragging) {
+            wasDragging = false;
+            toolController.getSelectedSpatial().setLocalTranslation(startPosition);
+            setDefaultAxisMarkerColors();
+            pickedMarker = null; // mouse released, reset selection
+            constraintAxis = Vector3f.UNIT_XYZ; // no constraint
+            pickManager.reset();
+        }
     }
     }
 
 
     protected class MoveUndo extends AbstractUndoableSceneEdit {
     protected class MoveUndo extends AbstractUndoableSceneEdit {

+ 47 - 32
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/RotateTool.java

@@ -53,12 +53,36 @@ public class RotateTool extends SceneEditTool {
                 actionPerformed(new ScaleUndo(toolController.getSelectedSpatial(), startRotate, lastRotate));
                 actionPerformed(new ScaleUndo(toolController.getSelectedSpatial(), startRotate, lastRotate));
                 wasDragging = false;
                 wasDragging = false;
             }
             }
+            pickManager.reset();
+        } else {
+            if (toolController.getSelectedSpatial() == null) {
+                return;
+            }
+
+            if (pickedMarker == null) {
+                pickedMarker = pickAxisMarker(camera, screenCoord, axisPickType);
+                if (pickedMarker == null) {
+                    return;
+                }
+
+                if (pickedMarker.equals(QUAD_XY)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
+                } else if (pickedMarker.equals(QUAD_XZ)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
+                } else if (pickedMarker.equals(QUAD_YZ)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
+                }
+                startRotate = toolController.getSelectedSpatial().getLocalRotation().clone();
+                wasDragging = true;
+            }
         }
         }
     }
     }
 
 
     @Override
     @Override
     public void actionSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) {
     public void actionSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) {
-
+        if (pressed) {
+            cancel();
+        }
     }
     }
 
 
     @Override
     @Override
@@ -67,12 +91,12 @@ public class RotateTool extends SceneEditTool {
             highlightAxisMarker(camera, screenCoord, axisPickType);
             highlightAxisMarker(camera, screenCoord, axisPickType);
         } else {
         } else {
             pickedMarker = null;
             pickedMarker = null;
+            pickManager.reset();
         }
         }
     }
     }
 
 
     @Override
     @Override
     public void draggedPrimary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
     public void draggedPrimary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
-
         if (!pressed) {
         if (!pressed) {
             setDefaultAxisMarkerColors();
             setDefaultAxisMarkerColors();
             pickedMarker = null; // mouse released, reset selection
             pickedMarker = null; // mouse released, reset selection
@@ -82,45 +106,36 @@ public class RotateTool extends SceneEditTool {
                 actionPerformed(new ScaleUndo(toolController.getSelectedSpatial(), startRotate, lastRotate));
                 actionPerformed(new ScaleUndo(toolController.getSelectedSpatial(), startRotate, lastRotate));
                 wasDragging = false;
                 wasDragging = false;
             }
             }
-            return;
-        }
-
-        if (toolController.getSelectedSpatial() == null) {
-            return;
-        }
-
-        if (pickedMarker == null) {
-            pickedMarker = pickAxisMarker(camera, screenCoord, axisPickType);
-            if (pickedMarker == null) {
+            pickManager.reset();
+        } else if (wasDragging) {
+            if (!pickManager.updatePick(camera, screenCoord)) {
                 return;
                 return;
             }
             }
 
 
-            if (pickedMarker.equals(QUAD_XY)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
-            } else if (pickedMarker.equals(QUAD_XZ)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
-            } else if (pickedMarker.equals(QUAD_YZ)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
+            if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
+                Quaternion rotation = startRotate.mult(pickManager.getLocalRotation());
+                toolController.getSelectedSpatial().setLocalRotation(rotation);
+                lastRotate = rotation;
             }
             }
-            startRotate = toolController.getSelectedSpatial().getLocalRotation().clone();
-        }
-        if (!pickManager.updatePick(camera, screenCoord)) {
-            return;
-        }
-
-        if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
-            Quaternion rotation = startRotate.mult(pickManager.getLocalRotation());
-            toolController.getSelectedSpatial().setLocalRotation(rotation);
-            lastRotate = rotation;
+            updateToolsTransformation();
         }
         }
-        updateToolsTransformation();
-        wasDragging = true;
     }
     }
 
 
     @Override
     @Override
-    public
-            void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
+    public void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
+        if (pressed) {
+            cancel();
+        }
+    }
 
 
+    private void cancel() {
+        if (wasDragging) {
+            wasDragging = false;
+            toolController.getSelectedSpatial().setLocalRotation(startRotate);
+            setDefaultAxisMarkerColors();
+            pickedMarker = null; // mouse released, reset selection
+            pickManager.reset();
+        }
     }
     }
 
 
     private class ScaleUndo extends AbstractUndoableSceneEdit {
     private class ScaleUndo extends AbstractUndoableSceneEdit {

+ 59 - 47
jme3-scenecomposer/src/com/jme3/gde/scenecomposer/tools/ScaleTool.java

@@ -39,7 +39,7 @@ public class ScaleTool extends SceneEditTool {
     @Override
     @Override
     public void activate(AssetManager manager, Node toolNode, Node onTopToolNode, Spatial selectedSpatial, SceneComposerToolController toolController) {
     public void activate(AssetManager manager, Node toolNode, Node onTopToolNode, Spatial selectedSpatial, SceneComposerToolController toolController) {
         super.activate(manager, toolNode, onTopToolNode, selectedSpatial, toolController);
         super.activate(manager, toolNode, onTopToolNode, selectedSpatial, toolController);
-                pickManager = Lookup.getDefault().lookup(PickManager.class);
+        pickManager = Lookup.getDefault().lookup(PickManager.class);
         displayPlanes();
         displayPlanes();
     }
     }
 
 
@@ -54,12 +54,40 @@ public class ScaleTool extends SceneEditTool {
                 wasDragging = false;
                 wasDragging = false;
             }
             }
             pickManager.reset();
             pickManager.reset();
+        } else {
+            if (toolController.getSelectedSpatial() == null) {
+                return;
+            }
+            if (pickedMarker == null) {
+                pickedMarker = pickAxisMarker(camera, screenCoord, axisPickType);
+                if (pickedMarker == null) {
+                    return;
+                }
+
+                if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), camera.getRotation(),
+                            SceneComposerToolController.TransformationType.camera, camera, screenCoord);
+                } else if (pickedMarker.equals(ARROW_X)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
+                    constraintAxis = Vector3f.UNIT_X; // scale only X
+                } else if (pickedMarker.equals(ARROW_Y)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
+                    constraintAxis = Vector3f.UNIT_Y; // scale only Y
+                } else if (pickedMarker.equals(ARROW_Z)) {
+                    pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
+                    constraintAxis = Vector3f.UNIT_Z; // scale only Z
+                }
+                startScale = toolController.getSelectedSpatial().getLocalScale().clone();
+                wasDragging = true;
+            }
         }
         }
     }
     }
 
 
     @Override
     @Override
     public void actionSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) {
     public void actionSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) {
-
+        if (pressed) {
+            cancel();
+        }
     }
     }
 
 
     @Override
     @Override
@@ -83,61 +111,45 @@ public class ScaleTool extends SceneEditTool {
                 wasDragging = false;
                 wasDragging = false;
             }
             }
             pickManager.reset();
             pickManager.reset();
-            return;
-        }
-
-        if (toolController.getSelectedSpatial() == null) {
-            return;
-        }
-        if (pickedMarker == null) {
-            pickedMarker = pickAxisMarker(camera, screenCoord, axisPickType);
-            if (pickedMarker == null) {
+        } else if (wasDragging) {
+            if (!pickManager.updatePick(camera, screenCoord)) {
                 return;
                 return;
             }
             }
-
             if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
             if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), camera.getRotation(), 
-                        SceneComposerToolController.TransformationType.camera, camera, screenCoord);
-            } else if (pickedMarker.equals(ARROW_X)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XY, getTransformType(), camera, screenCoord);
-                constraintAxis = Vector3f.UNIT_X; // scale only X
-            } else if (pickedMarker.equals(ARROW_Y)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_YZ, getTransformType(), camera, screenCoord);
-                constraintAxis = Vector3f.UNIT_Y; // scale only Y
-            } else if (pickedMarker.equals(ARROW_Z)) {
-                pickManager.initiatePick(toolController.getSelectedSpatial(), PickManager.PLANE_XZ, getTransformType(), camera, screenCoord);
-                constraintAxis = Vector3f.UNIT_Z; // scale only Z
+                constraintAxis = pickManager.getStartOffset().normalize();
+                float diff = pickManager.getTranslation(constraintAxis).dot(constraintAxis);
+                diff *= 0.5f;
+                Vector3f scale = startScale.add(new Vector3f(diff, diff, diff));
+                lastScale = scale;
+                toolController.getSelectedSpatial().setLocalScale(scale);
+            } else if (pickedMarker.equals(ARROW_X) || pickedMarker.equals(ARROW_Y) || pickedMarker.equals(ARROW_Z)) {
+                // Get the translation in the spatial Space
+                Quaternion worldToSpatial = toolController.getSelectedSpatial().getWorldRotation().inverse();
+                Vector3f diff = pickManager.getTranslation(worldToSpatial.mult(constraintAxis));
+                diff.multLocal(0.5f);
+                Vector3f scale = startScale.add(diff);
+                lastScale = scale;
+                toolController.getSelectedSpatial().setLocalScale(scale);
             }
             }
-            startScale = toolController.getSelectedSpatial().getLocalScale().clone();
-        }
-
-        if (!pickManager.updatePick(camera, screenCoord)) {
-            return;
+            updateToolsTransformation();
         }
         }
-        if (pickedMarker.equals(QUAD_XY) || pickedMarker.equals(QUAD_XZ) || pickedMarker.equals(QUAD_YZ)) {
-            constraintAxis = pickManager.getStartOffset().normalize();
-            float diff = pickManager.getTranslation(constraintAxis).dot(constraintAxis);
-            diff *= 0.5f;
-            Vector3f scale = startScale.add(new Vector3f(diff, diff, diff));
-            lastScale = scale;
-            toolController.getSelectedSpatial().setLocalScale(scale);
-        } else if (pickedMarker.equals(ARROW_X) || pickedMarker.equals(ARROW_Y) || pickedMarker.equals(ARROW_Z)) {
-            // Get the translation in the spatial Space
-            Quaternion worldToSpatial = toolController.getSelectedSpatial().getWorldRotation().inverse();
-            Vector3f diff = pickManager.getTranslation(worldToSpatial.mult(constraintAxis));
-            diff.multLocal(0.5f);
-            Vector3f scale = startScale.add(diff);
-            lastScale = scale;
-            toolController.getSelectedSpatial().setLocalScale(scale);
-        }
-        updateToolsTransformation();
-
-        wasDragging = true;
     }
     }
 
 
     @Override
     @Override
     public void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
     public void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) {
+        if (pressed) {
+            cancel();
+        }
+    }
 
 
+    private void cancel() {
+        if (wasDragging) {
+            wasDragging = false;
+            toolController.getSelectedSpatial().setLocalScale(startScale);
+            setDefaultAxisMarkerColors();
+            pickedMarker = null; // mouse released, reset selection
+            pickManager.reset();
+        }
     }
     }
 
 
     private class ScaleUndo extends AbstractUndoableSceneEdit {
     private class ScaleUndo extends AbstractUndoableSceneEdit {