AutoLISP (Auto LIST Programming)

2014.06.18 07:53

Yeh 조회 수:12408

** AutoLISP(Auto LIST Programming)이란?
AutoCAD 실행시 발생되는 반복적인 작업을 단순화하여 생산성을 높이고 사용자 의미의 Program을 구성하여
작업 능률을 극대화시키기 위한 AutoCAD 전용 Interpreter Language이다.

** AutoLISP의 Data 요소

INTEGER
REAL
SYMBOL
STRING
FILE - DESCRIPTOR
ENTITY NAME
LIST
ATOM
** AutoLISP Function Commands 기본 명령
명 령 어기 능 설 명
+ <num1> <num2> ...+ 표시 이후 숫자를 모두 더한다.
- <num1> <num2> ...<num1>에서 <num1> 이후의 숫자를 모두 뺀다.
* <num1> <num2> ...* 이후의 숫자를 모두 곱한다.
/ <num1> <num2> ...<num1>에서 <num1> 이후의 숫자들의 곱으로 나눈다.
= <num1> <num2> ...<num1>과 <num2>가 같은지 검사한다.
/= <num1> <num2><num1>과 <num2>가 다른지 검사한다.
< <num1> <num2> ...<num1>이 <num2>보다 작은지 검사한다.
<= <num1> <num2> ...<num1>이 <num2>보다 같거나 작은지 검사한다.
> <num1> <num2> ...<num1>이 <num2>보다 큰지 검사한다.
>= <num1> <num2> ...<num1>이 <num2>보다 같거나 큰지 검사한다.
~ <integer><num>의 2진 NOT을 응답한다.
1+ <num><num> 1을 더한다.
1- <num><num> 1을 뺀다.
abs numbernumber의 절대 값을 구한다.
alert! string대화상자를 통해 경고 메시지를 출력한다.
and expressionŋ expressionŌ ...expressionŋ, expressionŌ 모두가 T이면 T를 응답한다.
angle point1 point2point1에서 point2까지 직선의 각을 구한다.
angtos angle [<mode> [<precision>]]라디안 단위를 여러 단위로 변환하여 문자열로 응답한다.
append <list1> <list2> ...나열된 <list>을 하나의 list로 만든다.
apply <function> <list><list>의 인수를 가진 <function>을 실행한다.
ascii <string><string>의 ASCII 문자 CODE를 응답한다.
assoc <item> <alist><alist>의 <item>에 해당하는 list를 구한다.
atan num [num2]아크탄젠트 값을 라디안으로 응답한다.
atof stringstring을 실수로 변환한다.
atoi stringstring을 정수로 변환한다.
atom <item><item>이 list인 경우 nil을 응답한다.
boole <func> <int1> <int2> ...일반 논리 boole함수를 응답한다.
boundp <atom>일반 논리 boole함수를 응답한다.
cadr <list><list>의 두 번째 요소를 구한다.
car <list><list>의 첫 번째 요소를 구한다.
cdr <list><list>의 첫 번째 요소를 제외한 모든 요소를 구한다.
char <num><num>를 해당 ASCII문자를 응답한다.
close <file-desc>파일을 닫는다.
cond <testexpr> <result>...각각의 조건식의 결과가 T이면 다음의 <result>를 실행한다.
cos angleangle의 코사인값을 구한다.
defun <sym> <arg list> <expr> ...<sym>이라는 이름으로 함수를 정의한다.
distance <pt1> <pt2><pt1>과 <pt2>사이의 거리를 구한다.
entdel <entity-name><entity name>을 삭제하거나 복구한다.
entget <entity-name><entity name>의 entity list를 구한다.
entlast가장 최근에 그려진 도면요소를 선택한다.
entmod <elist>도면요소의 바뀐 내용을 화면에 반영한다.
entnext [<ename>]<ename> 다음에 있는 도면요소를 구한다.
eq <expr1> <expr2><expr1>과 <expr2>가 같은지 검사한다.
eval! <expr><expr>의 계산결과를 응답한다.
exp <num>e의 <num> 제곱을 구한다.
expt <base> <power><base> <power> 제곱을 구한다.
findfile <filename><filename>의 파일을 찾는다.
fix <num><num>를 정수로 변환한다.
float <num><num>를 실수로 변환한다.
foreach <name> <list> <expr> ...<list>내의 모든 요소를 <expr>로 실행한다.
gcd <num1> <num2><num1>과 <num2>의 최대 공약수를 구한다.
getangle [<pt>] [prompt>]사용자로부터 각도를 요구한다.
getcorner <pt> [prompt>]사용자로부터 <pt>점을 기준으로 점를 요구한다.
getdist [<pt>] [prompt>]사용자로부터 거리를 요구한다.
getenv <var-name>시스템 환경변수의 값을 응답한다.
getreal [<prompt>]사용자로부터 실수 입력을 요구한다.
getstring [<cr>] [<prompt>]사용자로부터 문자열 입력을 요구한다.
getvar <varname>AutoCAD의 시스템 변수를 구한다.
graphscr화면을 그래픽 화면으로 전환한다.
if <testexpr> <thenexpr> [<esleexpr>]<testexpr>이 nil이 아니면 <thenexpr>을, 그외에는 <elseexpr>을 실행.
initget [<bits>] [<string>]...getxxx 함수에 의해서 사용되는 각종 옵션을 설정한다.
itoa <integer>정수를 문자로 변환한다.
lambda <arguments> <expr> ...anonymous(무영) 함수를 정의한다.
last <list><list>의 마지막 요소를 응답한다.
length <list><list>의 요소수를 정수로 응답한다.
list <expr1> <expr2>...<expr1>, <expr2> 이후의 요소를 묶어 하나의 list로 응답한다.
listp <item><item>이 리스트이면 T, 그렇지 않으면 nil을 응답한다.
load <filename> [<onfaiure>]AutoLISP 파일을 loading한다.
log <num><num>의 자연대수를 구한다.
logand <num> <num> ...logand 이후의 숫자의 논리곱 AND를 구한다.
logior <num> <num> ...logand 이후의 숫자의 논리합 OR를 구한다.
lsh <num> <numbits> ...<num>을 <numbits> 만큼 논리적으로 시프트한다.
mapcar <function> <list> <list>...list의 개별 요소를 갖는 <function>을 실행한다.
max <num1> <num2> ...나열된 수치 중 가장 큰수를 구한다.
member <expr> <list><list>를 검색하여 <expr> 을 찾는다.
min <num1> <num2> ...나열된 수치 중 가장 작은수를 구한다.
not <item><item>의 결과 T인지 nil인지 검사한다.
nth <n> <list><list>의 <n>번째 요소를 응답한다.
null <item><item>이 nil이면 T를 응답한다.
nump <item><item>이 실수 또는 정수이면 T를 응답한다.
open <filename> <mode>파일을 오픈한다.
or <expr1> <expr2> ...<expr1>, <expr2> 중 어느 하나라도 nil이 아니면 T를 응답한다.
osnap <pt> <mode><mode>에 의해서 <pt>점에 적용한 점을 구한다.
pi상수로 3.1415926, π
polar <pt><angle><distance><pt>점에서 <angle> 각으로 <distance>거리만큼 떨어진 점을 구한다.
prin1 <expr> [<file-desc>]<expr>을 화면 또는 파일에 출력한다.
princ <expr> [<file-desc>]<expr>을 화면 또는 파일에 출력한다.
print <expr> [<file-desc>]<expr>을 화면 또는 파일에 출력한다.
progn <expr1> <expr2> ...여러 개의 실행문 및 수식을 하나의 문장으로 묶어 처리한다.
prompt <msg>화면에 <msg>를 출력한다.
quote <expr><expr>을 계산 없이 그대로 응답한다.
read <string><string>의 첫 번째 list또는 atom을 응답한다.
read-char [<file-desc>]키보드 또는 파일에서 하나의 문자를 읽어 들인다.
read-line [<file-desc>]키보드 또는 파일에서 하나의 문자열을 읽어 들인다.
redraw [<ename> [<mode>]]도면 전체 또는 <ename>을 REDRAW한다.
rem <num1> <num2><num1>을 <num2>로 나누고 나머지를 구한다.
repeat <num> <expr> ...<expr>을 <num>만큼 반복한다.
reverse <list><list>를 거꾸로 배치한다.
rtos <num> [<mode> <precision>]<num>를 여러 형태의 문자열로 응답한다.
setq <sym> <expr> ...<expr>을 <sym>에 설정한다.
setvar <varname> <value>AutoCAD의 시스템 변수를 <value>로 설정한다.
sin <angle><angle>의 사인값을 구한다.
ssadd [<entity-name> [<selection-set>]]<selection-set>에 <entity-name>을 추가시킨다.
ssget [<mode> <pt1> <pt2> <pt-list>]
[<filter-list>]
하나 이상의 도면요소를 선택한다.
sslength <selection-set><selection-set>에 있는 도면요소의 갯수를 구한다.
ssname <selection-set> <index><selection-set>에서 <index>번째의 도면 요소의 이름을 구한다.
sqrt <num><num>의 제곱근을 구한다.
strcase <string> [<t>]<string>을 대문자 또는 소문자로 응답한다.
strcat <string1> <string2> ...나열된 <string1>, <string2> ...을 연결하여 응답한다.
strlen <string><string>의 문자수를 구한다.
substr <string> <start> [<length>]<string>을 <start>부터 <length>수 만큼 응답한다.
tblsearch <table name> <symbol> [<setnext>]<table name>의 <symbol>에 대한 정보를 응답한다.
terpri화면에 newline을 출력한다.
textscrTEXT 화면으로 전환한다.
type <item><type>의 형태를 응답한다.
while <testexpr> <expr> ....<testexpr>이 nil 이 될 때까지 <expr>을 계산한다.
write-char <num> [<file-desc>]파일에 <num>의 ASCII 코드에 대당하는 문자를 기록한다.
write-line <string> [<file-desc>]파일에 <string>을 기록한다.
zerop numbernumber가 0인지 검사한다.
01.LOAD
   ** 기능 : AutoLISP File을 AutoCAD내에서 호출하여 사용하는 기능
   ** 형식 : (LOAD "filename" [error조건])
   ** 참고 : error조건은 지정 File이 없을 때 사용자가 알아볼 수 있는 Message 기재

02.DEFUN (DEfine FUNction)
   ** 기능 : 사용할 함수명령을 선언하는 기능
   ** 형식 : (DEFUN [C:]([arg1] [arg2] [/] [arg3] ...)
        ) ;DEFUN Close
   ** Option : # Symbol 명령으로 사용될 함수명을 지정하는 기능으로써 예약 어는 사용할 수 없다.
       @ Symbol 지정 함수 명령을 사용하기 위해서는 명령을 () 로 표현해야 한다.
       @ C:Symbol 지정 함수 명령을 AutoCAD 명령처럼 수행할 수 있도록 지정하는 의미로써 "C:"은
         Hard Disk를 의미하는 것은 아니다.
       # Argument 사용 변수명을 지정하는 기능으로 광역변수,지역변수, 독립변수로 나누어 지정한다.
       @ 광역변수 ()내에 조건을 나열하지 않는 기능으로 수행 프 로그램 밖에서도 그 변수의 데이타를
         사용할 수 있다.
       @ 지역변수 지정 함수내에서만 사용되는 변수로써 변수앞에 는 반드시 "/"를 기재한다.
       @ 독립변수 지정 함수밖에서도 사용할 수 있도록 지정된 변 수로써 지역변수와 함께 지정시에는
         독립변수를 앞에 지정한다.

03.SETQ (SET eQual)
   ** 기능 : "DEFUN"명령에 의해 선언된 변수를 이용하여 지정변수의 DATA 또는 독립변수 앞에 지정한다.
   ** 형식 : (SETQ [ ....])

04.COMMAND
   ** 기능 : AutoCAD 명령을 직접 수행하는 기능
   ** 형식 : (COMMAND <"AutoCAD Commands"> <명령조건> [<" ">])
   ** 참고 : 명령뒤에 " "(Null)을 지정하는 것은 SpaceBar 또는 EnterKey를 누 르는 것과 동일 효과를 얻는
             기능이며 "<명령조건>"에 문자 조건을 제시할 경우에는 반드시 " "안에 기재해야 한다.

05.GETVAR (GET VARiable)
   ** 기능 : AutoCAD내의 변수에 저장되는 최근에 Data를 나타내는 기능
   ** 형식 : (GETVAR "")

06.SETVAR (SET VARiable)
   ** 기능 : AutoCAD의 각종 변수의 Data를 조정하는 기능으로 AutoCAD 명령의 "SETVAR"명령 기능과
             동일하다.
   ** 형식 : (SETVAR "" )
   ** 참고 : Object SNAP을 지정할 경우에는 "OSMODE"뒤에 지정 Object SNAP수치 를 기입하며 각 변수의
             "ON","OFF" 조건은 0과 1로 조정한다.
2. AutoLISP Function Commands 산술 함수 명령
명 령 어형 식기 능 설 명
++ ....각 수치의 합산을 구한다.
-- ....의 수치에서 나머지 수치의 값을 뺀다.
** ....각 수치를 곱셈 처리한다.
// ....수치에서 수치를 나눈 후 를 나눈다.
1+1+지정 데이타에 1씩 누적시킨다.
1-1-지정 데이타에 1씩 뺀다.
EXPEXP밑을 e로 하는 제곱값을 구한다.
EXPTEXPT을 밑으로 하여 제곱승을 구한다.
SQRTSQRT지정 수치의 제곱근을 구한다.
LOGLOG지정 수치의 자연대수(log n)를 구한다.
SINSIN지정 각도의 SINE값을 구한다.
COSCOS지정 각도의 COSIN값을 구한다.
ATANATAN지정 각도의 ARCTANGENT값을 구한다.
ABSABS지정 수치의 절대값을 구한다.
REMREM지정된 두 수치를 나눈 후 나머지를 구한다.
MAXMAX ....지정된 수치들 중에서 가장 큰 수치를 구한다.
MINMIN ....지정된 수치들 중에서 가장 작은 수치를 구한다.
GCDGCD지정된 두 수치의 최대 공약수를 구한다.
PIPI상수 π(3.141592....)값을 구한다.

3. AutoLISP Function Commands Display 함수 명령
01.GRAPHSCR (GRAPHic SCReen) **기능 : Text Screen에서 Graphic Screen 상태로 전환시키는 기능 **형식 : (GRAPHSCR) 02.TEXTSCR (TEXT SCReen) **기능 : Graphic Screen에서 Text Screen 상태로 전환시키는 기능 **형식 : (TEXTSCR) 03.TERPRI (TERminate PRInt) **기능 : 화면에 입력표시된 자료가 완료되면 자동으로 줄바꿈시키는 기능 **형식 : (TERPRI) **참고 : 본 명령 대신 Message앞에 "\n"을 기재하면 동일한 효과를 낸다. **사용 예 : (PROMPT "Enter Name") (TERPRI) (PROMPT "\nEnter Name")
4. AutoLISP Function Commands 화면출력 함수 명령
01.PRIN1 **기능 : 지정된 결과를 화면상에 나타내는 기능으로써 문자인 경우 " "안에 기재하여야 하며 출력할때는 " "까지 출력된다. **형식 : (PRIN <출력조건>) 02.PRINC **기능 : "PRIN1"기능과 유사하나 문자 출력시 " "는 출력하지 않는다. **형식 : (PRINC <출력조건>) **참고 (특수기능) \n : New Line \r : Return \e : Escape \t : Tab \nn : Octal Value 특수기능의 문자는 "\"를 지정한 후 반드시 소문자로 기재하여야 하 며 "PRIN1"과 "PRINT"는 기능이 작동되지 않고 문자로써 출력되며, "PRINC","PROMPT" 기능에서는 첫번째 " 다음에 기재한다. 03.PRINT **기능 : "PRIN1"기능가 유사한 기능으로 자동적으로 줄바꿈을 한 후 출력한다. **형식 : (PRINT <출력조건>) 04.PROMPT **기능 : 화면상에 지정 Message를 출력시키는 기능으로 문자만 출력 가능하다. **형식 : (PROMPT "<출력조건>")
5. AutoLISP Function Commands User 입력 함수 명령
01.GETPOINT **기능 : 사용자에 의해 원하는 좌표를 선택 **형식 : (GETPOINT [] [<"message">]) **참고 : ⓐ "point"는 기존의 지점으로부터 새로운 지점을 선택하기 위한 이 미 지정된 좌표를 선택 ⓑ "message"는 사용자가 알아보기 좋은 message를 표현하여 좌표 선택시 도움을 준다. **예제 : (defun c:li (/ pnt1 pnt2 pnt3 pnt4) (graphscr) (setq pnt1 (getpoint "\nFirst point: ")) (setq pnt2 (getpoint "\nSecond point: ")) (setq pnt3 (list (car pnt1) (cadr pnt2))) (setq pnt4 (list (car pnt2) (cadr pnt1))) (command "line" pnt1 pnt2 pnt3 pnt4 "c") ) 02.GETCORNER **기능 : 기존의 지점을 이용하여 창구조의 다른 지점을 선택하는 기능 **형식 : (GETCORNER [<"message">]) **참고 : 본 기능을 수행하기전 반드시 "GETPOINT"에 의해 기지점을 선택해야함. **예제 : (defun c:filrec (/ pnt1 pnt2 pnt3 pnt4 ang1 len1) (graphscr) (setq pnt1 (getpoint "\nPick first corner: ")) (setq pnt4 (getcorner pnt1 "\nPick other corner: ")) (setq len1 (distance pnt1 pnt4)) (setq ang1 (angle pnt1 pnt4)) (setq pnt2 (polar pnt1 0 (* len1 (cos ang1)))) (setq pnt3 (polar pnt4 pi (* len1 (cos ang1)))) (command "solid" pnt1 pnt2 pnt3 pnt4 "") ) 03.GETDIST (GET DISTance) **기능 : 임의의 길이를 설정하거나 특정 지점으로부터의 거리를 설정시키는 기능 **형식 : (GETDIST [] [<"message">]) **참고 : "point"를 설정하면 1 지점으로부터 나아갈 거리를 설정한다. **예제 : (defun c:sq (/ p1 p2 p3 p4 vl hl) (graphscr) (setq p1 (getpoint "\nPick a base point: ")) (setq vl (getdist "\nVertical length: ")) (setq hl (getdist "\nHorizontal length: ")) (setq p2 (list (car p1) (+ vl (cadr p1)))) (setq p3 (list (+ hl (car p2)) (cadr p2))) (setq p4 (list (car p3) (cadr p1))) (setvar "osmode" 32) (command "rotate" p1 "") (setvar "osmode" 0) ) 04.GETANGLE **기능 : "UNITS" 명령의 각도 기능에 의해 각도를 입력받는 기능 **형식 : (GETANGLE [] [<"message">]) **참고 : 본 기능은 "UNITS" 명령이 지정된 0˚를 기준으로 한다. **예제 : (setq ang1 (getangle)) (setq ang2 (getangle pnt1)) (setq ang3 (getangle "\nEnter Angle: ")) (setq ang2 (getangle pnt1 "\nEnter Angle: ")) 05.GETORIENT **기능 : "GETANGLE" 기능과 유사한 기능이아 "UNITS" 명령의 영향을 받지않고 North를 기준점으로 시계방향으로 각도를 증가시킨다. **형식 : (GETORIENT [] [<"message">]) **참고 : ⓐ 각도 GETANGLE GETORIENT --------------------------------------------- 0 0.0000 1.570796 -90 1.570796 3.141593 180 3.141593 4.712389 90 4.712389 0.0000 ⓑ "GETANGLE" 및 "GETPOINT" 모두 입력은 각도로 받고 처리는 Radian으로 처리된다. **예제 (setq ang1 (getorient)) (setq ang2 (getorient pnt1)) (setq ang3 (getorient "\nEnter angle: ")) 06.GETINT (GET INTeger) **기능 : 입력되는 수치데이타를 정수형으로 입력받는 기능 **형식 : (GETINT [<"message">]) **예제 : (setq n (getint "\nEnter Number: ")) . . (while (<= n 10) . . (setq n (1+ n)) . ) 07.GETREAL **기능 : 입력되는 수치데이타를 실수형으로 입력받는 기능 **형식 : (GETREAL [<"message">]) 08.GETSTRING **기능 : 입력되는 데이타를 문자형으로 입력받는 기능 **형식 : (GETSTRING [] [<"message">]) **참고 : 본 기능은 한단어만 입력받을 수 있으나 만약 문자열로 받고자 할때 에는 명령뒤에 "T"를 지정하면 문자로 입력받을 수 있다. **예제 : (defun c:tx (/ tx1 tx2 t) (graphscr) (setq tx1 (getstring "Integer string: ")) (setq tx2 (getstring t "Integer string: ")) (print tx1) (print tx2) ) 09.GETKWORD (GET KeyWORD) **기능 : "GETSTRING" 명령과 유사한 기능이나 이 명령은 "INITGET" 명령에 의해 지정된 Text만 받아들일 수 있다. **형식 : (GETKWORD [<"message">]) **예제 : (initget 1 "yes no") (setq wd (getkword "in(yes/no): ")) 10.INITGET (INITial GET) **기능 : "GETxxx("GETSTRING"과 "GETVAR"는 제외)" 명령들이 받아들이는 조건을 조정하는 기능 **형식 : (INITGET [] [""]) **참고 : Bit 내용 -------------------------------------------------- 1 NULL입력을 허용하지 않는다. 2,3 "0"의 입력을 허용하지 않는다. 4~7 "-"수치의 입력을 허용하지 않는다. 8~15 LIMITS값을 검사하지 않는다. 16~31 2D Point 대신 3D Point로 입력받는다. 32 RubberBand Line을 Dashed Line으로 변한시킨다.
6. AutoLISP Function Commands List 함수 명령
01.LIST **기능 : 여러개의 요소를 하나의 List로 처리하는 기능 **형식 : (LIST ....) **예제 : (setq pt1 (list 2.5 3.5)) (setq pt2 (list 1.5 2.5 3.5)) 02.REVERSE **기능 : 지정 List의 요소를 뒤바꿈시키는 기능 **형식 : (REVERSE ) **예제 : (reverse '(3 2 5)) ; result (5 2 3) (reverse (list 1.5 2.5 3.5)) 03.CAR **기능 : 지정 요소의 첫번째 요소만 취하는 기능 **형식 : (CAR ) **예제 : (setq aa (car '(10 20 30))) 04.CDR **기능 : 지정 요소중 첫번째 요소를 제외한 나머지 요소를 취하는 기능 **형식 : (CDR ) **예제 : (setq bb (cdr '(10 20 30))) 05.CADR **기능 : 지정 요소중 두번째 요소만 취하는 기능 **형식 : (CADR ) **예제 : (setq cc (cadr '(10 20 30))) 06.CADDR **기능 : 지정 요소중 세번째 요소만 취하는 기능 **형식 : (CADDR ) **예제 : (setq zz (caddr '(10 20 30))) 07.ASSOC (ASSOCiate) **기능 : 지정 요소중에서 선행지정된 변수가 지니고 있는 데이타를 산출하는 기능 **형식 : (ASSOC ) **예제 : (setq kk '((width3) (size4) (depth5))) (assoc 'size kk) 08.SUBST (SUBSTitute) **기능 : 기존의 데이타를 새로운 데이타로 치환시키는 기능 **형식 : (SUBST ) **예제 : (setq ss '(a b (c d) e)) (subst 'qq 'b ss) (subst 'test '(c d) ss) (subst 'kk 'z ss) 09.CONS (CONStant) **기능 : 지정 List내에 지정 Item의 첫 요소를 함께 포함시키는 기능 **형식 : (CONS ) **예제 : (cons 'a '(b c d)) (cons '(a b) '(b c d)) 10.APPEND **기능 : 여러가지의 List의 구조를 하나의 List로 혼합시키는 기능 **형식 : (APPEND ....) **예제 : (append '(a) '(b c) '(d e f)) 11.APPLY **기능 : 지정 List의 내용을 원하는 함수 기능을 수행시키는 기능 **형식 : (APPLY ) **예제 : (apply '+ '(1 2 3)) (apply '* '(2 3 6)) 12.LAST **기능 : 지정 List의 요소중 마지막 요소를 취하는 기능 **형식 : (LAST ) **예제 : (last '(1 2 3 4 5)) 13.NTH **기능 : 지정 List의 요소중 n번째 위치하고 있는 요소를 선택하는 기능 **형식 : (NTH ) **예제 : (nth 3 '(a b c d e f)) 14.MEMBE **기능 : 지정 List의 요소중 지정 요소의 첫번째 요소부터 나머지를 선택 **형식 : (MEMBER ) **예제 : (member 'b '(a b c d b a d)) (member 'k '(a b k l)) (member 'q '(a b c d e)) 15.LENGTH **기능 : 지정 List의 요소의 갯수 파악 **형식 : (LENGTH ) **예제 : (setq aa (list a b c d e f)) (setq bb (+ 4 (length aa)) 16.FOREACH **기능 : 지정 List의 요소를 각각 처리할 수 있도록 지정 **형식 : (FOREACH ) **예제 : (setq aa (list "A" "B" "C" "D")) (foreach n aa (print n)) 17.LISTP **기능 : 지정 List의 요소가 List구조로 구성되어 있으며 True Atom으로 구성 되어 있으면 NIL로 처리하는 기능 **형식 : (LISTP ) **예제 : (listp '(1 2 3 4)) (listp '(a)) 18.MAPCAR **기능 : 지정 List의 구조를 지정 Function의 구조대로 각각 처리하는 기능 **형식 : (MAPCAR ) **예제 : (mapcar '1+ '(10 20 30 40)) (mapcar '1- '(10 20 30 40)) (mapcar 'ascii '("@" "&" "?" "/")) (mapcar 'chr '(65 66 67 68))
7. AutoLISP Function Commands Condition 함수 명령
01.IF **기능 : 조건식 비교하는 기능으로 지정 조건식이 만족 "하면 조건식 다음 문장을 수행하고, 만족하지 않은 경우에는 나머지 문장을 처리하는 기능 **형식 : (IF <조건식> ) **예제 (if (= 3 2) "YES" "NO") (if (= 2 (+ 1 1)) "YES" "NO") **참고 : 만약 True조건식을 여러 문장으로 기술할 경우에는 "PROGN"명령을 사용한다. 02.WHILE **기능 : 지정 조건식이 만족되었을 경우에는 Loop내의 문장을 수행하고 만족 치 않을 때에는 Loop밖의 문장을 수행하는 반복 기능 **형식 : (WHILE <조건식> ....) **예제 : (defun c:aa () (setq a 0 b 0) (while (<= a 100) (setq a (1+ a)) (setq b (+ b a)) (print a) (print b) ) (princ) ; echo controlled ) 03.REPEAT **기능 : 지정 수식을 지정 수치만큼 반복 수행하는 기능 **형식 : (REPEAT ....) **예제 : (setq a 10) (setq b 100) (repeat 4 (setq a (+ a 10)) (setq b (+ b 10)) ) 04.PROGN **기능 : 여러개의 문장 및 수식을 하나의 문장으로 묶어 처리하는 기능 **형식 : (PROGN ....) **예제 : (if (= a b) (progn (setq a (+ a 10)) (setq b (+ b 10)) ) ) 05.COND (CONDition) **기능 : 여러개의 함수를 인수로 받아들여 각 조건에 맞는 수식을 수행시키는 기능 **형식 : (COND <조건1> <수식1> <조건2> <수식2> ....) **예제 : (cond ((>= pgt 90) (setq gr "A")) ((>= pgt 80) (setq gr "B")) ((>= pgt 70) (setq gr "C")) ((>= pgt 60) (setq gr "D")) (t setq gr "F") )
8. AutoLISP Function Commands 관계 논리 함수 명령
01.= **기능 : 두개의 조건이 동일한가를 비교 **형식 : (= ....) **예제 : (= 2.0 4.0) (= 1.0 1.0) (while (= a 100) . . ) 02./= **기능 : 두개의 지정 조건이 다른가를 비교 **형식 : (/= ....) **예제 : (/= 10 20) (/= 10 10) 03.< **기능 : 선행 조건이 후행 조건과 비교하여 작은 값인가를 비교 **형식 : (< ) **예제 : (> 10 20) (> 20 10) 04.> **기능 : 선행 조건이 후행 조건과 비교하여 큰 값인가를 비교 **형식 : (> ) **예제 : (< 10 20) (< 20 10) 05.>= **기능 : 선행 조건이 후행 조건에 비해 크거나 같은가를 비교 **형식 : (>= **예제 : (>= 10 20) (>= 20 10) 06.<= **기능 : 선행 조건이 후행 조건에 비해 작거나 같은가를 비교 **형식 : (<= ) **예제 : (<= 10 20) 07.EQ **기능 : 비교 조건식이 동일한가를 비교 **형식 : (EQ ) **예제 : (tq f1 '(a b c)) (setq f2 '(a b c)) (setq f3 '(a b c)) (setq f4 '(a b c)) (eq f1 f2) (eq f2 f3) (eq f3 f4) (eq f4 f1) **참고 : "=" 함수는 Atom을 비교하는 반면 본 기능은 List를 비교 08.EQUAL **기능 : "EQ" 기능과 유사하나 공차를 허용한다. **형식 : (EQUAL []) **예제 : (setq a1 1.2345) (setq a2 1.2345) (equal a1 a2) (equal a1 a2 0.0001) 09.AND **기능 : 지정 조건을 모두 만족하는 경우를 선택 **형식 : (AND ....) **예제 : (and a1 1.2345) (and a2 2.3456) (and a1 a2) 10.OR **기능 : 지정 조건식 중 하나라도 만족하면 수행할 수 있는 조건제시 가능 **형식 : (OR ....) 11.LOGAND **기능 : 지정된 수치들을 Bit로 해석시킨 후 논리곱을 구하는 기능 **형식 : (LOGAND ....) 12.LOGIOR **기능 : 지정된 수치들을 Bit로 해석시킨 후 논리합을 구하는 기능 **형식 : (LOGIOR ....) **예제 : (LOGIOR 7 2 5) (LOGIOR 3 2 1) 13.BOOLE **기능 : 지정된 수치들을 지정 Function 구조대로 BOOLE 대수 처리하는 기능 **형식 : (BOOLE ....) **참고 : BOOLE FUNCTION 도표 n1 n2 function :: FUNCTION 조건 기능 0 0 8 :: 1 AND 두조건 모두 만족 0 1 4 :: 6 XOR 두조건중 하나만 1 1 0 2 :: 7 OR 두조건중 하나이상 1 1 1 1 :: 8 NOT 부정
9. AutoLISP Function Commands 기하 함수 명령
01.ANGLE **기능 : 지정된 두 지점간의 각도를 측정하는 기능 **형식 : (ANGLE ) **예제 : (setq p1 (list 6.0 2.0)) (setq p2 (list 3.0 2.0)) (setq a1 (angle p1 p2)) (set1 a2 (angle p2 p1)) 02.DISTANCE **기능 : 지정된 두 지점간의 길이를 측정 **형식 : (DISTANCE ) **예제 : (distance p1 p2) 03.POLAR **기능 : 지정 기준점으로부터 지정 거리 및 각도를 이동시킨 지점의 좌표선택 기능 **형식 : (POLAR ) **예제 : (polar p1 a1 3) 04.INTERS **기능 : 두 도형이 교차하는 교차점을 선택하는 기능 **형식 : (INTERS [<조건>]) **예제 : (setq a '(1.0 1.0) b '(9.0 9.0)) (setq c '(4.0 1.0) d '(4.0 2.0)) (inters a b c d) (inters a b c d t) (inters a b c d nil)
10. AutoLISP Function Commands 변환 함수
01.ANGTOS (ANGle TO String) **기능 : "UNITS" 명령에서 각도와 관련된 치수를 조정하여 문자형태로 변환 시키는 기능 **형식 : (ANGTOS ) **참고 : ⓐ ANGTOS Modes 형식 0 Degree 1 Degree Minute Second 2 Grads 3 Radian 4 측량단위(위도) ⓑ Option은 소숫점이하의 자릿수 지정 02.RTOS (Report TO String) **기능 : "UNITS" 명령에 의해 조정되는 치수단위법을 문자형태로 변환하는 기능 **형식 : (RTOS ) **참고 : RTOS Modes 형식 1 Scienstic 2 Decimal 3 Engineering 4 Hrchitecture 5 Fractional **예제 (rtos 17.4 1 4) (rtos 17.5 2 3) (rtos 17.6 3 2) (rtos 17.7 4 1) (rtos 17.8 5 0) 03.ITOA (Integer TO string) **기능 : 정수 수치를 문자 형태로 전환시키는 기능 **형식 : (ITOA ) 04.ATOI (string TO Integer) **기능 : 문자화 되어있는 정수를 연산이 가능한 정수로 변환시키는 기능 **형식 : (ATOI ) 05.ATOF (string TO real) **기능 : 문자화 되어있는 실수데이타를 연산 가능한 실수데이타로 전환시키는 기능 **형식 : (ATOF ) 06.FIX (FIXed) **기능 : 실수를 정수로 변환시키는 기능 **형식 : (FIX ) 07.FLOAT **기능 : 정수를 실수로 변환시키는 기능 **형식 : (FLOAT ) 08.ASCII **기능 : 지정 문자를 Ascii Code로 전환시키는 기능 **형식 : (ASCII "string") 09.CHR **기능 : 지정 Ascii Code에 해당되는 문자로 변환시키는 기능 **형식 : (CHR ) 10.STRCASE (STRing CASE) **기능 : 지정 영문자를 대문자 또는 소문자로 전환시키는 기능 **형식 : (STRCASE <"string"> []) **참고 : "t" 옵션을 생략할 경우네는 대문자로 변환시키고, "t"를 지정하면 소문자로 변환 11.STRCAT **기능 : 여러개의 문자열을 하나의 문자열로 통합시키는 기능 **형식 : (STRCAT ....) **예제 : (strcat "Auto" "CAD") (setq a (strcase "School")) (setq b (strcase "Boy" t)) (strcat a "," b) 12.STRLEN (STRing LENgth) **기능 : 지정 문자열의 길이를 확인하는 기능 **형식 : (STRLEN <"string">) **예제 : (strlen "abcdefghijkl") 13.SUBSTR (SUB STRing) **기능 : 지정 문자열의 n번째 문자로부터 원하는 길이의 문자를 선택 **형식 : (SUBSTR <"string"> []) **참고 : "[]" 조건을 생략할 경우에는 n번째 문자부터 마지막 문자까지를 선택한다. **예제 : (substr "abcdefghij" 3 5) (substr "abcdefghijklmn" 5)
11. AutoLISP Function Commands Entity 관련 함수
01.ENTNEXT (ENTity NEXT) **기능 : 삭제된 도형을 제외한 첫번째 도형의 Entity Name 확인 **형식 : (ENTNEXT []) **참고 : ⓐ "[]"를 지정하면 지정 Entity를 제외한 첫번째 도형의 Entity Name을 나타낸다. ⓑ Entity Name을 사용자에 의해 설정되는 것이 아니라 AutoCAD 자체적으로 번호를 부여하여 관리한다. **예제 : (command "line" '(1 1) '(3 3) "") (command "arc" '(4 2) '(2 4) '(1 1)) (command "circle" '(5 5) 1) (setq ent1 (entnext)) (setq ent2 (entnext)) (setq ent3 (entnext)) 2.ENTLAST (ENTity LAST) **기능 : 도면내에 그려진 도형중에서 최근에 그려진 도형의 Entity Name을 나타낸다. **형식 : (ENTLAST) **참고 : 본 기능은 Argument가 존재하지 않으며 도면내에 도형이 없는 경우에는 "nil"로 응답한다. **예제 : (entnext) (entlast) 03.ENTDEL (ENTity DELete) **기능 : "ERASE" 명령과 유사한 기능이나 "ERASE" 명령은 도형을 하나 선택하면서 삭제시키는 반면 "ENTDEL" 명령은 도형을 일괄적으로 삭제하 므로 매우 처리 속도가 빠르다. **형식 : (ENTDEL ) **예제 ⓐ (command "line" '(1 1) '(3 3) "") (setq aa (entlast)) (entdel aa) ⓑ "ERASE"명령과 "ENTDEL"명령 속도비교 Program (defun c:er() (graphscr) (setq ent (entnext)) (while (/= ent nil) (command "erase" ent "") (setq ent (entnext ent)) ) ) (defun c:era() (graphscr) (setq ent (entnext)) (while (/= ent nil) (entdel ent) (setq ent (entdel ent)) ) ) 04.TGET (ENTity GET) **기능 : 지정 도형이 지니고 있는 Vector 구조를 List 형태로 표현하여 나타내는 기능 **형식 : (ENTGET ) **참고 : ⓐ List Code ** Code ** 의미 -1 Entity Name 0 Entity Type 2 Block Name 3 Dimension Style Name 6 Linetype Name 7 Text Style Name 8 Layer Name 38 Elevation 39 Thickness 62 Color Number 66 Attribute Value 210 3차원 진행방향 40~59 시작점,끝점,각도,반경등의 치수 10~37 X,Y,Z의 좌표값 ⓑ List Code가 표준인 경우에는 표시되지 않는 Code도 존재한다. 05.ENTSEL (ENTity SELect) **기능 : 임의의 도형 하나를 선택한 후 그 도형의 Entity Name과 선택한 좌표를 나타낸다. **형식 : (ENTSEL [<"message">]) **참고 : 본 기능은 도형을 하나만 선택할 수 있다. 만약 여러개의 도형을 선 택하려면 "SSGET" 명령을 이용해야 한다. **예제 : ⓐ Command: LINE  ;line을 생성한다. from point: 1,1 ;시작점 to point: 3,3 ;끝점 to point:   ;line명령을 종료한다. (setq a (entsel "\nSelect a object:")) Select a object: 2,2 ⓑ (defun c:brk() (graphscr) (setq ent (entsel "\nEnter break point: ")) (setq ename (car ent)) (setq ept (cadr ent)) (command "break" ent "f" ept ept)) ) (defun c:chl() (graphscr) (setq ent (entsel "\nSelect object of layer change:")) (setq ename (car ent)) (setq nlay (setvar "clayer")) (command "chprop" ename "" "la" nlay "") ) (defun c:chc() (graphscr) (setq ent (entsel "\nSelect object of color change:")) (setq ename (car ent)) (setq ncol (getint "\nColor number: ")) (command "chprop" ename "" "c" ncol "") ) 06.ENTMOD (ENTity MODify) **기능 : "SUBST" 명령에 의해 Entty List대로 변경시키는 기능 **형식 : (ENTMOD ) **참고 : "SUBST" 명령에 의해 Entity Type은 변경할 수 없다. **예제 : ⓐ (command "circle" '(3 3) 1) (setq elist (entget (entlast))) (setq rad (assoc 40 elist)) (setq elist (subst (cons 40 3) rad elist))) (entmod elist) ⓑ (defun c:chard() (graphscr) (setq ent (entnext)) (while (/= ent nil) (setq elist (entget ent)) (setq etype (assoc 0 elist)) (if (= (cdr etype) "circle") (progn (setq rad (assoc 40 elist)) (setq elist (subst (cons 40 1) rad elist)) (entmod elist) ) ) (setq ent (entnext ent)) ) ) 07.ENTUPD (ENTity UPDate) **기능 : Polyline의 정점이나 Block의 속성은 "ENTMOD" 명령만으로 변경되지 않는다. 이와 같이 "ENTMOD"에 의해 변경된 Vector를 도형의 구조로 변경하여 나타내는 기능 **형식 : (ENTUPD ) **예제 : (command "pline" '(3 3) '(4 3) '(4 4) '(5 4) "") (setq ent (entlast)) (setq ent1 (entnext ent)) (setq elist (entget ent1)) (setq pt (assoc 10 elist)) (setq enlist (subst '(10 3.0 4.0 0.0) pt elist) (entmod elist) (entupd ent) 08.ENTNAME (ENTity NAME) **기능 : 형성하고자 하는 도형을 Vector(List) 구조대로 지정하여 도형을 그리는 기능 **형식 : (ENTNAME ) **예제 : (entname '((0. "circle") (8. "0") (62. 1) (10 3.0 3.0 0.0) (46. 1.5) (210 0.0 0.0 1.0)) ) 09.SSGET (Selection-Set GET) **기능 : 원하는 도형들을 다양한 방법에 의해 선택시킨 후 그 도형들을 저장 시키는 기능 **형식 : (SSGET [] [] []) **Option [] 지정 도형을 넓게 선택하는 방법 ⓐ "P"(Previous) 최근에 선택된 도형을 다시 한 번 선택 ⓑ "L"(last) 마지막으로 그린 도형을 선택 ⓒ "W"(Window) 창의 범위를 지정하여 그 범위내에 완전히 포함한 도형들만 선택 ⓓ "C"(Crossing) "W"기능과 유사하나 창 범위내에 일부라도 포함한 도형 모두 선택 ⓔ "X" "X"이후의 조건을 List구조로 변형하여 선택 **참고 : "SSGET"만 선택하면 일반 편집기능에서 나타내는 "Select objects" Menu가 나타나며 기능도 동일하다. **예제 : (ssget) (ssget "p") (ssget "l") (ssget '(3 3)) (ssget "w" '(3 3) '(6 6)) (ssget "c" '(0 0) '(12 9)) (setq ss (ssget "c" '(0 0) '(12 9))) (command "chprop" ss "" "c" 5 "") (command "erase" ss "") (ssget "x" (list (cons 0 "line"))) (ssget "x" '((62. 1))) (ssget "x" '((0. "line") (62. 1))) (ssget "x" '((0. "line") (62. 1) (8. "0"))) 10.SSLENGTH (Selection-Set LENGTH) **기능 : "SSGET"에 의해 선택된 도형의 갯수를 Count하는 기능 **형식 : (SSLENGTH ) **예제 : (setq ss (ssget "c" '(0 0) '(12 9))) (sslength ss) (sslength (ssget "w" '(3 3) '(6 6))) (sslength (ssget "x" '((0. "line"))) 11.SSNAME (Selection-Set NAME) **기능 : 선택된 도형들을 0번부터 차례로 기억시킨 후 n번째의 Entity Name 을 확인시키거나 처리할 수 있는 기능 **형식 : (SSNAME n) **참고 : ⓐ "n"은 구조내의 n+1번째의 도형을 지정한다. ⓑ "SSGET" 명령에서 도형을 하나씩 선택한 경우에는 선택한 순서대 로 번호가 부여되고,"w" 또는 "c"으로 선택한 경우에는 범위내의 그림을 그린 순서의 역순으로 번호를 부여한다. **예제 : (setq ss (ssget "c" '(0 0) '(12 9))) (ssname ss 0) (entget (ssname ss 2)) 12.SSADD (Selection-Set ADD) **기능 : "SSGET" 명령에 의해 선택된 도형 범위내에 새로운 도형을 추가시키는 기능 **형식 : (SSADD []) **예제 : (ssadd) (setq aa (ssget)) (setq bb (ssget)) (setq cc (ssadd bb aa)) (command "chprop" cc "" "c" 5 "") (command "erase" cc "") (setq aa (ssget "c" '(0 0) '(12 9)) ommand "ccle" '(3 3) 0.5) (setq bb (ssget entlast)) (setq cc (ssadd bb aa)) (command "chprop" cc "" "c" 5 "") (command "erase" cc "") 13.SSDEL (Selection-Set DELete) **기능 : "SSGET"명령에 의해 선택된 도형들중에서 지정 도형을 제외시키는 기능 **형식 : (SSDEL ) **예제 : (setq aa (ssget "c" '(0 0) '(12 9))) (setq bb (ssname aa 1)) (setq cc (ssname aa 5)) (setq dd (ssdel bb aa)) (setq ee (ssdel cc dd)) (command "erase" ee "") 14.SSMEMB (Selection-Set MEMBer) **기능 : "SSGET" 명령에 의해 선택된 도형들중에서 지정 도형이 포함되어 있는지 확인 **형식 : (SSMEMB ) **예제 : (setq aa (ssget "c" '(0 0) '(12 9))) (setq bb (ssname aa 5)) (command "chprop" bb "" "c" 2 "") (defun subfunc(etype) (setq ss (ssget "x" (list (cons 0 etype)))) (command "erase" ss "") ) (defun c:er() (graphscr) (initget 3 "Line Arc Circle ALL") (setq anw (getkword "\nLine/Arc/Circle/ALL: ")) (setq anw (strcase anw)) (cond ((= "LINE" anw) (subfunc anw)) ((= "ARC" anw) (subfunc anw)) ((= "CIRCLE" anw) (subfunc anw)) ((= "ALL" anw) (sunfunc anw) (setq pt1 (getvar "limmin") pt2 (getvar "limmax") ) (setq ssall (ssget "c" pt1 pt2)) (command "erase" ssall "") ) ) )
12. 추가 설명
Defun 함수 AutoLISP안에서는 별도의 함수와 프로그램을 구분하지 않으며 하나의 프로그램 안에서는 다중의 함수가 정의할 수 있고 각각의 함수는 프로그램으로서의 기능을 갖는다. 1. 함수선언시 유의 사항 (1) 함수의 이름은 항상 알파벳으로 시작하여야 한다. (2) 함수명은 영문자와 숫자의 조합으로 이루어지며, 특수 기호(-, ;, ! 등)의 사용이 가능하다. (3) 함수 안의 ()의 갯수는 반드시 같아야 한다. (4) 세미콜론(;)은 주석이며, 그 행만을 포함한다. 2. DEFUN (DEfine FUNction) (1) 기 능 : 사용할 함수를 선언하는 함수 (함수 이름을 정의함) (2) 사용법 : (DEFUN Function-name() Variable Expression! ) 3. 변수의 종류 (1) 광역 변수 변수들의 값은 프로그램이 끝난 후에도 없어지지 않고 존재한다. 비어 있는 괄호는 모든 변수를 광역 변수로 사용함을 의미한다. (Defun sample-01() Expression! ) (2) 지역 변수 괄호 안의 Slash 이후의 변수들은 프로그램이 실행될 때 프로그램 안에서만 값을 가진다. (Defun sample-02(/ variable variable ......) Expression! ) (3) 독립 변수 프로그램 실행시 외부로부터 변수의 값을 받아들여 사용한다. (Defun sample-03(variable variable ......) Expression! ) (4) 명령어 정의 함수 Defun 함수를 사용하여 AutoCAD에 새로운 명령을 정의한다. (Defun c:sample-04() Expression! ) ** 참고 명령어 정의 함수 외에 함수는 실행을 위하여 괄호를 사용해야만 한다. 4. 함수 선언 예 (1) 광역 변수를 사용하는 함수 예제 프로그램-01 결과 (defun sample-01() (setq x 100) (setq y (+ x x)) ) Command: (load "c:/sample") SAMPLE-01 Command: (sample-01) 200 Command: !x 100 Command: !y 200 모든 변수를 광역 변수로 선언 프로그램 종료 후 x와 y값은 계속 존재한다. (2) 지역 변수를 사용하는 함수 예제 프로그램-02 결과 (defun sample-02(/ x y) (setq x 100) (setq y (+ x x)) ) Command: (load "c:/sample") SAMPLE-02 Command: (sample-02) 200 Command: !x nil Command: !y nil x와 y를 지역 변수로 선언 프로그램 종료후 x와 y의 값은 없어진다. (3) 독립 변수를 사용하는 함수 예제 프로그램-03 결과 (defun sample-03(x) (setq y (+ x x)) ) Command: (load "c:/hello") SAMPLE Command: (sample-03 100) 200 Command: !x 100 Command: !y 200 x를 독립 변수로 선언 프로그램 실행시 x의 값을 지정해야 한다. (4) 명령어 정의 함수 예제 프로그램-04 결과 (defun c:sample-04() (setq x 100) (setq y (+ x x)) ) Command: (load "c:/sample") SAMPLE-04 Command: sample-04 200 Command: !x 100 Command: !y 200 sample-04를 명령어 정의 함수로 지정 프로그램 실행시 괄호를 사용하지 않아도 된다. (5) 명령어 정의 함수를 이용한 예제 프로그램 사각형을 그리는 프로그램 (Defun c:sample-05(/ xy01 xy02 xy03 xy04) (setq xy01 (list 100 100)) (setq xy03 (list 200 200)) (setq xy02 (list (car xy01) (cadr xy03))) (setq xy04 (list (car xy03) (cadr xy01))) (command "line" xy01 xy02 xy03 xy04 "c") ) Command: (load "c:/sample") C:SAMPLE-05 Command: sample-05 line From point: To point: To point: To point: To point: c Command: nil Command: !xy01 nil Command: !xy02 nil Command: !xy03 nil Command: !xy04 nil SETQ(SET eQual) (1) 기능 변수에 DATA를 넣는 함수. 변수가 앞에 위치하고, 이 변수에 저장될 Data가 변수 뒤에 온다. 지정 변수에 넣을 Data 는 상수 및 변수 또는 연산식이 될 수 있다. 변수에 nil을 저장할 경우 변수는 삭제된다. (2) 사용법 (SETQ Variable Expression!) (3) 예 (setq a (+ 12 25)) : !a 37 (setq a 12) : !a 12 (setq a 12.0) : !a 12.0 (setq a "12") : !a "12" (setq b "abcd") : !b "abcd" (setq c (* 3 5)) : !c 15 (setq x 100 y 200) : !x 100 !y 200 출력 함수 문자열을 화면에 디스플레이하거나, 변수에 지정된 값을 화면에 출력하는 함수들이다. 출력 함수는 princ, prin1, print, prompt의 4 종류가 있으며, 모두 지정하는 내용을 화면에 나타내지만, 처리하는 방식에서 차이가 있다. \\ : \ \" : "" \e : Escape \n : New Line, 다음줄에 표시. \r : Return Key로 동작 \t : Tab, 정해진 간격만큼 오른쪽으로 이동 \nnn : 1) Princ (1) 기능 Princ는 ""를 무시한 내용을 출력하고, 개행 문자를 수행하며, 자신을 한 번 더 반복한다. (2) 사용 (princ "Expression!") (3) 예 (Princ "Hello LISP \n Hi LSIP") ; Hello LISP Hi LSIP "Hello LISP \n Hi LSIP" (princ "Hi lisp") ; Hi lisp "Hi lisp" (setq a 252000) ; !a 252000 (princ a) ; 252000252000 (setq cha "autolisp") ;!cha "autolisp" (princ cha) ; autolisp "autolisp" (princ cha)(princ) ; autolisp ** 참고 : Princ, Prin1, Print의 출력 내용 반복을 제거하기 위하여 Princ, Prin1, Print를 한번 더 사용한다. ** 참고 : AutoLISP 프로그램이 실행을 마칠 때는 항상 "nil"을 화면에 표시하는데, 마지막 부분에 위의 화면 princ 명령어를 적어두면 실행 후 "nil" 표시가 나타나지 않는다. 2) Prin1 (1) 기능 : Prin1은 ""를 포함한 내용을 출력하고, 개행 문자를 무시하며, 자신을 한 번 더 반복한다. (2) 사용법 (prin1 " Expression!") (3) 예 (prin1 "Hello LISP \n Hi LISP") ; "Hello LISP \n Hi LISP""Hello LISP \n Hi LISP" (prin1 "Hi LISP"); "Hi LISP""Hi LISP" (setq a 2000) ; !a 2000 (prin1 a) ; 20002000 (setq cha "autolisp") ; !cha "autolisp" (prin1 cha) ; "autolisp""autolisp" (prin1 "autolisp")(prin1) ; "autolisp" (prin1 "autolisp")(princ) ; "autolisp" (princ "autolisp")(prin1) ; autolosp 3) Print (1) 기능 Print는 ""를 포함한 내용을 출력하고, 개행 문자를 무시하며, 자신을 한번 더 반복하면서 한 줄의 공백과 한 칸의 공백을 둔다. (2) 사용법 (print "Expression!") (3) 예 (print "Hello LISP \n Hi LISP") "Hello LISP \n Hi LISP" "Hello LISP \n Hi LISP" (print "Hi LISP") "Hi LISP" "Hi LISP" (setq a 262000) 262000 (print a) 262000 262000 (setq cha "autolisp") "autolisp" (print cha) "autolisp" "autolisp" (print "autolisp")(print) "autolisp" (print "autolisp")(prin1) "autolisp" (pinc "autolisp")(print) autolisp 4) Prompt (1) 기능 문자열을 출력하기 위한 함수이며, 출력 내용은 문자열만 가능한다. (2) 사용법 (Prompt "Expression!") (3) 예제 (setq num 262000) 262000 (prompt num) error: bad argument type (PROMPT A) *Cancel* (prompt 262000) error: bad argument type (PROMPT 262000) *Cancel* 2 (prompt "autolisp") autolispnil (setq cha "autolisp") "autolisp" (prompt cha) autolispnil (prompt cha)(princ) autolisp (prompt "\n autolisp") autolispnil 5) 예제 프로그램 (defun c:sample() (prompt " Loaded..") (prompt "\n By D.M.Z") (prompt "\n Copytight 2000") (princ) )
13. 입력 함수
1. initget (INITial GET) (1) 기능 : "GETxxx 명령들이 받아들이는 조건을 입력의 오류를 방지하는 함수 "GETSTRING"과 "GETVAR"는 제외 (2) 사용법 : (INITGET 조건인수 "키워드") (3) 예제 (initget 1 "yes no") (initget 2) (4) 예제 프로그램 Getkword 참조 1 : 무응답(NULL)을 허용하지 않는다. 2 : "0"의 입력을 허용하지 않는다. 4 : 음수값의 입력을 허용하지 않는다. 8 : LIMITS값을 검사하지 않는다. 16 : 2D Point 대신 3D Point로 입력받는다. 32 : Rubber-Band Line을 Dashed Line으로 변한시킨다. 64 : Getdist에서 좌표의 Z값을 무시한다. 128: 입력형태를 제한하지 않는다. GetInt 1,2,4 GetReal 1,2,4 GetKWord 1,8,32 GetAngle 1,2,32 Getpoint 1,2,32 GetString 128 GetDist 1,2,4,32,64 GetCorner 1,8,32 ** 참고 InitGet함수는 Get함수 앞에서 한번만 동작하며 항상 nil을 반환한다. 2. GETINT (GET INTeger) (1) 기능 입력되는 수치데이타를 정수형으로 입력받는 함수 리스트 형태, 실수는 입력 받지 못하며, 오로지 키보드에서만 입력을 받는다. (2) 사용법 : (Setq Variable (Getint "message")) (3) 예제 (setq number (getint "Enter Number : ")) (4) 예제 프로그램 Getint 명령을 사용해서 사각형을 그리는 프로그램을 만든다면 다음과 같이 만들 수 있다. 그러나 이렇게 만들기 보다는 뒤에 나오는 Getpoint를 사용해서 만드는 것이 훨씬 간단하고, 편하게 만들 수 있다. (defun c:gi() (setq point01 (getint "Enter X point : ")) (setq point02 (getint "Enter Y point : ")) (setq xy01 (list point01 point02)) (setq base (getint "Enter width : ")) (setq height (getint "Enter height :")) (setq xy02 (list (+ point01 base) point02)) (setq xy03 (list (+ point01 base) (+ point02 height))) (setq xy04 (list point01 (+ point02 height))) (command "line" xy01 xy02 xy03 xy04 "c") ) Command: gi Enter X point : 100 Enter Y point : 100 Enter base : 200 Enter height :100 line From point: To point: To point: To point: To point: c Command: nil 3. GETREAL (1) 기능 입력되는 수치데이타를 실수형으로 입력받는 함수 Getint와 같이 리스트 형태, 정수를 입력받을 수 있으나 변수에는 실수로 저장되며 오로지 키보드에서만 입력을 받는다. (2) 사용법 : (Setq Variable (Getreal "message")) (3) 예제 (setq number (Getreal "Enter Number : ")) (4) 예제 프로그램 Getint 참조 4. GETPOINT (1) 기능 사용자가 원하는 좌표를 마우스나, 키보드에 의해 입력할 수 있다. 입력된 값은 List 형태로 저장된다. (2) 사용법 : (setq Variable (GETPOINT point "message")) (3) 예제 (setq pnt1 (getpoint "\n First point: ")) (setq pnt2 (getpoint "\n Second point: ")) (4) 예제 프로그램 Getpoint 명령을 사용하면, Getint 명령을 사용해서 사각형을 그리는 프로그램보다 훨씬 쉽고 간단하게 프로그램이 만들어 진다. (defun c:gp-01() (setq point01 (getpoint "\n Enter First point : ")) (setq point02 (getpoint "\n Enter Second point : ")) (setq point03 (getpoint "\n Enter Third point : ")) (setq point04 (getpoint "\n Enter Fourth point : ")) (command "line" point01 point02 point03 point04 "c") ) (defun c:gp-02() (setq point01 (getpoint "\n Enter First point : ")) (setq point03 (getpoint "\n Enter Third point : ")) (setq point02 (list (car point01) (cadr point03))) (setq point04 (list (car point03) (cadr point01))) (command "line" point01 point02 point03 point04 "c" ) ) Command: gp-01 Enter First point : Enter Second point : Enter Third point : Enter Fourth point : line From point: To point: To point: To point: To point: c Command: nil Command: !point01 (146.135 130.031 0.0) Command: !point02 (287.604 128.911 0.0) Command: !point03 (277.525 233.757 0.0) Command: !point04 (136.803 237.115 0.0) 5. GETCORNER (1) 기능 기존의 지점을 이용하여 대각 방향의 좌표를 선택하는 함수 기준점(첫번째 좌표)으로부터 사각 윈도우를 이용하여 다른 좌표를 입력받는다. (2) 사용법 : (setq Variable (GetCorner 기준점 "message")) (3) 예제 (setq pnt1 (getpoint "\n Enter First Point : ")) (setq pnt4 (getcorner pnt1 "\n Enter corner point : ")) (4) 예제 프로그램 (defun c:gc() (setq point01 (getpoint "\n Enter First point : ")) (setq point03 (getcorner point01 "\n Enter corner point : ")) (setq point02 (list (car point01) (cadr point03))) (setq point04 (list (car point03) (cadr point01))) (command "line" point01 point02 point03 point04 "c") ) Command: gc Enter First point : 100,100 Enter corner point : 300,500 line From point: To point: To point: To point: To point: c Command: nil Command: !point01 (100.0 100.0 0.0) Command: !point02 (100.0 500.0) Command: !point03 (300.0 500.0 0.0) Command: !point04 (300.0 100.0) ** 참고 본 함수를 수행하기 전 반드시 "GETPOINT" 등에 의해 한점을 선택해야 함. 6. GETDIST (GET DISTance) (1) 기능 임의의 길이를 설정하거나 특정 지점으로부터의 거리를 설정 시키는 함수 두 점 사이의 거리를 계산하여 실수로 출력한다. (2) 사용법 : (setq Variable (GETDIST 기준점 "message")) (3) 예제 (setq point1 (getpoint " Enter base point : ")) (setq point2 (getdist "\n Second Point : ")) (4) 예제 프로그램 (defun c:gd() (setq point01 (getpoint "\n Enter First point : ")) (setq point02 (getdist point01 "\n Enter Second point : ")) ) Command: gd Enter First point : Enter Second point : 97.8139 Command: !point01 (144.642 118.837 0.0) Command: !pt01 97.8139 (5) 예제 프로그램 사각뿔을 그리는 프로그램 ; RET.LSP (defun c:ret() (prompt " Loaded.. \n") (setq point01 (getpoint "\n Enter First Point : ")) (setq point03 (getcorner point01 "\n Enter Second Point : ")) (setq height (getdist point01 "\n Enter of Height : ")) (setq point02 (list (car point01) (cadr point03))) (setq point04 (list (car point03) (cadr point01))) (setq xpoint (/ (+ (car point01) (cadr point04)) 2.0)) (setq ypoint (/ (+ (cadr point01) (cadr point02)) 2.0)) (setq point05 (list xpoint ypoint height)) (command "3dface" point01 point02 point03 point04 "") (command "3dface" point01 point05 point04 "" "") (command "3dface" point01 point05 point02 "" "") (command "3dface" point02 point05 point03 "" "") (command "3dface" point03 point05 point04 "" "") (prompt "\n By D.M.Z") (prompt "\n Copytight 2000") (princ) ) Command: (load "c:/ret") C:RET Command: ret Loaded.. Enter First Point : Enter Second Point : Enter of Height : 3dface First point: Second point: Third point: Fourth point: Third point: Command: 3dface First point: Second point: Third point: Fourth point: Third point: Command: 3dface First point: Second point: Third point: Fourth point: Third point: Command: 3dface First point: Second point: Third point: Fourth point: Third point: Command: 3dface First point: Second point: Third point: Fourth point: Third point: Command: By D.M.Z Copytight 2000 Command: !point01 (132.324 56.9001 0.0) Command: !point02 (132.324 209.131) Command: !point03 (314.852 209.131 0.0) Command: !point04 (314.852 56.9001) Command: !point05 (94.612 133.016 128.275) Command: !xpoint 94.612 Command: !ypoint 133.016
14. 시스템 함수
1. Getvar (1) 기능 현재 설정되어 있는 AutoCAD의 시스템 변수 값을 가져 온다. (2) 사용법 (Getvar "System Variable") 변수명은 ""로 묶어야 한다. (3) 예제 (setq gm (Getvar "gridmode")) ; 현재 그리드 모드 값을 gm에 저장. (setq ob (Getvar "blipmode")) ; Blipmode 값을 ob에 저장. (setq om (Getvar "osmode")) ; Osnap 모드 값을 om에 저장. (setq on (Getvar "limmin")) ; limmin값을 on에 저장. (setq ol (Getvar "limmax" )) ; limmax값을 ol에 저장. 2. Setvar (1) 기능 AutoCAD의 시스템 변수 값을 설정한다. 시스템 변수는 Number로 조정한다. (2) 사용법 (Setvar "System Variable" Number) (3) 예 (setvar "gridmode" 1) ; 그리드 사용. (setvar "blipmode" 1) ; Blipmode 사용. (setvar "osmode" 1) ; osnap 모드 사용(Endpoint). (setvar "limmin" (list 0 0)) ; 도면 한계를 지정. (setvar "limmax" (400 300)) ; 도면 한계를 지정. **참고 AutoCAD에는 200여개의 시스템 변수가 있으며, 프로그램 작성시 매우 유용하게 쓰이므로, 매우 중요하다. 3. 예제 프로그램 도면 크기와 같은 사각형을 그리고, 정 중앙에 도면 높이 절반 크기의 원을 그린다. (defun c:sample() (prompt " Loaded.. \n") (setq sizemin (getvar "limmin")) ; 도면의 크기 구한다. (setq sizemax (getvar "limmax")) ; 도면의 크기 구한다. (setq rl (list (car sizemax) (cadr sizemin))) ; 도면 오른쪽 아래좌표 (setq lh (list (car sizemin) (cadr sizemax))) ; 도면 왼쪽 상 좌표 (command "line" sizemin rl sizemax lh "c") ; 도면 크기의 사각형을 그린다. (setq center (list (/ (car sizemax) 2) (/ (cadr sizemax) 2))) ; 도면의 중앙을 구한다. (setq cradius (/ (cadr sizemax) 4)) ; 도면 높이의 1/4 크기를 구한다. (command "circle" center cradius) ; 중앙에 원을 그린다. (prompt "\n By D.M.Z") (prompt "\n Copytight 2000") (princ) ) 자주 쓰이는 시스템 변수 Aunits-정수-각도 단위 모드를 설정한다. 0 10진도수 1 도, 분, 초 2 그리드(Grads) 3 라디안(Radian) 4 방위각(Surveyors) Auprec-정수-각도 단위의 소수부 자리수를 설정한다. Axismode-정수-좌표축 사용 설정. 0 사용안함 1 사용함 Blipmode-정수-선택점 위치 표시할 것인가를 설정한다. 0 선택점 표시 사용안함 1 선택점 표시 사용함 Cmdecho-정수-AutoLISP 명령을 화면 표시할 것인가를 설정한다. 0 표시함 1 표시하지 않음 Dragmode-정수-드래그를 사용할 것인가를 설정한다. 0 사용안함 1 사용함 2 자동 Gridmode-정수-Grid의 ON/OFF 상태를 설정한다. 0 사용안함 1 사용함 Limmax-List-420.0,297.0-도면 오른쪽 상단의 Limits 좌표값을 설정한다. Limmin-List-0.0,0.0-도면 왼쪽 하단의 Limits 좌표값을 설정한다. Osmode-정수-Osnap 모드를 설정한다. 0 사용안함 1 End point 2 Mid point 4 Center 8 Node 16 Quadrant 32 Intersection 64 Insertion 128 Perpendicular 256 Tangent 512 Nearest 1024 Quick Orthomode-정수-Line이나 Poly line의 직교 표시를 조정한다. 0 사용안함 1 사용함 Snapmode-정수-현재 Viewport에 대한 Snap 스타일을 설정한다. 0 사용안함 1 사용함
번호 제목 날짜 조회 수
공지 AUTOCAD 2014 이상 SECURE 기능해제 (SECURELOAD) 2013.05.08 8352
24 네트워크 검색 켜기 끄기 저장안될때 2020.08.28 646
23 네트워크 내PC 안보일때 2020.07.24 172
22 커퓨터 제조사별 부트 메뉴 2020.06.17 203
21 AUTOCAD DCL 한글깨질때.. 2019.11.21 310
20 PC 메인보드 제조사별 부트메뉴 진입키 2019.11.04 366
19 Yeh 홀좌표 추출예제 file 2019.02.18 527
18 폴더에 있는 파일명 텍스트로 추출하기 2017.02.01 479
17 windows10 AUTOCAD F8(직교모드변환)을 누르면 캐드가 딜레이 될때 2017.01.06 1417
16 1평의 둘레계산 2016.07.01 364
15 REMEMBERFOLDERS 표준 파일 선택 대화상자에 표시경로 제어 file 2015.12.28 273
14 AUTOCAD 기본 레이어 컨트롤 명령어 2015.04.29 1201
13 윈도우 7 공인인증서 저장 위치 2015.01.22 3343
» AutoLISP (Auto LIST Programming) 2014.06.18 12408
11 현재 도면 영국식 or 미터법 해치 패턴 및 선종류 파일을 사용할지 여부 (Measurement ) 2014.05.30 5472
10 AutoCad 성능 체적화 2013.10.22 7024
9 스마트폰을 FTP 서버로 만든 후 PC에서 파일 관리하기 file 2013.08.09 7495
8 Scalelistedit 명령후 명령어창 글꼴이 변형되어 명령어가 먹지않을때. 2013.05.16 8007
7 복사하여 붙여넣기하는데 시간이 많이 걸릴때.. file 2013.05.16 8387
6 갑자기 오피스XP 시디를 넣으라고 하는 메시지가 나올때 2013.05.15 7135
5 XREF 외부참조시 도면 광도조절 file 2013.05.13 8082