------------------------------------------------------------------------------
| 780 | |
| 781 | //------------------------------------------------------------------------------ |
| 782 | int vtkXMLHyperTreeGridWriter::WriteTrees_2(vtkIndent indent) |
| 783 | { |
| 784 | vtkHyperTreeGrid* input = this->GetInput(); |
| 785 | vtkCellData* cd = input->GetCellData(); |
| 786 | vtkIdType numberOfCellDataArrays = cd->GetNumberOfArrays(); |
| 787 | |
| 788 | // Count the actual number of hypertrees represented in this hypertree grid |
| 789 | vtkHyperTreeGrid::vtkHyperTreeGridIterator it; |
| 790 | input->InitializeTreeIterator(it); |
| 791 | this->NumberOfTrees = 0; |
| 792 | vtkIdType inIndex; |
| 793 | while (it.GetNextTree(inIndex)) |
| 794 | { |
| 795 | ++this->NumberOfTrees; |
| 796 | } |
| 797 | |
| 798 | // Allocate offsets managers for appended data |
| 799 | if (this->DataMode == Appended) |
| 800 | { |
| 801 | this->DescriptorOMG->Allocate(1, this->NumberOfTimeSteps); |
| 802 | this->NbVerticesByLevelOMG->Allocate(1, this->NumberOfTimeSteps); |
| 803 | this->TreeIdsOMG->Allocate(1, this->NumberOfTimeSteps); |
| 804 | this->DepthPerTreeOMG->Allocate(1, this->NumberOfTimeSteps); |
| 805 | this->CellDataOMG->Allocate(numberOfCellDataArrays, this->NumberOfTimeSteps); |
| 806 | if (input->GetMask()) |
| 807 | { |
| 808 | this->MaskOMG->Allocate(1, this->NumberOfTimeSteps); |
| 809 | } |
| 810 | } |
| 811 | |
| 812 | // Collect description by processing depth first and writing breadth first |
| 813 | input->InitializeTreeIterator(it); |
| 814 | |
| 815 | auto& metaData = this->MetaDataForVersion2; |
| 816 | |
| 817 | metaData.Descriptors = vtkSmartPointer<vtkBitArray>::New(); |
| 818 | metaData.TreeIds = vtkSmartPointer<vtkTypeInt64Array>::New(); |
| 819 | metaData.NumberOfVerticesPerDepth = vtkSmartPointer<vtkTypeInt64Array>::New(); |
| 820 | metaData.DepthPerTree = vtkSmartPointer<vtkTypeUInt32Array>::New(); |
| 821 | metaData.BreadthFirstIdMap = vtkSmartPointer<vtkIdList>::New(); |
| 822 | |
| 823 | metaData.TreeIds->SetNumberOfValues(input->GetNumberOfNonEmptyTrees()); |
| 824 | metaData.DepthPerTree->SetNumberOfValues(input->GetNumberOfNonEmptyTrees()); |
| 825 | |
| 826 | vtkIdType currentId = 0; |
| 827 | |
| 828 | while (it.GetNextTree(inIndex)) |
| 829 | { |
| 830 | vtkHyperTree* tree = input->GetTree(inIndex); |
| 831 | metaData.TreeIds->SetValue(currentId, inIndex); |
| 832 | |
| 833 | vtkIdType previousSize = metaData.NumberOfVerticesPerDepth->GetNumberOfValues(); |
| 834 | tree->ComputeBreadthFirstOrderDescriptor(input->GetDepthLimiter(), input->GetMask(), |
| 835 | metaData.NumberOfVerticesPerDepth, metaData.Descriptors, metaData.BreadthFirstIdMap); |
| 836 | metaData.DepthPerTree->SetValue( |
| 837 | currentId++, metaData.NumberOfVerticesPerDepth->GetNumberOfValues() - previousSize); |
| 838 | } |
| 839 |
no test coverage detected