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;
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);
}
list.Delete();
triangle.Delete();
-
+
vtkPoints points = new vtkPoints();
for (int i = 0; i < mesh.getVertices().size(); i++) {
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.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();
polyData.Delete();
}
+
+ @Override
+ public void Delete() {
+ // TODO Auto-generated method stub
+ super.Delete();
+ }
}