在日常工作內容中經常需要用到提取CAD圖面坐標點,用于放樣和其他軟件做交換數據使用;比如導出測量點坐標、多段線節點,圖塊點等。導出點坐標可以用CAD的“DATAEXTRACTION”命令創建數據提取將數據導出(如圖一);對于單條多段線的坐標也可以使用“LIST”命令把多段線的坐標打印在命令上(如圖二)、然后將坐標復制出來;如果圖面數據比較多的情況下,這種作業效率顯而太低,下面做一個將圖面所有多段線節點坐標導出的功能,并在每個地塊上標注一個地塊名字和標注每個地塊的節點點號,方便和圖面和數據文件對比。這里用到了CAD文字實體添加、文件保存等操作。
程序設計過程
- 創建一個List數據集合,用于存儲地塊名字和每條多段線節點坐標。
- 過濾選擇圖上所有多段線,獲取選擇實體的objectId集合。
- 循環選擇集,根據objectId獲取多段線實體和實體外包矩形的中心點(注記地塊名字的基點位置),并將地塊的名字加到數據集合中和注記在圖面上。
- 使用Polyline的NumberOfVertices獲取多段線的節點個數,使用 GetPoint3dAt()方法循環獲取每一個點的坐標、同時把節點坐標添加到數據集合和把點號注記在圖面上,文字注記的基點位置就是每個點的位置。
- 保存數據集合;由于數據量不大,我們使用File.WriteAllLines()方法將數據集合全部導出txt文本文件。
CAD單行文字
使用單行文字時,每一行文字都是一個單獨的對象。創建單行文字的方法是,首先創建DBText對象的實例,然后將其添加到代表模型空間或圖紙空間的塊表記錄中。創建DBText對象的實例時,不用給構造函數傳遞任何參數。
DBText text = new DBText();
File類
File 類提供用于創建、復制、刪除、移動和打開文件的靜態方法,并協助創建 FileStream 對象。在使用File之前需要導入IO命名空間using System.IO;
使用WriteAllLines()方法將數據集合保存到文本文件中,這里面有是三個參數:第一、指定保存文件的路徑;第二要保存的數據集合;第三、文件的編碼,這里定義了UTF-8編碼、防止出現亂碼情況。
程序代碼
在上面代碼中,將獲取實體外包矩形的中心點和向圖面添加文字分別做成了自定義函數,同時也方便我們以后程序的使用、不需要重復寫代碼同時也減少代碼的冗余。
向圖面添加單行文字函數
獲取實體外包矩形的中心點函數
程序執行
加載編寫的應用程序,執行“ExPoints”命令。
- 選擇多段線
- 指定保存文件的位置
- 查看保存的結果
本文鏈接:http://www.aiquka.com/blog/149.html
本文標簽: