// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause #include #include #include #include #include #include #include #include #include #include #include #include int TestSTLReader(int argc, char* argv[]) { if (argc < 2) { std::cerr << "Required parameters: " << std::endl; return EXIT_FAILURE; } std::string inputFilename = argv[1]; vtkNew reader; reader->SetFileName(inputFilename.c_str()); reader->Update(); // Check if header and solids match for ASCII STL if (reader->GetBinaryHeader() == nullptr) // check if ASCII { reader->ScalarTagsOn(); reader->Update(); double range[2]; reader->GetOutput()->GetCellData()->GetScalars("STLSolidLabeling")->GetRange(range); int nSolids = static_cast(range[1]) + 1; int nHeaders = 1; // At least one solid even when it does not have associated name std::string header(reader->GetHeader()); if (!header.empty()) { nHeaders += std::count(header.begin(), header.end(), '\n'); } if (nSolids != nHeaders) { std::cerr << "Number of Solid Names in Header does not match with the number of solids" << std::endl; return EXIT_FAILURE; } reader->ScalarTagsOff(); reader->Update(); } // Visualize vtkSmartPointer mapper = vtkSmartPointer::New(); mapper->SetInputConnection(reader->GetOutputPort()); vtkSmartPointer actor = vtkSmartPointer::New(); actor->SetMapper(mapper); vtkSmartPointer renderer = vtkSmartPointer::New(); vtkSmartPointer renderWindow = vtkSmartPointer::New(); renderWindow->AddRenderer(renderer); vtkSmartPointer renderWindowInteractor = vtkSmartPointer::New(); renderWindowInteractor->SetRenderWindow(renderWindow); renderer->AddActor(actor); renderer->SetBackground(.3, .6, .3); // Background color green renderWindow->Render(); int retVal = vtkRegressionTestImage(renderWindow); if (retVal == vtkRegressionTester::DO_INTERACTOR) { renderWindowInteractor->Start(); } return !retVal; }