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 回调或临时计算时使用)
相关推荐
Fox爱分享1 小时前
字节二面:1000瓶酒,有一瓶是毒药,多少只老鼠可以查出来?
算法·面试·程序员
+wacyltd大模型备案算法备案2 小时前
大模型评估测试题库怎么建?风险分类、测试样本的完整方法
人工智能·算法·安全·分类·大模型·大模型备案·大模型上线登记
Fox爱分享2 小时前
字节二面智力题:100只老虎和1只羊关在一起,这只羊会不会被吃?
算法·面试·程序员
吴可可1232 小时前
C#实现CAD框选闭合图元外偏移1毫米
c#
꒰ঌ 安卓开发໒꒱2 小时前
.NET CAP入门到入土
后端·c#·.net
xin(n_n)b3 小时前
经典题目(3):把数字翻译成字符串;兑换零钱
算法
惊鸿一博3 小时前
特征匹配+Glue Factory 框架评估特征提取与匹配算法时常用的度量标准
算法·特征匹配
柒和远方3 小时前
LeetCode 4. 寻找两个正序数组的中位数 —— 二分划分的艺术
javascript·python·算法
z小猫不吃鱼4 小时前
模型剪枝经典论文精读:Channel Pruning for Accelerating Very Deep Neural Networks
算法·机器学习·剪枝
njsgcs4 小时前
已知链中心距用节数算中间电机摆放位置 常量弧长 三链轮弦长模型算法
算法