VB.NET CAD二次開發環境搭建及簡單示例

  • 2019 年 10 月 6 日
  • 筆記

今天我們來了解一下怎麼用VB.NET來對CAD進行開發!

環境搭建

版本兼容性:

首先,先來了解一下objectarx或者.net DLL 與AutoCAD版本兼容問題!

AutoCAD 版本

受支援的.NET 和 ObjectARX SDK

.NET Framework

AutoCAD 2020

AutoCAD 2020、AutoCAD 2019

4.7

AutoCAD 2019

AutoCAD 2019

4.7

AutoCAD 2018

AutoCAD 2018

4.6

AutoCAD 2017

AutoCAD 2017

4.6

AutoCAD 2016

AutoCAD 2015, AutoCAD 2016

4.5

AutoCAD 2015

AutoCAD 2015

4.5

AutoCAD 2014

AutoCAD 2013, AutoCAD 2014

4.0

AutoCAD 2013

AutoCAD 2013

4.0

AutoCAD 2012

AutoCAD2010,AutoCAD2011,AutoCAD 2012

3.51 SP1

AutoCAD 2011

AutoCAD 2010, 2011

3.51 SP1

AutoCAD 2010

AutoCAD 2010

3.51 SP1

AutoCAD 2009

AutoCAD2007,AutoCAD2008,AutoCAD 2009

3.0

AutoCAD 2008

AutoCAD 2007, AutoCAD 2008

2.0

AutoCAD 2007

AutoCAD 2007

2.0

AutoCAD 2006

AutoCAD2004,AutoCAD2005,AutoCAD 2006

1.1 SP1

AutoCAD 2005

AutoCAD 2004, AutoCAD 2005

1.1

AutoCAD 2004

AutoCAD 2004

1.同一個.net Framework框架版本autoCAD高版本兼容低版本。不同的.Net框架往往涉及到函數或者參數的改變,一般不兼容。

2.版本兼容和系統(32位和64位)有關,如用了com的兩個DLL引用, Autodesk.AutoCAD.Interop和 Autodesk.AutoCAD.Interop.Common。或者用了相交函數 IntersectWith()等情況

3.從基於 AutoCAD 2014的產品開始,當SECURELOAD系統變數設置為1或2時,自定義應用程式必須在安全模式下工作。當在安全模式下進行操作時,基於AutoCAD的產品限制為從受信任的位置載入和執行包含程式碼的文件;受信任的位置由TRUSTEDPATHS系統變數指定。

環境及dll引用:

1.創建一個類庫項目(VS版本:VS2019,CAD版本:CAD2019),選擇"類庫(.NET Framework)"做開發項目!

2.引用CAD .NET 開發DLL;引用–>添加引用–>瀏覽–>打開CAD安裝目錄–>找到"acmgd.dll" "accoremgd.dll" "acdbmgd.dll" 這三個文件–>添加到引用–>一定要把三個dll文件"複製到本地"屬性改為false

3.調試環境配置

3.1.打開項目屬性

3.2.打開項目屬性–>應用程式設置–>把.net框架調為4.7(根據上表選擇對應框架,這裡用的是CAD2019,所以選擇.net4.7)

3.3.打開項目屬性–>編譯設置–>目標CPU調為X64

3.4.打開項目屬性–>調試設置–>啟動操作–>選擇啟動外部程式–>瀏覽–>打開CAD安裝目錄–>選擇acad.exe文件

3.5.OK到目前為止,環境已經搭建完畢!

4.下面展示一下小項目程式碼及運行調試

4.1運行

4.2.載入開發項目CAD命令:netload–>選擇開發生成的DLL文件–>輸入我們設定的CAD命令:VBXYM–>生成圖形VB

4.3.示例程式碼

Imports Autodesk.AutoCAD.ApplicationServices  Imports Autodesk.AutoCAD.DatabaseServices  Imports Autodesk.AutoCAD.Geometry  Imports Autodesk.AutoCAD.Runtime    Public Class Class1      <CommandMethod("VBXYM")> Public Sub Test()          Dim V As New Polyline, B As New Polyline '』畫多段線          V.AddVertexAt(0, New Point2d(0, 2), 0, 0, 0)          V.AddVertexAt(1, New Point2d(0.42, 0), 0, 0, 0)          V.AddVertexAt(2, New Point2d(0.84, 2), 0, 0, 0)          ''------------------------------------------------          B.AddVertexAt(0, New Point2d(1.51, 2), 0, 0, 0)          B.AddVertexAt(1, New Point2d(1.51, 0), 0, 0, 0)          B.AddVertexAt(2, New Point2d(2.08, 0), 0, 0, 0)          B.AddVertexAt(3, New Point2d(2.25, 0.17), 0, 0, 0)          B.AddVertexAt(4, New Point2d(2.34, 0.35), 0, 0, 0)          B.AddVertexAt(5, New Point2d(2.34, 0.68), 0, 0, 0)          B.AddVertexAt(6, New Point2d(2.09, 1), 0, 0, 0)          B.AddVertexAt(7, New Point2d(1.51, 1), 0, 0, 0)          B.AddVertexAt(8, New Point2d(2.09, 1), 0, 0, 0)          B.AddVertexAt(9, New Point2d(2.25, 1.17), 0, 0, 0)          B.AddVertexAt(10, New Point2d(2.34, 1.35), 0, 0, 0)          B.AddVertexAt(11, New Point2d(2.34, 1.68), 0, 0, 0)          B.AddVertexAt(12, New Point2d(2.25, 1.84), 0, 0, 0)          B.AddVertexAt(13, New Point2d(2.09, 2), 0, 0, 0)          B.AddVertexAt(14, New Point2d(1.51, 2), 0, 0, 0)          ''-----------------------------------------------          Dim entIdV As ObjectId = AppendEntity(V)          Dim entIdB As ObjectId = AppendEntity(B)          Dim Doc As Document = Core.Application.DocumentManager.MdiActiveDocument          Doc.SendStringToExecute("_.ZOOM _E ", True, False, False)      End Sub        ''' <summary>      ''' 把圖行形添加到CAD空間      ''' </summary>      ''' <param name="ent"></param>      ''' <returns></returns>      Public Function AppendEntity(ByVal ent As Entity) As ObjectId          Dim db As Database = HostApplicationServices.WorkingDatabase          Dim entId As ObjectId          Using trans As Transaction = db.TransactionManager.StartTransaction              Dim bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead)              Dim btr As BlockTableRecord = trans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite)              entId = btr.AppendEntity(ent)              trans.AddNewlyCreatedDBObject(ent, True)              trans.Commit()          End Using          Return entId      End Function  End Class  

今天教程到此結束啦!謝謝閱讀!