From c06c150d9b35d5005f224e894f6375ef3ac7c41e Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Tue, 20 Dec 2016 18:11:51 +0100 Subject: [PATCH] FEM: beam section properties, use diameter instead of radius --- src/Mod/Fem/FemBeamSection.py | 14 ++++++++++---- src/Mod/Fem/FemInputWriterCcx.py | 4 ++-- src/Mod/Fem/_FemBeamSection.py | 6 +++--- src/Mod/Fem/_TaskPanelFemBeamSection.py | 16 ++++++++-------- 4 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/Mod/Fem/FemBeamSection.py b/src/Mod/Fem/FemBeamSection.py index 8d24a9703..f1f5e5e44 100644 --- a/src/Mod/Fem/FemBeamSection.py +++ b/src/Mod/Fem/FemBeamSection.py @@ -31,15 +31,21 @@ import FreeCAD import _FemBeamSection -def makeFemBeamSection(width=20.0, height=20.0, name="BeamSection"): +def makeFemBeamSection(sectiontype='Rectangular', width=10.0, height=25.0, name="BeamSection"): '''makeFemBeamSection([width], [height], [name]): creates an beamsection object to define a cross section''' obj = FreeCAD.ActiveDocument.addObject("Fem::FeaturePython", name) _FemBeamSection._FemBeamSection(obj) + sec_types = _FemBeamSection._FemBeamSection.known_beam_types + if sectiontype not in sec_types: + FreeCAD.Console.PrintError("Section type is not known. Set to " + sec_types[0] + " \n") + obj.SectionType = sec_types[0] + else: + obj.SectionType = sectiontype obj.RectWidth = width obj.RectHeight = height - obj.CircRadius = height - obj.PipeRadius = height - obj.PipeThickness = 2.0 + obj.CircDiameter = height + obj.PipeDiameter = height + obj.PipeThickness = width if FreeCAD.GuiUp: import _ViewProviderFemBeamSection _ViewProviderFemBeamSection._ViewProviderFemBeamSection(obj.ViewObject) diff --git a/src/Mod/Fem/FemInputWriterCcx.py b/src/Mod/Fem/FemInputWriterCcx.py index f82aec1b0..3d43b2d5f 100644 --- a/src/Mod/Fem/FemInputWriterCcx.py +++ b/src/Mod/Fem/FemInputWriterCcx.py @@ -550,12 +550,12 @@ class FemInputWriterCcx(FemInputWriter.FemInputWriter): setion_geo = str(height) + ', ' + str(width) + '\n' setion_def = '*BEAM SECTION, ' + elsetdef + material + section_type + '\n' elif beamsec_obj.SectionType == 'Circular': - radius = beamsec_obj.CircRadius.getValueAs('mm') + radius = 0.5 * beamsec_obj.CircDiameter.getValueAs('mm') section_type = ', SECTION=CIRC' setion_geo = str(radius) + '\n' setion_def = '*BEAM SECTION, ' + elsetdef + material + section_type + '\n' elif beamsec_obj.SectionType == 'Pipe': - radius = beamsec_obj.PipeRadius.getValueAs('mm') + radius = 0.5 * beamsec_obj.PipeDiameter.getValueAs('mm') thickness = beamsec_obj.PipeThickness.getValueAs('mm') section_type = ', SECTION=PIPE' setion_geo = str(radius) + ', ' + str(thickness) + '\n' diff --git a/src/Mod/Fem/_FemBeamSection.py b/src/Mod/Fem/_FemBeamSection.py index 4fa1d18ad..daf6c4539 100644 --- a/src/Mod/Fem/_FemBeamSection.py +++ b/src/Mod/Fem/_FemBeamSection.py @@ -36,9 +36,9 @@ class _FemBeamSection: def __init__(self, obj): obj.addProperty("App::PropertyLength", "RectWidth", "RectBeamSection", "set width of the rectangular beam elements") obj.addProperty("App::PropertyLength", "RectHeight", "RectBeamSection", "set height of therectangular beam elements") - obj.addProperty("App::PropertyLength", "CircRadius", "CircBeamSection", "set radius of the circular beam elements") - obj.addProperty("App::PropertyLength", "PipeRadius", "PipeBeamSection", "set height of the pipe beam elements") - obj.addProperty("App::PropertyLength", "PipeThickness", "PipeBeamSection", "set height of the pipe beam elements") + obj.addProperty("App::PropertyLength", "CircDiameter", "CircBeamSection", "set diameter of the circular beam elements") + obj.addProperty("App::PropertyLength", "PipeDiameter", "PipeBeamSection", "set outer diameter of the pipe beam elements") + obj.addProperty("App::PropertyLength", "PipeThickness", "PipeBeamSection", "set thickness of the pipe beam elements") obj.addProperty("App::PropertyEnumeration", "SectionType", "BeamSection", "select beam section type") obj.addProperty("App::PropertyLinkSubList", "References", "BeamSection", "List of beam section shapes") obj.SectionType = _FemBeamSection.known_beam_types diff --git a/src/Mod/Fem/_TaskPanelFemBeamSection.py b/src/Mod/Fem/_TaskPanelFemBeamSection.py index 1da9d4ab7..312e83cf4 100644 --- a/src/Mod/Fem/_TaskPanelFemBeamSection.py +++ b/src/Mod/Fem/_TaskPanelFemBeamSection.py @@ -79,8 +79,8 @@ class _TaskPanelFemBeamSection: self.SectionType = self.obj.SectionType self.RectHeight = self.obj.RectHeight self.RectWidth = self.obj.RectWidth - self.CircRadius = self.obj.CircRadius - self.PipeRadius = self.obj.PipeRadius + self.CircDiameter = self.obj.CircDiameter + self.PipeDiameter = self.obj.PipeDiameter self.PipeThickness = self.obj.PipeThickness def set_beamsection_props(self): @@ -88,8 +88,8 @@ class _TaskPanelFemBeamSection: self.obj.SectionType = self.SectionType self.obj.RectHeight = self.RectHeight self.obj.RectWidth = self.RectWidth - self.obj.CircRadius = self.CircRadius - self.obj.PipeRadius = self.PipeRadius + self.obj.CircDiameter = self.CircDiameter + self.obj.PipeDiameter = self.PipeDiameter self.obj.PipeThickness = self.PipeThickness def update(self): @@ -98,8 +98,8 @@ class _TaskPanelFemBeamSection: self.form.cb_crosssectiontype.setCurrentIndex(index_crosssectiontype) self.form.if_rec_height.setText(self.RectHeight.UserString) self.form.if_rec_width.setText(self.RectWidth.UserString) - self.form.if_circ_diameter.setText(self.CircRadius.UserString) - self.form.if_pipe_diameter.setText(self.PipeRadius.UserString) + self.form.if_circ_diameter.setText(self.CircDiameter.UserString) + self.form.if_pipe_diameter.setText(self.PipeDiameter.UserString) self.form.if_pipe_thickness.setText(self.PipeThickness.UserString) self.rebuild_list_References() @@ -116,10 +116,10 @@ class _TaskPanelFemBeamSection: self.RectWidth = base_quantity_value def circ_diameter_changed(self, base_quantity_value): - self.CircRadius = base_quantity_value + self.CircDiameter = base_quantity_value def pipe_diameter_changed(self, base_quantity_value): - self.PipeRadius = base_quantity_value + self.PipeDiameter = base_quantity_value def pipe_thickness_changed(self, base_quantity_value): self.PipeThickness = base_quantity_value