Fem: Add box and elliptical beam section types - fixes #12614
This commit is contained in:
committed by
Chris Hennes
parent
e34fd72956
commit
b7ccf634af
@@ -20,46 +20,16 @@
|
||||
<string>Cross section parameter</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="_2">
|
||||
<property name="leftMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QComboBox" name="cb_crosssectiontype"/>
|
||||
<widget class="QComboBox" name="cb_cross_section_type"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QStackedWidget" name="widget_stack">
|
||||
<property name="currentIndex">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="page_all">
|
||||
<widget class="QWidget" name="wgt_rectangular">
|
||||
<layout class="QGridLayout" name="_3">
|
||||
<property name="leftMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="1" column="0">
|
||||
<layout class="QFormLayout" name="formLayout_1">
|
||||
<property name="fieldGrowthPolicy">
|
||||
@@ -121,23 +91,8 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="page_remaining">
|
||||
<widget class="QWidget" name="wgt_cicular">
|
||||
<layout class="QGridLayout" name="_5">
|
||||
<property name="leftMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<property name="fieldGrowthPolicy">
|
||||
@@ -173,7 +128,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="page_referenced">
|
||||
<widget class="QWidget" name="wgt_pipe">
|
||||
<layout class="QGridLayout" name="gridLayout_11">
|
||||
<item row="0" column="0">
|
||||
<layout class="QFormLayout" name="formLayout_3">
|
||||
@@ -236,6 +191,284 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="wgt_elliptical">
|
||||
<layout class="QGridLayout" name="gridLayout_12">
|
||||
<item row="0" column="0">
|
||||
<layout class="QFormLayout" name="formLayout_4">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="l_elliptical_axis1">
|
||||
<property name="text">
|
||||
<string>Axis1 Length:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_elliptical_axis1">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="l_elliptical_axis2">
|
||||
<property name="text">
|
||||
<string>Axis2 Length:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_elliptical_axis2">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="wgt_box">
|
||||
<layout class="QGridLayout" name="gridLayout_13">
|
||||
<item row="0" column="0">
|
||||
<layout class="QFormLayout" name="formLayout_5">
|
||||
<property name="fieldGrowthPolicy">
|
||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
||||
</property>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="l_box_height">
|
||||
<property name="text">
|
||||
<string>Height:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_box_height">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="l_box_width">
|
||||
<property name="text">
|
||||
<string>Width:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_box_width">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="l_box_t1">
|
||||
<property name="text">
|
||||
<string>T1 Thickness:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_box_t1">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="l_box_t2">
|
||||
<property name="text">
|
||||
<string>T2 Thickness:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_box_t2">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="l_box_t3">
|
||||
<property name="text">
|
||||
<string>T3 Thickness:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_box_t3">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="l_box_t4">
|
||||
<property name="text">
|
||||
<string>T4 Thickness:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="Gui::QuantitySpinBox" name="qsb_box_t4">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeft|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>1.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>1000000000.000000000000000</double>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="unit" stdset="0">
|
||||
<string notr="true">mm</string>
|
||||
</property>
|
||||
<property name="decimals" stdset="0">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="value" stdset="0">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
@@ -266,7 +499,7 @@
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>cb_crosssectiontype</sender>
|
||||
<sender>cb_cross_section_type</sender>
|
||||
<signal>currentIndexChanged(int)</signal>
|
||||
<receiver>widget_stack</receiver>
|
||||
<slot>setCurrentIndex(int)</slot>
|
||||
|
||||
@@ -351,7 +351,7 @@ def makeElementFluid1D(doc, name="ElementFluid1D"):
|
||||
|
||||
|
||||
def makeElementGeometry1D(
|
||||
doc, sectiontype="Rectangular", width=10.0, height=25.0, name="ElementGeometry1D"
|
||||
doc, sectiontype="Rectangular", width=10.0, height=25.0, thickness=2.0, name="ElementGeometry1D"
|
||||
):
|
||||
"""makeElementGeometry1D(document, [width], [height], [name]):
|
||||
creates a 1D geometry element object to define a cross section"""
|
||||
@@ -359,17 +359,22 @@ def makeElementGeometry1D(
|
||||
from femobjects import element_geometry1D
|
||||
|
||||
element_geometry1D.ElementGeometry1D(obj)
|
||||
sec_types = element_geometry1D.ElementGeometry1D.known_beam_types
|
||||
if sectiontype not in sec_types:
|
||||
FreeCAD.Console.PrintError("Section type is unknown. Set to " + sec_types[0] + " \n")
|
||||
obj.SectionType = sec_types[0]
|
||||
else:
|
||||
obj.SectionType = sectiontype
|
||||
|
||||
obj.SectionType = sectiontype
|
||||
obj.RectWidth = width
|
||||
obj.RectHeight = height
|
||||
obj.CircDiameter = height
|
||||
obj.PipeDiameter = height
|
||||
obj.PipeThickness = width
|
||||
obj.PipeThickness = thickness
|
||||
obj.Axis1Length = width
|
||||
obj.Axis2Length = height
|
||||
obj.BoxHeight = height
|
||||
obj.BoxWidth = width
|
||||
obj.BoxT1 = thickness
|
||||
obj.BoxT2 = thickness
|
||||
obj.BoxT3 = thickness
|
||||
obj.BoxT4 = thickness
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
from femviewprovider import view_element_geometry1D
|
||||
|
||||
|
||||
@@ -29,7 +29,11 @@ __url__ = "https://www.freecad.org"
|
||||
# \ingroup FEM
|
||||
# \brief element geometry 1D object
|
||||
|
||||
from FreeCAD import Base
|
||||
from . import base_femelement
|
||||
from . import base_fempythonobject
|
||||
|
||||
_PropHelper = base_fempythonobject._PropHelper
|
||||
|
||||
|
||||
class ElementGeometry1D(base_femelement.BaseFemElement):
|
||||
@@ -38,55 +42,150 @@ class ElementGeometry1D(base_femelement.BaseFemElement):
|
||||
"""
|
||||
|
||||
Type = "Fem::ElementGeometry1D"
|
||||
known_beam_types = ["Rectangular", "Circular", "Pipe"]
|
||||
|
||||
def __init__(self, obj):
|
||||
super().__init__(obj)
|
||||
|
||||
obj.addProperty(
|
||||
"App::PropertyLength",
|
||||
"RectWidth",
|
||||
"RectBeamSection",
|
||||
"set width of the rectangular beam elements",
|
||||
)
|
||||
obj.setPropertyStatus("RectWidth", "LockDynamic")
|
||||
def _get_properties(self):
|
||||
prop = super()._get_properties()
|
||||
|
||||
obj.addProperty(
|
||||
"App::PropertyLength",
|
||||
"RectHeight",
|
||||
"RectBeamSection",
|
||||
"set height of therectangular beam elements",
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="RectWidth",
|
||||
group="RectBeamSection",
|
||||
doc="Set width of the rectangular beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
obj.setPropertyStatus("RectHeight", "LockDynamic")
|
||||
|
||||
obj.addProperty(
|
||||
"App::PropertyLength",
|
||||
"CircDiameter",
|
||||
"CircBeamSection",
|
||||
"set diameter of the circular beam elements",
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="RectHeight",
|
||||
group="RectBeamSection",
|
||||
doc="Set height of there ctangular beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
obj.setPropertyStatus("CircDiameter", "LockDynamic")
|
||||
|
||||
obj.addProperty(
|
||||
"App::PropertyLength",
|
||||
"PipeDiameter",
|
||||
"PipeBeamSection",
|
||||
"set outer diameter of the pipe beam elements",
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="CircDiameter",
|
||||
group="CircBeamSection",
|
||||
doc="Set diameter of the circular beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
obj.setPropertyStatus("PipeDiameter", "LockDynamic")
|
||||
|
||||
obj.addProperty(
|
||||
"App::PropertyLength",
|
||||
"PipeThickness",
|
||||
"PipeBeamSection",
|
||||
"set thickness of the pipe beam elements",
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="PipeDiameter",
|
||||
group="PipeBeamSection",
|
||||
doc="Set outer diameter of the pipe beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
obj.setPropertyStatus("PipeThickness", "LockDynamic")
|
||||
|
||||
obj.addProperty(
|
||||
"App::PropertyEnumeration", "SectionType", "BeamSection", "select beam section type"
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="PipeThickness",
|
||||
group="PipeBeamSection",
|
||||
doc="Set thickness of the pipe beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="Axis1Length",
|
||||
group="EllipticalBeamSection",
|
||||
doc="Set first principal axis length of the elliptical beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="Axis2Length",
|
||||
group="EllipticalBeamSection",
|
||||
doc="Set second principal axis length of the elliptical beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="BoxWidth",
|
||||
group="BoxBeamSection",
|
||||
doc="Set width of the box beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="BoxHeight",
|
||||
group="BoxBeamSection",
|
||||
doc="Set height of the box beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="BoxT1",
|
||||
group="BoxBeamSection",
|
||||
doc="Set thickness parameter t1 of the box beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="BoxT2",
|
||||
group="BoxBeamSection",
|
||||
doc="Set thickness parameter t2 of the box beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="BoxT3",
|
||||
group="BoxBeamSection",
|
||||
doc="Set thickness parameter t3 of the box beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyLength",
|
||||
name="BoxT4",
|
||||
group="BoxBeamSection",
|
||||
doc="Set thickness parameter t4 of the box beam elements",
|
||||
value=0.0,
|
||||
)
|
||||
)
|
||||
prop.append(
|
||||
_PropHelper(
|
||||
type="App::PropertyEnumeration",
|
||||
name="SectionType",
|
||||
group="BeamSection",
|
||||
doc="Select beam section type",
|
||||
value=["Rectangular", "Circular", "Pipe", "Elliptical", "Box"],
|
||||
)
|
||||
)
|
||||
obj.setPropertyStatus("SectionType", "LockDynamic")
|
||||
|
||||
obj.SectionType = ElementGeometry1D.known_beam_types
|
||||
obj.SectionType = "Rectangular"
|
||||
return prop
|
||||
|
||||
def onDocumentRestored(self, obj):
|
||||
# update old project with new properties
|
||||
for prop in self._get_properties():
|
||||
try:
|
||||
obj.getPropertyByName(prop.name)
|
||||
except Base.PropertyError:
|
||||
prop.add_to_object(obj)
|
||||
|
||||
if prop.name == "SectionType":
|
||||
# refresh the list of known section types for old projects
|
||||
obj.SectionType = prop.value
|
||||
|
||||
@@ -45,7 +45,6 @@ def write_femelement_geometry(f, ccxwriter):
|
||||
section_nor = "{:.13G}, {:.13G}, {:.13G}\n".format(
|
||||
beam_axis_m[0], beam_axis_m[1], beam_axis_m[2]
|
||||
)
|
||||
print(section_nor)
|
||||
if beamsec_obj.SectionType == "Rectangular":
|
||||
# see meshtools.get_beam_main_axis_m(beam_direction, defined_angle)
|
||||
# the method get_beam_main_axis_m() which calculates the beam_axis_m vector
|
||||
@@ -66,12 +65,29 @@ def write_femelement_geometry(f, ccxwriter):
|
||||
section_type = ", SECTION=CIRC"
|
||||
section_geo = f"{diameter:.13G}\n"
|
||||
section_def = f"*BEAM SECTION, {elsetdef}{material}{section_type}\n"
|
||||
elif beamsec_obj.SectionType == "Elliptical":
|
||||
axis1 = beamsec_obj.Axis1Length.getValueAs("mm").Value
|
||||
axis2 = beamsec_obj.Axis2Length.getValueAs("mm").Value
|
||||
section_type = ", SECTION=CIRC"
|
||||
section_geo = f"{axis1:.13G},{axis2:.13G}\n"
|
||||
section_def = f"*BEAM SECTION, {elsetdef}{material}{section_type}\n"
|
||||
elif beamsec_obj.SectionType == "Pipe":
|
||||
radius = 0.5 * beamsec_obj.PipeDiameter.getValueAs("mm").Value
|
||||
thickness = beamsec_obj.PipeThickness.getValueAs("mm").Value
|
||||
section_type = ", SECTION=PIPE"
|
||||
section_geo = f"{radius:.13G},{thickness:.13G}\n"
|
||||
section_def = f"*BEAM SECTION, {elsetdef}{material}{section_type}\n"
|
||||
elif beamsec_obj.SectionType == "Box":
|
||||
box_width = beamsec_obj.BoxWidth.getValueAs("mm").Value
|
||||
box_height = beamsec_obj.BoxHeight.getValueAs("mm").Value
|
||||
box_t1 = beamsec_obj.BoxT1.getValueAs("mm").Value
|
||||
box_t2 = beamsec_obj.BoxT2.getValueAs("mm").Value
|
||||
box_t3 = beamsec_obj.BoxT3.getValueAs("mm").Value
|
||||
box_t4 = beamsec_obj.BoxT4.getValueAs("mm").Value
|
||||
section_type = ", SECTION=BOX"
|
||||
section_geo = f"{box_width:.13G},{box_height:.13G},{box_t1:.13G},{box_t2:.13G},{box_t3:.13G},{box_t4:.13G}\n"
|
||||
section_def = f"*BEAM SECTION, {elsetdef}{material}{section_type}\n"
|
||||
|
||||
f.write(section_def)
|
||||
f.write(section_geo)
|
||||
f.write(section_nor)
|
||||
|
||||
@@ -52,7 +52,7 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel):
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementGeometry1D.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.cb_crosssectiontype,
|
||||
self.parameter_widget.cb_cross_section_type,
|
||||
QtCore.SIGNAL("activated(int)"),
|
||||
self.sectiontype_changed,
|
||||
)
|
||||
@@ -81,10 +81,51 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel):
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.pipe_thickness_changed,
|
||||
)
|
||||
|
||||
self.parameter_widget.cb_crosssectiontype.addItems(
|
||||
element_geometry1D.ElementGeometry1D.known_beam_types
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_elliptical_axis1,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.elliptical_axis1_changed,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_elliptical_axis2,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.elliptical_axis2_changed,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_box_height,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.box_height_changed,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_box_width,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.box_width_changed,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_box_t1,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.box_t1_changed,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_box_t2,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.box_t2_changed,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_box_t3,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.box_t3_changed,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameter_widget.qsb_box_t4,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.box_t4_changed,
|
||||
)
|
||||
|
||||
self.parameter_widget.cb_cross_section_type.addItems(
|
||||
obj.getEnumerationsOfProperty("SectionType")
|
||||
)
|
||||
|
||||
self.get_beamsection_props()
|
||||
self.update_parameter_widget()
|
||||
|
||||
@@ -113,6 +154,14 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel):
|
||||
self.circ_diameter = self.obj.CircDiameter
|
||||
self.pipe_diameter = self.obj.PipeDiameter
|
||||
self.pipe_thickness = self.obj.PipeThickness
|
||||
self.axis1_length = self.obj.Axis1Length
|
||||
self.axis2_length = self.obj.Axis2Length
|
||||
self.box_height = self.obj.BoxHeight
|
||||
self.box_width = self.obj.BoxWidth
|
||||
self.box_t1 = self.obj.BoxT1
|
||||
self.box_t2 = self.obj.BoxT2
|
||||
self.box_t3 = self.obj.BoxT3
|
||||
self.box_t4 = self.obj.BoxT4
|
||||
|
||||
def set_beamsection_props(self):
|
||||
self.obj.SectionType = self.section_type
|
||||
@@ -121,15 +170,17 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel):
|
||||
self.obj.CircDiameter = self.circ_diameter
|
||||
self.obj.PipeDiameter = self.pipe_diameter
|
||||
self.obj.PipeThickness = self.pipe_thickness
|
||||
self.obj.Axis1Length = self.axis1_length
|
||||
self.obj.Axis2Length = self.axis2_length
|
||||
self.obj.BoxHeight = self.box_height
|
||||
self.obj.BoxWidth = self.box_width
|
||||
self.obj.BoxT1 = self.box_t1
|
||||
self.obj.BoxT2 = self.box_t2
|
||||
self.obj.BoxT3 = self.box_t3
|
||||
self.obj.BoxT4 = self.box_t4
|
||||
|
||||
def update_parameter_widget(self):
|
||||
"fills the widgets"
|
||||
self.rect_height = self.obj.RectHeight
|
||||
self.rect_width = self.obj.RectWidth
|
||||
self.circ_diameter = self.obj.CircDiameter
|
||||
self.pipe_diameter = self.obj.PipeDiameter
|
||||
self.pipe_thickness = self.obj.PipeThickness
|
||||
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_rec_height).bind(
|
||||
self.obj, "RectHeight"
|
||||
)
|
||||
@@ -153,16 +204,42 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel):
|
||||
)
|
||||
self.parameter_widget.qsb_pipe_thickness.setProperty("value", self.pipe_thickness)
|
||||
|
||||
index_crosssectiontype = self.parameter_widget.cb_crosssectiontype.findText(
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_elliptical_axis1).bind(
|
||||
self.obj, "Axis1Length"
|
||||
)
|
||||
self.parameter_widget.qsb_elliptical_axis1.setProperty("value", self.axis1_length)
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_elliptical_axis2).bind(
|
||||
self.obj, "Axis2Length"
|
||||
)
|
||||
self.parameter_widget.qsb_elliptical_axis2.setProperty("value", self.axis2_length)
|
||||
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_box_height).bind(
|
||||
self.obj, "BoxHeight"
|
||||
)
|
||||
self.parameter_widget.qsb_box_height.setProperty("value", self.box_height)
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_box_width).bind(self.obj, "BoxWidth")
|
||||
self.parameter_widget.qsb_box_width.setProperty("value", self.box_width)
|
||||
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_box_t1).bind(self.obj, "BoxT1")
|
||||
self.parameter_widget.qsb_box_t1.setProperty("value", self.box_t1)
|
||||
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_box_t2).bind(self.obj, "BoxT2")
|
||||
self.parameter_widget.qsb_box_t2.setProperty("value", self.box_t2)
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_box_t3).bind(self.obj, "BoxT3")
|
||||
self.parameter_widget.qsb_box_t3.setProperty("value", self.box_t3)
|
||||
FreeCADGui.ExpressionBinding(self.parameter_widget.qsb_box_t4).bind(self.obj, "BoxT4")
|
||||
self.parameter_widget.qsb_box_t4.setProperty("value", self.box_t4)
|
||||
|
||||
index_cross_section_type = self.parameter_widget.cb_cross_section_type.findText(
|
||||
self.section_type
|
||||
)
|
||||
self.parameter_widget.cb_crosssectiontype.setCurrentIndex(index_crosssectiontype)
|
||||
self.parameter_widget.cb_cross_section_type.setCurrentIndex(index_cross_section_type)
|
||||
|
||||
def sectiontype_changed(self, index):
|
||||
if index < 0:
|
||||
return
|
||||
self.parameter_widget.cb_crosssectiontype.setCurrentIndex(index)
|
||||
self.section_type = self.parameter_widget.cb_crosssectiontype.itemText(index)
|
||||
self.parameter_widget.cb_cross_section_type.setCurrentIndex(index)
|
||||
self.section_type = self.parameter_widget.cb_cross_section_type.itemText(index)
|
||||
|
||||
def rec_height_changed(self, base_quantity_value):
|
||||
self.rect_height = base_quantity_value
|
||||
@@ -178,3 +255,27 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel):
|
||||
|
||||
def pipe_thickness_changed(self, base_quantity_value):
|
||||
self.pipe_thickness = base_quantity_value
|
||||
|
||||
def elliptical_axis1_changed(self, base_quantity_value):
|
||||
self.axis1_length = base_quantity_value
|
||||
|
||||
def elliptical_axis2_changed(self, base_quantity_value):
|
||||
self.axis2_length = base_quantity_value
|
||||
|
||||
def box_height_changed(self, base_quantity_value):
|
||||
self.box_height = base_quantity_value
|
||||
|
||||
def box_width_changed(self, base_quantity_value):
|
||||
self.box_width = base_quantity_value
|
||||
|
||||
def box_t1_changed(self, base_quantity_value):
|
||||
self.box_t1 = base_quantity_value
|
||||
|
||||
def box_t2_changed(self, base_quantity_value):
|
||||
self.box_t2 = base_quantity_value
|
||||
|
||||
def box_t3_changed(self, base_quantity_value):
|
||||
self.box_t3 = base_quantity_value
|
||||
|
||||
def box_t4_changed(self, base_quantity_value):
|
||||
self.box_t4 = base_quantity_value
|
||||
|
||||
Reference in New Issue
Block a user