앞서 오토캐드 리습 여러 객체 선택하기 글에서는 ssget을 이용해 여러 객체를 선택하고 선택한 객체의 정보를 확인하는 방법을 알아봤습니다.
이번에는 한 단계 더 나아가서 사용자가 직접 좌표를 지정하도록 만드는 방법을 알아보겠습니다.
AutoLISP에서는 사용자의 마우스 클릭이나 키보드 입력을 받아 리습의 동작에 활용할 수 있습니다.
그중 좌표를 입력받을 때 가장 기본적으로 사용하는 함수가 바로 **getpoint**입니다.
이번 글에서는 getpoint의 기본적인 사용법부터 두 점을 입력받는 간단한 실습까지 단계적으로 알아보겠습니다.
1. AutoLISP에서 사용자 입력이 중요한 이유
지금까지 만든 리습은 사용자가 객체를 선택하면 그 정보를 확인하는 방식이었습니다.
하지만 실제 CAD 자동화에서는 사용자가 직접 위치나 값을 지정해야 하는 경우가 많습니다.
예를 들어 다음과 같은 작업이 있을 수 있습니다.
- 시작점을 지정하기
- 끝점을 지정하기
- 특정 위치에 객체 만들기
- 원하는 위치에 문자 넣기
- 두 점 사이의 거리를 계산하기
- 지정한 좌표를 기준으로 객체 이동하기
이런 작업을 만들려면 사용자로부터 입력을 받는 기능이 필요합니다.
이번 글에서는 그중 가장 기본이 되는 좌표 입력부터 알아보겠습니다.
2. getpoint이란?
getpoint는 사용자가 화면에서 점을 지정하도록 하는 AutoLISP 함수입니다.
기본적인 형태는 다음과 같습니다.
(getpoint)
사용자에게 안내 메시지를 표시하려면 다음과 같이 작성할 수 있습니다.
(getpoint "\n점을 지정하세요: ")
사용자가 화면에서 한 점을 클릭하면 해당 위치의 좌표가 반환됩니다.
따라서 변수에 저장해서 사용할 수 있습니다.
(setq pt (getpoint "\n점을 지정하세요: "))
이제 pt 변수에 사용자가 지정한 좌표가 저장됩니다.
3. 가장 간단한 getpoint 실습
5번 글에서 배웠던 사용자 명령 구조를 이용해 간단한 리습을 만들어보겠습니다.
(defun c:POINTTEST ()
(setq pt (getpoint "\n점을 지정하세요: "))
(princ pt)
(princ)
)
이 코드를 .lsp 파일로 저장한 후 APPLOAD를 이용해 AutoCAD에 로드합니다.
그다음 명령행에 다음을 입력합니다.
POINTTEST
Enter를 누르면 다음과 같은 메시지가 나타납니다.
점을 지정하세요:
이제 도면에서 원하는 위치를 클릭합니다.
그러면 해당 위치의 좌표가 명령행에 표시됩니다.
예를 들어 다음과 비슷한 결과가 나타날 수 있습니다.
(100.0 50.0 0.0)
이것이 바로 사용자가 지정한 점의 좌표입니다.
4. 좌표는 어떻게 구성되어 있을까?
AutoCAD의 좌표는 기본적으로 다음과 같은 형태로 표현됩니다.
(X Y Z)
예를 들어
(100.0 50.0 0.0)
이라면
- X 좌표 = 100.0
- Y 좌표 = 50.0
- Z 좌표 = 0.0
이라고 볼 수 있습니다.
일반적인 2D 도면에서는 Z 값이 0인 경우가 많습니다.
따라서 AutoLISP에서 점을 다룰 때는 X, Y, Z 좌표가 하나의 리스트 형태로 저장될 수 있다는 점을 기억해두면 좋습니다.
5. getpoint의 결과를 변수에 저장하기
실무에서 getpoint를 사용할 때는 대부분 결과를 변수에 저장해서 다른 작업에 활용합니다.
예를 들어 다음과 같습니다.
(setq pt1 (getpoint "\n첫 번째 점을 지정하세요: "))
이제 pt1 변수에 첫 번째 점의 좌표가 저장됩니다.
두 번째 점도 같은 방식으로 받을 수 있습니다.
(setq pt2 (getpoint "\n두 번째 점을 지정하세요: "))
그러면 다음과 같은 구조가 됩니다.
(defun c:POINT2 ()
(setq pt1 (getpoint "\n첫 번째 점을 지정하세요: "))
(setq pt2 (getpoint "\n두 번째 점을 지정하세요: "))
(princ pt1)
(princ pt2)
(princ)
)
이제 하나의 리습에서 두 개의 좌표를 연속으로 입력받을 수 있습니다.
6. 두 점을 입력받아 좌표 확인하기
조금 더 보기 좋게 결과를 표시해보겠습니다.
(defun c:POINT2 ()
(setq pt1 (getpoint "\n첫 번째 점을 지정하세요: "))
(if pt1
(progn
(setq pt2 (getpoint pt1 "\n두 번째 점을 지정하세요: "))
(if pt2
(progn
(princ "\n첫 번째 점: ")
(princ pt1)
(princ "\n두 번째 점: ")
(princ pt2)
)
(princ "\n두 번째 점이 지정되지 않았습니다.")
)
)
(princ "\n첫 번째 점이 지정되지 않았습니다.")
)
(princ)
)
여기에서 눈여겨볼 부분이 있습니다.
두 번째 getpoint에 첫 번째 점인 pt1을 함께 전달했습니다.
(getpoint pt1 "\n두 번째 점을 지정하세요: ")
이렇게 하면 두 번째 점을 지정할 때 첫 번째 점을 기준으로 입력을 받을 수 있습니다.
이 기능은 나중에 두 점을 이용해 LINE을 만들거나 거리를 계산하는 리습으로 발전시킬 때 활용할 수 있습니다.
7. 사용자가 입력하지 않은 경우도 처리하기
리습을 만들 때는 사용자가 항상 점을 지정한다고 가정하면 안 됩니다.
사용자가 입력을 취소하거나 입력하지 않고 종료할 수 있기 때문입니다.
그래서 다음과 같이 결과를 확인하는 것이 좋습니다.
(if pt
...
...
)
예를 들어:
(setq pt (getpoint "\n점을 지정하세요: "))
(if pt
(princ "\n점이 정상적으로 지정되었습니다.")
(princ "\n점을 지정하지 않았습니다.")
)
이런 조건 처리는 실제 리습을 만들 때 상당히 중요합니다.
사용자의 입력이 없는 상태에서 다음 코드가 실행되면 예상하지 못한 오류가 발생할 수 있기 때문입니다.
8. 첫 번째 점을 기준으로 두 번째 점 지정하기
getpoint는 이전에 지정한 점을 기준으로 다음 점을 지정하는 방식으로도 사용할 수 있습니다.
예를 들어:
(setq pt1 (getpoint "\n시작점을 지정하세요: "))
(setq pt2
(getpoint
pt1
"\n끝점을 지정하세요: "
)
)
이렇게 하면 사용자가 첫 번째 점을 지정한 다음 두 번째 점을 지정할 수 있습니다.
이 구조는 CAD에서 매우 흔하게 사용되는 방식입니다.
예를 들어:
시작점 지정
↓
끝점 지정
↓
두 점을 이용해 작업 수행
이라는 흐름을 만들 수 있습니다.
9. getpoint로 무엇을 만들 수 있을까?
여기까지 배우면 단순히 좌표를 확인하는 것에서 끝나지 않습니다.
입력받은 좌표를 다른 AutoLISP 함수와 연결하면 다양한 작업으로 확장할 수 있습니다.
예를 들어:
두 점으로 LINE 만들기
첫 번째 점 지정
↓
두 번째 점 지정
↓
LINE 생성
특정 위치에 문자 넣기
문자 위치 지정
↓
문자 내용 입력
↓
문자 생성
두 점 사이의 거리 계산
첫 번째 점 지정
↓
두 번째 점 지정
↓
거리 계산
객체 이동
기준점 지정
↓
이동 위치 지정
↓
객체 이동
즉 getpoint는 앞으로 만들 실제 CAD 자동화 리습의 입력 부분을 담당하게 됩니다.
10. entsel, ssget, getpoint 비교하기
지금까지 배운 내용을 한 번 정리해보겠습니다.
함수주요 용도
| entsel | 객체 하나 선택 |
| ssget | 여러 객체 선택 |
| getpoint | 화면에서 점 지정 |
각각의 역할은 다르지만 실제 리습에서는 서로 조합해서 사용하는 경우가 많습니다.
예를 들어:
객체 선택
↓
기준점 지정
↓
이동 위치 지정
↓
객체 처리
같은 자동화 프로그램을 만들 수 있습니다.
이런 식으로 여러 함수를 조합하기 시작하면 AutoLISP가 단순한 명령어가 아니라 CAD 자동화 도구로 활용되기 시작합니다.
11. 직접 실행해보기
이번에는 가장 간단한 실습으로 두 점을 지정해보겠습니다.
(defun c:POINTTEST2 ()
(setq pt1 (getpoint "\n첫 번째 점을 지정하세요: "))
(if pt1
(progn
(setq pt2 (getpoint pt1 "\n두 번째 점을 지정하세요: "))
(if pt2
(progn
(princ "\n첫 번째 점: ")
(princ pt1)
(princ "\n두 번째 점: ")
(princ pt2)
)
(princ "\n두 번째 점이 지정되지 않았습니다.")
)
)
(princ "\n첫 번째 점이 지정되지 않았습니다.")
)
(princ)
)
LSP 파일로 저장한 후 APPLOAD로 로드합니다.
그다음 명령행에
POINTTEST2
를 입력합니다.
첫 번째 점을 클릭하고 두 번째 점을 클릭하면 각각의 좌표가 명령행에 표시됩니다.
직접 실행해보면 사용자가 지정한 좌표를 리습이 받아 변수에 저장할 수 있다는 것을 확인할 수 있습니다.
마무리
이번 글에서는 AutoLISP의 getpoint 함수를 이용해 사용자가 직접 좌표를 지정하는 방법을 알아봤습니다.
이번 글의 핵심을 정리하면 다음과 같습니다.
getpoint
화면에서 사용자가 점을 지정하도록 합니다.
setq
사용자가 지정한 좌표를 변수에 저장할 수 있습니다.
if
사용자가 정상적으로 점을 지정했는지 확인할 수 있습니다.
두 점 입력
첫 번째 점과 두 번째 점을 입력받아 이후 작업에 활용할 수 있습니다.
지금까지 배운 내용을 연결하면 다음과 같습니다.
entsel
→ 객체 하나 선택
ssget
→ 여러 객체 선택
getpoint
→ 좌표 지정
이제 리습이 객체를 선택하는 것뿐만 아니라 사용자가 원하는 위치를 직접 입력받는 단계까지 발전했습니다.
다음 글에서는 좌표뿐만 아니라 숫자를 직접 입력받는 getreal 함수를 알아보겠습니다.
예를 들어 길이, 간격, 크기, 배율 등의 값을 사용자에게 입력받아 리습에서 활용하는 방법으로 이어갈 수 있습니다.
📌 함께 보면 좋은 글
오토캐드 리습 여러 객체 선택하기|ssget으로 원하는 객체만 골라내는 방법
ssget을 이용해 여러 객체를 선택하고 선택 세트를 이용하는 방법을 알아봤습니다.
👉 https://infopicklab.tistory.com/7
오토캐드 리습으로 객체 선택하기|entsel로 선택한 객체 정보 확인하기
entsel을 이용해 객체 하나를 선택하고 entget으로 객체 정보를 확인하는 방법을 알아봤습니다.
👉 https://infopicklab.tistory.com/6
오토캐드 리습 만들기|초보자를 위한 첫 번째 AutoLISP 명령어
defun, c: 등을 이용해 첫 번째 AutoLISP 사용자 명령을 만드는 방법을 알아봤습니다.
👉 https://infopicklab.tistory.com/5
오토캐드 리습(AutoLISP)이란? 반복 작업을 자동화하는 방법
AutoLISP의 기본 개념과 CAD 작업에서 활용할 수 있는 방법을 정리했습니다.
👉 https://infopicklab.tistory.com/4
오토캐드 단축키, 이것부터 익혀보세요|도면 작업에서 자주 쓰는 명령어
AutoCAD에서 자주 사용하는 명령어와 명령 별칭을 정리했습니다.
👉 https://infopicklab.tistory.com/2
오토캐드 F1~F12 기능키 총정리|F3 객체스냅·F8 직교모드 활용법
F3 객체 스냅, F8 직교 모드 등 AutoCAD 기능키의 역할을 정리했습니다.
👉 https://infopicklab.tistory.com/3
참고자료
Autodesk 공식 AutoLISP 문서를 참고하여 작성했습니다.
- Autodesk AutoLISP getpoint 관련 공식 문서
- Autodesk AutoLISP 사용자 입력 함수 관련 문서
- Autodesk AutoLISP 함수 및 좌표 관련 문서
'IT·인터넷' 카테고리의 다른 글
| 윈도우11 블루투스가 안 될 때 순서대로 해결하는 방법 (0) | 2026.08.30 |
|---|---|
| 윈도우11 와이파이 연결이 안 될 때 순서대로 해결하는 방법 (0) | 2026.08.30 |
| 오토캐드 리습 자동로드 방법|APPLOAD로 LSP 매번 불러오지 않게 설정하기 (0) | 2026.08.26 |
| 오토캐드 리습 객체 색상 변경하기|AutoLISP로 선택한 객체 색상 바꾸는 방법 (0) | 2026.08.23 |
| 오토캐드 리습으로 선 그리기|getpoint와 command로 LINE 자동화하기 (0) | 2026.08.22 |