VTK  9.6.1
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
199
200#ifndef vtkGraph_h
201#define vtkGraph_h
202
203#include "vtkCommonDataModelModule.h" // For export macro
204#include "vtkDataObject.h"
205#include "vtkNew.h" // For vtkNew
206#include "vtkWrappingHints.h" // For VTK_MARSHALMANUAL
207
208// Forward declare some boost stuff even if boost wrappers
209// are turned off.
210namespace boost
211{
215}
216
217VTK_ABI_NAMESPACE_BEGIN
219class vtkCellArray;
222class vtkDirectedGraph;
223class vtkGraphEdge;
224class vtkGraphEdgePoints;
227class vtkIdTypeArray;
230class vtkPoints;
233class vtkVariant;
234class vtkVariantArray;
235
236// Edge structures.
238{
239 vtkEdgeBase() = default;
241 : Id(id)
242 {
243 }
245};
246
248{
249 vtkOutEdgeType() = default;
251 : vtkEdgeBase(id)
252 , Target(t)
253 {
254 }
256};
257
259{
260 vtkInEdgeType() = default;
262 : vtkEdgeBase(id)
263 , Source(s)
264 {
265 }
267};
268
270{
271 vtkEdgeType() = default;
273 : vtkEdgeBase(id)
274 , Source(s)
275 , Target(t)
276 {
277 }
280};
281
282class VTKCOMMONDATAMODEL_EXPORT VTK_MARSHALMANUAL vtkGraph : public vtkDataObject
283{
284public:
285 vtkTypeMacro(vtkGraph, vtkDataObject);
286 void PrintSelf(ostream& os, vtkIndent indent) override;
287
289
292 vtkGetObjectMacro(VertexData, vtkDataSetAttributes);
293 vtkGetObjectMacro(EdgeData, vtkDataSetAttributes);
295
299 int GetDataObjectType() VTK_FUTURE_CONST override { return VTK_GRAPH; }
300
304 void Initialize() override;
305
307
313 double* GetPoint(vtkIdType ptId);
314 void GetPoint(vtkIdType ptId, double x[3]);
316
318
326 virtual void SetPoints(vtkPoints* points);
328
334
336
341 double* GetBounds();
342 void GetBounds(double bounds[6]);
344
349
357
365
372
377
384 virtual void GetOutEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
385
393
400
405
412 virtual void GetInEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
413
421
428 virtual void GetEdges(vtkEdgeListIterator* it);
429
435
442
448
455
460
469 vtkIdType FindVertex(const vtkVariant& pedigreeID);
470
475 void ShallowCopy(vtkDataObject* obj) override;
476
481 void DeepCopy(vtkDataObject* obj) override;
482
487 virtual void CopyStructure(vtkGraph* g);
488
494 virtual bool CheckedShallowCopy(vtkGraph* g);
495
501 virtual bool CheckedDeepCopy(vtkGraph* g);
502
506 virtual void Squeeze();
507
515 unsigned long GetActualMemorySize() override;
516
518
522 static vtkGraph* GetData(vtkInformationVector* v, int i = 0);
524
533
539
541
553
555
560 void SetEdgePoints(vtkIdType e, vtkIdType npts, const double pts[]) VTK_SIZEHINT(pts, 3 * npts);
561 void GetEdgePoints(vtkIdType e, vtkIdType& npts, double*& pts) VTK_SIZEHINT(pts, 3 * npts);
563
568
573
578
584 void SetEdgePoint(vtkIdType e, vtkIdType i, const double x[3]);
585 void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
586 {
587 double p[3] = { x, y, z };
588 this->SetEdgePoint(e, i, p);
589 }
590
594 void AddEdgePoint(vtkIdType e, const double x[3]);
595 void AddEdgePoint(vtkIdType e, double x, double y, double z)
596 {
597 double p[3] = { x, y, z };
598 this->AddEdgePoint(e, p);
599 }
600
602
609
616
622
630
634 vtkIdType GetNumberOfElements(int type) override;
635
639 void Dump();
640
650
655
660
661protected:
663 ~vtkGraph() override;
664
672 void AddVertexInternal(vtkVariantArray* propertyArr = nullptr, vtkIdType* vertex = nullptr);
673
680 void AddVertexInternal(const vtkVariant& pedigree, vtkIdType* vertex);
681
683
690 vtkIdType u, vtkIdType v, bool directed, vtkVariantArray* propertyArr, vtkEdgeType* edge);
691 void AddEdgeInternal(const vtkVariant& uPedigree, vtkIdType v, bool directed,
692 vtkVariantArray* propertyArr, vtkEdgeType* edge);
693 void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigree, bool directed,
694 vtkVariantArray* propertyArr, vtkEdgeType* edge);
695 void AddEdgeInternal(const vtkVariant& uPedigree, const vtkVariant& vPedigree, bool directed,
696 vtkVariantArray* propertyArr, vtkEdgeType* edge);
698
703 void RemoveVertexInternal(vtkIdType v, bool directed);
704
709 void RemoveEdgeInternal(vtkIdType e, bool directed);
710
714 void RemoveVerticesInternal(vtkIdTypeArray* arr, bool directed);
715
719 void RemoveEdgesInternal(vtkIdTypeArray* arr, bool directed);
720
725 virtual bool IsStructureValid(vtkGraph* g) = 0;
726
730 virtual void CopyInternal(vtkGraph* g, bool deep);
731
736
741
746
750 vtkGraphEdgePoints* EdgePoints;
751
755 void SetEdgePoints(vtkGraphEdgePoints* edgePoints);
756
762
764
767 virtual void GetOutEdges(vtkIdType v, const vtkOutEdgeType*& edges, vtkIdType& nedges);
768 virtual void GetInEdges(vtkIdType v, const vtkInEdgeType*& edges, vtkIdType& nedges);
770
775
777
782 friend class vtkInEdgeIterator;
783 friend class vtkOutEdgeIterator;
788
790
796
800 double Bounds[6];
801
806
808
812 static double DefaultPoint[3];
814
816
819 vtkGetObjectMacro(EdgeList, vtkIdTypeArray);
820 virtual void SetEdgeList(vtkIdTypeArray* list);
823
824private:
825 vtkGraph(const vtkGraph&) = delete;
826 void operator=(const vtkGraph&) = delete;
827};
828
829bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
830bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
831VTKCOMMONDATAMODEL_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
832
833VTK_ABI_NAMESPACE_END
834#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.
Represents and manipulates a collection of data arrays.
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:585
void AddEdgePoint(vtkIdType e, double x, double y, double z)
Definition vtkGraph.h:595
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:805
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:782
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.
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.
vtkNew< vtkDataSetAttributes > VertexData
The vertex and edge data.
Definition vtkGraph.h:793
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:821
vtkGraphEdgePoints * EdgePoints
The structure for holding the edge points.
Definition vtkGraph.h:750
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:811
int GetDataObjectType() VTK_FUTURE_CONST override
Return what type of dataset this is.
Definition vtkGraph.h:299
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.
vtkNew< vtkDataSetAttributes > EdgeData
The vertex and edge data.
Definition vtkGraph.h:794
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:740
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.
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:735
friend class vtkEdgeListIterator
Friend iterator classes.
Definition vtkGraph.h:781
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:780
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:783
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.
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:812
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:800
dynamic, self-adjusting array of vtkIdType
Iterates through all incoming edges to a vertex.
a simple class to control print indentation
Definition vtkIndent.h:29
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
Allocate and hold a VTK object.
Definition vtkNew.h:58
Iterates through all outgoing edges from a vertex.
represent and manipulate 3D points
Definition vtkPoints.h:30
record modification and/or execution time
An undirected graph.
An array holding vtkVariants.
A type representing the union of many types.
Definition vtkVariant.h:53
Iterates all vertices in a graph.
Forward declaration required for Boost serialization.
vtkEdgeBase()=default
vtkIdType Id
Definition vtkGraph.h:244
vtkEdgeBase(vtkIdType id)
Definition vtkGraph.h:240
vtkEdgeType(vtkIdType s, vtkIdType t, vtkIdType id)
Definition vtkGraph.h:272
vtkIdType Target
Definition vtkGraph.h:279
vtkEdgeType()=default
vtkIdType Source
Definition vtkGraph.h:278
vtkIdType Source
Definition vtkGraph.h:266
vtkInEdgeType(vtkIdType s, vtkIdType id)
Definition vtkGraph.h:261
vtkInEdgeType()=default
vtkIdType Target
Definition vtkGraph.h:255
vtkOutEdgeType(vtkIdType t, vtkIdType id)
Definition vtkGraph.h:250
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:368
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:323
@ VTK_GRAPH
Definition vtkType.h:133
#define VTK_SIZEHINT(...)
#define VTK_MARSHALMANUAL