/*========================================================================= Program: Visualization Toolkit Module: vtkXdmf3SILBuilder.cxx Language: C++ Copyright (c) 1993-2002 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. =========================================================================*/ #include "vtkXdmf3SILBuilder.h" #include "vtkDataSetAttributes.h" #include "vtkMutableDirectedGraph.h" #include "vtkStringArray.h" #include "vtkUnsignedCharArray.h" // As soon as num-grids (sub-grids and all) grows beyond this number, we assume // that the grids are too numerous for the user to select individually and // hence only the top-level grids are made accessible. #define MAX_COLLECTABLE_NUMBER_OF_GRIDS 1000 //------------------------------------------------------------------------------ vtkXdmf3SILBuilder::vtkXdmf3SILBuilder() { this->SIL = nullptr; this->NamesArray = nullptr; this->CrossEdgesArray = nullptr; this->RootVertex = -1; this->BlocksRoot = -1; this->HierarchyRoot = -1; this->VertexCount = 0; } //------------------------------------------------------------------------------ vtkXdmf3SILBuilder::~vtkXdmf3SILBuilder() { if (this->SIL) { this->SIL->Delete(); } if (this->NamesArray) { this->NamesArray->Delete(); } if (this->CrossEdgesArray) { this->CrossEdgesArray->Delete(); } } //------------------------------------------------------------------------------ void vtkXdmf3SILBuilder::Initialize() { if (this->SIL) { this->SIL->Delete(); } this->SIL = vtkMutableDirectedGraph::New(); this->SIL->Initialize(); if (this->NamesArray) { this->NamesArray->Delete(); } this->NamesArray = vtkStringArray::New(); this->NamesArray->SetName("Names"); this->SIL->GetVertexData()->AddArray(this->NamesArray); if (this->CrossEdgesArray) { this->CrossEdgesArray->Delete(); } this->CrossEdgesArray = vtkUnsignedCharArray::New(); this->CrossEdgesArray->SetName("CrossEdges"); this->SIL->GetEdgeData()->AddArray(this->CrossEdgesArray); this->RootVertex = this->AddVertex("SIL"); this->BlocksRoot = this->AddVertex("Blocks"); this->HierarchyRoot = this->AddVertex("Hierarchy"); this->AddChildEdge(RootVertex, BlocksRoot); this->AddChildEdge(RootVertex, HierarchyRoot); this->VertexCount = 0; } //------------------------------------------------------------------------------ vtkIdType vtkXdmf3SILBuilder::AddVertex(const char* name) { this->VertexCount++; vtkIdType vertex = this->SIL->AddVertex(); this->NamesArray->InsertValue(vertex, name); return vertex; } //------------------------------------------------------------------------------ vtkIdType vtkXdmf3SILBuilder::AddChildEdge(vtkIdType parent, vtkIdType child) { vtkIdType id = this->SIL->AddEdge(parent, child).Id; this->CrossEdgesArray->InsertValue(id, 0); return id; } //------------------------------------------------------------------------------ vtkIdType vtkXdmf3SILBuilder::AddCrossEdge(vtkIdType src, vtkIdType dst) { vtkIdType id = this->SIL->AddEdge(src, dst).Id; this->CrossEdgesArray->InsertValue(id, 1); return id; } //------------------------------------------------------------------------------ vtkIdType vtkXdmf3SILBuilder::GetRootVertex() { return this->RootVertex; } //------------------------------------------------------------------------------ vtkIdType vtkXdmf3SILBuilder::GetBlocksRoot() { return this->BlocksRoot; } //------------------------------------------------------------------------------ vtkIdType vtkXdmf3SILBuilder::GetHierarchyRoot() { return this->HierarchyRoot; } //------------------------------------------------------------------------------ bool vtkXdmf3SILBuilder::IsMaxedOut() { return (this->VertexCount >= MAX_COLLECTABLE_NUMBER_OF_GRIDS); }