포스트(post)

4. 좌표 입력받기 - (getpoint)

목표

사용자가 클릭한 점을 좌표로 변환 해 주는 (getpoint)함수를 알아보고 활용 해 봅시다.


getpoint

캐드 작업을 하면서 도형을 그리기 위해 좌표를 직접 숫자로 입력하는 일은 많지 않습니다. 대부분은 마우스로 원하는 점을 클릭해서 도면을 그리실 텐데요. 도면상의 특정 점을 클릭했을 때 그 점의 좌표를 얻을 수 있는 함수가 있습니다.

바로 (getpoint) 함수입니다.

1
(getpoint)

위 함수를 입력하시면 3개의 숫자가 담긴 좌표를 얻을 수 있는데요. 처음부터 순서대로 X, Y, Z 좌표입니다.

일반적으로 오토캐드는 2D평면에서 작업을 하기 때문에, 처음 두 요소인 XY값만 변경되며, Z값은 0 입니다. (getpoint)함수는 아무런 인자(입력)을 필요로 하지 않기때문에, 단독으로 사용할 수 있습니다.


command문에 적용하기

지난 (command)함수 포스팅에서 선을 그릴 때, 좌표의 값을 문자열로 직접 입력했던 부분을 (getpoint) 함수로 변경해서 직접 점을 클릭해서 선을 만들어 봅시다.

1
(command "line" (getpoint) (getpoint) "")

line 명령어에 필요한 첫번째 점과 두번째 점을, 문자열""로 입력 하는 대신 좌표로 대체했습니다. 이처럼 (command)함수에서 좌표와 관련된 인자는 3개의 숫자로 이루어진 리스트좌표로 대체 가능합니다.


원하는 메시지 입력하기

(getpoint)함수처럼 사용자의 입력을 요구하는 대부분의 함수들은 메시지를 추가할 수 있습니다. 메시지는 문자열""형태여야 합니다. 아래의 내용을 복사해서 실행 해 보세요.

1
(getpoint "원하시는 점을 클릭해주세요!!!")


이제 (getpoint)함수를 실행하여 좌표를 선택할 때에 명령어창에 표시되는 메시지가 변경되었습니다.

(getpoint) 함수는 단독으로도 사용할 수 있지만, 이렇게 사용자가 좌표를 클릭할 때 표시 될 메시지마지막 인자로 넣을 수 있습니다.


획득한 좌표를 변수에 저장하기

얻은 좌표를 변수에 저장 해 두면, 언제든 원하는 위치에서 그 좌표를 사용할 수 있습니다. (getpoint)로 획득한 좌표를 (setq) 함수를 이용해서 변수로 만들어 봅시다.

1
(setq point1 (getpoint "원하시는 점을 클릭해주세요!!!"))

리습에서는 항상 내부의 함수가 먼저 실행되며, 그 함수의 결과값이 원래 함수 자리를 대체하게 됩니다. 따라서 여기서는 내부(getpoint)함수가 먼저 실행될 것이고, 그 결과는 다음과 같게 됩니다.

(setq point1 좌표)

이 후 (setq)함수에 의해 point1좌표(x,y,z)가 저장됩니다.


더 알아보기

가상선 추가

(getpoint)함수에 좌표를 인자로 넣으면, 그 으로부터 연결된 가상선을 보이게 할 수 있습니다. (getpoint)함수에 필요한 좌표는 동일한 (getpoint)함수로 얻어서 줘 보겠습니다.

1
2
(setq point1 (getpoint "원하시는 점을 클릭해주세요!!!"))
(getpoint point1)

먼저 첫번째 줄의 코드를 실행해서, 사용자가 클릭한 좌표를 point1 변수에 저장합니다. 그 다음 point1을 (getpoint)함수의 첫번째인자로 넣었습니다.

위 함수를 실행하면 이렇게 가상선이 보이게 됩니다. 사용자에게 시각적인 도움을 줄 수 있겠죠.


메시지 추가

두 번째 사용하는 (getpoint)함수에도 마찬가지로 메시지를 추가 해 보겠습니다.

여기서 메시지(getpoint)마지막인자입니다. 따라서 가상선을 추가하면서 메시지도 추가하려면, 좌표첫 번째 인자가 됩니다.

1
2
(setq point1 (getpoint "첫 번째 점 클릭!!!"))
(setq point2 (getpoint point1 "두 번째 점 클릭!!!"))

(setq)함수는 한 번에 여러개의 변수에 값을 넣을 수 있다는 것 기억나시죠? 한 번에 point1point2 변수에 좌표를 저장 해 보겠습니다.

1
2
3
(setq point1 (getpoint "첫 번째 점 클릭!!!")
			point2 (getpoint point1 "두 번째 점 클릭!!!")
)

실행 후 point1point2변수를 확인 해 보니 좌표가 잘 저장 된 것을 확인 할 수 있습니다.


줄바꿈 기호 추가

하지만 한가지 문제점이 보이게 됩니다. 바로 명령어 창에 메시지가 누적되어서 보인다는 것인데요. 명령어 창에 첫번째 점 클릭!!! 메시지 뒤에 두번째 점 클릭!!!메시지가 추가됩니다. 이는 문자열에 줄 바꿈 기호가 없어서 그렇습니다.

줄바꿈 기호는 \n입니다. n새로운(new) 줄로 바꾸겠다는 의미입니다. \(백슬래시)기호는 엔터키백스페이스키 사이에 있는 키를 눌러서 입력할 수 있습니다. 각 문장이 시작하기 전에 다음 줄에서 시작하도록, 앞으로 사용자에게 메시지를 띄울때는 메시지 앞\n를 붙이도록 하겠습니다.

1
2
3
(setq point1 (getpoint "\n첫 번째 점 클릭!!!")
			point2 (getpoint point1 "\n두 번째 점 클릭!!!")
)

이제 실행 해 보면 메시지가 한 줄에 누적되지 않고 순서대로 보이게 됩니다.


이제 어디서든 좌표가 필요한 곳에서는, point1 변수와 point2 변수를 사용할 수 있게 되었습니다.

© IsaacGo. All rights reserved.