再---请教如何用LISP的SSGET函数选中“非锁定层”的实体
在LSP程序中用SSGET函数选择物体准备处理,锁定层的物体不需要也不能被改动,但是却被加入选择集并且可以被redraw函数重画,如何排除锁定层的物体使之不被选中?回复: (ssget ":L");Rejects locked layers
不行啊,ACAD不接受这个函数
Command: (ssget ":L")
*Cancel*
请讲详细些,谢谢! 可以啊,选择时锁定层物体不亮显, 可以先用命令select,选择all,然后用ssget
(command "_.select" "all" "")
(setq ss (ssget "p")) To meflying:
您好, 你的方法好好的. 用(command "_.select" "all" "")就全部選非鎖定層的了. 很合適樓主選到非鎖定層的全部實體了. 呵呵 :D (ssget ":L")好像可以的吧?
不过如何不可以的话可以自己做一个过滤表的吧,这样不是快很多吗?
用COMMAND太慢了吧 过滤表我也想过,好象写不出来。。。。
我测试过,简单的command命令和普通函数的运行时间差不多 那我放一个我写的过滤表:)
;取得非锁定层
(defun getunlocklayer(/ layer lay_list )
(setq layer (tblnext "layer" T))
(if (= (cdr (assoc 70 layer) ) 0)
(setq lay_list (list (cons 8 (cdr (assoc 2 layer)))))
)
(setq layer (tblnext "layer"))
(while layer
(if (= (cdr (assoc 70 layer) ) 0)
(setq lay_list (append lay_list (list (cons 8 (cdr (assoc 2 layer))))))
)
(setq layer (tblnext "layer"))
)
(append (cons (cons -4"<OR") lay_list) (list (cons -4"OR>")))
)
我还以为我刚刚没回复,原来有两个贴晕啊
例:
(ssget (getunlocklayer)) 这个到是没想到,动态写过滤表,好! 简化一下程序:
(defun getLayer ( / layer lay_list)
(while (setq layer (tblnext "layer" (not layer)))
(if (= (cdr (assoc 70 layer)) 0)
(setq lay_list (append lay_list (list (cons 8 (cdr (assoc 2 layer))))))
)
)
(append (cons (cons -4"<OR") lay_list) (list (cons -4"OR>")))
)
查看(LUCAS 是我)
http://www.xdcad.net/forum/showthread.php?s=&postid=380504#post380504