From 4f5e36f9ca172bd686b6a4d91691605aef66a15a Mon Sep 17 00:00:00 2001 From: KaratasD Date: Tue, 22 Mar 2022 16:01:47 +0100 Subject: [PATCH 1/3] added steelMemberShearPanel --- .../steelMemberShearPanel.py | 192 ++++++++++++++++++ RFEM/enums.py | 31 +-- UnitTests/test_steelMemberShearPanel.py | 44 ++++ 3 files changed, 254 insertions(+), 13 deletions(-) create mode 100644 RFEM/TypesForSteelDesign/steelMemberShearPanel.py create mode 100644 UnitTests/test_steelMemberShearPanel.py diff --git a/RFEM/TypesForSteelDesign/steelMemberShearPanel.py b/RFEM/TypesForSteelDesign/steelMemberShearPanel.py new file mode 100644 index 00000000..f6542616 --- /dev/null +++ b/RFEM/TypesForSteelDesign/steelMemberShearPanel.py @@ -0,0 +1,192 @@ +from http import client +from RFEM.initModel import Model, clearAtributes, ConvertToDlString +from RFEM.enums import * + +class SteelMemberShearPanel(): + def __init__(self, + no: int = 1, + user_defined_name: list = [False], + definition_type = SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_TRAPEZOIDAL_SHEETING, + members: str = "", + member_sets: str = "", + categories = [SteelMemberShearPanelPositionOnSection.POSITION_ON_UPPER_FLANGE, "FI (+) 35/207 - 0.63 (b: 1) | DIN 18807 | Fischer Profil", SteelMemberShearPanelFasteningArrangement.FASTENING_ARRANGEMENT_EVERY_RIB], + parameters = [1, 2, 0.000247, 0.01043], + comment: str = '', + params: dict = {}): + """ + Args: + no (int): Member Shear Panel Tag + user_defined_name (list): User Defined Member Shear Panel Name + + for user_defined_name[0] == False: + pass + for user_defined_name == True: + user_defined_name[1] = Defined Name + + definition_type (enum): Member Shear Panel Definition Enumeration Type + members (str): Assigned Members + member_sets (str): Assigned Member Sets + categories (list): Positional Categories + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_TRAPEZOIDAL_SHEETING: + categories[0] = Section Position Enumeration Type + categories[1] = Sheeting Name + categories[2] = Fastening Arrangment Enumeration Type + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_BRACING: + categories[0] = Section Position Enumeration Type + categories[1] = Diagonal Section Name + categories[2] = Post Section Name + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_TRAPEZOIDAL_SHEETING_AND_BRACING: + categories[0] = Section Position Enumeration Type + categories[1] = Sheeting Name + categories[2] = Digonal Section Name + categories[3] = Post Section Name + categories[4] = Fastening Arrangment Enumeration Type + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_DEFINE_S_PROV: + categories[0] = Section Position Enumeration Type + + parameters (list): Positional Parameters + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_TRAPEZOIDAL_SHEETING: + parameters[0] = Panel Length + parameters[1] = Beam Spacing + parameters[2] = K1 Coefficient + parameters[3] = K2 Coefficient + + if categories[0] == "POSITION_DEFINE": + parameters[4] = Position on Section Value + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_BRACING: + parameters[0] = Panel Length + parameters[1] = Beam Spacing + parameters[2] = Post Spacing + parameters[3] = Number of Bracings + parameters[4] = Diagonals Section Area + parameters[5] = Post Section Area + + if categories[0] == "POSITION_DEFINE": + parameters[6] = Position on Section Value + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_TRAPEZOIDAL_SHEETING_AND_BRACING: + parameters[0] = Panel Length + parameters[1] = Beam Spacing + parameters[2] = K1 Coefficient + parameters[3] = K2 Coefficient + parameters[4] = Post Spacing + parameters[5] = Number of Bracing + parameters[6] = Diagonals Section Area + parameters[7] = Post Section Area + + if categories[0] == "POSITION_DEFINE": + parameters[8] = Position on Section Value + + for definition_type == SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_DEFINE_S_PROV: + parameters[0] = Stifness + + if categories[0] == "POSITION_DEFINE": + parameters[1] = Position on Section Value + + comment (str, optional): Comment + params (dict, optional): Parameters + """ + + # Client Model | Types For Steel Design Member Shear Panel + clientObject = Model.clientModel.factory.create('ns0:steel_member_shear_panel') + + # Clears object atributes | Sets all atributes to None + clearAtributes(clientObject) + + # Member Shear Panel No. + clientObject.no = no + + # Member Shear Panel Assigned Members + clientObject.members = ConvertToDlString(members) + + # Member Shear Panel Assigned Member Sets + clientObject.member_sets = ConvertToDlString(member_sets) + + # Member Shear Panel User Defined Name + if user_defined_name[0]: + clientObject.user_defined_name_enabled = user_defined_name[0] + clientObject.name = user_defined_name[1] + else: + clientObject.user_defined_name_enabled = user_defined_name[0] + + # Member Shear Panel Definition Type + clientObject.definition_type = definition_type.name + + # Member Shear Panel Categories + if definition_type.name == "DEFINITION_TYPE_TRAPEZOIDAL_SHEETING": + clientObject.position_on_section = categories[0].name + clientObject.sheeting_name = categories[1] + clientObject.fastening_arrangement = categories[2].name + + elif definition_type.name == "DEFINITION_TYPE_BRACING": + clientObject.position_on_section = categories[0].name + clientObject.diagonals_section_name = categories[1] + clientObject.posts_section_name = categories[2] + + elif definition_type.name == "DEFINITION_TYPE_TRAPEZOIDAL_SHEETING_AND_BRACING": + clientObject.position_on_section = categories[0].name + clientObject.sheeting_name = categories[1] + clientObject.diagonals_section_name = categories[2] + clientObject.posts_section_name = categories[3] + clientObject.fastening_arrangement = categories[4].name + + elif definition_type.name == "DEFINITION_TYPE_DEFINE_S_PROV": + clientObject.position_on_section = categories[0].name + + # Member Shear Panel Parameters + if definition_type.name == "DEFINITION_TYPE_TRAPEZOIDAL_SHEETING": + clientObject.panel_length = parameters[0] + clientObject.beam_spacing = parameters[1] + clientObject.coefficient_k1 = parameters[2] + clientObject.coefficient_k2 = parameters[3] + + if categories[0].name == "POSITION_DEFINE": + clientObject.position_on_section_value = parameters[4] + + elif definition_type.name == "DEFINITION_TYPE_BRACING": + clientObject.panel_length = parameters[0] + clientObject.beam_spacing = parameters[1] + clientObject.post_spacing = parameters[2] + clientObject.number_of_bracings = parameters[3] + clientObject.diagonals_section_area = parameters[4] + clientObject.posts_section_area = parameters[5] + + if categories[0].name == "POSITION_DEFINE": + clientObject.position_on_section_value = parameters[6] + + elif definition_type.name == "DEFINITION_TYPE_TRAPEZOIDAL_SHEETING_AND_BRACING": + clientObject.panel_length = parameters[0] + clientObject.beam_spacing = parameters[1] + clientObject.coefficient_k1 = parameters[2] + clientObject.coefficient_k2 = parameters[3] + clientObject.post_spacing = parameters[4] + clientObject.number_of_bracings = parameters[5] + clientObject.diagonals_section_area = parameters[6] + clientObject.posts_section_area = parameters[7] + + if categories[0].name == "POSITION_DEFINE": + clientObject.position_on_section_value = parameters[8] + + elif definition_type.name == "DEFINITION_TYPE_DEFINE_S_PROV": + clientObject.stiffness = parameters[0] + + if categories[0].name == "POSITION_DEFINE": + clientObject.position_on_section_value = parameters[1] + + # Comment + clientObject.comment = comment + + # Adding optional parameters via dictionary + for key in params: + clientObject[key] = params[key] + + # Add Steel Effective Lengths to client model + Model.clientModel.service.set_steel_member_shear_panel(clientObject) + + diff --git a/RFEM/enums.py b/RFEM/enums.py index 25fa3f98..b4cb312b 100644 --- a/RFEM/enums.py +++ b/RFEM/enums.py @@ -352,19 +352,6 @@ class SurfaceLoadAxisDefinitionType(Enum): ''' AXIS_DEFINITION_POINT_AND_AXIS, AXIS_DEFINITION_TWO_POINTS = range(2) -class SurfaceLoadDirection(Enum): - ''' - Surface Load Load Direction - ''' - LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_PROJECTED, LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_PROJECTED, LOAD_DIRECTION_GLOBAL_Y_OR_USER_DEFINED_V_TRUE,\ - LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_PROJECTED, LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, LOAD_DIRECTION_LOCAL_X, LOAD_DIRECTION_LOCAL_Y, LOAD_DIRECTION_LOCAL_Z = range(9) - -class SurfaceLoadType(Enum): - ''' - Surface Load Type - ''' - LOAD_TYPE_AXIAL_STRAIN, LOAD_TYPE_FORCE, LOAD_TYPE_FORM_FINDING, LOAD_TYPE_MASS, LOAD_TYPE_PRECAMBER, LOAD_TYPE_ROTARY_MOTION, LOAD_TYPE_TEMPERATURE = range(7) - class NodeType(Enum): ''' Node Type | Enum @@ -1378,3 +1365,21 @@ class SteelEffectiveLengthsMemberTypeZZ(Enum): ''' MEMBER_TYPE_BEAM, MEMBER_TYPE_CANTILEVER = range(2) +class SteelMemberShearPanelDefinitionType(Enum): + ''' + Steel Member Shear Panel Definition Type + ''' + DEFINITION_TYPE_BRACING, DEFINITION_TYPE_DEFINE_S_PROV,\ + DEFINITION_TYPE_TRAPEZOIDAL_SHEETING, DEFINITION_TYPE_TRAPEZOIDAL_SHEETING_AND_BRACING = range(4) + +class SteelMemberShearPanelPositionOnSection(Enum): + ''' + Steel Member Shear Panel Position On Section + ''' + POSITION_DEFINE, POSITION_IN_CENTROID, POSITION_ON_LOWER_FLANGE, POSITION_ON_UPPER_FLANGE = range(4) + +class SteelMemberShearPanelFasteningArrangement(Enum): + ''' + Steel Member Shear Panel Fastening Arrangement + ''' + FASTENING_ARRANGEMENT_EVERY_RIB, FASTENING_ARRANGEMENT_EVERY_SECOND_RIB = range(2) diff --git a/UnitTests/test_steelMemberShearPanel.py b/UnitTests/test_steelMemberShearPanel.py new file mode 100644 index 00000000..9932b5a7 --- /dev/null +++ b/UnitTests/test_steelMemberShearPanel.py @@ -0,0 +1,44 @@ +import sys +import os +import pytest +PROJECT_ROOT = os.path.abspath(os.path.join( + os.path.dirname(__file__), + os.pardir) +) +sys.path.append(PROJECT_ROOT) + +from RFEM.enums import * +from RFEM.initModel import Model, SetAddonStatus, CheckIfMethodOrTypeExists +from RFEM.TypesForSteelDesign.steelMemberShearPanel import * + +if Model.clientModel is None: + Model() + +@pytest.mark.skipif(CheckIfMethodOrTypeExists(Model.clientModel,'ns0:steel_member_shear_panel', True), reason="Type ns0:steel_member_shear_panel not in RFEM GM yet") +def test_steelMemberShearPanel(): + + Model.clientModel.service.begin_modification() + + SetAddonStatus(Model.clientModel, AddOn.steel_design_active, True) + + SteelMemberShearPanel() + + SteelMemberShearPanel(2, [True, "shearPanel"], SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_TRAPEZOIDAL_SHEETING, "1", "", + categories=[SteelMemberShearPanelPositionOnSection.POSITION_DEFINE, "FI (+) 35/207 - 0.63 (b: 1) | DIN 18807 | Fischer Profil", SteelMemberShearPanelFasteningArrangement.FASTENING_ARRANGEMENT_EVERY_SECOND_RIB], + parameters=[2,4, 0.00043, 0.00056, 0.05]) + + SteelMemberShearPanel(3, [False], SteelMemberShearPanelDefinitionType.DEFINITION_TYPE_BRACING, "", "", + [SteelMemberShearPanelPositionOnSection.POSITION_ON_UPPER_FLANGE, "CHS 48.3x4 | EN 10210-2 | Condesa", "CHS 33.7x2.3 | EN 10210-2 | Ferona"], + [2,4,1,1,0.055, 0.224]) + + + shearPanel_1 = Model.clientModel.service.get_steel_member_shear_panel(1) + shearPanel_2 = Model.clientModel.service.get_steel_member_shear_panel(2) + shearPanel_3 = Model.clientModel.service.get_steel_member_shear_panel(3) + + assert shearPanel_1.no == 1 + assert shearPanel_2.definition_type == "DEFINITION_TYPE_TRAPEZOIDAL_SHEETING" + assert shearPanel_3.panel_length == 2.0 + + + Model.clientModel.service.finish_modification() \ No newline at end of file From 597e5a689fea91df3c44b7bd2ac221d2ddbee2be Mon Sep 17 00:00:00 2001 From: KaratasD Date: Tue, 26 Apr 2022 15:54:19 +0200 Subject: [PATCH 2/3] Update steelMemberShearPanel --- UnitTests/test_steelMemberShearPanel.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/UnitTests/test_steelMemberShearPanel.py b/UnitTests/test_steelMemberShearPanel.py index 9932b5a7..2f57bdda 100644 --- a/UnitTests/test_steelMemberShearPanel.py +++ b/UnitTests/test_steelMemberShearPanel.py @@ -7,9 +7,9 @@ ) sys.path.append(PROJECT_ROOT) -from RFEM.enums import * -from RFEM.initModel import Model, SetAddonStatus, CheckIfMethodOrTypeExists -from RFEM.TypesForSteelDesign.steelMemberShearPanel import * +from RFEM.enums import SteelMemberShearPanelDefinitionType, SteelMemberShearPanelPositionOnSection, SteelMemberShearPanelFasteningArrangement +from RFEM.initModel import Model, SetAddonStatus, CheckIfMethodOrTypeExists, AddOn +from RFEM.TypesForSteelDesign.steelMemberShearPanel import SteelMemberShearPanel if Model.clientModel is None: Model() @@ -41,4 +41,4 @@ def test_steelMemberShearPanel(): assert shearPanel_3.panel_length == 2.0 - Model.clientModel.service.finish_modification() \ No newline at end of file + Model.clientModel.service.finish_modification() From ddb6bf1eb78222d90f397faeda5de872186040c8 Mon Sep 17 00:00:00 2001 From: KaratasD Date: Tue, 26 Apr 2022 16:15:03 +0200 Subject: [PATCH 3/3] Update steelMemberShearPanel --- RFEM/TypesForSteelDesign/steelMemberShearPanel.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/RFEM/TypesForSteelDesign/steelMemberShearPanel.py b/RFEM/TypesForSteelDesign/steelMemberShearPanel.py index f6542616..89e54b4d 100644 --- a/RFEM/TypesForSteelDesign/steelMemberShearPanel.py +++ b/RFEM/TypesForSteelDesign/steelMemberShearPanel.py @@ -12,17 +12,11 @@ def __init__(self, categories = [SteelMemberShearPanelPositionOnSection.POSITION_ON_UPPER_FLANGE, "FI (+) 35/207 - 0.63 (b: 1) | DIN 18807 | Fischer Profil", SteelMemberShearPanelFasteningArrangement.FASTENING_ARRANGEMENT_EVERY_RIB], parameters = [1, 2, 0.000247, 0.01043], comment: str = '', - params: dict = {}): + params: dict = None): """ Args: no (int): Member Shear Panel Tag user_defined_name (list): User Defined Member Shear Panel Name - - for user_defined_name[0] == False: - pass - for user_defined_name == True: - user_defined_name[1] = Defined Name - definition_type (enum): Member Shear Panel Definition Enumeration Type members (str): Assigned Members member_sets (str): Assigned Member Sets @@ -183,10 +177,10 @@ def __init__(self, clientObject.comment = comment # Adding optional parameters via dictionary - for key in params: - clientObject[key] = params[key] + if params: + for key in params: + clientObject[key] = params[key] # Add Steel Effective Lengths to client model Model.clientModel.service.set_steel_member_shear_panel(clientObject) -