【C#】【SAP2000】读取SAP2000中单元截面信息和几何信息到Grasshopper中

csharp 复制代码
    if (build == true)
    {
      // 声明变量
      int ret;
      int Numit = 0;
      int[] ObjType = new int[0];
      string[] ObjName = new string[0];
      string sauto = "";
      string propname = "";
      string point1 = "";
      string point2 = "";
      double x1 = 0;
      double y1 = 0;
      double z1 = 0;
      double x2 = 0;
      double y2 = 0;
      double z2 = 0;
      List<Point3d> _pnt1 = new List<Point3d>();
      List<Point3d> _pnt2 = new List<Point3d>();
      List<string> _prof = new List<string>();

      // 连接到正在运行的 SAP2000
      cOAPI mySapObject = null;
      mySapObject = (cOAPI) System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
      cSapModel mySapModel;
      mySapModel = mySapObject.SapModel;

      // 获取选中的对象
      ret = mySapModel.SelectObj.GetSelected(ref Numit, ref ObjType, ref ObjName);

      // 遍历选中的对象
      for (int i = 0; i < ObjName.Length; i++)
      {
        // 获取框架对象的起点和终点
        ret = mySapModel.FrameObj.GetPoints(ObjName[i], ref point1, ref point2);

        // 获取起点的坐标
        ret = mySapModel.PointObj.GetCoordCartesian(point1, ref x1, ref y1, ref z1);

        // 获取终点的坐标
        ret = mySapModel.PointObj.GetCoordCartesian(point2, ref x2, ref y2, ref z2);

        // 创建起点和终点的 Point3d 对象
        Point3d pt1 = new Point3d(x1, y1, z1);
        Point3d pt2 = new Point3d(x2, y2, z2);

        // 添加起点和终点到相应的列表
        _pnt1.Add(pt1);
        _pnt2.Add(pt2);

        // 将起点、终点和截面名称列表赋值给输出参数
        p1 = _pnt1;
        p2 = _pnt2;

        // 获取框架对象的截面名称
        ret = mySapModel.FrameObj.GetSection(ObjName[i], ref propname, ref sauto);

        // 添加截面名称到列表
        _prof.Add(propname);
        Profile = _prof;
      }
    }

调整代码编写,让变量在定义参数的时候才声明,并在附近编写。更容易理解。

csharp 复制代码
if (build == true)
{
    // 连接到正在运行的 SAP2000
    cOAPI mySapObject = (cOAPI)System.Runtime.InteropServices.Marshal.GetActiveObject("CSI.SAP2000.API.SapObject");
    cSapModel mySapModel = mySapObject.SapModel;

    // 获取选中的对象
    int Numit = 0;
    int[] ObjType = new int[0];
    string[] ObjName = new string[0];
    int ret = mySapModel.SelectObj.GetSelected(ref Numit, ref ObjType, ref ObjName);

    // 声明点和截面名称列表
    List<Point3d> _pnt1 = new List<Point3d>();
    List<Point3d> _pnt2 = new List<Point3d>();
    List<string> _prof = new List<string>();

    // 遍历选中的对象
    for (int i = 0; i < ObjName.Length; i++)
    {
        // 获取框架对象的起点和终点
        string point1 = "";
        string point2 = "";
        ret = mySapModel.FrameObj.GetPoints(ObjName[i], ref point1, ref point2);

        // 获取起点的坐标
        double x1 = 0;
        double y1 = 0;
        double z1 = 0;
        ret = mySapModel.PointObj.GetCoordCartesian(point1, ref x1, ref y1, ref z1);

        // 获取终点的坐标
        double x2 = 0;
        double y2 = 0;
        double z2 = 0;
        ret = mySapModel.PointObj.GetCoordCartesian(point2, ref x2, ref y2, ref z2);

        // 创建起点和终点的 Point3d 对象
        Point3d pt1 = new Point3d(x1, y1, z1);
        Point3d pt2 = new Point3d(x2, y2, z2);

        // 添加起点和终点到相应的列表
        _pnt1.Add(pt1);
        _pnt2.Add(pt2);

        // 获取框架对象的截面名称
        string propname = "";
        string sauto = "";
        ret = mySapModel.FrameObj.GetSection(ObjName[i], ref propname, ref sauto);

        // 添加截面名称到列表
        _prof.Add(propname);
    }

    // 将起点、终点和截面名称列表赋值给输出参数
    p1 = _pnt1;
    p2 = _pnt2;
    Profile = _prof;
}

做了以下改变:

  1. 将变量声明移动到了它们第一次被使用的位置附近,使代码更加紧凑和易于理解。

  2. 将点和截面名称列表的声明移动到了循环之前,使它们的作用域更加清晰。

  3. 将输出参数的赋值移动到了循环之后,使代码的逻辑更加清晰。

这样调整后的代码结构更加清晰,变量的声明和使用更加紧密,提高了代码的可读性和可维护性。

相关推荐
进击的雷神几秒前
Perl测试起步:从零到精通的完整指南
开发语言·后端·scala
点云SLAM3 分钟前
Python中in和is关键字详解和使用
开发语言·人工智能·python·python学习·in和is关键字·python中for循环
Kookoos14 分钟前
Redis + ABP vNext 构建分布式高可用缓存架构
redis·分布式·缓存·架构·c#·.net
郭尘帅6661 小时前
Vue3中实现轮播图
开发语言·前端·javascript
Thomas_YXQ1 小时前
Unity3D Overdraw性能优化详解
开发语言·人工智能·性能优化·unity3d
lanbing1 小时前
PHP 与 面向对象编程(OOP)
开发语言·php·面向对象
yzx9910132 小时前
Gensim 是一个专为 Python 设计的开源库
开发语言·python·开源
麻雀无能为力2 小时前
python自学笔记2 数据类型
开发语言·笔记·python
招风的黑耳2 小时前
Java集合框架详解与使用场景示例
java·开发语言
xrkhy2 小时前
java中XML的使用
xml·java·开发语言