5#include <vtkCellData.h>
6#include <vtkFloatArray.h>
7#include <vtkIdTypeArray.h>
8#include <vtkInformation.h>
9#include <vtkPointData.h>
10#include <vtkPolyData.h>
16 SetNumberOfInputPorts(2);
18 SetNumberOfOutputPorts(1);
22 int port, vtkInformation *info) {
24 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(),
"vtkPolyData");
26 }
else if(port == 1) {
27 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(),
"vtkDataSet");
34 int port, vtkInformation *info) {
36 info->Set(vtkDataObject::DATA_TYPE_NAME(),
"vtkPolyData");
44 vtkInformationVector **inputVector,
45 vtkInformationVector *outputVector) {
47 auto quads = vtkPolyData::GetData(inputVector[0]);
48 auto mesh = vtkDataSet::GetData(inputVector[1]);
49 auto output = vtkPolyData::GetData(outputVector);
52 if(triangulation ==
nullptr) {
57 auto inputCells = quads->GetPolys();
58 if(inputCells ==
nullptr || inputCells->GetData() ==
nullptr) {
59 this->
printErr(
"Invalid input quadrangle cells");
63 auto inputPoints = quads->GetPoints();
64 auto pointData = quads->GetPointData();
65 if(inputPoints ==
nullptr || inputPoints->GetData() ==
nullptr
66 || pointData ==
nullptr) {
67 this->
printErr(
"Invalid input quadrangle points");
71 auto identifiers = pointData->GetArray(
73 if(identifiers ==
nullptr) {
74 this->
printErr(
"Missing point data array named "
82 inputCells->GetNumberOfCells());
84 inputPoints->GetNumberOfPoints());
90 triangulation->getType(),
91 res = this->execute(*
static_cast<TTK_TT *
>(triangulation->getData())));
94 this->
printWrn(
"Please increase the number of relaxation iterations, of "
95 "subdivision levels or consider another function (higher "
102 vtkNew<vtkCellArray> cells{};
109 output->SetPolys(cells);
111 vtkNew<vtkPoints> points{};
117 output->SetPoints(points);
120 vtkNew<ttkSimplexIdTypeArray> valences{};
121 valences->SetName(
"Valence");
124 output->GetPointData()->AddArray(valences);
126 vtkNew<vtkFloatArray> density{};
127 density->SetName(
"Density");
130 output->GetPointData()->AddArray(density);
132 vtkNew<vtkFloatArray> deformity{};
133 deformity->SetName(
"Deformity");
136 output->GetPointData()->AddArray(deformity);
139 vtkNew<ttkSimplexIdTypeArray> infos{};
140 infos->SetName(
"Type");
143 output->GetPointData()->AddArray(infos);
145 vtkNew<ttkSimplexIdTypeArray> subd{};
146 subd->SetName(
"Subdivision");
149 output->GetPointData()->AddArray(subd);
151 vtkNew<ttkSimplexIdTypeArray> nearestVert{};
155 output->GetPointData()->AddArray(nearestVert);
158 vtkNew<vtkFloatArray> quadArea{};
159 quadArea->SetName(
"Quad Area");
161 output->GetCellData()->AddArray(quadArea);
163 vtkNew<vtkFloatArray> diagsRatio{};
164 diagsRatio->SetName(
"Diagonals Ratio");
167 output->GetCellData()->AddArray(diagsRatio);
169 vtkNew<vtkFloatArray> edgesRatio{};
170 edgesRatio->SetName(
"Edges Ratio");
173 output->GetCellData()->AddArray(edgesRatio);
175 vtkNew<vtkFloatArray> anglesRatio{};
176 anglesRatio->SetName(
"Angles Ratio");
179 output->GetCellData()->AddArray(anglesRatio);
181 vtkNew<vtkFloatArray> hausDist{};
182 hausDist->SetName(
"Hausdorff");
184 output->GetPointData()->AddArray(hausDist);
188 output->GetFieldData()->ShallowCopy(mesh->GetFieldData());
#define ttkTemplateMacro(triangulationType, call)
#define ttkNotUsed(x)
Mark function/method parameters that are not used in the function body at all.
ttk::Triangulation * GetTriangulation(vtkDataSet *dataSet)
TTK VTK-filter for surface quadrangulation.
ttkQuadrangulationSubdivision()
int FillInputPortInformation(int port, vtkInformation *info) override
int FillOutputPortInformation(int port, vtkInformation *info) override
int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
static void * GetVoidPointer(vtkDataArray *array, vtkIdType start=0)
static void SetVoidArray(vtkDataArray *array, void *data, vtkIdType size, int save)
int printWrn(const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
int printErr(const std::string &msg, const debug::LineMode &lineMode=debug::LineMode::NEW, std::ostream &stream=std::cerr) const
std::vector< float > quadAnglesRatio_
std::vector< float > outputDensity_
std::vector< Point > outputPoints_
void setInputVertices(void *const address, unsigned int size)
std::vector< Quad > outputQuads_
std::vector< float > quadEdgesRatio_
std::vector< float > outputDifformity_
std::vector< float > quadArea_
std::vector< SimplexId > nearestVertexIdentifier_
std::vector< SimplexId > outputVertType_
std::vector< float > hausdorff_
std::vector< float > quadDiagsRatio_
void preconditionTriangulation(AbstractTriangulation *const triangl)
std::vector< SimplexId > outputValences_
void setInputVertexIdentifiers(void *const address, unsigned int size)
std::vector< SimplexId > outputSubdivision_
void setInputQuads(void *const address, unsigned int size)
const char VertexScalarFieldName[]
default name for vertex scalar field
vtkStandardNewMacro(ttkQuadrangulationSubdivision)