- Add [assembly: ExtensionApplication(C3D_Plugin.C3D_Plugin)][assembly: CommandClass(C3D_Plugin.C3D_Plugin)] for better DLL loading performance by avoiding scanning all exported types.
- Implement the IExtensionApplication interface in your main class.
- Create a public method that is the target of a CommandMethod
Civil 3D plugin sample code
using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.ApplicationServices.Core; using Autodesk.Civil.ApplicationServices; [assembly: ExtensionApplication(C3D_Plugin.C3D_Plugin)] [assembly: CommandClass(C3D_Plugin.C3D_Plugin)] namespace C3D_Plugin { public class C3D_Plugin : IExtensionApplication { public void Initialize() { } public void Terminate() { } [CommandMethod("HelloCivil3D")] public void HelloCivil3D() { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nHello Civil 3D! It's a Civil 3D plugin.\n"); CivilDocument doc = CivilApplication.ActiveDocument; ObjectIdCollection alignments = doc.GetAlignmentIds(); ObjectIdCollection sites = doc.GetSiteIds(); string docInfo = string.Format("\nThis document has {0} alignments and {1} sites.\n", alignments.Count, sites.Count); Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(docInfo); } } }
Note:
- .Initialize() is called when your assembly is first loaded by a NETLOAD command in Autodesk Civil 3D, and can be used for setting up resources, reading configuration files, and other initialization tasks.
- Terminate()i s called when Autodesk Civil 3D shuts down (there is no NETUNLOAD command to unload .NET assemblies), and can be used for cleanup to free resources.
- CommandMethodattribute defines the Autodesk Civil 3D command that invokes the method.
Now you should build the assembly