KRBeckman 发表于 2022-7-6 10:59:18

选择所有打开的对象

大家好,我需要帮助。
 
我试图做一个简单的操作,将实体选择指定的层上的所有对象添加到当前选择集,这样我就可以根据需要对它们进行操作。
 
到目前为止,我得到的是:
 
(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))

 
但无论我多么努力,我总是会出错。
 
任何帮助都将不胜感激。

KRBeckman 发表于 2022-7-6 11:07:53

因此,我更进一步:
 
(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))

 
但它不会将所有内容添加到当前选择集,就像夹点出现时一样。
 
有什么想法吗?

KRBeckman 发表于 2022-7-6 11:15:14

没关系,找到了:
 
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))

Lee Mac 发表于 2022-7-6 11:20:25

不错,如果你想的话,可以把它缩短成这个
 

(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))

alanjt 发表于 2022-7-6 11:32:15

你可能会发现这个链接很有趣。

KRBeckman 发表于 2022-7-6 11:34:57

很酷,谢谢。

KRBeckman 发表于 2022-7-6 11:39:47

你知道我该如何改变这一点吗?如果我已经选择了实体,它会将所选对象图层上的所有内容添加到选择集中吗?这样我可以多次运行它,并在多个层上选择所有内容。

alanjt 发表于 2022-7-6 11:51:20

为什么不呢?
 
(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)
)

KRBeckman 发表于 2022-7-6 11:56:06

很有魅力,非常感谢

alanjt 发表于 2022-7-6 12:04:48

不客气。
页: [1]
查看完整版本: 选择所有打开的对象