- 积分
- 3459
- 明经币
- 个
- 注册时间
- 2010-9-4
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
我原来的想法是将某些对象切换到当前激活的图层,如果运行命令前未选择对象,则需要选择对象.
(defun c:ttt ( / )
(if (or (setq ss (cadr (ssgetfirst))) (setq ss (ssget)))
(progn
(setq layname (getvar "clayer"))
(command ".chprop" ss "" "LA" layname "");;;切换对象图层
))
)
这样写的话如果先执行后选择,没问题,如果先选择后执行会提示command 函数错误,需要重新选择对象.
然后分步执行, (setq ss (cadr (ssgetfirst)))能正确获得选择集,用(redraw (ssname ss 0) 3)也能确定就是想要的选择集.
然后
(defun c:tt1 ( / )
(setq ss (ssget))
(setq layname (getvar "clayer"))
(command ".chprop" ss "" "LA" layname "");;;切换对象图层
)
这样可以正常执行,也能实现先选择后执行.
所以是因为ssgetfirst获得的选择集不能用于command么?如果是这样ssgetfirst的具体作用是什么呢?
我知道的还有一个用法
(and (setq ss2 (cadr (ssgetfirst)))
(setq ss2 (ssget)))
如果当前有选择,那么将选择的内容做成选择集,否则跳过ssget函数,
|
|