Create a Plugin for AutoCAD
19 Jun, 2013 By: Andrew G. RoeExpand your customization skills as you program a command using Visual Studio.NET.
In my previous articles about AutoCAD programming, we learned how to use the .NET programming environment to extract drawing information, create and modify AutoCAD entities, and modify entities programmatically. We primarily focused on running applications from the .NET environment, accessing AutoCAD with component object model (COM) interoperability. In a nutshell, this means we were using both .NET and COM technologies to manipulate AutoCAD in ways similar to those of the built-in VBA environment of years past.
In this article, we will create an AutoCAD plugin, a custom command that can be run directly from the AutoCAD environment. We will focus on .NET techniques, introducing a new concept called Transactions to create AutoCAD entities programmatically. Specifically, we will develop a custom command that creates a circle object and some accompanying text in one fell swoop.
As before, this example uses the Visual Basic.NET programming environment, although you can use Visual C#.NET instead. To complete this exercise, you'll need either Visual Studio.NET or the free Visual Studio Express. (If you're using AutoCAD 2013, you should also download the ObjectARX software development kit [SDK] to run this example. Even though it's not an ObjectARX example, the necessary references are located in the SDK for 2013.)
Create a Plugin
- Start Visual Studio and create a new project by clicking File > New > Project.
-
In the New Project dialog box, select Class Library, then type a name and file location at the bottom of the box, as shown here.
- Click OK to close the New Project dialog box.
- Click View > Solution Explorer to display the Solution Explorer.
- Double-click on My Project in the Solution Explorer; the Project Properties screen will appear.
- Click the References tab on the left.
- Click the Add button to display the Add Reference dialog box.
- In the Add Reference dialog box, click the Browse tab, and navigate to where your AutoCAD DLL files are located. If you downloaded the ObjectARX SDK, they are likely located in the ObjectARX 2013\inc-win32 or ObjectARX 2013\inc-win64 folder, depending on which version of AutoCAD you are using. Select the AcCoreMgd.dll, AcDbMgd.dll, and AcMgd.dll files by clicking on one and Ctrl-clicking on the others. (Note: This example is for AutoCAD 2013. If you are using another version, you can download the ObjectARX SDK for that version and reference the DLL files listed earlier.)
- Click OK to close the Add Reference dialog box.
- In the Properties window, change the Copy Local properties of the three DLL files to False.
- In Solution Explorer, rename the class from Class1 to CreateMyCircle.
-
Double-click on the CreateMyCircle.vb file, and modify the code to read as shown below. (Hint: You can copy and paste the code instead of retyping it!)
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.ApplicationServices
Public Class CreateEntities
Private Shared myroutine As Action
<CommandMethod("CreateMyCircle")>
Public Sub CreateEntities()
Dim acDoc As Document =
Application.DocumentManager.MdiActiveDocument
Dim acDb As Database = acDoc.Database
Dim acBlkTbl As BlockTable
Dim acBlkTblRec As BlockTableRecord
Dim acCirc As Circle = New Circle()
Dim acText As MText = New MText()
' Start a transaction
Using acTrans As Transaction =
acDb.TransactionManager.StartTransaction()
acBlkTbl = acTrans.GetObject(acDb.BlockTableId,
OpenMode.ForRead)
acBlkTblRec =
acTrans.GetObject
(acBlkTbl(BlockTableRecord.ModelSpace), _
OpenMode.ForWrite)
' Create a circle with a center point located at
0,2,0 and a radius of 4.0.
acCirc.SetDatabaseDefaults()
acCirc.Center = New Point3d(0, 2, 0)
acCirc.Radius = 4.0
acText.Location = acCirc.Center
acText.TextHeight = 1
acText.Contents = "Text starts at center point."
acBlkTblRec.AppendEntity(acCirc)
acTrans.AddNewlyCreatedDBObject(acCirc, True)
acBlkTblRec.AppendEntity(acText)
acTrans.AddNewlyCreatedDBObject(acText, True)
acTrans.Commit()
End Using
End Sub
End Class
- Save your work by clicking File > Save All.
-
Build the application by clicking Build > Build MyCircleCommand. If you receive any error messages, Visual Studio provides guidance in the Output window about where the errors occurred and what the fix might be. The figure below shows the results of a typographical error in the Imports statement.
1 2
For Mold Designers! Cadalyst has an area of our site focused on technologies and resources specific to the mold design professional. Sponsored by Siemens NX. Visit the Equipped Mold Designer here!
For Architects! Cadalyst has an area of our site focused on technologies and resources specific to the building design professional. Sponsored by HP. Visit the Equipped Architect here!