Column#
|   | Description 
 | 
from dlubal.api import rstab
from math import inf
def define_structure() -> list:
    """Returns a list of structural objects to be created."""
    return [
        rstab.structure_core.Material(
            no=1,
            name='S235',
        ),
        rstab.structure_core.Section(
            no=1,
            name='HEB 300',
            material=1,
            shear_stiffness_deactivated=True,
        ),
        rstab.structure_core.Node(
            no=1,
        ),
        rstab.structure_core.Node(
            no=2,
            coordinate_3=10.0,
        ),
        rstab.structure_core.Member(
            no = 1,
            node_start=1,
            node_end=2,
            section_start = 1
        ),
        rstab.types_for_nodes.NodalSupport(
            no=1,
            nodes=[1],
            spring_x=inf,
            spring_y=inf,
            spring_z=inf,
            rotational_restraint_x=5000000,
            rotational_restraint_y=5000000,
            rotational_restraint_z=inf,
        ),
        rstab.types_for_nodes.NodalSupport(
            no=2,
            nodes=[2],
            spring_x=inf,
            spring_y=inf,
            spring_z=0,
            rotational_restraint_x=0,
            rotational_restraint_y=0,
            rotational_restraint_z=inf,
        ),
    ]
def define_loading() -> list:
    """Returns a list of loading objects to be created."""
    return [
        rstab.loading.StaticAnalysisSettings(
            no=1,
            analysis_type=rstab.loading.StaticAnalysisSettings.ANALYSIS_TYPE_GEOMETRICALLY_LINEAR
        ),
        rstab.loading.StabilityAnalysisSettings(
            no=1,
            analysis_type=rstab.loading.StabilityAnalysisSettings.ANALYSIS_TYPE_EIGENVALUE_METHOD,
            number_of_lowest_eigenvalues=2,
        ),
        rstab.loading.LoadCase(
            no=1,
            stability_analysis_settings=1,
            calculate_critical_load=True,
            self_weight_active=False,
        ),
        rstab.loads.NodalLoad(
            no=1,
            load_case=1,
            nodes=[2],
            load_type=rstab.loads.NodalLoad.LOAD_TYPE_COMPONENTS,
            components_force_z=-1000000,
        ),
        rstab.loading.DesignSituation(
            no=1,
            design_situation_type=rstab.loading.DesignSituation.DESIGN_SITUATION_TYPE_STR_PERMANENT_AND_TRANSIENT_6_10,
        ),
        rstab.loading.LoadCombination(
            no=1,
            name='CO1',
            items =  rstab.loading.LoadCombination.ItemsTable(
                    rows=[
                        rstab.loading.LoadCombination.ItemsRow(
                            load_case=1,
                            factor=1,
                        ),
                    ]
            ),
            design_situation=1,
        ),
    ]
def define_steel_design() -> list:
    """Returns a list of steel design related objects to be created."""
    return [
        rstab.steel_design_objects.SteelDesignUlsConfiguration(
            no=1,
            assigned_to_all_members=True,
        ),
        rstab.steel_design.SteelEffectiveLengths(
            no=1,
            members=[1],
            import_from_stability_analysis_enabled=True,
            stability_import_data_loading_y=rstab.ObjectId(no=1, object_type=rstab.ObjectType.OBJECT_TYPE_LOAD_CASE),
            stability_import_data_loading_z=rstab.ObjectId(no=1, object_type =rstab.ObjectType.OBJECT_TYPE_LOAD_CASE),
            stability_import_data_mode_number_y=2,
            stability_import_data_mode_number_z=1,
            stability_import_data_member_y=1,
            stability_import_data_member_z=1,
        ),
    ]
"""Runs the example of column stability analysis."""
with rstab.Application() as rstab_app:
    # Step 1: Create a New Model
    rstab_app.close_all_models(save_changes=False)
    rstab_app.create_model(name='column_stability')
    # Configure Add-ons, Design Standards, and Global Settings in Base Data
    base_data = rstab_app.get_base_data()
    base_data.addons.structure_stability_active = True
    base_data.addons.steel_design_active = True
    base_data.standards.steel_design_standard = rstab.BaseData.Standards.STEEL_DESIGN_NATIONAL_ANNEX_AND_EDITION_EN_1993_DIN_2020_11_STANDARD
    base_data.general_settings.global_axes_orientation = rstab.BaseData.GeneralSettings.GLOBAL_AXES_ORIENTATION_ZUP
    rstab_app.set_base_data(base_data=base_data)
    # Step 3: Create Structure and Loading in Empty Model
    rstab_app.delete_all_objects()
    objects = define_structure() + define_loading()
    rstab_app.create_object_list(objects)
    # Step 4: Perform the Stability analysis
    stability_analysis = rstab_app.calculate_all(skip_warnings=True)
    print(f"\nStability Analysis:\n{stability_analysis}")
    # Step 5: Define Steel Design related objects
    objects = define_steel_design()
    rstab_app.create_object_list(objects)
    # Step 6: Perform the Steel design check
    steel_design = rstab_app.calculate_all(skip_warnings=True)
    print(f"\nSteel Design Check:\n{steel_design}")
    # Step 7: Get steel design check results
    steel_design_check = rstab_app.get_results(
        results_type=rstab.results.STEEL_DESIGN_MEMBERS_DESIGN_RATIOS_BY_LOCATION
    ).data
    print(f"\nResults | Steel Design Ratios by Location | All:")
    print(steel_design_check)
    # Step 8: Get steel design check details for the maximum ratio
    max_design_ratio_row = steel_design_check.loc[steel_design_check['design_ratio'].idxmax()]
    design_check_details_id = max_design_ratio_row['design_check_details_id']
    steel_design_details = rstab_app.get_results(
        results_type=rstab.results.STEEL_DESIGN_DESIGN_CHECK_DETAILS,
        filters=[rstab.results.ResultsFilter(
            column_id="design_check_details_id",
            filter_expression=str(design_check_details_id))],
    ).data
    print(steel_design_details)
     # Step 9: Get detail row for specific variable
    symbol = 'N<sub>c,Ed</sub>'
    n_ed_value = steel_design_details.loc[steel_design_details['symbol']==symbol, 'value'].values[0]
    n_ed_unit = steel_design_details.loc[steel_design_details['symbol']==symbol, 'unit'].values[0]
    print(f"\nN_Ed= {n_ed_value} [{n_ed_unit}]")
    symbol = 'N<sub>b,z,Rd</sub>'
    n_rd_value = steel_design_details.loc[steel_design_details['symbol']==symbol, 'value'].values[0]
    n_rd_unit = steel_design_details.loc[steel_design_details['symbol']==symbol, 'unit'].values[0]
    print(f"N_Rd= {n_rd_value} [{n_rd_unit}]")
    symbol = 'η'
    ratio_value = steel_design_details.loc[steel_design_details['symbol']==symbol, 'value_si'].values[0]
    print(f"η= {ratio_value} [-]")
using Rstab = Dlubal.Api.Rstab;
using Dlubal.Api.Common;
using Google.Protobuf;
// Returns a list of structural objects to be created.
static List<IMessage> DefineStructure()
{
    return new List<IMessage>
    {
        new Rstab.StructureCore.Material{
            No = 1,
            Name = "S235"
        },
        new Rstab.StructureCore.Section{
            No = 1,
            Name = "HEB 300",
            Material = 1,
            ShearStiffnessDeactivated = true
        },
        new Rstab.StructureCore.Node{
            No = 1
        },
        new Rstab.StructureCore.Node{
            No = 2,
            Coordinate3 = 10
        },
        new Rstab.StructureCore.Member{
            No = 1,
            NodeStart = 1,
            NodeEnd = 2,
            SectionStart = 1
        },
        new Rstab.TypesForNodes.NodalSupport{
            No = 1,
            Nodes = { 1 },
            SpringX = double.PositiveInfinity,
            SpringY = double.PositiveInfinity,
            SpringZ = double.PositiveInfinity,
            RotationalRestraintX = 5000000,
            RotationalRestraintY = 5000000,
            RotationalRestraintZ = double.PositiveInfinity
        },
        new Rstab.TypesForNodes.NodalSupport{
            No = 2,
            Nodes = { 2 },
            SpringX = double.PositiveInfinity,
            SpringY = double.PositiveInfinity,
            SpringZ = 0,
            RotationalRestraintX = 0,
            RotationalRestraintY = 0,
            RotationalRestraintZ = double.PositiveInfinity
        }
    };
}
// Returns a list of loading objects to be created.
static List<IMessage> DefineLoading()
{
    return new List<IMessage>
    {
        new Rstab.Loading.StaticAnalysisSettings{
            No = 1,
            AnalysisType = Rstab.Loading.StaticAnalysisSettings.Types.AnalysisType.GeometricallyLinear
        },
        new Rstab.Loading.StabilityAnalysisSettings{
            No = 1,
            AnalysisType = Rstab.Loading.StabilityAnalysisSettings.Types.AnalysisType.EigenvalueMethod,
            NumberOfLowestEigenvalues = 2
        },
        new Rstab.Loading.LoadCase{
            No = 1,
            StabilityAnalysisSettings = 1,
            CalculateCriticalLoad = true,
            SelfWeightActive = false
        },
        new Rstab.Loads.NodalLoad{
            No = 1,
            LoadCase = 1,
            Nodes = { 2 },
            LoadType = Rstab.Loads.NodalLoad.Types.LoadType.Components,
            ComponentsForceZ = -1000000
        },
        new Rstab.Loading.DesignSituation{
            No = 1,
            DesignSituationType = Rstab.Loading.DesignSituation.Types.DesignSituationType.StrPermanentAndTransient610
        },
        new Rstab.Loading.LoadCombination{
            No = 1,
            Name = "CO1",
            Items = new Rstab.Loading.LoadCombination.Types.ItemsTable{
                Rows = {
                    new Rstab.Loading.LoadCombination.Types.ItemsRow{
                        LoadCase = 1,
                        Factor = 1
                    }
                }
                },
            DesignSituation = 1
        },
    };
}
// Returns a list of steel design related objects to be created.
static List<IMessage> DefineSteelDesign()
{
    // Step 1: Define the list of steel design objects
    return new List<IMessage>
        {
            // Steel Design ULS Configuration
            new Rstab.SteelDesignObjects.SteelDesignUlsConfiguration
            {
                No = 1,
                AssignedToAllMembers = true
            },
            // Steel Effective Lengths Configuration
            new Rstab.TypesForSteelDesign.SteelEffectiveLengths
            {
                No = 1,
                Members = { 1 },
                ImportFromStabilityAnalysisEnabled = true,
                StabilityImportDataLoadingY = new Rstab.ObjectId { No = 1, ObjectType = Rstab.ObjectType.LoadCase },
                StabilityImportDataLoadingZ = new Rstab.ObjectId { No = 1, ObjectType = Rstab.ObjectType.LoadCase },
                StabilityImportDataModeNumberY = 2,
                StabilityImportDataModeNumberZ = 1,
                StabilityImportDataMemberY = 1,
                StabilityImportDataMemberZ = 1
            },
        };
}
// Runs the example of the column stability analysis.
ApplicationRstab? RstabApp = null;
try
{
    RstabApp = new ApplicationRstab();
    // Step 1: Create a new model
    await RstabApp.close_all_models(false);
    await RstabApp.create_model("Column");
    // Step 2: Activate the addons in Base data
    var base_data = await RstabApp.get_base_data();
    base_data.Addons.StructureStabilityActive = true;
    base_data.Addons.SteelDesignActive = true;
    base_data.Standards.SteelDesignStandard = Rstab.BaseData.Types.Standards.Types.SteelDesignStandard.SteelDesignNationalAnnexAndEditionEn1993Din202011Standard;
    base_data.GeneralSettings.GlobalAxesOrientation = Rstab.BaseData.Types.GeneralSettings.Types.GlobalAxesOrientation.Zup;
    await RstabApp.set_base_data(base_data);
    // Step 3: Create structure and loading in empty model
    await RstabApp.delete_all_objects();
    await RstabApp.create_object_list(DefineStructure());
    await RstabApp.create_object_list(DefineLoading());
    // Step 4: Perform the Stability analysis
    var stabilityAnalysis = await RstabApp.calculate_all(skipWarnings: true);
    Console.WriteLine("Performed Stability Analysis:");
    Console.WriteLine(stabilityAnalysis);
    // Step 5: Create steel design object incl. effective lengths from the Stability analysis
    await RstabApp.create_object_list(DefineSteelDesign());
    // Step 6: Perform the Steel design check
    var steelDesignCalc = await RstabApp.calculate_all(skipWarnings: true);
    Console.WriteLine($"\nPerformed Steel Design Check:");
    Console.WriteLine(steelDesignCalc);
    // Step 7: Get steel design check results
    var steelDesignCheck = await RstabApp.get_results(
        Rstab.Results.ResultsType.SteelDesignMembersDesignRatiosByLocation
    );
    Console.WriteLine("Reading Results | Steel Design Ratios by Location | All:");
    Console.WriteLine(steelDesignCheck.Data);
    // Step 8: Get steel design check details for the maximum ratio
    // Find the row with the maximum design ratio
    var maxDesignRatioRow = steelDesignCheck.Data.Rows
        .OrderByDescending(row =>
        {
            // Try to parse the design_ratio string to double
            double result = 0.0;
            double.TryParse(row["design_ratio"].ToString(), out result); // Parsing the value safely
            return result;
        })
        .FirstOrDefault();  // Get the first row with the maximum design ratio
    var designCheckDetailsId = maxDesignRatioRow["design_check_details_id"];
    var steelDesignCheckDetails = await RstabApp.get_results(
        resultsType: Rstab.Results.ResultsType.SteelDesignDesignCheckDetails,
        filters: new List<Rstab.Results.ResultsFilter>
        {
            new Rstab.Results.ResultsFilter {
                ColumnId = "design_check_details_id",
                FilterExpression = designCheckDetailsId.ToString(),
            },
        }
    );
    Console.WriteLine("Reading Results | Steel Design Check Details");
    Console.WriteLine(steelDesignCheckDetails.Data);
}
catch (Exception ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}
finally
{
    if (RstabApp != null) await RstabApp.close_connection();
}