]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/MeshActor.java
Created Mesh API for Plant3D objects
[simantics/3d.git] / org.simantics.g3d.vtk / src / org / simantics / g3d / vtk / shape / MeshActor.java
index b290f861d27fbcf6d7d7610b1ad22a5c491f4aad..c52e021ebf9ade2a718e1fed3785b0d592679d16 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,6 +29,7 @@ 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);
@@ -43,7 +44,7 @@ public class MeshActor extends vtkActor {
         }
         list.Delete();
         triangle.Delete();
-               
+        
         
         vtkPoints points = new vtkPoints();
         for (int i = 0; i < mesh.getVertices().size(); i++) {
@@ -54,6 +55,19 @@ public class MeshActor extends vtkActor {
         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");
@@ -75,10 +89,11 @@ public class MeshActor extends vtkActor {
                vtkPolyDataMapper mapper = new vtkPolyDataMapper();
                vtkPolyData polyData = createPolyData(mesh);
                
-        boolean computeNormals = true;
-        if (computeNormals) {
+       
+        if (mesh.getNormals() == null) {
                vtkPolyDataNormals normals = new vtkPolyDataNormals();
                normals.SetInputData(polyData);
+               normals.ComputePointNormalsOn();
                mapper.SetInputConnection(normals.GetOutputPort());
                normals.GetOutputPort().Delete();
                normals.Delete();
@@ -98,5 +113,11 @@ public class MeshActor extends vtkActor {
         polyData.Delete();
         
        }
+       
+       @Override
+       public void Delete() {
+               // TODO Auto-generated method stub
+               super.Delete();
+       }
 
 }