]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/proconf/g3d/actions/TranslateAction.java
Removing ancient 3d framework
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / proconf / g3d / actions / TranslateAction.java
diff --git a/org.simantics.g3d/src/org/simantics/proconf/g3d/actions/TranslateAction.java b/org.simantics.g3d/src/org/simantics/proconf/g3d/actions/TranslateAction.java
deleted file mode 100644 (file)
index a03f88a..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-/*******************************************************************************\r
- * Copyright (c) 2007- VTT Technical Research Centre of Finland.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.proconf.g3d.actions;\r
-\r
-import java.awt.event.MouseEvent;\r
-import java.math.BigDecimal;\r
-import java.util.Collection;\r
-import java.util.List;\r
-\r
-import javax.vecmath.AxisAngle4d;\r
-import javax.vecmath.AxisAngle4f;\r
-import javax.vecmath.Point3d;\r
-import javax.vecmath.Quat4d;\r
-import javax.vecmath.Vector3d;\r
-\r
-import org.eclipse.jface.action.Action;\r
-import org.eclipse.jface.action.IToolBarManager;\r
-import org.simantics.db.Graph;\r
-import org.simantics.db.GraphRequest;\r
-import org.simantics.db.GraphRequestAdapter;\r
-import org.simantics.db.GraphRequestStatus;\r
-import org.simantics.db.Resource;\r
-import org.simantics.layer0.utils.IEntity;\r
-import org.simantics.layer0.utils.EntityFactory;\r
-import org.simantics.proconf.g3d.Activator;\r
-import org.simantics.proconf.g3d.Resources;\r
-import org.simantics.proconf.g3d.base.G3DTools;\r
-import org.simantics.proconf.g3d.base.MathTools;\r
-import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase;\r
-import org.simantics.proconf.g3d.gizmo.TransformGizmo;\r
-import org.simantics.proconf.g3d.scenegraph.IGraphicsNode;\r
-import org.simantics.proconf.g3d.stubs.Orientation;\r
-import org.simantics.proconf.g3d.stubs.Position;\r
-\r
-\r
-public class TranslateAction extends ConstrainedTransformAction {\r
-       \r
-       \r
-    private TransformGizmo gizmo;\r
-    \r
-    private double istep = 10.0;\r
-    private int decimals = 2;\r
-    \r
-    \r
-    private Action csAction;\r
-    List<IGraphicsNode> mos = null;\r
-    \r
-    private boolean worldCoord = true;\r
-    \r
-    \r
-    private AxisAngle4d aa;\r
-    private Quat4d q;\r
-    \r
-    public TranslateAction(ThreeDimensionalEditorBase parent) {\r
-        super(parent);\r
-        \r
-        csAction = new Action("World",Action.AS_CHECK_BOX) {\r
-               public void run() {\r
-                       GraphRequest r = new GraphRequestAdapter() {\r
-                               @Override\r
-                               public GraphRequestStatus perform(Graph g) throws Exception {\r
-                                       setWorldCoord(g,!isChecked());\r
-                                       return GraphRequestStatus.transactionComplete();\r
-                               }\r
-                       };\r
-                       TranslateAction.this.parent.getSession().asyncRead(r);\r
-                       \r
-               }\r
-        };\r
-        gizmo = new TransformGizmo(component.getDisplaySystem().getRenderer());\r
-    }\r
-    \r
-    public void init() {\r
-        this.setText("Translate");\r
-        this.setToolTipText("Translate the object");\r
-        this.setImageDescriptor(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/translate.png"));\r
-    }\r
-    \r
-    @Override\r
-    public boolean usable(Graph graph, List<Resource> resources) {\r
-        if (resources.size() == 0)\r
-            return false;\r
-        for (Resource r : resources) {\r
-               IEntity t = EntityFactory.create(graph,r);\r
-            if (t.isInstanceOf(Resources.g3dResource.G3DNode)) {\r
-                Collection<IEntity> p = t.getRelatedObjects(Resources.g3dResource.HasLocalPosition);\r
-                if (p == null || p.size() != 1)\r
-                    return false;\r
-            }\r
-               \r
-        }\r
-        return true;\r
-        \r
-    }\r
-    \r
-    @Override\r
-    public void deactivate() {\r
-       super.deactivate();\r
-        parent.setGizmo(null);\r
-        mos = null;\r
-    }\r
-    \r
-    private void setWorldCoord(Graph graph,boolean b) {\r
-       if (worldCoord == b)\r
-               return;\r
-       worldCoord = b;\r
-       updateWorldCoord(graph);\r
-    }\r
-    \r
-    private void updateWorldCoord(Graph graph) {\r
-       if (worldCoord) {\r
-                       csAction.setText("World");\r
-                       gizmo.setRotation(new AxisAngle4f());\r
-                       aa = null;\r
-                       q = null;\r
-       } else {\r
-                       csAction.setText("Local");\r
-                       Orientation o = mos.get(0).getParent().getG3DNode(graph).getWorldOrientation();\r
-                       if (o == null) {\r
-                               aa = new AxisAngle4d();\r
-                       } else {\r
-                               aa = G3DTools.getOrientation(o);\r
-                       }\r
-                               \r
-                       gizmo.setRotation(new AxisAngle4f(aa));\r
-                       q = new Quat4d();\r
-                       q.set(aa);\r
-       }\r
-//     if (manager != null)\r
-//             parent.getRenderingComposite().getDisplay().asyncExec(new Runnable() {\r
-//                     public void run() {\r
-//                             manager.update(true);\r
-//                     }\r
-//             });\r
-               \r
-       this.parent.setViewChanged(true);\r
-    }\r
-    \r
-    public void fillToolBar(IToolBarManager manager) {\r
-       super.fillToolBar(manager);\r
-        csAction.setChecked(!worldCoord);\r
-        manager.add(csAction);\r
-    }\r
-\r
-    @Override\r
-    public void activate() {\r
-       GraphRequest r = new GraphRequestAdapter() {\r
-               public GraphRequestStatus perform(Graph g) throws Exception {\r
-                       parent.setGizmo(gizmo);\r
-\r
-               updateGizmo(g);\r
-\r
-               component.getNoShadowRoot().attachChild(gizmo.getNode());\r
-               \r
-               String text = "";\r
-               mos = parent.getSelectionAdapter().getSelectedObjects();\r
-               for (IGraphicsNode mo : mos) {\r
-                       if (worldCoord)\r
-                               text += G3DTools.getVector(mo.getG3DNode(g).getWorldPosition()) + " ";//mo.getWorldPosition() + " ";\r
-                       else\r
-                               text += G3DTools.getVector(mo.getG3DNode(g).getLocalPosition()) + " ";\r
-               }\r
-               final String fText = text;\r
-               parent.getRenderingComposite().getDisplay().asyncExec(new Runnable() {\r
-                       public void run() {\r
-                               setInfoText(fText);    \r
-                       }\r
-               });\r
-               \r
-               Resource r[] = new Resource[mos.size()];\r
-               for (int i = 0; i < mos.size(); i++) {\r
-                   r[i] = mos.get(i).getResource();\r
-               }\r
-               \r
-               TranslateActionConstraints.addConstraints(r, detector);   \r
-               updateWorldCoord(g);\r
-               return GraphRequestStatus.transactionComplete();\r
-               };\r
-         \r
-       };\r
-       parent.getSession().asyncRead(r);\r
-        \r
-    }\r
-    \r
-    Vector3d getTranslate(Graph graph) {\r
-        return getTranslate(graph,new Vector3d());\r
-    }\r
-    \r
-    Vector3d getTranslate(Graph graph,Vector3d offset) {\r
-        Vector3d translate = new Vector3d();\r
-        Vector3d o = new Vector3d();\r
-        Vector3d d = new Vector3d();\r
-        parent.createPickRay(o, d);\r
-        Vector3d p = G3DTools.getVector(mos.get(0).getG3DNode(graph).getWorldPosition());//gizmo.getPosition();\r
-        Vector3d dir = null;\r
-        switch (gizmo.getSelected()) {\r
-        case TransformGizmo.XYZ :\r
-            Vector3d normal = camera.getUnNormalizedHeading();\r
-            if(!worldCoord)\r
-               MathTools.rotate(q, normal, normal);\r
-            normal.normalize();\r
-            double s[] = new double[1];\r
-            Vector3d r = new Vector3d();\r
-            if (MathTools.intersectStraightPlane(o, d, p, normal, r)) {\r
-                r.sub(p);\r
-                translate.x = r.x;\r
-                translate.y = r.y;\r
-                translate.z = r.z;\r
-            }\r
-            break;\r
-        case TransformGizmo.X :\r
-            dir = new Vector3d(1.0,0.0,0.0);\r
-            if(!worldCoord)\r
-               MathTools.rotate(q, dir, dir);\r
-            Vector3d i1 = new Vector3d();\r
-            Vector3d i2 = new Vector3d();\r
-            s = new double[2];\r
-            MathTools.intersectStraightStraight( p, dir,o, d, i2, i1,s);\r
-            translate.x = s[0];\r
-            \r
-            break;\r
-        case TransformGizmo.Y :\r
-            dir = new Vector3d(0.0,1.0,0.0);\r
-            if(!worldCoord)\r
-               MathTools.rotate(q, dir, dir);\r
-            i1 = new Vector3d();\r
-            i2 = new Vector3d();\r
-            s = new double[2];\r
-            MathTools.intersectStraightStraight( p, dir,o, d, i2, i1,s);\r
-            translate.y = s[0];\r
-            break;\r
-        case TransformGizmo.Z :\r
-            dir = new Vector3d(0.0,0.0,1.0);\r
-            if(!worldCoord)\r
-               MathTools.rotate(q, dir, dir);\r
-            i1 = new Vector3d();\r
-            i2 = new Vector3d();\r
-            s = new double[2];\r
-            MathTools.intersectStraightStraight( p, dir,o, d, i2, i1,s);\r
-            translate.z = s[0];\r
-            break;\r
-        case TransformGizmo.XY :\r
-            normal = new Vector3d(0.0,0.0,1.0);\r
-            if(!worldCoord)\r
-               MathTools.rotate(q, normal, normal);\r
-            r = new Vector3d();\r
-            if (MathTools.intersectStraightPlane(o, d, p, normal, r)) {\r
-                r.sub(p);\r
-                translate.x = r.x;\r
-                translate.y = r.y;\r
-            }\r
-            break;\r
-        case TransformGizmo.XZ :\r
-            normal = new Vector3d(0.0,1.0,0.0);\r
-            if(!worldCoord)\r
-               MathTools.rotate(q, normal, normal);\r
-            r = new Vector3d();\r
-            if (MathTools.intersectStraightPlane(o, d, p, normal, r)) {\r
-                r.sub(p);\r
-                translate.x = r.x;\r
-                translate.z = r.z;\r
-            }\r
-            break;\r
-        case TransformGizmo.YZ :\r
-            normal = new Vector3d(1.0,0.0,0.0);\r
-            if(!worldCoord)\r
-               MathTools.rotate(q, normal, normal);\r
-            r = new Vector3d();\r
-            if (MathTools.intersectStraightPlane(o, d, p, normal, r)) {\r
-                r.sub(p);\r
-                translate.y = r.y;\r
-                translate.z = r.z;\r
-            }\r
-            break;\r
-        default :\r
-            \r
-            return null;\r
-        }\r
-        translate.sub(offset);\r
-        \r
-        if (useConstraints && dir != null) {\r
-            switch (gizmo.getSelected()) {\r
-            case TransformGizmo.X:\r
-            case TransformGizmo.Y:\r
-            case TransformGizmo.Z:\r
-                Vector3d t = new Vector3d(translate);\r
-                // TODO : to the test against all translated objects and snap to closest one\r
-                Point3d pos = G3DTools.getPoint(mos.get(0).getG3DNode(graph).getWorldPosition());\r
-                t.add(pos);\r
-                Point3d snap = detector.getPointSnap2(t, dir);\r
-                if (snap != null) {\r
-                   // System.out.print("t: " + translate);\r
-                    translate = new Vector3d(snap);\r
-                    translate.sub(pos);\r
-                   // System.out.println(" " + translate);\r
-                }\r
-                break;\r
-                \r
-            }\r
-        }\r
-        return translate;\r
-    }\r
-    \r
-    Vector3d prevTranslate = new Vector3d();\r
-    \r
-    @Override\r
-    public void doChanges(Graph graph) throws Exception {\r
-        if (input.mousePressed()) {\r
-            boolean b = useConstraints;\r
-            useConstraints = false;\r
-            prevTranslate = getTranslate(graph);\r
-            useConstraints = b;\r
-        }\r
-        if (input.mouseClicked()) {\r
-            end();\r
-            return;\r
-        }\r
-        if (!input.mouseDragged()) {\r
-            parent.getDefaultAction().update();\r
-            return;\r
-        }   \r
-        detector.clearConstraintHighlights();\r
-        parent.setViewChanged(true);\r
-        \r
-        \r
-        \r
-        Vector3d translate = getTranslate(graph,prevTranslate);\r
-       \r
-        if (translate == null) {\r
-            //cameraRotateAction.update();\r
-            parent.getDefaultAction().update();\r
-            updateGizmo(graph);\r
-            return;\r
-        }\r
-        //translate.sub(prevTranslate);\r
-       \r
-        if ((input.dragModifiers() & MouseEvent.CTRL_MASK) > 0) {\r
-            String text = "";\r
-            for (IGraphicsNode mo : mos) {\r
-                \r
-                Point3d p;\r
-                if (worldCoord)\r
-                       p = G3DTools.getPoint(mo.getG3DNode(graph).getWorldPosition());//mo.getWorldPosition();\r
-                else\r
-                       p = G3DTools.getPoint(mo.getG3DNode(graph).getLocalPosition());\r
-                p.add(translate);\r
-                if (gizmo.getSelected() == TransformGizmo.X || gizmo.getSelected() == TransformGizmo.XY || gizmo.getSelected() == TransformGizmo.XZ || gizmo.getSelected() == TransformGizmo.XYZ) {\r
-                    p.x = Math.round(istep * p.x) / istep;\r
-                    BigDecimal bx = new BigDecimal(p.x);\r
-                    bx.setScale(decimals, BigDecimal.ROUND_HALF_UP);\r
-                    p.x = bx.doubleValue();\r
-                }\r
-                if (gizmo.getSelected() == TransformGizmo.Y || gizmo.getSelected() == TransformGizmo.XY || gizmo.getSelected() == TransformGizmo.YZ || gizmo.getSelected() == TransformGizmo.XYZ) {\r
-                    p.y = Math.round(istep * p.y) / istep;\r
-                    BigDecimal by = new BigDecimal(p.y);\r
-                    by.setScale(decimals, BigDecimal.ROUND_HALF_UP);\r
-                    p.y = by.doubleValue();\r
-                }\r
-                if (gizmo.getSelected() == TransformGizmo.Z || gizmo.getSelected() == TransformGizmo.YZ || gizmo.getSelected() == TransformGizmo.XZ || gizmo.getSelected() == TransformGizmo.XYZ) {      \r
-                    p.z = Math.round(istep * p.z) / istep;\r
-                    BigDecimal bz = new BigDecimal(p.z);\r
-                    bz.setScale(decimals, BigDecimal.ROUND_HALF_UP);\r
-                    p.z = bz.doubleValue();\r
-                }\r
-                text += p + " ";\r
-                if (worldCoord)\r
-                       G3DTools.setTuple3(mo.getG3DNode(graph).getWorldPosition(), p); \r
-                else\r
-                       G3DTools.setTuple3(mo.getG3DNode(graph).getLocalPosition(), p);\r
-                //mo.setWorldTranslation(p);\r
-                \r
-            }\r
-            if (useConstraints)\r
-                text+=detector.getSnapString();\r
-            setInfoText(text);\r
-            \r
-        } else {\r
-            String text = "";\r
-            for (IGraphicsNode mo : mos) {\r
-               Position pos;\r
-               if (worldCoord) {\r
-                       pos = mo.getG3DNode(graph).getWorldPosition();  \r
-               } else {\r
-                       pos = mo.getG3DNode(graph).getLocalPosition();\r
-               }\r
-               Point3d p = G3DTools.getPoint(pos);\r
-                       p.add(translate);\r
-                       text += p;\r
-                       G3DTools.setTuple3(pos, p);\r
-            }\r
-            if (useConstraints)\r
-                text+=detector.getSnapString();\r
-            setInfoText(text);\r
-           // parent.getGraph().commitChanges(CommitMessage.CHANGE_MESSAGE);\r
-        }\r
-        updateGizmo(graph);\r
-\r
-    }\r
-    \r
-    protected void updateGizmo(Graph graph) {\r
-        List<IGraphicsNode> mos = parent.getSelectionAdapter().getSelectedObjects();\r
-        if (mos.size() == 0) {\r
-               end();\r
-               return;\r
-        }\r
-        gizmo.update(G3DTools.getVector(mos.get(0).getG3DNode(graph).getWorldPosition()),camera.getCameraPos(),component);\r
-        \r
-   }\r
-    \r
-    public void setInfoText(String text) {\r
-       \r
-    }\r
-\r
-}
\ No newline at end of file