AutoLisp

오토캐드 AutoLisp 강좌 예제 - 객체에서 레이어(Layer)명을 가져온다.

데브프로그라 2025. 1. 26. 21:39
반응형

AutoCAD에서 AutoLISP를 사용하여 객체의 레이어를 가져오는 예제를 설명합니다.
다음은 코드 예제와 설명을 작성하였습니다.

코드 예제:

GetLayer.lsp
0.00MB

(defun c:GetLayer ( / ent layer)
  ; 사용자에게 객체 선택을 요청합니다.
  (setq ent (car (entsel "\n객체를 선택하세요: ")))

  ; 객체가 선택되었는지 확인합니다.
  (if ent
    (progn
      ; 선택한 객체의 레이어를 가져옵니다.
      (setq layer (cdr (assoc 8 (entget ent))))

      ; 레이어를 출력합니다.
      (princ (strcat "\n선택한 객체의 레이어: " layer))
    )
    ; 객체가 선택되지 않았을 경우 메시지를 출력합니다.
    (princ "\n객체가 선택되지 않았습니다.")
  )
  ; 프로그램 종료
  (princ)
)

GetLayer.lsp
0.00MB


세부 설명은 아래와 같습니다.
1. 함수 정의:
(defun c:GetLayer ( / )는 "GetLayer"라는 명령어를 정의합니다.

2. 객체 선택 요청:
(setq ent (car (entsel "\n객체를 선택하세요: "))):
entsel 함수는 사용자가 선택한 객체에 대한 엔티티 이름과 선택된 점을 반환합니다.
car 함수는 그 결과의 첫 번째 요소(즉, 엔티티 이름)를 추출합니다.
setq는 선택된 엔티티 이름을 ent 변수에 저장합니다.

3. 객체 선택 여부 확인:
(if ent:
ent 변수가 nil이 아니면 값이 존재합니다. 즉, 객체가 선택되었으면 then 절을 실행합니다.
4. 객체의 레이어 가져오기:
(setq layer (cdr (assoc 8 (entget ent)))):
entget 함수는 선택한 엔티티의 속성 리스트를 반환합니다.
assoc 함수는 속성 리스트에서 그룹 코드 8(레이어)을 찾습니다.
cdr 함수는 assoc 결과의 두 번째 요소(레이어 이름)를 반환합니다.
setq는 레이어 이름을 layer 변수에 저장합니다.

5. 레이어 출력:
(princ (strcat "\n선택한 객체의 레이어: " layer)):
strcat 함수는 문자열을 연결합니다.
princ 함수는 결과 문자열을 출력합니다.

6. 객체 선택 실패 메시지:
(princ "\n객체가 선택되지 않았습니다.")는 객체가 선택되지 않았을 경우 출력할 메시지입니다.

이 예제는 AutoLISP를 사용하여 선택된 객체의 레이어를 가져오고 출력하는 기본적인 방법을 설명합니다.

반응형

/* 코드복사 버튼 */ 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 */