14 #include <vtkCleanPolyData.h> 15 #include <vtkPolyData.h> 16 #include <vtkPolyDataNormals.h> 17 #include <vtkSTLReader.h> 18 #include <vtkSmartPointer.h> 35 vtkSmartPointer<vtkSTLReader> stlReader = vtkSmartPointer<vtkSTLReader>::New();
38 vtkSmartPointer<vtkPolyDataNormals> normalsGenerator = vtkSmartPointer<vtkPolyDataNormals>::New();
39 normalsGenerator->SetInputConnection(stlReader->GetOutputPort());
41 vtkSmartPointer<vtkCleanPolyData> cleanPolyDataFilter = vtkSmartPointer<vtkCleanPolyData>::New();
42 cleanPolyDataFilter->SetInputConnection(normalsGenerator->GetOutputPort());
43 cleanPolyDataFilter->PieceInvariantOff();
44 cleanPolyDataFilter->ConvertLinesToPointsOff();
45 cleanPolyDataFilter->ConvertPolysToLinesOff();
46 cleanPolyDataFilter->ConvertStripsToPolysOff();
47 cleanPolyDataFilter->PointMergingOn();
48 cleanPolyDataFilter->Update();
50 if ((stlReader->GetOutput() !=
nullptr) && (cleanPolyDataFilter->GetOutput() !=
nullptr))
52 vtkSmartPointer<vtkPolyData> surfaceWithNormals = cleanPolyDataFilter->GetOutput();
53 output->SetVtkPolyData(surfaceWithNormals);
69 bool extensionFound =
false;
70 std::string::size_type STLPos = filename.rfind(
".stl");
71 if ((STLPos != std::string::npos) && (STLPos == filename.length() - 4))
73 extensionFound =
true;
76 STLPos = filename.rfind(
".STL");
77 if ((STLPos != std::string::npos) && (STLPos == filename.length() - 4))
79 extensionFound =
true;
Superclass of all classes generating surfaces (instances of class Surface) as output.
DataCollection - Class to facilitate loading/accessing structured data.
void GenerateData() override
~STLFileReader() override
static bool CanReadFile(const std::string filename, const std::string filePrefix, const std::string filePattern)