按层选中可多选
本帖最后由 adc 于 2011-5-10 10:51 编辑这个例子可以选中某个层内的物体,请问怎样改造为可以多选几个层 (setvar "cmdecho" 0)
(Defun C:cxx (/ CNAME ENT SS)
(and
;;
(setq ss (entsel "\n请选择需要选择的层中的一个物体: "))
(setq ent (entget (car ss)))
(setq cname (cdr (assoc 8 ent)))
(princ (strcat "\n选中了图层: \"" cname "\""))
;;
(princ "\n框选范围....")
(setq ss (ssget (list (cons 8 cname))))
;;
(sssetfirst NIL SS)
)
)
回复 adc 的帖子
(Defun C:cxx (/ CNAME ENT SS lay n)
(setq ss (ssget))
(repeat (setq n (sslength ss))
(setq ent (ssname ss (setq n (1- n))))
(setq la (cdr (assoc 8 (entget ent))))
(if (not (member la lay)) (setq lay (cons la lay)))
)
(setq cname (apply 'strcat (apply 'mapcar (cons 'strcat (list lay (mapcar '(lambda (x) ",") lay))))))
(princ (strcat "\n选中了图层: \"" cname "\""))
;;
(princ "\n框选范围....")
(sssetfirst nil (ssget "x" (list (cons 8 cname))))
)
本帖最后由 adc 于 2011-5-10 13:07 编辑
谢谢版主! 谢谢Gu_xl版主! (setq ss1 (ssget))
(setq i -1
lst '()
)
(while (setq s1 (ssname ss1 (setq i (1+ i))))
(setq ent (entget s1))
(setq lst (append lst (list (cdr (assoc 8 ent)))))
)
(setq
layer_fili
(apply 'strcat
(mapcar '(lambda (x) (strcat x ",")) lst)
)
)
(setq layer_fili (vl-string-right-trim "," layer_fili))
(setq filiter (list (cons 8 layer_fili)))
(setq ss2 (ssget filiter)) 感谢Gu_xl 版主及skynoon楼主分享经验 < 谢谢 ! > Gu版的好程序,学习了~ Gu_xl 发表于 2011-5-10 12:09 static/image/common/back.gif
回复 adc 的帖子
版主,这个好像不能选择范围啊,整张图的同层选都选择了。 Gu_xl 发表于 2011-5-10 12:09 static/image/common/back.gif
回复 adc 的帖子
版主,这个好像不能选择范围啊,整张图的同层选都选择了。 (sssetfirst nil (ssget (list (cons 8 cname))))
去掉那“x”就行
页:
[1]