Frame#
![]() |
In this example we will demonstrate:
|
from dlubal.api import rfem
def define_structure() -> list:
"""Define and return a list of structural objects."""
inf = float('inf')
return [
# Define material
rfem.structure_core.Material(no=1, name='S235'),
# Define section
rfem.structure_core.Section(no=1, name='HE 200 A', material=1),
# Define nodes
rfem.structure_core.Node(no=1),
rfem.structure_core.Node(no=2, coordinate_3=-3.0),
rfem.structure_core.Node(no=3, coordinate_1=4.0, coordinate_3=-3.0),
rfem.structure_core.Node(no=4, coordinate_1=4.0),
# Define line
rfem.structure_core.Line(no=1, definition_nodes=[1, 2]),
rfem.structure_core.Line(no=2, definition_nodes=[2, 3]),
rfem.structure_core.Line(no=3, definition_nodes=[3, 4]),
# Define member
rfem.structure_core.Member(no=1, line=1, section_start=1),
rfem.structure_core.Member(no=2, line=2, section_start=1),
rfem.structure_core.Member(no=3, line=3, section_start=1),
# Define nodal support at Node 1 (fully fixed)
rfem.types_for_nodes.NodalSupport(
no=1,
nodes=[1,4],
spring_x=inf, spring_y=inf, spring_z=inf,
rotational_restraint_x=inf,
rotational_restraint_y=inf,
rotational_restraint_z=inf
),
]
def define_loads() -> list:
"""Define and return a list of loading objects."""
return [
# Static analysis settings
rfem.loading.StaticAnalysisSettings(
no=1,
analysis_type=rfem.loading.StaticAnalysisSettings.ANALYSIS_TYPE_GEOMETRICALLY_LINEAR,
),
# Define load cases
rfem.loading.LoadCase(
no=1,
name='Self-weight',
self_weight_active=True,
static_analysis_settings=1,
),
rfem.loading.LoadCase(
no=2,
name='Snow',
action_category=rfem.loading.Action.ACTION_CATEGORY_SNOW_ICE_LOADS_H_LESS_OR_EQUAL_TO_1000_M_QS,
static_analysis_settings=1,
),
rfem.loading.LoadCase(
no=3,
name='Wind +x',
action_category=rfem.loading.Action.ACTION_CATEGORY_WIND_QW,
static_analysis_settings=1,
),
rfem.loading.LoadCase(
no=4,
name='Wind +x, with wind suction',
action_category=rfem.loading.Action.ACTION_CATEGORY_WIND_QW,
static_analysis_settings=1,
),
rfem.loading.LoadCase(
no=5,
name='Wind -x',
action_category=rfem.loading.Action.ACTION_CATEGORY_WIND_QW,
static_analysis_settings=1,
),
rfem.loading.LoadCase(
no=6,
name='Wind -x, with wind suction',
action_category=rfem.loading.Action.ACTION_CATEGORY_WIND_QW,
static_analysis_settings=1,
),
# Define loads
rfem.loads.MemberLoad(
no=1,
load_case=1,
members=[2],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=1000
),
rfem.loads.MemberLoad(
no=2,
load_case=2,
members=[2],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=3000
),
rfem.loads.MemberLoad(
no=3,
load_case=3,
members=[1],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=2000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=4,
load_case=3,
members=[3],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=1000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=5,
load_case=4,
members=[1],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=2000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=6,
load_case=4,
members=[3],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=1000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=7,
load_case=4,
members=[2],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=-500
),
rfem.loads.MemberLoad(
no=8,
load_case=5,
members=[1],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=-2000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=9,
load_case=5,
members=[3],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=-1000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=10,
load_case=6,
members=[1],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=-2000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=11,
load_case=6,
members=[3],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=-1000,
load_direction=rfem.loads.MemberLoad.LOAD_DIRECTION_GLOBAL_X_OR_USER_DEFINED_U_TRUE,
),
rfem.loads.MemberLoad(
no=12,
load_case=6,
members=[2],
load_type=rfem.loads.MemberLoad.LOAD_TYPE_FORCE,
magnitude=-500
),
]
with rfem.Application() as rfem_app:
# Step 1: Create a new model and clear existing objects
rfem_app.create_model(name='frame')
rfem_app.delete_all_objects()
# Step 2: Define and create the structure and load objects
objects = define_structure() + define_loads() # Assuming these return lists of objects
rfem_app.create_object_list(objects)
# Step 3: Get and print all objects (using All as the filter)
all_objects = rfem_app.get_object_list([rfem.All()])
print("All objects in the model:")
for obj in all_objects:
print(f" {obj.DESCRIPTOR.name}, no={obj.no}")
# Step 4: Get and print all objects of type 'Member'
all_members = rfem_app.get_object_list([rfem.structure_core.Member()])
print("\nAll members in the model:")
for member in all_members:
print(f" Member no={member.no}, length={member.length}")
# Step 5: Get and print all member loads of a specific load case (load case 4)
all_member_loads = rfem_app.get_object_list([rfem.loads.MemberLoad(load_case=4)])
print(f"\nAll member loads for load case 4:\n")
for member_load in all_member_loads:
print(member_load)