TTK VTK-filter for the computation of mandatory critical points in uncertain scalar data.
More...
|
virtual const char * | GetClassName () |
|
virtual int | IsA (const char *type) |
|
void | SetSimplificationThreshold (double threshold) |
|
void | SetOutputMinimumComponentId (int id) |
|
void | SetOutputJoinSaddleComponentId (int id) |
|
void | SetOutputSplitSaddleComponentId (int id) |
|
void | SetOutputMaximumComponentId (int id) |
|
void | setOutputAllMinimumComponents (bool outputAll) |
|
void | setOutputAllJoinSaddleComponents (bool outputAll) |
|
void | setOutputAllSplitSaddleComponents (bool outputAll) |
|
void | setOutputAllMaximumComponents (bool outputAll) |
|
void | UpdateThreadNumber () |
|
void | SetThreadNumber (int threadNumber) |
|
void | SetUseAllCores (bool useAllCores) |
|
void | SetDebugLevel (int debugLevel) |
|
void | SetCompactTriangulationCacheSize (float cacheSize) |
|
vtkDataArray * | GetOptionalArray (const bool &enforceArrayIndex, const int &arrayIndex, const std::string &arrayName, vtkDataSet *const inputData, const int &inputPort=0) |
|
vtkDataArray * | GetOrderArray (vtkDataSet *const inputData, const int scalarArrayIdx, ttk::Triangulation *triangulation, const bool getGlobalOrder=false, const int orderArrayIdx=0, const bool enforceOrderArrayIdx=false) |
|
vtkDataArray * | checkForGlobalAndComputeOrderArray (vtkDataSet *const inputData, vtkDataArray *scalarArray, const int scalarArrayIdx, const bool getGlobalOrder, vtkDataArray *orderArray, ttk::Triangulation *triangulation, const bool enforceOrderArrayIdx) |
|
vtkDataArray * | ComputeOrderArray (vtkDataSet *const inputData, vtkDataArray *scalarArray, const int scalarArrayIdx, const bool getGlobalOrder, vtkDataArray *oldOrderArray, ttk::Triangulation *triangulation) |
|
ttk::SimplexId * | GetIdentifierArrayPtr (const bool &enforceArrayIndex, const int &arrayIndex, const std::string &arrayName, vtkDataSet *const inputData, std::vector< ttk::SimplexId > &spareStorage, const int inputPort=0, const bool printErr=true) |
|
ttk::Triangulation * | GetTriangulation (vtkDataSet *dataSet) |
|
int | ProcessRequest (vtkInformation *request, vtkInformationVector **inputVectors, vtkInformationVector *outputVector) override |
|
vtkDataSet * | GetOutput () |
|
vtkDataSet * | GetOutput (int) |
|
void | SetInputData (vtkDataSet *) |
|
void | SetInputData (int, vtkDataSet *) |
|
void | AddInputData (vtkDataSet *) |
|
void | AddInputData (int, vtkDataSet *) |
|
template<typename inputType > |
int | checkEmptyMPIInput (inputType *input) |
| This method tests whether the input is a nullptr. If the computation is being done on multiple processes, it is possible that the domain of one process or more is empty, but not others, therefore in that particular case the rest of the filter will not be computed but an error message will not be sent.
|
|
| Debug () |
|
| ~Debug () override |
|
int | setWrapper (const Wrapper *wrapper) override |
|
int | printMsg (const std::string &msg, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
|
int | printMsg (const std::vector< std::string > &msgs, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
|
int | printErr (const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const |
|
int | printWrn (const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const |
|
int | printMsg (const std::string &msg, const double &progress, const double &time, const int &threads, const double &memory, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
|
int | printMsg (const std::string &msg, const double &progress, const double &time, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
|
int | printMsg (const std::string &msg, const double &progress, const double &time, const int &threads, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
|
int | printMsg (const std::string &msg, const double &progress, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::PERFORMANCE, std::ostream &stream=std::cout) const |
|
int | printMsg (const std::string &msg, const double &progress, const debug::Priority &priority, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
|
int | printMsg (const std::vector< std::vector< std::string > > &rows, const debug::Priority &priority=debug::Priority::INFO, const bool hasHeader=true, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
|
int | printMsg (const debug::Separator &separator, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::INFO, std::ostream &stream=std::cout) const |
|
int | printMsg (const debug::Separator &separator, const debug::Priority &priority, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
|
int | printMsg (const std::string &msg, const debug::Separator &separator, const debug::LineMode &lineMode=debug::LineMode::NEW, const debug::Priority &priority=debug::Priority::INFO, std::ostream &stream=std::cout) const |
|
void | setDebugMsgPrefix (const std::string &prefix) |
|
| BaseClass () |
|
virtual | ~BaseClass ()=default |
|
int | getThreadNumber () const |
|
virtual int | setThreadNumber (const int threadNumber) |
|
|
| ttkMandatoryCriticalPoints () |
|
int | FillInputPortInformation (int port, vtkInformation *info) override |
|
int | FillOutputPortInformation (int port, vtkInformation *info) override |
|
int | RequestData (vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override |
|
| ttkAlgorithm () |
|
| ~ttkAlgorithm () override |
|
void | MPIGhostPipelinePreconditioning (vtkDataSet *input) |
|
void | MPIPipelinePreconditioning (vtkDataSet *input, std::vector< int > &neighbors, std::map< int, int > &neighToId, ttk::Triangulation *triangulation=nullptr) |
|
bool | checkGlobalIdValidity (ttk::LongSimplexId *globalIds, ttk::SimplexId simplexNumber, unsigned char *ghost, int *rankArray) |
|
int | GenerateGlobalIds (vtkDataSet *input, std::unordered_map< ttk::SimplexId, ttk::SimplexId > &vertGtoL, std::vector< int > &neighborRanks, std::map< int, int > &neighborsToId) |
|
void | MPITriangulationPreconditioning (ttk::Triangulation *triangulation, vtkDataSet *input) |
|
virtual int | RequestDataObject (vtkInformation *request, vtkInformationVector **inputVectors, vtkInformationVector *outputVector) |
|
virtual int | RequestInformation (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestUpdateTime (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestUpdateTimeDependentInformation (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestUpdateExtent (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestDataNotGenerated (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
virtual int | RequestData (vtkInformation *ttkNotUsed(request), vtkInformationVector **ttkNotUsed(inputVectors), vtkInformationVector *ttkNotUsed(outputVector)) |
|
int | FillInputPortInformation (int ttkNotUsed(port), vtkInformation *ttkNotUsed(info)) override |
|
int | FillOutputPortInformation (int ttkNotUsed(port), vtkInformation *ttkNotUsed(info)) override |
|
int | printMsgInternal (const std::string &msg, const std::string &right, const std::string &filler, const debug::Priority &priority=debug::Priority::INFO, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cout) const |
|
int | printMsgInternal (const std::string &msg, const debug::Priority &priority, const debug::LineMode &lineMode, std::ostream &stream=std::cout) const |
|
int | welcomeMsg (std::ostream &stream) |
|
Protected Member Functions inherited from ttk::MandatoryCriticalPoints |
int | buildMandatoryTree (const TreeType treeType, Graph &mdtTree, std::vector< int > &mdtTreePointComponentId, std::vector< PointType > &mdtTreePointType, std::vector< double > &mdtTreePointLowInterval, std::vector< double > &mdtTreePointUpInterval, std::vector< int > &mdtTreeEdgeSwitchable, const std::vector< int > &mdtExtremumParentSaddle, const std::vector< int > &mdtSaddleParentSaddle, const std::vector< bool > &isExtremumSimplified, const std::vector< bool > &isSaddleSimplified, const std::vector< std::pair< double, double > > &extremumInterval, const std::vector< std::pair< int, int > > &mandatorySaddleVertices, const int extremaNumber, const int saddleNumber, const PointType extremumType, const PointType saddleType, const PointType otherExtremumType, const double globalOtherExtremumValue) const |
|
int | buildPairs (const TreeType treeType, const std::vector< std::pair< int, int > > &saddleList, const std::vector< std::vector< int > > &mergedExtrema, const std::vector< std::pair< double, double > > &extremumInterval, SubLevelSetTree &lowerTree, SubLevelSetTree &upperTree, std::vector< std::pair< std::pair< int, int >, double > > &extremaSaddlePair) const |
| TODO : Replace SubLevelSetTrees by scalar fields for vertex value.
|
|
int | computePlanarLayout (const TreeType &treeType, const Graph &mdtTree, const std::vector< PointType > &mdtTreePointType, const std::vector< double > &mdtTreePointLowInterval, const std::vector< double > &mdtTreePointUpInterval, std::vector< double > &xCoord, std::vector< double > &yCoord) const |
|
int | computeExtremumComponent (const PointType &pointType, const SubLevelSetTree &tree, const int seedVertexId, const std::vector< double > &vertexScalars, std::vector< int > &componentVertexList) const |
|
template<typename triangulationType > |
int | computeSaddleComponent (const int componentId, const PointType &pointType, const std::vector< std::pair< int, int > > &mandatorySaddleVertex, const std::vector< double > &lowVertexScalars, const std::vector< double > &upVertexInterval, std::vector< int > &componentVertexList, const triangulationType &triangulation) const |
|
int | enumerateMandatoryExtrema (const PointType pointType, SubLevelSetTree &firstTree, SubLevelSetTree &secondTree, std::vector< int > &mandatoryExtremum, std::vector< std::pair< double, double > > &criticalInterval) const |
|
int | enumerateMandatorySaddles (const PointType pointType, SubLevelSetTree &lowerTree, SubLevelSetTree &upperTree, const std::vector< int > &mandatoryExtremumVertex, std::vector< std::pair< int, int > > &mandatorySaddleVertex, std::vector< std::vector< int > > &mandatoryMergedExtrema) |
| TODO : Multiplicity.
|
|
int | getSubTreeRootSuperArcId (const SubLevelSetTree *tree, const int &startingSuperArcId, const double &targetValue) const |
|
void | getSubTreeSuperArcIds (const SubLevelSetTree *tree, const int &rootSuperArcId, std::vector< int > &subTreeSuperArcId) const |
|
int | getVertexSuperArcId (const int &vertexId, const SubLevelSetTree *tree) const |
|
int | simplify (const double normalizedThreshold, const TreeType treeType, const std::vector< std::pair< std::pair< int, int >, double > > &extremaSaddlePair, const std::vector< std::vector< int > > &mergedExtrema, const int numberOfExtrema, std::vector< bool > &extremumSimplified, std::vector< bool > &saddleSimplified, std::vector< int > &extremumParentSaddle, std::vector< int > &saddleParentSaddle) const |
|
| MandatoryCriticalPoints () |
|
int | buildJoinTreePlanarLayout () |
|
int | buildSplitTreePlanarLayout () |
|
template<typename triangulationType > |
int | buildSubTrees (const triangulationType &triangulation) |
|
template<class dataType , typename triangulationType > |
int | execute (const triangulationType &triangulation) |
|
template<class dataType > |
int | fillVertexScalars (void *upperData, void *lowerData) |
|
int | findCommonAncestorNodeId (const SubLevelSetTree *tree, const int &vertexId0, const int &vertexId1) const |
|
void | flush () |
|
double | getGlobalMaximum () const |
|
double | getGlobalMinimum () const |
|
const Graph * | getJoinTreeGraph () |
|
const std::vector< double > * | getJoinTreeXLayout () |
|
const std::vector< double > * | getJoinTreeYLayout () |
|
const Graph * | getSplitTreeGraph () |
|
const std::vector< double > * | getSplitTreeXLayout () |
|
const std::vector< double > * | getSplitTreeYLayout () |
|
const std::vector< int > * | getMdtJoinTreePointComponentId () const |
|
const std::vector< int > * | getMdtSplitTreePointComponentId () const |
|
const std::vector< PointType > * | getMdtJoinTreePointType () const |
|
const std::vector< PointType > * | getMdtSplitTreePointType () const |
|
const std::vector< double > * | getMdtJoinTreePointLowInterval () const |
|
const std::vector< double > * | getMdtSplitTreePointLowInterval () const |
|
const std::vector< double > * | getMdtJoinTreePointUpInterval () const |
|
const std::vector< double > * | getMdtSplitTreePointUpInterval () const |
|
const std::vector< int > * | getMdtJoinTreeEdgeSwitchable () |
|
const std::vector< int > * | getMdtSplitTreeEdgeSwitchable () |
|
bool | areSaddlesSwitchables (const TreeType treeType, const int &firstId, const int &secondId) const |
|
template<typename triangulationType > |
int | computeAllJoinSaddle (const triangulationType &triangulation) |
|
int | computeAllMaxima () |
|
int | computeAllMinima () |
|
template<typename triangulationType > |
int | computeAllSplitSaddle (const triangulationType &triangulation) |
|
template<typename triangulationType > |
int | computeJoinSaddle (const int &id, const triangulationType &triangulation, const bool &reset=true) |
|
int | computeMaximum (const int &id, const bool &reset=true, const bool &ttkNotUsed(parallel)=true) |
|
int | computeMinimum (const int &id, const bool &reset=true, const bool &ttkNotUsed(parallel)=true) |
|
template<typename triangulationType > |
int | computeSplitSaddle (const int &id, const triangulationType &triangulation, const bool &reset=true) |
|
int | setDebugLevel (const int &debugLevel) override |
|
int | setLowerBoundFieldPointer (void *data) |
|
int | setOutputJoinSaddleDataPointer (void *data) |
|
int | setOutputMaximumDataPointer (void *data) |
|
int | setOutputMinimumDataPointer (void *data) |
|
int | setOutputSplitSaddleDataPointer (void *data) |
|
int | setUpperBoundFieldPointer (void *data) |
|
int | setSimplificationThreshold (double normalizedThreshold) |
|
int | setSoSoffsets (int *offsets=nullptr) |
|
void | preconditionTriangulation (AbstractTriangulation *const triangulation) |
|
int | setVertexNumber (const int &vertexNumber) |
|
int | setVertexPosition (const int &i, const double point[3]) |
|
int | simplifyJoinTree () |
|
int | simplifySplitTree () |
|
|
Protected Types inherited from ttk::MandatoryCriticalPoints |
enum class | PointType : unsigned char { Minimum = 0
, JoinSaddle = 1
, SplitSaddle = 2
, Maximum = 3
} |
|
enum class | TreeType { JoinTree
, SplitTree
} |
|
float | CompactTriangulationCacheSize {0.2f} |
|
int | debugLevel_ |
|
std::string | debugMsgPrefix_ |
|
std::string | debugMsgNamePrefix_ |
|
bool | lastObject_ |
|
int | threadNumber_ |
|
Wrapper * | wrapper_ |
|
Protected Attributes inherited from ttk::MandatoryCriticalPoints |
void * | inputUpperBoundField_ {} |
| Void pointer to the input upper bound scalar field.
|
|
void * | inputLowerBoundField_ {} |
| Void pointer to the input lower bound scalar field.
|
|
int * | outputMandatoryMinimum_ {} |
| Void pointer to the output mandatory minima components.
|
|
int * | outputMandatoryJoinSaddle_ {} |
| Void pointer to the output mandatory join saddles components.
|
|
int * | outputMandatorySplitSaddle_ {} |
| Void pointer to the output mandatory split saddles components.
|
|
int * | outputMandatoryMaximum_ {} |
| Void pointer to the output mandatory maxima components.
|
|
int | vertexNumber_ {} |
| Number of vertices.
|
|
std::vector< std::vector< double > > | vertexPositions_ {} |
| Position (x,y,z) of each vertex.
|
|
std::vector< int > | vertexSoSoffsets_ {} |
| Offsets.
|
|
std::vector< double > | upperVertexScalars_ {} |
| Copy of the input upper scalar field converted in double.
|
|
std::vector< double > | lowerVertexScalars_ {} |
| Copy of the input lower scalar field converted in double.
|
|
SubLevelSetTree | upperJoinTree_ {} |
| Join tree of the upper bound scalar field.
|
|
SubLevelSetTree | lowerJoinTree_ {} |
| Join tree of the lower bound scalar field.
|
|
SubLevelSetTree | upperSplitTree_ {} |
| Split tree of the upper bound scalar field.
|
|
SubLevelSetTree | lowerSplitTree_ {} |
| Split tree of the lower bound scalar field.
|
|
std::vector< int > | upperMinimumList_ {} |
| List of vertex id of the minima in the upper bound scalar field.
|
|
std::vector< int > | lowerMinimumList_ {} |
| List of vertex id of the minima in the lower bound scalar field.
|
|
std::vector< int > | upperMaximumList_ {} |
| List of vertex id of the maxima in the upper bound scalar field.
|
|
std::vector< int > | lowerMaximumList_ {} |
| List of vertex id of the maxima in the lower bound scalar field.
|
|
std::vector< int > | mandatoryMinimumVertex_ {} |
| Mandatory vertex for each minimum component.
|
|
std::vector< int > | mandatoryMaximumVertex_ {} |
| Mandatory vertex for each maximum component.
|
|
std::vector< std::pair< double, double > > | mandatoryMinimumInterval_ {} |
| Critical interval for each minimum component.
|
|
std::vector< std::pair< double, double > > | mandatoryMaximumInterval_ {} |
| Critical interval for each maximum component.
|
|
std::vector< std::pair< int, int > > | mandatoryJoinSaddleVertex_ {} |
| Pair of mandatory vertices for each join saddle component.
|
|
std::vector< std::pair< int, int > > | mandatorySplitSaddleVertex_ {} |
| Pair of mandatory vertices for each split saddle component.
|
|
std::vector< std::vector< int > > | mergedMaximaId_ {} |
|
std::vector< std::vector< int > > | mergedMinimaId_ {} |
|
std::vector< std::pair< std::pair< int, int >, double > > | mdtMinJoinSaddlePair_ {} |
| Pairs ( (M,S), d(M,S) ) Of minima and join saddles.
|
|
std::vector< std::pair< std::pair< int, int >, double > > | mdtMaxSplitSaddlePair_ {} |
| Pairs ( (M,S), d(M,S) ) Of maxima and split saddles.
|
|
double | normalizedThreshold_ {0.0} |
| Value of the simplification threshold.
|
|
std::vector< bool > | isMdtMinimumSimplified_ |
|
std::vector< bool > | isMdtJoinSaddleSimplified_ {} |
|
std::vector< bool > | isMdtSplitSaddleSimplified_ {} |
|
std::vector< bool > | isMdtMaximumSimplified_ {} |
|
std::vector< int > | mdtMinimumParentSaddleId_ {} |
|
std::vector< int > | mdtJoinSaddleParentSaddleId_ {} |
|
std::vector< int > | mdtSplitSaddleParentSaddleId_ {} |
|
std::vector< int > | mdtMaximumParentSaddleId_ {} |
|
Graph | mdtJoinTree_ {} |
|
Graph | mdtSplitTree_ {} |
|
std::vector< int > | mdtJoinTreePointComponentId_ {} |
|
std::vector< int > | mdtSplitTreePointComponentId_ {} |
|
std::vector< PointType > | mdtJoinTreePointType_ {} |
|
std::vector< PointType > | mdtSplitTreePointType_ {} |
|
std::vector< double > | mdtJoinTreePointLowInterval_ {} |
|
std::vector< double > | mdtSplitTreePointLowInterval_ {} |
|
std::vector< double > | mdtJoinTreePointUpInterval_ {} |
|
std::vector< double > | mdtSplitTreePointUpInterval_ {} |
|
std::vector< int > | mdtJoinTreeEdgeSwitchable_ {} |
|
std::vector< int > | mdtSplitTreeEdgeSwitchable_ {} |
|
std::vector< double > | mdtJoinTreePointXCoord_ {} |
|
std::vector< double > | mdtSplitTreePointXCoord_ {} |
|
std::vector< double > | mdtJoinTreePointYCoord_ {} |
|
std::vector< double > | mdtSplitTreePointYCoord_ {} |
|
double | globalMinimumValue_ {} |
|
double | globalMaximumValue_ {} |
|
std::vector< std::vector< int > > | mandatoryMaximumComponentVertices_ {} |
| List of the vertices forming each of the mandatory maximum components.
|
|
std::vector< std::vector< int > > | mandatoryMinimumComponentVertices_ {} |
|
std::vector< std::vector< int > > | mandatoryJoinSaddleComponentVertices_ {} |
|
std::vector< std::vector< int > > | mandatorySplitSaddleComponentVertices_ {} |
|
static COMMON_EXPORTS debug::LineMode | lastLineMode = ttk::debug::LineMode::NEW |
|
TTK VTK-filter for the computation of mandatory critical points in uncertain scalar data.
- Author
- Michael Michaux micha.nosp@m.uxmi.nosp@m.chael.nosp@m.89@g.nosp@m.mail..nosp@m.com
-
Julien Tierny julie.nosp@m.n.ti.nosp@m.erny@.nosp@m.lip6.nosp@m..fr
- Date
- August 2016.
This filter computes the mandatory critical points of uncertain scalar fields defined on triangulations. The input uncertain data is represented by reliable bound fields for each vertex. In particular, the input geometry must be associated with two point data scalar fields, representing the lower and upper bounds for each vertex.
The output is a domain segmentation into the mandatory critical points.
- Parameters
-
Input | Input uncertain scalar field represented by lower and upper bounds, either 2D or 3D, either regular grid or triangulation (vtkDataSet) triangulation (vtkDataSet) |
Output0 | Output mandatory minimum segmentation (vtkDataSet) |
Output1 | Output mandatory join saddle segmentation (vtkDataSet) |
Output2 | Output mandatory split saddle segmentation (vtkDataSet) |
Output3 | Output mandatory maximum segmentation (vtkDataSet) |
Output4 | Output mandatory join tree (vtkUnstructuredGrid) |
Output5 | Output mandatory split tree (vtkUnstructuredGrid) |
This filter can be used as any other VTK filter (for instance, by using the sequence of calls SetInputData(), Update(), GetOutput()).
The input data arrays needs to be specified via the standard VTK call vtkAlgorithm::SetInputArrayToProcess() with the following parameters:
- Parameters
-
idx | 0 for the lowerBoundField, 1 for the upperBoundField |
port | 0 (FIXED: first port) |
connection | 0 (FIXED: first connection) |
fieldAssociation | 0 (FIXED: point data) |
arrayName | (DYNAMIC: string identifier of the input array) |
See the related ParaView example state files for usage examples within a VTK pipeline.
Related publication
"Mandatory Critical Points of 2D Uncertain Scalar Fields"
David Guenther, Joseph Salmon, Julien Tierny
Proc. of EuroVis 2014.
Computer Graphics Forum, 2014.
- See also
- ttk::MandatoryCriticalPoints
-
vtkUncertainDataEstimator
Online examples:
Definition at line 65 of file ttkMandatoryCriticalPoints.h.