C# | CAD批量导出多段线节点坐标(附源代码下载)

本文介绍了如何使用C#编写程序来批量导出CAD图面中的多段线节点坐标,并在每个节点上标注点号。程序通过过滤选择图上的多段线,获取其坐标并存储在数据集合中,最后将数据导出为txt文本文件。此外,还提供了向图面添加单行文字和获取实体外包矩形中心点的函数。
摘要由CSDN通过智能技术生成

图片

在日常工作内容中经常需要用到提取CAD图面坐标点,用于放样和其他软件做交换数据使用;比如导出测量点坐标、多段线节点,图块点等。导出点坐标可以用CAD的“DATAEXTRACTION”命令创建数据提取将数据导出(如图一);对于单条多段线的坐标也可以使用“LIST”命令把多段线的坐标打印在命令上(如图二)、然后将坐标复制出来;如果图面数据比较多的情况下,这种作业效率显而太低,下面做一个将图面所有多段线节点坐标导出的功能,并在每个地块上标注一个地块名字和标注每个地块的节点点号,方便和图面和数据文件对比。这里用到了CAD文字实体添加、文件保存等操作。(文末有源代码下载)

图一

图二

程序设计过程

  1. 创建一个List数据集合,用于存储地块名字和每条多段线节点坐标。
  2. 过滤选择图上所有多段线,获取选择实体的objectId集合。
  3. 循环选择集,根据objectId获取多段线实体和实体外包矩形的中心点(注记地块名字的基点位置),并将地块的名字加到数据集合中和注记在图面上。
  4. 使用Poly
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是用region对象分割多段线C#代码示例: ```csharp using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; public void SplitPolylineByRegion(Polyline polyline, Region region) { Database db = HostApplicationServices.WorkingDatabase; using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); bool isInsideRegion = false; Point3dCollection points = new Point3dCollection(); for (int i = 0; i < polyline.NumberOfVertices; i++) { Point3d point = polyline.GetPoint3dAt(i); if (region.IsPointInside(point, Vector3d.ZAxis)) { if (!isInsideRegion) { if (points.Count > 1) { Polyline newPolyline = new Polyline(points.Count); for (int j = 0; j < points.Count; j++) { newPolyline.AddVertexAt(j, points[j], 0, 0, 0); } btr.AppendEntity(newPolyline); tr.AddNewlyCreatedDBObject(newPolyline, true); } points = new Point3dCollection(); } isInsideRegion = true; } else { if (isInsideRegion) { points.Add(point); } isInsideRegion = false; } } if (points.Count > 1) { Polyline newPolyline = new Polyline(points.Count); for (int j = 0; j < points.Count; j++) { newPolyline.AddVertexAt(j, points[j], 0, 0, 0); } btr.AppendEntity(newPolyline); tr.AddNewlyCreatedDBObject(newPolyline, true); } tr.Commit(); } } ``` 这个方法接受两个参数,一个是多段线对象,另一个是region对象。方法会遍历多段线的所有顶点,判断每个顶点是否在region内部。如果顶点在region内部,就将其添加到新的多段线中;如果顶点不在region内部,就将之前的顶点组成的多段线添加到图形数据库中,并开始新的多段线。 注意,此代码示例仅供参考,并不保证在所有情况下都能正常工作。您需要根据具体的项目需求进行调整和优化。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值