【C#】【SAP2000】读取SAP2000中所有Frame对象的应力比到Grasshopper中
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);}
}
使用的编程技巧说明:
-
使用
System.Runtime.InteropServices.Marshal.GetActiveObject方法获取正在运行的 SAP2000 实例,避免重复打开 SAP2000 程序。 -
使用
ref关键字传递参数,以便在函数内部修改参数的值,提高代码的可读性和效率。 -
使用
for循环遍历输出参数列表,通过比较输出参数的NickName属性与目标输出参数名称来查找指定输出参数的索引。 -
在找到目标输出参数后,使用
break语句退出循环,提高代码的效率。 -
使用索引访问输出参数,并调用
AddVolatileDataList方法将数据赋值给输出参数,确保数据能够正确传递给 Grasshopper 组件的输出端口。 -
使用条件语句
if (build == true)控制代码的执行,避免不必要的计算和操作。 -
使用列表
List<double> _ratios存储应力比结果,方便后续的数据处理和操作。 -
使用条件语句
if (_ratios.Count > 0 && _ratios[0] == 0)删除列表中的第一个<null>值(如果存在),确保数据的准确性和完整性。
效果

相关文章:
【C#】【SAP2000】读取SAP2000中所有Frame对象的应力比到Grasshopper中
if (build true) {// 连接到正在运行的 SAP2000// 使用 System.Runtime.InteropServices.Marshal.GetActiveObject 方法获取正在运行的 SAP2000 实例cOAPI mySapObject (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject"…...
一台服务器部署两个独立的mysql实例
🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专…...
SpringBoot(Lombok + Spring Initailizr + yaml)
1.Lombok 1.基本介绍 2.应用实例 1.pom.xml 引入Lombok,使用版本仲裁 <!--导入springboot父工程--><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version&g…...
数据库基础知识超详细解析~(进阶/复习版)
文章目录 前言一、数据库的操作1.登入数据库2.创建数据库3.显示当前数据库4.使用数据库5.删除数据库 二、常用数据类型三、数据库的约束1约束类型2NULL约束3UNIQUE:唯一约束4DEFAULT:默认值约束5 PRIMARY KEY:主键约束6 FOREIGN KEY:外键约束…...
创建对象的方法有哪些
创建对象的方法主要取决于你使用的编程语言和上下文。下面我将列出一些主流编程语言中创建对象的方法: Python: 使用类定义和__init__方法: pythonclass MyClass: def __init__(self, name): self.name nameobj MyClass("Alice") 1.使用工厂…...
Oracle 10g字符编码
pl/sql developer查询数据时出现乱码,主要检查如下: 1、检查服务器编码 select * from v$nls_parameters;select * from nls_database_parameters;select userenv(language) from dual; 2、查看数据库可用字符集参数设置 select * from v$nls_valid_val…...
掌握抽象基础之20个必备原则,看完你还不会,你打我
抽象基础之20个必备原则 1. 面向对象编程(OOP)中抽象原则背后的基本思想是什么?2.抽象和封装的区别?3.提供一个现实生活中说明抽象的例子4.在编程语言中如何实现抽象?5.定义抽象类6.提供一个抽象类的真实世界场景7.解释…...
设计模式 -- 2:策略模式
目录 总结部分:策略模式的优点部分代码部分 总结部分: 策略模式和简单工厂模式很像 区别在于 简单工厂模式 需求的是由工程创造的类 去给客户直接答案 而策略模式在于 我有主体 一个主体 根据策略的不同来进行不同的计算 我的主体就负责收钱 然后调度相…...
【快速上手ProtoBuf】proto 3 语法详解
1 🍑字段规则🍑 消息的字段可以⽤下⾯⼏种规则来修饰: singular :消息中可以包含该字段零次或⼀次(不超过⼀次)。 proto3 语法中,字段默认使⽤该规则。repeated :消息中可以包含该…...
人工智能的幽默“失误”
人工智能迷惑行为大赏 随着ChatGPT热度的攀升,越来越多的公司也相继推出了自己的AI大模型,如文心一言、通义千问等。各大应用也开始内置AI玩法,如抖音的AI特效~在使用过程中往往会遇到一些问题,让你不得不怀疑&#x…...
js的异步请求?
在 JavaScript 中,进行异步请求通常涉及到使用 XMLHttpRequest 对象或者更现代的 Fetch API 或 Axios 库。这些工具可以帮助我们向服务器发送请求并在后台获取数据,而不会阻塞页面的其他操作。 下面是一个简单的示例,演示如何使用原生的 XML…...
华润对象存储(OBS)工具类
目录 一、备注二、工具类三、对象存储放在内网,如何实现外网访问 一、备注 1、ObjectBasicInfo、ObjectDetailInfo、ResultBody这三个类可自行替换或者去掉 二、工具类 package com.xxx.util;import com.amazonaws.HttpMethod; import com.amazonaws.auth.AWSStat…...
强缓存和协商缓存的区别?
协商缓存和强缓存是 HTTP 缓存机制中的两种不同的策略,用于减少网络请求并提高网页加载速度。它们之间的主要区别在于缓存的验证方式和服务器返回的响应头。 强缓存: 强缓存是基于过期时间(Expires)和缓存标识(Cache…...
ChatGPT提问技巧——对抗性提示
ChatGPT提问技巧——对抗性提示 对抗性提示是一种允许模型生成能够抵御某些类型的攻击或偏差的文本的技术。这种技术可用于训练更健壮、更能抵御某些类型的攻击或偏差的模型。 要在 ChatGPT 中使用对抗性提示,应为模型提供一个提示,该提示的设计应使模…...
openGauss使用BenchmarkSQL进行性能测试(上)
一、前言 本文提供openGauss使用BenchmarkSQL进行性能测试的方法和测试数据报告。 BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,支持很多数据库,如PostgreSQL、Oracle和Mysql等。 TPC-C是专门针对联机交易处理系统…...
Java的线程池机制
Java的线程池机制是用来管理和调度多个线程的工具。通过线程池,可以避免频繁地创建和销毁线程,提高线程的复用率,减少资源消耗。 Java中提供了几种不同类型的线程池: 1、FixedThreadPool(固定大小线程池)…...
EasyCode 插件的具体使用
前言 EasyCode 是基于IntelliJ IDEA Ultimate版开发的一个代码生成插件,主要通过自定义模板(基于velocity)来生成各种你想要的代码。通常用于生成Entity、Dao、Service、Controller。如果你动手能力强还可以用于生成HTML、JS、PHP等代码。理…...
Ypay源支付6.9无授权聚合免签系统可运营源码
YPay是一款专为个人站长设计的聚合免签系统,YPay基于高性能的ThinkPHP 6.1.2 Layui PearAdmin架构,提供了实时监控和管理的功能,让您随时随地掌握系统运营情况。 说明 Ypay源支付6.9无授权聚合免签系统可运营源码 已搭建测试无加密版本…...
SpringBoot+Vue项目报错(问题已解决)
1、错误日志 2、分析原因: JWT strings must contain exactly 2 period characters. Found: 0 JWT字符串必须包含2个句号字符。发现:0 分析:可以判断出大概可能是token格式出现了问题 3、参考 http://t.csdnimg.cn/hfEiY 4、检查后端代码是否出现问…...
DEAP 自定义交叉操作
在遗传算法中,使用DEAP库来实现自定义的交叉操作可以非常灵活。如果你想模拟多个染色体的情况,通过在染色体的特定区间进行交叉,你需要自定义一个交叉函数。以下是一个示例,展示如何实现一个自定义的交叉函数,该函数允…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
