// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause #include #include #include #include // Importers #include #include // Exporters #include #include // For transform() #include // For to_lower #include // For std::cout, std::cerr #include // For stringstream #include // For find_last_of() int TestImportExportOBJ(int argc, char* argv[]) { char* tname = vtkTestUtilities::GetArgOrEnvOrDefault("-T", argc, argv, "VTK_TEMP_DIR", "Testing/Temporary"); delete[] tname; auto renderWindow = vtkSmartPointer::New(); auto renderer = vtkSmartPointer::New(); std::string fileName = argv[1]; std::string extension; // Make the extension lowercase std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower); if (fileName.find_last_of('.') != std::string::npos) { extension = fileName.substr(fileName.find_last_of('.') + 1); } if (extension == "3ds") { auto importer = vtkSmartPointer::New(); importer->SetFileName(argv[1]); importer->SetRenderWindow(renderWindow); renderWindow = importer->GetRenderWindow(); renderer = importer->GetRenderer(); if (!importer->Update()) { std::cerr << "ERROR: Importer failed to update\n"; return EXIT_FAILURE; } } else if (extension == "gltf" || extension == "glb") { auto importer = vtkSmartPointer::New(); importer->SetFileName(argv[1]); importer->SetRenderWindow(renderWindow); renderWindow = importer->GetRenderWindow(); renderer = importer->GetRenderer(); if (!importer->Update()) { std::cerr << "ERROR: Importer failed to update\n"; return EXIT_FAILURE; } } else { std::cout << "Error: Extension " << extension << " is not supported" << std::endl; return EXIT_FAILURE; } std::stringstream comment; auto exporter = vtkSmartPointer::New(); comment << "Converted by ImportExport from " << fileName; exporter->SetFilePrefix(argv[2]); exporter->SetOBJFileComment(comment.str().c_str()); exporter->SetMTLFileComment(comment.str().c_str()); exporter->SetActiveRenderer(renderer); exporter->SetRenderWindow(renderWindow); exporter->Write(); return EXIT_SUCCESS; }