객체를 다중 선택(ssget)하면 해당되는 객체와 같은 “레이어”인 객체를 모두 선택하는 리습과
같은 “블럭 이름”인 객체를 모두 선택하는 리습을 각각 만들고자합니다.
———- 같은 “블럭 이름” 선택 리습 ———-
(defun c:seb ( / e blk ss blkl)
(setq blkl “” ss (ssadd))
(while (setq e (entsel “nSelect a block name to select <exit>: “))
(setq blkl (strcat blkl “,” (vla-get-Effectivename (vlax-ename->vla-object (car e)))))
(princ (substr blkl 2))
);while
(setq blkl (substr blkl 2))
(if (> blkl “”) (setq ss (ssget “_X” (list (cons 2 blkl)(cons 0 “INSERT”)))))
(if (zerop (getvar “CMDACTIVE”))
(progn (sssetfirst ss ss)(princ “Use ‘P’ for this selection set: “)(princ))
ss
)
)
————————————————–
entsel로 객체를 선택하면 해당 객체와 같은 “블럭 이름”을 가진 객체는 모두 선택되는 리습입니다.
여러 객체 선택은 가능하지만 드래그가 아닌 하나씩 선택해야해서 불편함이 있습니다.
———- 같은 “레이어 이름” 선택 리습 ———-
(defun c:sss ( / ss sss L tn ent lay)
(setq ss (ssget “:L”))
(while (null ss)
(setq ss (ssget “:L”))
)
(setq L (sslength ss) tn 0)
(while (> L tn)
(setq lay (assoc 8 (entget (ssname ss tn))))
(sssetfirst nil (ssget “_X” (list lay)))
(setq tn (+ tn 1))
)
(princ)
)
————————————————–
기존 리습에서 ssget으로 수정한 리습입니다.
객체를 선택하면 해당 객체와 같은 “레이어 이름”을 가진 객체는 모두 선택됩니다.
ssget으로 변환하고, sssetfirst로 선택하는 것까지는 잘 되는데 문제는 여러 레이어 선택이 안됩니다.
각각 A레이어, B레이어의 객체를 모두 선택하게되면 A 또는 B 레이어의 객체만 선택됩니다.
테스트해보니 마지막 선택된 객체의 세트만 선택되는 듯한데 이걸 해결하지 못하고있습니다.
ssadd를 활용하면 될 것도 같은데 사용법을 몰라 헤매고 있습니다.
해결 방법을 아시는 분 계시면 알려주시면 감사하겠습니다.
두 리습 모두 작동 잘 됩니다.
덕분에 업무효율이 올라갔습니다 감사합니다 레드망고님!!