學習 Civil 3D二次開發從哪兒開始?


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對象?

如何從集合中獲取某一對象?

問題已經提出,就讓我們帶着這些問題閱讀這本書的前兩部分吧。在閱讀過程中,本書中有講解不清楚的地方,您應該學會網絡搜索或查閱其他書籍,本書中個別地方提供了關鍵字以方便您進行搜索。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM