Skip to content

Commit 77a8072

Browse files
committed
Fem: Improve constraint tie - partial fixes FreeCAD#11653
1 parent 2e2aef8 commit 77a8072

File tree

4 files changed

+48
-39
lines changed

4 files changed

+48
-39
lines changed

src/Mod/Fem/Gui/Resources/ui/ConstraintTie.ui

+16-30
Original file line numberDiff line numberDiff line change
@@ -28,41 +28,20 @@
2828
<layout class="QVBoxLayout" name="verticalLayout_5">
2929
<item>
3030
<layout class="QFormLayout" name="formLayout_1">
31-
<property name="fieldGrowthPolicy">
32-
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
33-
</property>
3431
<item row="1" column="1">
35-
<widget class="Gui::InputField" name="if_tolerance">
36-
<property name="sizePolicy">
37-
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
38-
<horstretch>0</horstretch>
39-
<verstretch>0</verstretch>
40-
</sizepolicy>
41-
</property>
42-
<property name="minimumSize">
43-
<size>
44-
<width>80</width>
45-
<height>20</height>
46-
</size>
47-
</property>
48-
<property name="layoutDirection">
49-
<enum>Qt::LeftToRight</enum>
50-
</property>
51-
<property name="text">
52-
<string>0 mm</string>
32+
<widget class="Gui::QuantitySpinBox" name="spb_tolerance">
33+
<property name="unit" stdset="0">
34+
<string notr="true">mm</string>
5335
</property>
54-
<property name="alignment">
55-
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
36+
<property name="value" stdset="0">
37+
<double>0.000000000000000</double>
5638
</property>
5739
<property name="singleStep">
5840
<double>1.000000000000000</double>
5941
</property>
6042
<property name="maximum">
6143
<double>1000000000.000000000000000</double>
6244
</property>
63-
<property name="unit" stdset="0">
64-
<string notr="true">mm</string>
65-
</property>
6645
<property name="decimals" stdset="0">
6746
<number>2</number>
6847
</property>
@@ -74,7 +53,14 @@
7453
<item row="1" column="0">
7554
<widget class="QLabel" name="l_tolerance">
7655
<property name="text">
77-
<string>Tolerance: </string>
56+
<string>Tolerance</string>
57+
</property>
58+
</widget>
59+
</item>
60+
<item row="2" column="0">
61+
<widget class="QCheckBox" name="ckb_adjust">
62+
<property name="text">
63+
<string>Enable Adjust</string>
7864
</property>
7965
</widget>
8066
</item>
@@ -87,9 +73,9 @@
8773
</widget>
8874
<customwidgets>
8975
<customwidget>
90-
<class>Gui::InputField</class>
91-
<extends>QLineEdit</extends>
92-
<header>Gui/InputField.h</header>
76+
<class>Gui::QuantitySpinBox</class>
77+
<extends>QWidget</extends>
78+
<header>Gui/QuantitySpinBox.h</header>
9379
</customwidget>
9480
</customwidgets>
9581
<resources/>

src/Mod/Fem/femobjects/constraint_tie.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,14 @@ def __init__(self, obj):
4646
"App::PropertyLength",
4747
"Tolerance",
4848
"Geometry",
49-
"set max gap between tied faces"
49+
"Set max gap between tied faces"
5050
)
51+
obj.Tolerance = "0.0 mm"
52+
53+
obj.addProperty(
54+
"App::PropertyBool",
55+
"Adjust",
56+
"Geometry",
57+
"Adjust connected nodes"
58+
)
59+
obj.Adjust = False

src/Mod/Fem/femsolver/calculix/write_constraint_tie.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -58,22 +58,25 @@ def write_meshdata_constraint(f, femobj, tie_obj, ccxwriter):
5858
# slave DEP
5959
f.write("*SURFACE, NAME=TIE_DEP{}\n".format(tie_obj.Name))
6060
for i in femobj["TieSlaveFaces"]:
61-
f.write("{},S{}\n".format(i[0], i[1]))
61+
f.write("{}, S{}\n".format(i[0], i[1]))
6262
# master IND
6363
f.write("*SURFACE, NAME=TIE_IND{}\n".format(tie_obj.Name))
6464
for i in femobj["TieMasterFaces"]:
65-
f.write("{},S{}\n".format(i[0], i[1]))
65+
f.write("{}, S{}\n".format(i[0], i[1]))
6666

6767

6868
def write_constraint(f, femobj, tie_obj, ccxwriter):
6969

7070
# floats read from ccx should use {:.13G}, see comment in writer module
7171

7272
tolerance = tie_obj.Tolerance.getValueAs("mm").Value
73+
adjust = ""
74+
if not tie_obj.Adjust:
75+
adjust = ", ADJUST=NO"
7376
f.write(
74-
"*TIE, POSITION TOLERANCE={:.13G}, ADJUST=NO, NAME=TIE{}\n"
75-
.format(tolerance, tie_obj.Name)
77+
"*TIE, POSITION TOLERANCE={:.13G}{}, NAME=TIE{}\n"
78+
.format(tolerance, adjust, tie_obj.Name)
7679
)
7780
ind_surf = "TIE_IND{}".format(tie_obj.Name)
7881
dep_surf = "TIE_DEP{}".format(tie_obj.Name)
79-
f.write("{},{}\n".format(dep_surf, ind_surf))
82+
f.write("{}, {}\n".format(dep_surf, ind_surf))

src/Mod/Fem/femtaskpanels/task_constraint_tie.py

+14-3
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,15 @@ def __init__(self, obj):
5252
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ConstraintTie.ui"
5353
)
5454
QtCore.QObject.connect(
55-
self.parameterWidget.if_tolerance,
55+
self.parameterWidget.spb_tolerance,
5656
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
5757
self.tolerance_changed
5858
)
59+
QtCore.QObject.connect(
60+
self.parameterWidget.ckb_adjust,
61+
QtCore.SIGNAL("toggled(bool)"),
62+
self.adjust_changed
63+
)
5964
self.init_parameter_widget()
6065

6166
# geometry selection widget
@@ -67,7 +72,7 @@ def __init__(self, obj):
6772
)
6873

6974
# form made from param and selection widget
70-
self.form = [self.parameterWidget, self.selectionWidget]
75+
self.form = [self.selectionWidget, self.parameterWidget]
7176

7277
def accept(self):
7378
# check values
@@ -94,6 +99,7 @@ def accept(self):
9499
elif msgBox.clickedButton() == ignoreButton:
95100
pass
96101
self.obj.Tolerance = self.tolerance
102+
self.obj.Adjust = self.adjust
97103
self.obj.References = self.selectionWidget.references
98104
self.recompute_and_set_back_all()
99105
return True
@@ -112,7 +118,12 @@ def recompute_and_set_back_all(self):
112118

113119
def init_parameter_widget(self):
114120
self.tolerance = self.obj.Tolerance
115-
self.parameterWidget.if_tolerance.setText(self.tolerance.UserString)
121+
self.adjust = self.obj.Adjust
122+
self.parameterWidget.spb_tolerance.setProperty("value", self.tolerance)
123+
self.parameterWidget.ckb_adjust.setChecked(self.adjust)
116124

117125
def tolerance_changed(self, base_quantity_value):
118126
self.tolerance = base_quantity_value
127+
128+
def adjust_changed(self, bool_value):
129+
self.adjust = bool_value

0 commit comments

Comments
 (0)