分享

AutoCAD自定义菜单和工具栏

 昵称10804835 2012-12-22


一、很多用户在使用自己编写的lisp命令时,每次启动CAD都进行加载,影响了效率,下面介绍的方法可以解决这一问

题。
1:首先找到acad.mnl文件,系统默认安装在Application Data\Autodesk\AutoCAD 200i\Support,当然你可将此文件

移到你的CAD目录下
2:请将你自己编写的AAA.lsp文件拷入ACAD的Support目录下,如果路径有指到你的目录也可以不用拷入。添加以下文

本到acad.mnl。
   (if(null C:XXX)(load"AAA")(princ));加载并执行你自己编写的AAA.lsp之XXX命令。

二、自动加载自己编写的菜单:添加以下文镜絘cad.mnl
   (if(null (menugroup "你的工具條"))(command "menuload" "BBB")(princ));加载你的工具条菜单BBB.mnu之"你

的工具條"

 


对于菜单我当时就晓得修改ACAD.MNU,先分析一下ACAD.MNU(它在哪里?汗,你在CAD安装路径搜索一下试试,对于二

次开发的软件如南方CASS,那就要在CASS安装目录搜索了),除了注释,我们看到的第一句有用的话就

是“***MENUGROUP=ACAD”,这句话什么意思呢?顾名思义并结合注释我们晓得,这里是讲这是一个菜单

组“MENUGROUP”,菜单组的名字叫“ACAD”。其实,在AutoCAD这个环境里,可以加载多个菜单组,但是只能有一个

主体菜单,其他的叫局部菜单。主体菜单的加载命令是“MENU”,局部菜单的加载命令是“MENULOAD”。我们继续分

析ACAD.MNU文件,向下仔细看不难发现,此文件组织是按段组织的,每一段的开始都是以“***”开始后面注以段的关

键字标识。总体看来一般有这样几个段“***BUTTONS”、 “***AUX”、 “***POP”、 “***TOOLBARS”、 “***

IMAGE”、 “***SCREEN”、 “***TABLE”、“***HELPSTRINGS”、“***ACCELERATORS”等,它们分别代表定点设备

按钮菜单区域、系统定点设备菜单区域、菜单区域、工具栏定义区域、图像控件菜单区域、屏幕菜单区域、数字化仪

菜单区域、帮助文本区域、快捷键定义区域等。由于这里讲菜单和工具栏,则主角“***POP”、“***TOOLBARS”在此

潇洒登场。

我们来看“***POP”不难发现,除了“***POP0”之外,其余即是菜单栏里面的“文件”、“编辑”、“显示”菜单项

,选取一段来做分析——
***POP1
**FILE
ID_MnFile    [文件(&F)]
ID_New       [新建(&N)...\tCtrl+N]^C^C_new
ID_Open      [打开(&O)...\tCtrl+O]^C^C_open
ID_DWG_CLOSE [关闭(&C)]^C^C_close
其中第一项是菜单的ID,第二项即中括号里面的是文字显示和快捷键,在后面就是它执行的命令了,如“打开”的命

令就是“_open”,其余的类似。ID项可以随便写,只要不与现有的重复,文显更是可以自由发挥,但是最好易记,后

面的命令就是你写的插件的命令了——这不,终于把执行命令和菜单项对应上了,下面我们来做一个测试,在

ACAD.MNU里面加上这样一段:
***POP15
**MYMENU
ID_MnMyMenu    [我的菜单(&F)]
ID_CXKZ       [查询扩展]^C^C_CXKZ
ID_ DDJC      [打点检查]^C^C_DDJC
然后输入“MENU”调出加载菜单对话框,选择“ACAD.MNU”,问是否加载,选择“是”,则CAD重新加载菜单项,即出

现我们自定义的菜单如图:
 

在命令栏输入命令“CXKZ”,则提示栏信息如下:
 

当然,输入此命令前要把你自己的插件加载进来。另外,以上方法讲的是修改主体菜单来实现命令与菜单的挂接,我

们还可以用局部菜单进行加载。流程如下:新建一文本文档如记事本,输入代码——

***MENUGROUP=ACAD001
***POP15
**MYMENU
ID_MnMyMenu    [我的菜单(&F)]
ID_CXKZ       [查询扩展]^C^C_CXKZ
ID_ DDJC      [打点检查]^C^C_DDJC
然后另存为ACAD001.MNU,注意扩展名要改。再在CAD里面用加载局部菜单的命令“MENULOAD“加载此文件并编译,同

样可出现想要的效果。
好了,我们再来看自定义工具栏“***TOOLBARS”。同样先看一段代码如下:
***TOOLBARS
**TB_DIMENSION
ID_TbDimensi [_Toolbar("标注", _Floating, _Hide, 100, 130, 1)]
ID_Dimlinear [_Button("线性标注", ICON_16_DIMLIN, ICON_16_DIMLIN)]
^C^C_dimlinear
ID_Dimaligne [_Button("对齐标注", ICON_16_DIMALI, ICON_16_DIMALI)]
^C^C_dimaligned
ID_Dimordina [_Button("坐标标注", ICON_16_DIMORD, ICON_16_DIMORD)]
^C^C_dimordinate
其中第一段还是ID,第二段告诉你控件的类型,如_Toolbar是工具栏、_Button是按钮。对于工具栏,在说明类型是“

_Toolbar”之后告诉你标题名称如“标注”_Floating意思是?????,再后面是_Hide意思是CAD启动时候此工具栏

是否隐藏,后面的坐标告诉你它基于屏幕的绝对坐标是多少。对于按钮,首先告诉你鼠标划过时候的提示信息如“线

性标注”,然后告诉你显示图标,这个图标在哪里找呢,Q了一下,原来一在搜索路径可以找到就行,二在同名的DLL

中找到也可以,如果是文件,则其后缀名是.bmp,如果是DLL,则是它的导出资源ID了,最后面即中括号之外的即是其

执行命令,呵呵,这里又将命令与工具栏按钮挂接上了。下面我们搞一个示例,在ACAD.MNU里面加上代码如下:
**TB_MYTOOLBARS
ID_AMAN [_Toolbar("阿瞒", _Floating, _Show, 100, 130, 1)]
ID_CXKZ [_Button("查询扩展", 查.bmp, ICON_16_DIMLIN)]
^C^C_CXKZ
ID_DDJC [_Button("打点检查", 打.bmp, ICON_16_DIMALI)]
^C^C_DDJC
然后将图像文件COPY到搜索路径,注意这个图像文件要求是16*15的,否则显示不完整。然后我们再在命令栏输入命令

“MENU”,重新加载ACAD.MNU,则出现效果如下:
 

点击“查”则命令就会执行,命令栏显示效果如图:
 

同时我们看下工具箱里面也加了一个工具条选项,如图:
 

这样一来,我们就实现了定制工具栏的效果。
和菜单一样,工具栏也是可以搞个局部菜单加载方式,这里不再胪述了,另外我们只实现了菜单栏和工具栏,还有其

他几个组如“***IMAGE”、“***HELPSTRINGS”、“ ***ACCELERATORS”我们可以如法炮制。
最后还要发表点隐忧之辞,由于这种方式是基于老版本的CAD菜单配置文件.MNU文件来实现的,但是现在的的CAD已经

采用流行的XML语言来实现此一功能了,XML编辑好的菜单配置文件扩展名为.CUI,所以也许.MNU方式的菜单配置将会

被淘汰,不过据网友“飞诗”大侠说,桌子公司会考虑兼容性问题,将继续支持.MNU方案。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多