28 vtkImageData* output, IT* inPtr,
32 input->GetDimensions(dims);
33 if (input->GetScalarType() != output->GetScalarType())
35 vtkGenericWarningMacro(
36 <<
"Execute: input ScalarType, " << input->GetScalarType()
37 <<
", must match out ScalarType " << output->GetScalarType());
42 dims[0] * dims[1] * dims[2] * input->GetNumberOfScalarComponents();
44 for (
int i = 0; i < size; i++)
90 vtkDebugMacro(<<
"Executing VtkGeoImageSource");
91 void* inPtr = input->GetScalarPointer();
92 void* outPtr = output->GetScalarPointer();
93 switch (output->GetScalarType())
98 input, output, (VTK_TT*)(inPtr), (VTK_TT*)(outPtr)));
100 vtkGenericWarningMacro(
"Execute: Unknown input ScalarType");
115 source->GetOutput()->GetDimensions(dims);
117 source->GetOutput()->GetOrigin(origin);
119 source->GetOutput()->GetSpacing(spacing);
121 std::array<double, 3>{{origin[0] - 0.5 * spacing[0],
122 origin[1] - 0.5 * spacing[1], origin[2]}});
124 static_cast<std::size_t
>(dims[1]),
125 static_cast<std::size_t
>(dims[2]),
130 vtkSmartPointer<vtkDataArray>
const pixelData =
131 vtkSmartPointer<vtkDataArray>(
132 source->GetOutput()->GetPointData()->GetScalars());
133 int const nTuple = pixelData->GetNumberOfComponents();
134 if (nTuple < 1 || nTuple > 4)
136 ERR(
"VtkMeshConverter::convertImgToMesh(): Unsupported pixel "
141 std::vector<double> pix(header.n_cols * header.n_rows * header.n_depth, 0);
142 for (std::size_t k = 0; k < header.n_depth; k++)
144 std::size_t
const layer_idx = (k * header.n_rows * header.n_cols);
145 for (std::size_t i = 0; i < header.n_rows; i++)
147 std::size_t
const idx = i * header.n_cols + layer_idx;
148 for (std::size_t j = 0; j < header.n_cols; j++)
150 double const*
const colour = pixelData->GetTuple(idx + j);
151 bool const visible = (nTuple == 2 || nTuple == 4)
152 ? (colour[nTuple - 1] != 0)
156 pix[idx + j] = header.no_data;
160 pix[idx + j] = (nTuple < 3) ? colour[0] :
161 (0.3 * colour[0] + 0.6 * colour[1] +
168 return std::make_optional<GeoLib::Raster>(header, pix.begin(), pix.end());