cad 二次开发 lisp
hao3ren
hao3ren Lv.12
2005年06月23日 00:02:03
只看楼主

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

有些编程者编程时没有考虑到用户环境的不同,经常所编制的程序能运行在自制的模板图形上,而不能在用户的图形中运行,这种情况也是我经常碰到的。

最容易碰到的是图层。程序中,经常会使用特定的图层来放置程序所生成的对象,比如说你将图层设置为“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")
免费打赏
leesnow
2005年06月23日 08:54:59
2楼
hehe,现在正对LISP感兴趣,以后多帖这些,最好是做个连续专题,放到一个帖子里面,讨论用另外的帖子,保持清洁!
回复
langtaosha
2005年07月01日 11:38:24
3楼
我想问一下,这个LISP怎么加载的,每次加载都说列表有问题,是不是程序本身不完整的.
还是要加一个什么接口的程序的
回复
sunissky
2005年07月02日 10:54:19
4楼
有时候作为中间处理用时,可以把某些特征值保存,然后再释放。
回复
shejiyuan0110
2005年09月05日 20:18:21
5楼
我现在也对LISP感兴趣 楼主可有关于LISP的教程 我一直找都没找到
如果楼主找到了 能不能发到我电子邮箱里去
邮箱地址zhangfly0110@163.com
谢谢了
回复

相关推荐

APP内打开