VTK  9.1.0
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-------------------------------------------------------------------------*/
219#ifndef vtkGraph_h
220#define vtkGraph_h
221
222#include "vtkCommonDataModelModule.h" // For export macro
223#include "vtkDataObject.h"
224
226class vtkCellArray;
229class vtkDirectedGraph;
230class vtkGraphEdge;
231class vtkGraphEdgePoints;
234class vtkIdTypeArray;
237class vtkPoints;
240class vtkVariant;
241class vtkVariantArray;
242
243// Forward declare some boost stuff even if boost wrappers
244// are turned off.
245namespace boost
246{
247class vtk_edge_iterator;
248class vtk_out_edge_pointer_iterator;
249class vtk_in_edge_pointer_iterator;
250}
251
252// Edge structures.
254{
255 vtkEdgeBase() = default;
257 : Id(id)
258 {
259 }
261};
262
264{
265 vtkOutEdgeType() = default;
267 : vtkEdgeBase(id)
268 , Target(t)
269 {
270 }
272};
273
275{
276 vtkInEdgeType() = default;
278 : vtkEdgeBase(id)
279 , Source(s)
280 {
281 }
283};
284
286{
287 vtkEdgeType() = default;
289 : vtkEdgeBase(id)
290 , Source(s)
291 , Target(t)
292 {
293 }
296};
297
298class VTKCOMMONDATAMODEL_EXPORT vtkGraph : public vtkDataObject
299{
300public:
301 vtkTypeMacro(vtkGraph, vtkDataObject);
302 void PrintSelf(ostream& os, vtkIndent indent) override;
303
305
308 vtkGetObjectMacro(VertexData, vtkDataSetAttributes);
309 vtkGetObjectMacro(EdgeData, vtkDataSetAttributes);
311
315 int GetDataObjectType() override { return VTK_GRAPH; }
316
320 void Initialize() override;
321
323
329 double* GetPoint(vtkIdType ptId);
330 void GetPoint(vtkIdType ptId, double x[3]);
332
334
342 virtual void SetPoints(vtkPoints* points);
344
350
352
357 double* GetBounds();
358 void GetBounds(double bounds[6]);
360
365
373
381
388
393
401
409
416
421
429
437
444 virtual void GetEdges(vtkEdgeListIterator* it);
445
451
458
464
471
476
485 vtkIdType FindVertex(const vtkVariant& pedigreeID);
486
491 void ShallowCopy(vtkDataObject* obj) override;
492
497 void DeepCopy(vtkDataObject* obj) override;
498
503 virtual void CopyStructure(vtkGraph* g);
504
510 virtual bool CheckedShallowCopy(vtkGraph* g);
511
517 virtual bool CheckedDeepCopy(vtkGraph* g);
518
522 virtual void Squeeze();
523
531 unsigned long GetActualMemorySize() override;
532
534
538 static vtkGraph* GetData(vtkInformationVector* v, int i = 0);
540
549
555
557
569
571
576 void SetEdgePoints(vtkIdType e, vtkIdType npts, const double pts[]) VTK_SIZEHINT(pts, 3 * npts);
577 void GetEdgePoints(vtkIdType e, vtkIdType& npts, double*& pts) VTK_SIZEHINT(pts, 3 * npts);
579
584
589
594
600 void SetEdgePoint(vtkIdType e, vtkIdType i, const double x[3]);
601 void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
602 {
603 double p[3] = { x, y, z };
604 this->SetEdgePoint(e, i, p);
605 }
606
610 void AddEdgePoint(vtkIdType e, const double x[3]);
611 void AddEdgePoint(vtkIdType e, double x, double y, double z)
612 {
613 double p[3] = { x, y, z };
614 this->AddEdgePoint(e, p);
615 }
616
618
625
632
638
646
651
655 void Dump();
656
666
671
676
677protected:
679 ~vtkGraph() override;
680
688 void AddVertexInternal(vtkVariantArray* propertyArr = nullptr, vtkIdType* vertex = nullptr);
689
696 void AddVertexInternal(const vtkVariant& pedigree, vtkIdType* vertex);
697
699
706 vtkIdType u, vtkIdType v, bool directed, vtkVariantArray* propertyArr, vtkEdgeType* edge);
707 void AddEdgeInternal(const vtkVariant& uPedigree, vtkIdType v, bool directed,
708 vtkVariantArray* propertyArr, vtkEdgeType* edge);
709 void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigree, bool directed,
710 vtkVariantArray* propertyArr, vtkEdgeType* edge);
711 void AddEdgeInternal(const vtkVariant& uPedigree, const vtkVariant& vPedigree, bool directed,
712 vtkVariantArray* propertyArr, vtkEdgeType* edge);
714
719 void RemoveVertexInternal(vtkIdType v, bool directed);
720
725 void RemoveEdgeInternal(vtkIdType e, bool directed);
726
730 void RemoveVerticesInternal(vtkIdTypeArray* arr, bool directed);
731
735 void RemoveEdgesInternal(vtkIdTypeArray* arr, bool directed);
736
741 virtual bool IsStructureValid(vtkGraph* g) = 0;
742
746 virtual void CopyInternal(vtkGraph* g, bool deep);
747
752
757
762
766 vtkGraphEdgePoints* EdgePoints;
767
771 void SetEdgePoints(vtkGraphEdgePoints* edgePoints);
772
778
780
783 virtual void GetOutEdges(vtkIdType v, const vtkOutEdgeType*& edges, vtkIdType& nedges);
784 virtual void GetInEdges(vtkIdType v, const vtkInEdgeType*& edges, vtkIdType& nedges);
786
791
793
798 friend class vtkInEdgeIterator;
799 friend class vtkOutEdgeIterator;
804
806
812
816 double Bounds[6];
817
822
824
828 static double DefaultPoint[3];
830
832
835 vtkGetObjectMacro(EdgeList, vtkIdTypeArray);
836 virtual void SetEdgeList(vtkIdTypeArray* list);
839
840private:
841 vtkGraph(const vtkGraph&) = delete;
842 void operator=(const vtkGraph&) = delete;
843};
844
845bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
846bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
847VTKCOMMONDATAMODEL_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
848
849#endif
Iterates through adjacent vertices in a graph.
object to represent cell connectivity
Definition: vtkCellArray.h:190
general representation of visualization data
Definition: vtkDataObject.h:69
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:64
Representation of a single graph edge.
Definition: vtkGraphEdge.h:40
Internal representation of vtkGraph.
Base class for graph data types.
Definition: vtkGraph.h:299
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:601
void AddEdgePoint(vtkIdType e, double x, double y, double z)
Definition: vtkGraph.h:611
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:821
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:809
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:837
vtkGraphEdgePoints * EdgePoints
The structure for holding the edge points.
Definition: vtkGraph.h:766
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:827
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:756
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:315
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:751
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:810
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:43
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:43
record modification and/or execution time
Definition: vtkTimeStamp.h:42
An undirected graph.
An array holding vtkVariants.
A atomic type representing the union of many types.
Definition: vtkVariant.h:75
Iterates all vertices in a graph.
Forward declaration required for Boost serialization.
@ points
Definition: vtkX3D.h:452
@ info
Definition: vtkX3D.h:382
@ type
Definition: vtkX3D.h:522
@ index
Definition: vtkX3D.h:252
vtkEdgeBase()=default
vtkIdType Id
Definition: vtkGraph.h:260
vtkEdgeBase(vtkIdType id)
Definition: vtkGraph.h:256
vtkEdgeType(vtkIdType s, vtkIdType t, vtkIdType id)
Definition: vtkGraph.h:288
vtkIdType Target
Definition: vtkGraph.h:295
vtkEdgeType()=default
vtkIdType Source
Definition: vtkGraph.h:294
vtkIdType Source
Definition: vtkGraph.h:282
vtkInEdgeType(vtkIdType s, vtkIdType id)
Definition: vtkGraph.h:277
vtkInEdgeType()=default
vtkIdType Target
Definition: vtkGraph.h:271
vtkOutEdgeType(vtkIdType t, vtkIdType id)
Definition: vtkGraph.h:266
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:332
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
#define VTK_GRAPH
Definition: vtkType.h:97
#define VTK_SIZEHINT(...)