1#include <vtkDataArray.h>
3#include <vtkIdTypeArray.h>
4#include <vtkInformation.h>
5#include <vtkIntArray.h>
7#include <vtkPointData.h>
8#include <vtkPointSet.h>
9#include <vtkSmartPointer.h>
18 this->SetNumberOfInputPorts(2);
19 this->SetNumberOfOutputPorts(1);
23 int port, vtkInformation *info) {
25 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(),
"vtkDataSet");
27 }
else if(port == 1) {
28 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(),
"vtkPointSet");
35 int port, vtkInformation *info) {
45 vtkInformationVector **inputVector,
46 vtkInformationVector *outputVector) {
55 const auto domain = vtkDataSet::GetData(inputVector[0]);
56 const auto constraints = vtkPointSet::GetData(inputVector[1]);
57 if(!domain || !constraints)
58 return !this->
printErr(
"Unable to retrieve required input data objects.");
60 auto output = vtkDataSet::GetData(outputVector);
66 this->
printErr(
"Input triangulation pointer is NULL.");
72 if(triangulation->isEmpty()) {
73 this->
printErr(
"Triangulation allocation problem.");
78 this->
printErr(
"Input pointer is NULL.");
82 const auto numberOfVertices = domain->GetNumberOfPoints();
83 if(numberOfVertices <= 0) {
84 this->
printErr(
"Domain has no points.");
89 const auto inputScalars = this->GetInputArrayToProcess(0, domain);
91 this->
printErr(
"Input scalar field pointer is null.");
97 = this->
GetOrderArray(domain, 0, 2, ForceInputOffsetScalarField);
99 this->
printErr(
"Wrong input offset scalar field.");
106 outputScalars->DeepCopy(inputScalars);
109 outputOrder->DeepCopy(inputOrder);
112 int numberOfConstraints = constraints->GetNumberOfPoints();
114 std::vector<ttk::SimplexId> idSpareStorage{};
117 constraints, idSpareStorage);
120 switch(inputScalars->GetDataType()) {
121 vtkTemplateMacro(ret = this->
execute(
122 ttkUtils::GetPointer<VTK_TT>(inputScalars),
123 ttkUtils::GetPointer<VTK_TT>(outputScalars), identifiers,
124 ttkUtils::GetPointer<SimplexId>(inputOrder),
125 ttkUtils::GetPointer<SimplexId>(outputOrder),
126 numberOfConstraints, this->AddPerturbation,
127 *triangulation->getData()));
132 this->
printErr(
"TopologicalSimplification.execute() error code: "
133 + std::to_string(ret));
137 output->ShallowCopy(domain);
138 output->GetPointData()->AddArray(outputOrder);
139 output->GetPointData()->AddArray(outputScalars);
#define ttkNotUsed(x)
Mark function/method parameters that are not used in the function body at all.
static vtkInformationIntegerKey * SAME_DATA_TYPE_AS_INPUT_PORT()
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)
vtkDataArray * GetOrderArray(vtkDataSet *const inputData, const int scalarArrayIdx, const int orderArrayIdx=0, const bool enforceOrderArrayIdx=false)
ttk::Triangulation * GetTriangulation(vtkDataSet *dataSet)
TTK VTK-filter for the topological simplification of scalar data.
int FillOutputPortInformation(int port, vtkInformation *info) override
int FillInputPortInformation(int port, vtkInformation *info) override
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
ttkTopologicalSimplification()
int printErr(const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
int execute(const dataType *const inputScalars, dataType *const outputScalars, const SimplexId *const identifiers, const SimplexId *const inputOffsets, SimplexId *const offsets, const SimplexId constraintNumber, const bool addPerturbation, const triangulationType &triangulation)
int preconditionTriangulation(AbstractTriangulation *triangulation)
void setBackend(const BACKEND arg)
const char VertexScalarFieldName[]
default name for vertex scalar field
int SimplexId
Identifier type for simplices of any dimension.
vtkStandardNewMacro(ttkTopologicalSimplification)