- 积分
- 3116
- 明经币
- 个
- 注册时间
- 2003-10-23
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
AutoCAD的使用技巧
AutoCAD 菜单文件使用
AutoCAD 菜单文件使用五问
--- AutoCAD中菜单文件的灵活使用,是每个熟练*作者应该掌握的技巧。在菜单文件的使用中往往也容易出现一些问题,下文就是在对这些常见问题进行归纳总结后的集中解答,希望借助于这些文字,使初学者对如何用好菜单文件有一个全面的了解。
---- 一、 菜单文件是如何运作的?
---- 如图1所示(略),AutoCAD系统的基础菜单文件放在AutoCAD安装目录下的\SUPPORT子目录中,共有五个文件。无论是AutoCAD系统的基础菜单,还是附加(局部)菜单或是用户自已定制的菜单,都是由.mnu/.mnc/.mns/.mnr/.mnl这五个文件组成。这五个文件组成了一个菜单的整体,但也并不是每一个菜单都包括全部的这五个文件。五个文件在菜单中起着各自的作用,但其作用是有主次之分的,其生成过程有也主从之分。要使用好菜单,必须明白这五个文件相互之间的关系和在菜单的调用过程中各自所起的作用。.mnu是模板菜单文件,除了.mnl文件外,其余三个文件最初都源出自于它。AutoCAD调用时自动对它进行编译,产生对应的.mnc和.mnr文件以及.mns文件。.mnc是.mnu文件编译后的版本,实际上.mnc文件是AutoCAD真正直接执行的菜单文件。.mnr也是在.mnu文件编译时产生,它存放着菜单所使用的位图之类的菜单资源。最初的.mns文件也是.mnu文件被编译时由AutoCAD自动产生的,它的基本内容和.mnu文件类似,只是少了有关的说明和注释行。在.mnu文件被编译时,.mns文件和.mnc文件的菜单内容是一致的,但如果在AutoCAD的*作中,用户对菜单的作了更改,这些改动都记录在.mns文件中,所以.mns文件对应的是AutoCAD系统中当前菜单的内容。.mnl文件在内容上相对独立一些,它包含由菜单所使用的AutoLISP表达式,如各种命令简化指令的定义,还有层排序、指定层这样的LISP程序。当加载一个菜单文件时,如果系统中存在与菜单文件同名的.mnl文件,则这个.mnl文件也会被加载。
---- 二、 何时用menu,何时用menuload加载菜单?
---- AutoCAD加载菜单有两个命令:menu和menuload。何时使用menu,何时使用nenuload?首先必须明白AutoCAD菜单是有等级之分的,分为基础菜单和局部(或称附加)菜单。
---- 顾名思义,基础菜单是AutoCAD使用是菜单的基础,在AutoCAD中同时只能使用一个菜单文件作为基础菜单,acad.mnu是安装时缺省的基础菜单。menu命令专用于更换或重新加载一个基础菜单,AutoCAD启动时缺省的基础菜单是上一次通过menu命令调入的菜单。
---- 局部菜单和基础菜单在文件体系上没有区别。在基础菜单之上,可以在下拉菜单中附加上额外的菜单项,这种可附加的菜单就可称作为局部菜单。局部菜单使用menuload命令加载。Menuload命令从下拉菜单中也可以调用,方法是:“Tools menu(工具)”→“Customize Menus(定制菜单)”。用menuload可以同时加载多个菜单文件。
---- 对于现有的下拉菜单项,都可以在进入“Menu Customization(菜单定制)”界面后,选“Menu Bar(菜单条)”来进行“Remove(移除)”或“Insert(插入)”。
---- Menuload加载的局部菜单可以用menuunload命令将其卸载。而用menu命令加载的基础菜单只能由下一个menu命令加载来替换。
---- 三、 如何使对于菜单的改动得以固定和保存
---- 菜单定制,特别是工具条定制是比较容易的,但很多人定制工具条后就会有一个问题:怎样将这些改动保存下来,以便再次安装AutoCAD时使用?要解决这个问题,首先要清楚AutoCAD菜单的加载过程。
---- AutoCAD加载菜单缺省的过程是这样的:菜单命令发出后,AutoCAD首先加载指定菜单名的.mnc文件;如果.mnc不存在,则寻找同名的.mns文件,将其编译成.mnc文件并完成加载;如果同名的.mnc和.mns文件都不存在,则寻找.mnu文件并完成编译和加载。根据菜单加载的过程可以采取如下措施:
如果对菜单模板文件.mnu进行了修改,并要让改动起作用,就必须在启动AutoCAD系统前将.mns和.mnc文件删除,或是重新加载.mnu模板菜单文件。加载.mnu文件应注意的是:在调入菜单的对话框中将文件类型改为“Menu template(*.mnu)”而不是缺省的“Menu files(*.mnc;*.mns)”,这样才能选择.mnu文件。
如果在AutoCAD中,用AutoCAD的功能对菜单进行了修改,这些变化自动记录在.mns文件中,为了使修改得以固定,在删除.mns文件之前,应将修改的内容移到.mnu文件的相应部位中,并将.mnu文件备份下来。如果这些改动是在基础菜单acad.mnu中,则应在AutoCAD重新安装后,用改动过的acad.mnu去覆盖AutoCAD原始的acad.mnu,并删除掉已存在的acad.mnc和acad.mns文件。
如果在AutoCAD启动后对菜单进行了修改,想要取消这些修改,恢复启动前的菜单状态,可以用menu命令,调入acad.mnu菜单模板文件。
---- 四、 如何对AutoCAD菜单进行汉化
---- 在AutoCAD中有两个比较重要的菜单,acad.mnu和ac_bonus.mnu(在AutoCAD 2000中bouns的功能已合成到主菜单中)。acad.mnu是缺省的基础菜单,放在AutoCAD安装目录下的\SUPPORT子目录中;ac_bonus.mnu是典型的附加菜单,放在AutoCAD安装目录下的\BONUS\CADTOOLS子目录中。对AutoCAD R14菜单的汉化主要是对这两个菜单进行汉化,在AutoCAD 2000中仅需对acad.mnu进行汉化。如果准备对AutoCAD的菜单系统进行汉化或其它改动,最好在安装AutoCAD系统后,就立即把这两个文件备份下来,以在必要时恢复原始的菜单状态。
---- 常用的菜单汉化方法有三种:
---- 1.利用四通利方、中文之星或东方快车这样的动态翻译软件显示汉字菜单。不过由于AutoCAD菜单术语高度的专业化,这些汉化软件翻译的结果往往会不知所云。
---- 2.自己动手汉化。看一看下面的两段文字,就明白对AutoCAD菜单永久性汉化原本是一件比较容易的事,实质上只是“翻译单词和术语”而已。此外,自己动手汉化的目的显然是翻译给别人用的。还有就是工作量问题,acad.mnu的文本长度多达100K,总的词汇量是可想而知的,不过对于Windows版的AutoCAD来说,常用到的菜单节仅有三个部分:一、下拉菜单节,标示为***POPn;二、工具条定义节,标志为 ***TOOLBARS;三、状态栏提示信息节,标志为***HELPSTRINGS。对于acad.mnu中占大部分篇幅的其它节,完全可以不进行汉化。欲详细了解菜单文件的结构,请参考AutoCAD帮助中的菜单定制一节。
---- 第一段:菜单ac_bonus.mnu原文(片断)
***POP1
[&Bonus]
ID_MNBnsLayr [- >&Layers]
ID_BnsLayman [&Layer Manager...]^C^Clman
…… ……
***TOOLBARS
**TB_BONUS_LAYER_TOOLS
ID_TbBnsLaye [_Toolbar("Bonus Layer
Tools", _Floating, _Show, 197, 172, 1)]
…… ……
***HELPSTRINGS
ID_BNSNCOPY [Copies entities nested
inside blocks and xrefs: NCOPY]
---- 第二段:菜单ac_bonus.mnu汉化后(片断)
***POP1
[&Bonus扩充]
ID_MNBnsLayr [- >图层&L]
ID_BnsLayman [图层管理&L...]^C^Clman
…… ……
***TOOLBARS
**TB_BONUS_LAYER_TOOLS
ID_TbBnsLaye [_Toolbar("BONUS图层工具",
_Floating, _Show, 197, 172, 1)]
…… ……
***HELPSTRINGS
ID_BNSXDLIST [列出实体上的扩展数据: XDLIST]
---- 除菜单文件之外,对于对话框和帮助文件的汉化也不是不可能。对话框一般可以在*.dll文件中去找,找到后可以在VC++中直接用中文字替换成英文字;汉化帮助文件也有好办法:从网上下载两个小软件,hlp2rtf.exe和hlpman,?*** lp2rtf将 帮助文件转换为rtf文件,用英汉自动翻译将rft文件翻出个初稿,校正后再?*** lpman返成中文帮助文件。不过,如果做成了这些工作,Autodesk公司中文版软件的工作都让你一个人给做了。
---- 以上自己动手汉化菜单的工作不受AutoCAD版本的限制,所以有志的朋友可以在AutoCAD 2000中文版推出之前,动手出一个AutoCAD 2000汉化版。
---- 3. 移植和引用。
---- AutoCAD R14是有正式的简体中文版的,但一般用户很少见到。国内很多AutoCAD的应用系统都是在英文版的基础上进行菜单汉化,但帮助文件和对话框还是英文的;这种汉化菜单系统还有一点不足之处是:由于在这样的应用系统中加入了许多与应用系统有关而非原来AutoCAD的内容,为此甚至影响到了AutoCAD原有功能的运行。
---- 象.mnu或.mns这种的菜单文件是不加密的,所以完全可以从这些汉化的菜单中,挑选出与英文菜单文件acad.mnu中一一对应的片段,并加以补充和完善,来组成一个新的“纯净”的汉化菜单。我在站点http://personal.xfol.com/~7color中?..化菜单,AutoCAD R14的汉化菜单文件名为Pacad_menu.zip,AutoCAD 2000汉化菜单名为Pacad2000.zip,采用Winzip压缩,大小为36K,愿与喜欢纯净汉化版的朋友们私下同享。
---- 五、 如何实现中英文菜单切换使用
---- 在AutoCAD中同时保存中英文两套菜单系统,来回切换是可行的。具体作法是把汉化菜单文件改名为Pacad.mnu,放在AutoCAD安装目录下的\SUPPORT子目录中,当然还别忘了将acad.mnl复制成Pacad.mnl,放?*** acad.mnu同一目录中。在用中文菜单时,用menu命令加载Pacad;换回英文菜单时就再次使用menu命令加载acad菜单文件。
---- 这一工作可以用下面一小段LISP程序来完成,还可以进一步定义成带有“E/C”字样图标的工具按钮,这样就更方便了。
;;;中英文菜单转换程序E2P
;;;=====================
;;首先在AutoCAD 2000中应删出程序中有关Pac_bonus.mnu的行
;;;应将汉化菜单Pacad.mnu以及Pac_bonus.mnu
;;;放在与对应的英文菜单同一目录中。
;;;应将acad.mnl和ac_bonus.mnl复制出Pacad.mnl和Pac_bonus.mnl
;;;放在同一目录下。
(defun c:e2p(/ str01 int01)
(setvar "filedia" 0)
(setq str01 (getvar "menuname")
(setq int01 (strlen str01))
(if (= (substr str01 (- int01 4)) " acad"
(progn
(command "menu" "acad"
(command "menuload" "ac_bonus"
)
(progn
(command "menu" " acad"
(command "menuload" " ac_bonus"
)
)
(setvar "filedia" 1)
)
---- 以上仅就菜单文件使用中的问题做了一些探讨,要用好AutoCAD的菜单系统,还必需借助帮助文件或其它资料,对AutoCAD菜单文件的定制有所了解.
摘自:计算机世界报
8D给AutoCAD 增加超级编辑命令
---- AutoCAD在中国有很广泛的用户基础,同时也有很多专业的、业余的开发人员。从R13版本开始,Autodesk 提供了ARX开发工具,面向对象的特性使开发人员如沐春风。有关ARX编程与ADS编程的比较这里不再赘述,此处只讲如何用ARX实现我们所要求的功能,不足之处请指正。
---- 许多二次开发软件均提供超级编辑命令,如Genius 14、HMCAD 6.0等等。读者或许对这些命令很感兴趣,能不能自己开发类似的功能呢?只要您对C++和ARX编程有一些了解,利用Autodesk提供的ObjectARX SDK软件包(可以到Autodesk网址上免费下载),您能很方便的写出此类程序,虽说不能和专业人员提供的超级编辑命令相媲美,但也能给您带来不少方便。本文利用ObjectARX提供的范例程序(缺省安装ObjectARX SDK后的路径是X:\OBJECTARX\ARXLABS\LAB07)进行简单的修改即可实现我们所要求的功能。以下是采用ObjectARX SDK 2.0,在MSVC 5.0编译环境下测试通过。
---- 首先我们要修改enttemp.h文件:
---- 原文件如下:
class EntTemperature : public AcRxObject
{
public:
ACRX_DECLARE_MEMBERS(EntTemperature);
virtual double reflectedEnergy(AcDbEntity* pEnt) const = 0;
};
将斜体部分修改成如下:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt)
const = 0;
---- 因为我们以后要以EntTemperature作为基类,而且HgyModify函数在继承类中要重写并要求实现动态调用,故此处必须声明为虚拟函数。Virtual关健字即为C++面向对象的重要的特性。
---- 第二、删除tempapp.def文件中的energy文本。
---- 第三、修改tempapp.cpp文件:
---- 1、 删除CircleTemperature、RigonTemperature及EllipseTemperature类的所有相关内容。
---- 2、 修改原文件中如下的内容:
class DefaultTemperature : public EntTemperature
{
public:
virtual double reflectedEnergy(AcDbEntity* pEnt) const;
};
double DefaultTemperature::reflectedEnergy
(AcDbEntity* pEnt) const
{
ads_printf("\nThis entity has no area, and no reflection.\n";
return -1.0;
}
修改后的内容如下:
class DefaultTemperature : public EntTemperature
{
public:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;
};
Adesk::Boolean DefaultTemperature::
HgyModify(AcDbEntity* pEnt) const
{
ads_printf("\nThe entity hasn't defined,
and nothing to be modified.\n";
return Acad::eOk;
}
为简单起见,我们只对直线和圆定义超级编辑命令,
在此定义有关line和circle类。在tempapp.cpp
文件中增加CircleTemperature和LineTemperature类,
定义如下:
class CircleTemperature : public EntTemperature
{
public:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;
};
Adesk::Boolean
CircleTemperature::HgyModify(AcDbEntity* pEnt) const
{
AcDbCircle *pCircle = AcDbCircle::cast(pEnt);
if (!pCircle) {
ads_printf("The entity selected is not a circle\n";
pEnt- >close();
return Acad::eNotImplementedYet;
}
AcGePoint3d p,q;
double r;
p=P_TO_P(pCircle- >center());
if (getPoint((double*)(&p), "Center Point: ", p)== RTNORM
&& ads_getdist((double*)(&p), "Blob radius: ", &r) == RTNORM)
{
pCircle- >setCenter(p);
pCircle- >setRadius(r);
pCircle- >close();
}
return Acad::eOk;
}
class LineTemperature : public EntTemperature
{
public:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;
};
Adesk::Boolean
LineTemperature::HgyModify(AcDbEntity* pEnt) const
{
AcDbLine *pLine = AcDbLine::cast(pEnt);
if (!pLine) {
ads_printf("The entity selected is not a line.\n";
pEnt- >close();
return eNotImplementedYet;
}
AcGePoint3d p,q;
p= P_TO_P (pLine- >startPoint());
if (getPoint ((double*)(&p), "From Point: ", p)== RTNORM
&& getPoint((double*)(&p), "To point: ", q) == RTNORM)
{
pLine- >setStartPoint(p);
pLine- >setEndPoint(q);
pLine- >close();
}
return Acad::eOk;
}
---- 如您所见,HgyModify函数也要完全重写。至此我们对CircleTemperature和LineTemperature的定义已经完成。上面P_TO_P()只是一个点对点赋值,getPoint()是自定义的取点函数。增加全局变量:这样我们在初始化或清除内存过程中可以存取该类。
LineTemperature *pLineTemp;
CircleTemperature *pCircleTemp;
InitApp()函数中更改部分:
acedRegCmds- >addCommand("TEMPERATURE_APP",
"MODIFY", "MODIFY",
ACRX_CMD_TRANSPARENT, printEnergy);
更改程序中别的函数中的相应的部分。
注意printEnergy()函数中selectEntity()
函数的第二个参数必须是AcDb::kForWrite;
---- 编译后在AutoCAD(如R14)中测试运行,敲入modify后随便选取直线或圆,您就会能体会到超级编辑命令的方便之处。或许您会认为此命令没有什么特别之处,但若您仔细研究lab10子目录中的内容,定义自己的实体如门、窗或机械特征,特别是您自己才会用到的特殊对象,给对象增加此命令,您就会体会到ARX编程的魅力了。
8D随着CAD在各行各业中的应用,掌握它的人也愈来愈多,随着使用时间的增加,每个CAD的使用人员都会有自己的一些技巧,但在公开的技术资料中没有提及的一些技巧则没有引起人们的重视。在一个偶然的机会里,我发现了AutoCAD R14中的三个小技巧,现把它介绍给你,也许会给你带来许多方便。
“↑”、“↓”键的使用
大家都知道在DOS中上、下箭头键的作用,如果运行了DOSKEY则它能记住你输入的每一条命令,再次使用相同的命令时用不着再敲一遍,用上、下箭头键选择即可。在AutoCAD中也同样可以用上、下箭头键选择以前键入的命令。这在输入文本时最为有用,无论是TEXT或DTEXT命令,均可在输入文字时使用上、下箭头键来减少命令的输入量。当然,AutoCAD记录的行数是有限的,但可通过设置来加大它的记录量,步骤是选取[Tools(工具)]→[Preferences...(参数选择)]→[Display(显示)],在[Text window parameters(文字窗口参数)]框中的第二行“Number of line of text in text windows to keep in memory”(在内存中保留文字窗口的文字行数)即为设置记录的行数,输入的数值越大则记录的越多,但如果机器内存少,那么还是少设置一些为妙,以免出意外,它的值在25和2048之间,本人的机器为128M内存,已将此值设为2048,倒也没出差错,大家可以根据自己的计算机多试几次,找到合适的数值。为了所选择的命令都是有效的,在使用AutoCAD时应尽量减少从键盘输入重复及无意义的命令,比如层对话框的调入和Undo命令的使用,能调用菜单最好调用菜单。
“!”键的使用
“!”键也有用?是的,下面我来具体讲个例子来介绍它的用法。
假设屏幕上有一条已知长度的线(指单线、多义线,未知长度当然也可以),且与水平方向有一定的角度,要求将它缩短一定的长度且方向不变,我想每个CAD使用人员都会有自己的方法(您不会要旋转坐标系吧?),但我想所用命令都不会少于三条,而用“!”作为辅助命令则用一条命令即可,*作过程如下:
在“Command:”状态下,直接选取该线,使其夹点出现,将光标移动到要缩短的一端并激活该夹点,使这条线变为可拉伸的皮筋线,将光标按该线的方向移动,使皮筋线和原线段重合,移动的距离没有限制,有人觉得移动的方向不能和原来一样那么就用辅助点捕捉命令,在屏幕提示后输入“near”并按空格键,这时屏幕上会有提示以捕捉到原来线段上的某一点,此时在“near to”的提示后输入“!XX”(XX为具体数值)后回车,该线的长度就改变了。怎么样!不信的话就在此命令执行前后用list命令看看此线段的长度。
找回字体
用AutoCAD画图的人最烦的就是从别处拷来的图在本机找不到相应的字体,从而出现各式各样的乱码,造成找不到字体的原因是别人使用的字体存放位置和自己机器中的位置不一样,一般的解决办法是重新定义,但有时这种办法并不总是有效,并且在此过程中还可能造成意外错误而使AutoCAD崩溃,更可能造成图形文件被毁。本人在一次偶然的机会中用另外一条AutoCAD命令达到了一举两得的目的,即用修复(recover)命令。先运行AutoCAD,选取文件菜单中的“recover”命令,选取要处理的图形,进行修复,在修复过程中会出现要求选取字体的对话框,此时即可点取正确的字体文件以重新定义,修复完毕后文字即可正常显示。有一点我要提醒大家,如果图形文件使用的中文是非GB编码的字体文件,则你要有相应的字体文件才可正常显示出文字。 |
评分
-
参与人数 1 | 威望 +1 |
金钱 +10 |
贡献 +5 |
激情 +10 |
收起
理由
|
mccad
| + 1 |
+ 10 |
+ 5 |
+ 10 |
【好评】好文章 |
查看全部评分
|