]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/MeshActor.java
White space clean-up
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / shape / MeshActor.java
index b290f861d27fbcf6d7d7610b1ad22a5c491f4aad..43aaadb1fcef491344eda62f03f0a874db8d6e5e 100644 (file)
 package org.simantics.g3d.vtk.shape;
 
 import javax.vecmath.Tuple3d;
-import javax.vecmath.Vector3d;
 
 import org.simantics.g3d.shape.Color4d;
 import org.simantics.g3d.shape.Mesh;
 
 import vtk.vtkActor;
-import vtk.vtkDataSetMapper;
+import vtk.vtkFloatArray;
 import vtk.vtkIdList;
+import vtk.vtkPointData;
 import vtk.vtkPoints;
 import vtk.vtkPolyData;
 import vtk.vtkPolyDataMapper;
@@ -29,45 +29,59 @@ import vtk.vtkUnsignedCharArray;
 
 public class MeshActor extends vtkActor {
        
+       
        public static vtkPolyData createPolyData(Mesh mesh) {
                vtkPolyData polyData = new vtkPolyData();
                polyData.Allocate(mesh.getIndices().size()/3, mesh.getIndices().size()/3);
                
                vtkTriangle triangle = new vtkTriangle();
-        vtkIdList list = triangle.GetPointIds();
-        for (int i = 0; i < mesh.getIndices().size(); i+=3) {
-               list.SetId(0, mesh.getIndices().get(i));
-               list.SetId(1, mesh.getIndices().get(i+1));
-               list.SetId(2, mesh.getIndices().get(i+2));
-               polyData.InsertNextCell(triangle.GetCellType(), list);
-        }
-        list.Delete();
-        triangle.Delete();
+               vtkIdList list = triangle.GetPointIds();
+               for (int i = 0; i < mesh.getIndices().size(); i+=3) {
+                       list.SetId(0, mesh.getIndices().get(i));
+                       list.SetId(1, mesh.getIndices().get(i+1));
+                       list.SetId(2, mesh.getIndices().get(i+2));
+                       polyData.InsertNextCell(triangle.GetCellType(), list);
+               }
+               list.Delete();
+               triangle.Delete();
+               
+               
+               vtkPoints points = new vtkPoints();
+               for (int i = 0; i < mesh.getVertices().size(); i++) {
+                       Tuple3d p = mesh.getVertices().get(i);
+                       points.InsertPoint(i, p.x, p.y, p.z);
+               }
                
-        
-        vtkPoints points = new vtkPoints();
-        for (int i = 0; i < mesh.getVertices().size(); i++) {
-               Tuple3d p = mesh.getVertices().get(i);
-               points.InsertPoint(i, p.x, p.y, p.z);
-        }
-        
-        polyData.SetPoints(points);
-        points.Delete();
-        
-        if (mesh.getColors() != null) {
-               vtkUnsignedCharArray colors = new vtkUnsignedCharArray();
-               colors.SetName("Colors");
-               colors.SetNumberOfComponents(3);
-               colors.SetNumberOfTuples(mesh.getColors().size());
-               for (int i = 0; i < mesh.getColors().size(); i++) {
-                       Color4d c = mesh.getColors().get(i);
-                       colors.InsertTuple3(i, 255.0* c.x, 255.0 * c.y, 255.0 * c.z);
-               }
-               polyData.GetPointData().AddArray(colors);
-               colors.Delete();
-               
-        }
-        return polyData;
+               polyData.SetPoints(points);
+               points.Delete();
+               
+               if (mesh.getNormals() != null) {
+                       vtkFloatArray normals = new vtkFloatArray();
+                       normals.SetNumberOfComponents(3);
+                       normals.SetNumberOfTuples(mesh.getNormals().size());
+                       for (int i = 0; i < mesh.getNormals().size(); i++) {
+                               Tuple3d p = mesh.getNormals().get(i);
+                               normals.InsertTuple3(i, p.x, p.y, p.z);
+                       }
+                       vtkPointData pointData = polyData.GetPointData();
+                       pointData.SetNormals(normals);
+                       normals.Delete();
+                       pointData.Delete();
+               }
+               if (mesh.getColors() != null) {
+                       vtkUnsignedCharArray colors = new vtkUnsignedCharArray();
+                       colors.SetName("Colors");
+                       colors.SetNumberOfComponents(3);
+                       colors.SetNumberOfTuples(mesh.getColors().size());
+                       for (int i = 0; i < mesh.getColors().size(); i++) {
+                               Color4d c = mesh.getColors().get(i);
+                               colors.InsertTuple3(i, 255.0* c.x, 255.0 * c.y, 255.0 * c.z);
+                       }
+                       polyData.GetPointData().AddArray(colors);
+                       colors.Delete();
+                       
+               }
+               return polyData;
        }
        
        public void setMesh(Mesh mesh) {
@@ -75,28 +89,35 @@ public class MeshActor extends vtkActor {
                vtkPolyDataMapper mapper = new vtkPolyDataMapper();
                vtkPolyData polyData = createPolyData(mesh);
                
-        boolean computeNormals = true;
-        if (computeNormals) {
-               vtkPolyDataNormals normals = new vtkPolyDataNormals();
-               normals.SetInputData(polyData);
-               mapper.SetInputConnection(normals.GetOutputPort());
-               normals.GetOutputPort().Delete();
-               normals.Delete();
-        } else {
-               mapper.SetInputData(polyData);
-        }
-        
-        if (mesh.getColors() != null) {
-                mapper.ScalarVisibilityOn();
-                mapper.SetScalarModeToUsePointFieldData();
-                mapper.SelectColorArray("Colors");
-        }
-        
-        SetMapper(mapper);
-        mapper.Delete();
-        polyData.GetPointData().Delete();
-        polyData.Delete();
-        
+               
+               if (mesh.getNormals() == null) {
+                       vtkPolyDataNormals normals = new vtkPolyDataNormals();
+                       normals.SetInputData(polyData);
+                       normals.ComputePointNormalsOn();
+                       mapper.SetInputConnection(normals.GetOutputPort());
+                       normals.GetOutputPort().Delete();
+                       normals.Delete();
+               } else {
+                       mapper.SetInputData(polyData);
+               }
+               
+               if (mesh.getColors() != null) {
+                       mapper.ScalarVisibilityOn();
+                       mapper.SetScalarModeToUsePointFieldData();
+                       mapper.SelectColorArray("Colors");
+               }
+               
+               SetMapper(mapper);
+               mapper.Delete();
+               polyData.GetPointData().Delete();
+               polyData.Delete();
+               
+       }
+       
+       @Override
+       public void Delete() {
+               // TODO Auto-generated method stub
+               super.Delete();
        }
 
 }