VTK  9.3.20240424
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.
267namespace boost
268{
269class vtk_edge_iterator;
270class vtk_out_edge_pointer_iterator;
271class vtk_in_edge_pointer_iterator;
272}
273
274VTK_ABI_NAMESPACE_BEGIN
276class vtkCellArray;
279class vtkDirectedGraph;
280class vtkGraphEdge;
281class vtkGraphEdgePoints;
284class vtkIdTypeArray;
287class vtkPoints;
290class vtkVariant;
291class 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
339class VTKCOMMONDATAMODEL_EXPORT vtkGraph : public vtkDataObject
340{
341public:
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
406
414
422
429
434
441 virtual void GetOutEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
442
450
457
462
469 virtual void GetInEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
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
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
691 vtkIdType GetNumberOfElements(int type) override;
692
696 void Dump();
697
707
712
717
718protected:
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
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
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
881private:
882 vtkGraph(const vtkGraph&) = delete;
883 void operator=(const vtkGraph&) = delete;
884};
885
886bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
887bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
888VTKCOMMONDATAMODEL_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
889
890VTK_ABI_NAMESPACE_END
891#endif
Iterates through adjacent vertices in a graph.
object to represent cell connectivity
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
Representation of a single graph edge.
Internal representation of vtkGraph.
Base class for graph data types.
Definition vtkGraph.h:340
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:642
void AddEdgePoint(vtkIdType e, double x, double y, double z)
Definition vtkGraph.h:652
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: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.
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: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.
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: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.
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:868
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: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.
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: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.
vtkGraphInternals * GetGraphInternals(bool modifying)
Returns the internal representation of 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.
vtkDataSetAttributes * EdgeData
The vertex and edge data.
Definition vtkGraph.h:851
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:139
record modification and/or execution time
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.
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)
VTKCOMMONDATAMODEL_EXPORT ostream & operator<<(ostream &out, vtkEdgeBase e)
bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2)
int vtkIdType
Definition vtkType.h:315
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:270
#define VTK_GRAPH
Definition vtkType.h:85
#define VTK_SIZEHINT(...)