]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/DualHeadArrowActor.java
vtk 8.2.0 API changes
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / shape / DualHeadArrowActor.java
index 518eb514a79c789a26e5ff49bd427c7e6061c3b5..2df9ffb0aeede8e5a56e83fa39e2c80b9713d1be 100644 (file)
-package org.simantics.g3d.vtk.shape;\r
-\r
-import javax.vecmath.AxisAngle4d;\r
-import javax.vecmath.Matrix4d;\r
-import javax.vecmath.Point3d;\r
-import javax.vecmath.Vector3d;\r
-\r
-import org.simantics.g3d.math.MathTools;\r
-import org.simantics.utils.threads.AWTThread;\r
-import org.simantics.utils.threads.ThreadUtils;\r
-\r
-import vtk.vtkActor;\r
-import vtk.vtkAssembly;\r
-import vtk.vtkConeSource;\r
-import vtk.vtkLineSource;\r
-import vtk.vtkLinearTransform;\r
-import vtk.vtkMatrix4x4;\r
-import vtk.vtkPolyDataMapper;\r
-import vtk.vtkProp3D;\r
-import vtk.vtkRenderer;\r
-import vtk.vtkTextActor;\r
-import vtk.vtkTubeFilter;\r
-\r
-public class DualHeadArrowActor extends vtkAssembly implements IvtkVisualObject{\r
-\r
-       private vtkRenderer ren;\r
-       private Vector3d axisDir = new Vector3d(1,0,0);\r
-       private vtkTextActor tactor;\r
-       private vtkActor tubeActor;\r
-       private vtkActor coneActor;\r
-       private vtkActor coneActor2;\r
-       private boolean rendered = false;\r
-\r
-       public DualHeadArrowActor(vtkRenderer _ren, String label) {\r
-               super();\r
-               ren = _ren;\r
-               createAxis(label);\r
-       }\r
-       \r
-       public DualHeadArrowActor(vtkRenderer _ren, String label, Vector3d dir) {\r
-               super();\r
-               ren = _ren;\r
-               this.axisDir = dir;\r
-               if (dir.lengthSquared() < MathTools.NEAR_ZERO)\r
-                       throw new IllegalArgumentException("Direction vector length must mer larger than zero");\r
-               createAxis(label);\r
-       }\r
-\r
-       public void createAxis(String label) {\r
-               double coneScale = 0.3 * axisDir.length();\r
-               Vector3d coneOffset = new Vector3d(axisDir);\r
-               coneOffset.normalize();\r
-               coneOffset.scale(coneScale*0.5);\r
-               \r
-               vtkLineSource line = new vtkLineSource();\r
-               //line.SetPoint1(0.0,0.0,0.0);\r
-               line.SetPoint1(coneOffset.x,coneOffset.y,coneOffset.z);\r
-               line.SetPoint2(axisDir.x-coneOffset.x,axisDir.y-coneOffset.y,axisDir.z-coneOffset.z);\r
-               \r
-               tactor = new vtkTextActor();\r
-               \r
-               tactor.SetInput(label);\r
-               \r
-               tactor.SetTextScaleModeToNone();\r
-               tactor.GetTextProperty().SetColor(0.0, 0.0, 0.0);\r
-               tactor.GetTextProperty().ShadowOff();\r
-               tactor.GetTextProperty().ItalicOff();\r
-               tactor.GetTextProperty().BoldOff();\r
-               \r
-               tactor.GetTextProperty().Delete();\r
-               \r
-               tactor.SetMaximumLineHeight(0.25);\r
-               \r
-               tactor.SetPickable(0);\r
-               \r
-               vtkTubeFilter tube = new vtkTubeFilter();\r
-               tube.SetInput(line.GetOutput());\r
-               tube.SetRadius(0.05 * axisDir.length());\r
-               tube.SetNumberOfSides(8);\r
-\r
-               vtkPolyDataMapper tubeMapper = new vtkPolyDataMapper();\r
-               tubeMapper.SetInput(tube.GetOutput());\r
-\r
-               tubeActor = new vtkActor();\r
-               tubeActor.SetMapper(tubeMapper);\r
-               tubeActor.PickableOff();\r
-\r
-               int coneRes = 12;\r
-               \r
-\r
-               \r
-               \r
-               // --- x-Cone\r
-               vtkConeSource cone = new vtkConeSource();\r
-               cone.SetResolution(coneRes);\r
-               vtkPolyDataMapper coneMapper = new vtkPolyDataMapper();\r
-               coneMapper.SetInput(cone.GetOutput());\r
-               coneActor = new vtkActor();\r
-               coneActor.SetMapper(coneMapper);\r
-               coneActor.GetProperty().SetColor(1, 0, 0);\r
-               coneActor.SetScale(coneScale, coneScale, coneScale);\r
-               coneActor.SetPosition(axisDir.x-coneOffset.x,axisDir.y-coneOffset.y,axisDir.z-coneOffset.z);\r
-               coneActor.SetPickable(0);\r
-               \r
-               AxisAngle4d aa = MathTools.createRotation(new Vector3d(1,0,0), axisDir);\r
-               if (aa != null)\r
-                       coneActor.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);\r
-               \r
-               \r
-               coneActor2 = new vtkActor();\r
-               coneActor2.SetMapper(coneMapper);\r
-               coneActor2.GetProperty().SetColor(1, 0, 0);\r
-               coneActor2.SetScale(coneScale, coneScale, coneScale);\r
-               coneActor2.SetPosition(coneOffset.x,coneOffset.y,coneOffset.z);\r
-               coneActor2.SetPickable(0);\r
-               \r
-               aa = MathTools.createRotation(new Vector3d(-1,0,0), axisDir);\r
-               if (aa != null)\r
-                       coneActor2.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);\r
-               \r
-               this.AddPart(tubeActor);\r
-               this.AddPart(coneActor);\r
-               this.AddPart(coneActor2);\r
-               \r
-               tube.GetOutput().Delete();\r
-               cone.GetOutput().Delete();\r
-               line.GetOutput().Delete();\r
-               \r
-               tubeMapper.Delete();\r
-               tube.Delete();\r
-               cone.Delete();\r
-               line.Delete();\r
-\r
-               coneMapper.Delete();\r
-               \r
-               coneActor.GetProperty().Delete();\r
-               coneActor2.GetProperty().Delete();\r
-       }\r
-       \r
-       public void addToRenderer() {\r
-               if (rendered)\r
-                       return;\r
-               rendered = true;\r
-               \r
-               ren.AddActor2D(tactor);\r
-               \r
-               ren.AddActor(this);\r
-       }\r
-       \r
-       public void removeFromRenderer() {\r
-               if (!rendered)\r
-                       return;\r
-               rendered = false;\r
-               ren.RemoveActor2D(tactor);\r
-               ren.RemoveActor(this);\r
-       }\r
-       \r
-       public boolean isRendered() {\r
-               return rendered;\r
-       }\r
-\r
-       public void setAxesVisibility(boolean ison) {\r
-               this.SetVisibility(ison ? 1 : 0);\r
-               tactor.SetVisibility(ison ? 1 : 0);\r
-       }\r
-       \r
-       public void setLabelVisibility(boolean ison) {\r
-               tactor.SetVisibility(ison ? 1 : 0);\r
-       }\r
-       \r
-       double mat[] = new double[16];\r
-       Matrix4d m = new Matrix4d();\r
-       private void updateTextLoc() {\r
-               tactor.GetPositionCoordinate().SetCoordinateSystemToWorld();\r
-               \r
-               \r
-               GetMatrix(mat);\r
-               MathTools.set(m,mat);\r
-               Point3d p = new Point3d(axisDir.x*0.5, axisDir.y*0.5,axisDir.z*0.5);\r
-               m.transform(p);\r
-               tactor.GetPositionCoordinate().SetValue(p.x, p.y, p.z);\r
-               \r
-               tactor.GetPositionCoordinate().Delete();\r
-       }\r
-       \r
-       @Override\r
-       public void SetPickable(int id0) {\r
-               super.SetPickable(id0);\r
-               tubeActor.SetPickable(id0);\r
-               coneActor.SetPickable(id0);\r
-               coneActor2.SetPickable(id0);\r
-       }\r
-       \r
-       @Override\r
-       public void SetOrientation(double id0, double id1, double id2) {\r
-               super.SetOrientation(id0, id1, id2);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void RotateWXYZ(double id0, double id1, double id2, double id3) {\r
-               super.RotateWXYZ(id0, id1, id2, id3);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void SetPosition(double[] id0) {\r
-               super.SetPosition(id0);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void SetPosition(double id0, double id1, double id2) {\r
-               super.SetPosition(id0, id1, id2);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void SetOrientation(double[] id0) {\r
-               super.SetOrientation(id0);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void SetScale(double id0) {\r
-               super.SetScale(id0);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void SetScale(double id0, double id1, double id2) {\r
-               super.SetScale(id0, id1, id2);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void SetScale(double[] id0) {\r
-               super.SetScale(id0);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       public void SetColor(double r, double g, double b) {\r
-               coneActor.GetProperty().SetColor(r, g, b);\r
-               coneActor2.GetProperty().SetColor(r, g, b);\r
-               tubeActor.GetProperty().SetColor(r, g, b);\r
-               coneActor.GetProperty().Delete();\r
-               coneActor2.GetProperty().Delete();\r
-               tubeActor.GetProperty().Delete();\r
-       }\r
-       \r
-       public void SetTextColor(double r, double g, double b) {\r
-               tactor.GetTextProperty().SetColor(r, g, b);\r
-               tactor.GetTextProperty().Delete();\r
-       }\r
-       \r
-       @Override\r
-       public void SetUserMatrix(vtkMatrix4x4 id0) {\r
-               super.SetUserMatrix(id0);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void SetUserTransform(vtkLinearTransform id0) {\r
-               super.SetUserTransform(id0);\r
-               updateTextLoc();\r
-       }\r
-       \r
-       @Override\r
-       public void Delete() {\r
-               ren.RemoveActor(tactor);\r
-               ren.RemoveActor(tubeActor);\r
-               ren.RemoveActor(coneActor);\r
-               ren.RemoveActor(coneActor2);\r
-               tactor.Delete();\r
-               tubeActor.Delete();\r
-               coneActor.Delete();\r
-               coneActor2.Delete();\r
-               super.Delete();\r
-       }\r
-\r
-       public void dispose() {\r
-               ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() {\r
-                       \r
-                       @Override\r
-                       public void run() {\r
-                               removeFromRenderer();\r
-                               Delete();\r
-                       }\r
-               });\r
-       }\r
-       \r
-       @Override\r
-       public vtkProp3D getVtkProp() {\r
-               return this;\r
-       }\r
-       \r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2012, 2013 Association for Decentralized Information Management in
+ * Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.g3d.vtk.shape;
+
+import javax.vecmath.AxisAngle4d;
+import javax.vecmath.Matrix4d;
+import javax.vecmath.Point3d;
+import javax.vecmath.Vector3d;
+
+import org.simantics.g3d.math.MathTools;
+import org.simantics.utils.threads.AWTThread;
+import org.simantics.utils.threads.ThreadUtils;
+
+import vtk.vtkActor;
+import vtk.vtkAssembly;
+import vtk.vtkConeSource;
+import vtk.vtkLineSource;
+import vtk.vtkLinearTransform;
+import vtk.vtkMatrix4x4;
+import vtk.vtkPolyDataMapper;
+import vtk.vtkProp3D;
+import vtk.vtkRenderer;
+import vtk.vtkTextActor;
+import vtk.vtkTubeFilter;
+
+public class DualHeadArrowActor extends vtkAssembly implements IvtkVisualObject{
+
+       private vtkRenderer ren;
+       private Vector3d axisDir = new Vector3d(1,0,0);
+       private vtkTextActor tactor;
+       private vtkActor tubeActor;
+       private vtkActor coneActor;
+       private vtkActor coneActor2;
+       private boolean rendered = false;
+
+       public DualHeadArrowActor(vtkRenderer _ren, String label) {
+               super();
+               ren = _ren;
+               createAxis(label);
+       }
+       
+       public DualHeadArrowActor(vtkRenderer _ren, String label, Vector3d dir) {
+               super();
+               ren = _ren;
+               this.axisDir = dir;
+               if (dir.lengthSquared() < MathTools.NEAR_ZERO)
+                       throw new IllegalArgumentException("Direction vector length must mer larger than zero");
+               createAxis(label);
+       }
+
+       public void createAxis(String label) {
+               double coneScale = 0.3 * axisDir.length();
+               Vector3d coneOffset = new Vector3d(axisDir);
+               coneOffset.normalize();
+               coneOffset.scale(coneScale*0.5);
+               
+               vtkLineSource line = new vtkLineSource();
+               //line.SetPoint1(0.0,0.0,0.0);
+               line.SetPoint1(coneOffset.x,coneOffset.y,coneOffset.z);
+               line.SetPoint2(axisDir.x-coneOffset.x,axisDir.y-coneOffset.y,axisDir.z-coneOffset.z);
+               
+               tactor = new vtkTextActor();
+               
+               tactor.SetInput(label);
+               
+               tactor.SetTextScaleModeToNone();
+               tactor.GetTextProperty().SetColor(0.0, 0.0, 0.0);
+               tactor.GetTextProperty().ShadowOff();
+               tactor.GetTextProperty().ItalicOff();
+               tactor.GetTextProperty().BoldOff();
+               
+               tactor.GetTextProperty().Delete();
+               
+               tactor.SetMaximumLineHeight(0.25);
+               
+               tactor.SetPickable(0);
+               
+               vtkTubeFilter tube = new vtkTubeFilter();
+               tube.SetInputData(line.GetOutput());
+               tube.SetRadius(0.05 * axisDir.length());
+               tube.SetNumberOfSides(8);
+
+               vtkPolyDataMapper tubeMapper = new vtkPolyDataMapper();
+               tubeMapper.SetInputData(tube.GetOutput());
+
+               tubeActor = new vtkActor();
+               tubeActor.SetMapper(tubeMapper);
+               tubeActor.PickableOff();
+
+               int coneRes = 12;
+               
+
+               
+               
+               // --- x-Cone
+               vtkConeSource cone = new vtkConeSource();
+               cone.SetResolution(coneRes);
+               vtkPolyDataMapper coneMapper = new vtkPolyDataMapper();
+               coneMapper.SetInputData(cone.GetOutput());
+               coneActor = new vtkActor();
+               coneActor.SetMapper(coneMapper);
+               coneActor.GetProperty().SetColor(1, 0, 0);
+               coneActor.SetScale(coneScale, coneScale, coneScale);
+               coneActor.SetPosition(axisDir.x-coneOffset.x,axisDir.y-coneOffset.y,axisDir.z-coneOffset.z);
+               coneActor.SetPickable(0);
+               
+               AxisAngle4d aa = MathTools.createRotation(new Vector3d(1,0,0), axisDir);
+               if (aa != null)
+                       coneActor.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);
+               
+               
+               coneActor2 = new vtkActor();
+               coneActor2.SetMapper(coneMapper);
+               coneActor2.GetProperty().SetColor(1, 0, 0);
+               coneActor2.SetScale(coneScale, coneScale, coneScale);
+               coneActor2.SetPosition(coneOffset.x,coneOffset.y,coneOffset.z);
+               coneActor2.SetPickable(0);
+               
+               aa = MathTools.createRotation(new Vector3d(-1,0,0), axisDir);
+               if (aa != null)
+                       coneActor2.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);
+               
+               this.AddPart(tubeActor);
+               this.AddPart(coneActor);
+               this.AddPart(coneActor2);
+               
+               tube.GetOutput().Delete();
+               cone.GetOutput().Delete();
+               line.GetOutput().Delete();
+               
+               tubeMapper.Delete();
+               tube.Delete();
+               cone.Delete();
+               line.Delete();
+
+               coneMapper.Delete();
+               
+               coneActor.GetProperty().Delete();
+               coneActor2.GetProperty().Delete();
+       }
+       
+       public void addToRenderer() {
+               if (rendered)
+                       return;
+               rendered = true;
+               
+               ren.AddActor2D(tactor);
+               
+               ren.AddActor(this);
+       }
+       
+       public void removeFromRenderer() {
+               if (!rendered)
+                       return;
+               rendered = false;
+               ren.RemoveActor2D(tactor);
+               ren.RemoveActor(this);
+       }
+       
+       public boolean isRendered() {
+               return rendered;
+       }
+
+       public void setAxesVisibility(boolean ison) {
+               this.SetVisibility(ison ? 1 : 0);
+               tactor.SetVisibility(ison ? 1 : 0);
+       }
+       
+       public void setLabelVisibility(boolean ison) {
+               tactor.SetVisibility(ison ? 1 : 0);
+       }
+       
+       double mat[] = new double[16];
+       Matrix4d m = new Matrix4d();
+       private void updateTextLoc() {
+               tactor.GetPositionCoordinate().SetCoordinateSystemToWorld();
+               
+               
+               GetMatrix(mat);
+               MathTools.set(m,mat);
+               Point3d p = new Point3d(axisDir.x*0.5, axisDir.y*0.5,axisDir.z*0.5);
+               m.transform(p);
+               tactor.GetPositionCoordinate().SetValue(p.x, p.y, p.z);
+               
+               tactor.GetPositionCoordinate().Delete();
+       }
+       
+       @Override
+       public void SetPickable(int id0) {
+               super.SetPickable(id0);
+               tubeActor.SetPickable(id0);
+               coneActor.SetPickable(id0);
+               coneActor2.SetPickable(id0);
+       }
+       
+       @Override
+       public void SetOrientation(double id0, double id1, double id2) {
+               super.SetOrientation(id0, id1, id2);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void RotateWXYZ(double id0, double id1, double id2, double id3) {
+               super.RotateWXYZ(id0, id1, id2, id3);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void SetPosition(double[] id0) {
+               super.SetPosition(id0);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void SetPosition(double id0, double id1, double id2) {
+               super.SetPosition(id0, id1, id2);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void SetOrientation(double[] id0) {
+               super.SetOrientation(id0);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void SetScale(double id0) {
+               super.SetScale(id0);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void SetScale(double id0, double id1, double id2) {
+               super.SetScale(id0, id1, id2);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void SetScale(double[] id0) {
+               super.SetScale(id0);
+               updateTextLoc();
+       }
+       
+       public void SetColor(double r, double g, double b) {
+               coneActor.GetProperty().SetColor(r, g, b);
+               coneActor2.GetProperty().SetColor(r, g, b);
+               tubeActor.GetProperty().SetColor(r, g, b);
+               coneActor.GetProperty().Delete();
+               coneActor2.GetProperty().Delete();
+               tubeActor.GetProperty().Delete();
+       }
+       
+       public void SetTextColor(double r, double g, double b) {
+               tactor.GetTextProperty().SetColor(r, g, b);
+               tactor.GetTextProperty().Delete();
+       }
+       
+       @Override
+       public void SetUserMatrix(vtkMatrix4x4 id0) {
+               super.SetUserMatrix(id0);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void SetUserTransform(vtkLinearTransform id0) {
+               super.SetUserTransform(id0);
+               updateTextLoc();
+       }
+       
+       @Override
+       public void Delete() {
+               ren.RemoveActor(tactor);
+               ren.RemoveActor(tubeActor);
+               ren.RemoveActor(coneActor);
+               ren.RemoveActor(coneActor2);
+               tactor.Delete();
+               tubeActor.Delete();
+               coneActor.Delete();
+               coneActor2.Delete();
+               super.Delete();
+       }
+
+       public void dispose() {
+               ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() {
+                       
+                       @Override
+                       public void run() {
+                               removeFromRenderer();
+                               Delete();
+                       }
+               });
+       }
+       
+       @Override
+       public vtkProp3D getVtkProp() {
+               return this;
+       }
+       
+}