Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

ARES commander provide Commander provides .NET API to which lets you author third party Plugin Software for ARES Commander.

Supported API Sets 

ARES Supports Commander supports 3 API sets which can be used independently.

  1. .NET Classic API
  2. ARES COM API
  3. CFx .NET (SWIG generated .NET API version of ARES C++ SDK)

...

Code Block
languagec#
themeFadeToGrey
linenumberstrue
        //Method attribute to define lisp callable function 'LispTest' 
        //i.e (setq x (lisptest "Text created by .NET lisp function" 1.0 '(10 10 0)))
        [LispFunction("lisptest")]
        public ResultBuffer DoIt(ResultBuffer args)
        {
            // Get the database of the active document.
            Database db = HostApplicationServices.WorkingDatabase;
            TypedValue[] argsVal = new TypedValue[3];
            if (args != null)
            {
                argsVal = args.AsArray();
            }
            else
            {
                argsVal[0] = new TypedValue((int)LispDataType.Text, "Default Text");
                argsVal[1] = new TypedValue((int)LispDataType.Double, .2);
                argsVal[1] = new TypedValue((int)LispDataType.Point3d, new Point3d(0, 0, 0));
            }
            // Set up transaction manager.
            Teigha.DatabaseServices.TransactionManager tm = db.TransactionManager;
            using (Transaction tr = tm.StartTransaction())
            {
                try
                {
                    Point3d pPosition = new Point3d(0, 0, 0);

                    // Create a new MText object and set properties.
                    DBText pText = new DBText();
                    pText.TextString = (String)argsVal[0].Value;
                    pText.Height = Convert.ToDouble(argsVal[1].Value);
                    pText.Position = (Point3d)argsVal[2].Value;

                    // Get model space to add the MText object.
                    BlockTable pBlockTable = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
                    BlockTableRecord pModelSpace = (BlockTableRecord)tr.GetObject(pBlockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                    // Add the object to the model space.
                    ObjectId id = pModelSpace.AppendEntity(pText);
                    tr.AddNewlyCreatedDBObject(pText, true);

                    // Commit changes to database.
                    tr.Commit();
                    //return created text entity to lisp
                    return new ResultBuffer(new TypedValue((int)LispDataType.ObjectId, id));
                }
                finally
                {
                    // delete tr , managed by c# with garbage collection
                }

            }
        }



Migration of AutoCAD .NET Application to ARES Commander

The .NET applications running on AutoCAD platform can be easily migrated to ARES Commander by making minimal changes.

  • Replace AutoCAD .NET assemblies by ARES .NET assemblies.
  • Replace Autodesk.AutoCAD by Teigha in source code.

That's all. Build project and your plugin is porting done.


Advance Migration

If you don't want to maintain separate source code for AutoCAD and ARES then some extra steps are required, single project with 2 build configuration will solve the issue.

Step 1: Create new build configuration for both AutoCAD and ARES

 Image Added

Step 2: Using project Properties select all configurations one by one and define Symbol “AutoCAD” or “ARES” for corresponding configurations.

 

i.e For AutoCAD_Release configuration

 Image Added

and For ARES_Release

 Image Added

 Step 3: Add Conditional reference assemblies to the project using Symbols, Modify csproj file manually in text editor to add condition as below for all references.


Code Block
languagexml
themeFadeToGrey
linenumberstrue
<ItemGroup>

    <Reference Include="accoremgd" Condition="$(DefineConstants.Contains('AutoCAD'))">

      <HintPath>C:\Program Files\Autodesk\AutoCAD 2018\accoremgd.dll</HintPath>

    </Reference>

    <Reference Include="acdbmgd" Condition="$(DefineConstants.Contains('AutoCAD'))">

      <HintPath>C:\Program Files\Autodesk\AutoCAD 2018\acdbmgd.dll</HintPath>

    </Reference>

    <Reference Include="acmgd" Condition="$(DefineConstants.Contains('AutoCAD'))">

      <HintPath>C:\Program Files\Autodesk\AutoCAD 2018\acmgd.dll</HintPath>

    </Reference>

    <Reference Include="FxCoreMgd_4.03_14" Condition="$(DefineConstants.Contains('ARES'))">

      <HintPath>C:\Program Files\Graebert GmbH\ARES Commander 2018\BIN\FxCoreMgd_4.03_14.dll</HintPath>

    </Reference>

    <Reference Include="TD_Mgd_4.03_14" Condition="$(DefineConstants.Contains('ARES'))">

      <HintPath>C:\Program Files\Graebert GmbH\ARES Commander 2018\BIN\TD_Mgd_4.03_14.dll</HintPath>

    </Reference>

  </ItemGroup>

Step 4: Changes in source code add using directives for both the application conditionally

 

Code Block
languagec#
themeFadeToGrey
linenumberstrue
#if  AutoCAD

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.EditorInput;

using CADApp = Autodesk.AutoCAD;

#endif



#if  ARES

using Teigha.DatabaseServices;

using Teigha.Runtime;

using Teigha.Geometry;

using Teigha.ApplicationServices;

using Teigha.EditorInput;

using CADApp = Teigha;

#endif

and Replace Autodesk.AutoCAD to CADApp in *.cs source files which is defined conditional declaration above.

Step 5:

Specify separate Output directories for both the configurations.


Build both configurations one by one these builds will work with their respective applications.