vtkGraph Class Reference

#include <vtkGraph.h>

Inheritance diagram for vtkGraph:

Inheritance graph
[legend]
Collaboration diagram for vtkGraph:

Collaboration graph
[legend]

List of all members.


Detailed Description

Base class for graph data types.

vtkGraph is the abstract base class that provides all read-only API for graph data types. A graph consists of a collection of vertices and a collection of edges connecting pairs of vertices. The vtkDirectedGraph subclass represents a graph whose edges have inherent order from source vertex to target vertex, while vtkUndirectedGraph is a graph whose edges have no inherent ordering.

Graph vertices may be traversed in two ways. In the current implementation, all vertices are assigned consecutive ids starting at zero, so they may be traversed in a simple for loop from 0 to graph->GetNumberOfVertices() - 1. You may alternately create a vtkVertexListIterator and call graph->GetVertices(it). it->Next() will return the id of the next vertex, while it->HasNext() indicates whether there are more vertices in the graph. This is the preferred method, since in the future graphs may support filtering or subsetting where the vertex ids may not be contiguous.

Graph edges must be traversed through iterators. To traverse all edges in a graph, create an instance of vtkEdgeListIterator and call graph->GetEdges(it). it->Next() returns lightweight vtkEdgeType structures, which contain the public fields Id, Source and Target. Id is the identifier for the edge, which may be used to look up values in assiciated edge data arrays. Source and Target store the ids of the source and target vertices of the edge. Note that the edge list iterator DOES NOT necessarily iterate over edges in order of ascending id. To traverse edges from wrapper code (Python, Tcl, Java), use it->NextGraphEdge() instead of it->Next(). This will return a heavyweight, wrappable vtkGraphEdge object, which has the same fields as vtkEdgeType accessible through getter methods.

To traverse all edges outgoing from a vertex, create a vtkOutEdgeIterator and call graph->GetOutEdges(v, it). it->Next() returns a lightweight vtkOutEdgeType containing the fields Id and Target. The source of the edge is always the vertex that was passed as an argument to GetOutEdges(). Incoming edges may be similarly traversed with vtkInEdgeIterator, which returns vtkInEdgeType structures with Id and Source fields. Both vtkOutEdgeIterator and vtkInEdgeIterator also provide the wrapper functions NextGraphEdge() which return vtkGraphEdge objects.

An additional iterator, vtkAdjacentVertexIterator can traverse outgoing vertices directly, instead needing to parse through edges. Initialize the iterator by calling graph->GetAdjacentVertices(v, it).

vtkGraph has two instances of vtkDataSetAttributes for associated vertex and edge data. It also has a vtkPoints instance which may store x,y,z locations for each vertex. This is populated by filters such as vtkGraphLayout and vtkAssignCoordinates.

All graph types share the same implementation, so the structure of one may be shared among multiple graphs, even graphs of different types. Structures from vtkUndirectedGraph and vtkMutableUndirectedGraph may be shared directly. Structures from vtkDirectedGraph, vtkMutableDirectedGraph, and vtkTree may be shared directly with the exception that setting a structure to a tree requires that a "is a tree" test passes.

For graph types that are known to be compatible, calling ShallowCopy() or DeepCopy() will work as expected. When the outcome of a conversion is unknown (i.e. setting a graph to a tree), CheckedShallowCopy() and CheckedDeepCopy() exist which are identical to ShallowCopy() and DeepCopy(), except that instead of emitting an error for an incompatible structure, the function returns false. This allows you to programmatically check structure compatibility without causing error messages.

To construct a graph, use vtkMutableDirectedGraph or vtkMutableUndirectedGraph. You may then use CheckedShallowCopy to set the contents of a mutable graph type into one of the non-mutable types vtkDirectedGraph, vtkUndirectedGraph. To construct a tree, use vtkMutableDirectedGraph, with directed edges which point from the parent to the child, then use CheckedShallowCopy to set the structure to a vtkTree.

Warning:
All copy operations implement copy-on-write. The structures are initially shared, but if one of the graphs is modified, the structure is copied so that to the user they function as if they were deep copied. This means that care must be taken if different threads are accessing different graph instances that share the same structure. Race conditions may develop if one thread is modifying the graph at the same time that another graph is copying the structure.
See also:
vtkDirectedGraph vtkUndirectedGraph vtkMutableDirectedGraph vtkMutableUndirectedGraph vtkTree
Thanks:
Thanks to Brian Wylie, Timothy Shead, Ken Moreland of Sandia National Laboratories and Douglas Gregor of Indiana University for designing these classes.
Tests:
vtkGraph (Tests)

Definition at line 179 of file vtkGraph.h.

vtkPointsPoints
static double DefaultPoint [3]

Public Types

typedef vtkDataObject Superclass

Public Member Functions

virtual const char * GetClassName ()
virtual int IsA (const char *type)
void PrintSelf (ostream &os, vtkIndent indent)
virtual int GetDataObjectType ()
virtual void Initialize ()
void ComputeBounds ()
unsigned long int GetMTime ()
virtual void GetOutEdges (vtkIdType v, vtkOutEdgeIterator *it)
virtual vtkIdType GetDegree (vtkIdType v)
virtual vtkIdType GetOutDegree (vtkIdType v)
virtual void GetInEdges (vtkIdType v, vtkInEdgeIterator *it)
virtual vtkIdType GetInDegree (vtkIdType v)
virtual void GetAdjacentVertices (vtkIdType v, vtkAdjacentVertexIterator *it)
virtual void GetEdges (vtkEdgeListIterator *it)
virtual vtkIdType GetNumberOfEdges ()
virtual void GetVertices (vtkVertexListIterator *it)
virtual vtkIdType GetNumberOfVertices ()
virtual void ShallowCopy (vtkDataObject *obj)
virtual void DeepCopy (vtkDataObject *obj)
virtual void CopyStructure (vtkGraph *g)
virtual bool CheckedShallowCopy (vtkGraph *g)
virtual bool CheckedDeepCopy (vtkGraph *g)
virtual void Squeeze ()
void ReorderOutVertices (vtkIdType v, vtkIdTypeArray *vertices)
bool IsSameStructure (vtkGraph *other)
virtual vtkDataSetAttributesGetVertexData ()
virtual vtkDataSetAttributesGetEdgeData ()
double * GetPoint (vtkIdType ptId)
void GetPoint (vtkIdType ptId, double x[3])
vtkPointsGetPoints ()
virtual void SetPoints (vtkPoints *points)
double * GetBounds ()
void GetBounds (double bounds[6])
vtkIdType GetSourceVertex (vtkIdType e)
vtkIdType GetTargetVertex (vtkIdType e)

Static Public Member Functions

static int IsTypeOf (const char *type)
static vtkGraphSafeDownCast (vtkObject *o)
static vtkGraphGetData (vtkInformation *info)
static vtkGraphGetData (vtkInformationVector *v, int i=0)

Protected Member Functions

 vtkGraph ()
 ~vtkGraph ()
vtkIdType AddVertexInternal ()
vtkEdgeType AddEdgeInternal (vtkIdType u, vtkIdType v, bool directed)
virtual bool IsStructureValid (vtkGraph *g)=0
virtual void CopyInternal (vtkGraph *g, bool deep)
void SetInternals (vtkGraphInternals *internals)
void ForceOwnership ()
void BuildEdgeList ()
virtual void GetOutEdges (vtkIdType v, const vtkOutEdgeType *&edges, vtkIdType &nedges)
virtual void GetInEdges (vtkIdType v, const vtkInEdgeType *&edges, vtkIdType &nedges)

Protected Attributes

vtkGraphInternals * Internals
double Bounds [6]
vtkTimeStamp ComputeTime
vtkDataSetAttributesVertexData
vtkDataSetAttributesEdgeData
vtkIdTypeArrayEdgeList

Friends

class vtkAdjacentVertexIterator
class vtkEdgeListIterator
class vtkInEdgeIterator
class vtkOutEdgeIterator
class boost::vtk_edge_iterator
class boost::vtk_in_edge_pointer_iterator
class boost::vtk_out_edge_pointer_iterator

Member Typedef Documentation


Constructor & Destructor Documentation

vtkGraph::vtkGraph (  )  [protected]

vtkGraph::~vtkGraph (  )  [protected]


Member Function Documentation

virtual const char* vtkGraph::GetClassName (  )  [virtual]

static int vtkGraph::IsTypeOf ( const char *  name  )  [static]

Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkDataObject.

Reimplemented in vtkDirectedAcyclicGraph, vtkDirectedGraph, vtkMutableDirectedGraph, vtkMutableUndirectedGraph, vtkTree, and vtkUndirectedGraph.

virtual int vtkGraph::IsA ( const char *  name  )  [virtual]

Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkDataObject.

Reimplemented in vtkDirectedAcyclicGraph, vtkDirectedGraph, vtkMutableDirectedGraph, vtkMutableUndirectedGraph, vtkTree, and vtkUndirectedGraph.

static vtkGraph* vtkGraph::SafeDownCast ( vtkObject o  )  [static]

void vtkGraph::PrintSelf ( ostream &  os,
vtkIndent  indent 
) [virtual]

Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.

Reimplemented from vtkDataObject.

Reimplemented in vtkDirectedAcyclicGraph, vtkDirectedGraph, vtkMutableDirectedGraph, vtkMutableUndirectedGraph, vtkTree, and vtkUndirectedGraph.

virtual vtkDataSetAttributes* vtkGraph::GetVertexData (  )  [virtual]

Get the vertex or edge data.

virtual vtkDataSetAttributes* vtkGraph::GetEdgeData (  )  [virtual]

Get the vertex or edge data.

virtual int vtkGraph::GetDataObjectType (  )  [inline, virtual]

Return what type of dataset this is.

Reimplemented from vtkDataObject.

Reimplemented in vtkDirectedAcyclicGraph, vtkDirectedGraph, vtkTree, and vtkUndirectedGraph.

Definition at line 192 of file vtkGraph.h.

virtual void vtkGraph::Initialize (  )  [virtual]

Initialize to an empty graph.

Reimplemented from vtkDataObject.

double* vtkGraph::GetPoint ( vtkIdType  ptId  ) 

These methods return the point (0,0,0) until the points structure is created, when it returns the actual point position.

void vtkGraph::GetPoint ( vtkIdType  ptId,
double  x[3] 
)

These methods return the point (0,0,0) until the points structure is created, when it returns the actual point position.

vtkPoints* vtkGraph::GetPoints (  ) 

Returns the points array for this graph. If points is not yet constructed, generates and returns a new points array filled with (0,0,0) coordinates.

virtual void vtkGraph::SetPoints ( vtkPoints points  )  [virtual]

Returns the points array for this graph. If points is not yet constructed, generates and returns a new points array filled with (0,0,0) coordinates.

void vtkGraph::ComputeBounds (  ) 

Compute the bounds of the graph.

double* vtkGraph::GetBounds (  ) 

Return a pointer to the geometry bounding box in the form (xmin,xmax, ymin,ymax, zmin,zmax).

void vtkGraph::GetBounds ( double  bounds[6]  ) 

Return a pointer to the geometry bounding box in the form (xmin,xmax, ymin,ymax, zmin,zmax).

unsigned long int vtkGraph::GetMTime (  )  [virtual]

The modified time of the graph.

Reimplemented from vtkDataObject.

virtual void vtkGraph::GetOutEdges ( vtkIdType  v,
vtkOutEdgeIterator it 
) [virtual]

Initializes the out edge iterator to iterate over all outgoing edges of vertex v. For an undirected graph, returns all incident edges.

virtual vtkIdType vtkGraph::GetDegree ( vtkIdType  v  )  [virtual]

The total of all incoming and outgoing vertices for vertex v. For undirected graphs, this is simply the number of edges incident to v.

virtual vtkIdType vtkGraph::GetOutDegree ( vtkIdType  v  )  [virtual]

The number of outgoing edges from vertex v. For undirected graphs, returns the same as GetDegree().

virtual void vtkGraph::GetInEdges ( vtkIdType  v,
vtkInEdgeIterator it 
) [virtual]

Initializes the in edge iterator to iterate over all incoming edges to vertex v. For an undirected graph, returns all incident edges.

Reimplemented in vtkUndirectedGraph.

virtual vtkIdType vtkGraph::GetInDegree ( vtkIdType  v  )  [virtual]

The number of incoming edges to vertex v. For undirected graphs, returns the same as GetDegree().

Reimplemented in vtkUndirectedGraph.

virtual void vtkGraph::GetAdjacentVertices ( vtkIdType  v,
vtkAdjacentVertexIterator it 
) [virtual]

Initializes the adjacent vertex iterator to iterate over all outgoing vertices from vertex v. For an undirected graph, returns all adjacent vertices.

virtual void vtkGraph::GetEdges ( vtkEdgeListIterator it  )  [virtual]

Initializes the edge list iterator to iterate over all edges in the graph. Edges may not be traversed in order of increasing edge id.

virtual vtkIdType vtkGraph::GetNumberOfEdges (  )  [virtual]

The number of edges in the graph.

virtual void vtkGraph::GetVertices ( vtkVertexListIterator it  )  [virtual]

Initializes the vertex list iterator to iterate over all vertices in the graph.

virtual vtkIdType vtkGraph::GetNumberOfVertices (  )  [virtual]

The number of vertices in the graph.

virtual void vtkGraph::ShallowCopy ( vtkDataObject obj  )  [virtual]

Shallow copies the data object into this graph. If it is an incompatible graph, reports an error.

Reimplemented from vtkDataObject.

virtual void vtkGraph::DeepCopy ( vtkDataObject obj  )  [virtual]

Deep copies the data object into this graph. If it is an incompatible graph, reports an error.

Reimplemented from vtkDataObject.

virtual void vtkGraph::CopyStructure ( vtkGraph g  )  [virtual]

Does a shallow copy of the topological information, but not the associated attributes.

virtual bool vtkGraph::CheckedShallowCopy ( vtkGraph g  )  [virtual]

Performs the same operation as ShallowCopy(), but instead of reporting an error for an incompatible graph, returns false.

virtual bool vtkGraph::CheckedDeepCopy ( vtkGraph g  )  [virtual]

Performs the same operation as DeepCopy(), but instead of reporting an error for an incompatible graph, returns false.

virtual void vtkGraph::Squeeze (  )  [virtual]

Reclaim unused memory.

static vtkGraph* vtkGraph::GetData ( vtkInformation info  )  [static]

Retrieve a graph from an information vector.

Reimplemented from vtkDataObject.

Reimplemented in vtkDirectedAcyclicGraph, vtkDirectedGraph, vtkTree, and vtkUndirectedGraph.

static vtkGraph* vtkGraph::GetData ( vtkInformationVector v,
int  i = 0 
) [static]

Retrieve a graph from an information vector.

Reimplemented from vtkDataObject.

Reimplemented in vtkDirectedAcyclicGraph, vtkDirectedGraph, vtkTree, and vtkUndirectedGraph.

void vtkGraph::ReorderOutVertices ( vtkIdType  v,
vtkIdTypeArray vertices 
)

Reorder the outgoing vertices of a vertex. The vertex list must have the same elements as the current out edge list, just in a different order. This method does not change the topology of the graph.

bool vtkGraph::IsSameStructure ( vtkGraph other  ) 

Returns true if both graphs point to the same adjacency structure. Can be used to test the copy-on-write feature of the graph.

vtkIdType vtkGraph::GetSourceVertex ( vtkIdType  e  ) 

Retrieve the source and target vertices for an edge id. NOTE: The first time this is called, the graph will build a mapping array from edge id to source/target that is the same size as the number of edges in the graph. If you have access to a vtkOutEdgeType, vtkInEdgeType, vtkEdgeType, or vtkGraphEdge, you should directly use these structures to look up the source or target instead of this method.

vtkIdType vtkGraph::GetTargetVertex ( vtkIdType  e  ) 

Retrieve the source and target vertices for an edge id. NOTE: The first time this is called, the graph will build a mapping array from edge id to source/target that is the same size as the number of edges in the graph. If you have access to a vtkOutEdgeType, vtkInEdgeType, vtkEdgeType, or vtkGraphEdge, you should directly use these structures to look up the source or target instead of this method.

vtkIdType vtkGraph::AddVertexInternal (  )  [protected]

Protected method for adding vertices used by mutable subclasses.

vtkEdgeType vtkGraph::AddEdgeInternal ( vtkIdType  u,
vtkIdType  v,
bool  directed 
) [protected]

Protected method for adding edges of a certain directedness used by mutable subclasses.

virtual bool vtkGraph::IsStructureValid ( vtkGraph g  )  [protected, pure virtual]

Subclasses override this method to accept the structure based on their requirements.

Implemented in vtkDirectedAcyclicGraph, vtkDirectedGraph, vtkTree, and vtkUndirectedGraph.

virtual void vtkGraph::CopyInternal ( vtkGraph g,
bool  deep 
) [protected, virtual]

Copy internal data structure.

void vtkGraph::SetInternals ( vtkGraphInternals *  internals  )  [protected]

Private method for setting internals.

void vtkGraph::ForceOwnership (  )  [protected]

If this instance does not own its internals, it makes a copy of the internals. This is called before any write operation.

virtual void vtkGraph::GetOutEdges ( vtkIdType  v,
const vtkOutEdgeType *&  edges,
vtkIdType nedges 
) [protected, virtual]

Fast access functions for iterators.

virtual void vtkGraph::GetInEdges ( vtkIdType  v,
const vtkInEdgeType *&  edges,
vtkIdType nedges 
) [protected, virtual]

Fast access functions for iterators.

Reimplemented in vtkUndirectedGraph.

void vtkGraph::BuildEdgeList (  )  [protected]

Builds a mapping from edge id to source/target vertex id.


Friends And Related Function Documentation

friend class vtkAdjacentVertexIterator [friend]

Friend iterator classes.

Definition at line 355 of file vtkGraph.h.

friend class vtkEdgeListIterator [friend]

Friend iterator classes.

Definition at line 356 of file vtkGraph.h.

friend class vtkInEdgeIterator [friend]

Friend iterator classes.

Definition at line 357 of file vtkGraph.h.

friend class vtkOutEdgeIterator [friend]

Friend iterator classes.

Definition at line 358 of file vtkGraph.h.

friend class boost::vtk_edge_iterator [friend]

Friend iterator classes.

Definition at line 359 of file vtkGraph.h.

friend class boost::vtk_in_edge_pointer_iterator [friend]

Friend iterator classes.

Definition at line 360 of file vtkGraph.h.

friend class boost::vtk_out_edge_pointer_iterator [friend]

Friend iterator classes.

Definition at line 361 of file vtkGraph.h.


Member Data Documentation

vtkGraphInternals* vtkGraph::Internals [protected]

The adjacency list internals of this graph.

Definition at line 335 of file vtkGraph.h.

The vertex and edge data.

Definition at line 366 of file vtkGraph.h.

The vertex and edge data.

Definition at line 367 of file vtkGraph.h.

double vtkGraph::Bounds[6] [protected]

(xmin,xmax, ymin,ymax, zmin,zmax) geometric bounds.

Definition at line 371 of file vtkGraph.h.

Time at which bounds were computed.

Definition at line 374 of file vtkGraph.h.

The vertex locations.

Definition at line 378 of file vtkGraph.h.

double vtkGraph::DefaultPoint[3] [static, protected]

The vertex locations.

Definition at line 379 of file vtkGraph.h.

The optional mapping from edge id to source/target ids.

Definition at line 384 of file vtkGraph.h.


The documentation for this class was generated from the following file:

Generated on Sat Dec 27 13:27:04 2008 for VTK by  doxygen 1.5.6