本帖最后由 alan_cmh 于 2019-9-25 10:08 编辑
深度定义AutoCAD菜单,使用Alt 及系统保留的键盘快捷键,增强右键关联菜单!
深海潜水多年,今天上来冒个泡,祝大家五一快乐!假期闲来无事,给大家说点自定义菜单的事儿,绝对原创,绝对实用!
Auotcad有一些默认的键盘加速快捷键,如F3键,Ctrl + 数字键1,2,3,Ctrl +字母键A ,S,P 等。但默认的快捷键很少,免不了要自己动手增加一些来提高工作效率。普通的定义快捷键,这里就不多说了。但AutoCAD本身对快捷键有些限制,辅助键只可以使用Ctrl ,Ctrl+Alt,Ctrl+Shift,Ctrl+Shift+Alt来配合某些字母键、数字键、功能键或虚拟键(如 F5 ,Insert ,NumPad7)等。 受支持的虚拟键有: Escape 、Insert 、Delete 、Home、End 、Page Up 、Page Down 、左箭头、右箭头、上箭头和下箭头。
Escape 只能单独使用或与修饰符组合键 Ctrl+Shift+Alt 配合使用。不过windows7已经把Esc键占了,咱就不动它了。
个人经验,实际使用中,左手键盘右手鼠标比较有效率,对于左手操作,Ctrl ,Ctrl+Alt 配合其它键比较好按,Ctrl+Shift 一般,Ctrl+Shift+Alt 则按键太多令人抓狂,左手5根指头用4根,怎么按都别扭,估计很少人设置这个做快捷键,实在是不太方便使用,尤其是在右手不离开鼠标的前提下。之前用过一段时间AutoHook这个软件,可以允许在AutoCAD用一些奇怪的键盘组合(Alt,Shift等)来输出命令,尤其Alt 加左手几个字母和数字十分好用,但网上找到的可用版本,只支持到AutoCAD2007;论坛里之前也有人发一个ARX版本的类似插件,但现在过期不可用了。其实可以用一个绕弯子的办法,来突破限制,使用Alt 组合键及覆盖系统的一些保留快捷键。
找一个AutoCAD 2004或者05的菜单文件,名称是acad.mnu,用记事本打开,找到"***Accelerator"字段,可以看到以下内容: ***ACCELERATORS ID_Hyperlink [CONTROL+"K"] [CONTROL+"L"]^O [CONTROL+"R"]^V ID_SelAll [CONTROL+"A"] ID_Copyclip [TOOLBAR+CONTROL+"C"] ID_New [CONTROL+"N"] ID_Open [TOOLBAR+CONTROL+"O"] ID_Print [TOOLBAR+CONTROL+"P"] ID_Save [TOOLBAR+CONTROL+"S"] ID_Saveas [CONTROL+SHIFT+"S"] ID_APP_EXIT[INTERNAL+CONTROL+"Q"] ID_Pasteclip[TOOLBAR+CONTROL+"V"] ID_Copybase [CONTROL+SHIFT+"C"] ID_Pastebloc [CONTROL+SHIFT+"V"] ID_Cutclip [TOOLBAR+CONTROL+"X"] ID_Redo [CONTROL+"Y"] ID_U [CONTROL+"Z"] ID_Ai_propch[TOOLBAR+CONTROL+"1"] ID_CleanScreen [CONTROL+"0"] ID_Content [TOOLBAR+CONTROL+"2"] ID_SSMPalette [CONTROL+"4"] ID_INFOPAL [CONTROL+"5"] ID_MarkupMgr [CONTROL+"7"] ID_TPalette [CONTROL+"3"] ID_dbConnect [CONTROL+"6"] ID_VBARun [ALT+"F8"] ID_VBAIDE [ALT+"F11"] [CONTROL+"H"]+'_setvar;pickstyle;$M=$(if,$(eq,$(getvar,pickstyle),0),1,$(if,$(eq,$(getvar,pickstyle),1),0,+ $(if,$(eq,$(getvar,pickstyle),2),3,2)))
其中带ID前缀的,如ID_Hyperlink是指的系统默认命令,方括号中间是启动此命令的快捷键,其实我们可以自己定义一个快捷键,不须理会ID段,现在我们来定义使用Ctrl+Alt+B启动“打断于点”命令,如: [Control+Alt+"B"]^C^C_break;\_f;\@;
OK,现在把Control+Alt换成Alt添加到acad.mnu菜单里,再多输入下面示例的几个命令快捷键,另存起来。请注意的是方括号后面的命令名称不要一样,因为后面系统会为同样的命令分配相同的ID,这个ID是系统为新命令自动建立的,比如,你想增加些Alt键快捷键,必须用不同的命令来占用ID位,方便以后修改,命令名称随便写都行,如下方的AltF1,AltF2,AltF3。至于方括号后所用到的特殊字符,请自行查阅帮助文件。方括号后面的命令,可以是简单的系统命令,可以是宏命令,可以控制工具栏或者切换界面元素,还可以是lisp程序命令(如下面的CenterLine),下面给出一些示例:
[Alt+"B"]^C^C_break;\_f;\@;
[Alt+"C"]_Copy; [Alt+"V"]^C^C_Xline;V; [Alt+"1"]'_Osmode;6271; [Alt+"2"]_Chprop;\;C;2;; [Alt+"3"]^C^C_CenterLine; [Alt+"Pageup"]'_setvar;menubar;$M=$(if,$(eq,$(getvar,menubar),1),0,1) [Alt+"NumPad1"]_-toolbar;user1;show; [Alt+"F1"]AltF1 [Alt+"F2"]AltF2 [Alt+"F3"]AltF3
保存下刚才编辑过的acad.mnu文件,回到AutoCAD,在命令行输入CUI,打开“传输”选项卡,点击右侧那个打开文件按钮,找到我们刚才保存的acad.mnu文件
在右侧找到我们自己定义的那些快捷键,把它拖到左侧对应位置,
现在这几个Alt 快捷键就被传输到当前自己使用的菜单中了,回到自定义选项卡查看下,请注意,右侧的快捷键,不要尝试去修改它,AutoCAD不允许你定义Alt+B 这类快捷键,会自动删除掉,但是你不动它,也会被保存下来。至于其它栏,可以根据自己的需要去修改。下面有个元素ID是AutoCAD自动分配的,上面编辑acad.mnu菜单那一步,你如果偷懒快捷键定义不同,而命令相同的话,实际上分配到的ID是一样的,这时候再去修改这个命令,你会把所有相同ID的项目,全部修改成一样,从而无法实现不同的快捷键调用不同命令。
点击确定,保存当前修改,回到AutoCAD工作界面,试试刚才定义的快捷键吧,是不是搞定了!用这种移植传输的方法,可以为所欲为的覆盖修改部分AtuoCAD保留的快捷键,不是全部,有些键位仍然无效的,总体来说,够用了。本例在AutoCAD2012下操作, 理论上适用于2006到2013各个新版菜单系统 ( 这里向大家道歉,关于Alt键的调用,经本人64位win7测试,修改过2010-2013。2010测试不通过,2011,2012,2013,2014,2015,2016,2017,2018,测试通过,其它版本请各位测试后回贴通知,估计低版本通过的可能性不大。本贴介绍的其它菜单修改与增强不受AutoCAD版本限制) 。但是,适可而止吧,多了估计你也记不住,咱的目的就是用上左手那几个Alt 快捷键,在使用键盘快捷键的时候,少伸2个指头!#%%*!@*T&^@$
09以后AutoCad界面发生了很大变化,加入了Ribbon界面,相对来说,Ribbon界面可以在相同的面积里显示比以前更多的命令,对新手是个好事,可以了解更多命令。但是这个界面对现在的宽屏显示器,尤其是笔记本是个恶梦,本来上下空间紧张,Ribbon还要占去好大块面积。还有些命令被分配在不同的标签下,要找到还要点击多次鼠标。Ribbon界面,Alt+数字键这几个,还是不要设置了,因为这几个是Ribbon界面的默认快捷键,会有冲突。另外,如果菜单开着的话,也会跟一些菜单快捷键冲突的,如下图,Alt+F,1,2,3,E,V,I,O,T,D,N,M,O,W,H,都被分别占用了,开着菜单,字母被占用,关了菜单,数字被占用,所以还是用刚才定义的 "Alt + Page up" 快捷键来隐藏掉菜单吧,对于熟悉命令行的老手来说,恐怕大多数都是隐藏甚至关了Ribbon界面和菜单,只打开一些必用的工具栏,使用键盘鼠标来干活的。所以没有Ribbon和菜单应该不是什么问题。一些Alt键,要关了菜单才好用。
有些人可能要说了,太麻烦了,我可以自定义acad.pgp文件,但是PGP文件里定义的简写命令,只能执行命令的第一步,而且还需要额外的空格键来确认命令的执行,而键盘加速键的好处在于是可以即时执行一系列命令动作的,包括响应外部的lisp程序,有些命令,做成lisp程序有点大材小用,放在关联对象菜单里却正好。AutoCAD的菜单是分好几个菜单组合在一起的,关联对象菜单部分是变化的,只对特定的图元起作用,如标注对象菜单只在选择标注的时候才出现,填充对象菜单只在选择填充的时候出现。下面的这个命令 ,我们可以把它定义在标注关联菜单中,快速将标注文本置中,如果用命令行方式来操作,恐怕很不方便.
_dimoverride;dimtix;1;;\;;
在命令列表里,点击新建命令按键,在右方特性区域名称栏里输入"&1. DTC ",在宏栏里输入"_dimoverride;dimtix;1;;\;;" ,然后将定义好的这个命令拖到上方的标注对象菜单里,点确定.
回到AutoCAD工作界面,选择一个文本不在标注线中间的尺寸,点击鼠标右键,可以看到刚才新建的标注关联菜单命令DTC,如下图,点一下“1.DTC”或者敲下左手键盘上的1,执行后,就会和下面的标注一样了标注文本被居中放置了。(&是个加速键符号,在菜单里,它后面跟的字符如果是1,那么菜单调用出来后,按1可以迅速调用DTC,你甚至都不需要移动鼠标去选择DTC)
菜单的深度定制,我这里只做个引子,大家可自由发挥,合理配好&后面的快捷按键,会非常方便 。 可以考虑修改增强的菜单有:
编辑菜单:用_Chprop更改对象线型,颜色,图层等; 标注对象菜单:加几个不同的标注显示或换算比例,更新,翻转箭头,添加解除关联,用dimoverride更改其它标注变量; 填充对象菜单:直接在右键里,用-Hatchedit更改比例,角度,样式,AutoCAD自带填充样式的个人而言也就常用几种而已; 添加实体编辑对象菜单; Shift + 右键改成正交切换,这样不用看键盘都能切换正交; 捕捉菜单里放几个Osmode,加上极轴切换或者其它状态栏切换选项;
一些菜单里用得到的系统默认的宏,其它的自查帮助文件吧:
^O 切换正交
^U 切换极轴
^D 切换动态USCS
^E 下一个等轴平面
如果实在懒得去找空默认菜单去编辑占位ID,我这里做好了一个现成的空的菜单,只包含快捷键部分,除了系统默认的,其它都有不存在的空命令占着,自己传输拖到菜单里,对于2006以前的版本,用记事本打开附件对比下自己的菜单文件,直接替换自己想改的部分就行了.
http://bbs.mjtd.com/thread-93473-1-1.html
上面的贴子里,有人问如何详细设置鼠标按钮,我把当时的回答也贴到这里来,可以参照下修改AutoCAD2006以前的菜单文件:
菜单文件里,鼠标右键配合功能键定义是分别设置的,Buttons2部分是定义Shift+右键,Buttons3是Ctrl+右键,Buttons4是Ctrl+Shift+右键 ,可以根据需要分别配置,每一行代码一个鼠标按钮,第一行是鼠标第二键:右键,第二行是鼠标第三键, 第三行是鼠标第四键,因手头没有多键鼠标,没有尝试太多,但对我只设置右键相关就足够用了。按你的需要,修改的时候,只改Button2部分为^O就可以切换正交了。另外,看下你的Button3设置里,有没有"$P0=SNAP $p0=*",这个是捕捉菜单代码,如果没有就把它加进去。
以下这个是我常用的鼠标按钮设置,修改了3个部分,Shift+右键是切换正交,Ctrl+右键是捕捉菜单,Ctrl+Shift+右键是切换极轴和对象捕捉追踪,可以参照下 :
***BUTTONS1
// Simple + button
// if a grip is hot bring up the Grips Cursor Menu (POP 500), else send a carriage return
// If the SHORTCUTMENU sysvar is not 0 the first item (for button 1) is NOT USED.
$M=$(if,$(eq,$(substr,$(getvar,cmdnames),1,5),GRIP_),$P0=ACAD.GRIPS $P0=*);
$P0=SNAP $p0=*
^C^C
^B
^O
^G
^D
^E
^T
***BUTTONS2
// Shift + button
^O
***BUTTONS3
// Control + button
$P0=SNAP $p0=*
***BUTTONS4
// Control + shift + button
'_setvar;autosnap;$M=$(if,$(eq,$(getvar,autosnap),63),0,63)
|