VTK  9.3.20240304
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
259 #ifndef vtkGraph_h
260 #define vtkGraph_h
261 
262 #include "vtkCommonDataModelModule.h" // For export macro
263 #include "vtkDataObject.h"
264 
265 // Forward declare some boost stuff even if boost wrappers
266 // are turned off.
267 namespace boost
268 {
269 class vtk_edge_iterator;
270 class vtk_out_edge_pointer_iterator;
271 class vtk_in_edge_pointer_iterator;
272 }
273 
274 VTK_ABI_NAMESPACE_BEGIN
276 class vtkCellArray;
277 class vtkEdgeListIterator;
279 class vtkDirectedGraph;
280 class vtkGraphEdge;
281 class vtkGraphEdgePoints;
283 class vtkGraphInternals;
284 class vtkIdTypeArray;
285 class vtkInEdgeIterator;
286 class vtkOutEdgeIterator;
287 class vtkPoints;
288 class vtkUndirectedGraph;
290 class vtkVariant;
291 class vtkVariantArray;
292 
293 // Edge structures.
295 {
296  vtkEdgeBase() = default;
298  : Id(id)
299  {
300  }
302 };
303 
305 {
306  vtkOutEdgeType() = default;
308  : vtkEdgeBase(id)
309  , Target(t)
310  {
311  }
313 };
314 
316 {
317  vtkInEdgeType() = default;
319  : vtkEdgeBase(id)
320  , Source(s)
321  {
322  }
324 };
325 
327 {
328  vtkEdgeType() = default;
330  : vtkEdgeBase(id)
331  , Source(s)
332  , Target(t)
333  {
334  }
337 };
338 
339 class VTKCOMMONDATAMODEL_EXPORT vtkGraph : public vtkDataObject
340 {
341 public:
342  vtkTypeMacro(vtkGraph, vtkDataObject);
343  void PrintSelf(ostream& os, vtkIndent indent) override;
344 
346 
349  vtkGetObjectMacro(VertexData, vtkDataSetAttributes);
350  vtkGetObjectMacro(EdgeData, vtkDataSetAttributes);
352 
356  int GetDataObjectType() override { return VTK_GRAPH; }
357 
361  void Initialize() override;
362 
364 
370  double* GetPoint(vtkIdType ptId);
371  void GetPoint(vtkIdType ptId, double x[3]);
373 
375 
383  virtual void SetPoints(vtkPoints* points);
385 
391 
393 
398  double* GetBounds();
399  void GetBounds(double bounds[6]);
401 
405  vtkMTimeType GetMTime() override;
406 
414 
422 
429 
434 
442 
449  virtual void GetInEdges(vtkIdType v, vtkInEdgeIterator* it);
450 
457 
462 
470 
478 
485  virtual void GetEdges(vtkEdgeListIterator* it);
486 
492 
499 
505 
512 
517 
526  vtkIdType FindVertex(const vtkVariant& pedigreeID);
527 
532  void ShallowCopy(vtkDataObject* obj) override;
533 
538  void DeepCopy(vtkDataObject* obj) override;
539 
544  virtual void CopyStructure(vtkGraph* g);
545 
551  virtual bool CheckedShallowCopy(vtkGraph* g);
552 
558  virtual bool CheckedDeepCopy(vtkGraph* g);
559 
563  virtual void Squeeze();
564 
572  unsigned long GetActualMemorySize() override;
573 
575 
579  static vtkGraph* GetData(vtkInformationVector* v, int i = 0);
581 
590 
595  bool IsSameStructure(vtkGraph* other);
596 
598 
610 
612 
617  void SetEdgePoints(vtkIdType e, vtkIdType npts, const double pts[]) VTK_SIZEHINT(pts, 3 * npts);
618  void GetEdgePoints(vtkIdType e, vtkIdType& npts, double*& pts) VTK_SIZEHINT(pts, 3 * npts);
620 
625 
630 
635 
641  void SetEdgePoint(vtkIdType e, vtkIdType i, const double x[3]);
642  void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
643  {
644  double p[3] = { x, y, z };
645  this->SetEdgePoint(e, i, p);
646  }
647 
651  void AddEdgePoint(vtkIdType e, const double x[3]);
652  void AddEdgePoint(vtkIdType e, double x, double y, double z)
653  {
654  double p[3] = { x, y, z };
655  this->AddEdgePoint(e, p);
656  }
657 
659 
666 
673 
679 
687 
692 
696  void Dump();
697 
707 
712 
717 
718 protected:
720  ~vtkGraph() override;
721 
729  void AddVertexInternal(vtkVariantArray* propertyArr = nullptr, vtkIdType* vertex = nullptr);
730 
737  void AddVertexInternal(const vtkVariant& pedigree, vtkIdType* vertex);
738 
740 
747  vtkIdType u, vtkIdType v, bool directed, vtkVariantArray* propertyArr, vtkEdgeType* edge);
748  void AddEdgeInternal(const vtkVariant& uPedigree, vtkIdType v, bool directed,
749  vtkVariantArray* propertyArr, vtkEdgeType* edge);
750  void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigree, bool directed,
751  vtkVariantArray* propertyArr, vtkEdgeType* edge);
752  void AddEdgeInternal(const vtkVariant& uPedigree, const vtkVariant& vPedigree, bool directed,
753  vtkVariantArray* propertyArr, vtkEdgeType* edge);
755 
760  void RemoveVertexInternal(vtkIdType v, bool directed);
761 
766  void RemoveEdgeInternal(vtkIdType e, bool directed);
767 
771  void RemoveVerticesInternal(vtkIdTypeArray* arr, bool directed);
772 
776  void RemoveEdgesInternal(vtkIdTypeArray* arr, bool directed);
777 
782  virtual bool IsStructureValid(vtkGraph* g) = 0;
783 
787  virtual void CopyInternal(vtkGraph* g, bool deep);
788 
793 
798 
802  void SetInternals(vtkGraphInternals* internals);
803 
807  vtkGraphEdgePoints* EdgePoints;
808 
812  void SetEdgePoints(vtkGraphEdgePoints* edgePoints);
813 
819 
821 
824  virtual void GetOutEdges(vtkIdType v, const vtkOutEdgeType*& edges, vtkIdType& nedges);
825  virtual void GetInEdges(vtkIdType v, const vtkInEdgeType*& edges, vtkIdType& nedges);
827 
832 
834 
838  friend class vtkEdgeListIterator;
839  friend class vtkInEdgeIterator;
840  friend class vtkOutEdgeIterator;
845 
847 
853 
857  double Bounds[6];
858 
863 
865 
869  static double DefaultPoint[3];
871 
873 
876  vtkGetObjectMacro(EdgeList, vtkIdTypeArray);
877  virtual void SetEdgeList(vtkIdTypeArray* list);
880 
881 private:
882  vtkGraph(const vtkGraph&) = delete;
883  void operator=(const vtkGraph&) = delete;
884 };
885 
886 bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
887 bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
888 VTKCOMMONDATAMODEL_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
889 
890 VTK_ABI_NAMESPACE_END
891 #endif
Iterates through adjacent vertices in a graph.
object to represent cell connectivity
Definition: vtkCellArray.h:285
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:161
Representation of a single graph edge.
Definition: vtkGraphEdge.h:25
Internal representation of vtkGraph.
Base class for graph data types.
Definition: vtkGraph.h:340
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:642
void AddEdgePoint(vtkIdType e, double x, double y, double z)
Definition: vtkGraph.h:652
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:862
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:850
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:878
vtkGraphEdgePoints * EdgePoints
The structure for holding the edge points.
Definition: vtkGraph.h:807
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:868
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:797
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:356
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:792
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:851
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:108
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:138
record modification and/or execution time
Definition: vtkTimeStamp.h:44
An undirected graph.
An array holding vtkVariants.
A type representing the union of many types.
Definition: vtkVariant.h:162
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:301
vtkEdgeBase(vtkIdType id)
Definition: vtkGraph.h:297
vtkEdgeType(vtkIdType s, vtkIdType t, vtkIdType id)
Definition: vtkGraph.h:329
vtkIdType Target
Definition: vtkGraph.h:336
vtkEdgeType()=default
vtkIdType Source
Definition: vtkGraph.h:335
vtkIdType Source
Definition: vtkGraph.h:323
vtkInEdgeType(vtkIdType s, vtkIdType id)
Definition: vtkGraph.h:318
vtkInEdgeType()=default
vtkIdType Target
Definition: vtkGraph.h:312
vtkOutEdgeType(vtkIdType t, vtkIdType id)
Definition: vtkGraph.h:307
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(...)