------------------------------------------------------------------------------
| 849 | |
| 850 | //------------------------------------------------------------------------------ |
| 851 | void vtkXMLHyperTreeGridReader::ReadTrees_2(vtkXMLDataElement* element) |
| 852 | { |
| 853 | vtkHyperTreeGrid* output = vtkHyperTreeGrid::SafeDownCast(this->GetCurrentOutput()); |
| 854 | vtkNew<vtkHyperTreeGridNonOrientedCursor> treeCursor; |
| 855 | |
| 856 | vtkXMLDataElement* treesElement = element->LookupElementWithName("Trees"); |
| 857 | |
| 858 | vtkXMLDataElement* treeIdsElement = |
| 859 | treesElement->FindNestedElementWithNameAndAttribute("DataArray", "Name", "TreeIds"); |
| 860 | |
| 861 | if (!treeIdsElement->GetAttribute("NumberOfTuples")) |
| 862 | { |
| 863 | // Empty htg |
| 864 | return; |
| 865 | } |
| 866 | |
| 867 | auto treeIds = vtkSmartPointer<vtkTypeInt64Array>::Take( |
| 868 | vtkArrayDownCast<vtkTypeInt64Array>(this->CreateArray(treeIdsElement))); |
| 869 | vtkIdType treeIdsSize; |
| 870 | |
| 871 | treeIdsElement->GetScalarAttribute("NumberOfTuples", treeIdsSize); |
| 872 | treeIds->SetNumberOfValues(treeIdsSize); |
| 873 | if (!this->ReadArrayValues(treeIdsElement, 0, treeIds, 0, treeIdsSize)) |
| 874 | { |
| 875 | vtkErrorMacro("Failed to parse " << this->GetFileName() |
| 876 | << ". Missing / flawed array TreeIds, in XML element Trees"); |
| 877 | return; |
| 878 | } |
| 879 | |
| 880 | vtkXMLDataElement* depthPerTreeElement = |
| 881 | treesElement->FindNestedElementWithNameAndAttribute("DataArray", "Name", "DepthPerTree"); |
| 882 | auto depthPerTree = vtkSmartPointer<vtkTypeUInt32Array>::Take( |
| 883 | vtkArrayDownCast<vtkTypeUInt32Array>(this->CreateArray(depthPerTreeElement))); |
| 884 | vtkIdType depthPerTreeSize; |
| 885 | depthPerTreeElement->GetScalarAttribute("NumberOfTuples", depthPerTreeSize); |
| 886 | depthPerTree->SetNumberOfValues(depthPerTreeSize); |
| 887 | if (!this->ReadArrayValues(depthPerTreeElement, 0, depthPerTree, 0, depthPerTreeSize)) |
| 888 | { |
| 889 | vtkErrorMacro("Failed to parse " |
| 890 | << this->GetFileName() << ". Missing /flawed array DepthPerTree, in XML element Trees" |
| 891 | << ", which is required in HyperTreeGrid XML format of version 2. Aborting"); |
| 892 | return; |
| 893 | } |
| 894 | |
| 895 | vtkXMLDataElement* numberOfVerticesPerDepthElement = |
| 896 | treesElement->FindNestedElementWithNameAndAttribute( |
| 897 | "DataArray", "Name", "NumberOfVerticesPerDepth"); |
| 898 | auto numberOfVerticesPerDepth = vtkSmartPointer<vtkTypeInt64Array>::Take( |
| 899 | vtkArrayDownCast<vtkTypeInt64Array>(this->CreateArray(numberOfVerticesPerDepthElement))); |
| 900 | |
| 901 | vtkIdType numberOfVerticesPerDepthSize; |
| 902 | numberOfVerticesPerDepthElement->GetScalarAttribute( |
| 903 | "NumberOfTuples", numberOfVerticesPerDepthSize); |
| 904 | numberOfVerticesPerDepth->SetNumberOfValues(numberOfVerticesPerDepthSize); |
| 905 | if (!this->ReadArrayValues(numberOfVerticesPerDepthElement, 0, numberOfVerticesPerDepth, 0, |
| 906 | numberOfVerticesPerDepthSize)) |
| 907 | { |
| 908 | vtkErrorMacro("Failed to parse " |
no test coverage detected