ARES Commander supports three .NET API sets that you can use independently. Now here we’ll going to discuss about
This document describes CFx. NET(.NET ARES) and listed it’s 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)
Here We differentiate 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 vailable 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 |
...
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 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 a method, such as AnyFunctionName 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.There is another way to You can also define a command , Directly inherit directly inheriting from CFxCommand and add . Use the Setup method to add an instance of this class to command stack by using Setup method it adds the command into the stack.
Code Block 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 return= PCADGlobals.RTNORM.FXAPI().GetFxDocument(); } if (pFxDoc == null) class CFxCommandTest : TestCase { return PCADGlobals.RTCAN; PluginCommands m_test; CFxCommandContext ctx = pFxDoc.GetFxCommandContext(); public CFxCommandTest() if (ctx == null) { return PCADGlobals.RTCAN; } public override string Name() PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n SampleCMD Command Executed")); { return "CFxCommand"PCADGlobals.RTNORM; } } class CFxCommandTest : IExtensionApplication { public override bool SetupTest() DocumentReactor docReactor; { PluginCommands m_test; m_test = newpublic PluginCommandsCFxCommandTest(); { Teigha.Core.Globals.odedRegCmds().addCommand(m_test); docReactor = return truenew DocumentReactor(); } public overridevoid bool ExecuteInitialize() { CFxDocumentm_test pFxDoc= = PCADGlobals.FXAPI().GetFxDocumentnew PluginCommands(); if (pFxDoc == null) return falseGlobals.odedRegCmds().addCommand(m_test); CFxCommandContext ctx = pFxDoc.GetFxCommandContext(PCADGlobals.GetFxSystemServices().GetFxDocumentManager().AddReactor(docReactor); } if (ctx == null) public void Terminate() return{ false; Teigha.Core.Globals.odedRegCmds().executeCommandremoveCmd(m_test.globalNamegroupName(), ctxm_test.globalName()); return truePCADGlobals.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.
...
Notifications(via Reactor Classes)
In .NET ARES there are Reactors
CFxDocumentManagerReactor
CFxDatabaseReactor
CFxEditorReactor
OdEdCommandStackReactor
you can use Reactors like this:
Code Block |
---|
class ReactorTest DocumentReactor : CFxDocumentManagerReactor { public override void DocumentActivated(CFxDocument pActivatedDoc) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentActivated Fired")); } public override void DocumentActivationModified(bool bActivation) { static DatabaseReactor _dbReactor; PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentActivationModified Fired")); } public staticoverride void OnDatabaseAttachedDocumentBecameCurrent(CFxDatabaseCFxDocument dbpDoc) { db.addReactor(_dbReactorPCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentBecameCurrent Fired")); } public staticoverride void OnDatabaseDetachedDocumentCreateCanceled(CFxDatabaseCFxDocument dbpDocCreateCancelled) { db.removeReactor(_dbReactorPCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentCreateCanceled Fired")); } public override void DocumentCreated(CFxDocument pDocCreating) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentCreated Fired")); } public override void class DatabaseReactor : CFxDatabaseReactorDocumentCreateStarted(CFxDocument pDocCreating) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentCreateStarted Fired")); } public override void objectAppendedDocumentDestroyed(OdDbDatabaseCFxDocument pDbpDocToDestroyed, OdDbObjectCFxString pObjectstrFileName) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentDestroyed Fired")); } public override void objectModified(OdDbDatabase pDb, OdDbObject pObjectDocumentPreOpen(CFxDocument pDoc, CFxString strFileName, int codePage, int openFlags) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentPreOpen Fired")); } public override void objectErased(OdDbDatabase pDb, OdDbObject pObject DocumentToBeActivated(CFxDocument pActivatingDoc) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentToBeActivated Fired")); } public override void DocumentToBeDeactivated(CFxDocument pDeActivatedDoc) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentToBeDeactivated Fired")); } public override void goodbyeDocumentToBeDestroyed(OdDbDatabaseCFxDocument pDbpDocToDestroy) { PCADGlobals.GetFxSystemServices().WriteLine(new CFxString("\n Event DocumentToBeDestroyed Fired")); } } |