Difference in .NET Classic and .NET ARES
ARES Commander supports three .NET API sets that you can use independently.
This document describes CFx. NET(.NET ARES) and lists the differences with .NET Classic API's coding.
.NET Classic API
ARES COM API
CFx .NET (SWIG generated .NET API version of ARES C++ SDK)
Differences between .NET Classic and .NET ARES.
API | .NET Classic API | CFx .NET (.NET ARES) |
---|---|---|
Assembly Names | TD_Mgd_x.xx_xx.dll FxCoreMgd_x.xx_xx.dll | ArgonMGD.dll TD_SwigCoreMgd.dll TD_SwigDbMgd.dll TG_SwigDbMgd.dll TD_Mgd_x.xx_xx.dll |
Nature of Plugin | In-process | In-process |
Loading Mechanism | Use the NETLOAD command | Use the NETLOAD command |
Compatibility | AutoCAD compatible | ARES specific, not available in other CADs |
Access Document | Document document = Teigha.ApplicationServices.Application.DocumentManager.MdiActiveDocument; | CFxDocument pFxDocument = PCADGlobals.FXAPI().GetFxDocument(); |
Access Database | Database db = document.Database; | CFxDatabase pFxDatabase = pFxDocument.GetFxDatabase(); |
Prompting For User Input | PromptIntegerOptions op = new PromptIntegerOptions("Input a positive integer"); | CFxUserIO pFxUserIO = pFxDocument.GetFxUserIO(); pFxUserIO.GetInt |
Lisp Function Creation | Possible to create Lisp Functions. Using | Cannot create Lisp Functions. |
.NET Project Type | .NET Class Library | .NET Class Library |
Notifications | via Events | via Reactor classes |
Commands | Using command method Attribute | Directly inherit from CFxCommand and add instance of this class to command stack or Using command method Attribute OR Using command method Attribute |
UI Controls | Ribbon and Palettes API available | Not available |
Creating a CFx .NET or .NET ARES Plugin:
Create a new .NET ARES project using the Visual Studio project creation Wizard(Ā **minimum requirement .NET Framework v4.5)
Ā
FromĀ Solution Explore, add references ofĀ the following .dll:
ArgonMGD.dll
TD_SwigCoreMgd.dllTD_SwigDbMgd.dll
TG_SwigDbMgd.dll
TD_Mgd_x.xx_xx.dllĀ from the ARES Commander installation folder.
Ā
You can seeĀ all available NameSpaces, Classes, Methods, and Properties in each assembly in the Object Browser.
Ā Ā Ā Ā Ā Ā
Rename Class1.cs to PluginCommands.cs. This changes the class Class1 to class PluginCommands, as in the following example.
Ā
Defining a command uses Teigha.Runtime namespace to accessĀ CommandMethodĀ method attribute and adds an AnyFunctionName method that has this attribute. The following example defines theĀ MySampleCommandĀ command which you can run later in ARES Commander, from the command prompt.
You can define all types of in-process plugin using a similar procedure.Ā
You can also define a command directly inheriting from CFxCommand. Use the Setup method to add an instance of this class to the command stack.
namespace SamplePlugin { public class PluginCommands : CFxCommand { public bool m_bExecuted; public PluginCommands() { m_bExecuted = false; } public override string globalName() { return "SampleCMD"; } public override int Execute(CFxCommandContext pFxCmdCtx) { m_bExecuted = true; CFxDocument pFxDoc = PCADGlobals.FXAPI().GetFxDocument(); if (pFxDoc == null) return PCADGlobals.RTCAN; CFxCommandContext ctx = pFxDoc.GetFxCommandContext(); if (ctx == null) return PCADGlobals.RTCAN; PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n SampleCMD Command Executed")); return PCADGlobals.RTNORM; } class CFxCommandTest : IExtensionApplication { DocumentReactor docReactor; PluginCommands m_test; public CFxCommandTest() { docReactor = new DocumentReactor(); } public void Initialize() { m_test = new PluginCommands(); Globals.odedRegCmds().addCommand(m_test); PCADGlobals.GetFxSystemServices().GetFxDocumentManager().AddReactor(docReactor); } public void Terminate() { Globals.odedRegCmds().removeCmd(m_test.groupName(), m_test.globalName()); PCADGlobals.GetFxSystemServices().GetFxDocumentManager().RemoveReactor(docReactor); } } } }
Build the sample project to generate PluginCommands.dll or <YourProjectName.dll>.
Start ARES Commander and type NETLOAD at the command prompt. Next, browse and load the plugin dll (PluginCommands.dll).
The command window displays a confirmation message.
8. RunĀ MySampleCommand, which executes the AnyFunctionName method.Ā
Accessing Documents
You can access the Document Manager from the application object.
The Document Manager provides properties and methods that let you perform the following:
Access the active document
CFxDocument doc = PCADGlobals.GetFxSystemServices().GetFxDocumentManager().GetActiveDocument();
Add a new document
CFxString templateStr = new CFxString("newTemplate"); CFxDocument doc = PCADGlobals.GetFxSystemServices().GetFxDocumentManager().NewDocument(templateStr);
Open existing drawings.
Prompting for User InputĀ
The CFxUserIO class controls the user input. All related classes for prompting on the command window are availableĀ in PCAD_DOT_NET.CFxUserIO namespace.
Notifications(via Reactor Classes)
In .NET ARES there are Reactors
CFxDocumentManagerReactor
CFxDatabaseReactor
CFxEditorReactor
OdEdCommandStackReactor
you can use Reactors like this:
Ā