【C#】【SAP2000】读取SAP2000中所有Frame对象在指定工况的温度荷载值到Grasshopper中

本文介绍了如何通过SAP2000的COM接口获取API对象,进而获取模型中的框架单元及其温度荷载,特别是针对PRE-F工况,最后将这些数据导入Grasshopper组件的过程。
摘要由CSDN通过智能技术生成
if (build == true)
{
    // 连接到正在运行的 SAP2000
    // 使用 COM 接口获取 SAP2000 的 API 对象
    cOAPI mySapObject = (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
    // 获取 SAP2000 模型对象
    cSapModel mySapModel = mySapObject.SapModel;

    // 获取所有框架单元的总数
    int numberFrames = 0; // 存储框架单元的总数
    string[] frameNames = null; // 存储所有框架单元的名称
    // 调用 SAP2000 API 的 GetNameList 函数获取框架单元的总数和名称
    int ret = mySapModel.FrameObj.GetNameList(ref numberFrames, ref frameNames);

    // 声明温度荷载列表
    List<double> _temp = new List<double>(); // 存储每个框架单元的温度荷载值

    // 遍历所有单元
    for (int i = 0; i < numberFrames; i++)
    {
        // 获取当前框架单元的名称
        string frameName = frameNames[i];

        // 获取当前框架单元的温度荷载
        int NumberItems = 0; // 存储当前框架单元的荷载数量
        string[] FrameName = new string[0]; // 存储当前框架单元的名称
        string[] LoadPat = new string[0]; // 存储荷载工况的名称
        int[] MyType = new int[0]; // 存储荷载类型
        double[] Val = new double[0]; // 存储荷载值
        string[] PatternName = new string[0]; // 存储荷载工况的名称

        // 调用 SAP2000 API 的 GetLoadTemperature 函数获取当前框架单元的温度荷载信息
        ret = mySapModel.FrameObj.GetLoadTemperature(frameName, ref NumberItems, ref FrameName, ref LoadPat, ref MyType, ref Val, ref PatternName);

        // 检查是否为 "PRE-F" 工况下的温度荷载
        bool hasTempLoad = false; // 标记是否找到 "PRE-F" 工况下的温度荷载
        for (int j = 0; j < NumberItems; j++)
        {
            // 如果找到 "PRE-F" 工况下的温度荷载
            if (LoadPat[j] == "PRE-F" && MyType[j] == 1)
            {
                _temp.Add(Val[j]); // 将温度荷载值添加到列表中
                hasTempLoad = true; // 标记已找到温度荷载
                break; // 跳出循环,因为每个框架单元只能有一个温度荷载
            }
        }

        // 如果没有找到 "PRE-F" 工况下的温度荷载,则添加0
        if (!hasTempLoad)
        {
            _temp.Add(0); // 为当前框架单元添加0作为温度荷载值
        }
    }

    // 将温度荷载列表赋值给输出参数 TempLoads
    TempLoads = _temp; // 将获取到的温度荷载列表赋值给 Grasshopper 组件的输出参数
}

SAP2000中该工况下的温度荷载
在这里插入图片描述
grasshopper中该工况下的荷载
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hmywillstronger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值