-/*******************************************************************************\r
- * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
- * Industry THTH ry.\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.g3d.vtk.utils;\r
-\r
-import javax.vecmath.AxisAngle4d;\r
-import javax.vecmath.Vector3d;\r
-\r
-import org.simantics.g3d.math.MathTools;\r
-import org.simantics.g3d.vtk.shape.IvtkVisualObject;\r
-\r
-import vtk.vtkActor;\r
-import vtk.vtkCamera;\r
-import vtk.vtkContourFilter;\r
-import vtk.vtkDataObject;\r
-import vtk.vtkOutlineFilter;\r
-import vtk.vtkOutlineSource;\r
-import vtk.vtkPolyData;\r
-import vtk.vtkPolyDataMapper;\r
-import vtk.vtkPolyDataSilhouette;\r
-import vtk.vtkProp3D;\r
-import vtk.vtkRenderWindow;\r
-import vtk.vtkRenderer;\r
-import vtk.vtkTransform;\r
-import vtk.vtkTransformPolyDataFilter;\r
-import vtk.vtkWindowToImageFilter;\r
-\r
-public class vtkEffect {\r
-\r
- private static vtkRenderer tmpRenderer;\r
- \r
- public static vtkRenderer getRenderer() {\r
- if (tmpRenderer == null)\r
- tmpRenderer = new vtkRenderer();\r
- return tmpRenderer;\r
- }\r
- public static vtkActor createContour(vtkProp3D tmpProp) {\r
- \r
- vtkRenderer tmpRenderer = getRenderer();\r
- tmpRenderer.SetBackground(1,1,1);\r
- \r
- \r
- if (tmpProp instanceof IvtkVisualObject) {\r
- ((IvtkVisualObject)tmpProp).addToRenderer();\r
- } else {\r
- tmpRenderer.AddActor(tmpProp);\r
- }\r
- \r
- if (tmpProp instanceof vtkActor) {\r
- ((vtkActor)tmpProp).GetProperty().SetColor(0, 0, 0);\r
- }\r
- \r
- \r
- double bounds_data[] = tmpProp.GetBounds();\r
- double center_data[] = tmpProp.GetCenter();\r
- \r
- tmpRenderer.ResetCamera();\r
- tmpRenderer.GetActiveCamera().SetParallelProjection(1);\r
- \r
- vtkRenderWindow tmpRenderWindow = new vtkRenderWindow();\r
- tmpRenderWindow.SetOffScreenRendering(1);\r
- tmpRenderWindow.AddRenderer(tmpRenderer);\r
- tmpRenderWindow.Render();\r
- \r
- vtkWindowToImageFilter windowToImageFilter = new vtkWindowToImageFilter();\r
- windowToImageFilter.SetInput(tmpRenderWindow);\r
- windowToImageFilter.SetMagnification(2);\r
- windowToImageFilter.Update();\r
- \r
- vtkContourFilter contourFilter = new vtkContourFilter();\r
- contourFilter.SetInputConnection(windowToImageFilter.GetOutputPort());\r
- \r
- contourFilter.SetValue(0, 255);\r
- contourFilter.Update();\r
- \r
- vtkPolyData contour = contourFilter.GetOutput();\r
- \r
- double bounds_contour[] = new double[6]; \r
- double center_contour[] = new double[3];\r
- double trans_x=0., trans_y=0., trans_z=0., ratio_x=0., ratio_y=0.;\r
- contour.GetBounds(bounds_contour);\r
- \r
- ratio_x = (bounds_data[1]-bounds_data[0])/(bounds_contour[1]-bounds_contour[0]);\r
- ratio_y = (bounds_data[3]-bounds_data[2])/(bounds_contour[3]-bounds_contour[2]);\r
- \r
- vtkTransform transform1 = new vtkTransform();\r
- transform1.Scale(ratio_x,ratio_y,1);\r
- \r
- vtkTransformPolyDataFilter tFilter1 = new vtkTransformPolyDataFilter();\r
- tFilter1.SetInput(contour);\r
- tFilter1.SetTransform(transform1);\r
- tFilter1.Update();\r
- \r
- contour = tFilter1.GetOutput();\r
- \r
- contour.GetCenter(center_contour);\r
- trans_x = center_data[0]-center_contour[0];\r
- trans_y = center_data[1]-center_contour[1];\r
- trans_z = center_data[2]-center_contour[2];\r
-\r
- vtkTransform transform2 = new vtkTransform();\r
- transform2.Translate( trans_x, trans_y, trans_z);\r
- \r
- vtkTransformPolyDataFilter tFilter2 = new vtkTransformPolyDataFilter();\r
- tFilter2.SetInput(contour);\r
- tFilter2.SetTransform(transform2);\r
- tFilter2.Update();\r
- \r
- contour = tFilter2.GetOutput();\r
- \r
- vtkPolyDataMapper mapper = new vtkPolyDataMapper();\r
- mapper.SetInput(contour);\r
- \r
- \r
- vtkActor actor =new vtkActor();\r
- actor.SetMapper(mapper);\r
- actor.GetProperty().SetLineWidth(2.);\r
- \r
- tmpRenderer.RemoveActor(tmpProp);\r
- \r
- tFilter1.Delete();\r
- tFilter2.Delete();\r
- contour.Delete();\r
- contourFilter.Delete();\r
- mapper.Delete();\r
- tmpRenderWindow.Delete();\r
- transform1.Delete();\r
- transform2.Delete();\r
- windowToImageFilter.Delete();\r
- \r
- return actor;\r
- }\r
- \r
- public static vtkActor createContour(vtkProp3D tmpProp, vtkRenderer ren) {\r
- \r
- vtkRenderer tmpRenderer = getRenderer();\r
- tmpRenderer.SetBackground(1,1,1);\r
- \r
- \r
- if (tmpProp instanceof IvtkVisualObject) {\r
- ((IvtkVisualObject)tmpProp).addToRenderer();\r
- } else {\r
- tmpRenderer.AddActor(tmpProp);\r
- }\r
- \r
- if (tmpProp instanceof vtkActor) {\r
- ((vtkActor)tmpProp).GetProperty().SetColor(0, 0, 0);\r
- }\r
- \r
- \r
- //double bounds_data[] = tmpProp.GetBounds();\r
- double center_data[] = tmpProp.GetCenter();\r
- \r
- tmpRenderer.ResetCamera();\r
- \r
- vtkCamera camera = ren.GetActiveCamera();\r
- \r
- vtkCamera tmpCamera = tmpRenderer.GetActiveCamera(); \r
- tmpCamera.SetParallelProjection(camera.GetParallelProjection());\r
- \r
- \r
- Vector3d pos = new Vector3d(camera.GetPosition());\r
- Vector3d foc = new Vector3d(camera.GetFocalPoint());\r
- Vector3d dir = new Vector3d();\r
- dir.sub(pos,foc);\r
- double l = dir.length();\r
-// dir.scale(1.0/l);\r
-// \r
-// \r
-//\r
-// \r
-// dir.scale(2.0);\r
-// Vector3d tmpFoc = new Vector3d(tmpCamera.GetFocalPoint());\r
-// tmpFoc.add(dir);\r
-// tmpCamera.SetPosition(tmpFoc.x,tmpFoc.y,tmpFoc.z);\r
-// tmpCamera.SetRoll(camera.GetRoll());\r
- \r
- tmpCamera.DeepCopy(camera);\r
- //tmpCamera.SetModelTransformMatrix(camera.GetModelTransformMatrix());\r
- tmpCamera.UpdateViewport(tmpRenderer);\r
- \r
- vtkRenderWindow tmpRenderWindow = new vtkRenderWindow();\r
- tmpRenderWindow.SetOffScreenRendering(1);\r
- tmpRenderWindow.AddRenderer(tmpRenderer);\r
- tmpRenderWindow.Render();\r
- \r
- vtkWindowToImageFilter windowToImageFilter = new vtkWindowToImageFilter();\r
- windowToImageFilter.SetInput(tmpRenderWindow);\r
- windowToImageFilter.SetMagnification(2);\r
- windowToImageFilter.Update();\r
- \r
- vtkContourFilter contourFilter = new vtkContourFilter();\r
- contourFilter.SetInputConnection(windowToImageFilter.GetOutputPort());\r
- \r
- contourFilter.SetValue(0, 255);\r
- contourFilter.Update();\r
- \r
- vtkPolyData contour = contourFilter.GetOutput();\r
- \r
- \r
- double or[] = camera.GetOrientationWXYZ();\r
- AxisAngle4d aa = new AxisAngle4d();\r
- aa.angle = -MathTools.degToRad(or[0]);\r
- aa.x = or[1];\r
- aa.y = or[2];\r
- aa.z = or[3];\r
- \r
- vtkTransform transform0 = new vtkTransform();\r
- transform0.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);\r
- \r
- vtkTransformPolyDataFilter tFilter0 = new vtkTransformPolyDataFilter();\r
- tFilter0.SetInput(contour);\r
- tFilter0.SetTransform(transform0);\r
- tFilter0.Update();\r
- \r
- contour.Delete();\r
- contour = tFilter0.GetOutput();\r
- \r
- double bounds_contour[] = new double[6]; \r
- \r
- double trans_x=0., trans_y=0., trans_z=0., ratio_x=0.002, ratio_y=0.002, ratio_z=0.002;\r
- contour.GetBounds(bounds_contour);\r
-// \r
-// ratio_x = (bounds_data[1]-bounds_data[0])/(bounds_contour[1]-bounds_contour[0]);\r
-// ratio_y = (bounds_data[3]-bounds_data[2])/(bounds_contour[3]-bounds_contour[2]);\r
-// ratio_z = (bounds_data[5]-bounds_data[4])/(bounds_contour[5]-bounds_contour[4]);\r
- ratio_x = l*0.0008;\r
- ratio_y = l*0.0008;\r
- ratio_z = l*0.0008;\r
- \r
- \r
- System.out.println(ratio_x + " " + ratio_y);\r
- \r
- \r
-// \r
- vtkTransform transform1 = new vtkTransform();\r
- transform1.Scale(ratio_x,ratio_y,ratio_z);\r
- \r
- vtkTransformPolyDataFilter tFilter1 = new vtkTransformPolyDataFilter();\r
- tFilter1.SetInput(contour);\r
- tFilter1.SetTransform(transform1);\r
- tFilter1.Update();\r
- \r
- contour.Delete();\r
- contour = tFilter1.GetOutput();\r
- \r
- double center_contour[] = new double[3];\r
- contour.GetCenter(center_contour);\r
- trans_x = center_data[0]-center_contour[0];\r
- trans_y = center_data[1]-center_contour[1];\r
- trans_z = center_data[2]-center_contour[2];\r
-// \r
- System.out.println(trans_x + " " + trans_y + " " + trans_z);\r
-//\r
- vtkTransform transform2 = new vtkTransform();\r
- transform2.Translate( trans_x, trans_y, trans_z);\r
- \r
- vtkTransformPolyDataFilter tFilter2 = new vtkTransformPolyDataFilter();\r
- tFilter2.SetInput(contour);\r
- tFilter2.SetTransform(transform2);\r
- tFilter2.Update();\r
- \r
- contour.Delete();\r
- contour = tFilter2.GetOutput();\r
- \r
- vtkPolyDataMapper mapper = new vtkPolyDataMapper();\r
- mapper.SetInput(contour);\r
- \r
- \r
- vtkActor actor =new vtkActor();\r
- actor.SetMapper(mapper);\r
- actor.GetProperty().SetLineWidth(2.);\r
- actor.GetProperty().SetColor(0,0,1);\r
- actor.GetProperty().Delete();\r
- \r
- tmpRenderer.RemoveActor(tmpProp);\r
- \r
- tFilter0.Delete();\r
- tFilter1.Delete();\r
- tFilter2.Delete();\r
- contour.Delete();\r
- contourFilter.Delete();\r
- mapper.Delete();\r
- tmpRenderWindow.Delete();\r
- transform0.Delete();\r
- transform1.Delete();\r
- transform2.Delete();\r
- windowToImageFilter.GetOutputPort().Delete();\r
- windowToImageFilter.Delete();\r
- \r
- ren.AddActor(actor);\r
- \r
-// vtkMatrix4x4 m = camera.GetModelTransformMatrix();\r
-// m.Invert();\r
-// actor.SetUserMatrix(m);\r
- //m.Delete();\r
- //actor.SetPosition(trans_x,trans_y, trans_z);\r
- //actor.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);\r
- //\r
- return actor;\r
- }\r
- \r
- public static vtkActor createSilhouette(vtkRenderer ren, vtkDataObject data) {\r
- \r
- \r
- vtkPolyDataSilhouette silhouette = new vtkPolyDataSilhouette();\r
- \r
- silhouette.SetInput(data);\r
- silhouette.SetCamera(ren.GetActiveCamera());\r
- silhouette.SetEnableFeatureAngle(0);\r
- vtkPolyDataMapper mapper = new vtkPolyDataMapper();\r
- \r
- mapper.SetInputConnection(silhouette.GetOutputPort());\r
- \r
- vtkActor actor = new vtkActor();\r
- actor.SetMapper(mapper);\r
- \r
- silhouette.GetOutputPort().Delete();\r
- silhouette.Delete();\r
- mapper.Delete();\r
- \r
- return actor;\r
- }\r
- \r
- public static vtkActor createOutline(vtkDataObject data) {\r
- vtkOutlineFilter filter = new vtkOutlineFilter();\r
- filter.SetInput(data);\r
- vtkPolyDataMapper mapper = new vtkPolyDataMapper();\r
- mapper.SetInputConnection(filter.GetOutputPort());\r
- \r
- vtkActor actor = new vtkActor();\r
- actor.SetMapper(mapper);\r
- \r
- filter.GetOutputPort().Delete();\r
- filter.Delete();\r
- mapper.Delete();\r
- \r
- return actor;\r
- }\r
- \r
- public static vtkActor createOutline(vtkProp3D prop) {\r
-\r
- double bounds[] = prop.GetBounds();\r
-\r
- vtkOutlineSource source = new vtkOutlineSource();\r
- source.SetBounds(bounds);\r
- \r
- vtkOutlineFilter filter = new vtkOutlineFilter();\r
- filter.SetInput(source.GetOutput());\r
- vtkPolyDataMapper mapper = new vtkPolyDataMapper();\r
- mapper.SetInputConnection(filter.GetOutputPort());\r
- \r
- vtkActor actor = new vtkActor();\r
- actor.SetMapper(mapper);\r
- \r
- source.GetOutput().Delete();\r
- source.Delete();\r
- filter.GetOutputPort().Delete();\r
- filter.Delete();\r
- mapper.Delete();\r
- \r
- actor.SetPickable(0);\r
- return actor;\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.utils;
+
+import javax.vecmath.AxisAngle4d;
+import javax.vecmath.Vector3d;
+
+import org.simantics.g3d.math.MathTools;
+import org.simantics.g3d.vtk.shape.IvtkVisualObject;
+
+import vtk.vtkActor;
+import vtk.vtkCamera;
+import vtk.vtkContourFilter;
+import vtk.vtkDataObject;
+import vtk.vtkOutlineFilter;
+import vtk.vtkOutlineSource;
+import vtk.vtkPolyData;
+import vtk.vtkPolyDataMapper;
+import vtk.vtkPolyDataSilhouette;
+import vtk.vtkProp3D;
+import vtk.vtkRenderWindow;
+import vtk.vtkRenderer;
+import vtk.vtkTransform;
+import vtk.vtkTransformPolyDataFilter;
+import vtk.vtkWindowToImageFilter;
+
+public class vtkEffect {
+
+ private static vtkRenderer tmpRenderer;
+
+ public static vtkRenderer getRenderer() {
+ if (tmpRenderer == null)
+ tmpRenderer = new vtkRenderer();
+ return tmpRenderer;
+ }
+ public static vtkActor createContour(vtkProp3D tmpProp) {
+
+ vtkRenderer tmpRenderer = getRenderer();
+ tmpRenderer.SetBackground(1,1,1);
+
+
+ if (tmpProp instanceof IvtkVisualObject) {
+ ((IvtkVisualObject)tmpProp).addToRenderer();
+ } else {
+ tmpRenderer.AddActor(tmpProp);
+ }
+
+ if (tmpProp instanceof vtkActor) {
+ ((vtkActor)tmpProp).GetProperty().SetColor(0, 0, 0);
+ }
+
+
+ double bounds_data[] = tmpProp.GetBounds();
+ double center_data[] = tmpProp.GetCenter();
+
+ tmpRenderer.ResetCamera();
+ tmpRenderer.GetActiveCamera().SetParallelProjection(1);
+
+ vtkRenderWindow tmpRenderWindow = new vtkRenderWindow();
+ tmpRenderWindow.SetOffScreenRendering(1);
+ tmpRenderWindow.AddRenderer(tmpRenderer);
+ tmpRenderWindow.Render();
+
+ vtkWindowToImageFilter windowToImageFilter = new vtkWindowToImageFilter();
+ windowToImageFilter.SetInput(tmpRenderWindow);
+ //windowToImageFilter.SetMagnification(2);
+ windowToImageFilter.Update();
+
+ vtkContourFilter contourFilter = new vtkContourFilter();
+ contourFilter.SetInputConnection(windowToImageFilter.GetOutputPort());
+
+ contourFilter.SetValue(0, 255);
+ contourFilter.Update();
+
+ vtkPolyData contour = contourFilter.GetOutput();
+
+ double bounds_contour[] = new double[6];
+ double center_contour[] = new double[3];
+ double trans_x=0., trans_y=0., trans_z=0., ratio_x=0., ratio_y=0.;
+ contour.GetBounds(bounds_contour);
+
+ ratio_x = (bounds_data[1]-bounds_data[0])/(bounds_contour[1]-bounds_contour[0]);
+ ratio_y = (bounds_data[3]-bounds_data[2])/(bounds_contour[3]-bounds_contour[2]);
+
+ vtkTransform transform1 = new vtkTransform();
+ transform1.Scale(ratio_x,ratio_y,1);
+
+ vtkTransformPolyDataFilter tFilter1 = new vtkTransformPolyDataFilter();
+ tFilter1.SetInputData(contour);
+ tFilter1.SetTransform(transform1);
+ tFilter1.Update();
+
+ contour = tFilter1.GetOutput();
+
+ contour.GetCenter(center_contour);
+ trans_x = center_data[0]-center_contour[0];
+ trans_y = center_data[1]-center_contour[1];
+ trans_z = center_data[2]-center_contour[2];
+
+ vtkTransform transform2 = new vtkTransform();
+ transform2.Translate( trans_x, trans_y, trans_z);
+
+ vtkTransformPolyDataFilter tFilter2 = new vtkTransformPolyDataFilter();
+ tFilter2.SetInputData(contour);
+ tFilter2.SetTransform(transform2);
+ tFilter2.Update();
+
+ contour = tFilter2.GetOutput();
+
+ vtkPolyDataMapper mapper = new vtkPolyDataMapper();
+ mapper.SetInputData(contour);
+
+
+ vtkActor actor =new vtkActor();
+ actor.SetMapper(mapper);
+ actor.GetProperty().SetLineWidth(2.);
+
+ tmpRenderer.RemoveActor(tmpProp);
+
+ tFilter1.Delete();
+ tFilter2.Delete();
+ contour.Delete();
+ contourFilter.Delete();
+ mapper.Delete();
+ tmpRenderWindow.Delete();
+ transform1.Delete();
+ transform2.Delete();
+ windowToImageFilter.Delete();
+
+ return actor;
+ }
+
+ public static vtkActor createContour(vtkProp3D tmpProp, vtkRenderer ren) {
+
+ vtkRenderer tmpRenderer = getRenderer();
+ tmpRenderer.SetBackground(1,1,1);
+
+
+ if (tmpProp instanceof IvtkVisualObject) {
+ ((IvtkVisualObject)tmpProp).addToRenderer();
+ } else {
+ tmpRenderer.AddActor(tmpProp);
+ }
+
+ if (tmpProp instanceof vtkActor) {
+ ((vtkActor)tmpProp).GetProperty().SetColor(0, 0, 0);
+ }
+
+
+ //double bounds_data[] = tmpProp.GetBounds();
+ double center_data[] = tmpProp.GetCenter();
+
+ tmpRenderer.ResetCamera();
+
+ vtkCamera camera = ren.GetActiveCamera();
+
+ vtkCamera tmpCamera = tmpRenderer.GetActiveCamera();
+ tmpCamera.SetParallelProjection(camera.GetParallelProjection());
+
+
+ Vector3d pos = new Vector3d(camera.GetPosition());
+ Vector3d foc = new Vector3d(camera.GetFocalPoint());
+ Vector3d dir = new Vector3d();
+ dir.sub(pos,foc);
+ double l = dir.length();
+// dir.scale(1.0/l);
+//
+//
+//
+//
+// dir.scale(2.0);
+// Vector3d tmpFoc = new Vector3d(tmpCamera.GetFocalPoint());
+// tmpFoc.add(dir);
+// tmpCamera.SetPosition(tmpFoc.x,tmpFoc.y,tmpFoc.z);
+// tmpCamera.SetRoll(camera.GetRoll());
+
+ tmpCamera.DeepCopy(camera);
+ //tmpCamera.SetModelTransformMatrix(camera.GetModelTransformMatrix());
+ tmpCamera.UpdateViewport(tmpRenderer);
+
+ vtkRenderWindow tmpRenderWindow = new vtkRenderWindow();
+ tmpRenderWindow.SetOffScreenRendering(1);
+ tmpRenderWindow.AddRenderer(tmpRenderer);
+ tmpRenderWindow.Render();
+
+ vtkWindowToImageFilter windowToImageFilter = new vtkWindowToImageFilter();
+ windowToImageFilter.SetInput(tmpRenderWindow);
+ //windowToImageFilter.SetMagnification(2);
+ windowToImageFilter.Update();
+
+ vtkContourFilter contourFilter = new vtkContourFilter();
+ contourFilter.SetInputConnection(windowToImageFilter.GetOutputPort());
+
+ contourFilter.SetValue(0, 255);
+ contourFilter.Update();
+
+ vtkPolyData contour = contourFilter.GetOutput();
+
+
+ double or[] = camera.GetOrientationWXYZ();
+ AxisAngle4d aa = new AxisAngle4d();
+ aa.angle = -MathTools.degToRad(or[0]);
+ aa.x = or[1];
+ aa.y = or[2];
+ aa.z = or[3];
+
+ vtkTransform transform0 = new vtkTransform();
+ transform0.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);
+
+ vtkTransformPolyDataFilter tFilter0 = new vtkTransformPolyDataFilter();
+ tFilter0.SetInputData(contour);
+ tFilter0.SetTransform(transform0);
+ tFilter0.Update();
+
+ contour.Delete();
+ contour = tFilter0.GetOutput();
+
+ double bounds_contour[] = new double[6];
+
+ double trans_x=0., trans_y=0., trans_z=0., ratio_x=0.002, ratio_y=0.002, ratio_z=0.002;
+ contour.GetBounds(bounds_contour);
+//
+// ratio_x = (bounds_data[1]-bounds_data[0])/(bounds_contour[1]-bounds_contour[0]);
+// ratio_y = (bounds_data[3]-bounds_data[2])/(bounds_contour[3]-bounds_contour[2]);
+// ratio_z = (bounds_data[5]-bounds_data[4])/(bounds_contour[5]-bounds_contour[4]);
+ ratio_x = l*0.0008;
+ ratio_y = l*0.0008;
+ ratio_z = l*0.0008;
+
+
+ System.out.println(ratio_x + " " + ratio_y);
+
+
+//
+ vtkTransform transform1 = new vtkTransform();
+ transform1.Scale(ratio_x,ratio_y,ratio_z);
+
+ vtkTransformPolyDataFilter tFilter1 = new vtkTransformPolyDataFilter();
+ tFilter1.SetInputData(contour);
+ tFilter1.SetTransform(transform1);
+ tFilter1.Update();
+
+ contour.Delete();
+ contour = tFilter1.GetOutput();
+
+ double center_contour[] = new double[3];
+ contour.GetCenter(center_contour);
+ trans_x = center_data[0]-center_contour[0];
+ trans_y = center_data[1]-center_contour[1];
+ trans_z = center_data[2]-center_contour[2];
+//
+ System.out.println(trans_x + " " + trans_y + " " + trans_z);
+//
+ vtkTransform transform2 = new vtkTransform();
+ transform2.Translate( trans_x, trans_y, trans_z);
+
+ vtkTransformPolyDataFilter tFilter2 = new vtkTransformPolyDataFilter();
+ tFilter2.SetInputData(contour);
+ tFilter2.SetTransform(transform2);
+ tFilter2.Update();
+
+ contour.Delete();
+ contour = tFilter2.GetOutput();
+
+ vtkPolyDataMapper mapper = new vtkPolyDataMapper();
+ mapper.SetInputData(contour);
+
+
+ vtkActor actor =new vtkActor();
+ actor.SetMapper(mapper);
+ actor.GetProperty().SetLineWidth(2.);
+ actor.GetProperty().SetColor(0,0,1);
+ actor.GetProperty().Delete();
+
+ tmpRenderer.RemoveActor(tmpProp);
+
+ tFilter0.Delete();
+ tFilter1.Delete();
+ tFilter2.Delete();
+ contour.Delete();
+ contourFilter.Delete();
+ mapper.Delete();
+ tmpRenderWindow.Delete();
+ transform0.Delete();
+ transform1.Delete();
+ transform2.Delete();
+ windowToImageFilter.GetOutputPort().Delete();
+ windowToImageFilter.Delete();
+
+ ren.AddActor(actor);
+
+// vtkMatrix4x4 m = camera.GetModelTransformMatrix();
+// m.Invert();
+// actor.SetUserMatrix(m);
+ //m.Delete();
+ //actor.SetPosition(trans_x,trans_y, trans_z);
+ //actor.RotateWXYZ(MathTools.radToDeg(aa.angle), aa.x, aa.y, aa.z);
+ //
+ return actor;
+ }
+
+ public static vtkActor createSilhouette(vtkRenderer ren, vtkDataObject data) {
+
+
+ vtkPolyDataSilhouette silhouette = new vtkPolyDataSilhouette();
+
+ silhouette.SetInputData(data);
+ silhouette.SetCamera(ren.GetActiveCamera());
+ silhouette.SetEnableFeatureAngle(0);
+ vtkPolyDataMapper mapper = new vtkPolyDataMapper();
+
+ mapper.SetInputConnection(silhouette.GetOutputPort());
+
+ vtkActor actor = new vtkActor();
+ actor.SetMapper(mapper);
+
+ silhouette.GetOutputPort().Delete();
+ silhouette.Delete();
+ mapper.Delete();
+
+ return actor;
+ }
+
+ public static vtkActor createOutline(vtkDataObject data) {
+ vtkOutlineFilter filter = new vtkOutlineFilter();
+ filter.SetInputData(data);
+ vtkPolyDataMapper mapper = new vtkPolyDataMapper();
+ mapper.SetInputConnection(filter.GetOutputPort());
+
+ vtkActor actor = new vtkActor();
+ actor.SetMapper(mapper);
+
+ filter.GetOutputPort().Delete();
+ filter.Delete();
+ mapper.Delete();
+
+ return actor;
+ }
+
+ public static vtkActor createOutline(vtkProp3D prop) {
+
+ double bounds[] = prop.GetBounds();
+
+ vtkOutlineSource source = new vtkOutlineSource();
+ source.SetBounds(bounds);
+
+ vtkOutlineFilter filter = new vtkOutlineFilter();
+ filter.SetInputData(source.GetOutput());
+ vtkPolyDataMapper mapper = new vtkPolyDataMapper();
+ mapper.SetInputConnection(filter.GetOutputPort());
+
+ vtkActor actor = new vtkActor();
+ actor.SetMapper(mapper);
+
+ source.GetOutput().Delete();
+ source.Delete();
+ filter.GetOutputPort().Delete();
+ filter.Delete();
+ mapper.Delete();
+
+ actor.SetPickable(0);
+ return actor;
+ }
+}