swing menubar点击菜单跳转页面_AutoCAD .NET 二次开发实例(12) 个人菜单栏实现

5c0a7b1fada908ab32a21698904d8a60.png

点击蓝字关注我

5c0a7b1fada908ab32a21698904d8a60.png

15f6996782418f8f0c36c9821f3a2636.png

0 引言

eeca7757b0b0394355c0078810bcc72c.gif

当你做了一些属于自己的小功能插件以后,你就可以把它们整合到菜单工具栏,然后直接调用就行了。就比如下面这样:

6c51f6d304b3b97eb07387b89cd17f6e.png

不用每次都netload单独加载那个dll,然后才是输入命令调用它。

我们直接把所有的插件功能都整合到一个工程里面,编译生成一个属于菜单栏工具dll文件,用的时候加载这一个dll,直接把菜单栏加载进来,想用哪个用哪个。

1. 菜单栏实现

eeca7757b0b0394355c0078810bcc72c.gif

菜单栏实现可以采用COM方式和CUI方式进行,COM有一点不好是要求运行CAD版本必须和编译的完全一致,也就是你每一个版本CAD都要编译一个对应的程序。

CUI原理:其实点击菜单栏按钮时,只是调用了该菜单按钮对应的CAD命令,也就是你需要把菜单栏按钮和你自己自定义的命令链接起来。

注意:要求CAD版本在2007及以上

首先

创建一个菜单栏对象

e116e811453319157d23361df4e81a81.png

其中类 AcadApplication,需要添加引用 Autodesk.AutoCAD.Interop.dll

该 dll 在对应版本的 ObjectARX 包中,需要下载 ObjectARX 安装。

a193dde26c15d966926db180e33c1c9f.png 97a7444ca09e6654f8d3565790db744c.png

设置菜单工具名称

8871cd2f5fb5640538ec3034f7fc4fac.png

然后把菜单子项加进来,用到AddMenuItem方法

2fa372df5d94feaa89f80e8a0ef8dbb5.png bfca5e721a23a56cb982b03395cd111d.png


这样就添加结束了,所对应的命令都是之前的一些例子,你可以把自己的加进去

就行了。

之后把菜单栏自动加载就行

2 完整代码

eeca7757b0b0394355c0078810bcc72c.gif

这里把菜单栏和菜单栏加载都放在了一个MainClass.cs文件中

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Collections.Specialized;using Autodesk.AutoCAD.DatabaseServices;using Autodesk.AutoCAD.Geometry;using Autodesk.AutoCAD.ApplicationServices;using Autodesk.AutoCAD.Runtime;using Autodesk.AutoCAD.EditorInput;using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;using Autodesk.AutoCAD.Interop;  //引用需要添加 Autodesk.AutoCAD.Interop.dll  CAD安装目录内using System.IO;[assembly: ExtensionApplication(typeof(MyMenuTools.AcadNetApp))] //启动时加载工具栏,注意typeof括号里的类库名namespace MyMenuTools{    //添加项目类引用    public class AcadNetApp : Autodesk.AutoCAD.Runtime.IExtensionApplication    {        //重写初始化        public void Initialize(){            //加载后初始化的程序放在这里 这样程序一加载DLL文件就会执行            Document doc = Application.DocumentManager.MdiActiveDocument;            doc.Editor.WriteMessage("\n加载程序中...........\n");            //加载菜单栏需            AddMenu();        }        //重写结束        public void Terminate(){            // do somehing to cleanup resource        }        //加载菜单栏        public void AddMenu(){            Document doc = Application.DocumentManager.MdiActiveDocument;            doc.Editor.WriteMessage("添加菜单栏成功!>>>>>>>>>>>>>>");            AcadApplication acadApp = Application.AcadApplication as AcadApplication;            //创建建菜单栏的对象            AcadPopupMenu myMenu = null;            // 创建菜单            if (myMenu == null)            {                // 菜单名称                myMenu = acadApp.MenuGroups.Item(0).Menus.Add("个人专用菜单工具(2020.07)");                myMenu.AddMenuItem(myMenu.Count, "文字批量替换", "TBR "); //每个命令后面有一个空格,相当于咱们输入命令按空格                myMenu.AddMenuItem(myMenu.Count, "文字批量对齐", "TBA ");                myMenu.AddMenuItem(myMenu.Count, "输出文本", "CTE ");                //开始加子菜单栏                AcadPopupMenu subMenu = myMenu.AddSubMenu(myMenu.Count, "CADLinkToEXcel");  //子菜单对象                subMenu.AddMenuItem(myMenu.Count, "Excel表格导入", "CTES ");                subMenu.AddMenuItem(myMenu.Count, "由Excel数据更新CAD表格数据", "UCTFE ");                subMenu.AddMenuItem(myMenu.Count, "由CAD表格数据更新Excel表格数据", "UEFCT ");                myMenu.AddSeparator(myMenu.Count); //加入分割符号                //结束加子菜单栏            }            // 菜单是否显示  看看已经显示的菜单栏里面有没有这一栏            bool isShowed = false;  //初始化没有显示            foreach (AcadPopupMenu menu in acadApp.MenuBar)  //遍历现有所有菜单栏            {                if (menu == myMenu)                {                    isShowed = true;                    break;                }            }            // 显示菜单 加载自定义的菜单栏            if (!isShowed)            {                myMenu.InsertInMenuBar(acadApp.MenuBar.Count);            }        }            }    }

将命令程序单独放置在myCommands.cs中

代码多,就不贴了,自己下载

程序代码自助:

https://gitee.com/yuzhaokai/CADExampleDemo.git

(文件夹:myMenuTools)

ba8879ec6981d83c5397ac6e0ddd72ab.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值