• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

dox/Filtering/vtkGraph.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkGraph.h,v $
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00015 /*-------------------------------------------------------------------------
00016   Copyright 2008 Sandia Corporation.
00017   Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00018   the U.S. Government retains certain rights in this software.
00019 -------------------------------------------------------------------------*/
00212 #ifndef __vtkGraph_h
00213 #define __vtkGraph_h
00214 
00215 #include "vtkDataObject.h"
00216 
00217 class vtkAdjacentVertexIterator;
00218 class vtkCellArray;
00219 class vtkEdgeListIterator;
00220 class vtkDataSetAttributes;
00221 class vtkGraphEdge;
00222 class vtkGraphEdgePoints;
00223 class vtkDistributedGraphHelper;
00224 class vtkGraphInternals;
00225 class vtkIdTypeArray;
00226 class vtkInEdgeIterator;
00227 class vtkOutEdgeIterator;
00228 class vtkPoints;
00229 class vtkVertexListIterator;
00230 class vtkVariant;
00231 class vtkVariantArray;
00232 
00233 //BTX
00234 // Forward declare some boost stuff even if boost wrappers
00235 // are turned off.
00236 namespace boost
00237 {
00238   class vtk_edge_iterator;
00239   class vtk_out_edge_pointer_iterator;
00240   class vtk_in_edge_pointer_iterator;
00241 }
00242 
00243 // Edge structures.
00244 struct vtkEdgeBase
00245 {
00246   vtkEdgeBase() { }
00247   vtkEdgeBase(vtkIdType id) :
00248     Id(id) { }
00249   vtkIdType Id;
00250 };
00251 
00252 struct vtkOutEdgeType : vtkEdgeBase
00253 {
00254   vtkOutEdgeType() { }
00255   vtkOutEdgeType(vtkIdType t, vtkIdType id) :
00256     vtkEdgeBase(id),
00257     Target(t) { }
00258   vtkIdType Target;
00259 };
00260 
00261 struct vtkInEdgeType : vtkEdgeBase
00262 {
00263   vtkInEdgeType() { }
00264   vtkInEdgeType(vtkIdType s, vtkIdType id) :
00265     vtkEdgeBase(id),
00266     Source(s) { }
00267   vtkIdType Source;
00268 };
00269 
00270 struct vtkEdgeType : vtkEdgeBase
00271 {
00272   vtkEdgeType() { }
00273   vtkEdgeType(vtkIdType s, vtkIdType t, vtkIdType id) :
00274     vtkEdgeBase(id),
00275     Source(s),
00276     Target(t) { }
00277   vtkIdType Source;
00278   vtkIdType Target;
00279 };
00280 //ETX
00281 
00282 class VTK_FILTERING_EXPORT vtkGraph : public vtkDataObject
00283 {
00284 public:
00285   vtkTypeRevisionMacro(vtkGraph, vtkDataObject);
00286   void PrintSelf(ostream& os, vtkIndent indent);
00287 
00289 
00290   vtkGetObjectMacro(VertexData, vtkDataSetAttributes);
00291   vtkGetObjectMacro(EdgeData, vtkDataSetAttributes);
00293 
00295   virtual int GetDataObjectType() {return VTK_GRAPH;}
00296 
00298   virtual void Initialize();
00299 
00301 
00304   double *GetPoint(vtkIdType ptId);
00305   void GetPoint(vtkIdType ptId, double x[3]);
00307 
00309 
00313   vtkPoints* GetPoints();
00314   virtual void SetPoints(vtkPoints *points);
00316 
00319   void ComputeBounds();
00320 
00322 
00325   double *GetBounds();
00326   void GetBounds(double bounds[6]);
00328 
00330   unsigned long int GetMTime();
00331 
00335   virtual void GetOutEdges(vtkIdType v, vtkOutEdgeIterator *it);
00336 
00340   virtual vtkIdType GetDegree(vtkIdType v);
00341 
00345   virtual vtkIdType GetOutDegree(vtkIdType v);
00346 
00347   //BTX
00349 
00350   virtual vtkOutEdgeType GetOutEdge(vtkIdType v, vtkIdType index);
00351   //ETX
00353 
00358   virtual void GetOutEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
00359 
00363   virtual void GetInEdges(vtkIdType v, vtkInEdgeIterator *it);
00364 
00368   virtual vtkIdType GetInDegree(vtkIdType v);
00369 
00370   //BTX
00372 
00373   virtual vtkInEdgeType GetInEdge(vtkIdType v, vtkIdType index);
00374   //ETX
00376 
00381   virtual void GetInEdge(vtkIdType v, vtkIdType index, vtkGraphEdge* e);
00382 
00387   virtual void GetAdjacentVertices(vtkIdType v, vtkAdjacentVertexIterator *it);
00388 
00392   virtual void GetEdges(vtkEdgeListIterator *it);
00393   
00396   virtual vtkIdType GetNumberOfEdges();
00397 
00401   virtual void GetVertices(vtkVertexListIterator *it);
00402   
00405   virtual vtkIdType GetNumberOfVertices();
00406   
00407   // BTX
00411   void SetDistributedGraphHelper(vtkDistributedGraphHelper *helper);
00412 
00414 
00415   vtkDistributedGraphHelper *GetDistributedGraphHelper();
00416   //ETX
00418 
00419   //BTX
00421 
00425   vtkIdType FindVertex(const vtkVariant& pedigreeID);
00426   //ETX
00428 
00431   virtual void ShallowCopy(vtkDataObject *obj);
00432 
00435   virtual void DeepCopy(vtkDataObject *obj);
00436   
00439   virtual void CopyStructure(vtkGraph *g);
00440 
00443   virtual bool CheckedShallowCopy(vtkGraph *g);
00444   
00447   virtual bool CheckedDeepCopy(vtkGraph *g);
00448 
00450   virtual void Squeeze();
00451 
00452   //BTX
00454 
00455   static vtkGraph *GetData(vtkInformation *info);
00456   static vtkGraph *GetData(vtkInformationVector *v, int i=0);
00457   //ETX
00459 
00464   void ReorderOutVertices(vtkIdType v, vtkIdTypeArray *vertices);
00465 
00468   bool IsSameStructure(vtkGraph *other);
00469 
00471 
00477   vtkIdType GetSourceVertex(vtkIdType e);
00478   vtkIdType GetTargetVertex(vtkIdType e);
00480 
00481   //BTX
00483 
00486   void SetEdgePoints(vtkIdType e, vtkIdType npts, double* pts);
00487   void GetEdgePoints(vtkIdType e, vtkIdType& npts, double*& pts);
00488   //ETX
00490 
00492   vtkIdType GetNumberOfEdgePoints(vtkIdType e);
00493 
00495   double* GetEdgePoint(vtkIdType e, vtkIdType i);
00496 
00498   void ClearEdgePoints(vtkIdType e);
00499 
00501 
00503   void SetEdgePoint(vtkIdType e, vtkIdType i, double x[3]);
00504   void SetEdgePoint(vtkIdType e, vtkIdType i, double x, double y, double z)
00505     { double p[3] = {x, y, z}; this->SetEdgePoint(e, i, p); }
00507 
00509 
00511   void AddEdgePoint(vtkIdType e, double x[3]);
00512   void AddEdgePoint(vtkIdType e, double x, double y, double z)
00513     { double p[3] = {x, y, z}; this->AddEdgePoint(e, p); }
00515 
00517 
00519   void ShallowCopyEdgePoints(vtkGraph* g);
00520   void DeepCopyEdgePoints(vtkGraph* g);
00522 
00526   vtkGraphInternals *GetGraphInternals(bool modifying);
00527 
00528 protected:
00529   //BTX
00530   vtkGraph();
00531   ~vtkGraph();
00532 
00534 
00539   void AddVertexInternal(vtkVariantArray *propertyArr = 0, 
00540                          vtkIdType *vertex = 0);
00542 
00547   void AddVertexInternal(const vtkVariant& pedigree, vtkIdType *vertex);
00548 
00550 
00554   void AddEdgeInternal(vtkIdType u, vtkIdType v, bool directed, 
00555                        vtkVariantArray *propertyArr, vtkEdgeType *edge);
00556   void AddEdgeInternal(const vtkVariant& uPedigree, vtkIdType v, bool directed,
00557                        vtkVariantArray *propertyArr, vtkEdgeType *edge);
00558   void AddEdgeInternal(vtkIdType u, const vtkVariant& vPedigree, bool directed,
00559                        vtkVariantArray *propertyArr, vtkEdgeType *edge);
00560   void AddEdgeInternal(const vtkVariant& uPedigree, const vtkVariant& vPedigree,
00561                        bool directed, vtkVariantArray *propertyArr, 
00562                        vtkEdgeType *edge);
00563   //ETX
00565 
00568   virtual bool IsStructureValid(vtkGraph *g) = 0;
00569 
00571   virtual void CopyInternal(vtkGraph *g, bool deep);
00572 
00574   vtkGraphInternals *Internals;
00575 
00577   vtkDistributedGraphHelper *DistributedHelper;
00578 
00580   void SetInternals(vtkGraphInternals* internals);
00581 
00583   vtkGraphEdgePoints *EdgePoints;
00584 
00586   void SetEdgePoints(vtkGraphEdgePoints* edgePoints);
00587 
00590   void ForceOwnership();
00591 
00593 
00594   virtual void GetOutEdges(vtkIdType v, const vtkOutEdgeType *& edges, vtkIdType & nedges);
00595   virtual void GetInEdges(vtkIdType v, const vtkInEdgeType *& edges, vtkIdType & nedges);
00597 
00599   void BuildEdgeList();
00600 
00602 
00603   friend class vtkAdjacentVertexIterator;
00604   friend class vtkEdgeListIterator;
00605   friend class vtkInEdgeIterator;
00606   friend class vtkOutEdgeIterator;
00607   friend class boost::vtk_edge_iterator;
00608   friend class boost::vtk_in_edge_pointer_iterator;
00609   friend class boost::vtk_out_edge_pointer_iterator;
00610   //ETX
00612 
00614 
00615   vtkDataSetAttributes *VertexData;
00616   vtkDataSetAttributes *EdgeData;
00618 
00620   double Bounds[6];
00621 
00623   vtkTimeStamp ComputeTime; 
00624 
00626 
00627   vtkPoints *Points;
00628   static double DefaultPoint[3];
00630 
00632 
00633   vtkGetObjectMacro(EdgeList, vtkIdTypeArray);
00634   virtual void SetEdgeList(vtkIdTypeArray* list);
00635   vtkIdTypeArray *EdgeList;
00636   //ETX
00638 private:
00639   vtkGraph(const vtkGraph&);  // Not implemented.
00640   void operator=(const vtkGraph&);  // Not implemented.
00641 };
00642 
00643 //BTX
00644 bool VTK_FILTERING_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2);
00645 bool VTK_FILTERING_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2);
00646 VTK_FILTERING_EXPORT ostream& operator<<(ostream& out, vtkEdgeBase e);
00647 //ETX
00648 
00649 #endif

Generated by  doxygen 1.7.1