캐드 AutoCAD AutoLisp 강좌 예제 - 입력한 레이어(Layer) 객체 모두 선택하기

캐드 AutoCAD AutoLisp 강좌 예제 - 입력한 레이어(Layer) 객체 모두 선택하기

AutoCAD를 사용하다보면 간편하게 특정 레이어의 모든 객체를 선택하고 싶을 때가 있습니다.
AutoCAD의 filter 명령을 이용하면 되지만 좀 복잡하지요?

간단하게 AutoLisp을 이용하여, 입력한 레이어의 객체를 모두 선택하는 기능을 만들어 보았습니다.


AutoLisp 코드

(defun c:SelLayer()

  (setq layerName (getstring "\n선택할 레이어 이름 입력: ")) ; 사용자로부터 레이어 이름 입력 받기

  (setq ss (ssget "X" (list (cons 8 layerName)))) ; 입력받은 레이어 이름으로 객체 선택

  (if ss

    (progn

      (command "_.select" ss) ; 선택한 객체를 선택 명령으로 전송

      ;;(princ (strcat "\n" (itoa (sslength ss)) "개의 객체가 선택되었습니다.")) ; 선택된 객체 수 출력

    )

    (princ "\n선택된 객체가 없습니다.") ; 객체가 없을 경우 메시지 출력

  )

  (princ) ; 명령 종료

)

코드설명

1. (defun c:SelLayer(): 새로운 명령어 SelLayer를 정의합니다.
  사용자가 이 명령을 호출할 수 있습니다.

2. (setq layerName (getstring "\n선택할 레이어 이름을 입력하세요: ")):
   getstring 함수를 사용하여 사용자로부터 레이어 이름을 입력받습니다.
   입력된 문자열은 layerName 변수에 저장됩니다.

3. (setq ss (ssget "X" (list (cons 8 layerName)))): ssget 함수를 사용하여 모든 객체를 검색합니다.
   "X"는 전체 선택을 의미하며, (list (cons 8 layerName))는 레이어 필터링 조건을 설정합니다.   
   여기서 8은 레이어 이름을 나타내는 코드입니다.

4. (if ss ...): 선택된 객체가 있는지 확인합니다. ss가 존재하면 선택된 객체가 있다는 의미입니다.

5. (command "_.select" ss): 선택된 객체를 AutoCAD의 선택 명령으로 전송합니다.

6. (princ (strcat "\n" (itoa (sslength ss)) "개의 객체가 선택되었습니다.")): 선택된 객체의 수를 출력합니다. sslength 함수로 선택된 객체의 수를 구하고, 이를 문자열로 변환하여 메시지를 출력합니다.

7. (princ "\n선택된 객체가 없습니다."): 선택된 객체가 없을 경우 사용자에게 알림 메시지를 출력합니다.

8. (princ): 명령을 종료합니다.


사용 방법:
1. 위의 코드를 원하는이름.lsp 파일을 만들어 저장합니다.
2. Appload 명령을 이용하여, 리습파일을 로드합니다.
3. 명령창에 "SelLayer" 명령을 입력하면, 레이어명을 입력하면, 도면의 모든 레이어가 선택이 완료 됩니다.