X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d.vtk%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fvtk%2Fshape%2FMeshActor.java;fp=org.simantics.g3d.vtk%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fvtk%2Fshape%2FMeshActor.java;h=c52e021ebf9ade2a718e1fed3785b0d592679d16;hb=86739231beb0535bde4abae49d2011e3a042810b;hp=b290f861d27fbcf6d7d7610b1ad22a5c491f4aad;hpb=c39250eb0521cf4e6d69f472f4fdf9e8b877c6e4;p=simantics%2F3d.git diff --git a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/MeshActor.java b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/MeshActor.java index b290f861..c52e021e 100644 --- a/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/MeshActor.java +++ b/org.simantics.g3d.vtk/src/org/simantics/g3d/vtk/shape/MeshActor.java @@ -12,14 +12,14 @@ 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(); + } }