|
virtual int | IsA (const char *type) |
|
vtkGraph * | NewInstance () const |
|
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 | GetOutEdge (vtkIdType v, vtkIdType index, vtkGraphEdge *e) |
|
virtual void | GetInEdges (vtkIdType v, vtkInEdgeIterator *it) |
|
virtual vtkIdType | GetInDegree (vtkIdType v) |
|
virtual void | GetInEdge (vtkIdType v, vtkIdType index, vtkGraphEdge *e) |
|
virtual void | GetAdjacentVertices (vtkIdType v, vtkAdjacentVertexIterator *it) |
|
virtual void | GetEdges (vtkEdgeListIterator *it) |
|
virtual vtkIdType | GetNumberOfEdges () |
|
virtual void | GetVertices (vtkVertexListIterator *it) |
|
virtual vtkIdType | GetNumberOfVertices () |
|
void | SetDistributedGraphHelper (vtkDistributedGraphHelper *helper) |
|
vtkIdType | FindVertex (const vtkVariant &pedigreeID) |
|
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) |
|
vtkIdType | GetNumberOfEdgePoints (vtkIdType e) |
|
double * | GetEdgePoint (vtkIdType e, vtkIdType i) |
|
void | ClearEdgePoints (vtkIdType e) |
|
vtkGraphInternals * | GetGraphInternals (bool modifying) |
|
void | GetInducedEdges (vtkIdTypeArray *verts, vtkIdTypeArray *edges) |
|
virtual vtkFieldData * | GetAttributesAsFieldData (int type) |
|
virtual vtkIdType | GetNumberOfElements (int type) |
|
void | Dump () |
|
vtkIdType | GetEdgeId (vtkIdType a, vtkIdType b) |
|
bool | ToDirectedGraph (vtkDirectedGraph *g) |
|
bool | ToUndirectedGraph (vtkUndirectedGraph *g) |
|
|
virtual vtkDataSetAttributes * | GetVertexData () |
|
virtual vtkDataSetAttributes * | GetEdgeData () |
|
|
double * | GetPoint (vtkIdType ptId) |
|
void | GetPoint (vtkIdType ptId, double x[3]) |
|
|
vtkPoints * | GetPoints () |
|
virtual void | SetPoints (vtkPoints *points) |
|
|
double * | GetBounds () |
|
void | GetBounds (double bounds[6]) |
|
|
virtual vtkOutEdgeType | GetOutEdge (vtkIdType v, vtkIdType index) |
|
|
virtual vtkInEdgeType | GetInEdge (vtkIdType v, vtkIdType index) |
|
|
vtkDistributedGraphHelper * | GetDistributedGraphHelper () |
|
|
vtkIdType | GetSourceVertex (vtkIdType e) |
|
vtkIdType | GetTargetVertex (vtkIdType e) |
|
|
void | SetEdgePoints (vtkIdType e, vtkIdType npts, double *pts) |
|
void | GetEdgePoints (vtkIdType e, vtkIdType &npts, double *&pts) |
|
|
void | SetEdgePoint (vtkIdType e, vtkIdType i, double x[3]) |
|
void | SetEdgePoint (vtkIdType e, vtkIdType i, double x, double y, double z) |
|
|
void | AddEdgePoint (vtkIdType e, double x[3]) |
|
void | AddEdgePoint (vtkIdType e, double x, double y, double z) |
|
|
void | ShallowCopyEdgePoints (vtkGraph *g) |
|
void | DeepCopyEdgePoints (vtkGraph *g) |
|
vtkDataObject * | NewInstance () const |
|
void | ReleaseData () |
|
unsigned long | GetUpdateTime () |
|
virtual unsigned long | GetActualMemorySize () |
|
virtual void | CopyInformationToPipeline (vtkInformation *vtkNotUsed(info)) |
|
void | DataHasBeenGenerated () |
|
virtual void | PrepareForNewData () |
|
virtual int | GetExtentType () |
|
virtual void | Crop (const int *updateExtent) |
|
virtual vtkDataSetAttributes * | GetAttributes (int type) |
|
virtual int | GetAttributeTypeForArray (vtkAbstractArray *arr) |
|
virtual vtkInformation * | GetInformation () |
|
virtual void | SetInformation (vtkInformation *) |
|
virtual int | GetDataReleased () |
|
virtual void | SetFieldData (vtkFieldData *) |
|
virtual vtkFieldData * | GetFieldData () |
|
virtual void | CopyInformationFromPipeline (vtkInformation *vtkNotUsed(info)) |
|
void | GlobalReleaseDataFlagOn () |
|
void | GlobalReleaseDataFlagOff () |
|
vtkObject * | NewInstance () const |
|
virtual void | DebugOn () |
|
virtual void | DebugOff () |
|
bool | GetDebug () |
|
void | SetDebug (bool debugFlag) |
|
virtual void | Modified () |
|
unsigned long | AddObserver (unsigned long event, vtkCommand *, float priority=0.0f) |
|
unsigned long | AddObserver (const char *event, vtkCommand *, float priority=0.0f) |
|
vtkCommand * | GetCommand (unsigned long tag) |
|
void | RemoveObserver (vtkCommand *) |
|
void | RemoveObservers (unsigned long event, vtkCommand *) |
|
void | RemoveObservers (const char *event, vtkCommand *) |
|
int | HasObserver (unsigned long event, vtkCommand *) |
|
int | HasObserver (const char *event, vtkCommand *) |
|
void | RemoveObserver (unsigned long tag) |
|
void | RemoveObservers (unsigned long event) |
|
void | RemoveObservers (const char *event) |
|
void | RemoveAllObservers () |
|
int | HasObserver (unsigned long event) |
|
int | HasObserver (const char *event) |
|
template<class U , class T > |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(), float priority=0.0f) |
|
template<class U , class T > |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
|
template<class U , class T > |
unsigned long | AddObserver (unsigned long event, U observer, bool(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
|
int | InvokeEvent (unsigned long event, void *callData) |
|
int | InvokeEvent (const char *event, void *callData) |
|
int | InvokeEvent (unsigned long event) |
|
int | InvokeEvent (const char *event) |
|
const char * | GetClassName () const |
|
virtual void | Delete () |
|
virtual void | FastDelete () |
|
void | Print (ostream &os) |
|
virtual void | Register (vtkObjectBase *o) |
|
virtual void | UnRegister (vtkObjectBase *o) |
|
void | SetReferenceCount (int) |
|
void | PrintRevisions (ostream &) |
|
virtual void | PrintHeader (ostream &os, vtkIndent indent) |
|
virtual void | PrintTrailer (ostream &os, vtkIndent indent) |
|
int | GetReferenceCount () |
|
|
static int | IsTypeOf (const char *type) |
|
static vtkGraph * | SafeDownCast (vtkObjectBase *o) |
|
|
static vtkGraph * | GetData (vtkInformation *info) |
|
static vtkGraph * | GetData (vtkInformationVector *v, int i=0) |
|
static vtkDataObject * | New () |
|
static int | IsTypeOf (const char *type) |
|
static vtkDataObject * | SafeDownCast (vtkObjectBase *o) |
|
static const char * | GetAssociationTypeAsString (int associationType) |
|
static int | GetAssociationTypeFromString (const char *associationType) |
|
static vtkInformationStringKey * | DATA_TYPE_NAME () |
|
static vtkInformationDataObjectKey * | DATA_OBJECT () |
|
static vtkInformationIntegerKey * | DATA_EXTENT_TYPE () |
|
static vtkInformationIntegerPointerKey * | DATA_EXTENT () |
|
static vtkInformationIntegerVectorKey * | ALL_PIECES_EXTENT () |
|
static vtkInformationIntegerKey * | DATA_PIECE_NUMBER () |
|
static vtkInformationIntegerKey * | DATA_NUMBER_OF_PIECES () |
|
static vtkInformationIntegerKey * | DATA_NUMBER_OF_GHOST_LEVELS () |
|
static vtkInformationDoubleKey * | DATA_TIME_STEP () |
|
static vtkInformationInformationVectorKey * | POINT_DATA_VECTOR () |
|
static vtkInformationInformationVectorKey * | CELL_DATA_VECTOR () |
|
static vtkInformationInformationVectorKey * | VERTEX_DATA_VECTOR () |
|
static vtkInformationInformationVectorKey * | EDGE_DATA_VECTOR () |
|
static vtkInformationIntegerKey * | FIELD_ARRAY_TYPE () |
|
static vtkInformationIntegerKey * | FIELD_ASSOCIATION () |
|
static vtkInformationIntegerKey * | FIELD_ATTRIBUTE_TYPE () |
|
static vtkInformationIntegerKey * | FIELD_ACTIVE_ATTRIBUTE () |
|
static vtkInformationIntegerKey * | FIELD_NUMBER_OF_COMPONENTS () |
|
static vtkInformationIntegerKey * | FIELD_NUMBER_OF_TUPLES () |
|
static vtkInformationIntegerKey * | FIELD_OPERATION () |
|
static vtkInformationDoubleVectorKey * | FIELD_RANGE () |
|
static vtkInformationIntegerVectorKey * | PIECE_EXTENT () |
|
static vtkInformationStringKey * | FIELD_NAME () |
|
static vtkInformationDoubleVectorKey * | ORIGIN () |
|
static vtkInformationDoubleVectorKey * | SPACING () |
|
static vtkInformationDoubleVectorKey * | BOUNDING_BOX () |
|
static vtkInformationDataObjectKey * | SIL () |
|
static vtkInformation * | GetActiveFieldInformation (vtkInformation *info, int fieldAssociation, int attributeType) |
|
static vtkInformation * | GetNamedFieldInformation (vtkInformation *info, int fieldAssociation, const char *name) |
|
static void | RemoveNamedFieldInformation (vtkInformation *info, int fieldAssociation, const char *name) |
|
static vtkInformation * | SetActiveAttribute (vtkInformation *info, int fieldAssociation, const char *attributeName, int attributeType) |
|
static void | SetActiveAttributeInfo (vtkInformation *info, int fieldAssociation, int attributeType, const char *name, int arrayType, int numComponents, int numTuples) |
|
static void | SetPointDataActiveScalarInfo (vtkInformation *info, int arrayType, int numComponents) |
|
static vtkDataObject * | GetData (vtkInformation *info) |
|
static vtkDataObject * | GetData (vtkInformationVector *v, int i=0) |
|
static void | SetGlobalReleaseDataFlag (int val) |
|
static int | GetGlobalReleaseDataFlag () |
|
static int | IsTypeOf (const char *type) |
|
static vtkObject * | SafeDownCast (vtkObjectBase *o) |
|
static vtkObject * | New () |
|
static void | BreakOnError () |
|
static void | SetGlobalWarningDisplay (int val) |
|
static void | GlobalWarningDisplayOn () |
|
static void | GlobalWarningDisplayOff () |
|
static int | GetGlobalWarningDisplay () |
|
static int | IsTypeOf (const char *name) |
|
static vtkObjectBase * | New () |
|
|
virtual vtkObjectBase * | NewInstanceInternal () const |
|
| vtkGraph () |
|
| ~vtkGraph () |
|
void | AddVertexInternal (const vtkVariant &pedigree, vtkIdType *vertex) |
|
void | RemoveVertexInternal (vtkIdType v, bool directed) |
|
void | RemoveEdgeInternal (vtkIdType e, bool directed) |
|
void | RemoveVerticesInternal (vtkIdTypeArray *arr, bool directed) |
|
virtual bool | IsStructureValid (vtkGraph *g)=0 |
|
virtual void | CopyInternal (vtkGraph *g, bool deep) |
|
void | SetInternals (vtkGraphInternals *internals) |
|
void | SetEdgePoints (vtkGraphEdgePoints *edgePoints) |
|
void | ForceOwnership () |
|
void | BuildEdgeList () |
|
|
void | AddVertexInternal (vtkVariantArray *propertyArr=0, vtkIdType *vertex=0) |
|
|
void | AddEdgeInternal (vtkIdType u, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
|
void | AddEdgeInternal (const vtkVariant &uPedigree, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
|
void | AddEdgeInternal (vtkIdType u, const vtkVariant &vPedigree, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
|
void | AddEdgeInternal (const vtkVariant &uPedigree, const vtkVariant &vPedigree, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
|
|
void | RemoveEdgesInternal (vtkIdTypeArray *arr, bool directed) |
|
|
virtual void | GetOutEdges (vtkIdType v, const vtkOutEdgeType *&edges, vtkIdType &nedges) |
|
virtual void | GetInEdges (vtkIdType v, const vtkInEdgeType *&edges, vtkIdType &nedges) |
|
| vtkDataObject () |
|
| ~vtkDataObject () |
|
| vtkObject () |
|
virtual | ~vtkObject () |
|
virtual void | RegisterInternal (vtkObjectBase *, int check) |
|
virtual void | UnRegisterInternal (vtkObjectBase *, int check) |
|
void | InternalGrabFocus (vtkCommand *mouseEvents, vtkCommand *keypressEvents=NULL) |
|
void | InternalReleaseFocus () |
|
| vtkObjectBase () |
|
virtual | ~vtkObjectBase () |
|
virtual void | CollectRevisions (ostream &) |
|
virtual void | ReportReferences (vtkGarbageCollector *) |
|
| vtkObjectBase (const vtkObjectBase &) |
|
void | operator= (const vtkObjectBase &) |
|
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.
- Vertex pedigree IDs:
- The vertices in a vtkGraph can be associated with pedigree IDs through GetVertexData()->SetPedigreeIds. In this case, there is a 1-1 mapping between pedigree Ids and vertices. One can query the vertex ID based on the pedigree ID using FindVertex, add new vertices by pedigree ID with AddVertex, and add edges based on the pedigree IDs of the source and target vertices. For example, AddEdge("Here", "There") will find (or add) vertices with pedigree ID "Here" and "There" and then introduce an edge from "Here" to "There".
- Vertex pedigree IDs:
- To configure the vtkGraph with a pedigree ID mapping, create a vtkDataArray that will store the pedigree IDs and set that array as the pedigree ID array for the vertices via GetVertexData()->SetPedigreeIds().
- Distributed graphs:
- vtkGraph instances can be distributed across multiple machines, to allow the construction and manipulation of graphs larger than a single machine could handle. A distributed graph will typically be distributed across many different nodes within a cluster, using the Message Passing Interface (MPI) to allow those cluster nodes to communicate.
- Distributed graphs:
- An empty vtkGraph can be made into a distributed graph by attaching an instance of a vtkDistributedGraphHelper via the SetDistributedGraphHelper() method. To determine whether a graph is distributed or not, call GetDistributedGraphHelper() and check whether the result is non-NULL. For a distributed graph, the number of processors across which the graph is distributed can be retrieved by extracting the value for the DATA_NUMBER_OF_PIECES key in the vtkInformation object (retrieved by GetInformation()) associated with the graph. Similarly, the value corresponding to the DATA_PIECE_NUMBER key of the vtkInformation object describes which piece of the data this graph instance provides.
- Distributed graphs:
- Distributed graphs behave somewhat differently from non-distributed graphs, and will require special care. In a distributed graph, each of the processors will contain a subset of the vertices in the graph. That subset of vertices can be accessed via the vtkVertexListIterator produced by GetVertices(). GetNumberOfVertices(), therefore, returns the number of vertices stored locally: it does not account for vertices stored on other processors. A vertex (or edge) is identified by both the rank of its owning processor and by its index within that processor, both of which are encoded within the vtkIdType value that describes that vertex (or edge). The owning processor is a value between 0 and P-1, where P is the number of processors across which the vtkGraph has been distributed. The local index will be a value between 0 and GetNumberOfVertices(), for vertices, or GetNumberOfEdges(), for edges, and can be used to access the local parts of distributed data arrays. When given a vtkIdType identifying a vertex, one can determine the owner of the vertex with vtkDistributedGraphHelper::GetVertexOwner() and the local index with vtkDistributedGraphHelper::GetVertexIndex(). With edges, the appropriate methods are vtkDistributedGraphHelper::GetEdgeOwner() and vtkDistributedGraphHelper::GetEdgeIndex(), respectively. To construct a vtkIdType representing either a vertex or edge given only its owner and local index, use vtkDistributedGraphHelper::MakeDistributedId().
- Distributed graphs:
- The edges in a distributed graph are always stored on the processors that own the vertices named by the edge. For example, given a directed edge (u, v), the edge will be stored in the out-edges list for vertex u on the processor that owns u, and in the in-edges list for vertex v on the processor that owns v. This "row-wise" decomposition of the graph means that, for any vertex that is local to a processor, that processor can look at all of the incoming and outgoing edges of the graph. Processors cannot, however, access the incoming or outgoing edge lists of vertex owned by other processors. Vertices owned by other processors will not be encountered when traversing the vertex list via GetVertices(), but may be encountered by traversing the in- and out-edge lists of local vertices or the edge list.
- Distributed graphs:
- Distributed graphs can have pedigree IDs for the vertices in the same way that non-distributed graphs can. In this case, the distribution of the vertices in the graph is based on pedigree ID. For example, a vertex with the pedigree ID "Here" might land on processor 0 while a vertex pedigree ID "There" would end up on processor 3. By default, the pedigree IDs themselves are hashed to give a random (and, hopefully, even) distribution of the vertices. However, one can provide a different vertex distribution function by calling vtkDistributedGraphHelper::SetVertexPedigreeIdDistribution. Once a distributed graph has pedigree IDs, the no-argument AddVertex() method can no longer be used. Additionally, once a vertex has a pedigree ID, that pedigree ID should not be changed unless the user can guarantee that the vertex distribution will still map that vertex to the same processor where it already resides.
- See also
- vtkDirectedGraph vtkUndirectedGraph vtkMutableDirectedGraph vtkMutableUndirectedGraph vtkTree vtkDistributedGraphHelper
- Thanks:
- Thanks to Brian Wylie, Timothy Shead, Ken Moreland of Sandia National Laboratories and Douglas Gregor of Indiana University for designing these classes.
- Examples:
- vtkGraph (Examples)
- Tests:
- vtkGraph (Tests)
Definition at line 288 of file vtkGraph.h.