OGS
ProcessModel.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#include "ProcessModel.h"
5
6#include <vtkPolyDataAlgorithm.h>
7
8#include <QFileInfo>
9
11#include "CondItem.h"
12#include "GeoLib/GEOObjects.h"
13#include "GeoLib/GeoObject.h"
14#include "GeoLib/GeoType.h"
15#include "ProcessVarItem.h"
16
18 : TreeModel(parent), _project(project)
19{
20 QList<QVariant> rootData;
21 delete _rootItem;
22 rootData << "Name"
23 << "Value"
24 << ""
25 << ""
26 << "";
27 _rootItem = new TreeItem(rootData, nullptr);
28}
29
30int ProcessModel::columnCount(QModelIndex const& parent) const
31{
32 Q_UNUSED(parent)
33
34 return 2;
35}
36
39{
40 QList<QVariant> item_data;
41
42 item_data << QString::fromStdString(cond->getParamName())
43 << QString::fromStdString(cond->getConditionClassStr());
44
45 auto* cond_item = new CondItem(item_data, parent, cond);
46 parent->appendChild(cond_item);
47}
48
50{
51 QString const name(QString::fromStdString(condition->getProcessVarName()));
52 ProcessVarItem* process_var(getProcessVarItem(name));
53 if (process_var == nullptr)
54 {
55 process_var = addProcessVar(name);
56 }
57 addConditionItem(condition, process_var);
58}
59
61 std::vector<std::unique_ptr<DataHolderLib::BoundaryCondition>> const&
62 conditions)
63{
64 for (auto& cond : conditions)
65 {
66 addCondition(cond.get());
67 }
68}
69
71 std::vector<std::unique_ptr<DataHolderLib::SourceTerm>> const& conditions)
72{
73 for (auto& cond : conditions)
74 {
75 addCondition(cond.get());
76 }
77}
78
80{
81 beginResetModel();
82 QList<QVariant> process_var_data;
83 process_var_data << QVariant(name) << "";
84 auto* process_var = new ProcessVarItem(process_var_data, _rootItem);
85 _rootItem->appendChild(process_var);
86 endResetModel();
87 return process_var;
88}
89
91{
92 int const n_children(_rootItem->childCount());
93 for (int i = 0; i < n_children; ++i)
94 {
95 auto* item(dynamic_cast<ProcessVarItem*>(_rootItem->child(i)));
96 if (item != nullptr && item->getName() == name)
97 {
98 return item;
99 }
100 }
101 return nullptr;
102}
103
105 QString const& param_name)
106{
107 int const n_conditions = process_var->childCount();
108 for (int i = 0; i < n_conditions; ++i)
109 {
110 CondItem const* const cond =
111 dynamic_cast<CondItem*>(process_var->child(i));
112 if (cond->getCondition()->getParamName() != param_name.toStdString())
113 {
114 continue;
115 }
116
117 process_var->removeChildren(i, 1);
118 return;
119 }
120}
121
122void ProcessModel::removeCondition(QString const& process_var,
123 QString const& param)
124{
125 beginResetModel();
126 ProcessVarItem* pv_item(getProcessVarItem(process_var));
127 if (pv_item == nullptr)
128 {
129 return;
130 }
131
132 removeCondition(pv_item, param);
133 _project.removeBoundaryCondition(process_var.toStdString(),
134 param.toStdString());
135 _project.removeSourceTerm(process_var.toStdString(), param.toStdString());
136 endResetModel();
137}
138
139void ProcessModel::removeProcessVariable(QString const& name)
140{
141 beginResetModel();
142 ProcessVarItem* pv_item(getProcessVarItem(name));
143 if (pv_item == nullptr)
144 {
145 return;
146 }
147
148 int const n_conds = pv_item->childCount();
149 for (int i = n_conds - 1; i >= 0; --i)
150 {
151 removeCondition(pv_item,
152 static_cast<CondItem*>(pv_item->child(i))->getName());
153 }
154
155 _project.removePrimaryVariable(name.toStdString());
156 int const idx = pv_item->row();
157 _rootItem->removeChildren(idx, 1);
158 endResetModel();
159}
160
162{
163 int const n_process_vars = _rootItem->childCount();
164 for (int i = n_process_vars; i >= 0; --i)
165 {
166 auto* pv_item = dynamic_cast<ProcessVarItem*>(_rootItem->child(i));
167 removeProcessVariable(pv_item->getName());
168 }
169}
170
172{
173 addBoundaryConditions(_project.getBoundaryConditions());
174 addSourceTerms(_project.getSourceTerms());
175}
A TreeItem containing a boundary condition or source term.
Definition CondItem.h:19
DataHolderLib::FemCondition * getCondition() const
Returns the FEM Condition associated with the item.
Definition CondItem.h:29
QString const getName() const
Definition CondItem.h:31
Base class for boundary conditions, initial conditions and source terms.
virtual std::string const getConditionClassStr() const =0
Returns the type of condition for displaying purposes.
std::string const getProcessVarName() const
Returns the name of the associated process variable.
std::string const getParamName() const
Returns the name of the parameter associated with the condition.
void removeProcessVariable(QString const &name)
Removes a process variable incl all associated conditions from the model.
int columnCount(const QModelIndex &parent=QModelIndex()) const override
void updateModel()
Updates the model based on the ProjectData-object.
ProcessVarItem * addProcessVar(QString const &name)
Adds a process to the model.
void addBoundaryConditions(std::vector< std::unique_ptr< DataHolderLib::BoundaryCondition > > const &conditions)
Adds vector of Boundary Conditions to the model.
void clearModel()
Removes the complete content from the model.
void addCondition(DataHolderLib::FemCondition *condition)
Adds a single FEM Conditions to the model.
ProcessVarItem * getProcessVarItem(QString const &process_var_name) const
ProcessModel(DataHolderLib::Project &project, QObject *parent=nullptr)
DataHolderLib::Project & _project
void addConditionItem(DataHolderLib::FemCondition *cond, ProcessVarItem *parent)
Adds a new FEM condition to the condition tree model.
void removeCondition(QString const &process_var, QString const &param)
Removes FEMConditions from the the model.
void addSourceTerms(std::vector< std::unique_ptr< DataHolderLib::SourceTerm > > const &conditions)
Adds vector of Source Terms to the model.
A TreeItem representing process variable information.
Objects nodes for the TreeModel.
Definition TreeItem.h:17
virtual int childCount() const
Definition TreeItem.cpp:54
TreeItem * child(int row) const
Definition TreeItem.cpp:41
int row() const
Definition TreeItem.cpp:62
bool removeChildren(int position, int count)
Definition TreeItem.cpp:113
QModelIndex parent(const QModelIndex &index) const override
Definition TreeModel.cpp:70
TreeModel(QObject *parent=nullptr)
Definition TreeModel.cpp:15
TreeItem * _rootItem
Definition TreeModel.h:47