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 回调或临时计算时使用)
相关推荐
zyl76512 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
玩泥巴的14 小时前
MAF + 飞书:让大模型干活,但别让它乱干
ai·c#·.net·飞书·agent
爱读书的小胖16 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法
结局无敌16 小时前
React Native for OpenHarmony 实战:三方库 react-native-modal-dialog 的鸿蒙化适配指南
深度学习·算法·react native·react.js·harmonyos
OPEN-F17 小时前
ROS2系列教程:上位机建图与导航(原理综合)
算法·机器人
weixin_3077791317 小时前
C++代码实现MATLAB中的fitrtree函数功能
开发语言·c++·算法·matlab
tomwang032217 小时前
路径优化建模、优化算法分类及工程化小结
算法·数学建模·分类
小羊没烦恼!17 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
2501_9269783317 小时前
人机通信协议--人和机器之间的交互想象
人工智能·经验分享·算法·ai写作
行者全栈架构师17 小时前
【鸿蒙心迹】互动卡片全链路——把核心功能放到桌面(FormKit 实战)(HarmonyOS 7.x)
前端·算法·架构