查看: 1871|回复: 1

[转帖]AUTOLISP程序设计技巧

[复制链接]
2443725 发表于 2004-5-4 19:47 | 显示全部楼层 |阅读模式
<FONT face=宋体 size=2>俗话说"熟能生巧",在长期从事AUTOLISP程序设计的实践中,我总结出(当然也参考了其他朋友的经验)了部分编程技巧,仅供大家参考! <BR>1)加载程序之前应先判断文件是否已经被加载<BR><BR>在调用用户自己定义的函数之前,应先将包含该函数的文件调入内存(LOAD "文件").但如果每次调用前都加载该程序,则会浪费很多时间.因此判别文件是否已经调入内存,则是非常重要的,这种用法在菜单文件十分普遍<BR><BR>..<BR><BR>[RECTAN]( if (not rectan) (load "les2"));(rectan);<BR><BR>..<BR><BR>在文件内同样可以实现同样的检测<BR><BR>2)抑制函数运行后返回nil<BR><BR>在一个Autolisp函数运行结束后,它常会在命令行上返回一个nil,令人遗憾。其实只要我们问在该函数的最后一行加上(PRINC)语句后,即可抑制nil的产生。<BR><BR>当然如果对需要一个结果的函数,则不可采用此法。<BR><BR>3)几个自动执行函数<BR><BR>a)加载自动执行函数<BR><BR>定义<BR><BR>(defun s::startup()<BR><BR>...<BR><BR>)<BR><BR>一旦该函数在acad.lsp函数中定义,在autocad启动时,就会自动加载该函数.<BR><BR>b)存盘自动执行函数<BR><BR>定义<BR><BR>(defun S::save()<BR><BR>....<BR><BR>)<BR><BR>该函数与(s::startup)相似,在存储文件时将会被自动执行.例如:在保存文件时,对被保存文件生成备份文件等,就可能需要此功能文件<BR><BR>c)退出时自动执行文件<BR><BR>定义<BR><BR>(defun s::exit()<BR><BR>...<BR><BR>)<BR><BR>4)怎样判断两个实数相等<BR><BR>对于计算出来的实数,即使真的相等,但对计算机来说,其往往不是绝对相等(如2.00 与2.000就不等).因此判断其相等就需要采用差值方法<BR><BR>(equal expr1 expr2 [FUZZ])<BR><BR>其中任选项FUZZ指定表达式EXPR1 EXPR2 的最大允许差值.即如果实际差值小于FUZZ,则判断结果为真,反之为假.<BR><BR>(if (equal a b 0.001)<BR><BR>(prompt "These numbers are equal")<BR><BR>(prompt "These numbers are not equal")<BR><BR>)<BR><BR>5)取系统的环境变量<BR><BR>对编制自己的系统来说,最好将自己的所有编制程序集中在自己独立的目录下,如\acad\lisp等.然后在将该目录添加到ACAD环境中.<BR><BR>在自己编制的程序中,为了确保所要调用函数或文件在AUTOCAD的搜索路径下,就需要判断自己编制的程序目录是否在ACAD环境内.此时就要用(getnev)函数<BR><BR>如(setq nev (getenv "acad"))<BR><BR>其将返回ACAD系统环境,如"C:\\ACAD\\SUPPORT;C:\\ACAD\\FONTS;C:\\ACAD\\LISP"</FONT>
sjiang 发表于 2004-5-5 07:12 | 显示全部楼层
太深奥了,呵呵!


       

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | [加入论坛]

本版积分规则

化工技术网- 赠人玫瑰 手有余香 ( 苏ICP备14035884号 )

快速回复 返回顶部 返回列表