프로그램
캐드 분류

단일 선택 리습을 다중 선택 리습으로 바꾸고 싶습니다.

컨텐츠 정보

  • 308 조회
  • 3 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

객체를 다중 선택(ssget)하면 해당되는 객체와 같은 "레이어"인 객체를 모두 선택하는 리습과

같은 "블럭 이름"인 객체를 모두 선택하는 리습을 각각 만들고자합니다.
———- 같은 "블럭 이름" 선택 리습 ———-
(defun c:seb ( / e blk ss blkl)
 (setq blkl ""  ss (ssadd))
 (while (setq e (entsel "nSelect a block name to select : "))
  (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를 활용하면 될 것도 같은데 사용법을 몰라 헤매고 있습니다.
해결 방법을 아시는 분 계시면 알려주시면 감사하겠습니다.

관련자료

댓글 3

핷짜뇽님의 댓글

덕분에 업무효율이 올라갔습니다 감사합니다 레드망고님!!

바라떼님의 댓글

두 리습 모두 작동 잘 됩니다.

감사합니다. 정말 감사합니다!
여분필드1 여분필드2 여분필드3
전체 7,152 / 1 페이지
번호
제목
이름
알림 0