AutoCad (캐드) Lisp (리습) 이란 무엇인가

개요
⇒영어식 표현으로 프로그램을 개발할 수 있는 고급언어(high level language)의 일종이며 MacLisp,
InterLISP,ZetaLisp,Common LISP 등 파생언어들을 가지고 있다.AutoLISP는 LISP의 파생언어들 중의 하나인 XLISP(개발자 : David Betz)를 근거로 CAD프로그래밍 언어로써 적합하도록 수정된 특별한 언어이다.AutoLISP의 규약과 문법은 Common LISP를 주로 따른다.


리습이란?
⇒LISP은 LIst Processing의 준말로 AUTOCAD의 사용자 언어로 사용된다.별도의 컴화일이 필요없이 바로 사용할 수 있어,간단한 사용자 명령 및 프로그램으로 각광을 받고 있다.

리습의 역사
⇒1985년 Autocad는 AutoLisp라는 쉽게 사용할 수 있는 언어를 도입했고 R11 판에서는 ADS(Autocad Development System)가 추가되어 C언어를 사용할 수 있는 신기원이 마련되었다.R12에서는 또하나의 프로그래밍 언어로 DIESEL(Direct Interactive String Expression Language)이 추가 되었으며,Autolisp도 한층 보강 되었다.R14에서 Visual LISP의 추가로 VBA의 기능을 대폭 수용하면서 막강한 LISP이 되었다.

특징
⇒AutoCAD의 도면 설계시 유용하게 사용할 수 있는 함수만 골라서 AutoCAD에 접목시킨 것이다.
⇒AutoCAD에 없던 명령을 새로 만들수 있는 컴퓨터 언어이다.
⇒접근이 쉽고 프로그램도 간단하여 누구나 프로그램하여 원하는 기능을 빨리 할 수 있다.
⇒오토캐드를 사용할 때 발생되는 반복적인 작업을 단순화시키며 생산성을 높여준다.
⇒특정 툴을 사용해서 만드는 것이 아니고 메모장을 사용하여 만든다.
⇒캐드 LT버전에서는 리습을 사용할 수 없다.하지만 특정 회사에서 유료로 툴을 만들어 캐드 LT에서도 작동하게 만들고 있다.
⇒보통 AutoLisp이라고 부른다. AutoCAD를 좀 더 효과적이고 유용하고 간편한 환경을 제시(더 빠르게) 할 수 있는 프로그래밍 언어이다.
⇒AutoCAD + LISP(List Program) 이 합쳐진 개념이다.
리스프라고도 하는데 보편적으로 리습이라고 부른다.
⇒Lisp은 종류가 여러가지 있다.
⇒별도의 프로그램 없이 캐드만 있으면 실행된다.

LISP의 장-단점
1.프로그래밍 언어 중에서 배우고 익히기가 가장 쉽다.
2.인공지능과 전문가 시스템의 개발 및 연구용으로 채택된 언어이다.
3.LISP의 문법은 단순하기 때문에 LISP 해석기(LISP interpreter)의 실행이 명료하며 또한 메모리를 적게 차지한다.
4.LISP 해석기는 설계과정의 특성인 정형화 되지 않은 작업에 이상적이다.
5.LISP는 Autocad 와 같은 CAD 시스템들에서 처리되는 정교한 정보들로 구성된 서로 다른 개체(object)들을 다루는 데 뛰어나다.
6.적은 개수의 명령구성으로 배우기는 쉬우나 그만큼 복잡한 내용을 구성하기에는 어려움이 많다.
7.하드웨어의 제어나 타 언어와의 호완성이 떨어진다.

사용 예
⇒도면에 있는 모든 라인의 시작점의 좌표를 가져오려고 할때 우리는 상당히 난감하다.도면의 객체가 많을때(1000개,10000개....) 우리는 도면의 모든 선을 일일이 클릭해서 시작점의 좌표를 종이에 적거나 다른곳에 적어서 데이타로 만들 것이다.또한 명령어도 모른다,라인의 시작점을 알아내는것도 그리 쉽지않다.이럴때 리습을 사용하면 편하다.
이작업을 AutoLISP로 한다면..............
(setq sel (entsel "\n라인 선택: ")) ;<- 라인을 선택해서 변수 sel에 저장해라
(setq ent (entget (car sel))) ;<- 선택한 객체의 정보를 볼수 있게 변수 ent에 저장해라
(setq startPoint (cdr (assoc 10 ent))) ;<- 라인의 시작점을 변수 startPoint에 저장해라..
이러한 함수를 이용해서 리습을 만들고 만든 리습을 캐드에서 작동 시키면 간단히 몇 초안에 어려운 문제를 해결 할수 있다.

리습의 종류
1.AutoLisp(Lisp,확장자 : lsp)
⇒AutoCAD를 좀 더 효과적이고 유용하고 간편한 환경을 제시(더 빠르게) 할 수 있는 프로그래밍 언어이다.
⇒예를들어 라인이 어떻해 이루어졌는지 확인해보면 아래처럼 이루어 졌다.
(
(-1 . <도면요소 이름: 7ffffb43820>)
(0 . LINE)
(330 . <도면요소 이름: 7ffffb419f0>)
(5 . 992)
(100 . AcDbEntity)
(67 . 0)
(410 . Model)
(8 . Revision)
(100 . AcDbLine)
(10 25014.3 17307.2 0.0)
(11 25350.1 17307.2 0.0)
(210 0.0 0.0 1.0)
)
앞쪽에 있는 번호가 캐드에서 정의한 것 들이고 뒤쪽에 있는 Item이 매번 변화하는 값들이다.
(0 . LINE) ;<- 0 은 객체의 이름을 뜻하고 뒤쪽의 Item은 라인 이다..
(8 . Revision) ;<- 8 은 레이어라는 뜻이고 뒤쪽의 Item은 "Revision"이라는 레이어명이다
(10 25014.3 17307.2 0.0) ;<- 10 은 라인의 시작점을 뜻하고 뒤쪽은 좌표값 이다.
(11 25350.1 17307.2 0.0) ;<- 11 은 라인의 끝점을 뜻하고 뒤쪽은 좌표값 이다.
이 데이터는 모두 LIST로 이루어졌다.
⇒LISP은 이러한 LIST를 다루기에 매우 적합한 언어라서 AutoCAD에서 이 리습을 도입하여
AutoLISP이라고 명칭하였고 사용자에게 새로운 명령을 만들어서 사용할 수 있게 개방시켜 준것이다.
⇒AutoLISP은 AutoCAD안에서만 작동하는 언어이다. 따라서 버전을 타지 않는다.모든 버전의 캐드에서 다 실행된다.물론 캐드 버전이 높아짐에 따라 새로 생겨나는 함수와 없어지는 함수가 있어 100% 모든 캐드 버전에서 실행되는 것은 아니지만 95% 이상 버전을 타지 않는다.
다만 캐드의 종류에 따라 사용하는 메뉴가 다르기 때문에 LISP이 실행되지 않을 수 있다.
예를들어 캐드 중에 우리가 알고 있는 일반적인 AutoCad 가 있고  Autocad 3d map 이란 캐드가 있다 map 버전에서는 일반 캐드에 없는 맵트림이라는 기능이 있다.이 맵트림 이라는 기능을 사용해서 리습을 만들었 다면 일반 캐드에서는 리습이 작동하지 않는다.

2.Object Arx(확장자 : arx)
⇒AutoCAD는 자체 개발언어로 AutoLISP을 제공한다. LISP은 C++처럼 전용 편집기가 있거나 컴파일을 하지 않는다.메모장과 같은 문서 편집기로 소스코드를 만들고 AutoCAD에서 적재와 실행을 한다.컴파일을 하지 않기 때문에 문서편집기로 LISP 파일(*.lsp)을 열면 소스코드를 그대로 볼 수 있는 단점이 있다. 그렇지만 소소코드를 암호화 할 수 있는 프로그램을 따로 구해서 배포하면 된다.바로 ARX 이다
⇒arx 는 C 언어 형식의 파일로 C++ 컴파일러를 사용하여 .EXP 또는 .ARX 파일로 컴파일 한 것이다
⇒Object ARX는 개발환경이 C++로 VC에서 제공되는 MFC를 그대로 사용할 수 있어 윈도우 응용 프로그램들처럼 다양한 사용자 인터페이스를 제공한다.
ARX 라이브러리는 2006 이전버전과 2007, 2008, 2009 라이브러리 버전이 다르고 2010과도 다르다.그래서 AutoCAD 2006에서 사용할 OAbject ARX라면 2006 ARX 라이브러리를 사용하여 Visual Studio 2002(7.0)으로 컴파일을 해야하고, AutoCAD 2007 2008,2009에서 사용하려면 2007,2008,2009 ARX 라이브러리를 사용하여 Visual Studio 2005(8.0)로 컴파일을 해야한다.그리고 AutoCAD 2010에서 사용하려면 2010 ARX 라이브러리를 사용해서 Visual Studio 2008(9.0)로 컴파일을 해야한다.
⇒VC7.0, VC8.0으로 컴파일을 할 때는 주의해야 한다.
2007 ARX 라이브러리를 사용하여 컴파일 한 ARX 파일은 AutoCAD 2007,2008,2009에서 사용할 수 있지만 2009 ARX 라이브러리를 사용하여 컴파일 한 ARX 파일은 AutoCAD 2009에서만 사용할 수 있다.
VC 6.0에서 만들어진 프로젝트를 VC7.0으로 변환하여 사용하는데 문제가 없지만 VC8.0으로 변환할 때는 컴파일 오류가 난다. 이는 멀티문자와 유니코드 사용여부때문에 나타나는 문제로 유니코드 사용으로 설정하고 문자형이나 일부 ARX 함수를 변경하여 컴파일한다
⇒ARX파일은 리습파일을컴파일 한것인데 문제는 캐드 버전에 따라 실행되고 안되고 한다.
버전을 탄다는 것이다.간혹 어느분은 arx를 캐드 2004에서 사용했는데 이번에 새로 캐드 2007을 설치하면서 실행이 되지않는다 라고 하는데 arx는 캐드버전에 맞게 사용해야 한다.
⇒arx는 사용자가 파일을 열어서 수정을 할수가 없다 열리지 않는다.심지어는 개발자까지도 열어볼 수 없다.수정을 할려면 원본인 확장자가 lsp 파일을 열어서 수정하고다시 컴파일하여 arx로 만들어야 한다.

3.FAS (확장자 : FAS)
⇒확장자가 lsp인 리습 파일을 캐드의 도구중에 Visual Lisp Editor 란 툴을 이용하여 컴파일 한 파일이다.
⇒리습과 마찬가지로 버전을 거의 타지 않는다.
⇒컴파일을 했기 때문에 열어서 수정할 수 없다.

4.VLX (확장자 : Vlx)
⇒vlx은 lsp,fas,dcl,dvb 등 여러파일을 묶어서 하나의 파일로 만들 수 있다.패키지 별로 한번에 묶으면 로드하거나 관리하기 편리하다
⇒마찬가지로 확장자가 lsp파일을 컴파일하여 만든 것이다.
⇒열어서 수정할 수 없다.
⇒버전을 특별히 타지 않는다.

5.DCL(DCL,OBJECTDCL,OPENDCL)
예 : dcl로 만든 리습 실행창
㉮.DCL
⇒DCL(Dialog Control Language) 대화상자 조정언어 이다.
⇒캐드에서 만약 어떤 값을 받아야 하는게 한가지가 아니고 여러개라면 리습을 실행시킬때 마다 여러개의 값을 하나씩 받기가 불편하다.이걸 극복하고자 새로운 언어인 DCL을 리습에서 도입시켰다.
문자로만 하나 하나 얻던 값들을 DCL을 통해서 한번에 여러개의 값을 받을 수 있고 그림으로 보여지게 해서 선택하게도 가능하다.이렇게 얻어진 값들을 리습에서 이용하는 방식이다.
⇒DCL의 단점은 ........
-문자를 사용해서 창을 디자인해야 한다.
-창이 떠 있는 동안은 리습이나 캐드의 통제가 안된다.
-DCL 언어가 적용된 텍스트 화일을 별도로 만들어서 리습과 접목해서 사용한다.
-VB나 C언어는 창디자인이 자유롭고 편한데 비해 DCL는 너무나 불편하다.
⇒DCL은 캐드가 기본으로 인식되게 해두어서 별도의 설치 없이 캐드만 있으면 사용이 가능하다.
㉯.OBJECTDCL
⇒Dcl의 단점을 극복하고자 외국의 개인이 만들어 배포하기 시작했다.
⇒창을 디자인하기가 쉬워졌고 리습과 접목시키기가 편해졌다.
⇒유료로 보통 배포한다.
⇒현재 개발을 중지 했다고 한다.
㉰.OPENDCL
⇒들려오는 전설로는 어떤 프로그래머가 A/s를 하다가 Objectdcl에 있었던 버그를 해결하고자 만든것이 OPENDcl이란 소리가 있다.
⇒무료로 배포 한다.
⇒OpenDCL이 설치가 되어 있어야 한다.
인터넷 어디에서든 "OpenDCL"을 검색하면 클릭  이곳으로 안내해 준다.여기에서 DOWNLOAD를 눌러주면 OpenDCL Studio란 것과 OpenDCL Runtime란 두 가지가 나온다.
OpenDCL Runtime = 캐드에서 OpenDCL을 사용할 수 있게 해주는 것이다.
OpenDCL Studio = 창을 디자인하는 프로그램 + OpenDCL Runtime
⇒OpenDCL을 이용해서 만든 것을 사용만 하실 분은 OpenDCL Runtime 아래 다운로드 링크에서 다운 받으시고 설치해준다.
다운로드 링크
OpenDCL을 이용해서 직접 만드실 분은 OpenDCL Studio 아래주소에서 다운 받으시고 설치해준다.
다운로드 링크
⇒opendcl은 다른 리습과 마찬가지의 같은 확장자를 이용한다.따라서 일반 리습인지 아니면 이리습이 opendcl 인지 알수 없다.
만약 리습을 구해서 자신의 캐드에 적용하고 명령어를 쳤는데  Error: OpenDCL Runtime could not be loaded 이란 에러 메세지가 커맨드 박스에 나타나면 opendcl로 만들어진 리습이다.이럴땐 위 주소로 들어가서 OpenDCL.Runtime을 설치하면 된다.그리고 나서 다시한번 리습을 실행해 본다.
-OpenDCL.Runtime은 한번만 설치 해주고 설치한 것을 한번만 실행해주면 된다. 

6.VBA(Visual Basic for Application)
⇒특별한 확장자가 있는 것이 아니라 비쥬얼 베이직 언어이다.
⇒사실 리습은 아주? 강력하지 않다.좀더 복잡한 작업을 수행할려면 리습으로는 한계가 있다.이러하여 비쥬얼 베이직 언어로 리습을 만들면 좀더 복잡한 작업을 수행할 수 있다.
예로 외부 db와의 연계,windows의 컨트롤 ,다른 프로그램과의 연동등이 리습 언어로는 한계가 있다.또한 C++을 사용하면 좋지만 배우기 어렵다.
⇒VBA로는 윈도우에서 제공하는 모든 폼과 컨트롤을 다 사용할 수 있고,쉬운 BASIC이란 언어로 복잡하고 어려운 코딩문제를 해결할 수 있으며 MS사의 엑셀,워드,파워포인트 등을 캐드와 연결하여 자유자재로 사용할 수 있게 한다.
⇒보통 Autolisp을 사용하다가 한계를 많이 느껴서 vba로 넘어가시는 분이 상당 수 있다.
⇒비쥬얼베이직 함수를 접목시켜서 만든 리습들을 vba라고한다.파일 확장자는 위의 리습들의 확장자를 사용한다.

◈ 리습을 캐드에 적용하는 방법
⇒모든 리습은 캐드에 적용(Load)하는 방법이 동일하다.리습은 플러그인이나 에드온 같은 개념이면서도 어찌보면 다른 툴이나 마찬가지여서 리습을 만든 후에 별도에 setup을 시킬 필요가 없다.뭐,요즘은 셋업으로 설치되는것도 나온다.



⇒만약 리습을 만들 줄 몰라서 어느 사이트 에서 구했다고 할때 리습을 구한 사이트에 리습 명령어를 적어 놓지 않았다면 난감하다.
리습은 만든 사람이 자기가 알아보기 쉽게 다양한 자기만의 명령어를 이용하기 때문이다.
이럴땐 리습(*.lsp) 파일을 메모장으로 열어서 defun c: 이란 부분을 찾는다.defun c: 다음에 있는 단어가 명령어이다.
하지만 확장자가 arx,fas,vlx 파일은 메모장으로 열어볼 수 없다.다른 어떠한 툴로도 열어볼수가 없다.그래서 보통은 arx,fas,vlx 파일을 올려둔 사이트에서 명령어를 알려준다.하지만 어떠한 것들은 그냥 arx,fas,vlx 파일을 로드하면 명령어 입력창에 명령어는 바로 이것이다 라고 친절히 나타내 해준다.
⇒리습은 한번 Load 해두면 계속해서 Load 되어 있는 것이 아니다.어느 도면에서 리습을 Load 한 후 사용 하다가 다음 도면을 열면 기존에 Load 했던 리습은 작동을 안한다.그래서 도면을 열때마다 일일이 Load 하는 것이 귀찮으신 분들은 이렇게 하면 된다.
이렇게 리습을 목차(contents)에 넣어두시고 캐드를 재실행하면 이제 부터는 계속해서 영원히 리습은 Load 된 상태가 된다.
다른 방법으로는 오토캐드가 설치 된 폴더에 보면 서포트(Support)폴더가 있다.그 폴더안에 acad2011.lsp(예 : 캐드 2011버전. 참고로 캐드 2002버전은 acad.lsp 이고 캐드 2004버전은 acad2004.lsp 이고 이후 버전은 캐드 버전의 이름이 붙는다.캐드 2012는 acad2012.lsp 이다) 이란 파일이 있다.그안에 자신이 자주 사용하는 리습을 몽땅 넣어두면 캐드가 실행 될 때마다 같이 읽어서 실행 되기 때문에 리습을 매번 Load 해서 사용 할 필요가 없다.
여러가지 리습을 한꺼번에 한곳에 넣었다.

◈ 글을 마치며
리습은 어찌보면 중독성이 강한 툴이다.몇일이 걸릴 작업을 몇초만에 해결할 수도 있다.
또한 각종 언어를 사용하기 때문에 폭넓은 프로그래밍의 세계로 빠져들 수 도있다.
회사에서 리습을 적절히 사용한다면 작업의 효율성을 높이고 남들 야근 할때 칼퇴근을 할수도 있다.
현재 리습은 보편적으로 사용되고 있고 사용을 못하면 좀 뒤떨어진 사람으로 취급받는 시대가 되었다.엑셀과 연동도 가능해졌고 캐드메뉴에 있는 각종 툴보다 더 진보한 툴이 리습으로 구연되고 있다.오죽하면 캐드 개발사에서도 한해에 유명한 리습을 수집하여 캐드에 접목을 시켜서 캐드 메뉴에 툴로 만들고 캐드를 내놓고 있다.
또한 리습이 나옴으로 해서 리습을 너무 많이 사용하다가 오히려 캐드 명령어를 모르는 사람들도 늘어나고 있다.그러므로 중요한것은 캐드의 이해가 먼저이고 그 이후 리습을 다룬다면 보다 넓은 시야를 가질 수 있을 것이다.

◈발췌,출처
이혁진의  VBA(책)
아키모아

16 개의 댓글

와...훌륭하신 글입니다..
정리가 아주 잘 되어 있네요..ㅎㅎ

Reply

깔금한 정리네요 리습만 잘짜게된다면 다른 프로그래밍 언어는 조금 다르더라도 쉽게 짤수가 있겠네요 캐드 명령어만 익힐라 했는데 ~ 리습짜보면 명령어도 손쉽게 알수있겠네요 좋은정보 감사합니다.

Reply

그렇습니다.리습짜시다가 비쥬얼베이직하시고 더나아가서는 c++로 넘어가시는분이 많습니다.댓글 고맙습니다

Reply

요즘 무슨일 있으신건 아니신지요?

Reply

뉘신지요.왜 그런 말씀을 하시는지...

Reply

리습에 대하여 처음 알았습니다. 캐드에 천외천을 보고 갑니다.
감사합니다. 한번 열심히 공부해봐야겠네요

Reply

천외천이라..지명을 말씀 하시는것 같군요.감사합니다

Reply

감사합니다. 캐드를 사용하면서도 컴퓨터에 새로 프로그램을새로깔거나, 다른사람 자리에서 작업시 항상 리습때문에 더뎠습니다.
잘 배우고 갑니다.감사합니다~

Reply

별말씀을 제가 더 감사합니다

Reply

좋은글 잘보고가요

Reply

좋은 자료 감사합니다.

Reply

정말 정리가 잘 되어 있네요 잘보고 갑니다

Reply

감사합니다.자주들러주세요

Reply

리습 공부중인데 질문이 있습니다

Reply

댓글 쓰기