一、 查看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二次開發可以私信進行聯系
//感謝大家的點贊,收藏,轉發,關注???