]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/utils/vtkEffect.java
vtk 8.2.0 API changes
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / utils / vtkEffect.java
index 0d00c2a919509c412070bcbb35ccc9c9135dbe2e..d4cd71034e6c8d488b12c9528d6140f55f1f4701 100644 (file)
-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;
+       }
+}