4. 좌표 입력받기 - (getpoint)
목표
사용자가 클릭한 점을 좌표로 변환 해 주는 (getpoint)
함수를 알아보고 활용 해 봅시다.
getpoint
캐드 작업을 하면서 도형을 그리기 위해 좌표를 직접 숫자로 입력하는 일은 많지 않습니다. 대부분은 마우스로 원하는 점을 클릭해서 도면을 그리실 텐데요. 도면상의 특정 점을 클릭했을 때 그 점의 좌표를 얻을 수 있는 함수가 있습니다.
바로 (getpoint)
함수입니다.
1
(getpoint)
위 함수를 입력하시면 3개의 숫자가 담긴 좌표
를 얻을 수 있는데요. 처음부터 순서대로 X, Y, Z 좌표입니다.
일반적으로 오토캐드는 2D평면에서 작업을 하기 때문에, 처음 두 요소인 X와 Y값만 변경되며, 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)
함수는 한 번에 여러개의 변수에 값을 넣을 수 있다는 것 기억나시죠? 한 번에 point1과 point2 변수에 좌표를 저장 해 보겠습니다.
1
2
3
(setq point1 (getpoint "첫 번째 점 클릭!!!")
point2 (getpoint point1 "두 번째 점 클릭!!!")
)
실행 후 point1과 point2변수를 확인 해 보니 좌표가 잘 저장 된 것을 확인 할 수 있습니다.
줄바꿈 기호 추가
하지만 한가지 문제점이 보이게 됩니다. 바로 명령어 창에 메시지가 누적되어서 보인다는 것인데요. 명령어 창에 첫번째 점 클릭!!!
메시지 뒤에 두번째 점 클릭!!!
메시지가 추가됩니다. 이는 문자열에 줄 바꿈 기호가 없어서 그렇습니다.
줄바꿈 기호는 \n
입니다. n은 새로운(new) 줄로 바꾸겠다는 의미입니다. \
(백슬래시)기호는 엔터키
와 백스페이스키
사이에 있는 ₩
키를 눌러서 입력할 수 있습니다. 각 문장이 시작하기 전에 다음 줄에서 시작하도록, 앞으로 사용자에게 메시지를 띄울때는 메시지 앞에 \n
를 붙이도록 하겠습니다.
1
2
3
(setq point1 (getpoint "\n첫 번째 점 클릭!!!")
point2 (getpoint point1 "\n두 번째 점 클릭!!!")
)
이제 실행 해 보면 메시지가 한 줄에 누적되지 않고 순서대로 보이게 됩니다.
이제 어디서든 좌표가 필요한 곳에서는, point1
변수와 point2
변수를 사용할 수 있게 되었습니다.