Zip is attached for AutoCAD2017 with VS2017
... Change to suit
References C:\ObjectARX 2017\inc\...
... Change to suit
Included Startup script to Auto-netload the Assembly (
https://www.theswamp.org/index.php?topic=14492.0 )
[ just realised that link is 10 years old .... time sure flies when we're having fun. ]
The menu is adapted from work by Jim Awe to the MgdDbg Assembly.
The main benefit from using this system is that the assembly under test will autoload and we don't need to remember the exact command to type in ... it will be in the menu.
I'll add the Project Template to suit VisualStudio startup when I'm happy with it.
If you have difficulty adapting this just yell ....
All care, no responsibility
Commands.cs
using System;
using Autodesk.AutoCAD.Runtime;
using CadApp = Autodesk.AutoCAD.ApplicationServices.Application;
[assembly
: CommandClass
(typeof(ACAD2017_TestAppMenu
.Commands))]
namespace ACAD2017_TestAppMenu
{
public class Commands
{
[CommandMethod("kb_TEST")]
public void Test01()
{
var doc = CadApp.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
using (var tr = db.TransactionManager.StartTransaction()) {
// TODO Do stuff here
tr.Commit();
}
CadApp.ShowAlertDialog("Wheeeeeee ....");
}
[CommandMethod("kb_TEST02")]
public void Test02()
{
var doc = CadApp.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
ed.WriteMessage($"Document.name => {doc.Name}\n");
}
}
}
Initialization.cs
using System;
using Autodesk.AutoCAD.Runtime;
using CadApp = Autodesk.AutoCAD.ApplicationServices.Application;
namespace ACAD2017_TestAppMenu
{
public class Initialization : IExtensionApplication
{
public void Initialize()
{
CadApp.Idle += OnIdle;
}
private void OnIdle(object sender, EventArgs e)
{
var doc = CadApp.DocumentManager.MdiActiveDocument;
if (doc != null){
CadApp.Idle -= OnIdle;
doc.Editor.WriteMessage("\nACAD2017 TestAppMenu loaded.");
AppContextMenu.AddContextMenu(); // add User commands to the right-click menu
doc.Editor.WriteMessage("\nRight-Click in drawing for UserMenu.\n");
}
}
public void Terminate()
{
}
}
}
TemplateContextMenu.cs
using System;
using Autodesk.AutoCAD.Windows;
using CadApp = Autodesk.AutoCAD.ApplicationServices.Application;
namespace ACAD2017_TestAppMenu
{
public class AppContextMenuItem : Autodesk.AutoCAD.Windows.MenuItem
{
public AppContextMenuItem(string title, string cmdName) : base(title)
{
CommandName = cmdName;
}
public string CommandName{ get; private set; }
}
public class AppContextMenu
{
static ContextMenuExtension _appMenu = null;
public static void AddContextMenu()
{
_appMenu
= new ContextMenuExtension
(); _appMenu.Title = "TEST AppContextMenu";
_appMenu
.MenuItems.Add(new AppContextMenuItem
("First Test...",
"kb_TEST")); _appMenu
.MenuItems.Add(new MenuItem
("")); // separator _appMenu
.MenuItems.Add(new AppContextMenuItem
("Second Test...",
"kb_TEST02"));
_appMenu
.MenuItems.Add(new MenuItem
("")); // separator foreach (MenuItem mnuItem in _appMenu.MenuItems) {
var appContextMnuItem = mnuItem as AppContextMenuItem;
if (appContextMnuItem != null)
appContextMnuItem
.Click += new EventHandler
(ExecuteCommand
); }
CadApp.AddDefaultContextMenuExtension(_appMenu);
}
private static void ExecuteCommand(Object o, EventArgs e)
{
var mnuItem = (AppContextMenuItem)o;
string fullCmdLine = string.Format($"_{mnuItem.CommandName}\n");
CadApp.DocumentManager.MdiActiveDocument.SendStringToExecute(fullCmdLine, false, false, true);
}
public static void RemoveContextMenu()
{
CadApp.RemoveDefaultContextMenuExtension(_appMenu);
}
}
}