-
- double featureAngle = 30;
-
-
- vtkDataSetMapper partMapper = new vtkDataSetMapper();
-
- boolean computeNormals = true;
- boolean cleanPart = true;
- boolean mergePoints = false;
-
- vtkCleanPolyData partCleaner = new vtkCleanPolyData();
- if (cleanPart)
- {
- partCleaner.SetInputData(partGrid);
- if(mergePoints) {
- partCleaner.PointMergingOn();
- } else {
- partCleaner.PointMergingOff();
- }
- }
-
- if (computeNormals)
- {
- vtkPolyDataNormals partNormals = new vtkPolyDataNormals();
-
- if (cleanPart)
- {
- partNormals.SetInputConnection(partCleaner.GetOutputPort());
- }
- else partNormals.SetInputData(partGrid);
-
- partNormals.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
- partMapper.SetInputConnection(partNormals.GetOutputPort());
- partNormals.Delete();
- }
- else
- {
- if (cleanPart) partMapper.SetInputConnection(partCleaner.GetOutputPort()); // metoda 2, ne tak pekne, viz http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
- else partMapper.SetInputData(partGrid); // metoda 1, ne tak pekne stinovani, viz: http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
- }
- partMapper.ScalarVisibilityOn();
-
- vtkActor partActor = new vtkActor();
-
- partActor.SetPickable(1);
- partActor.GetProperty().SetColor(1, 1, 0);
- partActor.SetMapper(partMapper);
-
- // EDGES OF PARTS DETECTION
- vtkFeatureEdges partEdges = new vtkFeatureEdges();
- if (cleanPart) partEdges.SetInputConnection(partCleaner.GetOutputPort());
- else partEdges.SetInputData(partGrid);
- partEdges.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
- partEdges.FeatureEdgesOn();
- partEdges.BoundaryEdgesOn();
- partEdges.NonManifoldEdgesOn();
- partEdges.ManifoldEdgesOn();
-
- vtkDataSetMapper partEdgesMapper = new vtkDataSetMapper();
- partEdgesMapper.SetInputConnection(partEdges.GetOutputPort());
- partEdgesMapper.SetResolveCoincidentTopologyToPolygonOffset();
- partEdgesMapper.ScalarVisibilityOff();
-
- vtkActor partEdgesActor = new vtkActor();
- partEdgesActor.SetPickable(0);
- partEdgesActor.GetProperty().SetColor(1, 0, 1);
- partEdgesActor.SetMapper(partEdgesMapper);
-
-
- // Add triangles and edges to STL structures:
- //--------------------------------------------
- if (cleanPart) stlSurfaceData.AddInputData(partCleaner.GetOutput());
- else stlSurfaceData.AddInputData(partGrid);
- stlEdgeData.AddInputData(partEdges.GetOutput());
-
- assemblies.AddPart(partActor);
- assemblies.AddPart(partEdgesActor);
-
- // Clean up:
- //----------
- partEdgesActor.Delete();
- partEdgesMapper.Delete();
- partEdges.Delete();
- partActor.Delete();
- partMapper.Delete();
- partGrid.Delete();
- partCleaner.Delete();
- }
-
-public static void gridToAssembly(vtkAssembly assemblies, vtkPolyData partGrid) {
-
- double featureAngle = 30;
-
-
- vtkDataSetMapper partMapper = new vtkDataSetMapper();
-
- boolean computeNormals = true;
- boolean cleanPart = false;
- boolean mergePoints = false;
-
- vtkCleanPolyData partCleaner = new vtkCleanPolyData();
- if (cleanPart)
- {
- partCleaner.SetInputData(partGrid);
- if(mergePoints) {
- partCleaner.PointMergingOn();
- } else {
- partCleaner.PointMergingOff();
- }
- }
-
- if (computeNormals)
- {
- vtkPolyDataNormals partNormals = new vtkPolyDataNormals();
-
- if (cleanPart)
- {
- vtkAlgorithmOutput out = partCleaner.GetOutputPort();
- partNormals.SetInputConnection(out);
- out.Delete();
- }
- else partNormals.SetInputData(partGrid);
-
- partNormals.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
- vtkAlgorithmOutput out = partNormals.GetOutputPort();
- partMapper.SetInputConnection(out);
- out.Delete();
- partNormals.Delete();
- }
- else
- {
- if (cleanPart) {
- vtkAlgorithmOutput out = partCleaner.GetOutputPort();
- partMapper.SetInputConnection(out); // metoda 2, ne tak pekne, viz http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
- out.Delete();
- }
- else partMapper.SetInputData(partGrid); // metoda 1, ne tak pekne stinovani, viz: http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
- }
- partMapper.ScalarVisibilityOn();
-
- vtkActor partActor = new vtkActor();
- partActor.SetPickable(1);
- vtkProperty prop = partActor.GetProperty();
- prop.SetColor(1, 1, 0);
- prop.Delete();
- partActor.SetMapper(partMapper);
-
- assemblies.AddPart(partActor);
-
- {
- // EDGES OF PARTS DETECTION
- vtkFeatureEdges partEdges = new vtkFeatureEdges();
- if (cleanPart) {
- vtkAlgorithmOutput out = partCleaner.GetOutputPort();
- partEdges.SetInputConnection(out);
- out.Delete();
- }
- else partEdges.SetInputData(partGrid);
- // partEdges.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
- partEdges.FeatureEdgesOn();
- partEdges.BoundaryEdgesOn();
- partEdges.NonManifoldEdgesOn();
- partEdges.ManifoldEdgesOn();
-
- vtkDataSetMapper partEdgesMapper = new vtkDataSetMapper();
- vtkAlgorithmOutput out = partEdges.GetOutputPort();
- partEdgesMapper.SetInputConnection(out);
- out.Delete();
- partEdgesMapper.SetResolveCoincidentTopologyToPolygonOffset();
- partEdgesMapper.ScalarVisibilityOff();
-
- vtkActor partEdgesActor = new vtkActor();
-
- prop = partEdgesActor.GetProperty();
- prop.SetColor(0, 0, 0);
- prop.SetLineWidth(2.0);
- prop.Delete();
- partEdgesActor.SetMapper(partEdgesMapper);
- partEdgesActor.PickableOn();
-
- assemblies.AddPart(partEdgesActor);
-
- {
-
- EdgePointsFilter edgePoints = new EdgePointsFilter();
-
-
- out = partEdges.GetOutputPort();
- edgePoints.SetInputConnection(out);
- out.Delete();
-
-// vtkDataSetMapper partEdgePointsMapper = new vtkDataSetMapper();
-// out = edgePoints.GetOutputPort();
-// partEdgePointsMapper.SetInputConnection(out);
-// out.Delete();
-
-// vtkVertexGlyphFilter glyphFilter = new vtkVertexGlyphFilter();
-// out = edgePoints.GetOutputPort();
-// glyphFilter.SetInputConnection(out);
-// glyphFilter.Update();
-// out.Delete();
-//
-// vtkPolyDataMapper partEdgePointsMapper = new vtkPolyDataMapper();
-// out = glyphFilter.GetOutputPort();
-// partEdgePointsMapper.SetInputConnection(out);
-// out.Delete();
-
- vtkSphereSource sphereSource = new vtkSphereSource();
- vtkGlyph3D glyph3D = new vtkGlyph3D();
- out = sphereSource.GetOutputPort();
- glyph3D.SetSourceConnection(out);
- out.Delete();
-
- out = edgePoints.GetOutputPort();
- glyph3D.SetInputConnection(out);
- out.Delete();
-
- //glyph3D.ScalingOff();
- glyph3D.SetScaleFactor(0.03);
-
- glyph3D.Update();
-
- vtkPolyDataMapper partEdgePointsMapper = new vtkPolyDataMapper();
- out = glyph3D.GetOutputPort();
- partEdgePointsMapper.SetInputConnection(out);
- out.Delete();
-
- vtkActor edgePointsActor = new vtkActor();
-
- prop = edgePointsActor.GetProperty();
- prop.SetColor(0, 0, 1);
- //prop.SetPointSize(10.0);
- //prop.SetRepresentationToPoints();
- prop.Delete();
- edgePointsActor.SetMapper(partEdgePointsMapper);
-
- edgePointsActor.PickableOn();
- assemblies.AddPart(edgePointsActor);
-
-
- edgePointsActor.Delete();
- partEdgePointsMapper.Delete();
- // edgePoints.Delete();
- }
- // Clean up:
- //----------
- partEdgesActor.Delete();
- partEdgesMapper.Delete();
- partEdges.Delete();
- }
-
- partActor.Delete();
- partMapper.Delete();
- partGrid.Delete();
- partCleaner.Delete();
-}
-
-
-
+
+ double featureAngle = 30;
+
+
+ vtkDataSetMapper partMapper = new vtkDataSetMapper();
+
+ boolean computeNormals = true;
+ boolean cleanPart = true;
+ boolean mergePoints = false;
+
+ vtkCleanPolyData partCleaner = new vtkCleanPolyData();
+ if (cleanPart)
+ {
+ partCleaner.SetInputData(partGrid);
+ if(mergePoints) {
+ partCleaner.PointMergingOn();
+ } else {
+ partCleaner.PointMergingOff();
+ }
+ }
+
+ if (computeNormals)
+ {
+ vtkPolyDataNormals partNormals = new vtkPolyDataNormals();
+
+ if (cleanPart)
+ {
+ partNormals.SetInputConnection(partCleaner.GetOutputPort());
+ }
+ else partNormals.SetInputData(partGrid);
+
+ partNormals.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
+ partMapper.SetInputConnection(partNormals.GetOutputPort());
+ partNormals.Delete();
+ }
+ else
+ {
+ if (cleanPart) partMapper.SetInputConnection(partCleaner.GetOutputPort()); // metoda 2, ne tak pekne, viz http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
+ else partMapper.SetInputData(partGrid); // metoda 1, ne tak pekne stinovani, viz: http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
+ }
+ partMapper.ScalarVisibilityOn();
+
+ vtkActor partActor = new vtkActor();
+
+ partActor.SetPickable(1);
+ partActor.GetProperty().SetColor(1, 1, 0);
+ partActor.SetMapper(partMapper);
+
+ // EDGES OF PARTS DETECTION
+ vtkFeatureEdges partEdges = new vtkFeatureEdges();
+ if (cleanPart) partEdges.SetInputConnection(partCleaner.GetOutputPort());
+ else partEdges.SetInputData(partGrid);
+ partEdges.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
+ partEdges.FeatureEdgesOn();
+ partEdges.BoundaryEdgesOn();
+ partEdges.NonManifoldEdgesOn();
+ partEdges.ManifoldEdgesOn();
+
+ vtkDataSetMapper partEdgesMapper = new vtkDataSetMapper();
+ partEdgesMapper.SetInputConnection(partEdges.GetOutputPort());
+ partEdgesMapper.SetResolveCoincidentTopologyToPolygonOffset();
+ partEdgesMapper.ScalarVisibilityOff();
+
+ vtkActor partEdgesActor = new vtkActor();
+ partEdgesActor.SetPickable(0);
+ partEdgesActor.GetProperty().SetColor(1, 0, 1);
+ partEdgesActor.SetMapper(partEdgesMapper);
+
+
+ // Add triangles and edges to STL structures:
+ //--------------------------------------------
+ if (cleanPart) stlSurfaceData.AddInputData(partCleaner.GetOutput());
+ else stlSurfaceData.AddInputData(partGrid);
+ stlEdgeData.AddInputData(partEdges.GetOutput());
+
+ assemblies.AddPart(partActor);
+ assemblies.AddPart(partEdgesActor);
+
+ // Clean up:
+ //----------
+ partEdgesActor.Delete();
+ partEdgesMapper.Delete();
+ partEdges.Delete();
+ partActor.Delete();
+ partMapper.Delete();
+ partGrid.Delete();
+ partCleaner.Delete();
+ }
+
+ public static void gridToAssembly(vtkAssembly assemblies, vtkPolyData partGrid) {
+
+ double featureAngle = 30;
+
+
+ vtkDataSetMapper partMapper = new vtkDataSetMapper();
+
+ boolean computeNormals = true;
+ boolean cleanPart = false;
+ boolean mergePoints = false;
+
+ vtkCleanPolyData partCleaner = new vtkCleanPolyData();
+ if (cleanPart)
+ {
+ partCleaner.SetInputData(partGrid);
+ if(mergePoints) {
+ partCleaner.PointMergingOn();
+ } else {
+ partCleaner.PointMergingOff();
+ }
+ }
+
+ if (computeNormals)
+ {
+ vtkPolyDataNormals partNormals = new vtkPolyDataNormals();
+
+ if (cleanPart)
+ {
+ vtkAlgorithmOutput out = partCleaner.GetOutputPort();
+ partNormals.SetInputConnection(out);
+ out.Delete();
+ }
+ else partNormals.SetInputData(partGrid);
+
+ partNormals.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
+ vtkAlgorithmOutput out = partNormals.GetOutputPort();
+ partMapper.SetInputConnection(out);
+ out.Delete();
+ partNormals.Delete();
+ }
+ else
+ {
+ if (cleanPart) {
+ vtkAlgorithmOutput out = partCleaner.GetOutputPort();
+ partMapper.SetInputConnection(out); // metoda 2, ne tak pekne, viz http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
+ out.Delete();
+ }
+ else partMapper.SetInputData(partGrid); // metoda 1, ne tak pekne stinovani, viz: http://www.codeguru.com/cpp/g-m/opengl/article.php/c2681
+ }
+ partMapper.ScalarVisibilityOn();
+
+ vtkActor partActor = new vtkActor();
+ partActor.SetPickable(1);
+ vtkProperty prop = partActor.GetProperty();
+ prop.SetColor(1, 1, 0);
+ prop.Delete();
+ partActor.SetMapper(partMapper);
+
+ assemblies.AddPart(partActor);
+
+ {
+ // EDGES OF PARTS DETECTION
+ vtkFeatureEdges partEdges = new vtkFeatureEdges();
+ if (cleanPart) {
+ vtkAlgorithmOutput out = partCleaner.GetOutputPort();
+ partEdges.SetInputConnection(out);
+ out.Delete();
+ }
+ else partEdges.SetInputData(partGrid);
+ // partEdges.SetFeatureAngle(featureAngle); // this do not have to be neccesarily called
+ partEdges.FeatureEdgesOn();
+ partEdges.BoundaryEdgesOn();
+ partEdges.NonManifoldEdgesOn();
+ partEdges.ManifoldEdgesOn();
+
+ vtkDataSetMapper partEdgesMapper = new vtkDataSetMapper();
+ vtkAlgorithmOutput out = partEdges.GetOutputPort();
+ partEdgesMapper.SetInputConnection(out);
+ out.Delete();
+ partEdgesMapper.SetResolveCoincidentTopologyToPolygonOffset();
+ partEdgesMapper.ScalarVisibilityOff();
+
+ vtkActor partEdgesActor = new vtkActor();
+
+ prop = partEdgesActor.GetProperty();
+ prop.SetColor(0, 0, 0);
+ prop.SetLineWidth(2.0);
+ prop.Delete();
+ partEdgesActor.SetMapper(partEdgesMapper);
+ partEdgesActor.PickableOn();
+
+ assemblies.AddPart(partEdgesActor);
+
+ {
+
+ EdgePointsFilter edgePoints = new EdgePointsFilter();
+
+
+ out = partEdges.GetOutputPort();
+ edgePoints.SetInputConnection(out);
+ out.Delete();
+
+ // vtkDataSetMapper partEdgePointsMapper = new vtkDataSetMapper();
+ // out = edgePoints.GetOutputPort();
+ // partEdgePointsMapper.SetInputConnection(out);
+ // out.Delete();
+
+ // vtkVertexGlyphFilter glyphFilter = new vtkVertexGlyphFilter();
+ // out = edgePoints.GetOutputPort();
+ // glyphFilter.SetInputConnection(out);
+ // glyphFilter.Update();
+ // out.Delete();
+ //
+ // vtkPolyDataMapper partEdgePointsMapper = new vtkPolyDataMapper();
+ // out = glyphFilter.GetOutputPort();
+ // partEdgePointsMapper.SetInputConnection(out);
+ // out.Delete();
+
+ vtkSphereSource sphereSource = new vtkSphereSource();
+ vtkGlyph3D glyph3D = new vtkGlyph3D();
+ out = sphereSource.GetOutputPort();
+ glyph3D.SetSourceConnection(out);
+ out.Delete();
+
+ out = edgePoints.GetOutputPort();
+ glyph3D.SetInputConnection(out);
+ out.Delete();
+
+ //glyph3D.ScalingOff();
+ glyph3D.SetScaleFactor(0.03);
+
+ glyph3D.Update();
+
+ vtkPolyDataMapper partEdgePointsMapper = new vtkPolyDataMapper();
+ out = glyph3D.GetOutputPort();
+ partEdgePointsMapper.SetInputConnection(out);
+ out.Delete();
+
+ vtkActor edgePointsActor = new vtkActor();
+
+ prop = edgePointsActor.GetProperty();
+ prop.SetColor(0, 0, 1);
+ //prop.SetPointSize(10.0);
+ //prop.SetRepresentationToPoints();
+ prop.Delete();
+ edgePointsActor.SetMapper(partEdgePointsMapper);
+
+ edgePointsActor.PickableOn();
+ assemblies.AddPart(edgePointsActor);
+
+
+ edgePointsActor.Delete();
+ partEdgePointsMapper.Delete();
+ // edgePoints.Delete();
+ }
+ // Clean up:
+ //----------
+ partEdgesActor.Delete();
+ partEdgesMapper.Delete();
+ partEdges.Delete();
+ }
+
+ partActor.Delete();
+ partMapper.Delete();
+ partGrid.Delete();
+ partCleaner.Delete();
+ }
+
+
+