OGS
VtkCompositeTextureOnSurfaceFilter.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
5
6#include <vtkDataSetSurfaceFilter.h>
7#include <vtkSmartPointer.h>
8#include <vtkUnstructuredGrid.h>
9
10#include "BaseLib/Logging.h"
11#include "VtkGeoImageSource.h"
12#include "VtkRaster.h"
14#ifdef OGS_USE_NETCDF
16#endif // OGS_USE_NETCDF
17
18#include <QFileDialog>
19#include <QFileInfo>
20#include <QSettings>
21
23 vtkAlgorithm* inputAlgorithm)
24 : VtkCompositeFilter(inputAlgorithm)
25{
26 this->init();
27}
28
30 default;
31
33{
34 this->_inputDataObjectType = VTK_DATA_SET;
35 this->_outputDataObjectType = VTK_POLY_DATA;
36
37 vtkSmartPointer<vtkDataSetSurfaceFilter> surfaceFilter;
39
40 if (dynamic_cast<vtkUnstructuredGrid*>(
41 _inputAlgorithm->GetOutputDataObject(0)))
42 {
43 surfaceFilter = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();
44 surfaceFilter->SetInputConnection(_inputAlgorithm->GetOutputPort());
45 surface->SetInputConnection(surfaceFilter->GetOutputPort());
46 }
47 else
48 {
49 surface->SetInputConnection(_inputAlgorithm->GetOutputPort());
50 }
51
52 QWidget* parent = nullptr;
53 QSettings settings;
54 QString fileName = QFileDialog::getOpenFileName(
55 parent, "Select raster file to apply as texture",
56 settings.value("lastOpenedTextureFileDirectory").toString(),
57 "Raster files (*.asc *.grd *.bmp *.jpg *.png *.tif);;"
58#ifdef OGS_USE_NETCDF
59 "NetCDF files (*.nc);;"
60#endif // OGS_USE_NETCDF
61 );
62 QFileInfo fi(fileName);
63
64 if ((fi.suffix().toLower() == "asc") || (fi.suffix().toLower() == "tif") ||
65 (fi.suffix().toLower() == "png") || (fi.suffix().toLower() == "grd") ||
66 (fi.suffix().toLower() == "jpg") || (fi.suffix().toLower() == "bmp"))
67 {
68 std::string name = fileName.toStdString();
69 vtkImageAlgorithm* image = VtkRaster::loadImage(name);
70 surface->SetRaster(image);
71 surface->Update();
72
73 QDir dir = QDir(fileName);
74 settings.setValue("lastOpenedTextureFileDirectory", dir.absolutePath());
75 }
76#ifdef OGS_USE_NETCDF
77 else if (fi.suffix().toLower() == "nc")
78 {
79 NetCdfConfigureDialog dlg(fileName.toStdString().c_str());
80 dlg.exec();
81 if (dlg.getRaster() != nullptr)
82 {
83 VtkGeoImageSource* image = dlg.getRaster();
84 surface->SetRaster(image);
85 surface->Update();
86 }
87 }
88#endif // OGS_USE_NETCDF
89 else
90 ERR("VtkCompositeTextureOnSurfaceFilter::init(): Error reading texture "
91 "file.");
92
93 _outputAlgorithm = surface;
94}
95
97 QVariant value)
98{
100}
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:40
The dialog for converting data from NetCDF-files into OGS data structures. While NetCDF files can inc...
VtkGeoImageSource * getRaster()
virtual void SetUserProperty(QString name, QVariant value)
Sets a user property. This should be implemented by subclasses.
vtkAlgorithm * _outputAlgorithm
VtkCompositeFilter(vtkAlgorithm *inputAlgorithm)
Constructor.
vtkAlgorithm * _inputAlgorithm
VtkCompositeTextureOnSurfaceFilter(vtkAlgorithm *inputAlgorithm)
void SetUserProperty(QString name, QVariant value) override
Sets a user property. This should be implemented by subclasses.
The VtkVisPipeline source object of a geo-referenced image (file).
static vtkImageAlgorithm * loadImage(const std::string &fileName)
Loads an image- or raster-file into an vtkImageAlgorithm-Object.
Definition VtkRaster.cpp:32
Filter class for assigning a texture to a surface.
static VtkTextureOnSurfaceFilter * New()
Create new objects with New() because of VTKs object reference counting.
void SetRaster(vtkImageAlgorithm *img)
Sets the raster/image to be used as a texture map.