VTK  9.2.6
vtkGraph.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkGraph.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15/*-------------------------------------------------------------------------
16 Copyright 2008 Sandia Corporation.
17 Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
18 the U.S. Government retains certain rights in this software.
19-------------------------------------------------------------------------*/
209
210#ifndef vtkGraph_h
211#define vtkGraph_h
212
213#include "vtkCommonDataModelModule.h" // For export macro
214#include "vtkDataObject.h"
215
217class vtkCellArray;
220class vtkDirectedGraph;
221class vtkGraphEdge;
222class vtkGraphEdgePoints;
225class vtkIdTypeArray;
228class vtkPoints;
231class vtkVariant;
232class vtkVariantArray;
233
234// Forward declare some boost stuff even if boost wrappers
235// are turned off.
236namespace boost
237{
241}
242
243// Edge structures.
245{
246 vtkEdgeBase() = default;
248 : Id(id)
249 {
250 }
252};
253
255{
256 vtkOutEdgeType() = default;
258 : vtkEdgeBase(id)
259 , Target(t)
260 {
261 }
263};
264
266{
267 vtkInEdgeType() = default;
269 : vtkEdgeBase(id)
270 , Source(s)
271 {
272 }
274};
275
277{
278 vtkEdgeType() = default;
280 : vtkEdgeBase(id)
281 , Source(s)
282 , Target(t)
283 {
284 }
287};
288
289class VTKCOMMONDATAMODEL_EXPORT vtkGraph : public vtkDataObject
290{
291public:
292 vtkTypeMacro(vtkGraph, vtkDataObject);
293 void PrintSelf(ostream& os, vtkIndent indent) override;
294
296
299 vtkGetObjectMacro(VertexData, vtkDataSetAttributes);
300 vtkGetObjectMacro(EdgeData, vtkDataSetAttributes);
302
306 int GetDataObjectType() override { return VTK_GRAPH; }
307
311 void Initialize() override;
312
314
320 double* GetPoint(vtkIdType ptId);
321 void GetPoint(vtkIdType ptId, double x[3]);
323
325
333 virtual void SetPoints(vtkPoints* points);
335
341
343
348 double* GetBounds();
349 void GetBounds(double bounds[6]);
351
356
364
372
379
384
391 virtual void GetOutEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
392
400
407
412
419 virtual void GetInEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
420
428
435 virtual void GetEdges(vtkEdgeListIterator* it);
436
442
449
455
462
467
476 vtkIdType FindVertex(const vtkVariant& pedigreeID);
477
482 void ShallowCopy(vtkDataObject* obj) override;
483
488 void DeepCopy(vtkDataObject* obj) override;
489
494 virtual void CopyStructure(vtkGraph* g);
495
501 virtual bool CheckedShallowCopy(vtkGraph* g);
502
508 virtual bool CheckedDeepCopy(vtkGraph* g);
509
513 virtual void Squeeze();
514
522 unsigned long GetActualMemorySize() override;
523
525
529 static vtkGraph* GetData(vtkInformationVector* v, int i = 0);
531
540
546
548
560
562
567 void SetEdgePoints(vtkIdType e, vtkIdType npts, const double pts[]) VTK_SIZEHINT(pts, 3 * npts);
568 void GetEdgePoints(vtkIdType e, vtkIdType& npts, double*& pts) VTK_SIZEHINT(pts, 3 * npts);
570
575
580
585
591 void SetEdgePoint(vtkIdType e, vtkIdType i, const double x[3]);
592 void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
593 {
594 double p[3] = { x, y, z };
595 this->SetEdgePoint(e, i, p);
596 }
597
601 void AddEdgePoint(vtkIdType e, const double x[3]);
602 void AddEdgePoint(vtkIdType e, double x, double y, double z)
603 {
604 double p[3] = { x, y, z };
605 this->AddEdgePoint(e, p);
606 }
607
609
616
623
629
637
641 vtkIdType GetNumberOfElements(int type) override;
642
646 void Dump();
647
657
662
667
668protected:
670 ~vtkGraph() override;
671
679 void AddVertexInternal(vtkVariantArray* propertyArr = nullptr, vtkIdType* vertex = nullptr);
680
687 void AddVertexInternal(const vtkVariant& pedigree, vtkIdType* vertex);
688
690
697 vtkIdType u, vtkIdType v, bool directed, vtkVariantArray* propertyArr, vtkEdgeType* edge);
698 void AddEdgeInternal(const vtkVariant& uPedigree, vtkIdType v, bool directed,
699 vtkVariantArray* propertyArr, vtkEdgeType* edge);
700 void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigree, bool directed,
701 vtkVariantArray* propertyArr, vtkEdgeType* edge);
702 void AddEdgeInternal(const vtkVariant& uPedigree, const vtkVariant& vPedigree, bool directed,
703 vtkVariantArray* propertyArr, vtkEdgeType* edge);
705
710 void RemoveVertexInternal(vtkIdType v, bool directed);
711
716 void RemoveEdgeInternal(vtkIdType e, bool directed);
717
721 void RemoveVerticesInternal(vtkIdTypeArray* arr, bool directed);
722
726 void RemoveEdgesInternal(vtkIdTypeArray* arr, bool directed);
727
732 virtual bool IsStructureValid(vtkGraph* g) = 0;
733
737 virtual void CopyInternal(vtkGraph* g, bool deep);
738
743
748
753
757 vtkGraphEdgePoints* EdgePoints;
758
762 void SetEdgePoints(vtkGraphEdgePoints* edgePoints);
763
769
771
774 virtual void GetOutEdges(vtkIdType v, const vtkOutEdgeType*& edges, vtkIdType& nedges);
775 virtual void GetInEdges(vtkIdType v, const vtkInEdgeType*& edges, vtkIdType& nedges);
777
782
784
789 friend class vtkInEdgeIterator;
790 friend class vtkOutEdgeIterator;
795
797
803
807 double Bounds[6];
808
813
815
819 static double DefaultPoint[3];
821
823
826 vtkGetObjectMacro(EdgeList, vtkIdTypeArray);
827 virtual void SetEdgeList(vtkIdTypeArray* list);
830
831private:
832 vtkGraph(const vtkGraph&) = delete;
833 void operator=(const vtkGraph&) = delete;
834};
835
836bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
837bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
838VTKCOMMONDATAMODEL_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
839
840#endif
Iterates through adjacent vertices in a graph.
object to represent cell connectivity
represent and manipulate attribute data in a dataset
A directed graph.
helper for the vtkGraph class that allows the graph to be distributed across multiple memory spaces.
Iterates through all edges in a graph.
represent and manipulate fields of data
Representation of a single graph edge.
Internal representation of vtkGraph.
static vtkGraph * GetData(vtkInformationVector *v, int i=0)
Retrieve a graph from an information vector.
double * GetBounds()
Return a pointer to the geometry bounding box in the form (xmin,xmax, ymin,ymax, zmin,...
virtual vtkIdType GetOutDegree(vtkIdType v)
The number of outgoing edges from vertex v.
void SetEdgePoint(vtkIdType e, vtkIdType i, const double x[3])
Set an x,y,z location of a point along an edge.
void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
Definition vtkGraph.h:592
void AddEdgePoint(vtkIdType e, double x, double y, double z)
Definition vtkGraph.h:602
vtkPoints * GetPoints()
Returns the points array for this graph.
void ComputeBounds()
Compute the bounds of the graph.
void AddEdgePoint(vtkIdType e, const double x[3])
Adds a point to the end of the list of edge points for a certain edge.
static vtkGraph * GetData(vtkInformation *info)
Retrieve a graph from an information vector.
virtual vtkIdType GetNumberOfVertices()
The number of vertices in the graph.
void BuildEdgeList()
Builds a mapping from edge id to source/target vertex id.
vtkTimeStamp ComputeTime
Time at which bounds were computed.
Definition vtkGraph.h:812
virtual void GetInEdge(vtkIdType v, vtkIdType index, vtkGraphEdge *e)
Random-access method for retrieving incoming edges to vertex v.
void AddVertexInternal(vtkVariantArray *propertyArr=nullptr, vtkIdType *vertex=nullptr)
Protected method for adding vertices, optionally with properties, used by mutable subclasses.
friend class vtkInEdgeIterator
Friend iterator classes.
Definition vtkGraph.h:789
void AddEdgeInternal(vtkIdType u, const vtkVariant &vPedigree, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)
Protected method for adding edges of a certain directedness used by mutable subclasses.
void AddVertexInternal(const vtkVariant &pedigree, vtkIdType *vertex)
Adds a vertex with the given pedigree ID to the graph.
void ForceOwnership()
If this instance does not own its internals, it makes a copy of the internals.
void SetDistributedGraphHelper(vtkDistributedGraphHelper *helper)
Sets the distributed graph helper of this graph, turning it into a distributed graph.
double * GetPoint(vtkIdType ptId)
These methods return the point (0,0,0) until the points structure is created, when it returns the act...
vtkIdType GetNumberOfEdgePoints(vtkIdType e)
Get the number of edge points associated with an edge.
~vtkGraph() override
virtual bool CheckedDeepCopy(vtkGraph *g)
Performs the same operation as DeepCopy(), but instead of reporting an error for an incompatible grap...
void RemoveVertexInternal(vtkIdType v, bool directed)
Removes a vertex from the graph, along with any adjacent edges.
void Initialize() override
Initialize to an empty graph.
vtkDataSetAttributes * VertexData
The vertex and edge data.
Definition vtkGraph.h:800
virtual void GetAdjacentVertices(vtkIdType v, vtkAdjacentVertexIterator *it)
Initializes the adjacent vertex iterator to iterate over all outgoing vertices from vertex v.
void RemoveEdgesInternal(vtkIdTypeArray *arr, bool directed)
Removes a collection of edges from the graph.
virtual vtkInEdgeType GetInEdge(vtkIdType v, vtkIdType index)
Random-access method for retrieving incoming edges to vertex v.
double * GetEdgePoint(vtkIdType e, vtkIdType i)
Get the x,y,z location of a point along edge e.
vtkIdType FindVertex(const vtkVariant &pedigreeID)
Retrieve the vertex with the given pedigree ID.
void GetInducedEdges(vtkIdTypeArray *verts, vtkIdTypeArray *edges)
Fills a list of edge indices with the edges contained in the induced subgraph formed by the vertices ...
virtual void SetEdgeList(vtkIdTypeArray *list)
The optional mapping from edge id to source/target ids.
void SetEdgePoints(vtkIdType e, vtkIdType npts, const double pts[])
Get/Set the internal edge control points associated with each edge.
vtkIdTypeArray * EdgeList
The optional mapping from edge id to source/target ids.
Definition vtkGraph.h:828
vtkGraphEdgePoints * EdgePoints
The structure for holding the edge points.
Definition vtkGraph.h:757
vtkIdType GetTargetVertex(vtkIdType e)
Retrieve the source and target vertices for an edge id.
void RemoveEdgeInternal(vtkIdType e, bool directed)
Removes an edge from the graph.
bool IsSameStructure(vtkGraph *other)
Returns true if both graphs point to the same adjacency structure.
vtkMTimeType GetMTime() override
The modified time of the graph.
void RemoveVerticesInternal(vtkIdTypeArray *arr, bool directed)
Removes a collection of vertices from the graph, along with any adjacent edges.
bool ToUndirectedGraph(vtkUndirectedGraph *g)
Convert the graph to an undirected graph.
void AddEdgeInternal(const vtkVariant &uPedigree, const vtkVariant &vPedigree, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)
Protected method for adding edges of a certain directedness used by mutable subclasses.
void AddEdgeInternal(const vtkVariant &uPedigree, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)
Protected method for adding edges of a certain directedness used by mutable subclasses.
virtual void CopyStructure(vtkGraph *g)
Does a shallow copy of the topological information, but not the associated attributes.
virtual void CopyInternal(vtkGraph *g, bool deep)
Copy internal data structure.
void GetBounds(double bounds[6])
Return a pointer to the geometry bounding box in the form (xmin,xmax, ymin,ymax, zmin,...
vtkIdType GetEdgeId(vtkIdType a, vtkIdType b)
Returns the Id of the edge between vertex a and vertex b.
vtkPoints * Points
The vertex locations.
Definition vtkGraph.h:818
virtual bool CheckedShallowCopy(vtkGraph *g)
Performs the same operation as ShallowCopy(), but instead of reporting an error for an incompatible g...
void ShallowCopy(vtkDataObject *obj) override
Shallow copies the data object into this graph.
virtual void SetPoints(vtkPoints *points)
Returns the points array for this graph.
bool ToDirectedGraph(vtkDirectedGraph *g)
Convert the graph to a directed graph.
virtual void Squeeze()
Reclaim unused memory.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void GetInEdges(vtkIdType v, vtkInEdgeIterator *it)
Initializes the in edge iterator to iterate over all incoming edges to vertex v.
vtkIdType GetSourceVertex(vtkIdType e)
Retrieve the source and target vertices for an edge id.
void DeepCopyEdgePoints(vtkGraph *g)
Copy the internal edge point data from another graph into this graph.
vtkDistributedGraphHelper * DistributedHelper
The distributed graph helper.
Definition vtkGraph.h:747
virtual void GetOutEdges(vtkIdType v, vtkOutEdgeIterator *it)
Initializes the out edge iterator to iterate over all outgoing edges of vertex v.
virtual void GetInEdges(vtkIdType v, const vtkInEdgeType *&edges, vtkIdType &nedges)
Fast access functions for iterators.
void DeepCopy(vtkDataObject *obj) override
Deep copies the data object into this graph.
vtkFieldData * GetAttributesAsFieldData(int type) override
Returns the attributes of the data object as a vtkFieldData.
virtual void GetOutEdge(vtkIdType v, vtkIdType index, vtkGraphEdge *e)
Random-access method for retrieving outgoing edges from vertex v.
vtkDistributedGraphHelper * GetDistributedGraphHelper()
Retrieves the distributed graph helper for this graph.
void ClearEdgePoints(vtkIdType e)
Clear all points associated with an edge.
int GetDataObjectType() override
Return what type of dataset this is.
Definition vtkGraph.h:306
void AddEdgeInternal(vtkIdType u, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge)
Protected method for adding edges of a certain directedness used by mutable subclasses.
void SetInternals(vtkGraphInternals *internals)
Private method for setting internals.
virtual void GetOutEdges(vtkIdType v, const vtkOutEdgeType *&edges, vtkIdType &nedges)
Fast access functions for iterators.
vtkGraphInternals * Internals
The adjacency list internals of this graph.
Definition vtkGraph.h:742
friend class vtkEdgeListIterator
Friend iterator classes.
Definition vtkGraph.h:788
virtual void GetEdges(vtkEdgeListIterator *it)
Initializes the edge list iterator to iterate over all edges in the graph.
unsigned long GetActualMemorySize() override
Return the actual size of the data in kibibytes (1024 bytes).
virtual vtkIdType GetNumberOfEdges()
The number of edges in the graph.
vtkGraphInternals * GetGraphInternals(bool modifying)
Returns the internal representation of the graph.
friend class vtkAdjacentVertexIterator
Friend iterator classes.
Definition vtkGraph.h:787
void ShallowCopyEdgePoints(vtkGraph *g)
Copy the internal edge point data from another graph into this graph.
friend class vtkOutEdgeIterator
Friend iterator classes.
Definition vtkGraph.h:790
void SetEdgePoints(vtkGraphEdgePoints *edgePoints)
Private method for setting edge points.
void Dump()
Dump the contents of the graph to standard output.
virtual vtkIdType GetInDegree(vtkIdType v)
The number of incoming edges to vertex v.
void GetEdgePoints(vtkIdType e, vtkIdType &npts, double *&pts)
Get/Set the internal edge control points associated with each edge.
vtkDataSetAttributes * EdgeData
The vertex and edge data.
Definition vtkGraph.h:801
virtual vtkOutEdgeType GetOutEdge(vtkIdType v, vtkIdType index)
Random-access method for retrieving outgoing edges from vertex v.
void GetPoint(vtkIdType ptId, double x[3])
These methods return the point (0,0,0) until the points structure is created, when it returns the act...
void ReorderOutVertices(vtkIdType v, vtkIdTypeArray *vertices)
Reorder the outgoing vertices of a vertex.
vtkIdType GetNumberOfElements(int type) override
Get the number of elements for a specific attribute type (VERTEX, EDGE, etc.).
virtual void GetVertices(vtkVertexListIterator *it)
Initializes the vertex list iterator to iterate over all vertices in the graph.
virtual vtkIdType GetDegree(vtkIdType v)
The total of all incoming and outgoing vertices for vertex v.
static double DefaultPoint[3]
The vertex locations.
Definition vtkGraph.h:819
virtual bool IsStructureValid(vtkGraph *g)=0
Subclasses override this method to accept the structure based on their requirements.
double Bounds[6]
(xmin,xmax, ymin,ymax, zmin,zmax) geometric bounds.
Definition vtkGraph.h:807
dynamic, self-adjusting array of vtkIdType
Iterates through all incoming edges to a vertex.
a simple class to control print indentation
Definition vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Iterates through all outgoing edges from a vertex.
represent and manipulate 3D points
Definition vtkPoints.h:34
record modification and/or execution time
An undirected graph.
An array holding vtkVariants.
A atomic type representing the union of many types.
Definition vtkVariant.h:64
Iterates all vertices in a graph.
Forward declaration required for Boost serialization.
vtkEdgeBase()=default
vtkIdType Id
Definition vtkGraph.h:251
vtkEdgeBase(vtkIdType id)
Definition vtkGraph.h:247
vtkEdgeType(vtkIdType s, vtkIdType t, vtkIdType id)
Definition vtkGraph.h:279
vtkIdType Target
Definition vtkGraph.h:286
vtkEdgeType()=default
vtkIdType Source
Definition vtkGraph.h:285
vtkIdType Source
Definition vtkGraph.h:273
vtkInEdgeType(vtkIdType s, vtkIdType id)
Definition vtkGraph.h:268
vtkInEdgeType()=default
vtkIdType Target
Definition vtkGraph.h:262
vtkOutEdgeType(vtkIdType t, vtkIdType id)
Definition vtkGraph.h:257
vtkOutEdgeType()=default
std::pair< boost::graph_traits< vtkGraph * >::edge_iterator, boost::graph_traits< vtkGraph * >::edge_iterator > edges(vtkGraph *g)
std::pair< boost::graph_traits< vtkGraph * >::vertex_iterator, boost::graph_traits< vtkGraph * >::vertex_iterator > vertices(vtkGraph *g)
bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2)
VTKCOMMONDATAMODEL_EXPORT ostream & operator<<(ostream &out, vtkEdgeBase e)
bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2)
int vtkIdType
Definition vtkType.h:332
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:287
#define VTK_GRAPH
Definition vtkType.h:97
#define VTK_SIZEHINT(...)