comac_desk_app/ThirdpartyLibs/Libs/windows-x86_64/vtk/include/vtkSelectionSource.h

430 lines
14 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkSelectionSource.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkSelectionSource
* @brief Generate selection from given set of ids
*
* vtkSelectionSource generates a vtkSelection from a set of
* (piece id, cell id) pairs. It will only generate the selection values
* that match UPDATE_PIECE_NUMBER (i.e. piece == UPDATE_PIECE_NUMBER).
* vtkSelectionSource can generate a vtkSelection with one or many
* vtkSelectionNodes.
*
* To generate only one vtkSelectionNode, use the functions which don't pass a nodeId
* to set/get the node information. To generate more than one vtkSelectionNode, use the
* SetNumberOfNodes/RemoveNode to manipulate the number of nodes,
* and use the functions that pass the nodeId to set the node information
* The different nodes can have different contentType per node but the
* fieldType/elementType is common across all nodes.
*
* To define the relation between the nodes you can use SetExpression. If non-empty,
* the expression is a boolean expression that defines how the selection nodes present
* in the selection are to be combined together to form the selection. If no expression
* is specified and there are multiple selection nodes, then the default
* expression simply combines all the selection nodes using an `or` operator.
*
* User-supplied, application-specific selections (with a ContentType of
* vtkSelectionNode::USER) are not supported.
*/
#ifndef vtkSelectionSource_h
#define vtkSelectionSource_h
#include "vtkFiltersSourcesModule.h" // For export macro
#include "vtkSelectionAlgorithm.h"
#include "vtkSelectionNode.h" // For FieldType
#include <memory> // for std::shared_ptr
#include <vector> // for std::vector
class VTKFILTERSSOURCES_EXPORT vtkSelectionSource : public vtkSelectionAlgorithm
{
public:
static vtkSelectionSource* New();
vtkTypeMacro(vtkSelectionSource, vtkSelectionAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@{
/**
* Set/Get the number of nodes that will be created for the generated selection.
*
* The default is 1.
*/
void SetNumberOfNodes(unsigned int numberOfNodes);
unsigned int GetNumberOfNodes() { return static_cast<unsigned int>(this->NodesInfo.size()); }
///@}
///@{
/**
* Remove a selection node.
*/
void RemoveNode(unsigned int idx);
void RemoveNode(const char* name);
///@}
/**
* Remove all selection nodes.
*/
virtual void RemoveAllNodes();
///@{
/**
* Set/Get the expression that defines the boolean expression to combine the
* selection nodes. Expression consists of node name identifiers, `|` for
* boolean-or, '^' for boolean-xor, '&' for boolean and, '!' for boolean not,
* and parenthesis `(` and `)`. If you want to set the expression, be sure to
* define the node names. If no expression is specified and there are multiple
* selection nodes, then the default expression simply combines all the selection
* nodes using an `or` operator.
*
* `SetExpression` does not validate the expression. It will be validated in
* `internally.
*/
vtkSetStdStringFromCharMacro(Expression);
vtkGetCharFromStdStringMacro(Expression);
///@}
///@{
/**
* Set/Get FieldTypeOption which is used to specify the selection field type for the selection.
*
* If FIELD_TYPE is defined, set FieldType using accepted values as defined in
* vtkSelectionNode::SelectionField.
*
* If ELEMENT_TYPE is defined, set ElementType using accepted values as defined in
* `vtkDataObject::AttributeTypes`. Note, `vtkDataObject::FIELD` and
* `vtkDataObject::POINT_THEN_CELL` are not supported. ELEMENT_TYPE will be converted
* to FIELD_TYPE, internally, since vtkSelectionNode only accepts FIELD_TYPE.
*
* The default is FIELD_TYPE.
*/
enum FieldTypeOptions
{
FIELD_TYPE,
ELEMENT_TYPE
};
vtkSetClampMacro(FieldTypeOption, int, FIELD_TYPE, ELEMENT_TYPE);
virtual void SetFieldTypeOptionToFieldType() { this->SetFieldTypeOption(FIELD_TYPE); }
virtual void SetFieldTypeOptionToElementType() { this->SetFieldTypeOption(ELEMENT_TYPE); }
vtkGetMacro(FieldTypeOption, int);
///@}
///@{
/**
* Set/Get the field type for the generated selection.
* Possible values are as defined by
* vtkSelectionNode::SelectionField.
*
* The default is vtkSelectionNode::SelectionField::CELL.
*/
vtkSetClampMacro(FieldType, int, vtkSelectionNode::CELL, vtkSelectionNode::ROW);
vtkGetMacro(FieldType, int);
///@}
//@{
/**
* Set/Get which types of elements are being selected.
* Accepted values are defined in `vtkDataObject::AttributeTypes`. Note,
* `vtkDataObject::FIELD` and `vtkDataObject::POINT_THEN_CELL` are not
* supported.
*
* The default is vtkDataObject::AttributeTypes::Cell.
*/
vtkSetClampMacro(ElementType, int, vtkDataObject::POINT, vtkDataObject::ROW);
vtkGetMacro(ElementType, int);
//@}
//@{
/**
* Set/Get which process to limit the selection to. `-1` is treated as
* all processes.
*
* The default is -1.
*/
vtkSetClampMacro(ProcessID, int, -1, VTK_INT_MAX);
vtkGetMacro(ProcessID, int);
//@}
//------------------------------------------------------------------------------
// Functions to manipulate the information of each selection node.
//------------------------------------------------------------------------------
//@{
/**
* Set/Get the node name.
*
* If you want to set the Expression, be sure to define the node names.
*
* If the node name is not defined, a default node name is created atomically
* at each execution of the filter to guarantee uniqueness. GetNodeName()
* will return a non-empty name only if you have defined it before.
*/
void SetNodeName(unsigned int nodeId, const char* name);
void SetNodeName(const char* name) { this->SetNodeName(0, name); }
const char* GetNodeName(unsigned int nodeId);
const char* GetNodeName() { return this->GetNodeName(0); }
//@}
///@{
/**
* Add a (piece, id) to the selection set. The source will generate
* only the ids for which piece == UPDATE_PIECE_NUMBER.
* If piece == -1, the id applies to all pieces.
*/
void AddID(unsigned int nodeId, vtkIdType piece, vtkIdType id);
void AddID(vtkIdType piece, vtkIdType id) { this->AddID(0, piece, id); }
void AddStringID(unsigned int nodeId, vtkIdType piece, const char* id);
void AddStringID(vtkIdType piece, const char* id) { this->AddStringID(0, piece, id); }
///@}
///@{
/**
* Add a point in world space to probe at.
*/
void AddLocation(unsigned int nodeId, double x, double y, double z);
void AddLocation(double x, double y, double z) { this->AddLocation(0, x, y, z); }
///@}
///@{
/**
* Add a value range to threshold within.
*/
void AddThreshold(unsigned int nodeId, double min, double max);
void AddThreshold(double min, double max) { this->AddThreshold(0, min, max); }
///@}
///@{
/**
* Set a frustum to choose within.
*/
void SetFrustum(unsigned int nodeId, double* vertices);
void SetFrustum(double* vertices) { this->SetFrustum(0, vertices); }
///@}
///@{
/**
* Add the flat-index/composite index for a block.
*/
void AddBlock(unsigned int nodeId, vtkIdType block);
void AddBlock(vtkIdType blockno) { this->AddBlock(0, blockno); }
///@}
///@{
/**
* Add/Remove block-selectors to make selections with
* vtkSelectionNode::BLOCK_SELECTORS as the content-type.
*/
void AddBlockSelector(unsigned int nodeId, const char* block);
void AddBlockSelector(const char* selector) { this->AddBlockSelector(0, selector); }
void RemoveAllBlockSelectors(unsigned int nodeId);
void RemoveAllBlockSelectors() { this->RemoveAllBlockSelectors(0); }
///@}
///@{
/**
* Removes all IDs.
*/
void RemoveAllIDs(unsigned int nodeId);
void RemoveAllIDs() { this->RemoveAllIDs(0); }
void RemoveAllStringIDs(unsigned int nodeId);
void RemoveAllStringIDs() { this->RemoveAllStringIDs(0); }
///@}
///@{
/**
* Remove all thresholds added with AddThreshold.
*/
void RemoveAllThresholds(unsigned int nodeId);
void RemoveAllThresholds() { this->RemoveAllThresholds(0); }
///@}
///@{
/**
* Remove all locations added with AddLocation.
*/
void RemoveAllLocations(unsigned int nodeId);
void RemoveAllLocations() { this->RemoveAllLocations(0); }
///@}
///@{
/**
* Remove all blocks added with AddBlock.
*/
void RemoveAllBlocks(unsigned int nodeId);
void RemoveAllBlocks() { this->RemoveAllBlocks(0); }
///@}
///@{
/**
* Set/Get the content type.
* Possible values are as defined by
* vtkSelectionNode::SelectionContent.
*
* The default is vtkSelectionNode::SelectionContent::INDICES.
*/
void SetContentType(unsigned int nodeId, int type);
void SetContentType(int contentType) { this->SetContentType(0, contentType); }
int GetContentTypeMinValue() { return vtkSelectionNode::SelectionContent::GLOBALIDS; }
int GetContentTypeMaxValue() { return vtkSelectionNode::SelectionContent::USER; }
int GetContentType(unsigned int nodeId);
int GetContentType() { return this->GetContentType(0); }
///@}
///@{
/**
* When extracting by points, extract the cells that contain the
* passing points.
*
* The default is false.
*/
void SetContainingCells(unsigned int nodeId, vtkTypeBool containingCells);
void SetContainingCells(vtkTypeBool containingCells)
{
this->SetContainingCells(0, containingCells);
}
vtkTypeBool GetContainingCells(unsigned int nodeId);
vtkTypeBool GetContainingCells() { return this->GetContainingCells(0); }
///@}
///@{
/**
* Set/Get the number of layers to extract connected to the selected elements.
*
* The default is 0.
*/
void SetNumberOfLayers(unsigned int nodeId, int numberOfLayers);
void SetNumberOfLayers(int numberOfLayers) { this->SetNumberOfLayers(0, numberOfLayers); }
int GetNumberOfLayersMinValue() { return 0; }
int GetNumberOfLayersMaxValue() { return VTK_INT_MAX; }
int GetNumberOfLayers(unsigned int nodeId);
int GetNumberOfLayers() { return this->GetNumberOfLayers(0); }
///@}
///@{
/**
* Determines whether the selection describes what to include or exclude.
*
* The Default is 0, meaning include.
*/
void SetInverse(unsigned int nodeId, vtkTypeBool inverse);
void SetInverse(vtkTypeBool inverse) { this->SetInverse(0, inverse); }
vtkTypeBool GetInverse(unsigned int nodeId);
vtkTypeBool GetInverse() { return this->GetInverse(0); }
///@}
///@{
/**
* Get/Set the name used for the SelectionList in the generated
* vtkSelectionNode.
*/
void SetArrayName(unsigned int nodeId, const char* name);
void SetArrayName(const char* name) { this->SetArrayName(0, name); }
const char* GetArrayName(unsigned int nodeId);
const char* GetArrayName() { return this->GetArrayName(0); }
///@}
///@{
/**
* Set/Get the component number for the array specified by ArrayName.
*
* The default is component 0. Use -1 for magnitude.
*/
void SetArrayComponent(unsigned int nodeId, int component);
void SetArrayComponent(int component) { this->SetArrayComponent(0, component); }
int GetArrayComponent(unsigned int nodeId);
int GetArrayComponent() { return this->GetArrayComponent(0); }
///@}
///@{
/**
* Set/Get the CompositeIndex.
* If CompositeIndex < 0 then COMPOSITE_INDEX() is not added to the output.
*
* The default is -1.
*/
void SetCompositeIndex(unsigned int nodeId, int index);
void SetCompositeIndex(int compositeIndex) { this->SetCompositeIndex(0, compositeIndex); }
int GetCompositeIndex(unsigned int nodeId);
int GetCompositeIndex() { return this->GetCompositeIndex(0); }
///@}
///@{
/**
* Set/Get the Hierarchical/HierarchicalIndex.
* If HierarchicalLevel or HierarchicalIndex < 0 , then HIERARCHICAL_LEVEL()
* and HIERARCHICAL_INDEX() keys are not added to the output.
*
* The default for both is -1.
*/
void SetHierarchicalLevel(unsigned int nodeId, int level);
void SetHierarchicalLevel(int level) { this->SetHierarchicalLevel(0, level); }
int GetHierarchicalLevel(unsigned int nodeId);
int GetHierarchicalLevel() { return this->GetHierarchicalLevel(0); }
void SetHierarchicalIndex(unsigned int nodeId, int index);
void SetHierarchicalIndex(int index) { this->SetHierarchicalIndex(0, index); }
int GetHierarchicalIndex(unsigned int nodeId);
int GetHierarchicalIndex() { return this->GetHierarchicalIndex(0); }
///@}
///@{
/**
* For selector-based selection qualification. Note, this should not
* be confused with block-selectors used to select blocks using selectors.
* These here are qualifiers i.e. they limit the selected items.
*/
void SetAssemblyName(unsigned int nodeId, const char* name);
void SetAssemblyName(const char* name) { this->SetAssemblyName(0, name); }
const char* GetAssemblyName(unsigned int nodeId);
const char* GetAssemblyName() { return this->GetAssemblyName(0); }
void AddSelector(unsigned int nodeId, const char* selector);
void AddSelector(const char* selector) { this->AddSelector(0, selector); }
void RemoveAllSelectors(unsigned int nodeId);
void RemoveAllSelectors() { this->RemoveAllSelectors(0); }
///@}
///@{
/**
* Set/Get the query expression string.
*/
void SetQueryString(unsigned int nodeId, const char* queryString);
void SetQueryString(const char* query) { this->SetQueryString(0, query); }
const char* GetQueryString(unsigned int nodeId);
const char* GetQueryString() { return this->GetQueryString(0); }
///@}
protected:
vtkSelectionSource();
~vtkSelectionSource() override;
int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) override;
int RequestData(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector) override;
std::string Expression;
int FieldTypeOption;
int FieldType;
int ElementType;
int ProcessID;
struct NodeInformation;
std::vector<std::shared_ptr<NodeInformation>> NodesInfo;
private:
vtkSelectionSource(const vtkSelectionSource&) = delete;
void operator=(const vtkSelectionSource&) = delete;
};
#endif