X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d.vtk%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fvtk%2Fshape%2FaxisActor.java;h=a94233ccc43209d2ac399c01f2ecbd1b1ac89e59;hb=9783d236a085584ac964444b365b566fd6a921ba;hp=a9e507eec597ee9111521a9bef3ed868338e426f;hpb=0f1acf557db4515528bc452c037db0831fd34ecf;p=simantics%2F3d.git diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/axisActor.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/axisActor.java index a9e507ee..a94233cc 100644 --- a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/axisActor.java +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/axisActor.java @@ -1,279 +1,279 @@ -/******************************************************************************* - * 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 axisActor 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 boolean rendered = false; - - public axisActor(vtkRenderer _ren, String label) { - super(); - ren = _ren; - createAxis(label); - } - - public axisActor(vtkRenderer _ren, String label, Vector3d dir) { - super(); - ren = _ren; - this.axisDir = dir; - createAxis(label); - } - - public void createAxis(String label) { - vtkLineSource line = new vtkLineSource(); - line.SetPoint1(0.0,0.0,0.0); - line.SetPoint2(axisDir.x,axisDir.y,axisDir.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.SetInput(line.GetOutput()); - tube.SetRadius(0.05 * axisDir.length()); - tube.SetNumberOfSides(8); - - vtkPolyDataMapper tubeMapper = new vtkPolyDataMapper(); - tubeMapper.SetInput(tube.GetOutput()); - - tubeActor = new vtkActor(); - tubeActor.SetMapper(tubeMapper); - tubeActor.PickableOff(); - - int coneRes = 12; - double coneScale = 0.3 * axisDir.length(); - - // --- x-Cone - vtkConeSource cone = new vtkConeSource(); - cone.SetResolution(coneRes); - vtkPolyDataMapper coneMapper = new vtkPolyDataMapper(); - coneMapper.SetInput(cone.GetOutput()); - coneActor = new vtkActor(); - coneActor.SetMapper(coneMapper); - coneActor.GetProperty().SetColor(1, 0, 0); - coneActor.SetScale(coneScale, coneScale, coneScale); - coneActor.SetPosition(axisDir.x,axisDir.y,axisDir.z); - coneActor.SetPickable(0); - - AxisAngle4d aa = MathTools.createRotation(new Vector3d(1,0,0), new Vector3d(axisDir)); - if (aa != null) - coneActor.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z); - - this.AddPart(tubeActor); - this.AddPart(coneActor); - - tube.GetOutput().Delete(); - cone.GetOutput().Delete(); - line.GetOutput().Delete(); - - tubeMapper.Delete(); - tube.Delete(); - cone.Delete(); - line.Delete(); - - coneMapper.Delete(); - - coneActor.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(); - Point3d p = new Point3d(); - private void updateTextLoc() { - tactor.GetPositionCoordinate().SetCoordinateSystemToWorld(); - - - GetMatrix(mat); - MathTools.set(m, mat); - p.set(axisDir.x, axisDir.y,axisDir.z); - 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); - } - - @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); - tubeActor.GetProperty().SetColor(r, g, b); - coneActor.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); - tactor.Delete(); - tubeActor.Delete(); - coneActor.Delete(); - super.Delete(); - } - - public void dispose() { - ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() { - - @Override - public void run() { - removeFromRenderer(); - Delete(); - } - }); - } - - @Override - public vtkProp3D getVtkProp() { - return this; - } - -} +/******************************************************************************* + * 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 axisActor 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 boolean rendered = false; + + public axisActor(vtkRenderer _ren, String label) { + super(); + ren = _ren; + createAxis(label); + } + + public axisActor(vtkRenderer _ren, String label, Vector3d dir) { + super(); + ren = _ren; + this.axisDir = dir; + createAxis(label); + } + + public void createAxis(String label) { + vtkLineSource line = new vtkLineSource(); + line.SetPoint1(0.0,0.0,0.0); + line.SetPoint2(axisDir.x,axisDir.y,axisDir.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; + double coneScale = 0.3 * axisDir.length(); + + // --- 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,axisDir.y,axisDir.z); + coneActor.SetPickable(0); + + AxisAngle4d aa = MathTools.createRotation(new Vector3d(1,0,0), new Vector3d(axisDir)); + if (aa != null) + coneActor.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z); + + this.AddPart(tubeActor); + this.AddPart(coneActor); + + tube.GetOutput().Delete(); + cone.GetOutput().Delete(); + line.GetOutput().Delete(); + + tubeMapper.Delete(); + tube.Delete(); + cone.Delete(); + line.Delete(); + + coneMapper.Delete(); + + coneActor.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(); + Point3d p = new Point3d(); + private void updateTextLoc() { + tactor.GetPositionCoordinate().SetCoordinateSystemToWorld(); + + + GetMatrix(mat); + MathTools.set(m, mat); + p.set(axisDir.x, axisDir.y,axisDir.z); + 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); + } + + @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); + tubeActor.GetProperty().SetColor(r, g, b); + coneActor.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); + tactor.Delete(); + tubeActor.Delete(); + coneActor.Delete(); + super.Delete(); + } + + public void dispose() { + ThreadUtils.asyncExec(AWTThread.getThreadAccess(), new Runnable() { + + @Override + public void run() { + removeFromRenderer(); + Delete(); + } + }); + } + + @Override + public vtkProp3D getVtkProp() { + return this; + } + +}