当前位置: 首页 > news >正文

CAD二次开发中DoubleCollection用法详解

在 AutoCAD .NET API 中,DoubleCollection是一个用于存储双精度浮点数集合的类,常用于定义多段线(Polyline)的顶点坐标或样条曲线的拟合点等。

核心用法

DoubleCollection通常作为参数传递给需要一系列连续数值的构造函数或方法。其核心用法是按顺序存储坐标值,例如(x1, y1, z1, x2, y2, z2, ...)

1. 创建与填充 DoubleCollection

你可以通过多种方式创建并填充一个DoubleCollection对象。

// 方法一:使用构造函数并逐个添加 DoubleCollection vertices1 = new DoubleCollection(); vertices1.Add(0.0); // X1 vertices1.Add(0.0); // Y1 vertices1.Add(0.0); // Z1 vertices1.Add(100.0); // X2 vertices1.Add(100.0); // Y2 vertices1.Add(0.0); // Z2 // 方法二:使用集合初始化器(更简洁) DoubleCollection vertices2 = new DoubleCollection { 0.0, 0.0, 0.0, // 顶点1 (X, Y, Z) 100.0, 0.0, 0.0, // 顶点2 100.0, 100.0, 0.0, // 顶点3 0.0, 100.0, 0.0 // 顶点4 };

2. 典型应用:创建三维多段线 (Polyline3d)

这是DoubleCollection最经典的应用场景之一,用于传递多段线所有顶点的三维坐标。

using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; public class DoubleCollectionExample { [CommandMethod("CreatePoly3d")] public void CreatePoly3d() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction tr = db.TransactionManager.StartTransaction()) { // 打开块表记录(模型空间)以写入实体 BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); // 1. 定义多段线的顶点坐标集合 DoubleCollection vertices = new DoubleCollection { // 顶点1 0, 0, 0, // 顶点2 200, 0, 50, // 顶点3200, 150, 100, // 顶点4 0, 150, 0 }; // 2. 创建三维多段线对象 Polyline3d poly3d = new Polyline3d(Poly3dType.SimplePoly, vertices, false); // 3. 将实体添加到模型空间并提交事务 btr.AppendEntity(poly3d); tr.AddNewlyCreatedDBObject(poly3d, true); tr.Commit(); } } }

3. 与其他几何类型的转换

有时需要将Point3dCollection等更结构化的数据转换为DoubleCollection

// 假设有一个 Point3dCollectionPoint3dCollection points = new Point3dCollection { new Point3d(10, 20, 0), new Point3d(50, 60, 10), new Point3d(100, 30, 20) }; // 转换为 DoubleCollection DoubleCollection coordCollection = new DoubleCollection(); foreach (Point3d pt in points) { coordCollection.Add(pt.X); coordCollection.Add(pt.Y); coordCollection.Add(pt.Z); } // 此时 coordCollection 包含:10, 20, 0, 50, 60, 10, 100, 30, 20

关键注意事项

事项说明
数据顺序必须严格按照X, Y, Z, X, Y, Z...的顺序添加坐标值,否则图形会错乱。
元素数量DoubleCollection中元素的总数必须是 3 的倍数(对于三维坐标),因为每个顶点由三个double值 (X, Y, Z) 构成。
性能考量对于大量顶点,建议在创建集合时预估大小,或使用更高效的填充方式(如数组转换),以减少内存重新分配。
应用场景主要用于Polyline3d、某些Spline拟合数据的构造,以及需要传递原始双精度数组的低层级 API。

总结

DoubleCollection在 AutoCAD 二次开发中是一个基础的、用于顺序存储双精度数值的数据容器,尤其在构造基于顶点序列的图形对象(如三维多段线)时不可或缺。使用时需严格保证坐标数据的顺序和数量正确。


参考来源

  • AutoCAD二次开发基础
http://www.jsqmd.com/news/1100469/

相关文章:

  • 后端工程师需要掌握的DevOps实践指南
  • 婚前财产公证材料?婚前财产公证怎么办?
  • Spring Boot + Vue 前后端分离音乐网站实战:从零到部署全流程解析
  • 别再傻傻一个字节一个字节写了!STM32 HAL库下AT24CXX页写函数详解与避坑指南
  • OWASP Top 10 A02加密机制失效:十大风险场景与纵深防御实战
  • Qwen-Image-Agent发布:Agent如何填补AI生图的上下文鸿沟
  • 基于YOLOv5与OpenCV的实时目标检测系统搭建指南
  • 【机器人】基于matlab缓冲的不确定性感知沃罗诺伊单元多机器人碰撞规避【含Matlab源码 15672期】
  • 别再纠结clock_gettime了!Windows下用QueryPerformanceCounter实现高精度计时(附C++代码示例)
  • 西安军工科研院所首选:满足信创要求的国产数字孪生仿真引擎有哪些?
  • 保姆级教程:用PyTorch和MNE搞定BCI竞赛数据集预处理,手把手教你喂给EEGNet
  • 保姆级教程:在RK3568开发板上搞定RS232/RS485/CAN通信测试(附设备树配置与避坑点)
  • 别再让流程打架了!手把手教你用L1-L5框架梳理公司业务(附实战避坑清单)
  • 本地化部署AI编程助手:Codex能力接入IDE与工作流实践
  • SPA安全扫描实战:基于Playwright的自动化漏洞发现与攻防
  • CAD 内嵌图片/Excel 的识别
  • 无状态的“皇帝新装”:JWT 注销、续签与黑名单的终极拷问
  • CAD快捷键
  • 手把手教你用Cheat Engine 7.5修改《魔法工艺》0.82.7版:无限金币、钥匙与生命值
  • 别再死记硬背了!用Python+Excel搞定二级计量师核心公式(附实战代码)
  • 别再死记硬背公式了!用Python+Matlab手把手复现AM包络调制与解调全过程
  • 爬虫开发实战:识别与规避反爬蜜罐(Web陷阱)的技术指南
  • RTK8852BE蓝牙驱动的安装问题
  • L3/L4 自动驾驶强制国标落地:座舱交互与仿真测试的实时系统支撑方案
  • 3D点云处理入门:从ICP配准到PointNet分类的完整实践指南
  • 别再手动算排名了!用Matlab实现TOPSIS评价模型,5分钟搞定水质评估案例
  • 别再死记硬背公式了!用Python+Matplotlib动态可视化AM包络调制全过程
  • 爱博精电助力北京中海金融中心,打造首都核心区绿色建筑能源管理新标杆
  • YOLO目标检测入门教程:从环境搭建到自定义训练全流程
  • 安吉哪里可以晚托的权威机构