C# CAD2016 cass10宗地Xdata数据写入

一、 查看cass10写入信息

C# Cad2016二次开发获取XData信息(二)

cs 复制代码
一共有81条数据
XData value: QHDM
XData value: 121321
XData value: SOUTH
XData value: 300000
XData value: 141121JC10720
XData value: 权利人
XData value: 0702
XData value: YBDJH
XData value: 预编号
XData value: TUFU
XData value: 3035.25-410.00
XData value: SJZGBM
XData value:
XData value: PZTDYT
XData value: 0101 水田
XData value: QLRZJLX
XData value: 1 身份证
XData value: QLRZJBH
XData value: 权利人身份证号码
XData value: FRDBXM
XData value: 法人代表名字
XData value: FRDBZJLX
XData value: 1 身份证
XData value: FRDBZMS
XData value: 法人身份证
XData value: FRDBDH
XData value: 法人电话
XData value: DLRXM
XData value: 代理人姓名
XData value: DLRZJLX
XData value: 1 身份证
XData value: DLRSFZ
XData value: 代理人身份证
XData value: DLRDH
XData value: 代理人电话
XData value: QSLYZM
XData value: 权属来源
XData value: TXDZ
XData value: 通信地址
XData value: BDDJ
XData value: 0
XData value: TDZL
XData value: 土地坐落
XData value: SBDJ
XData value: 0
XData value: DONGZHI
XData value: 东至
XData value: NANZHI
XData value: 南至
XData value: XIZHI
XData value: 西至
XData value: BEIZHI
XData value: 北至
XData value: SBJZWQS
XData value: 申报建筑物权属
XData value: TDZH
XData value: 土地证号
XData value: AREA
XData value: 579.5341
XData value: BLAREA
XData value: 80.9471
XData value: JZMD
XData value: 0.1397
XData value: JZMJ
XData value: 80.9471
XData value: RJL
XData value: 0.1397
XData value: DWXZ
XData value: 01 国有
XData value: QSXZ
XData value: 10 国有土地所有权
XData value: SYQLX
XData value: 11 划拨
XData value: GMJJHYFLDM
XData value: 01 农业
XData value: TDDJ
XData value: 101 综合一级
XData value: QSRQ
XData value: 20240214
XData value: ZZRQ
XData value: 20240214

二、准备电子表格数据对应81条数据进行填充(我采用csv)不需要考虑office版本问题

三、基础代码走起选择方式(批量导入)

这段C#代码定义了一个AutoCAD自定义命令(函数)zdimport,该命令属于名为"cad自定义面板集.jzd"的命名空间下的内部类zd导出。这个命令的主要功能是让用户从"宗地"图层中选择LWPOLYLINE对象,并可能对所选实体进行某种处理。

具体步骤如下:

  1. 获取当前AutoCAD应用的活动文档、数据库和编辑器对象,以便后续进行数据操作和用户交互。
  2. 创建一个选择过滤器,限制用户只能在"宗地"图层上选择LWPOLYLINE类型的对象。
  3. 使用编辑器提示用户按照设定的过滤规则进行实体选择,并获取用户选择的结果。
  4. 检查用户是否成功选择了至少一个实体。如果选择状态为PromptStatus.OK,则表示用户已成功选择实体。
  5. 开始一个新的事务以确保对AutoCAD数据库的操作具有原子性和一致性。
  6. 遍历用户所选的所有LWPOLYLINE对象的ID,但在给出的代码片段中,具体的处理逻辑被省略了(用注释符//...代替)。开发者可能需要在此处填充处理这些选定多段线的实际代码,例如读取其属性、修改它们或执行其他与业务需求相关的操作。

若要实现特定功能,可以在foreach (ObjectId outerId in outerSelRes.Value.GetObjectIds())循环内添加代码,例如读取并导出多段线的数据信息等。

cs 复制代码
    internal class zd导入
    {
        public static void zdimport()
        {
            // 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            // 创建一个选择过滤器,限制用户只能选择"宗地"图层上的LWPOLYLINE对象作为外部边界
            SelectionFilter outerFilter = new SelectionFilter(new TypedValue[] {
                new TypedValue((int)DxfCode.Start, "LWPOLYLINE"),
                new TypedValue((int)DxfCode.LayerName, "宗地")
             });
            // 提示用户根据上述规则进行实体选择,并获取选择结果
            PromptSelectionResult outerSelRes = ed.GetSelection(outerFilter);
            // 检查用户是否成功选择了实体
            if (outerSelRes.Status == PromptStatus.OK)
            {

            }
        }
    }
}

四、 需要从cad上 获取对应信息,宗地预编号,权利人名字这两个基础信息( 宗地线范围内包含信息)

通过SelectWindowPolygon获取到权利人图层和预编号图层的文本信息并把信息写入到宗地xdata对应信息

cs 复制代码
using (Transaction tr = db.TransactionManager.StartTransaction())// 开始事务处理以确保数据一致性
{
    foreach (ObjectId outerId in outerSelRes.Value.GetObjectIds())// 遍历所有被选中的外部多段线
    {
        Polyline outerPolyline = (Polyline)tr.GetObject(outerId, OpenMode.ForRead);
        // 确保所选多段线是闭合的且至少有一个顶点
        if (outerPolyline.Closed && outerPolyline.NumberOfVertices > 0)
        {
            // 创建并填充一个表示外部多段线边界坐标的点集合
            Point3dCollection outerPoints = new Point3dCollection();
            for (int i = 0; i < outerPolyline.NumberOfVertices; i++)
            {
                Point3d point = outerPolyline.GetPoint3dAt(i);              
                outerPoints.Add(point);
            }
           
            // 创建一个窗口选择过滤器,用于选择位于外部多段线内的所有实体
            SelectionFilter innerFilter = new SelectionFilter(new TypedValue[] {
                new TypedValue((int)DxfCode.Start, "TEXT"),
                new TypedValue((int)DxfCode.LayerName, "权利人"),
                 new TypedValue((int)DxfCode.LayerName, "预编号")
                 });
            // 使用多边形窗口选择方式让用户选择位于外部多段线内的实体
            PromptSelectionResult innerSelRes = ed.SelectWindowPolygon(outerPoints, innerFilter);
            // 检查用户是否成功在内部区域进行了实体选择
            if (innerSelRes.Status == PromptStatus.OK)
            {
                SelectionSet innerSelectionSet = innerSelRes.Value;
                foreach (ObjectId id2 in innerSelectionSet.GetObjectIds())
                {
                    DBText text = tr.GetObject(id2, OpenMode.ForRead) as DBText;
                    if (text != null)
                    {
                        // 获取图层名称
                        string layerName = text.Layer;
                        //文本信息
                        string textContent = text.TextString;
                        // 获取文本坐标
                        double xPos = text.Position.X;
                        double yPos = text.Position.Y;

                    }
                }
            }
        }
    }
}

//有需要cad二次开发可以私信进行联系

//感谢大家的点赞,收藏,转发,关注

相关推荐
Envyᥫᩣ1 小时前
深入浅出C#编程语言
开发语言·c#
机器人天才一号3 小时前
C#从入门到放弃
开发语言·c#
吾与谁归in3 小时前
【C#设计模式(10)——装饰器模式(Decorator Pattern)】
设计模式·c#·装饰器模式
冷眼Σ(-᷅_-᷄๑)10 小时前
Path.Combine容易被忽略的细节
c#·.net
SongYuLong的博客16 小时前
C# (定时器、线程)
开发语言·c#
百锦再17 小时前
详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送
windows·c#·计算机外设
无敌最俊朗@18 小时前
unity3d————协程原理讲解
开发语言·学习·unity·c#·游戏引擎
程序设计实验室18 小时前
在网页上调起本机C#程序
c#
Crazy Struggle1 天前
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
c#·.net·.net core
fs哆哆1 天前
C#编程:优化【性别和成绩名次】均衡分班
开发语言·c#