VTK  9.2.20230606
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 -------------------------------------------------------------------------*/
265 #ifndef vtkGraph_h
266 #define vtkGraph_h
267 
268 #include "vtkCommonDataModelModule.h" // For export macro
269 #include "vtkDataObject.h"
270 
271 // Forward declare some boost stuff even if boost wrappers
272 // are turned off.
273 namespace boost
274 {
275 class vtk_edge_iterator;
276 class vtk_out_edge_pointer_iterator;
277 class vtk_in_edge_pointer_iterator;
278 }
279 
280 VTK_ABI_NAMESPACE_BEGIN
282 class vtkCellArray;
283 class vtkEdgeListIterator;
285 class vtkDirectedGraph;
286 class vtkGraphEdge;
287 class vtkGraphEdgePoints;
289 class vtkGraphInternals;
290 class vtkIdTypeArray;
291 class vtkInEdgeIterator;
292 class vtkOutEdgeIterator;
293 class vtkPoints;
294 class vtkUndirectedGraph;
296 class vtkVariant;
297 class vtkVariantArray;
298 
299 // Edge structures.
301 {
302  vtkEdgeBase() = default;
304  : Id(id)
305  {
306  }
308 };
309 
311 {
312  vtkOutEdgeType() = default;
314  : vtkEdgeBase(id)
315  , Target(t)
316  {
317  }
319 };
320 
322 {
323  vtkInEdgeType() = default;
325  : vtkEdgeBase(id)
326  , Source(s)
327  {
328  }
330 };
331 
333 {
334  vtkEdgeType() = default;
336  : vtkEdgeBase(id)
337  , Source(s)
338  , Target(t)
339  {
340  }
343 };
344 
345 class VTKCOMMONDATAMODEL_EXPORT vtkGraph : public vtkDataObject
346 {
347 public:
348  vtkTypeMacro(vtkGraph, vtkDataObject);
349  void PrintSelf(ostream& os, vtkIndent indent) override;
350 
352 
355  vtkGetObjectMacro(VertexData, vtkDataSetAttributes);
356  vtkGetObjectMacro(EdgeData, vtkDataSetAttributes);
358 
362  int GetDataObjectType() override { return VTK_GRAPH; }
363 
367  void Initialize() override;
368 
370 
376  double* GetPoint(vtkIdType ptId);
377  void GetPoint(vtkIdType ptId, double x[3]);
379 
381 
389  virtual void SetPoints(vtkPoints* points);
391 
397 
399 
404  double* GetBounds();
405  void GetBounds(double bounds[6]);
407 
411  vtkMTimeType GetMTime() override;
412 
420 
428 
435 
440 
448 
455  virtual void GetInEdges(vtkIdType v, vtkInEdgeIterator* it);
456 
463 
468 
476 
484 
491  virtual void GetEdges(vtkEdgeListIterator* it);
492 
498 
505 
511 
518 
523 
532  vtkIdType FindVertex(const vtkVariant& pedigreeID);
533 
538  void ShallowCopy(vtkDataObject* obj) override;
539 
544  void DeepCopy(vtkDataObject* obj) override;
545 
550  virtual void CopyStructure(vtkGraph* g);
551 
557  virtual bool CheckedShallowCopy(vtkGraph* g);
558 
564  virtual bool CheckedDeepCopy(vtkGraph* g);
565 
569  virtual void Squeeze();
570 
578  unsigned long GetActualMemorySize() override;
579 
581 
585  static vtkGraph* GetData(vtkInformationVector* v, int i = 0);
587 
596 
601  bool IsSameStructure(vtkGraph* other);
602 
604 
616 
618 
623  void SetEdgePoints(vtkIdType e, vtkIdType npts, const double pts[]) VTK_SIZEHINT(pts, 3 * npts);
624  void GetEdgePoints(vtkIdType e, vtkIdType& npts, double*& pts) VTK_SIZEHINT(pts, 3 * npts);
626 
631 
636 
641 
647  void SetEdgePoint(vtkIdType e, vtkIdType i, const double x[3]);
648  void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
649  {
650  double p[3] = { x, y, z };
651  this->SetEdgePoint(e, i, p);
652  }
653 
657  void AddEdgePoint(vtkIdType e, const double x[3]);
658  void AddEdgePoint(vtkIdType e, double x, double y, double z)
659  {
660  double p[3] = { x, y, z };
661  this->AddEdgePoint(e, p);
662  }
663 
665 
672 
679 
685 
693 
698 
702  void Dump();
703 
713 
718 
723 
724 protected:
726  ~vtkGraph() override;
727 
735  void AddVertexInternal(vtkVariantArray* propertyArr = nullptr, vtkIdType* vertex = nullptr);
736 
743  void AddVertexInternal(const vtkVariant& pedigree, vtkIdType* vertex);
744 
746 
753  vtkIdType u, vtkIdType v, bool directed, vtkVariantArray* propertyArr, vtkEdgeType* edge);
754  void AddEdgeInternal(const vtkVariant& uPedigree, vtkIdType v, bool directed,
755  vtkVariantArray* propertyArr, vtkEdgeType* edge);
756  void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigree, bool directed,
757  vtkVariantArray* propertyArr, vtkEdgeType* edge);
758  void AddEdgeInternal(const vtkVariant& uPedigree, const vtkVariant& vPedigree, bool directed,
759  vtkVariantArray* propertyArr, vtkEdgeType* edge);
761 
766  void RemoveVertexInternal(vtkIdType v, bool directed);
767 
772  void RemoveEdgeInternal(vtkIdType e, bool directed);
773 
777  void RemoveVerticesInternal(vtkIdTypeArray* arr, bool directed);
778 
782  void RemoveEdgesInternal(vtkIdTypeArray* arr, bool directed);
783 
788  virtual bool IsStructureValid(vtkGraph* g) = 0;
789 
793  virtual void CopyInternal(vtkGraph* g, bool deep);
794 
799 
804 
808  void SetInternals(vtkGraphInternals* internals);
809 
813  vtkGraphEdgePoints* EdgePoints;
814 
818  void SetEdgePoints(vtkGraphEdgePoints* edgePoints);
819 
825 
827 
830  virtual void GetOutEdges(vtkIdType v, const vtkOutEdgeType*& edges, vtkIdType& nedges);
831  virtual void GetInEdges(vtkIdType v, const vtkInEdgeType*& edges, vtkIdType& nedges);
833 
838 
840 
844  friend class vtkEdgeListIterator;
845  friend class vtkInEdgeIterator;
846  friend class vtkOutEdgeIterator;
851 
853 
859 
863  double Bounds[6];
864 
869 
871 
875  static double DefaultPoint[3];
877 
879 
882  vtkGetObjectMacro(EdgeList, vtkIdTypeArray);
883  virtual void SetEdgeList(vtkIdTypeArray* list);
886 
887 private:
888  vtkGraph(const vtkGraph&) = delete;
889  void operator=(const vtkGraph&) = delete;
890 };
891 
892 bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
893 bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
894 VTKCOMMONDATAMODEL_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
895 
896 VTK_ABI_NAMESPACE_END
897 #endif
Iterates through adjacent vertices in a graph.
object to represent cell connectivity
Definition: vtkCellArray.h:297
general representation of visualization data
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
Definition: vtkFieldData.h:173
Representation of a single graph edge.
Definition: vtkGraphEdge.h:41
Internal representation of vtkGraph.
Base class for graph data types.
Definition: vtkGraph.h:346
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.
vtkDistributedGraphHelper * GetDistributedGraphHelper()
Retrieves the distributed graph helper for this graph.
void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
Definition: vtkGraph.h:648
void AddEdgePoint(vtkIdType e, double x, double y, double z)
Definition: vtkGraph.h:658
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.
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:868
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.
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.
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:856
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.
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:884
vtkGraphEdgePoints * EdgePoints
The structure for holding the edge points.
Definition: vtkGraph.h:813
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.
double * GetBounds()
Return a pointer to the geometry bounding box in the form (xmin,xmax, ymin,ymax, zmin,...
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.
static vtkGraph * GetData(vtkInformation *info)
Retrieve a graph from an information vector.
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.
vtkPoints * GetPoints()
Returns the points array for this graph.
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:874
virtual bool CheckedShallowCopy(vtkGraph *g)
Performs the same operation as ShallowCopy(), but instead of reporting an error for an incompatible g...
vtkGraphInternals * GetGraphInternals(bool modifying)
Returns the internal representation of the graph.
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.
double * GetEdgePoint(vtkIdType e, vtkIdType i)
Get the x,y,z location of a point along edge e.
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:803
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.
virtual void GetOutEdge(vtkIdType v, vtkIdType index, vtkGraphEdge *e)
Random-access method for retrieving outgoing edges from vertex v.
void ClearEdgePoints(vtkIdType e)
Clear all points associated with an edge.
double * GetPoint(vtkIdType ptId)
These methods return the point (0,0,0) until the points structure is created, when it returns the act...
int GetDataObjectType() override
Return what type of dataset this is.
Definition: vtkGraph.h:362
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:798
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.
void ShallowCopyEdgePoints(vtkGraph *g)
Copy the internal edge point data from another graph into this graph.
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.
static vtkGraph * GetData(vtkInformationVector *v, int i=0)
Retrieve a graph from an information vector.
vtkDataSetAttributes * EdgeData
The vertex and edge data.
Definition: vtkGraph.h:857
vtkFieldData * GetAttributesAsFieldData(int type) override
Returns the attributes of the data object as a vtkFieldData.
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.
virtual bool IsStructureValid(vtkGraph *g)=0
Subclasses override this method to accept the structure based on their requirements.
dynamic, self-adjusting array of vtkIdType
Iterates through all incoming edges to a vertex.
a simple class to control print indentation
Definition: vtkIndent.h:120
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:150
record modification and/or execution time
Definition: vtkTimeStamp.h:56
An undirected graph.
An array holding vtkVariants.
A atomic type representing the union of many types.
Definition: vtkVariant.h:150
Iterates all vertices in a graph.
Forward declaration required for Boost serialization.
@ points
Definition: vtkX3D.h:458
@ info
Definition: vtkX3D.h:388
@ type
Definition: vtkX3D.h:528
@ index
Definition: vtkX3D.h:258
vtkEdgeBase()=default
vtkIdType Id
Definition: vtkGraph.h:307
vtkEdgeBase(vtkIdType id)
Definition: vtkGraph.h:303
vtkEdgeType(vtkIdType s, vtkIdType t, vtkIdType id)
Definition: vtkGraph.h:335
vtkIdType Target
Definition: vtkGraph.h:342
vtkEdgeType()=default
vtkIdType Source
Definition: vtkGraph.h:341
vtkIdType Source
Definition: vtkGraph.h:329
vtkInEdgeType(vtkIdType s, vtkIdType id)
Definition: vtkGraph.h:324
vtkInEdgeType()=default
vtkIdType Target
Definition: vtkGraph.h:318
vtkOutEdgeType(vtkIdType t, vtkIdType id)
Definition: vtkGraph.h:313
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)
bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2)
VTKCOMMONDATAMODEL_EXPORT ostream & operator<<(ostream &out, vtkEdgeBase e)
int vtkIdType
Definition: vtkType.h:327
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:282
#define VTK_GRAPH
Definition: vtkType.h:97
#define VTK_SIZEHINT(...)