#include "vtkActor.h" #include "vtkCamera.h" #include "vtkCompositeDataIterator.h" #include "vtkDataSet.h" #include "vtkDataSetMapper.h" #include "vtkExodusIIReader.h" #include "vtkExodusIIWriter.h" #include "vtkFieldData.h" #include "vtkModelMetadata.h" #include "vtkMultiBlockDataSet.h" #include "vtkPNGWriter.h" #include "vtkRegressionTestImage.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkStdString.h" #include "vtkTestUtilities.h" #include "vtkTesting.h" #include "vtkWindowToImageFilter.h" #include "vtkSmartPointer.h" #define VTK_CREATE(type, name) vtkSmartPointer name = vtkSmartPointer::New(); int TestMultiBlockExodusWrite(int argc, char* argv[]) { char* InputFile; InputFile = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/edgeFaceElem.exii"); if (!InputFile) { return 1; } VTK_CREATE(vtkExodusIIReader, reader); if (!reader->CanReadFile(InputFile)) { return 1; } reader->SetFileName(InputFile); reader->SetGlobalResultArrayStatus("CALIBER", 1); reader->SetGlobalResultArrayStatus("GUNPOWDER", 1); reader->Update(); vtkMultiBlockDataSet* mbds = reader->GetOutput(); if (!mbds) { return 1; } vtkMultiBlockDataSet* elems = vtkMultiBlockDataSet::SafeDownCast(mbds->GetBlock(0)); if (!elems) { return 1; } if (elems->GetNumberOfBlocks() != 2) { return 1; } vtkFieldData* ifieldData = elems->GetBlock(0)->GetFieldData(); int index; if (ifieldData->GetArray("CALIBER", index) == nullptr) { cerr << "Expected to find array CALIBER in original data set" << endl; return 1; } if (ifieldData->GetArray("GUNPOWDER", index) == nullptr) { cerr << "Expected to find array GUNPOWDER in original data set" << endl; return 1; } VTK_CREATE(vtkTesting, testing); for (int i = 0; i < argc; i++) { testing->AddArgument(argv[i]); } vtkStdString OutputFile; OutputFile = testing->GetTempDirectory(); OutputFile += "/testExodus.exii"; VTK_CREATE(vtkExodusIIWriter, writer); writer->SetInputConnection(reader->GetOutputPort()); writer->SetFileName(OutputFile); writer->WriteOutBlockIdArrayOn(); writer->WriteOutGlobalNodeIdArrayOn(); writer->WriteOutGlobalElementIdArrayOn(); writer->WriteAllTimeStepsOn(); writer->Update(); writer->GetModelMetadata()->PrintLocalInformation(); VTK_CREATE(vtkExodusIIReader, outputReader); if (!outputReader->CanReadFile(OutputFile)) { return 1; } outputReader->SetFileName(OutputFile); outputReader->SetGlobalResultArrayStatus("CALIBER", 1); outputReader->SetGlobalResultArrayStatus("GUNPOWDER", 1); outputReader->Update(); mbds = outputReader->GetOutput(); if (!mbds) { return 1; } elems = vtkMultiBlockDataSet::SafeDownCast(mbds->GetBlock(0)); if (!elems) { return 1; } if (elems->GetNumberOfBlocks() != 2) { return 1; } ifieldData = elems->GetBlock(0)->GetFieldData(); if (ifieldData->GetArray("CALIBER", index) == nullptr) { cerr << "Array CALIBER was not written to output" << endl; return 1; } if (ifieldData->GetArray("GUNPOWDER", index) == nullptr) { cerr << "Array GUNPOWDER was not written to output" << endl; return 1; } vtkCompositeDataIterator* iter = mbds->NewIterator(); iter->InitTraversal(); vtkDataSet* ds = vtkDataSet::SafeDownCast(iter->GetCurrentDataObject()); iter->Delete(); if (!ds) { return 1; } VTK_CREATE(vtkDataSetMapper, mapper); mapper->SetInputData(ds); VTK_CREATE(vtkActor, actor); actor->SetMapper(mapper); VTK_CREATE(vtkRenderer, renderer); renderer->AddActor(actor); renderer->SetBackground(0.0, 0.0, 0.0); vtkCamera* c = renderer->GetActiveCamera(); c->SetPosition(0.0, 10.0, 14.5); c->SetFocalPoint(0, 0, 0); c->SetViewUp(0.8, 0.3, -0.5); c->SetViewAngle(30); VTK_CREATE(vtkRenderWindow, renderWindow); renderWindow->AddRenderer(renderer); renderWindow->SetSize(256, 256); VTK_CREATE(vtkRenderWindowInteractor, irenderWindow); irenderWindow->SetRenderWindow(renderWindow); int retVal = vtkRegressionTestImage(renderWindow); if (retVal == vtkRegressionTester::DO_INTERACTOR) { renderWindow->Render(); irenderWindow->Start(); retVal = vtkRegressionTester::PASSED; } /* VTK_CREATE (vtkWindowToImageFilter, w2i); w2i->SetInput (renderWindow); VTK_CREATE (vtkPNGWriter, img); img->SetInputConnection (w2i->GetOutputPort ()); img->SetFileName ("TestMultiBlockExodusWrite.png"); renderWindow->Render (); w2i->Modified (); img->Write (); return 1; */ delete[] InputFile; return !retVal; }