【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. 将输出参数的赋值移动到了循环之后,使代码的逻辑更加清晰。

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

相关推荐
Kisorge13 分钟前
【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数
c语言·开发语言
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学2 小时前
QT-简单视觉框架代码
开发语言·qt
威桑2 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服2 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生2 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans2 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
码农君莫笑3 小时前
信管通低代码信息管理系统应用平台
linux·数据库·windows·低代码·c#·.net·visual studio