在程序中实现图层的检查及新建
pcy520
pcy520 Lv.2
2004年11月12日 18:34:20
只看楼主

在程序中实现图层的检查及新建 有些编程者编程时没有考虑到用户环境的不同,经常所编制的程序能运行在自制的模板图形上,而不能在用户的图形中运行,这种情况也是我经常碰到的。最容易碰到的是图层。程序中,经常会使用特定的图层来放置程序所生成的对象,比如说你将图层设置为“3”层,写出的程序如下:(setq oldLayer ( getvar "clayer")) ;将当前图层保存起来,以便以后的恢复

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

有些编程者编程时没有考虑到用户环境的不同,经常所编制的程序能运行在自制的模板图形上,而不能在用户的图形中运行,这种情况也是我经常碰到的。
最容易碰到的是图层。程序中,经常会使用特定的图层来放置程序所生成的对象,比如说你将图层设置为“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
2004年11月22日 12:47:47
2楼
介绍好详细啊,谢谢楼主。
回复

相关推荐

APP内打开