1.1 從哪兒開始
對於多數的工程設計人員,不完全具備上節所述的各種條件。對於Civil 3D的應用可能比較熟悉;但對於計算機語言,只限於上學時所學的一點基礎知識,步入工作崗位后與計算機語言基本無緣;對於C#、VB.net可能根本就沒有接觸過。
只要你有一顆堅定的心,堅持學習,就一定能進入Civil 3D二次開發的大門,寫出自己的程序,從而節省自己的時間、調高工作效率。
如果您是一位熟悉Civil 3D軟件應用的工程設計人員,那么您就要從學習計算機語言開始。如果您是一位精通計算機語言的專業程序設計人員,那么您就要先了解Civil 3D的應用。本書面向的讀者是第一類人群,如果您是第二類人員,這本書應該不適合您。
既然要學習計算機語言,從哪里學起呢?這是個問題,並且是個不好回答的問題。既然這樣,我們就從閱讀代碼開始,雖然簡單粗暴,但我相信會很快見到成效。
在利用Civil 3D創建原始地形曲面過程中,我們經常遇到類似的需求:要把普通的AutoCAD對象,諸如點、文本、塊等,轉化成Civil 3D的幾何空間點(CogoPoint)。對於點,Civil 3D有內部命令,可以直接實現轉換,但對於文本、塊等對象,沒有內部命令,雖然我們可以利用數據提取等方法提取數據,創建外部文件,然后再創建幾何空間點,但總會有些情況需要通過二次開發才能實現。假設我們需要將AutoCAD的塊對象批量轉換成幾何空間點,我們需要寫多少行代碼才能實現呢?
讓我們來看以下代碼:
01 public void BlockReferenceToCogoPoint() 02 { 03 //獲取AutoCAD的Document對象 04 Document doc = Application.DocumentManager.MdiActiveDocument; 05 //獲取Civil 3D的Document對象 06 CivilDocument civilDoc = CivilApplication.ActiveDocument; 07 //獲取幾何空間點集 08 CogoPointCollection cogoPts = civilDoc.CogoPoints; 09 //開始事務 10 using (Transaction tr = doc.TransactionManager.StartTransaction()) 11 { 12 //獲取塊表 13 BlockTable blockTable=tr.GetObject(doc.Database.BlockTableId,OpenMode.ForRead) 14 as BlockTable; 15 //獲取模型空間的ObjectId 16 ObjectId modelSpaceId = blockTable[BlockTableRecord.ModelSpace]; 17 //獲取塊表記錄(模型空間) 18 BlockTableRecord modelSpace = modelSpaceId.GetObject(OpenMode.ForRead) 19 as BlockTableRecord; 20 //循環處理模型空間的每一個對象 21 foreach (ObjectId id in modelSpace) 22 { 23 //判斷對象是否為BlockReference 24 if (!id.ObjectClass.IsDerivedFrom(RXObject.GetClass(typeof(BlockReference)))) 25 continue; 26 //獲取BlockReference對象 27 BlockReference br = id.GetObject(OpenMode.ForRead) as BlockReference; 28 //向幾何空間點集中添加點 29 cogoPts.Add(br.Position, br.Layer, true); 30 } 31 //提交事務 32 tr.Commit(); 33 } 34 }
這是一段用C#語言完成的代碼,代碼實現的功能是根據模型空間中的塊創建幾何空間點,幾何空間點的位置采用塊的插入點位置,幾何空間點的描述采用塊的圖層名稱。
這段代碼不到20行,不知道您想到了多少問題?在這里我想讓初學者了解的問題可不止20個。下面就讓我們來看一下我想到了哪些問題:
關於程序設計的基本問題:
編寫這些代碼需要什么環境?
如何編譯?
編譯后如何加載?
加載后如何運行?
什么是方法?
如何定義方法?
如何實現方法?
什么是變量?
如何聲明變量?
變量命名規則有沒有約定?
怎么為變量賦值?
數據類型都有哪些?
不同數據類型能否實現轉換?
如何實現循環操作?
AutoCAD二次開發問題:
程序、文檔、數據庫之間的關系是?
如何定義一個在AutoCAD中運行的命令?
AutoCAD數據庫結構是怎么的?
什么是塊表(BlockTable)?
什么是塊表記錄(BlockTableRecord)?
什么是塊參照(BlockReference)?
從AutoCAD數據庫中,如何獲取指定對象?
從ObjectId如何獲取相應的Object?
事務(Transaction)是什么?
如果事務未提交(Commit)會有什么后果?
Civil 3D二次開發問題:
Civil 3D數據庫結構是怎樣的?
從Civil 3D數據庫中,如何獲取指定對象?
如何創建Civil 3D對象?
如何從集合中獲取某一對象?
問題已經提出,就讓我們帶着這些問題閱讀這本書的前兩部分吧。在閱讀過程中,本書中有講解不清楚的地方,您應該學會網絡搜索或查閱其他書籍,本書中個別地方提供了關鍵字以方便您進行搜索。