选择所有打开的对象
大家好,我需要帮助。我试图做一个简单的操作,将实体选择指定的层上的所有对象添加到当前选择集,这样我就可以根据需要对它们进行操作。
到目前为止,我得到的是:
(defun c:qs ()
(setq obj (entsel "\nSelect object on desired layer: "))
(while (not obj) (setq obj (entsel "\nNo object selected, try again: ")))
(setq ent (entget (car obj))
lay (cdr (assoc 8 ent)))
(ssget "_X" '((8 . lay)))
(princ (strcat "\nEverything on layer " lay " selected."))
(princ))
但无论我多么努力,我总是会出错。
任何帮助都将不胜感激。 因此,我更进一步:
(defun c:qs (/ obj ent lay)
(setq obj (entsel "\nSelect object on desired layer: "))
(while (not obj) (setq obj (entsel "\nNo object selected, try again: ")))
(setq ent (entget (car obj))
lay (cdr (assoc 8 ent)))
(ssget "_X" (list (cons 8 lay)))
(princ (strcat "\nEverything on layer " lay " selected."))
(princ))
但它不会将所有内容添加到当前选择集,就像夹点出现时一样。
有什么想法吗? 没关系,找到了:
http://www.cadtutor.net/forum/showthread.php?t=30154
然后提出了这个:
(defun c:qs (/ obj ent lay)
(setq obj (entsel "\nSelect object on desired layer: "))
(while (not obj) (setq obj (entsel "\nNo object selected, try again: ")))
(setq lay (cdr (assoc 8 (entget (car obj)))))
(sssetfirst nil (ssget "_X" (list (cons 8 lay))))
(princ (strcat "\nEverything on layer " lay " selected."))
(princ)) 不错,如果你想的话,可以把它缩短成这个
(defun c:qs ( / e )
(while (not (setq e (car (entsel))))
(princ "\n** Come on, you gotta do better than that **"))
(sssetfirst nil (ssget "_X" (list (assoc 8 (entget e)))))
(princ))
你可能会发现这个链接很有趣。 很酷,谢谢。 你知道我该如何改变这一点吗?如果我已经选择了实体,它会将所选对象图层上的所有内容添加到选择集中吗?这样我可以多次运行它,并在多个层上选择所有内容。 为什么不呢?
(defun c:SA (/ pf ent ss)
;; Alan J. Thompson, 06.17.10
(setq pf (ssget "_I"))
(if (and (setq ent (car (entsel "\nSelect on layer: ")))
(setq ss (ssget "_X"
(list (assoc 8 (entget ent))
(if (eq 2 (getvar "cvport"))
(cons 410 "Model")
(cons 410 (getvar "ctab"))
)
)
)
)
)
((lambda (i)
(if (eq (type pf) 'PICKSET)
(while (setq e (ssname pf (setq i (1+ i))))
(ssadd e ss)
)
)
(sssetfirst nil ss)
)
-1
)
)
(princ)
) 很有魅力,非常感谢 不客气。
页:
[1]