]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/gizmo/vtkGizmo.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / gizmo / vtkGizmo.java
diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/gizmo/vtkGizmo.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/gizmo/vtkGizmo.java
new file mode 100644 (file)
index 0000000..e559a71
--- /dev/null
@@ -0,0 +1,132 @@
+package org.simantics.g3d.vtk.gizmo;\r
+\r
+import java.util.Collection;\r
+\r
+import javax.vecmath.AxisAngle4d;\r
+import javax.vecmath.Tuple3d;\r
+import javax.vecmath.Vector3d;\r
+\r
+import org.simantics.g3d.gizmo.Gizmo;\r
+import org.simantics.g3d.math.MathTools;\r
+\r
+import vtk.vtkProp;\r
+import vtk.vtkProp3D;\r
+import vtk.vtkRenderer;\r
+\r
+public abstract class vtkGizmo implements Gizmo<vtkProp> {\r
+\r
+       private vtkRenderer ren1;\r
+       private Collection<vtkProp> gizmo;\r
+       \r
+       private Tuple3d position;\r
+       private AxisAngle4d orientation;\r
+       private Tuple3d scale;\r
+       \r
+       @Override\r
+       public void attach(Object renderingPart) {\r
+               if (ren1 != null)\r
+                       throw new RuntimeException("Gizmo is attached");\r
+               ren1 = (vtkRenderer)renderingPart;\r
+               attachActors();\r
+       }\r
+       \r
+       @Override\r
+       public void deattach() {\r
+               if (ren1 == null)\r
+                       throw new RuntimeException("Gizmo is not attached");\r
+               deattachActors();\r
+               ren1 = null;\r
+       }\r
+       \r
+       public boolean isAttached() {\r
+               return (ren1 != null);\r
+       }\r
+       \r
+       protected void attachActors() {\r
+               gizmo = getGizmo();\r
+               for (vtkProp p : gizmo) {\r
+                       ren1.AddActor(p);\r
+               }\r
+               if (position != null)\r
+                       setPosition(position);\r
+               if (orientation != null)\r
+                       setRotation(orientation);\r
+               if (scale != null)\r
+                       setScale(scale);\r
+       }\r
+       \r
+       protected void deattachActors() {\r
+               for (vtkProp p : gizmo) {\r
+                       ren1.RemoveActor(p);\r
+               }\r
+       }\r
+       \r
+       @Override\r
+       public boolean isPartOf(vtkProp pickedObject) {\r
+               for (vtkProp prop : gizmo) {\r
+                       if (prop.equals(pickedObject))\r
+                               return true;\r
+               }\r
+               return false;\r
+       }\r
+       \r
+        public void setPosition(Tuple3d position) {\r
+                this.position = position;\r
+                for (vtkProp p : gizmo) {\r
+                        ((vtkProp3D)p).SetPosition(position.x, position.y, position.z);\r
+                }\r
+        }\r
+        \r
+        public void setRotation(AxisAngle4d q) {\r
+                this.orientation = q;\r
+                for (vtkProp p : gizmo) {\r
+                        ((vtkProp3D)p).SetOrientation(0,0,0);\r
+                        ((vtkProp3D)p).RotateWXYZ(MathTools.radToDeg(q.angle), q.x, q.y, q.z);\r
+                }\r
+        }\r
+       \r
+        \r
+        public void setScale(Tuple3d s) {\r
+                this.scale = s;\r
+                for (vtkProp p : gizmo) {\r
+                        ((vtkProp3D)p).SetScale(s.x, s.y, s.z);\r
+                }\r
+        }\r
+        \r
+        public void setScale(double s) {\r
+                this.scale = new Vector3d(s,s,s);\r
+                for (vtkProp p : gizmo) {\r
+                        ((vtkProp3D)p).SetScale(s, s, s);\r
+                }\r
+        }\r
+       \r
+       public abstract Collection<vtkProp> getGizmo();\r
+       \r
+//     public double[] add(double[] color1, double[] color2) {\r
+//             double[] result = new double[]{color1[0]+color2[0],color1[1],+color2[1],color1[2]+color2[2]};\r
+//             return result;\r
+//     }\r
+//     \r
+//     public double[] add(double[] color1, double[] color2, double[] color3) {\r
+//             double[] result = new double[]{color1[0]+color2[0]+color3[0],color1[1],+color2[1]+color3[1],color1[2]+color2[2]+color3[2]};\r
+//             return result;\r
+//     }\r
+       \r
+       public double[] add(double[]... color) {\r
+               double result[] = new double[]{0,0,0};\r
+               for (double c[] : color) {\r
+                       for (int i = 0; i < 3; i++)\r
+                               result[i] += c[i];\r
+               }\r
+               \r
+               return result;\r
+       }\r
+       \r
+       \r
+       public vtkRenderer getRenderer() {\r
+               return ren1;\r
+       }\r
+       \r
+       \r
+       \r
+}\r