IT·인터넷

오토캐드 리습으로 선 그리기|getpoint와 command로 LINE 자동화하기

인포픽랩 2026. 8. 22. 20:45

앞서 8번 글에서는 getpoint를 이용해 사용자가 화면에서 좌표를 지정하는 방법을 알아봤고, 9번 글에서는 getreal을 이용해 숫자를 입력받는 방법을 알아봤습니다.

이번에는 지금까지 배운 내용을 실제 AutoCAD 작업에 연결해보겠습니다.

이번 글에서 사용할 핵심 함수는 **command**입니다.

command를 이용하면 AutoLISP에서 AutoCAD의 기본 명령을 실행할 수 있습니다. 또한 getpoint로 입력받은 좌표를 AutoCAD 명령에 전달할 수도 있습니다.

이번 글에서는 가장 간단한 예제인 두 점을 지정해서 LINE을 자동으로 그리는 리습을 만들어보겠습니다.


1. command란?

command는 AutoLISP에서 AutoCAD 명령을 실행할 때 사용하는 함수입니다.

기본적인 형태는 다음과 같습니다.

(command "명령어" "옵션" ...)

예를 들어 LINE 명령을 실행하려면 다음과 같이 작성할 수 있습니다.

(command "._line")

하지만 LINE 명령은 시작점과 끝점을 추가로 요구합니다.

따라서 다음과 같이 필요한 값을 함께 전달할 수 있습니다.

(command "._line" "0,0" "100,0" "")

이 코드는 대략 다음과 같은 작업을 자동으로 수행합니다.

LINE 실행
↓
시작점 0,0 입력
↓
끝점 100,0 입력
↓
Enter
↓
LINE 종료

command에 전달하는 값은 실행하려는 AutoCAD 명령의 프롬프트 순서에 맞아야 합니다. 또한 ""은 Enter와 같은 역할을 합니다.


2. 왜 getpointcommand를 함께 사용할까?

앞서 배운 getpoint를 이용하면 사용자가 원하는 위치를 직접 지정할 수 있습니다.

예를 들어:

(setq pt1 (getpoint "\n시작점을 지정하세요: "))

사용자가 화면에서 점을 클릭하면 그 좌표가 pt1에 저장됩니다.

두 번째 점도 같은 방법으로 받을 수 있습니다.

(setq pt2 (getpoint "\n끝점을 지정하세요: "))

그러면

사용자가 시작점 지정
↓
pt1에 저장
↓
사용자가 끝점 지정
↓
pt2에 저장
↓
pt1과 pt2를 LINE 명령에 전달

이라는 구조를 만들 수 있습니다.

이것이 바로 사용자 입력과 AutoCAD 명령을 연결하는 기본적인 AutoLISP 구조입니다.


3. 가장 간단한 LINE 리습

먼저 가장 기본적인 예제를 만들어보겠습니다.

(defun c:MYLINE ()
  (setq pt1 (getpoint "\n시작점을 지정하세요: "))
  (setq pt2 (getpoint pt1 "\n끝점을 지정하세요: "))

  (command "._line" pt1 pt2 "")

  (princ)
)

이 리습을 로드한 후 명령행에 다음을 입력합니다.

MYLINE

그러면

시작점을 지정하세요:

라는 메시지가 나타납니다.

원하는 위치를 클릭합니다.

그다음

끝점을 지정하세요:

라는 메시지가 나타납니다.

두 번째 위치를 클릭하면 두 점을 연결하는 LINE이 만들어집니다.


4. 코드 하나씩 살펴보기

위 코드를 한 줄씩 살펴보겠습니다.

첫 번째 줄

(defun c:MYLINE ()

사용자가 AutoCAD 명령행에서 MYLINE을 입력하면 실행되는 사용자 명령을 만드는 부분입니다.


시작점 입력

(setq pt1 (getpoint "\n시작점을 지정하세요: "))

getpoint를 이용해 사용자가 시작점을 지정합니다.

지정한 좌표는 pt1 변수에 저장됩니다.


끝점 입력

(setq pt2 (getpoint pt1 "\n끝점을 지정하세요: "))

이번에는 pt1을 기준점으로 사용합니다.

따라서 두 번째 점을 지정할 때 첫 번째 점과 현재 커서 위치를 연결하는 고무줄 형태의 표시를 볼 수 있습니다.

getpoint는 기준점이 주어진 경우 해당 점에서 현재 커서 위치까지의 고무줄 표시를 제공할 수 있습니다.


LINE 실행

(command "._line" pt1 pt2 "")

여기에서 실제 LINE이 만들어집니다.

각 값을 살펴보면 다음과 같습니다.

"._line" → LINE 명령 실행
pt1      → 시작점
pt2      → 끝점
""       → Enter

command는 AutoCAD 명령의 프롬프트 순서에 맞춰 값을 전달합니다.


5. 왜 ._line처럼 점을 붙여 사용할까?

예제에서는

"._line"

처럼 작성했습니다.

AutoLISP에서 AutoCAD 명령을 호출할 때 ._를 붙여 사용하는 패턴을 자주 볼 수 있습니다.

.
→ 기본 명령을 호출

_
→ 언어에 관계없이 명령 및 옵션을 영어 이름으로 전달하는 데 활용

따라서 다음과 같이 작성하는 것이 실무 리습에서 흔히 사용되는 방식입니다.

(command "._line" pt1 pt2 "")

다만 모든 상황에서 반드시 이 형태만 사용해야 한다는 의미는 아닙니다.

중요한 것은 AutoCAD가 요구하는 명령과 입력 순서를 정확하게 전달하는 것입니다.


6. 사용자가 취소했을 때 처리하기

실제 리습에서는 사용자가 항상 정상적으로 두 점을 지정한다고 가정하면 문제가 생길 수 있습니다.

사용자가 첫 번째 점을 지정한 후 Esc를 누르거나 입력을 취소할 수 있기 때문입니다.

따라서 입력 결과를 확인하는 구조를 만들어주는 것이 좋습니다.

(defun c:MYLINE2 ()
  (setq pt1 (getpoint "\n시작점을 지정하세요: "))

  (if pt1
    (progn
      (setq pt2 (getpoint pt1 "\n끝점을 지정하세요: "))

      (if pt2
        (command "._line" pt1 pt2 "")
        (princ "\n끝점이 지정되지 않았습니다.")
      )
    )
    (princ "\n시작점이 지정되지 않았습니다.")
  )

  (princ)
)

이렇게 하면 입력 결과를 확인하면서 다음 단계로 넘어갈 수 있습니다.


7. 두 점으로 LINE을 만드는 전체 흐름

이번 리습의 흐름을 그림처럼 정리하면 다음과 같습니다.

MYLINE 실행
      ↓
시작점 지정
      ↓
pt1에 좌표 저장
      ↓
끝점 지정
      ↓
pt2에 좌표 저장
      ↓
LINE 명령 실행
      ↓
pt1 → 시작점
pt2 → 끝점
      ↓
LINE 생성

이 구조는 앞으로 만들 다양한 AutoLISP 프로그램의 기본 형태가 될 수 있습니다.


8. getreal과 함께 사용할 수도 있다

9번 글에서 배운 getreal과 이번 글의 command를 함께 사용할 수도 있습니다.

예를 들어 사용자가 길이를 직접 입력하게 만들 수도 있습니다.

(setq len (getreal "\n길이를 입력하세요: "))

또는

시작점 지정
↓
길이 입력
↓
입력한 길이를 이용해 객체 생성

과 같은 구조로 발전시킬 수 있습니다.

이렇게 하면 사용자가 매번 좌표를 직접 계산하지 않아도 리습이 필요한 값을 받아 자동으로 작업하도록 만들 수 있습니다.

다만 길이만 입력받아 어느 방향으로 선을 만들 것인지까지 자동화하려면 추가적인 좌표 계산이나 각도 입력 등이 필요합니다.

따라서 이번 글에서는 두 점을 직접 지정하는 가장 기본적인 구조부터 익히는 데 집중하겠습니다.


9. command에서 Enter를 의미하는 ""

이번 예제에서 중요한 부분 중 하나가 바로 이것입니다.

""

AutoCAD 명령에서는 Enter를 눌러 현재 명령을 종료하거나 다음 단계로 넘어가는 경우가 많습니다.

command에서는 빈 문자열을 전달하면 Enter와 같은 역할을 할 수 있습니다.

예를 들어 LINE 명령에서는

(command "._line" pt1 pt2 "")

마지막의 ""이 Enter 역할을 합니다.

따라서 이것을 빼면 LINE 명령이 계속 이어지거나 예상한 방식으로 종료되지 않을 수 있습니다.


10. commandcommand-s는 무엇이 다를까?

AutoCAD에는 command와 함께 command-s라는 함수도 있습니다.

둘 다 AutoCAD 명령을 실행할 수 있지만 동작 방식에 차이가 있습니다.

command

(command "._line" pt1 pt2 "")

명령의 입력을 순차적으로 처리하는 방식입니다.

AutoLISP가 각 입력값을 평가하고 AutoCAD에 전달하면서 진행할 수 있습니다.

command-s

(command-s "._line" pt1 pt2 "")

하나의 구문 안에서 명령과 필요한 입력을 모두 처리하는 방식입니다.

Autodesk 문서에서는 command-scommand보다 빠르고 효율적인 경우가 있으며, 대신 하나의 command-s 호출 안에서 해당 명령이 완료되어야 하는 차이가 있다고 설명합니다.

초보 단계에서는 먼저 command의 기본 원리를 이해하는 것에 집중하는 것이 좋습니다.


11. 실제 CAD 실무에서는 어떻게 활용할까?

두 점을 지정해서 LINE을 만드는 것 자체는 매우 간단한 예제입니다.

하지만 이 구조를 다른 기능과 연결하면 활용도가 크게 올라갑니다.

예를 들어:

여러 개의 선을 자동으로 만들기

첫 번째 점 지정
↓
두 번째 점 지정
↓
LINE 생성
↓
다음 점 지정
↓
다음 LINE 생성

기준점을 이용한 도형 생성

기준점 지정
↓
크기 입력
↓
자동 계산
↓
도형 생성

선택한 객체를 기준으로 선 만들기

객체 선택
↓
객체 위치 확인
↓
필요한 좌표 계산
↓
LINE 생성

치수나 가공선 자동 생성

객체 선택
↓
기준 위치 계산
↓
간격 입력
↓
LINE / XLINE 생성

특히 CAD 실무에서는 반복적으로 선이나 보조선을 만들어야 하는 경우가 많기 때문에 이런 방식의 자동화가 유용합니다.


12. 직접 실행해보기

이번 글에서 가장 먼저 실행해볼 코드는 다음과 같습니다.

(defun c:MYLINE ()
  (setq pt1 (getpoint "\n시작점을 지정하세요: "))

  (if pt1
    (progn
      (setq pt2 (getpoint pt1 "\n끝점을 지정하세요: "))

      (if pt2
        (command "._line" pt1 pt2 "")
        (princ "\n끝점이 지정되지 않았습니다.")
      )
    )
    (princ "\n시작점이 지정되지 않았습니다.")
  )

  (princ)
)

LSP 파일로 저장한 후 APPLOAD를 이용해 로드합니다.

그다음 명령행에서

MYLINE

을 입력합니다.

첫 번째 점을 클릭하고 두 번째 점을 클릭하면 두 점을 연결하는 선이 자동으로 생성됩니다.


마무리

이번 글에서는 getpoint로 입력받은 좌표를 command에 전달하여 실제로 LINE을 자동 생성하는 방법을 알아봤습니다.

이번 글에서 배운 핵심은 다음과 같습니다.

getpoint

화면에서 사용자가 원하는 좌표를 지정합니다.

setq

입력받은 좌표를 변수에 저장합니다.

command

AutoCAD의 LINE과 같은 명령을 AutoLISP에서 실행합니다.

""

command에서 Enter와 같은 역할을 합니다.

지금까지 배운 내용을 연결하면 다음과 같습니다.

entsel
→ 객체 하나 선택

ssget
→ 여러 객체 선택

getpoint
→ 좌표 지정

getreal
→ 숫자 입력

command
→ AutoCAD 명령 실행

이제 AutoLISP가 단순히 값을 입력받는 수준을 넘어 사용자가 입력한 정보를 실제 CAD 작업으로 연결하는 단계까지 왔습니다.

다음 글에서는 getint을 이용해 정수 값을 입력받는 방법을 알아보고, 입력한 개수만큼 작업을 반복하는 방법으로 발전시켜보겠습니다.


📌 함께 보면 좋은 글

오토캐드 리습 숫자 입력받기|getreal로 길이와 값을 입력하는 방법

getreal을 이용해 길이, 간격 등의 숫자를 입력받는 방법을 알아봤습니다.

👉 https://infopicklab.tistory.com/9

오토캐드 리습 사용자 입력받기|getpoint로 좌표 지정하는 방법

getpoint를 이용해 화면에서 좌표를 지정하고 두 점을 입력받는 방법을 알아봤습니다.

👉 https://infopicklab.tistory.com/8

오토캐드 리습 여러 객체 선택하기|ssget으로 원하는 객체만 골라내는 방법

ssget을 이용해 여러 객체를 선택하는 방법을 알아봤습니다.

👉 https://infopicklab.tistory.com/7

오토캐드 리습으로 객체 선택하기|entsel로 선택한 객체 정보 확인하기

entsel을 이용해 객체 하나를 선택하고 객체 정보를 확인하는 방법을 알아봤습니다.

👉 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 문서를 참고하여 작성했습니다.