• AutoCAD: 添加鼠标快捷键/鼠标右键


    Autodesk.AutoCAD.ApplicationServices.Application 支持两种 ContextMenu 扩展:DefaultContextMenu 和 ObjectContextMenu。

    DefaultContextMenu:当前上下文环境没有选中任何 Entity 情况下的快捷菜单。

    ObjectContextMenu:当前上下文环境选中指定类型 Entity 情况下的快捷菜单。如下图:

            #region AddContextMenu
            
    /// <summary>
            
    /// 添加右键菜单
            
    /// </summary>
            private void AddContextMenu()
            {
                
    try
                {
                    
    // DefaultContextMenu
                    ContextMenuExtension defaultContextMenu = new ContextMenuExtension();
                    defaultContextMenu.Title 
    = "MyDefaultContextMenu";
                    Autodesk.AutoCAD.Windows.MenuItem defaultContextMenu_Item1 
    = new Autodesk.AutoCAD.Windows.MenuItem("MyDefaultContextMenu_Item1", ARX.UI.Resources.Resource1.taobao);
                    defaultContextMenu_Item1.Click 
    += new EventHandler(defaultContextMenu_OnClick);
                    defaultContextMenu.MenuItems.Add(defaultContextMenu_Item1);
                    ArxApp.AddDefaultContextMenuExtension(defaultContextMenu);

                    
    // ObjectContextMenu
                    ContextMenuExtension objContextMenu = new ContextMenuExtension();
                    objContextMenu.Title 
    = "MyObjectContextMenu";
                    objContextMenu.Popup 
    += new EventHandler(objContextMenu_Popup);

                    Autodesk.AutoCAD.Windows.MenuItem objContextMenu_Item1 
    = new Autodesk.AutoCAD.Windows.MenuItem("Go to Baidu", ARX.UI.Resources.Resource1.baidu);
                    objContextMenu_Item1.Click 
    += new EventHandler(objContextMenu_Item1_Click);
                    objContextMenu.MenuItems.Add(objContextMenu_Item1);

                    Autodesk.AutoCAD.Windows.MenuItem objContextMenu_Item2 
    = new Autodesk.AutoCAD.Windows.MenuItem("Go to Google", ARX.UI.Resources.Resource1.google);
                    objContextMenu_Item2.Click 
    += new EventHandler(objContextMenu_Item2_Click);
                    objContextMenu.MenuItems.Add(objContextMenu_Item2);

                    ArxApp.AddObjectContextMenuExtension(RXObject.GetClass(
    typeof(Polyline)), objContextMenu);
                }
                
    catch (System.Exception exc)
                {
                    WriteLine(
    string.Format("\n ContextMenu error: {0}", exc.Message));
                }
            }

            
    void objContextMenu_Popup(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    Document doc 
    = Application.DocumentManager.MdiActiveDocument;
                    Database db 
    = doc.Database;
                    Editor ed 
    = doc.Editor;
                    
    bool visible = true;

                    
    //If that is multiple selection, disabled the menu item.
                    PromptSelectionResult selectionRes = ed.SelectImplied();
                    
    if (selectionRes.Status == PromptStatus.OK)
                    {
                        ObjectId[] objIds 
    = selectionRes.Value.GetObjectIds();
                        
    if (objIds != null && objIds.Length > 1)
                        {
                            visible 
    = false;
                        }
                    }

                    ContextMenuExtension objContextMenu 
    = sender as ContextMenuExtension;
                    
    if (objContextMenu != null)
                    {
                        
    foreach (MenuItem item in objContextMenu.MenuItems)
                        {
                            item.Enabled 
    = visible;
                        }
                    }
                }
            }

            
    private void defaultContextMenu_OnClick(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    ArxApp.ShowAlertDialog(
    "defaultContextMenu_OnClick");
                }
            }

            
    void objContextMenu_Item1_Click(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    System.Diagnostics.Process.Start(
    "IEXPLORE.EXE""http://www.baidu.com");
                }
            }

            
    void objContextMenu_Item2_Click(object sender, EventArgs e)
            {
                
    using (DocumentLock docLock = ArxApp.DocumentManager.MdiActiveDocument.LockDocument())
                {
                    System.Diagnostics.Process.Start(
    "IEXPLORE.EXE""http://www.google.com");
                }
            }

            
    #endregion

     可以在 objContextMenu_Popup 事件中做一些逻辑处理。

    下面是用到的namespace:

    代码
    using Autodesk.AutoCAD.ApplicationServices;
    using ArxApp = Autodesk.AutoCAD.ApplicationServices.Application;
    using ArxDoc = Autodesk.AutoCAD.ApplicationServices.Document;
    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.Windows;
  • 相关阅读:
    python中type、object与class之间关系(一切皆对象)
    为什么在python中推荐使用多进程而不是多线程(转载)
    CPU密集型 VS IO密集型
    多CPU,多核,多进程,多线程
    Mac下brew安装与配置mysql
    mac安装navicat mysql破解版
    微信公众号-h5调用微信支付
    为什么js中0.1+0.2不等于0.3,怎样处理使之相等?(转载)
    gitlab安装和汉化
    PyPI使用国内源
  • 原文地址:https://www.cnblogs.com/wf225/p/1745866.html
Copyright © 2020-2023  润新知