------------------------------------------------------------------------------
| 26 | |
| 27 | //------------------------------------------------------------------------------ |
| 28 | int vtkXMLMultiBlockDataWriter::WriteComposite( |
| 29 | vtkCompositeDataSet* compositeData, vtkXMLDataElement* parent, int& writerIdx) |
| 30 | { |
| 31 | if (!(compositeData->IsA("vtkMultiBlockDataSet") || compositeData->IsA("vtkMultiPieceDataSet"))) |
| 32 | { |
| 33 | vtkErrorMacro("Unsupported composite dataset type: " << compositeData->GetClassName() << "."); |
| 34 | return 0; |
| 35 | } |
| 36 | |
| 37 | // Write each input. |
| 38 | vtkSmartPointer<vtkDataObjectTreeIterator> iter; |
| 39 | iter.TakeReference(vtkDataObjectTree::SafeDownCast(compositeData)->NewTreeIterator()); |
| 40 | iter->VisitOnlyLeavesOff(); |
| 41 | iter->TraverseSubTreeOff(); |
| 42 | iter->SkipEmptyNodesOff(); |
| 43 | int toBeWritten = 0; |
| 44 | for (iter->InitTraversal(); !iter->IsDoneWithTraversal(); iter->GoToNextItem()) |
| 45 | { |
| 46 | toBeWritten++; |
| 47 | } |
| 48 | |
| 49 | if (toBeWritten == 0) |
| 50 | { |
| 51 | // No leaf, nothing to write but this is not an issue. |
| 52 | return 1; |
| 53 | } |
| 54 | |
| 55 | float progressRange[2] = { 0.f, 0.f }; |
| 56 | this->GetProgressRange(progressRange); |
| 57 | |
| 58 | int index = 0; |
| 59 | int RetVal = 0; |
| 60 | for (iter->InitTraversal(); !iter->IsDoneWithTraversal(); iter->GoToNextItem(), index++) |
| 61 | { |
| 62 | vtkDataObject* curDO = iter->GetCurrentDataObject(); |
| 63 | const char* name = nullptr; |
| 64 | if (iter->HasCurrentMetaData()) |
| 65 | { |
| 66 | name = iter->GetCurrentMetaData()->Get(vtkCompositeDataSet::NAME()); |
| 67 | } |
| 68 | |
| 69 | if (curDO && curDO->IsA("vtkCompositeDataSet")) |
| 70 | // if node is a supported composite dataset |
| 71 | // note in structure file and recurse. |
| 72 | { |
| 73 | vtkXMLDataElement* tag = vtkXMLDataElement::New(); |
| 74 | if (name) |
| 75 | { |
| 76 | tag->SetAttribute("name", name); |
| 77 | } |
| 78 | |
| 79 | if (curDO->IsA("vtkMultiPieceDataSet")) |
| 80 | { |
| 81 | tag->SetName("Piece"); |
| 82 | tag->SetIntAttribute("index", index); |
| 83 | } |
| 84 | else if (curDO->IsA("vtkMultiBlockDataSet")) |
| 85 | { |
no test coverage detected