/*========================================================================= Program: Visualization Toolkit Module: TestOBJReaderMaterials.cxx Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ // .NAME Verifies that vtkOBJReader does something sensible w/rt materials. // .SECTION Description // #include "vtkOBJReader.h" #include "vtkCellData.h" #include "vtkStringArray.h" #include "vtkTestUtilities.h" int TestOBJReaderMaterials(int argc, char* argv[]) { int retVal = 0; // Create the reader. char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/obj_with_materials.obj"); vtkSmartPointer reader = vtkSmartPointer::New(); reader->SetFileName(fname); reader->Update(); delete[] fname; vtkPolyData* data = reader->GetOutput(); if (!data) { std::cerr << "Could not read data" << std::endl; return 1; } vtkStringArray* mna = vtkStringArray::SafeDownCast(data->GetFieldData()->GetAbstractArray("MaterialNames")); if (!mna) { std::cerr << "missing material names array" << std::endl; return 1; } vtkIntArray* mia = vtkIntArray::SafeDownCast(data->GetCellData()->GetAbstractArray("MaterialIds")); if (!mia) { std::cerr << "missing material id array" << std::endl; return 1; } if (data->GetNumberOfCells() != 2) { std::cerr << "wrong number of cells" << std::endl; return 1; } int matid = mia->GetVariantValue(1).ToInt(); std::string matname = mna->GetVariantValue(matid).ToString(); if (matname != "Air") { std::cerr << "wrong material for" << std::endl; return 1; } return retVal; }