Ended soon
안녕하세요 리습 메이트 고개발이에요! 🐳
리습 연재 시작에 앞서 지난 주에는 리습의 개념에 대해 알아보았는데요
그럼 오늘부터 리습에 대해 본격적으로 알아보기로 해요!
오늘은 리습의 기본 구조
즉 리습은 어떻게 짜는건지에 대해 알아보러 GO GO!
리습 예제
(defun c:cl (/ a b lay rad cen pt1 pt2 pt3 pt4)
(setq lay (getvar "clayer"))
(setq ly (tblsearch "layer" "4"))
(if (= ly nil)
(command "-layer" "m" "4" "c" "1" "" "l" "center" "" "s" lay "")
)
;중략
)
defun setq getvar…? 뭐가 뭔지 하나도 모르시겠다고요?
괜찮아요! 저 고개발도 처음엔 그랬으니까~
하지만 몇가지 규칙과 용어를 알고 나면 금방 익숙해지실 거예요!
복잡해만 보이는 리습도 사실 알고보면 굉장히 간단한 구조로 되어 있어요
이전 편에서도 살짝 언급드렸듯이 리습은 () 괄호로 묶인 나열의 전부죠~
그럼 한번 살펴볼까요?
자.. 여기서 function은 뭐고 argument는 또 뭐야…? 싶으신 분들 잠깐!
조금 뒤에서 곧 설명드릴 거니깐 너무 겁먹지 말고 일단 큰 구조만 살펴보자go~
리습의 구조는 위에 저게 다예요~
별 거 없죠?
별로 어렵지 않아요~
아래 3가지 규칙만 잘 지켜서 작성해주면 리습 뚝딱!
① 괄호를 열어 시작하고 반드시 괄호를 닫아서 끝냅니다
② function (함수) : 한 쌍의 괄호 안에 함수는 1개만 쓸 수 있어요
③ arguments (인자) : 함수와 달리 인자는 여러 개를 쓸 수 있어요
자 그럼 function 과 argument 는 뭔지 알아볼까요?
함수 (function)
자주 사용하는 기능을 모아서 사용할 수 있도록 만든 코드의 집합
쉽게 말해 실행하고자 하는 명령으로 생각하시면 돼요
함수는 한번에 하나씩 처리되므로 한 쌍의 괄호 안에 함수는 1개만 쓸 수 있는 거예요
함수는 이미 있는 함수를 쓰는 경우도 있고
사용자가 새로운 함수를 만드는 경우도 있는데요.
나만의 함수를 정의하고 싶은 경우에는 defun c:명령어 형태로 작성하면 돼요
define + function + command 를 합친 말이에요
여기서 명령어는 오토캐드에서 사용하는 명령어와 겹치지 않게 나만의 독특한 명령어를 적어주는 게 중요해요!
그럼 아래 예제를 통해 한번 볼까요? 여기서 함수는 뭘까요?
(command "line" "0,0" "100,100" "")
(defun c:TEST ()
(setq a (car (getpoint "점을 지정해주세요")))
)
1번
command
line
2번
TEST ()
setq
car
getpoint
인수 (argument)
함수를 호출할 때 전달하는 변수값
내가 전달하는 값을 사용하여 함수를 실행해줘! 라고 생각하시면 돼요
함수 중에는 변수값이 하나만 있어도 되는 함수도 있고 여러 개가 필요한 함수도 있어요
그렇기 때문에 (function arguments) 구조로 되어 있는 거죠
위에 예제에서 이번에는 인수를 찾아보아요!
(command "line" "0,0" "100,100" "")
(defun c:TEST ()
(setq a (car (getpoint "점을 지정해주세요")))
)
1번
0,0
100,100
2번
a
(car (getpoint “점을 지정해주세요”))
(getpoint “점을 지정해주세요”)
“점을 지정해주세요”
함수와 변수에 대해서는 이어지는 다음화에서 좀 더 자세히 설명드릴 예정이에요~
오늘은 간단하게 리습의 생김새나 구조, 규칙에 대해서만 알고 가면 충분해요!
코드를 작성하다보면 가끔씩 설명을 남기고 싶을 때가 있죠
나중에 다시 봤을 때 기억하기 위해, 혹은 다른 사람들이 봤을 때도 이해하기 쉽게 주석을 남겨야 하는 경우가 있어요.
그럴 때 리습에서 쓰는 기호는 바로 세미콜론(;) 입니다.
개수는 몇개를 쓰든 상관 없고 ; 뒤에 쓰는 내용은 코드로 실행되지 않고 넘어갑니다.
(defun c:TEST ()
(setq a (car (getpoint "점을 지정해주세요")))
;;;;클릭한 점의 x좌표를 a에 저장하는 리습
)
그러면 위의 예제들을 오토캐드에서 실제로 한번 실행해볼게요.
(command “line” “0,0” “100,100” “”)
그대로 복사하여 오토캐드 명령행에 붙여넣기 해보면 0,0 에서 100,100 까지의 line 이 작성됩니다.
만약 1만개 이상의 도면에 0,0 에서 100,100 line 을 작성해야한다면 일일이 수동으로 그리기에는 너무 무리겠죠..
이럴 때 해당 리습을 사용하면 단 몇초 혹은 몇분만에 금방 할 수 있습니다!
그럼 두 번째 예제도 실행해보겠습니다.
(defun c:TEST()
(setq a (car (getpoint “점을 지정해주세요”)))
;;;;클릭한 점의 x좌표를 a에 저장하는 리습
)
여러 줄로 작성되었지만 마찬가지로 그대로 복사하여 오토캐드 명령행에 붙여넣습니다.
리습이 정상적으로 잘 로드되면 C:TEST 라고 뜨는데요
TEST 명령어를 입력하면 리습이 실행됩니다.
아직 함수에 대해 자세히 배우지 않았지만 TEST 리습을 간단하게 설명드리면
(setq a (car (getpoint “점을 지정해주세요”)))
getpoint 는 클릭한 점의 x, y, z 좌표를 가져오는 함수인데요
이때 (x y z) 이런 식으로 list 형식으로 가져옵니다.
이런 list 에서 첫 번째 요소만 가져오고 싶을 때 사용하는 함수가 car 함수입니다.
(car (getpoint)) => 클릭한 점의 x 좌표만 가져오는 함수
마지막으로 setq 함수는 값을 저장하고자 할 때 쓰는 함수입니다.
(setq symbol expression) 형식으로 작성하구요
expression 값을 symbol 에 저장해줍니다.
저희 예제에서 보시면
(setq a (car (getpoint)))
여기서 a 는 symbol, (car (getpoint)) 가 expression 입니다.
따라서
(setq a (car (getpoint “점을 지정해주세요”)))
=> 클릭한 점의 x 좌표를 a 에 저장합니다.
값이 잘 저장됐는지 확인하는 방법
!변수 (느낌표 + 변수)
a라는 변수에 x 좌표가 잘 저장됐는지 확인이 필요하면 !a 라고 입력하시면 됩니다.
영상을 보시면 첫 번째 리습의 결과물이었던 0,0 에서 100,100 까지의 line의 끝점을 클릭했기 때문에
TEST 리습의 결과값은 끝점의 x 좌표인 100.0 이 리턴됩니다.
!a 를 입력해보면 100.0 이 나오며 잘 저장된 것을 확인할 수 있습니다!
오늘은 메모장을 활용하여 간단한 예제를 살펴보았는데요
메모장으로도 리습을 짜는 데는 큰 무리가 없습니다~
파일 저장할 때 확장자를 .lsp 으로 저장하면 오토캐드에 로드해서 사용할 수 있어요!
하지만 윈도우 메모장은 색상 구분이 없기 때문에 코드를 분석해서 보기가 쉽지는 않아요.
그래서 notepad++ 나 Visual Studio Code 를 사용하시는 분들이 많아요~
이중 Visual Studio Code (VS Code) 는 리습에 오류가 있을 때 디버깅 (debugging) 해보기 좋은 툴이라
저 고개발이 추천하는 프로그램이에요~
VS Code 에 AutoLISP extension 을 설치하는 방법은 고개발 연구소에서 한번 확인해보세요~
자 오늘은 리습의 기본 구조와 규칙 그리고 용어와 흔히 사용하는 함수 몇개를 간략하게 소개드렸는데요~
어떠셨나요?? 어렵게만 느껴지던 리습이 조금은 알 것 같다 정도로만 느끼셨다면 저 고개발은 매우 만족합니다!!
그럼 오늘의 내용을 요약하며 다음화에서 만나요!
- 괄호를 열어 시작하고 반드시 괄호를 닫아서 끝냅니다
- function (함수) : 한 쌍의 괄호 안에 함수는 1개만 쓸 수 있어요
- arguments (인수) : 함수와 달리 인수는 여러 개를 쓸 수 있어요
- 주석 기호 : 세미콜론(;)
- 알아두면 유용한 3가지 함수
- getpoint : 지정한 점의 좌표 가져오는 함수
- car : list 의 첫 번째 요소를 가져오는 함수
- setq : 지정한 기호에 값을 저장하는 함수
- !변수 : 변수에 저장된 값 확인
감사합니다.