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=84132a1d750c45f9161afbd58b78572964e50d26;hp=0cfc8246bcc155d43e25edf0dcb550800369669a;hpb=58ebeb2baac48f9066c1395a9071f99745574ef9;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 0cfc8246..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,16 +81,24 @@ 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.SetInput(polyData); + normals.SetInputData(polyData); + normals.ComputePointNormalsOn(); mapper.SetInputConnection(normals.GetOutputPort()); normals.GetOutputPort().Delete(); normals.Delete(); } else { - mapper.SetInput(polyData); + mapper.SetInputData(polyData); } if (mesh.getColors() != null) { @@ -94,5 +113,11 @@ public class MeshActor extends vtkActor { polyData.Delete(); } + + @Override + public void Delete() { + // TODO Auto-generated method stub + super.Delete(); + } }