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

相关推荐
JH30738 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
暖馒8 小时前
Modbus应用层协议的深度剖析
网络·网络协议·c#·wpf·智能硬件
Coder_Boy_9 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
玉梅小洋9 小时前
Windows 10 Android 构建配置指南
android·windows
invicinble9 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat
较真的菜鸟9 小时前
使用ASM和agent监控属性变化
java
黎雁·泠崖9 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
qq_124987075311 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_11 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Mr_sun.11 小时前
Day06——权限认证-项目集成
java