Hi,
If you want to do it programmatically (this can be done without programmation through the CUI), you can use:
Application.AddObjectContextMenuExtensions() method.
Here's a little example:
using System;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;
using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;
namespace ContextMenuSample
{
public class Commands : IExtensionApplication
{
// a command called from the click event handler of the context menu item
// the command needs the UsePickSet command flag
[CommandMethod("ToRed", CommandFlags.Modal | CommandFlags.UsePickSet)]
public static void ToRed()
{
Document doc = AcAp.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
PromptSelectionResult psr = ed.GetSelection();
if (psr.Status != PromptStatus.OK)
return;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
foreach (ObjectId id in psr.Value.GetObjectIds())
{
Entity line = (Entity)tr.GetObject(id, OpenMode.ForWrite);
line.Color = Color.FromColorIndex(ColorMethod.ByAci, 1);
}
tr.Commit();
}
}
// adds the context menu item
[CommandMethod("AddContextMenu")]
public void AddContextMenu()
{
LineContextMenu.Attach();
}
// removes the context menu item
[CommandMethod("RemoveContextMenu")]
public void RemoveContextMenu()
{
LineContextMenu.Detach();
}
// adds the context menu item on loading
public void Initialize()
{
LineContextMenu.Attach();
}
public void Terminate()
{
LineContextMenu.Detach();
}
}
// defines a context menu item
class LineContextMenu
{
private static ContextMenuExtension menuExtension;
// adds the item to the Line context menu
internal static void Attach()
{
menuExtension = new ContextMenuExtension();
MenuItem item = new MenuItem("To Red");
item.Click += new EventHandler(item_Click);
menuExtension.MenuItems.Add(item);
RXClass rxClass = Entity.GetClass(typeof(Line));
Application.AddObjectContextMenuExtension(rxClass, menuExtension);
}
// removes the item from the Line context menu
internal static void Detach()
{
RXClass rxClass = Entity.GetClass(typeof(Line));
Application.RemoveObjectContextMenuExtension(rxClass, menuExtension);
}
// item clicked event handler (calls "ToRed" command)
static void item_Click(object sender, EventArgs e)
{
Document doc = Application.DocumentManager.MdiActiveDocument;
doc.SendStringToExecute("ToRed ", false, false, true);
}
}
}