VTK
|
Reeb graph computation for PL scalar fields. More...
#include <vtkReebGraph.h>
Public Types | |
enum | { ERR_INCORRECT_FIELD = -1, ERR_NO_SUCH_FIELD = -2, ERR_NOT_A_SIMPLICIAL_MESH = -3 } |
typedef vtkMutableDirectedGraph | Superclass |
![]() | |
typedef vtkDirectedGraph | Superclass |
![]() | |
typedef vtkGraph | Superclass |
![]() | |
typedef vtkDataObject | Superclass |
![]() | |
typedef vtkObject | Superclass |
enum | FieldAssociations { FIELD_ASSOCIATION_POINTS, FIELD_ASSOCIATION_CELLS, FIELD_ASSOCIATION_NONE, FIELD_ASSOCIATION_POINTS_THEN_CELLS, FIELD_ASSOCIATION_VERTICES, FIELD_ASSOCIATION_EDGES, FIELD_ASSOCIATION_ROWS, NUMBER_OF_ASSOCIATIONS } |
enum | AttributeTypes { POINT, CELL, FIELD, POINT_THEN_CELL, VERTEX, EDGE, ROW, NUMBER_OF_ATTRIBUTE_TYPES } |
enum | FieldOperations { FIELD_OPERATION_PRESERVED, FIELD_OPERATION_REINTERPOLATED, FIELD_OPERATION_MODIFIED, FIELD_OPERATION_REMOVED } |
![]() | |
typedef vtkObjectBase | Superclass |
Public Member Functions | |
virtual const char * | GetClassName () |
virtual int | IsA (const char *type) |
void | PrintSelf (ostream &os, vtkIndent indent) |
void | PrintNodeData (ostream &os, vtkIndent indent) |
int | Build (vtkPolyData *mesh, vtkDataArray *scalarField) |
int | Build (vtkUnstructuredGrid *mesh, vtkDataArray *scalarField) |
int | Build (vtkPolyData *mesh, vtkIdType scalarFieldId) |
int | Build (vtkUnstructuredGrid *mesh, vtkIdType scalarFieldId) |
int | Build (vtkPolyData *mesh, const char *scalarFieldName) |
int | Build (vtkUnstructuredGrid *mesh, const char *scalarFieldName) |
void | CloseStream () |
void | DeepCopy (vtkDataObject *src) |
void | Set (vtkMutableDirectedGraph *g) |
int | StreamTriangle (vtkIdType vertex0Id, double scalar0, vtkIdType vertex1Id, double scalar1, vtkIdType vertex2Id, double scalar2) |
int | StreamTetrahedron (vtkIdType vertex0Id, double scalar0, vtkIdType vertex1Id, double scalar1, vtkIdType vertex2Id, double scalar2, vtkIdType vertex3Id, double scalar3) |
int | Simplify (double simplificationThreshold, vtkReebGraphSimplificationMetric *simplificationMetric) |
![]() | |
virtual vtkIdType | SetNumberOfVertices (vtkIdType numVerts) |
vtkIdType | AddVertex () |
vtkIdType | AddVertex (vtkVariantArray *propertyArr) |
vtkIdType | AddVertex (const vtkVariant &pedigreeId) |
void | LazyAddVertex () |
void | LazyAddVertex (vtkVariantArray *propertyArr) |
void | LazyAddVertex (const vtkVariant &pedigreeId) |
void | LazyAddEdge (vtkIdType u, vtkIdType v, vtkVariantArray *propertyArr=0) |
vtkGraphEdge * | AddGraphEdge (vtkIdType u, vtkIdType v) |
void | RemoveVertex (vtkIdType v) |
void | RemoveEdge (vtkIdType e) |
void | RemoveVertices (vtkIdTypeArray *arr) |
void | RemoveEdges (vtkIdTypeArray *arr) |
vtkEdgeType | AddEdge (vtkIdType u, vtkIdType v) |
vtkEdgeType | AddEdge (vtkIdType u, vtkIdType v, vtkVariantArray *propertyArr) |
vtkEdgeType | AddEdge (const vtkVariant &u, vtkIdType v, vtkVariantArray *propertyArr=0) |
vtkEdgeType | AddEdge (vtkIdType u, const vtkVariant &v, vtkVariantArray *propertyArr=0) |
vtkEdgeType | AddEdge (const vtkVariant &u, const vtkVariant &v, vtkVariantArray *propertyArr=0) |
void | LazyAddEdge (const vtkVariant &u, vtkIdType v, vtkVariantArray *propertyArr=0) |
void | LazyAddEdge (vtkIdType u, const vtkVariant &v, vtkVariantArray *propertyArr=0) |
void | LazyAddEdge (const vtkVariant &u, const vtkVariant &v, vtkVariantArray *propertyArr=0) |
vtkIdType | AddChild (vtkIdType parent, vtkVariantArray *propertyArr) |
vtkIdType | AddChild (vtkIdType parent) |
![]() | |
virtual int | GetDataObjectType () |
virtual bool | IsStructureValid (vtkGraph *g) |
![]() | |
virtual void | Initialize () |
void | ComputeBounds () |
unsigned long int | GetMTime () |
virtual void | GetOutEdges (vtkIdType v, vtkOutEdgeIterator *it) |
virtual vtkIdType | GetDegree (vtkIdType v) |
virtual vtkIdType | GetOutDegree (vtkIdType v) |
virtual void | GetOutEdge (vtkIdType v, vtkIdType index, vtkGraphEdge *e) |
virtual void | GetInEdges (vtkIdType v, vtkInEdgeIterator *it) |
virtual vtkIdType | GetInDegree (vtkIdType v) |
virtual void | GetInEdge (vtkIdType v, vtkIdType index, vtkGraphEdge *e) |
virtual void | GetAdjacentVertices (vtkIdType v, vtkAdjacentVertexIterator *it) |
virtual void | GetEdges (vtkEdgeListIterator *it) |
virtual vtkIdType | GetNumberOfEdges () |
virtual void | GetVertices (vtkVertexListIterator *it) |
virtual vtkIdType | GetNumberOfVertices () |
void | SetDistributedGraphHelper (vtkDistributedGraphHelper *helper) |
vtkIdType | FindVertex (const vtkVariant &pedigreeID) |
virtual void | ShallowCopy (vtkDataObject *obj) |
virtual void | CopyStructure (vtkGraph *g) |
virtual bool | CheckedShallowCopy (vtkGraph *g) |
virtual bool | CheckedDeepCopy (vtkGraph *g) |
virtual void | Squeeze () |
void | ReorderOutVertices (vtkIdType v, vtkIdTypeArray *vertices) |
bool | IsSameStructure (vtkGraph *other) |
vtkIdType | GetNumberOfEdgePoints (vtkIdType e) |
double * | GetEdgePoint (vtkIdType e, vtkIdType i) |
void | ClearEdgePoints (vtkIdType e) |
vtkGraphInternals * | GetGraphInternals (bool modifying) |
void | GetInducedEdges (vtkIdTypeArray *verts, vtkIdTypeArray *edges) |
virtual vtkFieldData * | GetAttributesAsFieldData (int type) |
virtual vtkIdType | GetNumberOfElements (int type) |
void | Dump () |
vtkIdType | GetEdgeId (vtkIdType a, vtkIdType b) |
bool | ToDirectedGraph (vtkDirectedGraph *g) |
bool | ToUndirectedGraph (vtkUndirectedGraph *g) |
virtual vtkDataSetAttributes * | GetVertexData () |
virtual vtkDataSetAttributes * | GetEdgeData () |
double * | GetPoint (vtkIdType ptId) |
void | GetPoint (vtkIdType ptId, double x[3]) |
vtkPoints * | GetPoints () |
virtual void | SetPoints (vtkPoints *points) |
double * | GetBounds () |
void | GetBounds (double bounds[6]) |
virtual vtkOutEdgeType | GetOutEdge (vtkIdType v, vtkIdType index) |
virtual vtkInEdgeType | GetInEdge (vtkIdType v, vtkIdType index) |
vtkDistributedGraphHelper * | GetDistributedGraphHelper () |
vtkIdType | GetSourceVertex (vtkIdType e) |
vtkIdType | GetTargetVertex (vtkIdType e) |
void | SetEdgePoints (vtkIdType e, vtkIdType npts, double *pts) |
void | GetEdgePoints (vtkIdType e, vtkIdType &npts, double *&pts) |
void | SetEdgePoint (vtkIdType e, vtkIdType i, double x[3]) |
void | SetEdgePoint (vtkIdType e, vtkIdType i, double x, double y, double z) |
void | AddEdgePoint (vtkIdType e, double x[3]) |
void | AddEdgePoint (vtkIdType e, double x, double y, double z) |
void | ShallowCopyEdgePoints (vtkGraph *g) |
void | DeepCopyEdgePoints (vtkGraph *g) |
![]() | |
virtual vtkAlgorithmOutput * | GetProducerPort () |
void | ReleaseData () |
int | ShouldIReleaseData () |
virtual void | Register (vtkObjectBase *o) |
virtual void | UnRegister (vtkObjectBase *o) |
virtual void | Update () |
virtual void | UpdateInformation () |
virtual void | PropagateUpdateExtent () |
virtual void | TriggerAsynchronousUpdate () |
virtual void | UpdateData () |
virtual unsigned long | GetEstimatedMemorySize () |
unsigned long | GetUpdateTime () |
void | SetUpdateExtentToWholeExtent () |
unsigned long | GetPipelineMTime () |
virtual unsigned long | GetActualMemorySize () |
void | CopyInformation (vtkDataObject *data) |
virtual void | CopyInformationFromPipeline (vtkInformation *request) |
void | DataHasBeenGenerated () |
virtual void | PrepareForNewData () |
virtual int | GetExtentType () |
virtual void | Crop () |
virtual vtkDataSetAttributes * | GetAttributes (int type) |
virtual int | GetAttributeTypeForArray (vtkAbstractArray *arr) |
virtual vtkSource * | GetSource () |
void | SetSource (vtkSource *s) |
virtual vtkInformation * | GetInformation () |
virtual void | SetInformation (vtkInformation *) |
virtual vtkInformation * | GetPipelineInformation () |
virtual void | SetPipelineInformation (vtkInformation *) |
virtual int | GetDataReleased () |
void | SetReleaseDataFlag (int) |
int | GetReleaseDataFlag () |
virtual void | ReleaseDataFlagOn () |
virtual void | ReleaseDataFlagOff () |
virtual void | SetFieldData (vtkFieldData *) |
virtual vtkFieldData * | GetFieldData () |
virtual void | SetUpdateExtent (int piece, int numPieces, int ghostLevel) |
void | SetUpdateExtent (int piece, int numPieces) |
virtual void | SetUpdateExtent (int x0, int x1, int y0, int y1, int z0, int z1) |
virtual void | SetUpdateExtent (int extent[6]) |
virtual int * | GetUpdateExtent () |
virtual void | GetUpdateExtent (int &x0, int &x1, int &y0, int &y1, int &z0, int &z1) |
virtual void | GetUpdateExtent (int extent[6]) |
virtual void | CopyTypeSpecificInformation (vtkDataObject *data) |
void | SetUpdatePiece (int piece) |
void | SetUpdateNumberOfPieces (int num) |
virtual int | GetUpdatePiece () |
virtual int | GetUpdateNumberOfPieces () |
void | SetUpdateGhostLevel (int level) |
virtual int | GetUpdateGhostLevel () |
virtual void | SetRequestExactExtent (int flag) |
virtual int | GetRequestExactExtent () |
virtual void | RequestExactExtentOn () |
virtual void | RequestExactExtentOff () |
virtual void | SetWholeExtent (int x0, int x1, int y0, int y1, int z0, int z1) |
virtual void | SetWholeExtent (int extent[6]) |
virtual int * | GetWholeExtent () |
virtual void | GetWholeExtent (int &x0, int &x1, int &y0, int &y1, int &z0, int &z1) |
virtual void | GetWholeExtent (int extent[6]) |
virtual void | SetWholeBoundingBox (double x0, double x1, double y0, double y1, double z0, double z1) |
virtual void | SetWholeBoundingBox (double bb[6]) |
virtual double * | GetWholeBoundingBox () |
virtual void | GetWholeBoundingBox (double &x0, double &x1, double &y0, double &y1, double &z0, double &z1) |
virtual void | GetWholeBoundingBox (double extent[6]) |
virtual void | SetMaximumNumberOfPieces (int) |
virtual int | GetMaximumNumberOfPieces () |
virtual void | CopyInformationToPipeline (vtkInformation *request, vtkInformation *input, vtkInformation *output, int forceCopy) |
void | CopyInformationToPipeline (vtkInformation *request, vtkInformation *input) |
void | SetExtentTranslator (vtkExtentTranslator *translator) |
vtkExtentTranslator * | GetExtentTranslator () |
void | GlobalReleaseDataFlagOn () |
void | GlobalReleaseDataFlagOff () |
![]() | |
virtual void | DebugOn () |
virtual void | DebugOff () |
unsigned char | GetDebug () |
void | SetDebug (unsigned char debugFlag) |
virtual void | Modified () |
unsigned long | AddObserver (unsigned long event, vtkCommand *, float priority=0.0f) |
unsigned long | AddObserver (const char *event, vtkCommand *, float priority=0.0f) |
vtkCommand * | GetCommand (unsigned long tag) |
void | RemoveObserver (vtkCommand *) |
void | RemoveObservers (unsigned long event, vtkCommand *) |
void | RemoveObservers (const char *event, vtkCommand *) |
int | HasObserver (unsigned long event, vtkCommand *) |
int | HasObserver (const char *event, vtkCommand *) |
void | RemoveObserver (unsigned long tag) |
void | RemoveObservers (unsigned long event) |
void | RemoveObservers (const char *event) |
void | RemoveAllObservers () |
int | HasObserver (unsigned long event) |
int | HasObserver (const char *event) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(), float priority=0.0f) |
template<class U , class T > | |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
int | InvokeEvent (unsigned long event, void *callData) |
int | InvokeEvent (const char *event, void *callData) |
int | InvokeEvent (unsigned long event) |
int | InvokeEvent (const char *event) |
![]() | |
const char * | GetClassName () const |
virtual void | Delete () |
virtual void | FastDelete () |
void | Print (ostream &os) |
void | SetReferenceCount (int) |
void | PrintRevisions (ostream &os) |
virtual void | PrintHeader (ostream &os, vtkIndent indent) |
virtual void | PrintTrailer (ostream &os, vtkIndent indent) |
int | GetReferenceCount () |
Protected Member Functions | |
vtkReebGraph () | |
~vtkReebGraph () | |
![]() | |
vtkMutableDirectedGraph () | |
~vtkMutableDirectedGraph () | |
![]() | |
vtkDirectedGraph () | |
~vtkDirectedGraph () | |
![]() | |
vtkGraph () | |
~vtkGraph () | |
void | AddVertexInternal (const vtkVariant &pedigree, vtkIdType *vertex) |
void | RemoveVertexInternal (vtkIdType v, bool directed) |
void | RemoveEdgeInternal (vtkIdType e, bool directed) |
void | RemoveVerticesInternal (vtkIdTypeArray *arr, bool directed) |
virtual void | CopyInternal (vtkGraph *g, bool deep) |
void | SetInternals (vtkGraphInternals *internals) |
void | SetEdgePoints (vtkGraphEdgePoints *edgePoints) |
void | ForceOwnership () |
void | BuildEdgeList () |
void | AddVertexInternal (vtkVariantArray *propertyArr=0, vtkIdType *vertex=0) |
void | AddEdgeInternal (vtkIdType u, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
void | AddEdgeInternal (const vtkVariant &uPedigree, vtkIdType v, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
void | AddEdgeInternal (vtkIdType u, const vtkVariant &vPedigree, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
void | AddEdgeInternal (const vtkVariant &uPedigree, const vtkVariant &vPedigree, bool directed, vtkVariantArray *propertyArr, vtkEdgeType *edge) |
void | RemoveEdgesInternal (vtkIdTypeArray *arr, bool directed) |
virtual void | GetOutEdges (vtkIdType v, const vtkOutEdgeType *&edges, vtkIdType &nedges) |
virtual void | GetInEdges (vtkIdType v, const vtkInEdgeType *&edges, vtkIdType &nedges) |
virtual vtkIdTypeArray * | GetEdgeList () |
virtual void | SetEdgeList (vtkIdTypeArray *list) |
![]() | |
vtkDataObject () | |
~vtkDataObject () | |
vtkExecutive * | GetExecutive () |
int | GetPortNumber () |
virtual void | ReportReferences (vtkGarbageCollector *) |
vtkStreamingDemandDrivenPipeline * | TrySDDP (const char *method) |
![]() | |
vtkObject () | |
virtual | ~vtkObject () |
virtual void | RegisterInternal (vtkObjectBase *, int check) |
virtual void | UnRegisterInternal (vtkObjectBase *, int check) |
void | InternalGrabFocus (vtkCommand *mouseEvents, vtkCommand *keypressEvents=NULL) |
void | InternalReleaseFocus () |
![]() | |
vtkObjectBase () | |
virtual | ~vtkObjectBase () |
virtual void | CollectRevisions (ostream &os) |
vtkObjectBase (const vtkObjectBase &) | |
void | operator= (const vtkObjectBase &) |
Protected Attributes | |
Implementation * | Storage |
![]() | |
vtkGraphEdge * | GraphEdge |
![]() | |
vtkGraphInternals * | Internals |
vtkDistributedGraphHelper * | DistributedHelper |
vtkGraphEdgePoints * | EdgePoints |
double | Bounds [6] |
vtkTimeStamp | ComputeTime |
vtkDataSetAttributes * | VertexData |
vtkDataSetAttributes * | EdgeData |
vtkPoints * | Points |
vtkIdTypeArray * | EdgeList |
![]() | |
vtkFieldData * | FieldData |
vtkSource * | Source |
int | DataReleased |
vtkTimeStamp | UpdateTime |
vtkInformation * | Information |
vtkInformation * | PipelineInformation |
![]() | |
unsigned char | Debug |
vtkTimeStamp | MTime |
vtkSubjectHelper * | SubjectHelper |
![]() | |
int | ReferenceCount |
vtkWeakPointerBase ** | WeakPointers |
Additional Inherited Members | |
![]() | |
typedef vtkStreamingDemandDrivenPipeline | SDDP |
![]() | |
static double | DefaultPoint [3] |
![]() | |
static const char | AssociationNames [NUMBER_OF_ASSOCIATIONS][55] |
Reeb graph computation for PL scalar fields.
vtkReebGraph is a class that computes a Reeb graph given a PL scalar field (vtkDataArray) defined on a simplicial mesh. A Reeb graph is a concise representation of the connectivity evolution of the level sets of a scalar function.
It is particularly useful in visualization (optimal seed set computation, fast flexible isosurface extraction, automated transfer function design, feature-driven visualization, etc.) and computer graphics (shape deformation, shape matching, shape compression, etc.).
Reference: "Sur les points singuliers d'une forme de Pfaff completement integrable ou d'une fonction numerique", G. Reeb, Comptes-rendus de l'Academie des Sciences, 222:847-849, 1946.
vtkReebGraph implements one of the latest and most robust Reeb graph computation algorithms.
Reference: "Robust on-line computation of Reeb graphs: simplicity and speed", V. Pascucci, G. Scorzelli, P.-T. Bremer, and A. Mascarenhas, ACM Transactions on Graphics, Proc. of SIGGRAPH 2007.
vtkReebGraph provides methods for computing multi-resolution topological hierarchies through topological simplification. Topoligical simplification can be either driven by persistence homology concepts (default behavior) or by application specific metrics (see vtkReebGraphSimplificationMetric). In the latter case, designing customized simplification metric evaluation algorithms enables the user to control the definition of what should be considered as noise or signal in the topological filtering process.
References: "Topological persistence and simplification", H. Edelsbrunner, D. Letscher, and A. Zomorodian, Discrete Computational Geometry, 28:511-533, 2002.
"Extreme elevation on a 2-manifold", P.K. Agarwal, H. Edelsbrunner, J. Harer, and Y. Wang, ACM Symposium on Computational Geometry, pp. 357-365, 2004.
"Simplifying flexible isosurfaces using local geometric measures", H. Carr, J. Snoeyink, M van de Panne, IEEE Visualization, 497-504, 2004
"Loop surgery for volumetric meshes: Reeb graphs reduced to contour trees", J. Tierny, A. Gyulassy, E. Simon, V. Pascucci, IEEE Trans. on Vis. and Comp. Graph. (Proc of IEEE VIS), 15:1177-1184, 2009.
Reeb graphs can be computed from 2D data (vtkPolyData, with triangles only) or 3D data (vtkUnstructuredGrid, with tetrahedra only), sequentially (see the "Build" calls) or in streaming (see the "StreamTriangle" and "StreamTetrahedron" calls).
vtkReebGraph inherits from vtkMutableDirectedGraph.
Each vertex of a vtkReebGraph object represents a critical point of the scalar field where the connectivity of the related level set changes (creation, deletion, split or merge of connected components). A vtkIdTypeArray (called "Vertex Ids") is associated with the VertexData of a vtkReebGraph object, in order to retrieve if necessary the exact Ids of the corresponding vertices in the input mesh.
The edges of a vtkReebGraph object represent the regions of the input mesh separated by the critical contours of the field, and where the connectivity of the input field does not change. A vtkVariantArray is associated with the EdgeDta of a vtkReebGraph object and each entry of this array is a vtkAbstractArray containing the Ids of the vertices of those regions, sorted by function value (useful for flexible isosurface extraction or level set signature computation, for instance).
See Graphics/Testing/Cxx/TestReebGraph.cxx for examples of traversals and typical usages (customized simplification, skeletonization, contour spectra, etc.) of a vtkReebGraph object.
Definition at line 129 of file vtkReebGraph.h.
Definition at line 136 of file vtkReebGraph.h.
anonymous enum |
Enumerator | |
---|---|
ERR_INCORRECT_FIELD | |
ERR_NO_SUCH_FIELD | |
ERR_NOT_A_SIMPLICIAL_MESH |
Definition at line 140 of file vtkReebGraph.h.
|
protected |
|
protected |
|
static |
|
virtual |
Reimplemented from vtkMutableDirectedGraph.
|
static |
|
virtual |
Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h.
Reimplemented from vtkMutableDirectedGraph.
|
static |
|
virtual |
Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.
Reimplemented from vtkMutableDirectedGraph.
void vtkReebGraph::PrintNodeData | ( | ostream & | os, |
vtkIndent | indent | ||
) |
int vtkReebGraph::Build | ( | vtkPolyData * | mesh, |
vtkDataArray * | scalarField | ||
) |
Build the Reeb graph of the field 'scalarField' defined on the surface mesh 'mesh'. Returned values: vtkReebGraph::ERR_INCORRECT_FIELD: 'scalarField' does not have as many tuples as 'mesh' has vertices. vtkReebGraph::ERR_NOT_A_SIMPLICIAL_MESH: the input mesh 'mesh' is not a simplicial mesh (for example, the surface mesh contains quads instead of triangles).
int vtkReebGraph::Build | ( | vtkUnstructuredGrid * | mesh, |
vtkDataArray * | scalarField | ||
) |
Build the Reeb graph of the field 'scalarField' defined on the volume mesh 'mesh'. Returned values: vtkReebGraph::ERR_INCORRECT_FIELD: 'scalarField' does not have as many tuples as 'mesh' has vertices. vtkReebGraph::ERR_NOT_A_SIMPLICIAL_MESH: the input mesh 'mesh' is not a simplicial mesh.
int vtkReebGraph::Build | ( | vtkPolyData * | mesh, |
vtkIdType | scalarFieldId | ||
) |
Build the Reeb graph of the field given by the Id 'scalarFieldId', defined on the surface mesh 'mesh'. Returned values: vtkReebGraph::ERR_INCORRECT_FIELD: 'scalarField' does not have as many tuples as 'mesh' as vertices. vtkReebGraph::ERR_NOT_A_SIMPLICIAL_MESH: the input mesh 'mesh' is not a simplicial mesh (for example, the surface mesh contains quads instead of triangles). vtkReebGraph::ERR_NO_SUCH_FIELD: the scalar field given by the Id 'scalarFieldId' does not exist.
int vtkReebGraph::Build | ( | vtkUnstructuredGrid * | mesh, |
vtkIdType | scalarFieldId | ||
) |
Build the Reeb graph of the field given by the Id 'scalarFieldId', defined on the volume mesh 'mesh'. Returned values: vtkReebGraph::ERR_INCORRECT_FIELD: 'scalarField' does not have as many tuples as 'mesh' as vertices. vtkReebGraph::ERR_NOT_A_SIMPLICIAL_MESH: the input mesh 'mesh' is not a simplicial mesh. vtkReebGraph::ERR_NO_SUCH_FIELD: the scalar field given by the Id 'scalarFieldId' does not exist.
int vtkReebGraph::Build | ( | vtkPolyData * | mesh, |
const char * | scalarFieldName | ||
) |
Build the Reeb graph of the field given by the name 'scalarFieldName', defined on the surface mesh 'mesh'. Returned values: vtkReebGraph::ERR_INCORRECT_FIELD: 'scalarField' does not have as many tuples as 'mesh' as vertices. vtkReebGraph::ERR_NOT_A_SIMPLICIAL_MESH: the input mesh 'mesh' is not a simplicial mesh (for example, the surface mesh contains quads instead of triangles). vtkReebGraph::ERR_NO_SUCH_FIELD: the scalar field given by the name 'scalarFieldName' does not exist.
int vtkReebGraph::Build | ( | vtkUnstructuredGrid * | mesh, |
const char * | scalarFieldName | ||
) |
Build the Reeb graph of the field given by the name 'scalarFieldName', defined on the volume mesh 'mesh'. Returned values: vtkReebGraph::ERR_INCORRECT_FIELD: 'scalarField' does not have as many tuples as 'mesh' as vertices. vtkReebGraph::ERR_NOT_A_SIMPLICIAL_MESH: the input mesh 'mesh' is not a simplicial mesh. vtkReebGraph::ERR_NO_SUCH_FIELD: the scalar field given by the name 'scalarFieldName' does not exist.
int vtkReebGraph::StreamTriangle | ( | vtkIdType | vertex0Id, |
double | scalar0, | ||
vtkIdType | vertex1Id, | ||
double | scalar1, | ||
vtkIdType | vertex2Id, | ||
double | scalar2 | ||
) |
Streaming Reeb graph computation. Add to the streaming computation the triangle of the vtkPolyData surface mesh described by vertex0Id, scalar0 vertex1Id, scalar1 vertex2Id, scalar2 where vertexId is the Id of the vertex in the vtkPolyData structure and scalar is the corresponding scalar field value. IMPORTANT: The stream must be finalized with the "CloseStream" call.
int vtkReebGraph::StreamTetrahedron | ( | vtkIdType | vertex0Id, |
double | scalar0, | ||
vtkIdType | vertex1Id, | ||
double | scalar1, | ||
vtkIdType | vertex2Id, | ||
double | scalar2, | ||
vtkIdType | vertex3Id, | ||
double | scalar3 | ||
) |
Streaming Reeb graph computation. Add to the streaming computation the tetrahedra of the vtkUnstructuredGrid volume mesh described by vertex0Id, scalar0 vertex1Id, scalar1 vertex2Id, scalar2 vertex3Id, scalar3 where vertexId is the Id of the vertex in the vtkUnstructuredGrid structure and scalar is the corresponding scalar field value. IMPORTANT: The stream must be finalized with the "CloseStream" call.
void vtkReebGraph::CloseStream | ( | ) |
Finalize internal data structures, in the case of streaming computations (with StreamTriangle or StreamTetrahedron). After this call, no more triangle or tetrahedron can be inserted via StreamTriangle or StreamTetrahedron. IMPORTANT: This method must be called when the input stream is finished. If you need to get a snapshot of the Reeb graph during the streaming process (to parse or simplify it), do a DeepCopy followed by a CloseStream on the copy.
|
virtual |
Deep copies the data object into this graph. If it is an incompatible graph, reports an error.
Reimplemented from vtkGraph.
int vtkReebGraph::Simplify | ( | double | simplificationThreshold, |
vtkReebGraphSimplificationMetric * | simplificationMetric | ||
) |
Simplify the Reeb graph given a threshold 'simplificationThreshold' (between 0 and 1). This method is the core feature for Reeb graph multi-resolution hierarchy construction. Return the number of arcs that have been removed through the simplification process. 'simplificationThreshold' represents a "scale", under which each Reeb graph feature is considered as noise. 'simplificationThreshold' is expressed as a fraction of the scalar field overall span. It can vary from 0 (no simplification) to 1 (maximal simplification). 'simplificationMetric' is an object in charge of evaluating the importance of a Reeb graph arc at each step of the simplification process. if 'simplificationMetric' is NULL, the default strategy (persitence of the scalar field) is used. Customized simplification metric evaluation algorithm can be designed (see vtkReebGraphSimplificationMetric), enabling the user to control the definition of what should be considered as noise or signal. References: "Topological persistence and simplification", H. Edelsbrunner, D. Letscher, and A. Zomorodian, Discrete Computational Geometry, 28:511-533, 2002. "Extreme elevation on a 2-manifold", P.K. Agarwal, H. Edelsbrunner, J. Harer, and Y. Wang, ACM Symposium on Computational Geometry, pp. 357-365, 2004. "Simplifying flexible isosurfaces using local geometric measures", H. Carr, J. Snoeyink, M van de Panne, IEEE Visualization, 497-504, 2004 "Loop surgery for volumetric meshes: Reeb graphs reduced to contour trees", J. Tierny, A. Gyulassy, E. Simon, V. Pascucci, IEEE Trans. on Vis. and Comp. Graph. (Proc of IEEE VIS), 15:1177-1184,2009.
void vtkReebGraph::Set | ( | vtkMutableDirectedGraph * | g | ) |
Use a pre-defined Reeb graph (post-processing). Use with caution!
|
protected |
Definition at line 280 of file vtkReebGraph.h.