AutoCAD에서는 작업 중인 객체들이 특정 레이어에 속해 있으며, 이 레이어의 이름에 따라 도면 요소를 분류하거나 제어할 수 있습니다. 때로는 특정 접두어로 시작하는 레이어만을 대상으로 특정 작업을 수행하고자 할 때가 있습니다.
예를 들어, 이름이 "test"로 시작하는 모든 레이어에서만 작업을 하거나, 해당 레이어가 활성화되어 있을 때만 명령을 실행하도록 제한할 수도 있습니다. 이런 조건을 확인하기 위해 AutoLISP을 사용할 수 있습니다.
다음은 현재 활성화된 레이어의 이름(현재 레이어 cLayer)이 "test"로 시작하는지를 확인하는 간단한 AutoLISP 함수입니다. 이 코드를 통해 사용자는 현재 어떤 레이어가 활성화되어 있는지를 확인하고, 그 레이어가 특정 규칙(여기서는 "test"로 시작하는지)에 부합하는지 판단할 수 있습니다.

목 차
코드
(defun c:IsLayerName ( / currentLayer )
;; 현재 활성화된 레이어 이름을 시스템 변수 "clayer"로부터 가져옴
(setq currentLayer (getvar "clayer"))
;; 레이어 이름이 "test"로 시작하는지 확인
(if (wcmatch currentLayer "test*")
(princ (strcat "\n현재 레이어 '" currentLayer "' 는 'test'로 시작합니다."))
(princ (strcat "\n현재 레이어 '" currentLayer "' 는 'test'로 시작하지 않습니다."))
)
(princ) ;; 명령어 종료 시 불필요한 반환값 방지
)
파일 다운로드
코드설명
- (defun c:IsLayerName ...)
이 줄은 사용자 정의 명령어인 IsTestLayer를 정의합니다. AutoCAD의 명령창에 IsTestLayer를 입력하면 이 함수가 실행됩니다. - (setq currentLayer (getvar "clayer"))
getvar 함수를 이용해 현재 활성화된 레이어의 이름을 가져옵니다. "clayer"는 시스템 변수로, 현재 레이어의 이름을 반환합니다. - (wcmatch currentLayer "test*")
wcmatch 함수는 문자열 패턴 일치를 확인하는 함수입니다. 여기서는 현재 레이어 이름이 "test"로 시작하는지를 "test*" 패턴을 이용해 확인합니다. *는 와일드카드로 어떤 문자든 0개 이상 포함될 수 있음을 의미합니다. - (princ (strcat ...))
사용자에게 메시지를 출력합니다. 현재 레이어 이름과 함께 "test"로 시작하는지 여부를 알려줍니다. - (princ)
마지막에 princ 함수를 호출하는 이유는 함수 실행 후 불필요한 반환값이 명령창에 출력되지 않도록 하기 위함입니다.
사용방법
위 코드를 .lsp 파일로 저장합니다. 예: IsTestLayer.lsp
- AutoCAD에서 APPLOAD 명령어를 입력하여 이 LISP 파일을 로드합니다.
- 명령어 입력창에 IsTestLayer를 입력합니다.
- 현재 활성화된 레이어가 "test"로 시작하면 관련 메시지가 출력되며 T를 반환합니다. 그렇지 않으면 "test"로 시작하지 않는다는 메시지와 함께 nil을 반환합니다.
확장 가능성
이 함수는 단순히 조건을 확인하는 용도 외에도 확장하여 활용할 수 있습니다. 예를 들어:
- "test"로 시작하지 않으면 특정 작업을 차단하거나 경고 메시지를 표시
- "test"로 시작하는 레이어만 대상으로 도형 그리기, 속성 변경 등의 명령을 실행
- 조건에 맞는 경우 자동으로 레이어를 변경하거나 생성하는 기능 추가
이러한 확장을 통해 도면 작업의 효율성과 일관성을 높일 수 있으며, 팀 단위 작업에서도 표준을 강제하는 데 유용합니다.
필요하다면 이런 기능 확장도 도와드릴 수 있습니다. 추가적인 작업 조건이나 원하는 기능이 있다면 알려주세요!
'AutoLisp' 카테고리의 다른 글
AutoLisp 강좌 예제- AutoCAD에서 선택한 객체 Layer로 현재(Current) 레이어로 변경하기 (0) | 2025.02.01 |
---|---|
오토캐드 AutoLisp 강좌 예제 - 객체에서 레이어(Layer)명을 가져온다. (0) | 2025.01.26 |
[AutoLisp]오토캐드 AutoLisp 강좌 예제 - 선택한 블럭(Block)들의 위치를 출력하기 (1) | 2024.10.09 |
[AutoLisp]오토캐드 AutoLisp 강좌 예제 - 오토리습을 이용한 사각형(Rectang) 만들기 예제 (0) | 2024.05.25 |
[AutoCAD]AutoLisp 강좌 예제 - AutoCAD DXF 객체정보 확인하기 (0) | 2024.02.23 |