【C#】【SAP2000】SAP2000中批量修改指定荷载工况下所有Frame对象的温度荷载

csharp 复制代码
    if (build == true)
    {
      // 连接到正在运行的 SAP2000
      cOAPI mySapObject = (cOAPI) System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
      cSapModel mySapModel = mySapObject.SapModel;

      // 获取所有框架单元的总数
      int numberFrames = 0;
      string[] frameNames = null;
      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];

        ret = mySapModel.FrameObj.GetLoadTemperature(frameName, ref NumberItems, ref FrameName, ref LoadPat, ref MyType, ref Val, ref PatternName);

        // 检查是否为 "PRE-F" 工况下的温度荷载
        bool hasTempLoad = false;
        for (int j = 0; j < NumberItems; j++)
        {
          if (LoadPat[j] == "PRE-F" && MyType[j] == 1)
          {
            // 修改温度荷载为指定值 (例如 300)
            double newTempLoad = 500;
            ret = mySapModel.FrameObj.SetLoadTemperature(frameName, "PRE-F", 1, newTempLoad, "", true, eItemType.Objects);

            _temp.Add(newTempLoad);
            hasTempLoad = true;
            break;
          }
        }

        // 如果没有 "PRE-F" 工况下的温度荷载,则添加0
        if (!hasTempLoad)
        {
          _temp.Add(0);
        }
      }

      // 将温度荷载列表赋值给输出参数 TempLoads
      TempLoads = _temp;
    }

在检查到指定单元存在 "PRE-F" 工况下的温度荷载时,使用 SetLoadTemperature 函数将温度荷载修改为指定值 (这里以 300 为例)。

SetLoadTemperature 函数的参数说明如下:

frameName: 框架单元的名称

"PRE-F": 荷载工况的名称

1: 温度荷载的类型 (1 表示温度)

newTempLoad: 新的温度荷载值 (这里设置为 300)

"": 温度荷载沿框架单元的分布模式 (空字符串表示均匀分布)

true: 是否替换之前的温度荷载

eItemType.Objects: 应用温度荷载的对象类型 (这里是单个框架单元对象)

这里假设已经在 SAP2000 模型中定义了名为 "PRE-F" 的荷载工况。如果使用的是其他名称的荷载工况,相应地修改代码中的 LoadPat[j] == "PRE-F" 条件。

修改后的代码将遍历所有框架单元,并将指定单元在 "PRE-F" 工况下的温度荷载修改为指定值 (这里是 300)。

修改后的温度荷载值将被添加到 _temp 列表中,并最终赋值给输出参数 TempLoads。

相关推荐
专注VB编程开发20年12 分钟前
c#Type数组转成字符串的名称
java·开发语言
中年程序员一枚16 分钟前
多数据源的springboot进行动态连接方案
java·spring boot·后端
w***765517 分钟前
SpringBoot集成MQTT客户端
java·spring boot·后端
编程饭碗24 分钟前
【多线程编程】
java·开发语言
北鹿不麋鹿35 分钟前
自学Java手记:Map集合,Arrays工具类和Lambda表达式
java
码头整点薯条38 分钟前
对接第三方服务踩坑:属性大小写不匹配导致数据解析失败,一个注解搞定!
java
Wpa.wk38 分钟前
性能测试工具 - JMeter工具组件介绍一
java·经验分享·测试工具·jmeter·性能测试
虫小宝39 分钟前
个微iPad协议场景下Java后端的协议解析异常排查与问题定位技巧
java·svn·ipad
程序媛徐师姐1 小时前
Java基于微信小程序的鲜花销售系统,附源码+文档说明
java·微信小程序·鲜花销售小程序·java鲜花销售小程序·鲜花销售微信小程序·java鲜花销售系统小程序·java鲜花销售微信小程序