AutoLISP로 실제 도면을 다루려면 먼저 사용자가 선택한 객체를 코드에서 가져오는 방법을 알아야 합니다.
객체 하나를 선택할 때는 entsel을 사용할 수 있고, 선택한 객체의 종류나 레이어 같은 정보를 확인하려면 entget과 assoc를 함께 사용하면 됩니다.
이번 글에서는 객체 하나를 선택해 객체 유형과 레이어를 확인하는 INFO 명령을 직접 만들어보겠습니다.
AutoLISP 사용자 명령을 처음 만들어보는 단계라면 아래 글부터 확인해도 좋습니다.
오토캐드 리습 만들기, 첫 AutoLISP 명령어 작성부터 LSP 실행까지
entsel로 객체 하나 선택하기
AutoLISP에서 entsel은 사용자가 화면에서 객체 하나를 선택하도록 할 때 사용하는 함수입니다.
가장 기본적인 형태는 다음과 같습니다.
(entsel "\n객체를 선택하세요: ")
이 코드가 실행되면 AutoCAD 명령창에
객체를 선택하세요:
라는 메시지가 나타나고 사용자가 객체 하나를 선택할 수 있습니다.
객체를 정상적으로 선택하면 entsel은 대략 다음과 같은 형태의 리스트를 반환합니다.
(<Entity name: ...> (100.0 50.0 0.0))
여기에는 두 가지 정보가 들어 있습니다.
첫 번째 값
→ 선택한 객체의 Entity name
두 번째 값
→ 사용자가 객체를 선택할 당시의 pick point
객체를 선택하지 않으면 nil이 반환될 수 있으므로 실제 리습을 만들 때는 선택 여부도 함께 확인하는 것이 좋습니다.
car와 cadr로 선택 결과를 나눠볼까요?
entsel이 반환한 리스트에서 각각의 값을 꺼낼 때는 car와 cadr를 사용할 수 있습니다.
먼저 선택 결과를 변수에 저장합니다.
(setq sel (entsel "\n객체를 선택하세요: "))
Entity name은 다음처럼 가져올 수 있습니다.
(setq ent (car sel))
car는 리스트의 첫 번째 요소를 가져오기 때문에 선택한 객체의 Entity name이 ent에 저장됩니다.
선택점을 확인하려면 cadr를 사용할 수 있습니다.
(setq pt (cadr sel))
이때 한 가지 주의할 점이 있습니다.
cadr로 얻는 좌표는 선택한 객체의 정확한 형상 좌표를 의미하는 것은 아닙니다.
사용자가 객체를 선택할 당시의 pick point, 즉 크로스헤어 위치에 해당합니다.
따라서 LINE의 정확한 시작점이나 CIRCLE의 중심점 같은 객체 자체의 좌표를 알고 싶다면 entget으로 객체 데이터를 확인해야 합니다.

Entity name은 무엇인가요?
entsel로 객체를 선택하면 다음과 비슷한 값이 반환됩니다.
<Entity name: ...>
이 값은 AutoLISP에서 해당 객체를 참조하기 위해 사용하는 Entity name입니다.
이 Entity name을 이용해 객체 정보를 가져오거나 수정하는 등 여러 작업을 할 수 있습니다.
다만 Entity name은 현재 AutoCAD 편집 세션에서 객체를 참조하기 위한 값입니다.
도면을 닫았다가 다시 열어도 동일하게 유지되는 영구적인 객체 ID는 아닙니다.
장기간 객체를 식별해야 하는 경우에는 Handle 등 다른 정보를 함께 고려해야 합니다.
entget으로 객체 정보를 가져오는 방법
Entity name을 얻었다면 entget을 사용해 객체 데이터를 가져올 수 있습니다.
(setq data (entget ent))
entget을 실행하면 해당 객체의 정보가 DXF 그룹 코드가 포함된 association list 형태로 반환됩니다.
예를 들어 LINE 객체라면 일부 정보가 다음과 비슷하게 나타날 수 있습니다.
(0 . "LINE")
(8 . "0")
(10 100.0 50.0 0.0)
(11 200.0 50.0 0.0)
처음 보면 복잡해 보이지만 자주 사용하는 코드 몇 개만 알면 어렵지 않습니다.
DXF 그룹 코드 0·8·10은 무엇을 의미할까요?
AutoCAD 객체 데이터에서는 숫자로 된 DXF 그룹 코드를 사용합니다.
초보자가 먼저 알아두면 좋은 코드는 다음과 같습니다.
그룹 코드 0
→ 객체 유형
예:
(0 . "LINE")
이면 선택한 객체가 LINE이라는 뜻입니다.
그룹 코드 8
→ 객체가 속한 레이어
예:
(8 . "WALL")
이면 WALL 레이어에 있는 객체라는 뜻입니다.
그룹 코드 10
→ 객체의 주요 좌표
단, 그룹 코드 10의 의미는 객체 종류에 따라 달라질 수 있습니다.
예를 들어
LINE에서는 시작점
CIRCLE에서는 중심점
TEXT에서는 삽입점
등을 나타낼 수 있습니다.
따라서 entsel이 반환하는 pick point와 entget의 DXF 코드 10 좌표는 서로 다른 개념입니다.

assoc로 원하는 정보만 찾아보기
entget 결과에는 많은 정보가 들어 있습니다.
그중 필요한 DXF 그룹 코드만 찾을 때 assoc를 사용할 수 있습니다.
예를 들어 객체 유형을 찾으려면 다음처럼 작성합니다.
(assoc 0 data)
결과는 다음처럼 나올 수 있습니다.
(0 . "LINE")
레이어를 찾으려면:
(assoc 8 data)
결과는 다음과 비슷합니다.
(8 . "WALL")
즉 assoc는 association list에서 원하는 그룹 코드의 항목을 찾아주는 역할을 합니다.
cdr로 실제 값만 꺼내기
assoc로 찾은 결과에는 그룹 코드와 실제 값이 함께 들어 있습니다.
예를 들어
(assoc 0 data)
결과가
(0 . "LINE")
이라면 실제로 필요한 값은 "LINE"입니다.
이때 cdr을 사용합니다.
(cdr (assoc 0 data))
결과:
LINE
레이어도 같은 방식으로 가져올 수 있습니다.
(cdr (assoc 8 data))
결과:
WALL
따라서 객체 정보를 가져올 때 자주 보게 되는 패턴이 바로
(cdr (assoc 그룹코드 data))
입니다.
객체 유형과 레이어를 표시하는 INFO 리습 만들기
지금까지 배운 내용을 이용해 선택한 객체의 유형과 레이어를 명령창에 표시하는 리습을 만들어보겠습니다.
(defun c:INFO ( / sel ent data objtype layer )
(if (setq sel (entsel "\n객체를 선택하세요: "))
(progn
(setq ent (car sel)
data (entget ent)
objtype (cdr (assoc 0 data))
layer (cdr (assoc 8 data))
)
(princ (strcat "\n객체 유형: " objtype))
(princ (strcat "\n레이어: " layer))
)
(princ "\n객체가 선택되지 않았습니다.")
)
(princ)
)
파일을 예를 들어
info.lsp
로 저장하고 APPLOAD로 불러온 뒤 명령창에
INFO
를 입력합니다.
객체 하나를 선택하면 다음과 비슷한 결과를 확인할 수 있습니다.
객체 유형: LINE
레이어: WALL
선택한 객체가 CIRCLE이라면
객체 유형: CIRCLE
처럼 객체에 맞는 정보가 표시됩니다.

왜 지역변수를 사용하는 것이 좋을까요?
완성 코드의 첫 줄을 보면 다음과 같이 작성했습니다.
(defun c:INFO ( / sel ent data objtype layer )
/ 뒤에 있는
sel
ent
data
objtype
layer
는 이 함수 안에서만 사용할 지역변수입니다.
지역변수로 선언하지 않고 여러 리습에서 같은 변수 이름을 사용하면 이전 함수에서 저장된 값이 남거나 다른 리습과 변수 이름이 충돌할 가능성이 있습니다.
따라서 실제 업무용 리습을 만들 때는 함수 내부에서만 사용하는 변수를 가능한 한 지역변수로 선언하는 습관을 들이는 것이 좋습니다.
객체를 선택하지 않았을 때는 어떻게 처리할까요?
다음 코드가 중요한 이유가 있습니다.
(if (setq sel (entsel "\n객체를 선택하세요: "))
사용자가 객체를 정상적으로 선택하면 sel에 결과가 저장되고 아래 코드가 실행됩니다.
반대로 객체를 선택하지 않았다면 entsel이 nil을 반환할 수 있습니다.
이때 바로
(car sel)
을 실행하면 오류가 발생할 수 있습니다.
그래서 if로 먼저 선택 성공 여부를 확인합니다.
객체를 선택하지 않은 경우에는
(princ "\n객체가 선택되지 않았습니다.")
를 실행하도록 만들어두었습니다.
이처럼 사용자 입력이 필요한 리습에서는 사용자가 선택하지 않았을 때 어떻게 처리할지도 함께 작성하는 것이 중요합니다.
DXF 그룹 코드 62는 색상 정보인가요?
DXF 그룹 코드 62는 ACI 색상 번호와 관련된 정보입니다.
예를 들어 객체에 직접 색상이 지정돼 있다면 entget 결과에서 다음과 같은 값이 나타날 수 있습니다.
(62 . 1)
하지만 모든 객체의 entget 결과에 그룹 코드 62가 항상 존재하는 것은 아닙니다.
객체가 BYLAYER 색상을 사용하고 있다면 해당 항목이 생략될 수 있고, True Color를 사용하는 객체에서는 그룹 코드 420 등의 정보가 함께 관련될 수 있습니다.
따라서 초보 단계에서는 먼저
0 → 객체 유형
8 → 레이어
10 → 주요 좌표
정도를 익힌 뒤 필요한 DXF 그룹 코드를 하나씩 추가해서 사용하는 것이 좋습니다.
블록 안의 객체도 entsel로 선택할 수 있을까요?
entsel은 일반적인 객체 하나를 선택할 때 사용하기 좋습니다.
하지만 블록처럼 여러 객체가 하나의 복합 객체 안에 포함돼 있을 때 블록 내부의 개별 객체 정보까지 직접 확인하려면 nentsel 또는 nentselp가 더 적합할 수 있습니다.
처음 AutoLISP를 배우는 단계에서는 일반 객체를 entsel로 선택하는 방법부터 익히고, 이후 블록 내부 객체까지 다뤄야 할 때 nentsel을 살펴보면 됩니다.
AutoCAD LT에서도 entsel과 entget을 사용할 수 있나요?
Windows용 AutoCAD LT에서도 기본적인 AutoLISP 기능을 사용할 수 있습니다.
AutoCAD LT for Windows는 AutoLISP를 지원하므로 이번 글에서 사용한
entsel
entget
assoc
cdr
등의 기본적인 객체 조회 예제를 연습할 수 있습니다.
다만 일반 AutoCAD와 AutoCAD LT의 모든 AutoLISP 기능이 완전히 동일한 것은 아니므로 복잡한 리습이나 특정 기능을 사용할 때는 지원 여부를 확인하는 것이 좋습니다.
AutoCAD LT for Mac은 AutoLISP 지원 범위가 다르므로 사용 중인 제품과 운영체제도 함께 확인하세요.
객체 하나를 선택했다면 다음에는 여러 객체를 선택해보세요
entsel은 한 번에 객체 하나를 선택하는 데 적합합니다.
하지만 실제 업무에서는 여러 선이나 문자, 블록 등을 한꺼번에 선택해서 처리해야 하는 경우가 많습니다.
이때 사용하는 대표적인 AutoLISP 함수가 ssget입니다.
ssget을 사용하면 여러 객체를 선택해 Selection Set으로 저장하고 반복 작업에 활용할 수 있습니다.
오토캐드 리습으로 여러 객체 선택하기, ssget Selection Set 사용법
이번 글에서 배운 entsel과 entget 구조를 이해했다면 다음 단계인 ssget도 훨씬 쉽게 이해할 수 있습니다.
entsel과 entget 핵심 정리
AutoLISP에서 객체 하나를 선택하고 정보를 확인하는 기본 흐름은 다음과 같습니다.
1. entsel로 객체 선택
(setq sel (entsel "\n객체를 선택하세요: "))
2. car로 Entity name 추출
(setq ent (car sel))
3. entget으로 객체 데이터 확인
(setq data (entget ent))
4. assoc로 원하는 DXF 그룹 코드 찾기
(assoc 0 data)
5. cdr로 실제 값 추출
(cdr (assoc 0 data))
이 흐름만 이해해도 선택한 객체의 종류나 레이어를 확인하는 기본 리습을 만들 수 있습니다.
처음에는 객체 정보를 읽는 것부터 시작하고, 이후 ssget, getpoint, command 등을 익히면서 여러 객체 선택과 실제 도면 자동화로 확장해보세요.
공식 참고자료
'IT·인터넷' 카테고리의 다른 글
| 오토캐드 리습 여러 객체 선택하기, ssget 필터·sslength·ssname 사용법 (0) | 2026.09.03 |
|---|---|
| 오토캐드 리습 만들기, 첫 AutoLISP 명령어 작성부터 LSP 실행까지 (1) | 2026.09.03 |
| 오토캐드 리습 AutoLISP란? 반복 작업 자동화부터 LSP 실행까지 쉽게 정리 (0) | 2026.09.02 |
| 오토캐드 F1~F12 기능키 총정리, F3 객체스냅부터 F12 동적입력까지 (0) | 2026.09.02 |
| 오토캐드 단축키 25개 총정리, 초보자가 자주 쓰는 명령어와 사용법 (0) | 2026.09.02 |