mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
177 lines
5.3 KiB
C++
177 lines
5.3 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkGeoTreeNode.h
|
|
|
|
Copyright (c) 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.
|
|
|
|
=========================================================================*/
|
|
|
|
/*-------------------------------------------------------------------------
|
|
Copyright 2008 Sandia Corporation.
|
|
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
|
|
the U.S. Government retains certain rights in this software.
|
|
-------------------------------------------------------------------------*/
|
|
|
|
// .NAME vtkGeoTreeNode - Stores data for a patch of the globe.
|
|
//
|
|
// .SECTION Description
|
|
// A self-referential data structure for storing geometry or imagery for
|
|
// the geospatial views. The data is organized in a quadtree. Each node
|
|
// contains a pointer to its parent and owns references to its four
|
|
// child nodes. The ID of each node is unique in its level, and encodes
|
|
// the path from the root node in its bits.
|
|
|
|
// .SECTION See Also
|
|
// vtkGeoView vtkGeoView2D vtkGeoTerrain vtkGeoAlignedImageRepresentation
|
|
|
|
#ifndef vtkGeoTreeNode_h
|
|
#define vtkGeoTreeNode_h
|
|
|
|
#include "vtkGeovisCoreModule.h" // For export macro
|
|
#include "vtkObject.h"
|
|
#include "vtkSmartPointer.h" // for SP
|
|
|
|
class vtkPolyData;
|
|
|
|
class VTKGEOVISCORE_EXPORT vtkGeoTreeNode : public vtkObject
|
|
{
|
|
public:
|
|
static vtkGeoTreeNode *New();
|
|
vtkTypeMacro(vtkGeoTreeNode, vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// The id uniquely specified this node.
|
|
// For this implementation I am going to store the branch path
|
|
// in the bits.
|
|
vtkSetMacro(Id,unsigned long);
|
|
vtkGetMacro(Id,unsigned long);
|
|
|
|
// Description;
|
|
// Knowing the level simplifies encoding the branch trace in the Id.
|
|
vtkSetMacro(Level, int);
|
|
vtkGetMacro(Level, int);
|
|
|
|
// Description:
|
|
// Longitude and latitude range of the terrain model.
|
|
vtkSetVector2Macro(LongitudeRange,double);
|
|
vtkGetVector2Macro(LongitudeRange,double);
|
|
vtkSetVector2Macro(LatitudeRange,double);
|
|
vtkGetVector2Macro(LatitudeRange,double);
|
|
|
|
// Description:
|
|
// Get a child of this node. If one is set, then they all should
|
|
// set. No not mix subclasses.
|
|
void SetChild(vtkGeoTreeNode* node, int idx);
|
|
|
|
// Description:
|
|
// When we merge children to a lower resolution parent, we need
|
|
// this reference. It is not referenced counted to avoid reference loops.
|
|
// A child should never exist when the parent is destructed anyway.
|
|
void SetParent(vtkGeoTreeNode* node)
|
|
{ this->Parent = node; }
|
|
|
|
// Description:
|
|
// Manage links to older and newer tree nodes.
|
|
// These are used to periodically delete unused patches.
|
|
void SetOlder(vtkGeoTreeNode* node)
|
|
{ this->Older = node; }
|
|
vtkGeoTreeNode* GetOlder()
|
|
{ return this->Older; }
|
|
void SetNewer(vtkGeoTreeNode* node)
|
|
{ this->Newer = node; }
|
|
vtkGeoTreeNode* GetNewer()
|
|
{ return this->Newer; }
|
|
|
|
// Description:
|
|
// Returns whether this node has valid data associated
|
|
// with it, or if it is an "empty" node.
|
|
virtual bool HasData()
|
|
{ return false; }
|
|
|
|
// Description:
|
|
// Deletes the data associated with the node to make this
|
|
// an "empty" node. This is performed when the node has
|
|
// been unused for a certain amount of time.
|
|
virtual void DeleteData()
|
|
{ }
|
|
|
|
// Description:
|
|
// Get this nodes child index in node's parent.
|
|
int GetWhichChildAreYou();
|
|
|
|
// Description:
|
|
// This method returns true if this node descends from the
|
|
// elder node. The decision is made from the node ids, so the nodes do
|
|
// not have to be in the same tree!
|
|
bool IsDescendantOf(vtkGeoTreeNode* elder);
|
|
|
|
// Description:
|
|
// Create children of the same type as parent.
|
|
// Id, level and Latitude-Longitude ranges are set.
|
|
// Returns VTK_ERROR if level gets too deep to create children.
|
|
int CreateChildren();
|
|
|
|
// Description:
|
|
// Get the child as a vtkGeoTreeNode.
|
|
// Subclasses also implement GetChild() which returns the child
|
|
// as the appropriate subclass type.
|
|
vtkGeoTreeNode* GetChildTreeNode(int idx)
|
|
{ return this->Children[idx]; }
|
|
|
|
// Description:
|
|
// Get the parent as a vtkGeoTreeNode.
|
|
// Subclasses also implement GetParent() which returns the parent
|
|
// as the appropriate subclass type.
|
|
vtkGeoTreeNode* GetParentTreeNode()
|
|
{ return this->Parent; }
|
|
|
|
//BTX
|
|
enum NodeStatus
|
|
{
|
|
NONE,
|
|
PROCESSING
|
|
};
|
|
|
|
NodeStatus GetStatus();
|
|
void SetStatus(NodeStatus status);
|
|
//ETX
|
|
|
|
// Description:
|
|
// Shallow and Deep copy. Deep copy performs a shallow copy
|
|
// of the Child nodes.
|
|
virtual void ShallowCopy(vtkGeoTreeNode *src);
|
|
virtual void DeepCopy(vtkGeoTreeNode *src);
|
|
|
|
protected:
|
|
vtkGeoTreeNode();
|
|
~vtkGeoTreeNode();
|
|
|
|
int Level;
|
|
unsigned long Id;
|
|
|
|
double LongitudeRange[2];
|
|
double LatitudeRange[2];
|
|
|
|
//BTX
|
|
vtkSmartPointer<vtkGeoTreeNode> Children[4];
|
|
vtkGeoTreeNode * Parent;
|
|
NodeStatus Status;
|
|
vtkGeoTreeNode* Older;
|
|
vtkGeoTreeNode* Newer;
|
|
//ETX
|
|
|
|
private:
|
|
vtkGeoTreeNode(const vtkGeoTreeNode&); // Not implemented.
|
|
void operator=(const vtkGeoTreeNode&); // Not implemented.
|
|
};
|
|
|
|
#endif
|