AutoLisp

AutoLisp 강좌 예제 - 현재 레이어 (Layer) 이름 비교하기

데브프로그라 2025. 4. 14. 22:15
반응형

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)  ;; 명령어 종료 시 불필요한 반환값 방지
    )

    파일 다운로드

    Islayer.lsp
    0.00MB

     

    코드설명

     

    • (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"로 시작하는 레이어만 대상으로 도형 그리기, 속성 변경 등의 명령을 실행
    • 조건에 맞는 경우 자동으로 레이어를 변경하거나 생성하는 기능 추가

    이러한 확장을 통해 도면 작업의 효율성과 일관성을 높일 수 있으며, 팀 단위 작업에서도 표준을 강제하는 데 유용합니다.

    필요하다면 이런 기능 확장도 도와드릴 수 있습니다. 추가적인 작업 조건이나 원하는 기능이 있다면 알려주세요!

     

    반응형

    /* 코드복사 버튼 */ pre { position: relative; overflow: visible; } pre .copy-button { opacity: 0; position: absolute; right: 8px; top: 4px; padding: 6px 18px; color: rgb(255, 255, 255); background: rgba(255, 223, 0, 0.6); border-radius: 5px; transition: opacity .3s ease-in-out; } pre:hover .copy-button { opacity: 1; } pre .copy-button:hover { color: #eee; transition: all ease-in-out 0.3s; } pre .copy-button:active { color: #33f; transition: all ease-in-out 0.1s; } .copy-message:before { content: attr(copy-message); position: absolute; left: -95px; top: 0px; padding: 6px 18px; color: #fff; background: rgba(255, 223, 0, 0.6); border-radius: 5px; } /* 코드복사 버튼 END */