7#include <vtkDoubleArray.h>
8#include <vtkFloatArray.h>
9#include <vtkInformation.h>
10#include <vtkObjectFactory.h>
11#include <vtkPointData.h>
12#include <vtkSmartPointer.h>
17 SetNumberOfInputPorts(1);
18 SetNumberOfOutputPorts(1);
23 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(),
"vtkDataSet");
38 vtkInformationVector **inputVector,
39 vtkInformationVector *outputVector) {
41 const auto domain = vtkDataSet::GetData(inputVector[0]);
42 auto output = vtkDataSet::GetData(outputVector);
45 if(triangulation ==
nullptr) {
46 this->
printErr(
"Triangulation is NULL");
59 switch(OutputFieldType) {
60 case FieldType::FLOAT:
64 case FieldType::DOUBLE:
69 this->
printErr(
"Unknown field type");
73 if(eigenFunctions ==
nullptr) {
74 this->
printErr(
"vtkDataArray allocation problem");
78 const auto vertexNumber = triangulation->getNumberOfVertices();
80 eigenFunctions->SetNumberOfComponents(EigenNumber);
81 eigenFunctions->SetNumberOfTuples(vertexNumber);
82 eigenFunctions->SetName(OutputFieldName.data());
84 if(ComputeStatistics) {
85 stats->SetName(
"Statistics");
86 const int statsComp = 4;
87 stats->SetNumberOfComponents(statsComp);
88 stats->SetNumberOfTuples(vertexNumber);
89 stats->SetComponentName(0,
"Min");
90 stats->SetComponentName(1,
"Max");
91 stats->SetComponentName(2,
"Sum");
92 stats->SetComponentName(3,
"EigenMagnitude");
95 switch(OutputFieldType) {
96 case FieldType::FLOAT:
97 res += this->execute<float>(
100 EigenNumber, ComputeStatistics,
103 case FieldType::DOUBLE:
104 res += this->execute<double>(
107 EigenNumber, ComputeStatistics,
115 this->
printErr(
"EigenField execute error code " + std::to_string(res));
120 output->ShallowCopy(domain);
121 output->GetPointData()->AddArray(eigenFunctions);
123 if(ComputeStatistics) {
124 output->GetPointData()->AddArray(stats);
#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::Triangulation * GetTriangulation(vtkDataSet *dataSet)
TTK VTK-filter for eigenfunctions computation.
int FillOutputPortInformation(int port, vtkInformation *info) override
int FillInputPortInformation(int port, vtkInformation *info) override
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
static void * GetVoidPointer(vtkDataArray *array, vtkIdType start=0)
int printErr(const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
void preconditionTriangulation(AbstractTriangulation &triangulation) const
vtkStandardNewMacro(ttkEigenField)