OGS
VtkAddFilterDialog.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
4// ** INCLUDES **
6
7#include <vtkContourFilter.h>
8#include <vtkOutlineFilter.h>
9#include <vtkTransformFilter.h>
10
11#include <QModelIndex>
12
13#include "BaseLib/Logging.h"
14#include "VtkCompositeFilter.h"
15#include "VtkFilterFactory.h"
16#include "VtkVisImageItem.h"
17#include "VtkVisPipeline.h"
18#include "VtkVisPipelineItem.h"
19#include "VtkVisPointSetItem.h"
20
22 QModelIndex parentIndex,
23 QDialog* parent /*= 0*/)
24 : QDialog(parent), _pipeline(pipeline), _parentIndex(parentIndex)
25{
26 setupUi(this);
27 filterListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
28
29 auto* parentItem =
30 static_cast<VtkVisPipelineItem*>(_pipeline.getItem(parentIndex));
31 vtkDataObject* parentDataObject =
32 parentItem->algorithm()->GetOutputDataObject(0);
33 int parentDataObjectType = parentDataObject->GetDataObjectType();
34
35 QVector<VtkFilterInfo> filterList = VtkFilterFactory::GetFilterList();
36 foreach (VtkFilterInfo filter, filterList)
37 {
38 // Check for suitable filters (see vtkDataSet inheritance diagram)
39 int inputType = filter.inputDataObjectType;
40 if ((inputType == parentDataObjectType) ||
41 (inputType == VTK_POINT_SET &&
42 parentDataObjectType != VTK_IMAGE_DATA) ||
43 (inputType == VTK_IMAGE_DATA &&
44 (parentDataObjectType == VTK_STRUCTURED_POINTS ||
45 parentDataObjectType == VTK_UNIFORM_GRID)))
46 {
47 new QListWidgetItem(filter.readableName, filterListWidget);
48 }
49 }
50
51 // On double clicking an item the dialog gets accepted
52 connect(filterListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
53 this->buttonBox, SIGNAL(accepted()));
54}
55
57{
58 QVector<VtkFilterInfo> filterList = VtkFilterFactory::GetFilterList();
59 QString filterName;
60 foreach (VtkFilterInfo filter, filterList)
61 {
62 if (filter.readableName.compare(
63 filterListWidget->currentItem()->text()) == 0)
64 {
65 filterName = filter.name;
66 break;
67 }
68 }
69 auto* parentItem =
70 static_cast<VtkVisPipelineItem*>(_pipeline.getItem(_parentIndex));
71 QList<QVariant> itemData;
72 itemData << filterListWidget->currentItem()->text() << true;
73
74 VtkCompositeFilter* filter;
75 if (dynamic_cast<VtkVisImageItem*>(parentItem))
76 {
78 filterName, parentItem->algorithm());
79 }
80 else
81 {
83 filterName, parentItem->transformFilter());
84 }
85
87 if (filter)
88 {
89 if (filter->GetOutputDataObjectType() == VTK_IMAGE_DATA)
90 {
91 item = new VtkVisImageItem(filter, parentItem, itemData);
92 }
93 else
94 {
95 item = new VtkVisPointSetItem(filter, parentItem, itemData);
96 }
97 }
98 else
99 {
100 vtkAlgorithm* algorithm =
102 if (algorithm)
103 {
104 item = new VtkVisPointSetItem(algorithm, parentItem, itemData);
105 }
106 else
107 {
108 ERR("VtkFilterFactory cannot create {:s}.",
109 filterName.toStdString());
110 return;
111 }
112 }
113 _pipeline.addPipelineItem(item, _parentIndex);
114}
115
117{
119 {
120 if (filter.readableName.compare(
121 filterListWidget->item(currentRow)->text()) == 0)
122 {
123 QString desc = filter.description;
124 desc = desc + QString("\n\nThis filter outputs ") +
125 filter.OutputDataObjectTypeAsString() +
126 QString("\n\nFilter class name: ") + filter.name;
127
128 this->filterDescTextEdit->setText(desc);
129 continue;
130 }
131 }
132}
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:40
VtkAddFilterDialog(VtkVisPipeline &pipeline, QModelIndex parentIndex, QDialog *parent=nullptr)
VtkVisPipeline & _pipeline
void on_filterListWidget_currentRowChanged(int currentRow)
Is used to combine several filter in one VtkVisPipelineItem. You can use vtk filter and custom filter...
static QVector< VtkFilterInfo > GetFilterList()
Returns all registered filters. New VtkCompositeFilter or filter inherited from VtkAlgorithmPropertie...
static VtkCompositeFilter * CreateCompositeFilter(QString type, vtkAlgorithm *inputAlgorithm)
Creates a composite filter by name.
static vtkAlgorithm * CreateSimpleFilter(QString type)
Creates a normal filter name.
An item in the VtkVisPipeline containing an image to be visualized.
An item in the VtkVisPipeline containing a graphic object to be visualized.
vtkAlgorithm * algorithm() const
Returns the algorithm object.
VtkVisPipeline manages the VTK visualization. It is a TreeModel and provides functions for adding and...
An item in the VtkVisPipeline containing a point set object to be visualized.
Holds meta information about a filter.