Beispiel #1
0
        public static void AddCmdtoMenuBar(List <myAcCmd> cmds, string MenuName)
        {
            var           gcadApp = Application.AcadApplication as AcadApplication;
            AcadMenuGroup mg      = null;

            for (int i = 0; i < gcadApp.MenuGroups.Count; i++)
            {
                if (gcadApp.MenuGroups.Item(i).Name == "ACAD")
                {
                    mg = gcadApp.MenuGroups.Item(i);
                }
            }
            for (int i = 0; i < mg.Menus.Count; i++)
            {
                if (mg.Menus.Item(i).Name == MenuName)
                {
                    mg.Menus.Item(i).RemoveFromMenuBar();
                }
            }
            AcadPopupMenu popMenu = mg.Menus.Add(MenuName);

            for (int i = 0; i < cmds.Count; i++)
            {
                var dllPopMenu = popMenu.AddMenuItem(popMenu.Count + 1, cmds[i].Label, cmds[i].Macro + " ");
            }
            popMenu.InsertInMenuBar(mg.Menus.Count + 1);
        }
        public void AddToolBar()
        {
            //获取当前运行的程序集
            System.Reflection.Module myModule = System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0];
            //获取当前运行的程序集的完整路径(包含文件名)
            string modulePath = myModule.FullyQualifiedName;

            //获取去除文件名后程序集的路径,即程序集所在的文件夹
            modulePath = modulePath.Substring(0, modulePath.LastIndexOf("\\"));
            //COM方式获取AutoCAD应用程序对象
            AcadApplication acadApp = (AcadApplication)Application.AcadApplication;
            //获取当前菜单组,用于加入工具栏
            AcadMenuGroup currMenuGroup = acadApp.MenuGroups.Item(0);
            //为AutoCAD添加一个新的工具栏,并设置标题为"我的工具栏"
            AcadToolbar tbModify = currMenuGroup.Toolbars.Add("我的工具栏");
            //在新建的工具栏中添加一个"复制"按钮,以调用复制命令
            AcadToolbarItem button0 = tbModify.AddToolbarButton("", "复制", "复制对象", "_Copy ", Type.Missing);

            //设置复制按钮的图片
            button0.SetBitmaps(modulePath + "\\Resources\\Copy.bmp", modulePath + "\\Resources\\Copy.bmp");
            //'添加一个"删除"按钮,以调用删除命令
            AcadToolbarItem button1 = tbModify.AddToolbarButton("", "删除", "从图形删除对象", "_Erase ", Type.Missing);

            //设置删除按钮的图片
            button1.SetBitmaps(modulePath + "\\Resources\\Erase.bmp", modulePath + "\\Resources\\Erase.bmp");
            //添加一个"移动"按钮,以调用删除命令
            AcadToolbarItem button2 = tbModify.AddToolbarButton("", "移动", "移动对象", "_Move ", Type.Missing);

            //设置移动按钮的图片
            button2.SetBitmaps(modulePath + "\\Resources\\Move.bmp", modulePath + "\\Resources\\Move.bmp");
            //添加一个"旋转"按钮,以调用旋转命令
            AcadToolbarItem button3 = tbModify.AddToolbarButton("", "旋转", "绕基点旋转对象", "_Rotate ", Type.Missing);

            //设置旋转按钮的图片
            button3.SetBitmaps(modulePath + "\\Resources\\Rotate.bmp", modulePath + "\\Resources\\Rotate.bmp");

            //添加一个弹出按钮,该按钮只用来附着下面的画图工具栏
            AcadToolbarItem FlyoutButton = tbModify.AddToolbarButton("", "画图工具", "画图工具", " ", true);
            //创建第二个工具栏。该工具栏将通过弹出按钮附加到第一个工具栏。
            AcadToolbar tbDraw = currMenuGroup.Toolbars.Add("画图工具栏");
            //下面的语句分别在工具栏上设置绘制圆、直线、多段线、矩形的按钮
            AcadToolbarItem button4 = tbDraw.AddToolbarButton("", "圆", "用指定半径创建圆", "_Circle ", Type.Missing);

            button4.SetBitmaps(modulePath + "\\Resources\\Circle.bmp", modulePath + "\\Resources\\Circle.bmp");
            AcadToolbarItem button5 = tbDraw.AddToolbarButton("", "直线", "创建直线段", "_Line ", Type.Missing);

            button5.SetBitmaps(modulePath + "\\Resources\\Line.bmp", modulePath + "\\Resources\\Line.bmp");
            AcadToolbarItem button6 = tbDraw.AddToolbarButton("", "多段线", "创建二维多段线", "_Pline ", Type.Missing);

            button6.SetBitmaps(modulePath + "\\Resources\\Polyline.bmp", modulePath + "\\Resources\\Polyline.bmp");
            AcadToolbarItem button7 = tbDraw.AddToolbarButton("", "矩形", "创建矩形多段线", "_Rectangle ", Type.Missing);

            button7.SetBitmaps(modulePath + "\\Resources\\Rectangle.bmp", modulePath + "\\Resources\\Rectangle.bmp");
            //将第二个工具栏附着到第一个工具栏的弹出按钮上
            FlyoutButton.AttachToolbarToFlyout(currMenuGroup.Name, tbDraw.Name);
            //显示第一个工具栏
            tbModify.Visible = true;
            //隐藏第二个工具栏
            tbDraw.Visible = false;
        }
Beispiel #3
0
        /// <summary> 添加菜单的操作可以直接在AutoCAD运行过程中执行,而不用像Revit中一样必须要先关闭然后在程序启动时添加 </summary>
        public static void AddMenuItem()
        {
            // This example creates a new menu called TestMenu and inserts a menu item
            // into it. The menu is then displayed on the menu bar.
            // To remove the menu after execution of this macro, use the Customize Menu
            // option from the Tools menu.

            var app = Application.AcadApplication as AcadApplication;

            // AcadMenuGroup 表示AutoCAD中加载的一个.cuix文件中的菜单集合。
            // MenuGroups.Item(0) 与 Menubar 中的菜单集合 并不是同一个集合,它的 MenuFileName 属性对应的文件为:
            // C:\Users\zengfy\appdata\roaming\autodesk\autocad 2014\r19.1\chs\support\acad.cuix
            AcadMenuGroup currMenuGroup = app.MenuGroups.Item(0);

            //Create the new menu
            AcadPopupMenu topPpMenu = currMenuGroup.Menus.Add("MenuHandler");

            // Assign the macro string the VB equivalent of "ESC ESC _open "
            string openMacro = "ESC ESC _open "; // VBA 中的写法:openMacro = Chr(3) & Chr(3) & Chr(95) & "open" & Chr(32)

            //Add a menu item to the new menu, Macro 即对应要在命令行中输入的字符
            AcadPopupMenuItem childMenuItem = topPpMenu.AddMenuItem(Index: topPpMenu.Count + 1, Label: "Open",
                                                                    Macro: openMacro);

            // 添加可以包含子项的菜单
            AcadPopupMenu     menuItemContainer = topPpMenu.AddSubMenu(Index: topPpMenu.Count + 1, Label: "block");
            AcadPopupMenuItem childMenuItem2    = menuItemContainer.AddMenuItem(Index: menuItemContainer.Count + 1,
                                                                                Label: "画圆", Macro: "Circle ");

            // Display the menu on the menu bar

            // If index is a string, the name of the popup menu must contain any underscore that appears in the menu.
            topPpMenu.InsertInMenuBar(Index: "工具(&T)");  // Index: app.MenuBar.Count + 1
            return;

            // 以下为功能测试项 --------------------------------------------------------

            // The index must be either an integer or a string. If an integer, the index must be between 0 and N-1, where N is the number of objects in the menu bar. The new item will be added immediately before the specified index location.
            topPpMenu.InsertInMenuBar(Index: app.MenuBar.Count + 1);

            // 从 MenuBar 提取一个菜单项。
            // 注意:MenuBar 只能用来读取其中的 AcadPopupMenu 集合,而不能操纵菜单项的添加或移除。
            AcadMenuBar mb = app.MenuBar;
            // 下面这个Item(0)对应的是AutoCAD界面中菜单栏中的第一个菜单项,通常这个菜单项为“文件(F)”
            AcadPopupMenu ppm1 = mb.Item(0);

            // 将菜单项从 MenuBar 中移除
            topPpMenu.RemoveFromMenuBar();
        }
Beispiel #4
0
        public static void DeleteCmdMenu(string MenuName)
        {
            var           gcadApp = Application.AcadApplication as AcadApplication;
            AcadMenuGroup mg      = null;

            for (int i = 0; i < gcadApp.MenuGroups.Count; i++)
            {
                if (gcadApp.MenuGroups.Item(i).Name == "ACAD")
                {
                    mg = gcadApp.MenuGroups.Item(i);
                }
            }
            for (int i = 0; i < mg.Menus.Count; i++)
            {
                if (mg.Menus.Item(i).Name == MenuName)
                {
                    mg.Menus.Item(i).RemoveFromMenuBar();
                }
            }
        }
Beispiel #5
0
        public static void AddCmdtoMenuBar(List <gcadDllcmd> cmds)
        {
            var           dllName = Assembly.GetExecutingAssembly().ManifestModule.Name.Substring(0, Assembly.GetExecutingAssembly().ManifestModule.Name.Length - 4);
            var           gcadApp = Application.AcadApplication as AcadApplication;
            AcadMenuGroup mg      = null;

            for (int i = 0; i < gcadApp.MenuGroups.Count; i++)
            {
                if (gcadApp.MenuGroups.Item(i).Name == "ACAD")
                {
                    mg = gcadApp.MenuGroups.Item(i);
                }
            }

            for (int i = 0; i < mg.Menus.Count; i++)
            {
                if (mg.Menus.Item(i).Name == dllName)
                {
                    mg.Menus.Item(i).RemoveFromMenuBar();
                }
            }
            AcadPopupMenu popMenu = mg.Menus.Add(dllName);

            for (int i = 0; i < cmds.Count; i++)
            {
                var dllPopMenu = popMenu.AddSubMenu(popMenu.Count + 1, cmds[i].DllName);
                for (int j = 0; j < cmds[i].clsCmds.Count; j++)
                {
                    var clsPopMenu = dllPopMenu.AddSubMenu(dllPopMenu.Count + 1, cmds[i].clsCmds[j].clsName);
                    for (int k = 0; k < cmds[i].clsCmds[j].curClscmds.Count; k++)
                    {
                        var methodPopMenu = clsPopMenu.AddMenuItem(clsPopMenu.Count + 1, cmds[i].clsCmds[j].curClscmds[k].cmdName, cmds[i].clsCmds[j].curClscmds[k].cmdMacro + " ");
                    }
                }
            }
            popMenu.InsertInMenuBar(mg.Menus.Count + 1);
        }
Beispiel #6
0
        private void AddMenus(AcadApplication app, string menuName, List <MethodInfo> methods)
        {
            // This example creates a new menu called TestMenu and inserts a menu item
            // into it. The menu is then displayed on the menu bar.
            // To remove the menu after execution of this macro, use the Customize Menu
            // option from the Tools menu.

            // AcadMenuGroup 表示AutoCAD中加载的一个.cuix文件中的菜单集合。
            // MenuGroups.Item(0) 与 Menubar 中的菜单集合 并不是同一个集合,它的 MenuFileName 属性对应的文件为:
            // C:\Users\zengfy\appdata\roaming\autodesk\autocad 2014\r19.1\chs\support\acad.cuix
            AcadMenuGroup currMenuGroup = app.MenuGroups.Item(0);

            //Create the new menu
            foreach (AcadPopupMenu m in currMenuGroup.Menus)
            {
                if (m.Name == menuName)
                {
                    return;

                    m.RemoveFromMenuBar();
                    break;
                }
            }
            AcadPopupMenu topPpMenu = currMenuGroup.Menus.Add(menuName);

            foreach (var mtd in methods)
            {
                var att = mtd.GetCustomAttributes(typeof(CommandMethodAttribute)).First() as CommandMethodAttribute;

                // Assign the macro string the VB equivalent of "ESC ESC _open "
                //string openMacro = "ESC ESC _open "; // VBA 中的写法:openMacro = Chr(3) & Chr(3) & Chr(95) & "open" & Chr(32)

                //Add a menu item to the new menu, Macro 即对应要在命令行中输入的字符
                string label;
                // label = string.IsNullOrEmpty(att.LocalizedNameId) ? att.GlobalName : att.LocalizedNameId;
                var des =
                    mtd.GetCustomAttributes(typeof(DisplayNameAttribute)).FirstOrDefault() as DisplayNameAttribute;
                label = des != null && !string.IsNullOrEmpty(des.DisplayName) ? des.DisplayName : att.GlobalName;

                AcadPopupMenuItem childMenuItem = topPpMenu.AddMenuItem(Index: topPpMenu.Count + 1, Label: label,
                                                                        Macro: att.GlobalName + "\n");

                //// 添加可以包含子项的菜单
                //AcadPopupMenu menuItemContainer = topPpMenu.AddSubMenu(Index: topPpMenu.Count + 1, Label: "block");
                //AcadPopupMenuItem childMenuItem2 = menuItemContainer.AddMenuItem(Index: menuItemContainer.Count + 1,
                //    Label: "画圆", Macro: "Circle ");
            }

            // Display the menu on the menu bar
            // If index is a string, the name of the popup menu must contain any underscore that appears in the menu.
            topPpMenu.InsertInMenuBar(Index: app.MenuBar.Count + 1); // Index: "工具(&T)"
            return;

            // 以下为功能测试项 --------------------------------------------------------

            // The index must be either an integer or a string. If an integer, the index must be between 0 and N-1, where N is the number of objects in the menu bar. The new item will be added immediately before the specified index location.
            topPpMenu.InsertInMenuBar(Index: app.MenuBar.Count + 1);

            // 从 MenuBar 提取一个菜单项。
            // 注意:MenuBar 只能用来读取其中的 AcadPopupMenu 集合,而不能操纵菜单项的添加或移除。
            AcadMenuBar mb = app.MenuBar;
            // 下面这个Item(0)对应的是AutoCAD界面中菜单栏中的第一个菜单项,通常这个菜单项为“文件(F)”
            AcadPopupMenu ppm1 = mb.Item(0);

            // 将菜单项从 MenuBar 中移除
            topPpMenu.RemoveFromMenuBar();
        }