티스토리 뷰
변수의 정의 (a)
다른 언어를 좀 하신 분이라면 쉽게 이해하시겠지만
초보자를 위해서 좀 자세히 설명하겠습니다.
1. 변수란 무엇인가?
변수란 변하는 수, 계속 변하는 값이며 그 값을 저장하는 공간을 '변수'라 부릅니다.
예로 3.141592라는 긴 숫자를 매번 쓰기보단
3.141592라는 숫자를 pi로 정의해 놓으면
그다음부터는 pi라고만 써도 3.141592라고 인식한다는 겁니다.
이것을 리습으로 형식으로 작성하면
(setq pi 3.141592)
이렇게 됩니다.
2. setq 란 무엇인가?
변수를 정의할 때 사용하는 명령어입니다.
리습은 항상 괄호를 열고 닫는 걸 기억하셔야 합니다.
3. (setq a b)
b의 값을 a에 할당하라는 명령입니다, 즉 정의한단 말이죠
아래를 계속 읽어보면 조금 더 쉬워집니다.
4. 숫자의 정의
(setq test1 3456.789)
위의 내용을 풀이해 보면 숫자 3456.789를 test1이라고
이름을 붙여준 겁니다. 또는 test1에 3456.789 값을 넣어라 라고
말할 수 있습니다.
test1 <-- 3456.789 이렇게 이해해도 좋고,
test1 = 3456.789 이라고 이해해도 좋습니다.
그러면 LISP 1. 에서 배운 연산을 함께 해 보겠습니다.
(setq test1 123)
(setq test2 456)
(setq test3 (+ test1 test2))
위의 리습은 test1 은 123이고, test2는 456입니다.
따라서 test3 은 test1+test2 값인 123+456 즉, 579입니다.
5. 문자의 정의
(setq test4 "this is sample")
!! 숫자와 달리 문자는 꼭 따옴표"" 안에 있어야 합니다.!!
test4에 this is sample이라는 글을 기억시킨 겁니다.
6. 기타 데이터의 정의
숫자, 문자는 기본이고 객체나 속성들도 변수로 정의할 수 있습니다.
차차 앞으로 진행하면서 그것들은 접해볼 수 있고 그때, 다시
설명해 보기로 하겠습니다.
변수의 정의 (b)
변수를 정의하는 데 있어서 보다 편리하고
보기 좋게 하는 방식에 대해 이야기해보겠습니다.
1. 변수를 차례대로 적어놓으면...
(setq a 1)
(setq b 2)
(setq c 3)
위의 내용은 a=1, b=2, c=3을 대입하란 뜻입니다.
같은 표현을 좀 짧게 쓰면 아래와 같이 쓸 수 있습니다.
(setq a 1 b 2 c 3)
setq 문은 한 번만 써주고 차례대로 변수 이름, 값들을 나열하면 됩니다.
아래처럼 다르게 표현해 보겠습니다.
(setq a 1
b 2
c 3
)
리습에서 변수 정의 시 줄 바꿈의 의미는 별로 중요하지 않습니다.
위에 처럼 써주면 보다 더 보기 좋게 구사할 수 있습니다.
코드가 길어지면 괄호의 개수가 많아져 알아보기 힘들기 때문에
위처럼 작성하시는 걸 추천합니다.
2. 주석(설명글)을 달아보겠습니다.
주석은 코드와 무관하며 추후 기억하기 위한 설명글을 작성하기 위해 필요합니다.
컴퓨터에게 주석이란 걸 알리기 위해서는 세미콜론(;)을 사용합니다.
예를 보겠습니다.
; 이 리습은 테스트용입니다.
(defun c:test()
; 변수를 정의합니다.
(setq a 1 ; a값을 1로 정의합니다.
b 2 ; b값을 2로 정의합니다.
c 3 ; c값을 3로 정의합니다.
d (+ a b c)); a+b+c 값을 d값으로 명명합니다.
); 변수 정의가 끝났습니다.
); end of defun
위와 같이 첫 칸에 세미콜론(;)이 오거나
중간에 위치해도 무관합니다.
작성되는 줄의 ";" 세미콜론 이후 문자는 컴퓨터가 컴파일하지 않고 넘기게 됩니다.
어떤 언어의 코드든 주석 다는 습관은 중요합니다.
꼭 설명을 붙이는 습관을 가지시길 바랍니다.
코드를 작성 하다보면 괄호 개수로 인한 오류가 생각보다 많이 발생될 것입니다.
위의 예제처럼 괄호를 열고 닫고, 행을 맞춰주고 들여 쓰기를 하면
괄호 개수가 모자라거나 남는 경우 찾기가 쉬워집니다.
Prompt 명령
command창에 글자를 출력
1. (prompt 내용)
(prompt "This is test")
이렇게 한번 써보세요.
캐드 명령 창에 "This is test"라고 출력됩니다.
줄 바꿈을 하고 싶으세요?
줄 바꿈은 "\n" 을 사용합니다. 위의 예제를 줄 바꾸어서 출력하려면
(prompt "\nThis is test")
그럼 test라는 명령을 치면 화면에 "This is test"라고
출력하게 하는 리습을 만들어볼까요?
(defun c:test()
(prompt "\nThis is test")
) ; end of defun
아래도 해봅시다.
(defun c:test() (prompt "\nThis is test"))
2. (princ 내용 []), (prin1 내용 []), (print 내용 [])
위의 3가지는 명령은 같은 결과를 나타냅니다.
prompt 명령과 비슷하나 내용이 문자열이 아니어도 됩니다.
내용을 그대로 출력하고 내용을 응답합니다.
예를 들어보죠.
(princ 123)
이렇게 하면 화면에 123이라고 나오고 123이라고 다시 한번 응답합니다.
주로 (princ) (print) (prin1)의 용도는 리습의 끝부분에 쓰입니다.
리습 실행 후에 화면에 응답 값을 표시하지 않기 위해 사용됩니다.
위의 1번의 예제에서
(defun c:test()
(prompt "\nThis is test")
(princ); <------------------이 줄을 추가
) ; end of defun
(princ)를 추가하기 전, 후의 결괏값을 보면
추가하기 전에는 글자 뒤에 nil이라는 글이 붙을 겁니다.
응답 값이 nil이란 거죠.
(princ)를 추가하면 응답 값을 표시하지 않습니다.
그래서 주로 리습의 맨 끝부분에 써줍니다.
command 명령
(command)는 이전 강의에서 설명한 바와 같이 캐드에서 키보드로 Typing 하는 것과 같은 효과를 나타냅니다.
아래의 예제를 명령 창에 직접 입력해 테스트해보세요.
1. Line을 그려보자
(command "line" "0,0" "100,100" "")
(0,0)에서 (100,100)까지 선을 그러 줍니다.
그렇다면 뒤의 ""은 무엇일까요.
캐드에서 Line 명령을 하면 from point, to point를 물어보고
점을 하나 찍으면 또다시 to point를 물어봅니다.
그때 [엔터]나 [스페이스바] 또는 [마우스의 오른쪽 버튼]을 누르죠?
""는 [엔터]를 의미합니다.
""를 써줘야 Line 명령을 끝을 냅니다.
""를 빼고 (command "line" "0,0" "100,100")이라고 해보세요
그러면 다음 포인트를 또 물어볼 것입니다.
(command)문은 스페이스(빈 공간)로 구분됩니다.
2. circle를 그려보자
(command "circle" "0,0" "100")
-> (0,0)에서 반지름 100인 원 작성
(command "circle" "10,10" "d" "200")
->(10,10)에서 지름이 200인 원 작성
3. 글자를 써보자
(command "text" "100,100" "2.5" "90" "Test string")
-> (100,100)에서 글자 높이 2.5, 각도 90도,
Test string 이란 글을 화면에 써줍니다.
(command "text" "j" "r" "100,100" "2.5" "90" "Test string")
-> 위의 내용은 글자의 오른쪽 맞춤의 속성인 글자 생성
"j" "r" 이란 "justify" "right" 이런 거 다 아시죠?
4. Layer를 하나 생성해보자
(command "layer" "N" "test" "c" "yellow" "test" "")
-> test라는 레이어를 하나 생성하고
색을 노랑으로 하는 리습입니다.
순서를 잘 모르면 (command "layer")까지만 치고
순서를 익 히시키는 것이 필요하겠죠.
(command "layer")라고 쳐도 좋고 -layer이라고
"-"를 앞에 붙여서 typing 해도 좋습니다.
5. 도면을 insert 해보자
(command "insert" "c:/test" "0,0" "1" "1" "0")
-> c:\test.dwg 라는 도면을 아무거나 하나 만들고 테스트해보세요
여기서, 주의!! 리습의 디렉터리 구분 글자는 슬래쉬"/"로 사용합니다.
꼭 "/"로 디렉터리 구분을 해야 합니다..
위의 리습은 test.dwg 도면을 좌표 (0,0) x scale : 1 , y scale : 1 ,
회전각도 0도로 삽입시킵니다.