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 回调或临时计算时使用)
相关推荐
生成论实验室14 分钟前
自动驾驶:一个自主运动的系统
人工智能·算法·机器学习·语言模型·机器人·自动驾驶·安全架构
FuckPatience15 分钟前
使用ReactiveUI 前端绑定不生效
c#
sheeta199816 分钟前
LeetCode 每日一题笔记 日期:2026.06.16 题目:3612. 字符串特殊符号处理
笔记·算法·leetcode
青山木23 分钟前
Hot 100 --- 矩阵置零
线性代数·算法·leetcode·矩阵·哈希算法
Jasmine_llq24 分钟前
《B4264 [GESP202503 四级] 二阶矩阵》
线性代数·算法·矩阵·二维矩阵遍历枚举所有2×2矩阵·交叉乘积等式条件判断·输入输出快读加速·长整型防溢出计数统计
不知名的老吴40 分钟前
面经经验分享|算法和数据结构考察
数据结构·经验分享·算法
天天代码码天天41 分钟前
用 TensorRT 加速 PP-OCR:一套 C++ DLL + C# 调用的高性能 OCR 推理方案
c++·c#·ocr
叫我:松哥1 小时前
基于Python flask的中学可控智能命题系统设计与实现,整合遗传算法、DeepSeek 大模型及数据库技术构建一体化应用
数据库·人工智能·python·算法·机器学习·flask·遗传算法
黎阳之光1 小时前
黎阳之光透明大楼:实景孪生重构智慧建筑全新范式
人工智能·物联网·算法·安全·数字孪生