From 3dbb4b3dd3cc5fcaa136a4958dade972c225fcb7 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Fri, 26 Jan 2024 11:08:26 -0300 Subject: [PATCH] Fem: Improve constraint tie - partial fixes #11653 --- src/Mod/Fem/Gui/Resources/ui/ConstraintTie.ui | 46 +++++++------------ src/Mod/Fem/femobjects/constraint_tie.py | 11 ++++- .../calculix/write_constraint_tie.py | 9 ++-- .../Fem/femtaskpanels/task_constraint_tie.py | 17 +++++-- .../femtest/data/calculix/constraint_tie.inp | 2 +- 5 files changed, 47 insertions(+), 38 deletions(-) diff --git a/src/Mod/Fem/Gui/Resources/ui/ConstraintTie.ui b/src/Mod/Fem/Gui/Resources/ui/ConstraintTie.ui index 309fe91eca..c33c39b6eb 100644 --- a/src/Mod/Fem/Gui/Resources/ui/ConstraintTie.ui +++ b/src/Mod/Fem/Gui/Resources/ui/ConstraintTie.ui @@ -28,31 +28,13 @@ - - QFormLayout::AllNonFixedFieldsGrow - - - - - 0 - 0 - + + + mm - - - 80 - 20 - - - - Qt::LeftToRight - - - 0 mm - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + 0.000000000000000 1.000000000000000 @@ -60,9 +42,6 @@ 1000000000.000000000000000 - - mm - 2 @@ -74,7 +53,14 @@ - Tolerance: + Tolerance + + + + + + + Enable Adjust @@ -87,9 +73,9 @@ - Gui::InputField - QLineEdit -
Gui/InputField.h
+ Gui::QuantitySpinBox + QWidget +
Gui/QuantitySpinBox.h
diff --git a/src/Mod/Fem/femobjects/constraint_tie.py b/src/Mod/Fem/femobjects/constraint_tie.py index ad36031163..c983656706 100644 --- a/src/Mod/Fem/femobjects/constraint_tie.py +++ b/src/Mod/Fem/femobjects/constraint_tie.py @@ -46,5 +46,14 @@ class ConstraintTie(base_fempythonobject.BaseFemPythonObject): "App::PropertyLength", "Tolerance", "Geometry", - "set max gap between tied faces" + "Set max gap between tied faces" ) + obj.Tolerance = "0.0 mm" + + obj.addProperty( + "App::PropertyBool", + "Adjust", + "Geometry", + "Adjust connected nodes" + ) + obj.Adjust = False diff --git a/src/Mod/Fem/femsolver/calculix/write_constraint_tie.py b/src/Mod/Fem/femsolver/calculix/write_constraint_tie.py index 8817fa9954..c75ab90be3 100644 --- a/src/Mod/Fem/femsolver/calculix/write_constraint_tie.py +++ b/src/Mod/Fem/femsolver/calculix/write_constraint_tie.py @@ -70,10 +70,13 @@ def write_constraint(f, femobj, tie_obj, ccxwriter): # floats read from ccx should use {:.13G}, see comment in writer module tolerance = tie_obj.Tolerance.getValueAs("mm").Value + adjust = "" + if not tie_obj.Adjust: + adjust = ", ADJUST=NO" f.write( - "*TIE, POSITION TOLERANCE={:.13G}, ADJUST=NO, NAME=TIE{}\n" - .format(tolerance, tie_obj.Name) + "*TIE, POSITION TOLERANCE={:.13G}{}, NAME=TIE{}\n" + .format(tolerance, adjust, tie_obj.Name) ) ind_surf = "TIE_IND{}".format(tie_obj.Name) dep_surf = "TIE_DEP{}".format(tie_obj.Name) - f.write("{},{}\n".format(dep_surf, ind_surf)) + f.write("{}, {}\n".format(dep_surf, ind_surf)) diff --git a/src/Mod/Fem/femtaskpanels/task_constraint_tie.py b/src/Mod/Fem/femtaskpanels/task_constraint_tie.py index 05b1369c13..f2e97ede3f 100644 --- a/src/Mod/Fem/femtaskpanels/task_constraint_tie.py +++ b/src/Mod/Fem/femtaskpanels/task_constraint_tie.py @@ -52,10 +52,15 @@ class _TaskPanel: FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ConstraintTie.ui" ) QtCore.QObject.connect( - self.parameterWidget.if_tolerance, + self.parameterWidget.spb_tolerance, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.tolerance_changed ) + QtCore.QObject.connect( + self.parameterWidget.ckb_adjust, + QtCore.SIGNAL("toggled(bool)"), + self.adjust_changed + ) self.init_parameter_widget() # geometry selection widget @@ -67,7 +72,7 @@ class _TaskPanel: ) # form made from param and selection widget - self.form = [self.parameterWidget, self.selectionWidget] + self.form = [self.selectionWidget, self.parameterWidget] def accept(self): # check values @@ -94,6 +99,7 @@ class _TaskPanel: elif msgBox.clickedButton() == ignoreButton: pass self.obj.Tolerance = self.tolerance + self.obj.Adjust = self.adjust self.obj.References = self.selectionWidget.references self.recompute_and_set_back_all() return True @@ -112,7 +118,12 @@ class _TaskPanel: def init_parameter_widget(self): self.tolerance = self.obj.Tolerance - self.parameterWidget.if_tolerance.setText(self.tolerance.UserString) + self.adjust = self.obj.Adjust + self.parameterWidget.spb_tolerance.setProperty("value", self.tolerance) + self.parameterWidget.ckb_adjust.setChecked(self.adjust) def tolerance_changed(self, base_quantity_value): self.tolerance = base_quantity_value + + def adjust_changed(self, bool_value): + self.adjust = bool_value diff --git a/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp b/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp index d028a0ba94..a201c5415f 100644 --- a/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp +++ b/src/Mod/Fem/femtest/data/calculix/constraint_tie.inp @@ -18608,7 +18608,7 @@ Evolumes ** Tie Constraints ** ConstraintTie *TIE, POSITION TOLERANCE=25, ADJUST=NO, NAME=TIEConstraintTie -TIE_DEPConstraintTie,TIE_INDConstraintTie +TIE_DEPConstraintTie, TIE_INDConstraintTie *********************************************************** ** At least one step is needed to run an CalculiX analysis of FreeCAD