#include <vtkMultiThreshold.h>
This filter can be substituted for a chain of several vtkThreshold filters and can also perform more sophisticated subsetting operations. It generates a vtkMultiBlockDataSet as its output. This multiblock dataset contains a vtkUnstructuredGrid for each thresholded subset you request. A thresholded subset can be a set defined by an interval over a point or cell attribute of the mesh; these subsets are called IntervalSets. A thresholded subset can also be a boolean combination of one or more IntervalSets; these subsets are called BooleanSets. BooleanSets allow complex logic since their output can depend on multiple intervals over multiple variables defined on the input mesh. This is useful because it eliminates the need for thresholding several times and then appending the results, as can be required with vtkThreshold when one wants to remove some range of values (e.g., a notch filter). Cells are not repeated when they belong to more than one interval unless those intervals have different output grids.
Another advantage this filter provides over vtkThreshold is the ability to threshold on non-scalar (i.e., vector, tensor, etc.) attributes without first computing an array containing some norm of the desired attribute. vtkMultiThreshold provides , , and norms.
This filter makes a distinction between intermediate subsets and subsets that will be output to a grid. Each intermediate subset you create with AddIntervalSet or AddBooleanSet is given a unique integer identifier (via the return values of these member functions). If you wish for a given set to be output, you must call OutputSet and pass it one of these identifiers. The return of OutputSet is the integer index of the output set in the multiblock dataset created by this filter.
For example, if an input mesh defined three attributes T, P, and s, one might wish to find cells that satisfy "T < 320 [K] && ( P > 101 [kPa] || s < 0.1 [kJ/kg/K] )". To accomplish this with a vtkMultiThreshold filter,
vtkMultiThreshold* thr; int intervalSets[3];
intervalSets[0] = thr->AddIntervalSet( vtkMath::NegInf(), 320., vtkMultiThreshold::CLOSED, vtkMultiThreshold::OPEN, vtkDataObject::FIELD_ASSOCIATION_POINTS, "T", 0, 1 ); intervalSets[1] = thr->AddIntervalSet( 101., vtkMath::Inf(), vtkMultiThreshold::OPEN, vtkMultiThreshold::CLOSED, vtkDataObject::FIELD_ASSOCIATION_CELLS, "P", 0, 1 ); intervalSets[2] = thr->AddIntervalSet( vtkMath::NegInf(), 0.1, vtkMultiThreshold::CLOSED, vtkMultiThreshold::OPEN, vtkDataObject::FIELD_ASSOCIATION_POINTS, "s", 0, 1 );
int intermediate = thr->AddBooleanSet( vtkMultiThreshold::OR, 2, &intervalSets[1] );
int intersection[2]; intersection[0] = intervalSets[0]; intersection[1] = intermediate; int outputSet = thr->AddBooleanSet( vtkMultiThreshold::AND, 2, intersection );
int outputGridIndex = thr->OutputSet( outputSet ); thr->Update();The result of this filter will be a multiblock dataset that contains a single child with the desired cells. If we had also called
thr->OutputSet( intervalSets[0] );
, there would be two child meshes and one would contain all cells with T < 320 [K]. In that case, the output can be represented by this graph Definition at line 118 of file vtkMultiThreshold.h.
Public Types | |
enum | Closure { OPEN = 0, CLOSED = 1 } |
Whether the endpoint value of an interval should be included or excluded. More... | |
enum | Norm { LINFINITY_NORM = -3, L2_NORM = -2, L1_NORM = -1 } |
Norms that can be used to threshold vector attributes. More... | |
enum | SetOperation { AND, OR, XOR, WOR, NAND } |
Operations that can be performed on sets to generate another set. Most of these operators take 2 or more input sets. More... | |
typedef vtkMultiBlockDataSetAlgorithm | Superclass |
typedef double(* | TupleNorm )(vtkDataArray *arr, vtkIdType tuple, int component) |
A pointer to a function that returns a norm (or a single component) of a tuple with 1 or more components. | |
Public Member Functions | |
virtual const char * | GetClassName () |
virtual int | IsA (const char *type) |
virtual void | PrintSelf (ostream &os, vtkIndent indent) |
int | AddBooleanSet (int operation, int numInputs, int *inputs) |
int | OutputSet (int setId) |
void | Reset () |
int | AddIntervalSet (double xmin, double xmax, int omin, int omax, int assoc, const char *arrayName, int component, int allScalars) |
int | AddIntervalSet (double xmin, double xmax, int omin, int omax, int assoc, int attribType, int component, int allScalars) |
int | AddLowpassIntervalSet (double xmax, int assoc, const char *arrayName, int component, int allScalars) |
int | AddHighpassIntervalSet (double xmin, int assoc, const char *arrayName, int component, int allScalars) |
int | AddBandpassIntervalSet (double xmin, double xmax, int assoc, const char *arrayName, int component, int allScalars) |
int | AddNotchIntervalSet (double xlo, double xhi, int assoc, const char *arrayName, int component, int allScalars) |
Static Public Member Functions | |
static int | IsTypeOf (const char *type) |
static vtkMultiThreshold * | SafeDownCast (vtkObject *o) |
static vtkMultiThreshold * | New () |
Protected Types | |
typedef vtkstd::vector < Interval * > | IntervalList |
A list of pointers to IntervalSets. | |
typedef vtkstd::map< NormKey, IntervalList > | RuleMap |
A map describing the IntervalSets that share a common attribute and norm. | |
typedef vtkstd::vector< int > | TruthTreeValues |
typedef vtkstd::vector < TruthTreeValues > | TruthTree |
enum | Ruling { INCONCLUSIVE = -1, INCLUDE = -2, EXCLUDE = -3 } |
Protected Member Functions | |
vtkMultiThreshold () | |
virtual | ~vtkMultiThreshold () |
virtual int | RequestData (vtkInformation *, vtkInformationVector **, vtkInformationVector *) |
virtual int | FillInputPortInformation (int port, vtkInformation *info) |
int | AddIntervalSet (NormKey &nk, double xmin, double xmax, int omin, int omax) |
void | PrintGraph (ostream &os) |
vtkMultiThreshold (const vtkMultiThreshold &) | |
void | operator= (const vtkMultiThreshold &) |
void | UpdateDependents (int id, vtkstd::set< int > &unresolvedOutputs, TruthTreeValues &setStates, vtkCellData *inCellData, vtkIdType cellId, vtkGenericCell *cell, vtkstd::vector< vtkUnstructuredGrid * > &outv) |
Protected Attributes | |
int | NextArrayIndex |
int | NumberOfOutputs |
RuleMap | IntervalRules |
vtkstd::vector< Set * > | Sets |
TruthTree | DependentSets |
Classes | |
class | BooleanSet |
A subset of a mesh represented as a boolean set operation. More... | |
class | Interval |
A subset of a mesh represented by a range of acceptable attribute values. More... | |
class | NormKey |
A class with comparison operator used to index input array norms used in threshold rules. More... | |
class | Set |
A base class for representing threshold sets. More... |
Reimplemented from vtkMultiBlockDataSetAlgorithm.
Definition at line 121 of file vtkMultiThreshold.h.
typedef double(* vtkMultiThreshold::TupleNorm)(vtkDataArray *arr, vtkIdType tuple, int component) |
A pointer to a function that returns a norm (or a single component) of a tuple with 1 or more components.
typedef vtkstd::vector<Interval*> vtkMultiThreshold::IntervalList [protected] |
typedef vtkstd::map<NormKey,IntervalList> vtkMultiThreshold::RuleMap [protected] |
A map describing the IntervalSets that share a common attribute and norm.
Definition at line 389 of file vtkMultiThreshold.h.
typedef vtkstd::vector<int> vtkMultiThreshold::TruthTreeValues [protected] |
Definition at line 391 of file vtkMultiThreshold.h.
typedef vtkstd::vector<TruthTreeValues> vtkMultiThreshold::TruthTree [protected] |
Definition at line 392 of file vtkMultiThreshold.h.
Whether the endpoint value of an interval should be included or excluded.
Definition at line 127 of file vtkMultiThreshold.h.
Norms that can be used to threshold vector attributes.
LINFINITY_NORM | Use the norm for the specified array threshold. |
L2_NORM | Use the norm for the specified array threshold. |
L1_NORM | Use the norm for the specified array threshold. |
Definition at line 132 of file vtkMultiThreshold.h.
Operations that can be performed on sets to generate another set. Most of these operators take 2 or more input sets.
Definition at line 138 of file vtkMultiThreshold.h.
enum vtkMultiThreshold::Ruling [protected] |
When an interval is evaluated, its value is used to update a truth table. If its value allows the output of the truth table to be determined, then either INCLUDE or EXCLUDE is returned. Otherwise, INCONCLUSIVE is returned and more intervals must be evaluated. As an example, consider the ruleset {A>10} & ( {6<B<8} | {C==12} ). We first evaluate A. Say A is 100. This makes the first rule true, but the value of the rule *set* is still indeterminate. INCONCLUSIVE is returned. Next we consider B. If B is 7, then INCLUDE will be returned and there is no need to examine C. If B is 0, then INCONCLUSIVE is returned again and we must examine C. If C is 12, then INCLUDE is returned, otherwise EXCLUDE is returned.
Definition at line 360 of file vtkMultiThreshold.h.
vtkMultiThreshold::vtkMultiThreshold | ( | ) | [protected] |
virtual vtkMultiThreshold::~vtkMultiThreshold | ( | ) | [protected, virtual] |
vtkMultiThreshold::vtkMultiThreshold | ( | const vtkMultiThreshold & | ) | [protected] |
virtual const char* vtkMultiThreshold::GetClassName | ( | ) | [virtual] |
Reimplemented from vtkMultiBlockDataSetAlgorithm.
static int vtkMultiThreshold::IsTypeOf | ( | const char * | name | ) | [static] |
Return 1 if this class type 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 vtkMultiBlockDataSetAlgorithm.
virtual int vtkMultiThreshold::IsA | ( | const char * | name | ) | [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 vtkMultiBlockDataSetAlgorithm.
static vtkMultiThreshold* vtkMultiThreshold::SafeDownCast | ( | vtkObject * | o | ) | [static] |
Reimplemented from vtkMultiBlockDataSetAlgorithm.
static vtkMultiThreshold* vtkMultiThreshold::New | ( | ) | [static] |
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
Reimplemented from vtkMultiBlockDataSetAlgorithm.
virtual void vtkMultiThreshold::PrintSelf | ( | ostream & | os, | |
vtkIndent | indent | |||
) | [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 vtkMultiBlockDataSetAlgorithm.
int vtkMultiThreshold::AddIntervalSet | ( | double | xmin, | |
double | xmax, | |||
int | omin, | |||
int | omax, | |||
int | assoc, | |||
const char * | arrayName, | |||
int | component, | |||
int | allScalars | |||
) |
Add a mesh subset to be computed by thresholding an attribute of the input mesh. The subset can then be added to an output mesh with OuputSet() or combined with other sets using AddBooleanSet. If you wish to include all cells with values below some number a, call with xmin set to vtkMath::NegInf() and xmax set to a. Similarly, if you wish to include all cells with values above some number a, call with xmin set to a and xmax set to vtkMath::Inf(). When specifying Inf() or NegInf() for an endpoint, it does not matter whether you specify and open or closed endpoint. When creating intervals, any integers can be used for the IDs of output meshes. All that matters is that the same ID be used if intervals should output to the same mesh. The outputs are ordered with ascending IDs in output block 0. It is possible to specify an invalid interval, in which case these routines will return -1. Invalid intervals occur when - an array does not exist, - center is invalid, - xmin == xmax and omin and/or omax are vtkMultiThreshold::OPEN, or - xmin > xmax. - xmin or xmax is not a number (i.e., IEEE NaN). Having both xmin and xmax equal NaN is allowed. vtkMath provides a portable way to specify IEEE infinities and Nan. Note that specifying an interval completely out of the bounds of an attribute is considered valid. In fact, it is occasionally useful to create a closed interval with both endpoints set to or both endpoints set to in order to locate cells with problematic values.
xmin | The minimum attribute value | |
xmax | The maximum attribute value | |
omin | Whether the interval should be open or closed at xmin. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED. | |
omax | Whether the interval should be open or closed at xmax. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED. | |
assoc | One of vtkDataObject::FIELD_ASSOCIATION_CELLS or vtkDataObject::FIELD_ASSOCIATION_POINTS indicating whether a point or cell array should be used. | |
arrayName | The name of the array to use for thresholding | |
attribType | The attribute to use for thresholding. One of vtkDataSetAttributes::SCALARS, VECTORS, TENSORS, NORMALS, TCOORDS, or GLOBALIDS. | |
component | The number of the component to threshold on or one of the following enumerants for norms: LINFINITY_NORM, L2_NORM, L1_NORM. | |
allScalars | When center is vtkDataObject::FIELD_ASSOCIATION_POINTS, must all scalars be in the interval for the cell to be passed to the output, or just a single point's scalar? |
int vtkMultiThreshold::AddIntervalSet | ( | double | xmin, | |
double | xmax, | |||
int | omin, | |||
int | omax, | |||
int | assoc, | |||
int | attribType, | |||
int | component, | |||
int | allScalars | |||
) |
Add a mesh subset to be computed by thresholding an attribute of the input mesh. The subset can then be added to an output mesh with OuputSet() or combined with other sets using AddBooleanSet. If you wish to include all cells with values below some number a, call with xmin set to vtkMath::NegInf() and xmax set to a. Similarly, if you wish to include all cells with values above some number a, call with xmin set to a and xmax set to vtkMath::Inf(). When specifying Inf() or NegInf() for an endpoint, it does not matter whether you specify and open or closed endpoint. When creating intervals, any integers can be used for the IDs of output meshes. All that matters is that the same ID be used if intervals should output to the same mesh. The outputs are ordered with ascending IDs in output block 0. It is possible to specify an invalid interval, in which case these routines will return -1. Invalid intervals occur when - an array does not exist, - center is invalid, - xmin == xmax and omin and/or omax are vtkMultiThreshold::OPEN, or - xmin > xmax. - xmin or xmax is not a number (i.e., IEEE NaN). Having both xmin and xmax equal NaN is allowed. vtkMath provides a portable way to specify IEEE infinities and Nan. Note that specifying an interval completely out of the bounds of an attribute is considered valid. In fact, it is occasionally useful to create a closed interval with both endpoints set to or both endpoints set to in order to locate cells with problematic values.
xmin | The minimum attribute value | |
xmax | The maximum attribute value | |
omin | Whether the interval should be open or closed at xmin. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED. | |
omax | Whether the interval should be open or closed at xmax. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED. | |
assoc | One of vtkDataObject::FIELD_ASSOCIATION_CELLS or vtkDataObject::FIELD_ASSOCIATION_POINTS indicating whether a point or cell array should be used. | |
arrayName | The name of the array to use for thresholding | |
attribType | The attribute to use for thresholding. One of vtkDataSetAttributes::SCALARS, VECTORS, TENSORS, NORMALS, TCOORDS, or GLOBALIDS. | |
component | The number of the component to threshold on or one of the following enumerants for norms: LINFINITY_NORM, L2_NORM, L1_NORM. | |
allScalars | When center is vtkDataObject::FIELD_ASSOCIATION_POINTS, must all scalars be in the interval for the cell to be passed to the output, or just a single point's scalar? |
int vtkMultiThreshold::AddLowpassIntervalSet | ( | double | xmax, | |
int | assoc, | |||
const char * | arrayName, | |||
int | component, | |||
int | allScalars | |||
) | [inline] |
These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).
Definition at line 430 of file vtkMultiThreshold.h.
int vtkMultiThreshold::AddHighpassIntervalSet | ( | double | xmin, | |
int | assoc, | |||
const char * | arrayName, | |||
int | component, | |||
int | allScalars | |||
) | [inline] |
These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).
Definition at line 435 of file vtkMultiThreshold.h.
int vtkMultiThreshold::AddBandpassIntervalSet | ( | double | xmin, | |
double | xmax, | |||
int | assoc, | |||
const char * | arrayName, | |||
int | component, | |||
int | allScalars | |||
) | [inline] |
These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).
Definition at line 440 of file vtkMultiThreshold.h.
int vtkMultiThreshold::AddNotchIntervalSet | ( | double | xlo, | |
double | xhi, | |||
int | assoc, | |||
const char * | arrayName, | |||
int | component, | |||
int | allScalars | |||
) | [inline] |
These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).
Definition at line 446 of file vtkMultiThreshold.h.
int vtkMultiThreshold::AddBooleanSet | ( | int | operation, | |
int | numInputs, | |||
int * | inputs | |||
) |
Create a new mesh subset using boolean operations on pre-existing sets.
int vtkMultiThreshold::OutputSet | ( | int | setId | ) |
Create an output mesh containing a boolean or interval subset of the input mesh.
void vtkMultiThreshold::Reset | ( | ) |
Remove all the intervals currently defined.
virtual int vtkMultiThreshold::RequestData | ( | vtkInformation * | , | |
vtkInformationVector ** | , | |||
vtkInformationVector * | ||||
) | [protected, virtual] |
This function performs the actual thresholding.
Reimplemented from vtkMultiBlockDataSetAlgorithm.
virtual int vtkMultiThreshold::FillInputPortInformation | ( | int | port, | |
vtkInformation * | info | |||
) | [protected, virtual] |
We accept any mesh that is descended from vtkPointSet. In the future, it is possible to accept more types but this would require us to generate a new vtkPoints object for each output mesh.
Reimplemented from vtkMultiBlockDataSetAlgorithm.
void vtkMultiThreshold::UpdateDependents | ( | int | id, | |
vtkstd::set< int > & | unresolvedOutputs, | |||
TruthTreeValues & | setStates, | |||
vtkCellData * | inCellData, | |||
vtkIdType | cellId, | |||
vtkGenericCell * | cell, | |||
vtkstd::vector< vtkUnstructuredGrid * > & | outv | |||
) | [protected] |
Recursively update the setStates and unresolvedOutputs vectors based on this->DependentSets.
int vtkMultiThreshold::AddIntervalSet | ( | NormKey & | nk, | |
double | xmin, | |||
double | xmax, | |||
int | omin, | |||
int | omax | |||
) | [protected] |
A utility method called by the public AddInterval members.
void vtkMultiThreshold::PrintGraph | ( | ostream & | os | ) | [protected] |
Print out a graphviz-formatted text description of all the sets.
void vtkMultiThreshold::operator= | ( | const vtkMultiThreshold & | ) | [protected] |
int vtkMultiThreshold::NextArrayIndex [protected] |
A variable used to store the next index to use when calling SetInputArrayToProcess. Its value is stored in an interval's ArrayIndex member and used during RequestData to retrieve a pointer to the actual array.
Definition at line 380 of file vtkMultiThreshold.h.
int vtkMultiThreshold::NumberOfOutputs [protected] |
The number of output datasets.
Definition at line 383 of file vtkMultiThreshold.h.
RuleMap vtkMultiThreshold::IntervalRules [protected] |
A set of threshold rules sorted by the attribute+norm to which they are applied.
Definition at line 396 of file vtkMultiThreshold.h.
vtkstd::vector<Set*> vtkMultiThreshold::Sets [protected] |
A list of rules keyed by their unique integer ID. This list is used to quickly determine whether interval membership implies membership in a given output mesh.
Definition at line 401 of file vtkMultiThreshold.h.
TruthTree vtkMultiThreshold::DependentSets [protected] |
A list of boolean sets whose values depend on the given set. Each time an interval is evaluated for a cell, the list of dependent boolean sets contained here is updated. Any boolean operations whose truth values are decided are then marked and their dependent sets are examined.
Definition at line 408 of file vtkMultiThreshold.h.