一、 查看cass10写入信息
C# Cad2016二次开发获取XData信息(二)
一共有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对象,并可能对所选实体进行某种处理。
具体步骤如下:
- 获取当前AutoCAD应用的活动文档、数据库和编辑器对象,以便后续进行数据操作和用户交互。
- 创建一个选择过滤器,限制用户只能在"宗地"图层上选择LWPOLYLINE类型的对象。
- 使用编辑器提示用户按照设定的过滤规则进行实体选择,并获取用户选择的结果。
- 检查用户是否成功选择了至少一个实体。如果选择状态为
PromptStatus.OK
,则表示用户已成功选择实体。 - 开始一个新的事务以确保对AutoCAD数据库的操作具有原子性和一致性。
- 遍历用户所选的所有LWPOLYLINE对象的ID,但在给出的代码片段中,具体的处理逻辑被省略了(用注释符
//...
代替)。开发者可能需要在此处填充处理这些选定多段线的实际代码,例如读取其属性、修改它们或执行其他与业务需求相关的操作。
若要实现特定功能,可以在foreach (ObjectId outerId in outerSelRes.Value.GetObjectIds())
循环内添加代码,例如读取并导出多段线的数据信息等。
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对应信息
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二次开发可以私信进行联系
//感谢大家的点赞,收藏,转发,关注