当前位置:主页   - 电脑 - 图形图像 - AutoCAD
AUTOLISP程序设计技巧
来源:网络   作者:   更新时间:2011-12-27
收藏此页】    【字号    】    【打印】    【关闭

  俗话说"熟能生巧",在长期从事AUTOLISP程序设计的实践中,我总结出(当然也参考了其他朋友的经验)了部分编程技巧,仅供大家参考!

  1)加载程序之前应先判断文件是否已经被加载

  在调用用户自己定义的函数之前,应先将包含该函数的文件调入内存(LOAD "文件").但如果每次调用前都加载该程序,则会浪费很多时间.因此判别文件是否已经调入内存,则是非常重要的,这种用法在菜单文件十分普遍

  ..

  [RECTAN]( if (not rectan) (load "les2"));(rectan);

  ..

  在文件内同样可以实现同样的检测

  2)抑制函数运行后返回nil

  在一个Autolisp函数运行结束后,它常会在命令行上返回一个nil,令人遗憾。其实只要我们问在该函数的最后一行加上(PRINC)语句后,即可抑制nil的产生。

  当然如果对需要一个结果的函数,则不可采用此法。

  3)几个自动执行函数

  a)加载自动执行函数

  定义

  (defun s::startup()
...
)

  一旦该函数在acad.lsp函数中定义,在autocad启动时,就会自动加载该函数.

  b)存盘自动执行函数

  定义

  (defun S::save()
....
)

  该函数与(s::startup)相似,在存储文件时将会被自动执行.例如:在保存文件时,对被保存文件生成备份文件等,就可能需要此功能文件

  c)退出时自动执行文件 定义

  (defun s::exit()
...
)

  4)怎样判断两个实数相等

  对于计算出来的实数,即使真的相等,但对计算机来说,其往往不是绝对相等(如2.00 与2.000就不等).因此判断其相等就需要采用差值方法

  (equal expr1 expr2 [FUZZ])

  其中任选项FUZZ指定表达式EXPR1 EXPR2 的最大允许差值.即如果实际差值小于FUZZ,则判断结果为真,反之为假.

  (if (equal a b 0.001)
(prompt "These numbers are equal")
(prompt "These numbers are not equal")
)

  5)取系统的环境变量

  对编制自己的系统来说,最好将自己的所有编制程序集中在自己独立的目录下,如\acad\lisp等.然后在将该目录添加到ACAD环境中.

  在自己编制的程序中,为了确保所要调用函数或文件在AUTOCAD的搜索路径下,就需要判断自己编制的程序目录是否在ACAD环境内.此时就要用(getnev)函数

  如(setq nev (getenv "acad"))

  其将返回ACAD系统环境,如"C:\\ACAD\\SUPPORT;C:\\ACAD\\FONTS;C:\\ACAD\\LISP"

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明