【C#】【SAP2000】读取SAP2000中所有Frame对象的应力比到Grasshopper中

news2025/4/6 17:15:40
if (build == true)
{
    // 连接到正在运行的 SAP2000
    // 使用 System.Runtime.InteropServices.Marshal.GetActiveObject 方法获取正在运行的 SAP2000 实例
    cOAPI mySapObject = (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
    // 获取 SAP2000 模型对象
    cSapModel mySapModel = mySapObject.SapModel;

    // 运行 SAP2000 分析
    //mySapModel.Analyze.RunAnalysis();

    // 启动钢结构设计
    //mySapModel.DesignSteel.StartDesign();

    // 获取所有框架单元的总数
    int numberFrames = 0;
    string[] frameNames = null;
    // 使用 ref 关键字传递参数,以便在函数内部修改参数的值
    mySapModel.FrameObj.GetNameList(ref numberFrames, ref frameNames);

    // 声明应力比列表
    List<double> _ratios = new List<double>();

    // 遍历所有单元
    for (int i = 0; i < numberFrames; i++)
    {
        string frameName = frameNames[i];

        // 获取当前框架单元的应力比
        int NumberItems = 0;
        string[] FrameName = new string[0];
        double[] Ratio = new double[0];
        int[] RatioType = new int[0];
        double[] Location = new double[0];
        string[] ComboName = new string[0];
        string[] ErrorSummary = new string[0];
        string[] WarningSummary = new string[0];

        // 使用 ref 关键字传递参数,以便在函数内部修改参数的值
        mySapModel.DesignSteel.GetSummaryResults(frameName, ref NumberItems, ref FrameName, ref Ratio, ref RatioType, ref Location, ref ComboName, ref ErrorSummary, ref WarningSummary);

        // 检查是否有应力比结果
        if (NumberItems > 0)
        {
            // 取控制应力比(第一个结果)
            _ratios.Add(Ratio[0]);
        }
        else
        {
            // 如果没有结果,添加0
            _ratios.Add(0);
        }
    }

    // 删除第一个 <null> 值(如果存在)
    if (_ratios.Count > 0 && _ratios[0] == 0)
    {
        _ratios.RemoveAt(0);
    }

    // 查找名为 "StressRatios" 的输出参数的索引
    int outputIndex = -1;
    // 使用 for 循环遍历输出参数列表
    for (int i = 0; i < Component.Params.Output.Count; i++)
    {
        // 比较输出参数的 NickName 属性与目标输出参数名称
        if (Component.Params.Output[i].NickName == "StressRatios")
        {
            outputIndex = i;
            // 使用 break 语句退出循环,提高效率
            break;
        }
    }

    // 如果找到了 "StressRatios" 输出参数
    if (outputIndex >= 0)
    {
        // 将应力比列表赋值给 "StressRatios" 输出参数
        Component.ExpireSolution(true);
        // 使用索引访问输出参数,并调用 AddVolatileDataList 方法将数据赋值给输出参数
        Component.Params.Output[outputIndex].AddVolatileDataList(new Grasshopper.Kernel.Data.GH_Path(0), _ratios);
    }
}

使用的编程技巧说明:

  1. 使用 System.Runtime.InteropServices.Marshal.GetActiveObject 方法获取正在运行的 SAP2000 实例,避免重复打开 SAP2000 程序。

  2. 使用 ref 关键字传递参数,以便在函数内部修改参数的值,提高代码的可读性和效率。

  3. 使用 for 循环遍历输出参数列表,通过比较输出参数的 NickName 属性与目标输出参数名称来查找指定输出参数的索引。

  4. 在找到目标输出参数后,使用 break 语句退出循环,提高代码的效率。

  5. 使用索引访问输出参数,并调用 AddVolatileDataList 方法将数据赋值给输出参数,确保数据能够正确传递给 Grasshopper 组件的输出端口。

  6. 使用条件语句 if (build == true) 控制代码的执行,避免不必要的计算和操作。

  7. 使用列表 List<double> _ratios 存储应力比结果,方便后续的数据处理和操作。

  8. 使用条件语句 if (_ratios.Count > 0 && _ratios[0] == 0) 删除列表中的第一个 <null> 值(如果存在),确保数据的准确性和完整性。

效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1515253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

趣学前端 | 平平无奇的JavaScript函数

背景 最近睡前习惯翻会书&#xff0c;重温了《JavaScript权威指南》。这本书&#xff0c;文字小&#xff0c;内容多。两年了&#xff0c;我才翻到第十章。因为书太厚&#xff0c;平时都充当电脑支架。 JavaScript函数 读这章之前&#xff0c;我感觉我三十年开发功力&#xf…

构建社区服务平台的智慧架构

社区服务平台作为连接社区居民与各类服务资源的桥梁&#xff0c;承载着提升居民生活品质、促进社区发展的重要使命。本文将深入探讨社区服务平台的架构设计理念、核心功能和发展前景&#xff0c;助力读者了解如何构建智慧化、便捷化的社区服务平台&#xff0c;为社区居民提供更…

SpringBoot+Vue项目报错(问题已解决)

1、错误日志 2、分析原因&#xff1a; JWT strings must contain exactly 2 period characters. Found: 0 JWT字符串必须包含2个句号字符。发现:0 分析&#xff1a;可以判断出大概可能是token格式出现了问题 3、参考 http://t.csdnimg.cn/hfEiY 4、检查后端代码是否出现问…

VR数字展厅在企业中应用的优势有哪些?

随着VR全景技术的成熟&#xff0c;VR数字展厅逐渐成为了企业展示形象和产品的重要手段之一。VR企业数字展厅是一种通过VR技术、3D建模技术展示企业形象和产品的创新方式&#xff0c;将企业线下的展厅搬到线上&#xff0c;为企业品牌形象带来了很多优势。 VR数字展厅在企业中应用…

数学实验_Matlab使用2_简单绘图

简单使用 x -pi * 2 : .1 : pi*2;y sin(x);plot(x, y); % 绘制普通图像plot(x, y, k-.*); % 绘制2维图像&#xff0c;线为实线&#xff0c;*为每个点&#xff08;Matlab的画图比较原始&#xff0c;就是简单的秒点画图&#xff09;grid on; % 打开网状格式% grid off; % 关闭…

php中 0 == ‘’(0等于任意字符串) 判断是否成立 返回true

php中不同类型变量之间比较大小 一、背景二、探究0是为什么&#xff1f;三、探究 0all是为什么&#xff1f;四、程序中如何判断0是否等于指定字符串 一、背景 最近在项目实际开发中&#xff0c;我需要判断前端传来的参数值是否等于一个字符串&#xff1b;然后发现当参数值是0时…

每天五分钟计算机视觉:如何构造分类定位任务的算法模型?

本文重点 本节课程我们将学习分类定位的问题,也就是说不仅要完成图片分类任务,然后还要完成定位任务。如下所示,我们不仅要用算法判断图片中是不是一辆车,还要在图片中标记出它的位置,用边框对象圈起来,这就是分类定位问题。 一般可能会有一张图片对应多个对象,本节课我…

你《时间贫困》么?

今天我要为大家分享的书叫《时间贫困》 这本书出版于2023年12月 “时间贫困”这个名字是什么意思呢&#xff1f; 它指的是一种没有自己的时间的感受 这种感受我相信大家都不陌生 现代人早晨被闹钟叫醒后就忙着洗漱、吃早饭、上班 下班后经过漫长的通勤回到家 可能还要处理各种琐…

Mysql 死锁案例4-delete 相邻记录导致死锁

死锁复现 CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,d int(11) DEFAULT NULL,PRIMARY KEY (id),KEY c (c) ) ENGINEInnoDB DEFAULT CHARSETutf8;/*Data for the table t */insert into t(id,c,d) values (0,0,0),(5,5,5),(10,10,10),(15,15,15) 事务1事…

数据结构入门篇 之 【双链表】的实现讲解(附完整实现代码及顺序表与线性表的优缺点对比)

一日读书一日功&#xff0c;一日不读十日空 书中自有颜如玉&#xff0c;书中自有黄金屋 一、双链表 1、双链表的结构 2、双链表的实现 1&#xff09;、双向链表中节点的结构定义 2&#xff09;、初始化函数 LTInit 3&#xff09;、尾插函数 LTPushBack 4&#xff09;、头…

04_拖动文件渲染在页面中

新建一个文件夹&#xff0c;跟之前一样&#xff0c;在 Vscode 终端里输入 yarn create electron-app Drag。 在 index.html 添加以下代码&#xff0c;JS 文件夹和 render.js 都是新创建的&#xff1a; 首先&#xff0c;css 文件一般和 html 结合使用&#xff0c;相当于 html 是…

SQL-Labs靶场“32-33”关通关教程

君衍. 一、32关 GET单引号闭合宽字节注入1、源码分析2、宽字节注入原理3、联合查询注入4、updatexml报错注入5、floor报错注入 二、33关 GET单引号addslashes逃逸注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 一、32关 GET单引号闭合宽字节注入 请求方…

yolov5-模型蒸馏算法

一般来说模型剪枝之后精度都会下降,微调之后会恢复一部分,但仍然达不到剪枝前的精度,因此蒸馏会在微调阶段配合使用 蒸馏是一种基于“教师-学生网络”的训练方法,教师模型参数量较大,效果更好,学生模型参数量较少,效果较差,蒸馏即让小模型学习大模型的知识,提升小模型…

ADO .Net操作SQL Server数据库

//ADO.NET是.NET Framework提供的数据访问服务的类库&#xff0c;应用程序可以使用ADO.NET连接到这些数据源&#xff0c;并检索、处理和更新数据 //常用的数据源包括四种&#xff1a;&#xff08;1&#xff09;Microsoft SQL Server数据源&#xff1a;使用System.Data.SqlClien…

力扣27. 移除元素

思路&#xff1a;数组的空间是连续的&#xff0c;没办法删除&#xff0c;所以只能是覆盖&#xff1b; 把有用的元素排上来之后&#xff0c;剩下的空间放什么元素可以直接忽视&#xff0c;然 后我们只需要返回新数组中长度即可&#xff1b; 快慢指针法&#xff1a;我们需要新建两…

数据仓库的基本概念、基本特征、体系结构

个人看书学习心得及日常复习思考记录&#xff0c;个人随笔。 数据仓库的基本概念、基本特征 数据仓库的定义&#xff1a;数据仓库是一个面向主题的、集成的、不可更新的、随时间不断变化的数据集合&#xff0c;用以更好地支持企业或组织的决策分析处理。 数据仓库中数据的4个…

[LeetCode][LCR169]招式拆解 II——巧妙利用字母的固定顺序实现查找复杂度为O(1)的哈希表

题目 LCR 169. 招式拆解 II 某套连招动作记作仅由小写字母组成的序列 arr&#xff0c;其中 arr[i] 第 i 个招式的名字。请返回第一个只出现一次的招式名称&#xff0c;如不存在请返回空格。 示例 1&#xff1a; 输入&#xff1a;arr "abbccdeff" 输出&#xff1a;a…

基于SSM的协同过滤算法的电影推荐系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的协同过滤算法的电影推荐系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通…

LDA主题模型学习笔记

&#xff08;1&#xff09;LDA的基本介绍&#xff08;wiki&#xff09; LDA是一种典型的词袋模型&#xff0c;即它认为一篇文档是由一组词构成的一个集合&#xff0c;词与词之间没有顺序以及先后的关系。一篇文档可以包含多个主题&#xff0c;文档中每一个词都由其中的一个主题…

软考高级:信息系统开发方法2(形式化方法、统计过程方法等)概念和例题

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…