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;h=c52e021ebf9ade2a718e1fed3785b0d592679d16;hb=86739231beb0535bde4abae49d2011e3a042810b;hp=0466a02e3d081facd183b23706691a96c8bc6584;hpb=9783d236a085584ac964444b365b566fd6a921ba;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 0466a02e..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,10 +29,8 @@ import vtk.vtkUnsignedCharArray; public class MeshActor extends vtkActor { - public void setMesh(Mesh mesh) { - - vtkPolyDataMapper mapper = new vtkPolyDataMapper(); - + + public static vtkPolyData createPolyData(Mesh mesh) { vtkPolyData polyData = new vtkPolyData(); polyData.Allocate(mesh.getIndices().size()/3, mesh.getIndices().size()/3); @@ -46,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++) { @@ -57,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"); @@ -70,11 +81,19 @@ public class MeshActor extends vtkActor { colors.Delete(); } - - boolean computeNormals = true; - if (computeNormals) { + return polyData; + } + + public void setMesh(Mesh mesh) { + + vtkPolyDataMapper mapper = new vtkPolyDataMapper(); + vtkPolyData polyData = createPolyData(mesh); + + + if (mesh.getNormals() == null) { vtkPolyDataNormals normals = new vtkPolyDataNormals(); normals.SetInputData(polyData); + normals.ComputePointNormalsOn(); mapper.SetInputConnection(normals.GetOutputPort()); normals.GetOutputPort().Delete(); normals.Delete(); @@ -94,5 +113,11 @@ public class MeshActor extends vtkActor { polyData.Delete(); } + + @Override + public void Delete() { + // TODO Auto-generated method stub + super.Delete(); + } }