Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Examples/Cantilever/Demo1.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
print('dirname: ', dirName)
sys.path.append(dirName + r'/../..')

from RFEM.enums import NodalSupportType, LoadDirectionType
from RFEM.enums import *
from RFEM.initModel import Model, Calculate_all
from RFEM.BasicObjects.material import Material
from RFEM.BasicObjects.section import Section
Expand All @@ -27,6 +27,7 @@
Model(True, "Demo1") # crete new model called Demo1
Model.clientModel.service.begin_modification()


Material(1, 'S235')

Section(1, 'IPE 200')
Expand Down
137 changes: 137 additions & 0 deletions RFEM/TypesForSteelDesign/steelMemberRotationalRestraints.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
from RFEM.initModel import Model, clearAtributes, ConvertToDlString
from RFEM.enums import *

class SteelMemberRotationalRestraint():
def __init__(self,
no: int = 1,
user_defined_name: list = [False],
definition_type = SteelMemberRotationalRestraintType.TYPE_CONTINUOUS,
members: str = "",
member_sets: str = "",
categories: list = [],
parameters: list = [],
comment: str = '',
params: dict = {}):
"""
Args:
no (int): Member Rotational Restraint No.
user_defined_name (list): User Defined Name
definition_type (enum): Definition Type Enumeration Item
members (str): Assigned Members
member_sets (str): Assigned Member Sets

categories (list):

for definition_type = SteelMemberRotationalRestraintType.TYPE_CONTINUOUS:
categories[0] = Sheeting Material Name
categories[1] = Sheeting Name
categories[2] = Position of Sheeting
categories[3] = Continuous Beam Effect
categories[4] = Section Deformation Option

for definition_type = SteelMemberRotationalRestraintType.TYPE_DISCRETE:
categories[0] = Section Material Name
categories[1] = Section Name
categories[2] = Rotational Stifness
categories[3] = Continuous Beam Effect
categories[4] = Section Deformation Option

for definition_type = SteelMemberRotationalRestraintType.TYPE_MANUALLY:
categories = None

parameters (list):

for definition_type = SteelMemberRotationalRestraintType.TYPE_CONTINUOUS:
parameters[0] = Modulus of Elasticity
parameters[1] = Sheeting Thickness
parameters[2] = Sheeting Moment of Inertia
parameters[3] = Sheeting Distance of Ribs
parameters[4] = Width of Sheeting Flanges
parameters[5] = Spring Stiffness
parameters[6] = Beam Spacing

for definition_type = SteelMemberRotationalRestraintType.TYPE_DISCRETE:
parameters[0] = Modulus of Elasticity
parameters[1] = Section Moment of Inertia
parameters[2] = Purlin Spacing
parameters[3] = Beam Spacing

for definition_type = SteelMemberRotationalRestraintType.TYPE_MANUALLY:
parameters[0] = Rotational Spring Stifness

comment (str, optional): _description_. Defaults to ''.
params (dict, optional): _description_. Defaults to {}.
"""

# Client Model / Types For Steel Design Member Rotational Restraints
clientObject = Model.clientModel.factory.create('ns0:steel_member_rotational_restraint')

# Clears Object Attributes / Sets all the attributes to None
clearAtributes(clientObject)

# Member Rotational Restraint No.
clientObject.no = no

# Member Rotational Restraint Assigned Members
clientObject.members = ConvertToDlString(members)

# Member Rotational Restraint Assigned Member Sets
clientObject.member_sets = ConvertToDlString(member_sets)

# Member Rotational Restraint 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 Rotational Restraint Definition Type
clientObject.type = definition_type.name

# Member Rotational Restraint Categories
if definition_type == SteelMemberRotationalRestraintType.TYPE_CONTINUOUS:
clientObject.material_name = categories[0]
clientObject.sheeting_name = categories[1]
clientObject.position_of_sheeting = categories[2].name
clientObject.continuous_beam_effect = categories[3].name
clientObject.section_deformation_cdb = categories[4]
elif definition_type == SteelMemberRotationalRestraintType.TYPE_DISCRETE:
clientObject.material_name = categories[0]
clientObject.section_name = categories[1]
clientObject.rotational_stiffness = categories[2].name
clientObject.continuous_beam_effect = categories[3].name
clientObject.section_deformation_cdb = categories[4]

# Member Rotational Restraint Parameters
if definition_type == SteelMemberRotationalRestraintType.TYPE_CONTINUOUS:
clientObject.modulus_of_elasticity = parameters[0]
clientObject.sheeting_thickness = parameters[1]
clientObject.sheeting_moment_of_inertia = parameters[2]
clientObject.sheeting_distance_of_ribs = parameters[3]
clientObject.width_of_section_flange = parameters[4]
clientObject.spring_stiffness = parameters[5]
clientObject.beam_spacing = parameters[6]

elif definition_type == SteelMemberRotationalRestraintType.TYPE_DISCRETE:
clientObject.modulus_of_elasticity = parameters[0]
clientObject.section_moment_of_inertia = parameters[1]
clientObject.purlin_spacing = parameters[2]
clientObject.beam_spacing = parameters[3]

elif definition_type == SteelMemberRotationalRestraintType.TYPE_MANUALLY:
clientObject.total_rotational_spring_stiffness = parameters[0]

#Comment
clientObject.comment = comment

# Adding optional parameters via dictionary
for key in params:
clientObject[key] = params[key]

# Adding Steel Member Rotational Restraint to Client Model
Model.clientModel.service.set_steel_member_rotational_restraint(clientObject)





22 changes: 22 additions & 0 deletions RFEM/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -1719,7 +1719,29 @@ class SteelEffectiveLengthsMemberTypeZZ(Enum):
'''
MEMBER_TYPE_BEAM, MEMBER_TYPE_CANTILEVER = range(2)

class SteelMemberRotationalRestraintType(Enum):
'''
Steel Member Rotational Restraint Type
'''
TYPE_CONTINUOUS, TYPE_DISCRETE, TYPE_MANUALLY = range(3)

class SteelMemberRotationalRestraintContinuousBeamEffect(Enum):
'''
Steel Member Rotational Restraint Continuous Beam Effect
'''
CONTINUOUS_BEAM_EFFECT_END_PANEL, CONTINUOUS_BEAM_EFFECT_INTERNAL_PANEL = range(2)

class SteelMemberRotationalRestraintPositionofSheeting(Enum):
'''
Steel Member Rotational Restraint Position of Sheeting
'''
SHEETING_POSITION_NEGATIVE, SHEETING_POSITION_POSITIVE = range(2)

class SteelMemberRotationalRestraintRotationalStiffness(Enum):
'''
Steel Member Rotational Restraint Rotational Stiffness
'''
ROTATIONAL_STIFFNESS_INFINITELY, ROTATIONAL_STIFFNESS_MANUALLY = range(2)
class SteelBoundaryConditionsSupportType(Enum):
'''
Steel Boundary Conditions Support Type
Expand Down
40 changes: 40 additions & 0 deletions UnitTests/test_steelMemberRotationalRestraint.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
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.steelMemberRotationalRestraints import *

if Model.clientModel is None:
Model()

@pytest.mark.skipif(CheckIfMethodOrTypeExists(Model.clientModel,'ns0:steel_member_rotational_restraint', True), reason="Type ns0:steel_member_rotational_restraint not in RFEM GM yet")
def test_steelMemberRotationalRestraints():

Model.clientModel.service.begin_modification()

SetAddonStatus(Model.clientModel, AddOn.steel_design_active, True)

SteelMemberRotationalRestraint(1, [False], SteelMemberRotationalRestraintType.TYPE_CONTINUOUS, "", "",
categories=["Grade S275", "Arval (-) 35/207 - 0.63 (b: 1) | DIN 18807 | Arval", SteelMemberRotationalRestraintPositionofSheeting.SHEETING_POSITION_NEGATIVE, SteelMemberRotationalRestraintContinuousBeamEffect.CONTINUOUS_BEAM_EFFECT_END_PANEL, True],
parameters = [205000000000.0, 0.00063, 7.5e-08, 0.207, 0.106, 5200.0, 3.0])

SteelMemberRotationalRestraint(2, [True, 'test_restraint'], SteelMemberRotationalRestraintType.TYPE_DISCRETE, "", "",
categories=["Grade S275", "IPE A 80 | EN 10365:2017 | ArcelorMittal (2018)", SteelMemberRotationalRestraintRotationalStiffness.ROTATIONAL_STIFFNESS_INFINITELY, SteelMemberRotationalRestraintContinuousBeamEffect.CONTINUOUS_BEAM_EFFECT_END_PANEL, True],
parameters=[205000000000.0, 6.44e-07, 1, 3])
Model.clientModel.service.finish_modification()

steelMemberRestraint1 = Model.clientModel.service.get_steel_member_rotational_restraint(1)
steelMemberRestraint2 = Model.clientModel.service.get_steel_member_rotational_restraint(2)

assert steelMemberRestraint1.no == 1
assert steelMemberRestraint1.material_name == "Grade S275"

assert steelMemberRestraint2.type == "TYPE_DISCRETE"
assert steelMemberRestraint2.continuous_beam_effect == "CONTINUOUS_BEAM_EFFECT_END_PANEL"