快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

AUTOLISP程序设计技巧

    俗话说"熟能生巧",在长期从事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)取系统的环境变量

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

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

    如(setq nev (getenv "acad"))

    其将返回ACAD系统环境,如"C:;C:;C:"


返回类别: AuotoCAD教程
上一教程: AutoCAD中特定角度及长度捕获的实现方式
下一教程: 为DWG文件“减肥”

您可以阅读与"AUTOLISP程序设计技巧"相关的教程:
· 使用VBA创建应用程序
· 使用Visual LISP创建简朴的LISP应用程序
· CAD中自动画管线图的LISP程序
· AUTOCAD系列批量处理程序
· 使用Visual C++创建ARX程序
    微笑服务 优质保证 索取样品