【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库来实现自定义的交叉操作可以非常灵活。如果你想模拟多个染色体的情况,通过在染色体的特定区间进行交叉,你需要自定义一个交叉函数。以下是一个示例,展示如何实现一个自定义的交叉函数,该函数允…...
Claude Code /buddy 命令失效了?教你一招绕过限制,直接解锁金色传说!
最近升级到 Claude Code > v2.1.90 的小伙伴可能发现,输入 /buddy 命令后只会提示: buddy is unavailable on this configuration GitHub 上的 issue 也有相关讨论,官方把这个命令禁用了。那刚安装或升级的用户就没法体验 buddy 了吗&…...
个人博客域名迁移说明 www.xiaoming.io
因为之前很多文章和插图都链接到了个人博客,一些读者评论和私信反馈链接有问题,图片不显示,这里特地说明如下:个人博客域名从原先的 www.hainter.com 改成了 www.xiaoming.io。例如文章中有链接 http://www.hainter.com/books 不能…...
通义千问3-Reranker-0.6B开箱即用:国产信创服务器上的语义裁判快速搭建
通义千问3-Reranker-0.6B开箱即用:国产信创服务器上的语义裁判快速搭建 1. 为什么需要专业的语义重排序模型? 在信息爆炸的时代,我们每天都要面对海量的文本数据。无论是企业知识库、电商搜索还是智能客服,传统的关键词匹配就像…...
老Mac焕新实战:OpenCore Legacy Patcher全解析——让旧硬件重获新生
老Mac焕新实战:OpenCore Legacy Patcher全解析——让旧硬件重获新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当你的Mac弹出"此Mac不支…...
UE Viewer终极指南:如何快速浏览和提取虚幻引擎1-4游戏资源
UE Viewer终极指南:如何快速浏览和提取虚幻引擎1-4游戏资源 【免费下载链接】UEViewer Viewer and exporter for Unreal Engine 1-4 assets (UE Viewer). 项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer UE Viewer是一款专为虚幻引擎1-4游戏资源打造…...
春联生成模型-中文-base环境隔离部署:Anaconda虚拟环境配置指南
春联生成模型-中文-base环境隔离部署:Anaconda虚拟环境配置指南 每次想尝试一个新的AI模型,最头疼的可能不是模型本身,而是环境配置。装了这个包,发现和之前项目的包版本冲突;好不容易跑起来,结果报了一堆…...
十字军之王II双字节字符显示解决方案:从乱码到完美支持的技术实现
十字军之王II双字节字符显示解决方案:从乱码到完美支持的技术实现 【免费下载链接】CK2dll Crusader Kings II double byte patch /production : 3.3.4 /dev : 3.3.4 项目地址: https://gitcode.com/gh_mirrors/ck/CK2dll 当《十字军之王II》玩家第一次在游戏…...
AutoGen Studio实战体验:基于Qwen3-4B模型打造智能问答助手
AutoGen Studio实战体验:基于Qwen3-4B模型打造智能问答助手 1. AutoGen Studio简介 AutoGen Studio是一个低代码界面,旨在帮助开发者快速构建AI代理、通过工具增强它们、将它们组合成团队并与之交互以完成任务。它基于AutoGen AgentChat构建——一个用…...
Intv_ai_mk11集成Node.js环境配置:快速构建实时聊天应用
Intv_ai_mk11集成Node.js环境配置:快速构建实时聊天应用 1. 环境准备与快速部署 在开始构建实时聊天应用之前,我们需要确保开发环境已经准备就绪。这里假设你已经具备基本的JavaScript和Node.js知识。 首先,确保你的系统已经安装了Node.js…...
NideShop物流配送系统:如何实现订单发货与快递跟踪的完美集成
NideShop物流配送系统:如何实现订单发货与快递跟踪的完美集成 【免费下载链接】nideshop NideShop 开源微信小程序商城服务端 API(Node.js ThinkJS) 项目地址: https://gitcode.com/gh_mirrors/ni/nideshop NideShop是一个基于Node.j…...
