【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。

相关推荐
爱吃苹果的日记本27 分钟前
开学第一课
java
学历真的很重要1 小时前
Claude Code Windows 原生版安装指南
人工智能·windows·后端·语言模型·面试·go
渣哥1 小时前
Java 集合框架详解:常见集合类及分类方式
java
李游Leo1 小时前
LaTeX TeX Live 安装与 CTAN 国内镜像配置(Windows / macOS / Linux 全流程)
linux·windows·macos
yinke小琪1 小时前
消息队列如何保证消息顺序性?从原理到代码手把手教你
java·后端·面试
土了个豆子的1 小时前
03.缓存池
开发语言·前端·缓存·visualstudio·c#
考虑考虑1 小时前
Java实现墨水屏点阵图
java·后端·java ee
_extraordinary_1 小时前
Java 多线程(一)
java·开发语言
网安Ruler1 小时前
第49天:Web开发-JavaEE应用&SpringBoot栈&模版注入&Thymeleaf&Freemarker&Velocity
java·spring boot·后端
奔跑吧邓邓子2 小时前
【Java实战㉟】Spring Boot与MyBatis:数据库交互的进阶之旅
java·spring boot·实战·mybatis·数据库交互