土木在线论坛 \ 建筑设计 \ CAD下载及教程 \ 在程序中实现图层的检查及新建

在程序中实现图层的检查及新建

发布于:2004-11-12 18:34:12 来自:建筑设计/CAD下载及教程 [复制转发]
在程序中实现图层的检查及新建

有些编程者编程时没有考虑到用户环境的不同,经常所编制的程序能运行在自制的模板图形上,而不能在用户的图形中运行,这种情况也是我经常碰到的。
最容易碰到的是图层。程序中,经常会使用特定的图层来放置程序所生成的对象,比如说你将图层设置为“3”层,写出的程序如下:

(setq oldLayer ( getvar "clayer")) ;将当前图层保存起来,以便以后的恢复
(setvar "clayer" "3") ;将图层“3”转换为当前图层

这时,如果用户当前图形中在存在“3”图层,程序就会出错并中断。为此,你首先应判断“3”图层是否存在,采用以下的聚光灯中判断图层的存在:

(tblobjname "layer" "3")

这时,如果图层“3”确实不存在时,则可用以下函数内容建立该名称的图层:

(entmake (list
’(0 . "LAYER")
’(100 . "AcDbSymbolTableRecord")
’(100 . "AcDbLayerTableRecord")
’(6 . "CONTINUOUS")
’(62 . 3)
’(70 . 0)
’(2. "3")
)
)

这样就可以建立新图层,完整的程序如下:

(setq old_lay (getvar "clayer"))
(if (=(tblobjname "LAYER" "3") nil)
(progn
(entmake (list
’(0 . "LAYER")
’(100 . "AcDbSymbolTableRecord")
’(100 . "AcDbLayerTableRecord")
’(6 . "CONTINUOUS")
’(62 . 3)
’(70 . 0)
(cons 2 "3")
)
)
)
)
(setvar "clayer" "3")

可能有人会说,使用command转换及新建图层不是更加简单吗?但我总认为其它函数能完成的动作,最好不要使用“command”函数,因为可能下一个版本中,command所引用的命令内容会有变化(如功能的加强),使用程序出错。就象R12、R13、R14版中的清理命令[Purge]就各不相同。
<回到顶部>

 

将一个大程序分成多个小程序以简化编写过程

初学者常常会将所有的功能都编入到一个程序(或函数)中。这不仅会使程序冗长难读,也会给修改和重用带来麻烦。AutoLISP是一种函数式的语言,因此,将一个单独的功能编制成一个函数可以使程序简明易读。对于重复调用次数较多的程序,应编制一个通用函数并在初始化时加载到环境中,以便于调用。

<回到顶部>

将自己编制的程序或函数的调用放在菜单系统中

不要让自己编制的程序只能够从命令行调用,要将它们安排在菜单中以方便用户的调用。

<回到顶部>

不要将自己编制的程序全都放入ACAD.LSP文件中

一些程序只喜欢将自己编写的程序或函数放在ACAD.LSP文件中,因为该文件可以在AutoCAD启动时装载到环境中。这样做的确可以方便自己编制函数的调用。不过,如果ACAD.LSP文件太大,则调入每个绘图的时间将变长,因为内存减小了。

事实上,ACAD.LSP是用来存放通用函数的,只有频率很高的函数才应放入到ACAD.LSP中。例如:用户库函数通常都放在ACAD.LSP中,或在ACAD.LSP中加载。

<回到顶部>

加载文件前应判别程序是否已被加载

在调用用户自己定义的函数之前,应将与之相关的应用程序加载到AutoCAD环境中,否则AutoCAD会报告不存在该函数。当一个函数会被多次调用时,如果每次调用之前都加载一次文件,则会浪费很多时间,因为一个文件只需加载一闪即可。这时,判别一下某文件是否已经装入是非常必要的,这种用法在菜单文件的语句中很常见,例如:

...

[技术要求](if(not jsyq)(load"jsyq"));(jsyq);

...

这里我们假定jsyq是文件jsyq.lsp中的一个函数(不是一个变量),在调用函数(jsyq)之前,(if not...)语句首先判断一下该函数是否已经存在。如果不存在,就加载相关文件jsyq.lsp;否则说明步过加载语句。

<回到顶部>

为自己的应用程序建立一个单独的目录

不要将自己的应用程序放在AutoCAD软件包所在的目录下,这样不仅会扰乱软件包中文件的排列,也不便于管理。通常开发者会建立一个单独的目录来旋转自己的应用程序。此建立目录的名字应尽量避免可能会因安装 AutoCAD或其它第三方软件包而产生的冲突。

<回到顶部>

尽量减小应用程序
  • stephen66
    stephen66 沙发
    介绍好详细啊,谢谢楼主。
    2004-11-22 12:47:22

    回复 举报
    赞同0
这个家伙什么也没有留下。。。

CAD下载及教程

返回版块

52.08 万条内容 · 658 人订阅

猜你喜欢

阅读下一篇

CAD光标工具

当AutoCAD的光标移动到实体上时,Periscope在一个小的弹出窗口中显示一个实体的信息,可用于AutoCAD R14和AutoCAD 2000。

回帖成功

经验值 +10