Skip to content

Commit 3691828

Browse files
committed
Fem: Calculator2
1 parent 3a5e5b0 commit 3691828

7 files changed

+97
-7
lines changed

src/Mod/Fem/App/FemPostFilter.cpp

+26
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,16 @@ FemPostCalculatorFilter::FemPostCalculatorFilter()
11771177
"Calculator",
11781178
App::Prop_None,
11791179
"Expression of the unction to evaluate");
1180+
ADD_PROPERTY_TYPE(ReplacementValue,
1181+
(0.0f),
1182+
"Calculator",
1183+
App::Prop_None,
1184+
"Value used to replace invalid operations");
1185+
ADD_PROPERTY_TYPE(ReplaceInvalid,
1186+
(false),
1187+
"Calculator",
1188+
App::Prop_None,
1189+
"Replace invalid values");
11801190

11811191
FilterPipeline calculator;
11821192
m_calculator = vtkSmartPointer<vtkArrayCalculator>::New();
@@ -1239,6 +1249,12 @@ void FemPostCalculatorFilter::onChanged(const Property* prop)
12391249
else if (prop == &FieldName) {
12401250
m_calculator->SetResultArrayName(FieldName.getValue());
12411251
}
1252+
else if (prop == &ReplaceInvalid) {
1253+
m_calculator->SetReplaceInvalidValues(ReplaceInvalid.getValue());
1254+
}
1255+
else if (prop == &ReplacementValue) {
1256+
m_calculator->SetReplacementValue(ReplacementValue.getValue());
1257+
}
12421258
else if (prop == &Data) {
12431259
updateAvailableFields();
12441260
}
@@ -1295,3 +1311,13 @@ void FemPostCalculatorFilter::updateAvailableFields()
12951311
}
12961312
}
12971313
}
1314+
1315+
const std::vector<std::string>& FemPostCalculatorFilter::getScalarVariables()
1316+
{
1317+
return m_calculator->GetScalarVariableNames();
1318+
}
1319+
1320+
const std::vector<std::string>& FemPostCalculatorFilter::getVectorVariables()
1321+
{
1322+
return m_calculator->GetVectorVariableNames();
1323+
}

src/Mod/Fem/App/FemPostFilter.h

+6
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,19 @@ class FemExport FemPostCalculatorFilter: public FemPostFilter
366366

367367
App::PropertyString FieldName;
368368
App::PropertyString Function;
369+
App::PropertyFloat ReplacementValue;
370+
App::PropertyBool ReplaceInvalid;
369371

370372
const char* getViewProviderName() const override
371373
{
372374
return "FemGui::ViewProviderFemPostCalculator";
373375
}
374376
short int mustExecute() const override;
375377

378+
const std::vector<std::string>& getScalarVariables();
379+
const std::vector<std::string>& getVectorVariables();
380+
381+
376382
protected:
377383
App::DocumentObjectExecReturn* execute() override;
378384
void onChanged(const App::Property* prop) override;

src/Mod/Fem/Gui/TaskPostBoxes.cpp

+34-2
Original file line numberDiff line numberDiff line change
@@ -2045,10 +2045,20 @@ TaskPostCalculator::TaskPostCalculator(ViewProviderFemPostCalculator* view, QWid
20452045
ui->let_function->setText(QString::fromUtf8(obj->Function.getValue()));
20462046
ui->let_function->blockSignals(false);
20472047

2048+
ui->ckb_replace_invalid->setChecked(obj->ReplaceInvalid.getValue());
2049+
ui->dsb_replacement_value->setEnabled(obj->ReplaceInvalid.getValue());
2050+
ui->dsb_replacement_value->setValue(obj->ReplacementValue.getValue());
2051+
ui->dsb_replacement_value->setMaximum(FLOAT_MAX);
2052+
ui->dsb_replacement_value->setMinimum(FLOAT_MIN);
2053+
2054+
// fill completer with available fields
20482055
QCompleter* completer = new QCompleter(this);
20492056
auto fields = view->Field.getEnumVector();
20502057
QStringList qlist;
2051-
for (const auto& f : fields) {
2058+
for (const auto& f : obj->getScalarVariables()) {
2059+
qlist << QString::fromStdString(f);
2060+
}
2061+
for (const auto& f : obj->getVectorVariables()) {
20522062
qlist << QString::fromStdString(f);
20532063
}
20542064

@@ -2072,6 +2082,14 @@ void TaskPostCalculator::setupConnections()
20722082
&QLineEdit::editingFinished,
20732083
this,
20742084
&TaskPostCalculator::onFunctionChanged);
2085+
connect(ui->dsb_replacement_value,
2086+
qOverload<double>(&QDoubleSpinBox::valueChanged),
2087+
this,
2088+
&TaskPostCalculator::onReplacementValueChanged);
2089+
connect(ui->ckb_replace_invalid,
2090+
&QCheckBox::toggled,
2091+
this,
2092+
&TaskPostCalculator::onReplaceInvalidChanged);
20752093
}
20762094

20772095
void TaskPostCalculator::onFieldNameChanged()
@@ -2090,8 +2108,22 @@ void TaskPostCalculator::onFunctionChanged()
20902108
obj->Function.setValue(function);
20912109
auto view = getTypedView<ViewProviderFemPostCalculator>();
20922110
recompute();
2093-
view->updateMaterial();
2111+
// view->updateMaterial();
20942112
}
20952113

2114+
void TaskPostCalculator::onReplaceInvalidChanged(bool state)
2115+
{
2116+
auto obj = static_cast<Fem::FemPostCalculatorFilter*>(getObject());
2117+
obj->ReplaceInvalid.setValue(state);
2118+
ui->dsb_replacement_value->setEnabled(state);
2119+
recompute();
2120+
}
2121+
2122+
void TaskPostCalculator::onReplacementValueChanged(double value)
2123+
{
2124+
auto obj = static_cast<Fem::FemPostCalculatorFilter*>(getObject());
2125+
obj->ReplacementValue.setValue(value);
2126+
recompute();
2127+
}
20962128

20972129
#include "moc_TaskPostBoxes.cpp"

src/Mod/Fem/Gui/TaskPostBoxes.h

+2
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,8 @@ class TaskPostCalculator: public TaskPostBox
529529
void setupConnections();
530530
void onFieldNameChanged();
531531
void onFunctionChanged();
532+
void onReplaceInvalidChanged(bool state);
533+
void onReplacementValueChanged(double value);
532534

533535
private:
534536
QWidget* proxy;

src/Mod/Fem/Gui/TaskPostCalculator.ui

+20-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<item row="0" column="0">
2020
<widget class="QLabel" name="lbl_field_name">
2121
<property name="text">
22-
<string>Field Name</string>
22+
<string>Field Name:</string>
2323
</property>
2424
</widget>
2525
</item>
@@ -30,16 +30,34 @@
3030
<item row="1" column="0">
3131
<widget class="QLabel" name="lbl_function">
3232
<property name="text">
33-
<string>Function</string>
33+
<string>Function:</string>
3434
</property>
3535
</widget>
3636
</item>
3737
<item row="1" column="1">
3838
<widget class="QLineEdit" name="let_function">
3939
</widget>
4040
</item>
41+
<item row="2" column="0">
42+
<widget class="QCheckBox" name="ckb_replace_invalid">
43+
<property name="text">
44+
<string>Replacement Value:</string>
45+
</property>
46+
</widget>
47+
</item>
48+
<item row="2" column="1">
49+
<widget class="Gui::DoubleSpinBox" name="dsb_replacement_value">
50+
</widget>
51+
</item>
4152
</layout>
4253
</item>
4354
</layout>
4455
</widget>
56+
<customwidgets>
57+
<customwidget>
58+
<class>Gui::DoubleSpinBox</class>
59+
<extends>QWidget</extends>
60+
<header>Gui/SpinBox.h</header>
61+
</customwidget>
62+
</customwidgets>
4563
</ui>

src/Mod/Fem/Gui/ViewProviderFemPostFilter.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -230,15 +230,18 @@ ViewProviderFemPostCalculator::~ViewProviderFemPostCalculator() = default;
230230

231231
void ViewProviderFemPostCalculator::updateData(const App::Property* prop)
232232
{
233+
printf("PROP NAME: %s\n", prop->getName());
233234
auto obj = getObject<Fem::FemPostCalculatorFilter>();
234235
if (prop == &obj->Data) {
235236
printf("updata Material\n");
236237
// update color bar
238+
ViewProviderFemPostObject::updateData(prop);
237239
updateMaterial();
238-
Field.touch();
240+
// Field.touch();
241+
}
242+
else {
243+
return ViewProviderFemPostObject::updateData(prop);
239244
}
240-
241-
return ViewProviderFemPostObject::updateData(prop);
242245
}
243246

244247
void ViewProviderFemPostCalculator::setupTaskDialog(TaskDlgPost* dlg)

src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,9 @@ void ViewProviderFemPostObject::WriteColorData(bool ResetColorBarRange)
690690
component = 0;
691691
}
692692

693+
double ranges[2];
694+
data->GetRange(ranges, component);
695+
printf("DATA: %s\t%f\t%f\n", data->GetName(), ranges[0], ranges[1]);
693696
// build the lookuptable
694697
if (ResetColorBarRange) {
695698
printf("colordata4\n");

0 commit comments

Comments
 (0)