diff --git a/src/Mod/Fem/Gui/Command.cpp b/src/Mod/Fem/Gui/Command.cpp index 9032aa7b68..80807034a5 100644 --- a/src/Mod/Fem/Gui/Command.cpp +++ b/src/Mod/Fem/Gui/Command.cpp @@ -684,6 +684,7 @@ void CmdFemConstraintHeatflux::activated(int) doCommand(Doc, "App.activeDocument().addObject(\"Fem::ConstraintHeatflux\",\"%s\")", FeatName.c_str()); + doCommand(Doc, "App.activeDocument().%s.ConstraintType = \"DFlux\"", FeatName.c_str()); doCommand(Doc, "App.activeDocument().%s.AmbientTemp = 300.0", FeatName.c_str()); // OvG: set default not equal to 0 diff --git a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp index d66113c697..1afd064fd2 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.cpp @@ -61,11 +61,10 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux( &QAction::triggered, this, &TaskFemConstraintHeatflux::onReferenceDeleted); - - connect(ui->rb_convection, &QRadioButton::clicked, this, &TaskFemConstraintHeatflux::Conv); - connect(ui->rb_radiation, &QRadioButton::clicked, this, &TaskFemConstraintHeatflux::Rad); - connect(ui->rb_dflux, &QRadioButton::clicked, this, &TaskFemConstraintHeatflux::Flux); - + connect(ui->cb_constr_type, + qOverload(&QComboBox::activated), + this, + &TaskFemConstraintHeatflux::onConstrTypeChanged); connect(ui->qsb_heat_flux, qOverload(&QuantitySpinBox::valueChanged), this, @@ -105,11 +104,20 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux( ui->btnRemove->blockSignals(true); // Get the feature data - Fem::ConstraintHeatflux* pcConstraint = ConstraintView->getObject(); + auto pcConstraint = ConstraintView->getObject(); std::vector Objects = pcConstraint->References.getValues(); std::vector SubElements = pcConstraint->References.getSubValues(); // Fill data into dialog elements + App::PropertyEnumeration* constrType = &pcConstraint->ConstraintType; + QStringList qTypeList; + for (auto item : constrType->getEnumVector()) { + qTypeList << QString::fromUtf8(item.c_str()); + } + ui->cb_constr_type->addItems(qTypeList); + ui->cb_constr_type->setCurrentIndex(constrType->getValue()); + ui->sw_heatflux->setCurrentIndex(constrType->getValue()); + ui->qsb_ambienttemp_conv->setMinimum(0); ui->qsb_ambienttemp_conv->setMaximum(FLOAT_MAX); @@ -130,21 +138,6 @@ TaskFemConstraintHeatflux::TaskFemConstraintHeatflux( ui->qsb_heat_flux->setValue(pcConstraint->DFlux.getQuantityValue()); - std::string constraint_type = pcConstraint->ConstraintType.getValueAsString(); - - if (constraint_type == "Convection") { - ui->rb_convection->setChecked(true); - ui->sw_heatflux->setCurrentIndex(0); - } - else if (constraint_type == "Radiation") { - ui->rb_radiation->setChecked(true); - ui->sw_heatflux->setCurrentIndex(1); - } - else if (constraint_type == "DFlux") { - ui->rb_dflux->setChecked(true); - ui->sw_heatflux->setCurrentIndex(2); - } - ui->lw_references->clear(); for (std::size_t i = 0; i < Objects.size(); i++) { ui->lw_references->addItem(makeRefText(Objects[i], SubElements[i])); @@ -216,12 +209,12 @@ void TaskFemConstraintHeatflux::Conv() Fem::ConstraintHeatflux* pcConstraint = ConstraintView->getObject(); std::string name = ConstraintView->getObject()->getNameInDocument(); Gui::Command::doCommand(Gui::Command::Doc, - "App.ActiveDocument.%s.ConstraintType = %s", + "App.ActiveDocument.%s.ConstraintType = \"%s\"", name.c_str(), - get_constraint_type().c_str()); + getConstraintType().c_str()); ui->qsb_ambienttemp_conv->setValue(pcConstraint->AmbientTemp.getQuantityValue()); ui->qsb_film_coef->setValue(pcConstraint->FilmCoef.getQuantityValue()); - ui->sw_heatflux->setCurrentIndex(0); + ui->sw_heatflux->setCurrentIndex(1); } void TaskFemConstraintHeatflux::Rad() @@ -229,12 +222,12 @@ void TaskFemConstraintHeatflux::Rad() Fem::ConstraintHeatflux* pcConstraint = ConstraintView->getObject(); std::string name = ConstraintView->getObject()->getNameInDocument(); Gui::Command::doCommand(Gui::Command::Doc, - "App.ActiveDocument.%s.ConstraintType = %s", + "App.ActiveDocument.%s.ConstraintType = \"%s\"", name.c_str(), - get_constraint_type().c_str()); + getConstraintType().c_str()); ui->qsb_ambienttemp_rad->setValue(pcConstraint->AmbientTemp.getQuantityValue()); ui->dsb_emissivity->setValue(pcConstraint->Emissivity.getValue()); - ui->sw_heatflux->setCurrentIndex(1); + ui->sw_heatflux->setCurrentIndex(2); } void TaskFemConstraintHeatflux::Flux() @@ -242,11 +235,27 @@ void TaskFemConstraintHeatflux::Flux() Fem::ConstraintHeatflux* pcConstraint = ConstraintView->getObject(); std::string name = ConstraintView->getObject()->getNameInDocument(); Gui::Command::doCommand(Gui::Command::Doc, - "App.ActiveDocument.%s.ConstraintType = %s", + "App.ActiveDocument.%s.ConstraintType = \"%s\"", name.c_str(), - get_constraint_type().c_str()); + getConstraintType().c_str()); ui->qsb_heat_flux->setValue(pcConstraint->DFlux.getQuantityValue()); - ui->sw_heatflux->setCurrentIndex(2); + ui->sw_heatflux->setCurrentIndex(0); +} + +void TaskFemConstraintHeatflux::onConstrTypeChanged(int item) +{ + auto obj = ConstraintView->getObject(); + obj->ConstraintType.setValue(item); + const char* type = obj->ConstraintType.getValueAsString(); + if (strcmp(type, "DFlux") == 0) { + this->Flux(); + } + else if (strcmp(type, "Convection") == 0) { + this->Conv(); + } + else if (strcmp(type, "Radiation") == 0) { + this->Rad(); + } } void TaskFemConstraintHeatflux::addToSelection() @@ -401,14 +410,17 @@ const std::string TaskFemConstraintHeatflux::getReferences() const std::string TaskFemConstraintHeatflux::getAmbientTemp() const { - if (ui->rb_convection->isChecked()) { + std::string type = this->getConstraintType(); + if (type == "Convection") { return ui->qsb_ambienttemp_conv->value().getSafeUserString(); } - if (ui->rb_radiation->isChecked()) { + else if (type == "Convection") { return ui->qsb_ambienttemp_rad->value().getSafeUserString(); } - auto obj = ConstraintView->getObject(); - return obj->AmbientTemp.getQuantityValue().getSafeUserString(); + else { + auto obj = ConstraintView->getObject(); + return obj->AmbientTemp.getQuantityValue().getSafeUserString(); + } } std::string TaskFemConstraintHeatflux::getFilmCoef() const @@ -426,19 +438,9 @@ double TaskFemConstraintHeatflux::getEmissivity() const return ui->dsb_emissivity->value(); } -std::string TaskFemConstraintHeatflux::get_constraint_type() const +std::string TaskFemConstraintHeatflux::getConstraintType() const { - std::string type; - if (ui->rb_convection->isChecked()) { - type = "\"Convection\""; - } - else if (ui->rb_radiation->isChecked()) { - type = "\"Radiation\""; - } - else if (ui->rb_dflux->isChecked()) { - type = "\"DFlux\""; - } - return type; + return ui->cb_constr_type->currentText().toStdString(); } void TaskFemConstraintHeatflux::changeEvent(QEvent* e) diff --git a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h index 00f1e002ed..5491b357af 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.h @@ -50,7 +50,7 @@ public: std::string getFilmCoef() const; std::string getDFlux() const; double getEmissivity() const; - std::string get_constraint_type() const; + std::string getConstraintType() const; const std::string getReferences() const override; private Q_SLOTS: @@ -60,6 +60,7 @@ private Q_SLOTS: void onFilmCoefChanged(double val); void onEmissivityChanged(double val); void onHeatFluxChanged(double val); + void onConstrTypeChanged(int val); void Conv(); void Rad(); void Flux(); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.ui b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.ui index 48da9dc726..aaf9c32964 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.ui +++ b/src/Mod/Fem/Gui/TaskFemConstraintHeatflux.ui @@ -63,90 +63,55 @@ - - - Surface Convection - - - - - - - Surface Radiation - - - - - - - Surface heat flux - - + + + + + Constraint Type + + + + + + + - 0 + 1 - - + + + + 0 + - - - - - - - Film Coefficient - - - - - - - W/m^2/K - - - Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter - - - 1.000000000000000 - - - 0.000000000000000 - - - - + + + + + Surface Heat Flux + + - - - - - - Ambient Temperature - - - - - - - K - - - Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter - - - 1.000000000000000 - - - 300.0000000000000 - - - - + + + + W/m^2 + + + Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter + + + 1.000000000000000 + + + 0.000000000000000 + + @@ -156,59 +121,57 @@ 1 - + + + 0 + - - - - - - - Emissivity - - - - - - - Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter - - - 0.100000000000000 - - - 1.000000000000000 - - - - + + + + + Film Coefficient + + - - - - - - Ambient Temperature - - - - - - - K - - - Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter - - - 1.000000000000000 - - - 300.0000000000000 - - - - + + + + W/m^2/K + + + Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter + + + 1.000000000000000 + + + 0.000000000000000 + + + + + + + Ambient Temperature + + + + + + + K + + + Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter + + + 1.000000000000000 + + + 300.0000000000000 + + @@ -218,30 +181,58 @@ 2 - + + + 0 + - - - + + + - Surface Heat Flux + Emissivity - - - - W/m^2 + + + + + 100 + + + + Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter + + + 0.100000000000000 + + + 1.000000000000000 + + + + + + + Ambient Temperature + + + + + + + K + + + Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter + + + 1.000000000000000 + + + 300.0000000000000 - - Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter - - - 1.000000000000000 - - - 0.000000000000000 - @@ -253,11 +244,6 @@ - - Gui::InputField - QLineEdit -
Gui/InputField.h
-
Gui::QuantitySpinBox QWidget