autoCAD二次开发 4.正多边形与collection区分

正多边形与collection区分

autocad中正多边形

本质

在AutoCAD底层,所有的多边形(不管正不正)本质上都是 闭合的 Polyline(多段线)。AutoCAD自带的 POLYGON 命令,底层也是通过计算顶点坐标后生成 Polyline 来实现的。

参数

csharp 复制代码
 // 1. 定义正多边形参数
            int sides = 6;                 // 边数
            Point3d center = new Point3d(0, 0, 0); // 中心点
            double radius = 10.0;          // 半径
            bool isInscribed = true;       // true: 内接于圆, false: 外切于圆

顶点坐标计算(内接为例)

csharp 复制代码
 double partAngle = Math.PI * 2 / 6;
 Point2dCollection points = new Point2dCollection();
//获取六边形的每一个顶点坐标
for(int i=0; i<6;  i++)
{
	// CAD中原生多边形默认第一个点在正上方(90度),所以起始角度设为 π/2
   double currentAngle = partAngle*i + Math.PI/2;
   double x = cMain.Center.X + radius*Math.Cos(currentAngle);
   double y = cMain.Center.Y + radius.*Math.Sin(currentAngle);
   Point2d interPoint = new Point2d(x, y);
   points.Add(interPoint);
}

画内接正多边形

csharp 复制代码
using (Polyline pol = new Polyline())
{ 

		//获取所有顶点坐标
    for(int i=0; i<points.Count; i++)
    {
    		//将坐标按顺序加入多段线
       pol.AddVertexAt(i, points[i],0,0,0);
    }
    //闭合多段线
    pol.Closed = true;
    btr.AppendEntity(pol);
    trans.AddNewlyCreatedDBObject(pol, true);
}

点的转换

二维转三维

csharp 复制代码
Point2d pt2d = new Point2d(10.5, 20.3);

// 提取 X 和 Y,Z 轴设为 0
Point3d pt3d = new Point3d(pt2d.X, pt2d.Y, 0.0);

三维转二维

csharp 复制代码
Point3d pt3d = new Point3d(10, 20, 5);

// 提取 X 和 Y,Z 轴舍去
Point2d pt2d = new Point2d(pt3d.X, pt3d.Y); 

ObjectIdCollection 和 DBObjectCollection区别

核心区别在于"装的是对象的身份证,还是对象本体"

  • ObjectIdCollection(身份证集合):里面装的是一堆身份证号码(ObjectId 结构体)。它非常轻量,只记录对象在数据库中的唯一标识。
  • DBObjectCollection(本体集合):里面装的是活生生的人(DBObject 对象实例)。它包含了对象在内存中的全部数据(如圆的圆心、半径、颜色等)。
特性 ObjectIdCollection DBObjectCollection
存储内容 ObjectId (结构体,轻量级指针) DBObject (类,完整的内存对象)
内存占用 极小 (仅占用几个字节/ID) 较大 (包含对象所有属性和底层 C++ 包装)
事务依赖 无。事务结束后,ID依然有效,可以跨事务使用。 强依赖。事务结束后,DBObject 会被关闭/释放,继续访问会报错。
访问数据 需要通过事务再次 GetObject() 才能读取数据。 可以直接调用 circle.Radius 等属性,无需再次打开。
安全性 非常安全,是 AutoCAD 官方推荐的标准做法。 危险,容易因为事务管理不当导致程序崩溃或数据损坏。
使用频率 极高(99%的场景) 极低(仅在某些特殊的底层 API 回调或临时计算时使用)
相关推荐
武子康1 小时前
Qwen-Drive 到底是什么:4B 级 VLM 如何成为驾驶策略底座
人工智能·算法·机器学习
zh_xuan3 小时前
LeeCode 496. 下一个更大元素I
数据结构·算法·栈·单调栈
机 _ 长3 小时前
05 智算运维|8 张卡怎么才算「捆成一张」:NCCL 实测与拓扑
运维·人工智能·算法·智算运维
早起CaiCai4 小时前
【2023-01 OM】利用深度学习算法融合异质观测实现海洋场降尺度
人工智能·深度学习·算法
梦里寻码4 小时前
我用 NestJS + Vue3 写了一套完整的研发管理系统(58 表 / 229 API / 130 项断言,全开源
前端·后端·算法
猿人谷5 小时前
Surrogate Model:让进化算法学会“预测”,为什么它正在成为智能优化的重要技术?
后端·算法·架构
青少儿编程课堂6 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
在猴站学算法7 小时前
(《统计学习方法》(第2版) 李航)第2章 感知机算法
学习·算法·机器学习·统计学习
Rainmicro7 小时前
【无标题】
java·数据库·算法