VTK  9.3.0
vtkGraph.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-FileCopyrightText: Copyright 2008 Sandia Corporation
3 // SPDX-License-Identifier: LicenseRef-BSD-3-Clause-Sandia-USGov
209 #ifndef vtkGraph_h
210 #define vtkGraph_h
211 
212 #include "vtkCommonDataModelModule.h" // For export macro
213 #include "vtkDataObject.h"
214 
215 // Forward declare some boost stuff even if boost wrappers
216 // are turned off.
217 namespace boost
218 {
219 class vtk_edge_iterator;
220 class vtk_out_edge_pointer_iterator;
221 class vtk_in_edge_pointer_iterator;
222 }
223 
224 VTK_ABI_NAMESPACE_BEGIN
226 class vtkCellArray;
227 class vtkEdgeListIterator;
229 class vtkDirectedGraph;
230 class vtkGraphEdge;
231 class vtkGraphEdgePoints;
233 class vtkGraphInternals;
234 class vtkIdTypeArray;
235 class vtkInEdgeIterator;
236 class vtkOutEdgeIterator;
237 class vtkPoints;
238 class vtkUndirectedGraph;
240 class vtkVariant;
241 class vtkVariantArray;
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 
289 class VTKCOMMONDATAMODEL_EXPORT vtkGraph : public vtkDataObject
290 {
291 public:
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 
355  vtkMTimeType GetMTime() override;
356 
364 
372 
379 
384 
392 
399  virtual void GetInEdges(vtkIdType v, vtkInEdgeIterator* it);
400 
407 
412 
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 
545  bool IsSameStructure(vtkGraph* other);
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 
642 
646  void Dump();
647 
657 
662 
667 
668 protected:
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 
752  void SetInternals(vtkGraphInternals* internals);
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 
788  friend class vtkEdgeListIterator;
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 
831 private:
832  vtkGraph(const vtkGraph&) = delete;
833  void operator=(const vtkGraph&) = delete;
834 };
835 
836 bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
837 bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
838 VTKCOMMONDATAMODEL_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
839 
840 VTK_ABI_NAMESPACE_END
841 #endif
Iterates through adjacent vertices in a graph.
object to represent cell connectivity
Definition: vtkCellArray.h:185
general representation of visualization data
Definition: vtkDataObject.h:64
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:61
Representation of a single graph edge.
Definition: vtkGraphEdge.h:25
Internal representation of vtkGraph.
Base class for graph data types.
Definition: vtkGraph.h:290
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:592
void AddEdgePoint(vtkIdType e, double x, double y, double z)
Definition: vtkGraph.h:602
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: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.
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: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.
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.
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:818
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: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.
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: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
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:801
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:38
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:38
record modification and/or execution time
Definition: vtkTimeStamp.h:34
An undirected graph.
An array holding vtkVariants.
A type representing the union of many types.
Definition: vtkVariant.h:62
Iterates all vertices in a graph.
Forward declaration required for Boost serialization.
@ points
Definition: vtkX3D.h:446
@ info
Definition: vtkX3D.h:376
@ type
Definition: vtkX3D.h:516
@ index
Definition: vtkX3D.h:246
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)
bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2)
VTKCOMMONDATAMODEL_EXPORT ostream & operator<<(ostream &out, vtkEdgeBase e)
int vtkIdType
Definition: vtkType.h:315
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:270
#define VTK_GRAPH
Definition: vtkType.h:85
#define VTK_SIZEHINT(...)