CAD技术交流区
这里都是电脑高手,有没有CAD高手,请到这里来,你有什么高见尽管发表,有什么新体会也共享出来,大家一起讨论呀!跟贴的人有什么问题,就提吧,我不能解决,也可以和你探讨的,而且还有很多高手呀!!!我就想请教一下有那一位高手能够帮我解决这样一个问题:
我在我的CAD2002里加载了圆方菜单,但是都不起作用,PGP文件也复制过来了,还是不行,需要怎么做才能把圆方菜单文件的程序启用呢?
谁能告诉我不胜感谢!!!!
viewfile.asp?ID=39094 我还自己顶!!!!!!!!!
快来看看呀我有高手的关于CAD应用的文章,想成为高手的就来呀! 高手~~~~~~~~
我顶你~~~~~~~`
不知道,我是菜鸟,我用2000很正常~~~
希望索老大能发些你的应用心得
唉..我太菜了!!帮不了你了..
谢了 那个文章接受了 给你顶一下
先谢了。 <b>AutoCAD应用技巧精选<BR></b>1. 执行编辑命令,提示选择目标时,用矩形框方式选择,从左向右拖动光标,为"窗口Windows"方式,如果从右向左拖动光标,则为"交叉Cross"方式。<BR> 2. 相对坐标输入点时,在正交状态时,一般输入为:@x,0或@0,y (例如输入相对坐标“@100,0”表示下一点相对上一点X方向增加100,又如输入相对坐标“@0,50”表示下一点相对上一点Y方向增加50),以上两种情况下,可以直接输入100或50即可实现相同的目的,从而节省输入时间。<BR> 3. 在AutoCAD中有时有交叉点标记在鼠标点击处产生,用BLIPMODE命令,在提示行下输入OFF可消除它。<BR> 4. 有的用户使用AutoCAD时会发现命令中的对话框会变成提示行,如打印命令,控制它的是系统变量CMDDIA,关掉它就行了。<BR> 5. 椭圆命令生成的椭圆是以多义线还是以椭圆为实体的是由系统变量PELLIPSE决定,当其为1时,生成的椭圆是PLINE。<BR> 6. CMDECHO变量决定了命令行回显是否产生,其在程序执行中应设为0。<BR> 7. DIMSCALE决定了尺寸标注的比例,其值为整数,缺省为1,在图形有了一定比例缩放时应最好将其改成为缩放比例。<BR> 8.7 CAD的较高版本中提供了形位公差标注,但圆度及同轴度中的圆不够圆,其实,AutoCAD中常见符号定义都在AutoCAD安装目录下SUPPORT子目录下的gdt.shp文件中,其中2号和4号字符定义了圆形的形状,圆的弧度竟为127°,但不太好改正之(如改为90°更不好看)。<BR> 9.8 空心汉字字形如使用AutoCAD R14中的BONUS功能(一定要完全安装AutoCAD,或自定义安装时选了它),有一个TXTEXP命令,可将文本炸为线,对做立体字十分有用。<BR><BR>10. AutoCAD R14的BONUS中有一个ARCTEXT命令,可实现弧形文本输出,使用方法为先选圆弧,再输入文本内容,按OK。<BR> 11. BONUS中有一个有用的命令,即MPEDIT,用它将多个线一齐修改为多义线,再改它的线宽。<BR> 12. Image命令在R14中代替了R13中的BMPIN、PCXIN之类的命令,它将位图嵌入文件中,只用来显示,如炸开就成了空框架,如何使用PCXIN等命令重现?请将R13安装目录下的RASTERIN.EXE拷入R14下,用appload将其装入,然后就可以将位图导入(可编缉,可炸开)了。<BR> 13. BREAK命令用来打断实体,用户也可以一点断开实体,用法是在第一点选择后,输入“@”。常用一条线一段为点划线,另一段为实线时。<BR> 14. AutoCAD R14中提供了大量的命令缩写,许多R13中无缩写的命令也有了缩写,下面提供了CAD中的单字符缩写:A:ARC,B:Bmake,C:Circle,D:ddim,E:erase,F:fillet,G:group,H:bhatch,I:ddinsert,L:line,M:move,O:offset,P:pan,R:redraw,S:stretch,T:mtext,U:undo,V:ddview,W:Wblock,X;explode,Z:zoo,可大量使用之,使用后会发现比鼠标点取快(尤其在ls输5个字符的速度下)。AutoCAD R14大量扩充了简化命令,不仅增加了以首字母简化的命令(这里不列出),而用增加了用前两个字母简化的命令,常的如:array 、copy、 dist、 donut 、dtext 、filter 、mirror、 pline 、rotate 、trim、 scale 、snap 、style、 units等,更加提高了用键盘输入命令的速度,对熟悉键盘的朋友来说简直是如虎添翼。<BR> 15. AutoCAD R14命令的缩写也可用在R13,方法是将AutoCAD R14下的Support子目录下的ACAD.pgp拷贝至AutoCAD R13中的Support子目录下。<BR> 16. AutoCAD 中ACAD.pgp文件十分重要,它记录命令缩写内容,用户可自定义它们,格式如下:<命令缩写> *命令名称。也可定义系统命令,AutoCAD R14提供了sh命令,可执行DOS命令,但在Windows作用下不大。<BR> 17. AutoCAD R14中用NOTEPAD、EDIT、DIR、DEL等系统命令,笔者认为其中NOTEPAD对自定义CAD用途较大,但使用起来会发现屏幕一闪(进了DOS),又返回,十分让人不愉快,让我们来编一个小程序,取名为note.lsp:<BR><BR> (defun c:notepad()<BR> (startapp″notepad″)<BR> )<BR> 先将ACAD.pgp中的NOTEPAD命令定义行删除,重入CAD后,再将此程序命令:(load″note″)装入,下一次用NOTEPAD命令会有更好效果,最好将(load″note″)加入Support子目录下的ACADR14.lsp中。<BR> 18. AutoCAD R14中打印线宽可由颜色设定,这样机械制图中的各种线型不同、、线宽不同的线条可放入不同的层,在层中定义了线型的颜色,而在打印设置中设定线型与颜色的关系,效果良好。<BR> 19. AutoCAD R14的Support中ACAD.dwt为缺省模板,要好好加工它,把常用的层、块、标注类型定义好,再加上标准图框,可省去大量重复工作。<BR> 20. AutoCAD中有不少外部Lisp命令文件,可以直接观察它们,如果学习开发Lisp应用程序,注意;R14可是最后一版Lisp文件内容公开的AUTOCAD,在CAD2000中Lisp文件内容是加密的(笔者正在研究解密程序)。<BR> 21. AutoCAD二次开发工具很多,Lisp早就有了,R11提供了ADS(Acad Develop system),R12中提供了ADS对实模式下C编译器(如BC,MS C)的支持,R13提供ARX(Acad Runtime eXtend),R14提供了 VB Automation,这个Automation使VB编写CAD程序成为可能,渴望CAD编程的人有了一个最好的选择,不必学习ADS、ARX、Object ARX和AutoLisp,一起加入AutoCAD编程的世界。<BR> 22. 用户自定义的Lisp文件一定要自动装入AutoCAD,这样就需要在acadr14.lsp中加入用户Lisp文件的装入语句,acadr14.lsp(早期版本为acad14.lsp)好似DOS的Autoexec.bat,一定要好好利用,在其中如定义了名为S::STARTUP()的函数可自动运行它。(给CAD加个启用画面如何,可用STARTUP加startapp函数,也可加登录密码)。<BR> 23. 将AutoCAD中的图形插入WORD中,有时会发现圆变成了正多边形,用一下VIEWRES命令,将它设得大一些,可改变图形质量。<BR> 24. 形如φ30H11(+0.1,-0.2)的标注如何去标呢,请在文本内容中输入%%c30{H11(}{\H0.7X;\S+0.1^-0.2;})”,可以实现,如嫌太麻烦,就编程序来简化操作。<BR>25. AutoCAD中文件可当作块插入其他文件中,但这样一来过多的块使文件过于庞大,用PURGE来清除它们吧,一次清一层,一定要多用几次呀!<BR>26. AutoCAD R14的帮助文件内容十分丰富,由很多本“书”组成,一层层打开,多看它们用处是很大的,其中包括了CAD的各方面,比任何CAD大全还全,你是否想您的帮助加入其中,请修改acad.cnt,加入自己帮助的链接。<BR><BR>27. 在CAD中可按规定编定.ahp的CAD帮助文件,在R14下用ahp2hlp.exe将其转变为.hpj的文件和.rtf的文件,再用HelpWorkshop工具(在VC5中有)将其项目打开,编译为.hlp文件。<BR>28. 在AutoCAD中有一些DOS下的exe文件在R14中仍有用途,用Slidelib.exe可将幻灯片作库,mc.exe可实现菜单的编译。<BR>29. 在作完零件图进行组装时,可将零件图块插入后焊开,再用group成组后组装,这时用ddselect命令控制组选取处于何种状态,取消组选时再打开组状态。<BR> 30. 在AutoCAD中的菜单源文件为.mnu文件,将其修改可将自己的命令加入菜单中,再用menu命令装入,加参加AutoCAD帮助了解菜单文件格式。图标工具条中加入自己的命令相对简单,可在工具条上点右键,在toolbar对话中,点new 按钮,输入工具条后,一个新工具条产生,再选Customize按钮,选定custom,将空按钮拖入工具条中,再在空按钮上按右键,这样就可定义自己的按钮图标和命令。<BR> 31. AutoCAD的状态行也可处定义,用DIESEL语言可以访问它,最简单的方法用modemacro命令,后输入$(getvar,clayer),以后当前层名就显示在准确无误行上,用户化可谓无孔不入吧!<BR> 32. AutoCAD的图形格式为.dwg,也可导出为.bmp及.wmf或.eps、.dxf、.3ds,是如果用render命令可存为.pcx、.tga、.tif格式,AutoCAD还可将文件直接存为这几种格式,要为系统装一个名为“Raster file export”的打印机,用它打印到文件,ACAD2000还可将文件存为JPG格式。<BR> 33. render进行着色时,render无关闭按钮,用户采用:(arxunload"render"),因为它是ARX文件扩展的功能。<BR> 34. dimzin系统变量最好要设定为8,这时尺寸标注中的缺省值不会带几个尾零,用户直接接受缺省值十分方便快捷。<BR> 35. 如遇到快捷失效,如^0失去作用变为正交模式切换的情况,请用menu将当前使用菜单.mnu菜单源文件重装一遍即可。<BR> 36. 在多行文字(mtext)命令中Word97编辑文本。Mtext多行文字编辑器是AuotCAD R14中的新增功能,它提供了Windows文字处理软件所具备的界面和工作方式,它甚至可以利用Word97的强大功能编辑文本,这一功能可以用如下方法实现:<BR> 打开“Tools”菜单选“Preferences”命令,“Preferences”对话框弹出后,打开“Files/Text Editor,Dictionary,and Font File Name/Text Editor Application/Iinternal”,双击“Internal”,出现“Select a file”对话框,接着找到“Winword.exe”应用程序文件,击“打开”钮,最后单击“OK”返回。完成以上设置后,用户如再使用mtext命令时系统将自动调用我们熟悉的Word97应用程序,为AotoCAD中的文本锦上添花。<BR> 37. 巧用工具按钮自定义AotoCAD中有许多Lsp文件能为我们提供非常实用的命令,如chtext.lsp就是一个很好的文字修改命令,尤其适用于大批文字的修改,但在使用这样的命令之前必须先把Lsp文件载入。一般你可以通过选取“Tools”菜单中“Load Application…”选项,再利用对话框打开AutoCAD R14/Support 下的Chtext.lsp文件,然后击“Load”钮,或者也可以直接在命令行中键入“(load“chtext”)”以达到载入的目的,如此做总有些繁琐。下面我们用自定义工具按钮的方式解决这个问题,右击任意工具钮,弹出“Toolbars”对话框,击“Customize…”钮,在“Categories:”中选“Custom”项,将出现的空按钮拖到工具条中目标位置,击“Close”钮返回,接着右击空按钮,出现“Button Properties”对话框,在“Nam <FONT face="Courier New"> Vlisp编程技巧摘要(1)<BR>;;;**********************************************************<BR>1.如何获取多义线上的所有顶点<BR> Code:<BR> (defun C:getp (/ ent PLTYPE obj vtx vtxlst n ptlst)<BR> (vl-load-com)<BR> (setq ent (entsel "\n选取多线<EXIT>:\n"))<BR> (if ent<BR> (progn<BR> (setq PLTYPE (cdr (assoc 0 (entget (car ent)))))<BR> (if (or (= "POLYLINE" PLTYPE) (= "LWPOLYLINE" PLTYPE))<BR> (progn<BR> (setq obj (vlax-ename->vla-object (car ent)))<BR> (setq vtx (vla-get-Coordinates obj))<BR> (setq vtxlst (vlax-safearray->list (vlax-variant-value vtx)))<BR> (setq n 0)<BR> (setq ptlst nil)<BR> (repeat (/ (length vtxlst) 2)<BR> (setq ptlst (append ptlst (list (list (nth n vtxlst) (nth (1+ n) vtxlst)))))<BR> (setq n (+ n 2))<BR> )<BR> (if ptlst ptlst nil)<BR> )<BR> (prompt "\n选取实体不是多义线!")<BR> );if<BR> ) <BR> );if <BR> )<BR>;;;**********************************************************<BR>2.在对话框的文本栏里输入,怎样让它实时显示为密码“ * ” ?<BR> A.设计对话框时,控件的属性中加:password_char = "*";<BR> srt : dialog {<BR> label = "密码" ;<BR> : edit_box {<BR> label = "输入密码(&S):";<BR> key = "password";<BR> password_char = "*";<BR> fixed_width = true;<BR> width = 8;<BR> }<BR> ok_only;<BR> } <BR>(defun c:srt ( )<BR>(setq filename "srt.dcl")<BR>(if (> (setq index_value (load_dialog filename)) 0) ;装载对话框<BR> (progn<BR> (setq dlgname "srt")<BR> (if (not (new_dialog dlgname index_value)) (exit)) ;显视对话框 <BR> (action_tile "password" "(mypass)") <BR> (action_tile "ok" "(done_dialog 0)")<BR> (start_dialog)<BR><BR> )<BR> (alert "\n不能载装指定的DCL文件定义的对话框!")<BR>);;;END IF <BR> (princ)<BR>)<BR>(defun mypass ()<BR> (setq a1 $value) <BR>)<BR> B.使用DOSLib输入密码的函数<BR>;;;********************************************************<BR>3.怎样可以实现不用工具中的选项,来调出屏幕菜单?<BR> <BR>;;屏幕菜单切换<BR>(defun C:pmmenu ()<BR> (vl-load-com)<BR> (setq sd<BR> (vla-get-display<BR> (vla-get-preferences (vlax-get-acad-object))<BR> )<BR> )<BR> (if (= (vla-get-displayscreenmenu sd) :vlax-true)<BR> (vla-put-displayscreenmenu sd :vlax-false)<BR> (vla-put-displayscreenmenu sd :vlax-true)<BR> )<BR> (vlax-release-object sd)<BR> (princ)<BR>)<BR>;;********************************************************<BR>4.怎么样用Vlisp来读取AutoCAD中搜索路径?<BR> (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))<BR> 或:<BR> (getenv "ACAD")<BR> 或:<BR> (acet-pref-supportpath-list)获取支持路径。<BR>;;********************************************************<BR>5.如何捕获列表框(list_box)的双击操作?<BR><BR>在edit_box,list_box,image_button,slider中,有一个$reason变量,用来<BR>表示你执行了什么操作 。在list_box中,双击的变量值是4。<BR>可在你的代码中加入判断:<BR>(action_tile "listbox" "(fun1).....")<BR>(defun fun1()<BR> .....<BR>(if (= $reason 4)<BR> .....<BR>)<BR> .....<BR>)<BR><BR>;;********************************************************<BR>6.如何用VLISP创建目录?<BR> 例如:<BR> A. (vl-mkdir "c:\\hqd9639")<BR><BR> B. (setq SYS (vlax-create-object "Scripting.FileSystemObject"))<BR> (setq FOLDER (vlax-invoke-method SYS 'CREATEFOLDER "c:\\hqd9639"))<BR><BR>;;********************************************************<BR>7.如何用(entsel)亮显选择物体?<BR> code: <BR> (if (setq ent (entsel "\nPick Object"))<BR> (progn<BR> (redraw (car ent) 3)<BR> ;;(redraw (car ent) 4);;;不亮显<BR> )<BR> )<BR>;;********************************************************<BR>8.如何隐藏选择实体?<BR> code: <BR> (if (setq ent (entsel "\nPick Object"))<BR> (progn<BR> (redraw (car ent) 1);;;隐藏实体<BR> ;;(redraw (car ent) 2);;;显示实体<BR> )<BR> )<BR>;;********************************************************<BR>9.状态栏进度条的设计示例<BR><BR>(defun c:hqd1 ()<BR> (acet-ui-progress "已经完成" 100)<BR> (setq x 0)<BR> (while (< x 100)<BR> (princ (strcat "\n" (itoa x)))<BR> (acet-ui-progress -1)<BR> (setq x (1+ x))<BR> )<BR> (acet-ui-progress)<BR>)<BR><BR>;;********************************************************<BR>10. 如何用VLISP获取所有配置文件(Profiles)列表?<BR> code:<BR> (defun c:getAllProfiles ()<BR> (setq a (vla-get-profiles (vla-get-preferences (vlax-get-acad-object))))<BR> (vla-GetAllProfileNames a 'hqd)<BR> (if hqd (setq lst (vlax-SafeArray->List hqd)))<BR> )<BR><BR>;;********************************************************<BR>11.如何在CAD中插入时间和日期?<BR>Code:<BR>(defun C:inttime()<BR> (setq pt0 (getpoint "\n请指定插入位置点 :")) <BR> (setq date0 (menucmd "M=$(edtime,$(getvar,date), DD.MM.YYYY hh:mm:ss)"))<BR> (command "text" "j" "m" pt0 5.0 0 date0)<BR> (princ)<BR>)<BR><BR>;;********************************************************<BR>12.如何用LISP打开WINDOWS的选择目录对话框?<BR><BR> 方法有5种:<BR> a.(setq bmpdir (xdrx_getdir "选择目录" "" "请选取目录" )) <BR> b.(dos_getdir "选择目录:" "c:\\")<BR> c.(setq picdir (Odcl_BrowseFolder "选取文件目录" ""))<BR> d.(acet-ui-pickdir "选择目录" "" "请指定目录")<BR> e:<BR> Code: <BR>(defun qf_getFolder (msg / WinShell shFolder path catchit)<BR> (vl-load-com)<BR> (setq winshell (vlax-create-object "Shell.Application"))<BR>; (vlax-dump-object winshell T)<BR> (setq shFolder (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1))<BR> (setq<BR> catchit (vl-catch-all-apply<BR> '(lambda ()<BR> (setq shFolder (vlax-get-property shFolder 'self))<BR> (setq path (vlax-get-property shFolder 'path))<BR> )<BR> )<BR> )<BR> (if (vl-catch-all-error-p catchit)<BR> nil<BR> path<BR> )<BR>)<BR><BR>;;******************************************************** </FONT><BR> <FONT size=2>;;例一<BR>(defun ett_ct()<BR>(initget "C ") ;关键字“C”及空格<BR>(setq s0 (entsel "\n设置颜色C / 选取文本:"))<BR>(cond<BR>( (= s0 "C") (ett_col)) ;转设置颜色子函数<BR>( (= s0 "") nil) ;空格退出<BR>( (and (= (type s0) 'LIST) ;选择实体<BR>(= (cdr (assoc 0 (entget (car s0)))) "TEXT") ;判别文本<BR>)<BR>... ;操作内容<BR>(ett_ct) ;编辑后返回选择<BR>)<BR>(t (ett_ct)) ;空选返回选择<BR>)<BR>)<BR>************************************************<BR>其中(setq s0 (entsel "\n设置颜色C / 选取文本:"))<BR>正确的写法应该是:(setq s0 (entsel "\n设置颜色C /< 选取文本>:"))<BR><BR><BR>;;例五<BR>(defun newerr (s) ;出错函数<BR>(if s<BR>(progn<BR>(term_dialog) ;使用对话框时使用<BR>(if olderr (setq *error* olderr)) ;出错函数恢复<BR>(if oldvar (setvar ... oldvar)) ;系统变量恢复<BR>(if olderr (setq *error* olderr)) ;出错函数恢复<BR>(command "_.undo" "_e") ;Undo编组结束<BR>)<BR>)<BR>(princ)<BR>)<BR>...<BR>我认为if语句是不必要的<BR><BR>另外可以直接<BR>(defun *error* (s) .....)<BR>这句(setq olderr *error* *error* newerr)改为 (setq olderr *error* )就可以了</FONT> <BR>
页:
[1]
2