You are on page 1of 17

NGN NG LP TRNH

AutoLISP trong AutoCAD

1. Khi nim chung

Biu thc AutoLISP


(setq a 10.0 b hello!)
(setq c (+ 100 a))

Thc hin biu thc

G trc tip biu thc AutoLISP vo dng lnh Command


Lu cc biu thc thnh file, v d test1.lsp, sau gi file
thc hin cc biu thc trong file bng cch g (load
tes1.lsp) trn dng lnh Command

2012t
2012
t
t

AutoLISP

2012
tt
tt

M u

AutoLISP l ngn ng s dng lp trnh t ng to


lp cc i tng trong bn v AutoCAD.
Cc i tng ny c th c to ra qua 2 cch:

S dng hm (Command LnhCAD Thngs


Thngs))

Truy cp trc tip CSDL ca AutoCAD

Cc ni dung cn nm trc:

S dng AutoCAD c bn

C kin thc c bn v lp trnh

C hiu bit t nht 1 ngn ng lp trnh

Khi nim chung (2)

VisualLISP

Khi ng: g VLIDE hoc VLISP trn dng lnh Command


hoc qua thc n Tools/AutoLISP/VLisp Editor

Qun l n: trong thc n Project

Qun l file: trong thc n File

Ti v chy chng trnh AutoLISP: Tools/LoadTextInEditor

Cc tnh nng khc:

Thng qua VisualLISP IDE - g VLIDE hoc VLISP trn dng


lnh Command hoc qua thc n Tools/AutoLISP/VLisp Editor

Tm kim v thay th: Search/Find hoc Search/Replace

M mu

nh dng m ngun: Tools/EnvironmentOptions/VLFormatOptions

D li: Tools/CheckTextInEditor

2. Cc thnh phn c bn
Danh sch v biu thc

Cc li ch thch

Bin,, hng
g v cc kiu d liu

Cu trc chng trnh AutoLISP

Cc hm c s trong AutoLISP

2012
tt

tt

2.1. Danh sch v biu thc

AutoLISP c xy dng trn c s cc danh sch

Danh sch (list) gm mt hoc nhiu phn t hoc rng c


t trong 1 cp ngoc n. Cc phn t trong danh sch cch
nhau bi t nht 1 du trng.
Cc i tng
g (entity)
(
y) trong
g AutoCAD cng
g c
q
qun l nh
cc danh sch
Danh sch dot-pair gm 2 phn t, lin kt vi nhau bng du
chm (dot)

Biu thc (cu lnh) cng c bao trong cp du ngoc


n ging nh danh sch, nhng phn t u ca biu thc
phi l 1 hm.

Trong biu thc c th c cc biu thc con, v d:


(setq val1 (- (+ 10 5 2.0))

Du ; ghi ch thch trn 1 dng

(setq a 10) ; gn gi tr 10 cho bin a (ch thch)

Ch thch on (inline) c t trong cp ;| v |;

(setq ;| gn gi tr cho bin |; a 10)

;| y l mt on ch thch di, trn mt hoc nhiu dng,


thng dng gii thch cng dng ca on chng trnh.

on chng trnh sau th hin mt hm t nh ngha, dng


i ra radian |;
(defun do2rad (do / ppi) ; khai bo hm
(setq ppi 3.14159)

2.3. Bin v hng

2012
tt
tt

2.2. Cc li ch thch

Tn bin khng phn bit ch hoa, thng. Mt tn bin c th


c gn d liu cc kiu khc nhau. Kiu d liu ca bin ly
theo d liu c gn, khng cn khai bo trc.

Hm (setq tenbien giatri tenbien giatri) dng gn gi tr cho


bin.
bin

Trong hm AutoLISP s dng 2 loi bin: bin tham s cn


truyn qua hm v bin cc b.

(* do (/ ppi 180.0)) ; gi tr tr v ca hm

ppi l bin cc b

Cc bin cc b nu khng c khai bo c th lm thay i


gi tr cc bin ngoi hm (tc l chng c coi nh cc bin
ton cc)
AutoLISP dng mt s k hiu dnh ring cho hng, cn trnh
t t
tn bi
bin ttrng
vi
i cc
hng
h s
ny.

Cc hng s:

2.4. Cc kiu d liu

2012t
2012
t
t

Bin v hng (2)

Cc kiu thng dng: Integer, Real, String nh cc ngn ng


lp trnh khc.

Kiu Integer cho php gn s nguyn 32bit, nhng hm nhp


liu t bn phm GetInt li ch chp nhn s nguyn 16bit.

C cn
Cng
lu
l ki
kiu kt
k qu
tr
v
khi s
dng
d
cc
hm
h c s.

(setq n (/ 10 4)) ; gn n gi tr php chia nguyn 10:4 => n = 2


(setq r (/ 10 4.0)) ; gn r gi tr php chia 10:4 => n = 2.5

PI

hng s pi = 3.14159

NIL

hng s logic false

hng s logic true (non-NIL)

(setq max 2147483648) ; max c gi tr 2.14748e+009 (s thc)

PAUSE

s dng vi hm (Command) nhm tm dng chng


trnh, chng hn ngi dng nhp d liu.

(setq max (+ 2147483647 3)) ; max nhn gi tr (- 2147483647)

(setq max 2147483647) ; gn max gi tr nguyn ln nht (32b)

sai do vt qu gii hn 32 b

Kiu danh sch LIST

Danh sch list l kiu d liu c th trong AutoLISP. Cc phn t


c th t cc kiu d liu khc nhau.
Xc nh danh sch qua hm quote (du nhy n) hoc hm list:
(1 2 abc (0 . CIRCLE)) ; danh sch 4 phn t
(quote (1 2 abc (0 . CIRCLE))) ; to t hm quote
(list 1 (+ 1 1) abc (cons 0 CIRCLE))) ; to t hm list

Lu :

Hm list tr v danh sch t gi tr cc biu thc trong hm.

Cc kiu d liu (3)

2012
tt

tt

Cc kiu d liu (2)

Bin tham s cn khai bo ngay u hm, cc bin cc b khai bo


sau du gch cho /. V d:
(defun do2rad (do / ppi) ; do la bin cn truyn DL,

) ; kt thc hm

(setq a 10 b Hi B1 (+ 5.0 2)) ; gn gi tr 10 cho bin a, Hi cho

bin b, 7.0 cho bin B1

Kiu EName v PickSet (SelectionSet)

Hai kiu d liu c th qun l cc i tng trong bn v


AutoCAD.
Ename tr v tn i tng trong bn v AutoCAD, qua truy cp
n CSDL ca chng x l chng (sa
(sa, xa,
xa cp nht)
nht )
PickSet qun l tp hp cc i tng c chn, tng ng vi
cch chn Seclect Objects trong AutoCAD. C th thm vo hoc
loi bt i tng khi nhm chn.

Hm quote tr v nguyn dng cc phn t khai bo, khng x l


cc biu thc.
Hm (cons x y) to danh sch lin kt (dot-pair) t 2 phn t x,y

3. Cu trc chng trnh


AutoLISP

File d liu

File d liu trong AutoLISP ch s dng kiu file text, truy cp tun
t, khng c kiu file truy cp ngu nhin.
D liu trong file c ghi vo v c ra theo dng, ln lt t
dng
th
nht
n
dng
cui
cng.

s dng d liu dng bng (nhiu dng v ct), d liu c


chuyn thnh dng list, chng hn:
Mi dng thnh mt phn t ca danh sch
Mi trn dng thnh mt phn t con
; dng 1, 5 phn t

( (11 12 13 14 15)
(21 22 23 24 25))

2012
tt
tt

Cc kiu d liu (4)

Cu trc rt t do:

; dng 2, 5 phn t

khng cn khai bo bin, kiu d liu; hm con (hm ngi


dng) cng c th t bt k u trong chng trnh
Tuyy nhin cn rt ch trnh nhm ln.

Mt s cu trc thng dng

Php gn

Hm ngi dng defun

Vng lp

R nhnh

Hm Setq dng gn gi tr cho bin


C php (setq var1 val1 var2 val2)

setq

- t kha hm gn s liu

var1, var2,

- tn cc bin

val1, val2,

- gi tr s gn cho cc bin tng ng

V d
(setq a 10)

gn cho bin a gi tr 10

(setq a 10 b (5 8))

gn cho bin a gi tr 10, b danh sch (5 8)

3.2. Hm ngi dng

2012t
2012
t
t

3.1. Php gn

Hm con c ngi dng t nh ngha


C php (defun fun-name([arg] [/ var])

defun

fun-name - tn hm do ngi dng nh ngha

arg

- tn cc tham s cn truyn qua hm

var

- tn cc bin cc b

- du phn cch (gia thng s cn truyn v bin cc b)

Gi hm nh ngha

Hm C:FUN-NAME to lnh mi cho AutoCAD

AutoLISP cng cho php nh ngha hm quy

C php (fun-name arg1 arg2 )

(setq a 10 b Hello) gn cho bin a gi tr 10, b chui k t Hello

V d: to lnh tnh n!

(defun giaithua(n) ; khai bo n l bin cn truyn thng s


(if (= n 0) 1
)

(* n (giaithua(- n 1))))

; kt thc khai bo hm. Ch cc du ngoc

; To hm nh lnh n! trong AutoCAD


(defun C:n! ( / c n) ; khai bo c, n nh cc bin cc b

(initget 5)
; hn ch nhp sai d liu (s m, s khng nguyn,)
(setq n (getint Hy nhp mt s nguyn khng m: ))
(setq c (giaithua n))
(princ (strcat (itoa n) ! = (itoa c))) ; nh dng v in kt qu
(princ)
; rt lui im lng
)
; kt thc hm

3.3. Cu trc r nhnh

2012
tt

tt

Hm ngi dng (2)

- t kha khai bo hm

Hai cu trc r nhanh thng dng IF (r i) v COND (r nhiu)

Cu trc IF s dng hm if nh sau:


(if testexpr thenexpr [elseexpr])

testexpr

thenexpr - biu thc thc hin nu testexpr tr v T

- biu thc c nh gi, tr v NIL hoc T

elseexpr

- biu thc thc hin nu testexpr tr v NIL

Cn lu rng thenexpr v elseexpr ch c php l cc biu


thc n. Nu mun thc hin nhiu biu thc, s dng hm
progn gom cc biu thc ny thnh 1 khi. Khi progn c vai
tr nh khi beginend trong Pascal hoc {} trong C.

Cu trc COND s dng c php sau:


(cond
(test1 result1)
(test2 result2)

(testn resultn)
(T elsewise)
)

test1, test2..

- biu thc c nh gi, tr v NIL hoc T

result1, result2

- biu thc thc hin nu test1,2 tr v T

elsewise

- biu thc thc hin nu tt c test1,2 u


tr v NIL

Cu trc r nhnh (3)

2012
tt
tt

Cu trc r nhnh (2)

V d:
(if (= 1 3)
(setq ans Sometime) ; thnh thong 1 = 3 !!!
(progn

; dng progn gom 2 biu thc di y


(alert y l chuyn thng: 1 # 3)
(setq ans Ok)
) ; kt thc progn

) ; kt thc if

Do biu thc c nh gi lun l NIL nn kt qu ca on chng


trnh ny s hin hp thng bo y l chuyn thng v bin ans
c gn gi tr Ok

AutoLISP cung cp cc hm sau y thc hin vng lp:

(repeat n [expr]) - thc hin n ln lp cc biu thc expr

(while test [expr]) - thc hin cc b.thc expr khi test khc NIL

((foreach var lst [expr])


[ p ]) - thc
hin
cc b.thc expr
p vi bin var
nhn cc gi tr ln lt l cc phn t
trong danh sch lst
(mapcar func lst1 lstn) thc hin hm func vi i s l cc
danh sch lst1lstn. Kt qu tr v l mt
danh sch mi t kt qu.

3.4.1. Vng lp Repeat

2012t
2012
t
t

3.4. Vng lp

Thc cht th mapcar khng phi l vng lp chnh thng.

; tnh tng 10 s t nhin u tin


(setq tong 0)
(setq sohang 1)
(repeat 10

; lp 10 ln cc biu thc tip theo

(setq tong (+ tong sohang)


(setq sohang (1+ sohang))
) ; ht repeat
Kt qu: tong nhn gi tr 55; sohang nhn gi tr 11

; tnh tng 10 s t nhin u tin


(setq tong 0)
(setq sohang 1)
((while (<=
(
sohang
g 10)) ; kim tra xem sohang
g c ln hn 10 khng?
g
(setq tong (+ tong sohang)
(setq sohang (1+ sohang))
) ; ht while
Kt qu: tong nhn gi tr 55; sohang nhn gi tr 11

3.4.3. Vng lp Foreach

2012
tt

tt

3.4.2. Vng lp While

; tnh tng 10 s t nhin u tin


; to danh sch gm 10 s dng u tin
(setq lst (list 1 2 3 4 5 6 7 8 9 10))
((setq
q tong
g 0))
(foreach sohang lst
(setq tong (+ tong sohang))
) ; ht foreach
Kt qu: tong nhn gi tr 55; sohang nhn gi tr 10

4. Cc hm c s

; Bin danh sch im 2D thnh 3D


; Khai bo danh sch gm 4 im 2D (ch c ta X, Y)

(setq plst ((1 10) (2 20) (3 30) (4 40)) )


(setq xlst (mapcar car plst)) ; ly thnh phn u (ta X) ca cc
im a kt qu vo danh sch xlst
im,
(setq ylst (mapcar card plst)); ly thnh phn th 2 (ta Y) ca cc
im, a kt qu vo danh sch ylst
(setq zlst (100 200 300 400)) ; Khai bo ta z
; To cc im 3D t danh sch cc ta xlst, ylst v zlst
(setq 3Dplst (mapcar list xlst ylst zlst))

2012
tt
tt

3.3.5. S dng Mapcar

Cc hm s hc (+ - * / )

Cc hm lgic (so snh, or, and)

Cc hm x l chui k t

Cc hm x l danh sch

Kt qu tr v danh sch 3Dplst :


((1 10 100) (2 20 200) (3 30 300) (4 40 400))

Thc hin php tnh trn s nguyn hoc s thc. Kt qu tr v l


d liu dng s.

Cng

(+ n1 n2 )

Tr

(- n1 n2 )

m tng

(1+ n)

m gim

(1- n)

Nhn

(* n1 n2 )

Chia

(/ n1 n2 )

Tr tuyt i (abs n)

Ly phn nguyn (fix n)

; kq: n1 + n2 +
; kq: n1 n2 -
; tr v gi tr n+1
; tr v gi tr n-1
; tr v n1*n2*
; tr v n1/n2/
; tr v |n|
; tr v gi tr nguyn sau khi b
phn thp phn

Cc hm s hc (2)

2012t
2012
t
t

4.1. Cc hm s hc

Gi tr nh nht

(min n1 n2 )

Gi tr ln nht

(max n1 n2 )

Hm m

;ex
;ax
(sqrt x+)
; cn bc 2
Hm logarit t nhin (log x+)
; loge (x)

Lng gic (cos rad), (sin rad) cos v sin ca gc bng rad

(exp x)

(expt a x)

(atan n1 [n2]) - hm arctan (n1 / n2), tr v gc = rad


V d:

(atan 1 0) => 1.5708


(atan -1 0) => - 1.5708

So snh

(= ns1 ns2 )

so snh gi tr cc biu thc. Nu tt c bng


nhau hoc ch c 1 biu thc th tr v T,
ngc li s tr v NIL

(/= ns1 ns2 )

so snh gi tr cc biu thc. Nu ch c 1


tham s hoc cc tham s cnh nhau khng
ging nhau,
nhau tr v T
T, ngc li s tr v NIL

(equal expr1 expr2 fuzz)

so snh gn ng gi tr cc
biu thc, vi fuzz l sai s. Nu b qua fuzz
hm thc hin nh so snh =

(< ns1 ns2 )

so snh gi tr cc tham s theo th t tng


dn th tr v T, ngc li th tr v NIL

(<= ns1 ns2 )


(> ns1 ns2 )

so snh b hn hoc bng

Cc hm logic (2)

2012
tt

tt

4.2. Cc hm logic

Lin kt cc biu thc logic


(or expr1 expr2 )
(and ns1 ns2 )
(not expr)

hm ph nh. Nu expr l T th t v NIL v ngc li.

(null expr)

kim tra xem mt biu thc c phi l NIL hay khng

(numberp item)

kim tra xem item c phi l s (nguyn hoc thc) hay


khng. Hm tr v T nu item l s, ngc li (ch hoc
list), tr v NIL

so snh ln hn

(>= ns1 ns2 )

so snh ln hn hoc bng

S dng vi s liu dng k t: ni, ly mt phn, i ch hoa

(read [str])

ly thnh phn u ca chui str. Cc thnh phn c ngn cch bi


du trng, dng mi, tab hoc ngoc n. Gi tr tr v c chuyn i v kiu d
liu thch hp.
(read abc) tr v k hiu (symbol) ABC
((read abc df 123)) cng
g tr v k hiu
ABC,, nhng
g
(read \aBc\ df 123) tr v chui k t aBc
Lu : (read 123 df) tr v s nguyn 123,
(read (1 2 3) (d f)) tr v danh sch (1 2 3)

(strcase str [mode])

chuyn chui str v ch IN nu b qua mode hoc mode


l NIL. Nu mode khc NIL chuyn str v ch thng.

(strcat [str1] [str2])


(strlen [str])

ni cc chui str1, str2 thnh chui chung.

4.4. Cc hm x l danh sch

2012
tt
tt

4.3. Cc hm x l k t

Khi to danh sch

(quote expr)

tr v biu thc m khng x l gi tr ca n. Hm c dng


to danh sch t cc phn t l hng s. C th s dng du nhy n thay cho
hm quote.
(setq pt1 (qoute (1 1 0))) gn bin pt1 nh 1 im c 3 ta (1 1 0) hoc
(setq pt1 (1 1 0))
to danh sch rng c th s dng c php (setq nlst ())

(list [expr])

; gn bin n1 gi tr 10

(setq n2 20)

; gn bin n2 gi tr 20

(setq lst (list n1 (+ n1 n2) a (1 2))) ; gn bin lst l danh sch gm cc phn
t 10 (n1) 30 (n1+n2) a (hng s, kiu symbol) v danh sch
con (1 2) hng s, tc l lst s l danh sch (10 30 a (1 2))

tr v chiu di (s lng cc k t) chui k t trong chui str

(substr str start [length])

tr v chui k t con, ly t chui str, bt u t


v tr start vi s lng k t bng length. Nu b qua length chui k t c ly
n k t cui cng ca str.

Khi to danh sch (tip)

(cons ell list-atom)

thm thnh phn ell vo u danh sch hoc to danh sch


lin kt dot-pair. Gi tr tr v ty thuc kiu ca tham s th 2: nu l danh sch
th hm ny s tr v danh sch mi sau khi thm phn t ell vo u n, cn
nu l gi tr, kt qu l danh sch dot-pair.
(cons 10 (1 2 3)) tr v danh sch gm 4 phn t (10 1 2 3)
(cons 10 (list 1 2 3)) cho kt qu nh trn
(cons 10 ()) tr v danh sch gm 1 phn t (10)
(cons (10 20) (1 2 3)) tr v danh sch gm 4 phn t ((10 20) 1 2 3)

(cons 10 1) tr v danh sch dot-pair (10 . 1)

Cc hm x l danh sch (3)

2012t
2012
t
t

Cc hm x l danh sch (2)

x l cc biu thc expr v lin kt chng thnh danh sch

(setq n1 10)

X l danh sch

(append [lst])

(append (10 20) (1 2 3)) tr v danh sch gm 5 phn t (10 20 1 2 3)


(append (a b) (a b)) tr v danh sch gm 4 phn t (a b A B)
(append (list (a b)) (list (a b))) tr v danh sch gm 2
phn t ((a b ) (A B))

(reverse lst)

tr v danh sch o ngc th t cc phn t trong danh sch lst

(setq lst (1 2 3 4)) ; gn cho bin lst danh sch 4 phn t (1 2 3 4)


(setq newlst (reverse lst)) ;gn cho bin newlst danh sch (4 3 2 1)

(length lst)

(cons (10 20) a) tr v danh sch dot-pair ((10 20) . A)

lin kt cc danh sch lst v to danh sch mi.


Nu khng c tham s hm s tr v NIL.

cho bit s phn t trong danh sch lst.

(length (1 2 3 4)) - tr v s nguyn 4


(length ((1 2) (3 4))) - tr v s nguyn 2, cn
(length ()) - tr v s nguyn 0 (danh sch rng)

X l danh sch (tip)

(subst newitem olditem lst)

tm kim phn t olditem trong lst v thay th


n bng phn t newitem. Nu tm thy s tr v danh sch mi, nu khng s
tr v danh sch ban u.
(setq lst (1 2 3))
( t newlst
(setq
l t (subst
( b t Ab 2 lst))
l t)) gn
cho
h bin
bi newlst
l t danh
d h sch
h (1 Ab 3)

ly phn t trong danh sch c th dng cc hm sau:

(last lst)

ly phn t cui cng trong danh sch lst

(last (ab 2 3 4)) - tr v s nguyn 4 (phn t cui trong danh sch)

(car lst)

ly phn t u trong danh sch lst

(last (ab 2 3 4)) - tr v chui k t ab (phn t u trong danh sch)

(nth n lst)

ly phn t th n trong danh sch lst.

Lu th t cc phn t nh s t 0, do (nth 0 lst) v (car lst) cho kt


qu nh nhau, cn (nth (1- (length lst)) lst) v (last lst) cng vy.

Cc hm x l danh sch (5)

2012
tt

tt

Cc hm x l danh sch (4)

X l danh sch (tip)

(cdr lst)

tr v danh sch con t danh sch lst, sau khi b i phn t u.

(setq 3dPoint (100 10 1))


(setq YZ-lst (cdr 3dPoint)) s gn cho bin YZ-lst danh sch (10 1)
Phn t th 2 v 3 trong danh sch trn, c th c ly qua cc biu thc:
(setq Ycord (car (cdr 3dPoint)))
(setq Zcord (car (cdr (cdr 3dPoint))))
cho tin, AutoLISP kt hp cc hm trn nh sau:
(caar lst) tng ng vi (car (car lst))
(cadr lst)

(car (cdr lst))

(cddr lst)

(cdr (cdr lst))

(cadar lst)

(car (cdr (car lst)))

(cddar lst)

(cdr (cdr car lst)))

v.v

Tm kim trong danh sch v dot-pair


Danh sch dot-pair c s dng rt nhiu trong CSDL ca AutoCAD.
truy cp n danh sch loi ny hoc danh sch cha cc danh sch con,
AutoLISP cung cp hm assoc sau:

(assoc item asslst)

item
asslst

kha cn tm kim, phi l thnh phn u ca list con


danh sch lin kt cn tm kim

Nu tm thy hm tr v danh sch con hoc dot-pair cha kha cn tm,


nu khng hm s tr v gi tr NIL.
Hm assoc thng c dng truy cp CSDL AutoCAD nhm tm kim
mt loi i tng no , thng qua m i tng (m nhm
GroupCode). Trong CSDL cc code ny c th hin qua danh sch dotpair. Chng hn m 100 th hin vng trn, m 62 mu i tng,
m 8 lp cha i tng, m 10 - ta im

5. Lp trnh ng dng
bng AutoLISP

Ngn ng AutoLISP c th thc hin c hu ht cc chc


nng nh cc ngn ng lp trnh khc, nhng do cch vit rc
ri v chy trong nn AutoCAD nn ch thng c s dng
cho mc ch thit k t ng, nht l vic xy dng cc bn
v thit k. Mt s vn cn ch :

T chc nhp xut d liu trong AutoCAD

To cc i tng AutoCAD

Chnh sa cc i tng AutoCAD

Hp thoi DCL trong mi trng AutoCAD

V d dng assoc tm kim danh sch con


(setq lst (
; khai bo danh sch lin kt, thc cht l vng
(410 . Model) ; trn v trong khng gian m hnh ca AutoCAD
(8 . L123)
(62 . 1)
(100 . AcDbCircle)
(10 10.0 20.0 0.0)
(40 . 5.0)
; kt thc khai bo lst
))

Cc biu thc sau y s cho ta cc thng tin v i tng ny:


(setq space (assoc 410 lst)
; tr v dot-pair (410 . Model)
center (assoc 10 lst)
; tr v danh sch (10 10.0 20.0 0.0)
layer (assoc 8 lst)
; tr v dot-pair (8 . L123)
its8 (assoc L123 lst)
; tr v NIL (khng tm thy)
none (assoc Some lst) ; tr v NIL (khng tm thy)
)
; kt thc setq

5.1. Nhp d liu

2012t
2012
t
t

Cc hm x l danh sch (7)

2012
tt
tt

Cc hm x l danh sch (6)

D liu c th c nhp xut trc tip qua i thoi


ngi my hoc t file chun b sn.

i thoi
c
thc
hin
q
qua dng
g lnh
Command hoc
hp
p
thoi.

Cc thng bo cng c a ra theo 2 cch: qua dng lnh


Command hoc qua hp thoi.

D liu cng c th c nhp t file hoc xut ra file (dng


file vn bn, truy cp tun t)

Cc thng bo c a ra theo 2 cch: qua dng lnh Command


hoc qua hp thoi trn mn hnh AutoCAD.
Ngoi cc thng bo i km vi cc nhp d liu (cc hm getX)
cn dng cc hm sau:
(promt msg)

; a thng bo ra dng lnh

(alert msg)

; a thng bo ra hp thoi AutoCAD Message

Trong cc hm ny msg l ni dung thng bo, kiu chui k t. Nu


mun th hin trn nhiu dng, cn chn thm du xung dng \n.
V d (prompt Chn nhm i tng th nht. \nSau chn nhm 2 )
s a ra 2 dng thng bo trn dng lnh Command ca AutoCAD:
Chn nhm i tng th nht.
Sau chn nhm 2

5.1.2. Cc hm nhp liu GetX

2012
tt

tt

5.1.1. Thng bo

Cc hm nhp d liu trc tip trn dng lnh Command c c


php chung nh sau:
(getX [msg] [])

getX

- tn hm, X thng th hin kiu d liu. V d GetInt


nhp s nguyn
nguyn, getString nhp chui k t
t

msg

- chui k t th hin li nhc km theo, hin trn dng


lnh Command, nhm nhc ngi dng nhp ng d liu
yu cu

[]

- cc thng s khc ca hm.

Cc hm ny (tr getString) c th c dng km theo cc hm


khng ch kiu d liu nhp (getKword, InitGet).
Nu thc hin thnh cng cc hm ny s tr v gi tr nhp.

Dng nhp s nguyn 16b (-32768 n +32767) t bn phm


(getInt [msg])

msg

- chui k t th hin li nhc km theo, hin trn dng


lnh Command, nhm nhc ngi dng nhp ng d liu
yu cu

Nu nhp ng, kt qu tr v ca hm l s nguyn va nhp. Nu


chui k t nhp vo khng phi l s nguyn, AutoCAD s bo li v
nhc nhp li.
Nu ngi dng g ngay Enter, hm s tr v NIL.

(setq inum (getInt \nNhp mt s nguyn: ))


hn ch d liu nhp (v d khng cho nhp ngay Enter, khng
cho nhp s m) gn gi hm InitGet vi cc thng s thch
hp trc khi gi hm GetInt

Hm GetReal

2012
tt
tt

Hm GetInt

Dng nhp s thc t bn phm


(getReal [msg])

Nu nhp ng, kt qu tr v ca hm l s nguyn va nhp. Nu


chui k t nhp vo khng phi l s nguyn, AutoCAD s bo li v
nhc nhp li.
li
Nu ngi dng g ngay Enter, hm s tr v NIL.

(setq rnum (getReal \nNhp mt s thc: )) s hin thng bo

Nhp mt s thc: trn dng lnh, ch ngi dng nhp. Gi tr nhp


vo c gn cho bin rnum.

hn ch d liu nhp (v d khng cho nhp ngay Enter, khng


cho nhp s m) gn gi hm InitGet vi cc thng s thch
hp trc khi gi hm GetInt

Nhp chui k t t bn phm. Hm InitGet khng c tc dng.


(getString [cr] [msg])

cr

Nu c v khc NIL, hm cho php nhp c cc du trng


(space) trong chui k t, cn nhn Enter kt thc nhp.

Nu ngi dng g ngay Enter,


Enter hm s tr v NIL
NIL.

(setq sHoten (getString \nH v tn: )). Lu rng tham s cr khng c,


do vy nu ngi dng nhp Tran (du cch) th sHoten s nhn gi tr Tran.
nhp c h tn, v d Tran Tien, cn nhp lnh:
(setq sHoten (getString T \nH v tn: ))

nhp k t c bit nh du nhy kp hoc x cho \ cn thm vo


trc k t ny mt du s cho: C:\\AutoCAD\\Alisp\\Test1.lsp s c
chui k t: C:\AutoCAD\Alisp\Test1.lsp

Dng nhp im t bn phm (g ta ca n) hoc kch chut


chn im trn mn hnh AutoCAD.
(getPoint [pt] [msg])

pt

im tham chiu, nu c trn mn hnh s xut hin ng


thi t im nyy n con tr chut.

ni tm

Hm tr v im dng danh sch (list) gm cc phn t l cc ta


ca im nhp.
Cc im ny thng dng to cc i tng AutoCAD, chng hn
thng qua hm command nh v d sau:

(setq pt1 (getPoint \nNhp im u: )) ; nhp im u


(setq pt2 (getPoint pt1 Nhp im th 2: )) ; nhp im th 2

Mt s k t c bit: \\ (k t \ -x cho); \n (dng mi); \r (return);


\ (nhy kp); \t (tab); \e (escape); \nnn (hin k t m nnn c s 8)

(command ._Circle 2P pt1 pt2) ; v vng trn qua 2 im nhp

Hm GetDist

Hm GetAngle

Dng nhp khong cch t bn phm (g gi tr) hoc kch chut


chn 1 hoc 2 im trn mn hnh AutoCAD.
(getDist [pt] [msg])

pt
msg

im tham chiu, nu c trn mn hnh s xut hin ng


thi t im nyy n con tr chut.

ni tm
cu nhc hin trn dng lnh AutoCAD

Hm tr v NIL nu nhn ngay Enter s thc th hin


khong cch 2 im.
Khong cch c nhp theo cc cch sau:

Nhp gi tr t bn phm

Nhp 2 im trn mn hnh CAD

Nhp 1 im khi im tham chiu pt c mt trong hm.

2012
tt

tt

Hm GetPoint

2012t
2012
t
t

Hm GetString

Dng nhp gc. Gi tr tr v l gc nhp, tnh bng radians.


Nu nhn ngay Enter m khng nhp g, hm tr v NIL.
(getAngle [pt] [msg])

pt

im tham chiu.

msg

cu nhc hin trn dng lnh AutoCAD

Gc c nhp theo cc cch sau:

Nhp gi tr gc t bn phm, n v mc nh theo thit lp ca lnh


Unit, thng l .
Nhp 2 im trn mn hnh CAD. Gi tr tr v l gc to bi ng
ni 2 im ny v trc X.

Nhp 1 im khi im tham chiu pt c mt trong hm. Gi tr tr v


l gc to bi ng ni im ny vi im tham chiu v trc X.
Lu gi tr tr v lun tnh bng radians t 0 n < 2p

Dng nhp t kha (keyword). Gi tr tr v l chui k t ng


vi t kha c nh ngha trc bi hm InitGet. T kha
c nhp y hoc cc k t vit tt cho t kha tng ng.
Nu nhp sai AutoCAD s bo li v yu cu nhp li.
(getKWord [msg])

msg

cu nhc hin trn dng lnh AutoCAD.

Lu hm khng phn bit nhp ch hoa hay thng.


(InitGet 1 Tiep Khong)

; nh ngha t kha T (Tiep) v K (Khong).


; Bitcode 1 khng cho php nhn ngay Enter
; m khng nhp g.

(setq ans (getkword Co tiep tuc khong (Co/Khong) ?))

Hm InitGet

2012
tt
tt

Hm GetKWord

; nhc ngi dng nhp t kha. Nu nhp C hoc cO bin ans s


; c gn gi tr Co, cn nu nhp K hoc kHonG, bin ans c
; gn gi tr Khong. Nu nhp sai, AutoCAD s nhc nhp li.

Dng trc hm GetX hn ch d liu nhp.


(InitGet [bit] [str])

bit

s nguyn 8-bit, c phn tch di dng c s 2 thnh


cc bit, c gi tr 0 hoc 1, tng ng vi vic cho php
hoc khng cho php nhp mt loi d liu no .

str

chui k t th hin keyword.

ngha cc bit khi bng 1

bit0

khng cho php nhp ngay Enter (NIL)

bit1

khng cho php nhp gi tr 0 (Zero)

bit2

khng cho php nhp s m

bit3

cho php nhp im nm ngoi vng LIMIT

Nu mun cm nhp nhiu loi d liu th cn t cc bit tng


ng vi gi tr ph hp

V d cm nhp nhiu loi d liu:


(initGet 3)

; 3 = 1 + 2 => bit0 v bit1 cng c gi tr 1 nn


; hm ny s cm nhp NIL v 0

(initGet 6)

; 6 = 0 + 2 + 4 => bit0 c gi tr 0, bit1 v bit2 cng c gi tr 1


; hm ny s cm nhp s m v 0,
; nhng cho php nhn ngay Enter

Chui str th hin kha c vit theo quy tc:

Cc t kha phn cch nhau bi 1 hoc nhiu du trng


Cm t vit tt trong t kha l 1 cm cc ch vit hoa lin nhau
bt k u trong str. V d: LType LIne eXit toP

Lu rng t kha keyword khng ch dng cho hm GetKWord,


m cn dng cho cc hm GetX khc. V d:
(initGet 4 Pi Two-pi thRee-pi) ; khng cho php nhp s m v
; khai bo 3 t kha

( t goc ((getReal
(setq
tR l Nhp
Nh gc
Pi/Two-pi/thRee-pi
Pi/T
i/thR
i <Pi>))
Pi )) ; nhp
h s
thc
th
; x l s liu do ngi dng nhp

(if (= goc Pi) (setq goc 3.14159))

; nu nhp t kha P hoc Pi

(if (= goc Two-pi) (setq goc 6.28318)) ; nu nhp t kha T (Two-pi)


(if (= goc thRee-pi) (setq goc 9.42477)) ; nu nhp t kha R (thRee-pi)

Khi chui k t str vit hoa, cm t vit tt c vit ngay sau t


kha, phn cch vi t kha bng du phy. Trng hp ny t kha
phi cha ch ci u ca chui k t str. V d LTYPE,LT LINE,LI l
hp l, nhng EXIT,X hoc TOP,P l khng hp l.

(if (= goc NIL) (setq goc 3.14159))

; nu nhn ngay Enter (khng nhp


; g, ly gi tr mc nh goc = pi)

5.2. Chuyn i kiu d liu

Chuyn i kiu d liu l nhu cu khng th thiu trong lp


trnh. V d: hin th kt qu thng phi s dng kiu
String, ngc li d liu nhp t hp thoi DCL thng dng
String, do cn chuyn v dng thch hp c th tnh
ton x l
ton,
l
AutoLISP cung cp mt lot cc hm dng cho mc ch ny.
C php chung thng c dng:
StoD trong S l kiu d liu ngun, cn D l kiu cn
chuyn i ti.

Di y l mt s hm chuyn kiu d liu hay dng.

Hm atof

2012
tt

tt

Hm InitGet (3)

2012t
2012
t
t

Hm InitGet (2)

Chuyn i chui k t dng s str sang s thc.


(atof str)

str

chui k t

Nu str khng phi chui k t, autoLISP s bo li. Nu chui str


khng phi l chui s,
s hm vn thc hin
hin. Hm tr v s thc
0.0 nu chui str khng hp l ngay t ch ci u tin, cn khng
hm s tr v s tng ng vi cc ch s hp l.

V d

(atof 97.1)

(atof 97)

tr v s thc 97.1
tr v s thc 97.0

(atof a78)

tr v s thc 0.0

(atof 123.4a15) tr v s thc 123.4

Chuyn i chui k t dng s str sang s nguyn. Lu hm tr


v s nguyn 32bit, nn nu chui tng ng vi s nguyn vt
khi gii hn 32bit, hm s tr v gi tr khng ng.
(atoi str)

str

chui k t

Nu str khng phi chui k t, autoLISP s bo li. Nu chui str


khng hp l, hm vn thc hin tng t nh atof

V d

(atoi 97)

tr v s nguyn 97

(atoi 97.91)

cng tr v s nguyn 97

(atoi 097)

tr v s nguyn 97

(atoi a97)

tr v s nguyn 0

(atoi 123456767889990) tr v s nguyn 2147483647

Hm distof

2012
tt
tt

Hm atoi

Chuyn i chui k t dng s o khong cch sang s thc


(distof str [mode])

str

chui k t

mode

kiu th hin khong cch chui k t (xem hm rtos)

Nu chui hp l theo mode cho hm tr v s thc, cn khng


hm s tr v NIL.
V d

(distof 17.5 2)

(distof 1.75E+01 1)

tr v s thc 17.5
cng tr v s thc 17.5

(distof 1-5.5\ 3)

tr v s thc 17.5 (1 ft 5.5 in = 17.5 in)

(distof 1-5.5\ 2)

tr v NIL do chui khng hp l


theo mode 2 (kiu thp phn)

Chuyn i chui k t dng s o gc sang s thc th hin gc


ny bng radian (t 0 n < 2)
(angtof str [mode])

str

chui k t

mode

kiu th hin gc trong chui


k t (xem hm angtos)

Nu chui hp l theo mode cho hm tr v s thc, cn khng


hm s tr v NIL.
V d

(angtof 45.0 0) tr v s thc 0.785398 (p/4)

(angtof -45.0 0) tr v s thc 5.49779 (7p/4 = 2p-p/4)

(angtof 45.0 3) tr v s thc 1.0177 (45rad, sau khi tr bt 2kp)

(angtof 45r 3)

Hm ascci v chr

2012t
2012
t
t

Hm angtof

Hm (ascii str) tr v s nguyn ng vi m ASCII ca ch ci


u trong chui k t str
(ascii ABC)

tr v s nguyn 65 (m ascii ca A)

Hm (chr int), ngc vi ascii, tr v chui k t gm ch ci c


m ascii tng ng vi tham s int
(chr 65)

tr v chui k t A, nhng

(chr 12)

li tr v chui \014, th hin s 12 trong h


m c s 8.

tr v s thc 1.0177 (45rad, sau khi tr bt 2kp)

Hm (itoa int) tr v chui k t th hin s nguyn int trong


tham s ca hm. Ni cch khc, hm ny chuyn s liu t s
nguyn sang chui k t.
Lu s nguyn b gii hn trong khun kh 32bit.
(itoa 123)

tr v chui 123

(itoa 123456767889900)

khng thc hin do tham s vt 32bits

(itoa 123.456)

khng thc hin do tham s khng phi


l s nguyn

Hm rtos

2012
tt

tt

Hm itoa

Chuyn i chui k t dng s sang s thc


(rtos num [mode [precision]])

num

s cn chuyn i

mode

kiu th hin chui k t s

precision chnh xc (s ch s sau du thp phn)

Nu mode v precision khng c trong hm, chng c ly theo


mc nh, xc lp t bin LUNITS v LUPREC ca AutoCAD.
Cc mode

(setq num 17.5)

kiu khoa hc

(rtos num 1 4) tr v chui 1.7500E+01

kiu thp phn

(rtos num 2 4) tr v chui 17.5000

k thut (Anh)

(rtos num 3 4) tr v chui 1-5.5000\ (1-5.5000)

kin trc (Anh)

(rtos num 4) tr v chui

1-5 1/2\ (1-5 1/2)

kiu phn s

(rtos num 5) tr v chui

17 1/2

10

Chuyn i chui k t dng s o gc sang s thc th hin gc


ny bng radian (t 0 n < 2)

(angtos ang [mode [precision]])

ang

gc cn chuyn i, o bng radian

mode

kiu th hin chui k t s

precision chnh xc (s ch s sau du thp phn)

Nu mode v precision khng c trong hm, chng c ly theo


mc nh, xc lp t bin AUNITS v AUPREC ca AutoCAD.

Cc mode

v d vi ang = 0.785398 (tc l /4)

kiu thp phn

(angtos ang 0 4) tr v chui 45.0000

XdYZ

(angtos ang 1) tr v chui 45d00\

Gradian (1v=100g) (angtos ang 2 4) tr v chui 50.0000g

Radian

(angtos ang 3 4) tr v chui 0.7854r

Hng hi

(angtos ang 4) tr v chui N 45d00\ E

5.3. Xut d liu

2012
tt
tt

Hm angtos

C th xut d liu ra mn hnh qua 2 hm thng bo prompt


v alert mc 5.1.1, nhng d liu cn phi chuyn i sang
dng chui k t. Gi tr tr v ca cc hm ny l NIL.
Cc hm sau y ghi trc tip d liu ln mn hnh vn bn
ca AutoCAD hoc file d liu. D liu c th thuc cc loi
khc nhau,
nhau cng c th l kt qu ca 1 biu thc.
thc Gi tr tr
v ca hm cng khc nhau.

(princ expr [file])

xut d liu ra mn hnh hoc file (khng


km theo du nhy kp i vi chui k t)

(prin1 expr [file])

xut d liu ra mn hnh hoc file (km c


du nhy kp i vi chui k t)

(print expr [file])

xut d liu ra mn hnh hoc file (gm c


du nhy kp i vi chui k t), nhng bt
u dng mi v c thm du cch sau DL.

Cc hm prinX ch c php duy nht 1 tham s expr, cn


tham s file l con tr file, nhn c t hm open.
Gi tr tr v ca cc hm ny l gi tr ca tham s expr.
V d, chui str c ni dung: The allowable tolerance, cc
hm ny u s tr v chui The \allowable\ tolerance,
nhng ni dung in ra c khc nhau:
(princ str)

in ra:

The allowable tolerance

(prin1 str) in ra:

The \allowable\ tolerance

(print str)

<xung dng mi>

in ra:

Write-char v Write-line

2012t
2012
t
t

Cc hm prinX

Ngoi ra cn s dng 2 hm sau ghi d liu ra mn hnh


hoc vo file.
(write-char int [file]) ghi k t c m ascii bng int. V d 2 lnh:
(write-char 65)
((write-char 66))
s in ra mn hnh 2 k t AB (vit lin nhau trn cng 1 dng).

(write-line str [file]) ghi chui k t str (khng km theo du

nhy kp, v sau xung dng mi. V d:

(write-line Abc)
(write-line Def)

The \allowable\ tolerance <ducch>

s in ra mn hnh 2 dng Abc v Def.

(princ (+ 2.5 2.4)) in ra s 4.9 v tr v gi tr s thc 4.9


(print (+ 2.5 2.4))

<xung dng mi>, in ra s 4.9, <du cch>


v tr v gi tr s thc 4.9

Nh vy (write-line str [file]) s tng ng vi vic thc hin


lin tip 2 hm (princ str) v (print)

Khi gi hm AutoLISP, kt qu biu thc cui cng ca hm


c in ra mn hnh. trnh vic ny, thng thm (princ)
cui hm. Khi , hm s tr v gi tr NIL v cch thc ny
trong AutoLISP c gi l Rt lui im lng !.
V d:

(defun vedoanthang( / p1 p2)


(setq p1 (getPoint \nNhp im u: )
p2 (getPoint p1 \nNhp im tip: ))
(command .line p1 p2 )
(princ)

5.4. Lm vic vi file

2012
tt

tt

Rt lui im lng !

File trong AutoLISP thuc dng file vn bn, truy cp


tun t.
Cc hm lm vic vi file:

(open filename mode)

M file

( l
(close
fil )
file)

fil
ng
file

(findfile filename)

Kim tra xem file hoc folder


tn ti hay cha

(getfiled tit def ext flg) Nhp tn file qua hp thoi file
tiu chun ca AutoCAD

Ghi d liu vo file thng qua cc hm prinX hoc


write-char v write-line ni trn.
c d liu t file qua cc hm read-char v read-line

11

Hm (open filename mode) dng m file, chun b cho vic


lu hoc c d liu.

Filename chui k t, th hin tn file cn m. Nu khng km ng


dn, file c tm trong folder khi ng ca AutoCAD
mode

chui k t th hin mc ch m file, khng phn bit ch


hoa hay ch thng,
thng gm cc la chn:
r m file c d liu. File phi tn ti.
w m file ghi d liu. Nu file cha tn ti, n s c
to ra, cn nu tn ti, d liu c s b xa ghi mi.
a m file ghi thm d liu. Nu file cha tn ti, n s
c to ra, cn nu tn ti, d liu mi s c ghi
tip vo sau d liu c.

Hm (close file) dng ng file m. Thng s file l con


tr file, nhn c t hm open.
V d
(setq tfile vidu6-14.txt)

; Khai bo tn file

(setq ctfile (open tfile r)


r )

; M file c
c, nu thnh cng th
; con tr file c gn cho bin ctfile

(setq ct 0)

; Khi to b m

(while (read-line ctfile)


(setq ct (1+ ct)
)

; khi ht (hm read-line tr v NIL)


; ng file

(princ File cha ) (princ ct) (princ dng d liu)


(princ)

; Thng bo kt qu v rt lui im lng

Findfile

Hm (findfile filename) dng kim tra xem file hay folder


c tn ch nh c tn ti khng.
Thng s filename l tn file/folder cn kim tra. Nu ghi
khng km ng dn, hm s kim tra trong cc ng dn
khai bo trong mc Reference ca AutoCAD, ngc li hm ch
kim
tra trong folder
ch nh.
Nu tm thy hm s tr v tn y ca file di dng chui
k t. Nu khng tm thy, hm tr v NIL.
V d (setq tfile (findfile d:/VLisp/vidu7.lsp)) s ch tm file

vidu7.lsp trong folder D:\VLisp. Nu c, bin tfile s c gn gi tr


d:\\vlisp\\vidu7.lsp, cn nu khng, tfile s c gn gi tr NIL.

Getfiled

Hm (getfiled tit def ext flg) dng nhp tn file qua hp thoi
file tiu chun ca AutoCAD, kt qu tr v tn y ca file.

tit

Chui k t s hin trn thanh tiu ca hp thoi File

def

Chui k t th hin tn mc nh. S dng chui rng nu


khng mun tn mc nh no c.

ext

Chui
Ch
k t ch
h phn
h m
rng
((phn
h
ui)
) ca
tn
ffile.
l Nu
gn

chui rng, n c coi nh chui * (phn ui bt k)

flg

S nguyn, iu khin vic th hin hp thoi theo cch thc


nht nh. S nguyn c phn tch thnh cc bit, gi tr cc
bit ny iu khin hot ng ca hp thoi (tham kho InitGet)

bit0 nu l 1 s hin hp thoi dng SaveAs, cn nu l 0 hp thoi Open


bit1 khng s dng

Nu folder hin thi ca AutoCAD c cha file abc.lsp, biu thc


(findfile abc.lsp) s tr v tn y ca file, chng hn
C:\\Program Files\\AutoCAD 2007\\abc.lsp

bit2 nu l 1 tn file c th khng c phn ui hoc phn ui khc vi mc


nh khai bo trong thng s ext, cn nu l 0 tn file s c gn
phn ui mc nh

Ghi d liu vo file

S dng cc hm prinX hoc write-char v write-line. V d


sau y ghi ta cc im chn trn mn hnh vo file.

(setq tfile d:/vlisp/p2file.txt)


; khai bo tn file
(setq fil (open tfile w))
; m file ghi d liu
(if fil
; nu m file thnh cng
(p og
(progn
(princ ;;;; Ta cc im ;;;;, fil)
;ghi dng u vo file
(setq p (getPoint \Nhp im u: )) ;nhp im u
(while p
;ghi ta im nhp vo file
(print p fil)
(setq p (getPoint \Nhp im tip theo: )) ;nhp im tip
)
;kt thc vng lp while (nhn Enter)
(close fil)
;ng file
) ;kt thc khi progn
(prompt Khng m c file)
;thng bo nu khng m c file
)
;kt thc khi if

; c tng dng d liu trong file


; mi ln m tng thm 1 cho n

(close ctfile)

Nu thc hin thnh cng, hm tr v con tr file s dng vi


cc hm c/ghi d liu. Nu khng thnh cng, hm tr v NIL.

2012t
2012
t
t

Ghi d liu vo file (2)

2012
tt

tt

Close

2012
tt
tt

Open

Khi chy on chng trnh ny, do vng lp while nn trn


dng lnh AutoCAD s xut hin cc li nhc yu cu nhp
im. Kch chut hoc g ta im nhp, nhn Enter
(khng nhp g) kt thc vng lp.
Nu thc hin thnh cng v nhp vo 4 im, d liu lu vo
file s c dng sau:
;;;; Ta cc im ;;;;
(1.0 1.0 0.0)
(2.5 1.3 0.0)
(4.0 2.4 0.0)
(5.0 3.8 0.0)

Lu rng du ngoc () trong file d liu l do cc im c


qun l di dng danh sch list gm 3 phn t.

12

c d liu t file
Hm (read-char ctfile) c tng k t trong file v tr v s
nguyn l m ascii ca k t va c. Nu gi tip hm mt
ln na, n s c k t tip theo. Khi ht dng, hm tr v s
10 v con tr chuyn xung dng k tip. Khi ht file, hm tr
v
NIL.

Hm (read-line ctfile) c dng vn bn t v tr con tr v


tr v chui k t c c, khng km theo k t xung
dng. Con tr ri xung dng k tip. Khi ht file (khng cn g
c), hm tr v NIL.

Thng s ctfile l con tr file, nhn c t hm open.

2012
tt
tt

S dng cc hm read-char v read-line

c d liu t file (2)

Gi s file Rtest.txt cha d liu sau:

on chng trnh sau minh ha cc lnh read-char v read-line

(setq tfile Rtest.txt)

5.5. To cc i tng
AutoCAD

Cc i tng AutoCAD bao gm cc i tng ha nh


on thng, cung trn, v cc i tng khc nh khi
(block), lp (layer)
To v sa i tng AutoCAD c th thc hin qua 2 cch:

S dng hm command gi cc lnh v thng s tng ng


AutoCAD thc hin
Trc tip can thip vo CSDL ca AutoCAD

S dng hm command l mt cch hu hiu v n gin,


nhng phi nm vng cc lnh ca AutoCAD, cn vic can thip
vo CSDL th kh hn, cn hiu r cch thc qun l cc i
tng trong AutoCAD (hiu r m i tng v cch x l).
Cng c th kt hp c 2 cch thc trn

2012t
2012
t
t

c d liu t file (3b)


Kt qu gi hm file2list vi file d liu d://vlisp/p2file.txt
;;;; Ta cc im ;;;;
(1.0 1.0 0.0)
(2.5 1.3 0.0)
(4 0 2.4
(4.0
2 4 0.0)
0 0)
(5.0 3.8 0.0)

thc hin qua cu lnh: (file2list d://vlisp/p2file.txt) s c kt qu


l danh sch lin kt:
( (1.0 1.0 0.0) (2.5 1.3 0.0) (4.0 2.4 0.0) (5.0 3.8 0.0) )
Dng u bt u bng du ; nn c coi l ch thch v b b
qua, khng a vo danh sch kt qu.

5.5.1. Hm Command

2012
tt

tt

Hm ngi dng sau c d liu t file v chuyn thnh danh sch.

(defun file2list (fname / f ln lst c1 kq)


;khai bo hm
(setq f (open fname r))
;m file c
(if (not f) (progn
(alert Khng m c file !)
;nu khng m c -> thot
(exit) )
(setq kq ())
()) ;cn c th tip tc,
tc bt u bng to danh sch kq rng
(while (setq ln (read-line f)) ;c dng d liu trong file
(setq c1 (substr ln 1 1))
;ly k t u ca dng va c
(if (/= ; c1) (progn
;kim tra xem c phi l dng ch thch
(if (/= ( c1) (setq ln (strcat ( ln))) ;thm ( ) nu cha c
(if (/= ) (substr ln (strlen ln 1)) (setq ln (strcat ln ) )))
;c dng d liu v tr v danh sch lst
(setq lst (read ln))
(setq kq (append kq (list lst)))
;thm danh sch lst vo kq
)))
; kt thc progn, if v while (khi ht file)
(close f)
;ng file
kq )
; tr kt qu v v kt thc hm

;gn tn file

(if (setq fil (open tfile r))


r ))
;m file c v nu m c
(progn
;tr v 65, ng vi k t A trn dng 1
(read-char fil)
(read-char fil)
;tr v 66, ng vi k t B trn dng 1
(read-char fil)
;tr v 10, ng vi k t ht dng
(read-char fil)
;tr v 68, ng vi k t D trn dng 2
(read-line fil)
;tr v ong 2 2XY (c dng 2, nhng thiu D)
(read-line fil)
;tr v Dong 3 3TWZ (y c dng)
(read-line fil)
;tr v NIL (ch c k t dng mi)
(read-line fil)
; tr v NIL (chng cn g c)
(close fil)
;ng file
))

c d liu t file (3a)

AB
Dong 2 2XY
Dong 3 3TWZ
<xung dng>

C php chung ca hm command:


(command [arg])
trong arg l cc tham s ca hm, bao gm:

Tn lnh AutoCAD

Cc la chn con ca lnh tng ng

Cc d liu cn nhp theo th t nh khi v bng lnh AutoCAD

Cc tham s ca hm command c th thuc loi d liu chui k t,


s thc, s nguyn, im, nhm chn. Chui k t trng c hiu
nh vic nhn Enter.

Hm command lun tr v gi tr NIL.


Lu AutoCAD c phin bn cho nhiu ngn ng khc nhau,
cng nh cho php t nh ngha li lnh nn trnh nhm ln
nn thm vo trc tn lnh cp du _. hoc ._

13

V d
Lu : cn nm r cc lnh AutoCAD phng n dng lnh. V
d v vng trn cn nm r:

Tn lnh: Circle

Cc li nhc tip theo: Specify center point for circle or [3P/2P/TTR]

Cc d liu cn nhp: tng ng vi phng n chn, s c


nhc tip sau khi chn phng n.
n Chng hn nu chn phng n
mc nh (nhp tm vng trn) AutoCAD s nhc nhp tip bn
knh, cn nu chn phng n 2P, AutoCAD s nhc nhp 2 im
mt ca 1 ng knh

Mt vi v d minh ha

V d 1: V vng trn bit tm v bn knh


(setq cen (1 2 0))

;khai bo tm vng trn

(setq rad 10.0)

;khai bo bn knh

(command _.Circle cen rad)

;v vng trn

2012
tt
tt

V d (2)
V d 2: V vng trn qua 2 v qua 3 im (nhp trc tip). V cc
on thng ni 3 im nhp.
(setq p1 (getpoint Nhp im u: )
p2 (getpoint p1 im th 2: ))
(command _.Circle .2P p1 p2)
(setq p3 (getpoint im th 3: ))
(command _.Circle 3P p1 p2 p3) ;v vng trn qua 3 im
;v cc on thng ni 3 im nhp
(command _.Line p1 p2 p3 )
; lu thm du k t trng vo sau im cui cng ca lnh Line do
; lnh ny v cc on lin nhau cho n khi nhn Enter kt thc.

(setq x (* 0.5 (+ (car p1) (car p2)))


y ((* 0.5 (+
( (cadr
(
p1)
p ) (cadr
(
p2)))
p )))
m (list x y))

;im gia M ca on p1-p2

(setq x (* 0.5 (+ (car p2) (car p3)))


y (* 0.5 (+ (cadr p2) (cadr p3)))
n (list x y))

;im gia n ca on p2-p3

(setq x (* 0.5 (+ (car p1) (car p3)))

Cc hm hnh hc

2012t
2012
t
t

V d 3: V cc on thng ni cc trung im 3 on thng v d 2


v cc on thng ny cn tnh trc ta cc trung im M, N, P
ca cc on trn. C th s dng cc hm s hc v x l danh sch
thc hin vic tnh ton.

Vic tnh ton ta im nh v d 3 kh phc tp, cha k


n cc thao tc kh hn nh quay i tng, ly i xng
AutoLISP cung cp cc hm hnh hc xc nh ta im,
o khong cch, tnh gc
Polar

- tm
im
qua ta
tng i
vi
1 im
khc

Distance

- xc nh khong cch gia 2 im

Angle

- xc nh gc ng ni hai im v trc X

Inters

- tm giao im ca 2 on thng

Osnap

- tm im qua cch truy bt im c trng


(Object Snap) nh im mt, trung im, chn
ng vung gc, tm vng trn

y (* 0.5 (+ (cadr p1) (cadr p3)))


p (list x y))

;v vng trn qua 2 im.

;nhp thm im
th 3

V d (3)

;khai bo im 1
;khai bo im 2

;im gia n ca on p1-p3

(command _.Line m n p )

Hm polar tr v mt im, xc nh thng qua ta cc


tng i vi mt im khc
(polar pt ang dist)

pt

- im tham chiu (ng vai tr gc ta tm thi)

ang

- gc (radian) gia ng ni im tham chiu vi im


cn tm so vi trc X ca h to chun World.

dist

- khong cch gia 2 im


im tr v
dist

Hm distance tr v khong cch gia 2 im


(distance pt1 pt2)

pt1 v pt2

- cc im 2D hoc 3D.

Lu rng khong cch gia 2 im c th tnh bng cn bc 2 ca


g bnh phng
p
g cc ta
,
, nhng
g r rng
g l rc ri hn nhiu
tng

Hm (angle pt1 pt2) tr v gc to bi trc X ca h ta


hin hnh v ng ni 2 im pt1 v pt2.
pt2

pt1

ang
pt

Hm Distance v Angle

2012
tt

tt

Hm Polar

gc tr v
X

14

Hm inters tr v giao im ca 2 on thng


(inters pt1 pt2 pt3 pt4 [onseg])

pt1 v pt2

- cc im nm trn on thng th nht.

pt3 v pt4

- cc im nm trn on thng th hai.

onseg

- tham s ty chn
chn.

Nu b qua tham s onseg hoc onseg khc NIL hm s ch tm giao


im nm gia cc im cho. Nu chng khng c, hm s tr v
NIL. Cn nu onseg l NIL, hm s tm c giao
im trn c phn ko di ca cc on ny.
pt2
Trn hnh v
(inters pt1 pt2 pt3 pt4) s tr v NIL,
(inters pt1 pt2 pt3 pt4 NIL)
s tr v im G.

pt1
pt3

Cc bin h thng trong


AutoCAD

Cc bin h thng trong AutoCAD nh Osmode (ch truy bt


im c trng), Orthomode (ch v ngang/dc) c th gy
nh hng n hm command do vic cc im nhp vo c th
b ri n v tr khc. Do , trc khi chy chng trnh, thng
cc bin h thng nhy cm ny c ci t v 0, sau , khi
chng
h
trnh
h chy
h xong, chng
h phi
hi
c khi phc
h llii gi
i tr ban
b
u.
AutoLISP cung cp cc hm tng ng thc hin vic ny:

Getvar - ly gi tr hin thi ca bin h thng

Setvar - t gi tr cho bin h thng

Hm Osnap tr v im 3D theo cch truy bt im c trng


trn i tng nh ch Object Snap ca AutoCAD

(osnap pt mode)

pt

- im, ni s truy bt im c trng.

Mode - chui k t th hin c trng Osnap, chng hn


mid im gia, cen tm, end im cui

S thnh cng ca vic truy bt im theo cch ny khng


nhng ph thuc vo ta im pt m cn ph thuc vo
ln ca vng truy bt, xc lp bi bin h thng Aperture
ca AutoCAD. Do , hm ny t c s dng trong lp trnh
thit k t ng do chng trnh chy khng n nh.

pt4

Hm Getvar v Setvar

2012t
2012
t
t

Hm Osnap

2012
tt
tt

Hm Inters

Hm getvar ly gi tr hin thi ca bin h thng vi c php:


(getvar varname)
trong varname l chui k t hoc k hiu th hin tn bin h thng
cn truy cp. Nu tham s ny khng ng, hm tr v NIL.
Xem Command Reference / System Variable r hn v cc bin ny.

Hm setvar t gi tr cho bin h thng, dng vi c php sau:


(setvar varname value)

varname - chui k t hoc k hiu th hin tn bin h thng

Value

- gi tr cn t cho bin

Cn lu l mt s bin h thng ch cho php c (read only), do


khng th t li gi tr cho cc bin h thng ny.

Hm command khng tham s tng ng vi nhn Escape


thot lnh trong AutoCAD.
Hm command cn gi gi tr n AutoCAD x l. C th s
dng phng thc ny gi cc im tnh trc hoc lu t file
to
cc i tng
g (v
( d
v ng
g gp
g p khc m khng
g cn bit
trc s lng cc im ny)
V d cc im c lu di dng danh sch plst, cn v ng Spline kn
ni cc im ny.
(setq plst ((2 1) (5 3) (6 9) (12 17) (19 29) (24 1) (6 78)) )
(command _.Spline ) ; gi lnh Spline v ng cong ni cc im trn

5.5.2. CSDL AutoCAD

2012
tt

tt

Lu thm v hm command

AutoCAD qun l cc i tng di dng CSDL gm cc bn


ghi dng danh sch lin kt v dot-pair. i tng mi c th
c to ra bng cch thm trc tip cc bn ghi mi vo CSDL
ny.
Cc i tng trong AutoCAD thng c truy cp qua tn ca
chng Tn ny c AutoCAD t ring
chng.
ring, t thay i mi khi m
bn v, do vy thng c gn cho bin no v thc hin
cc thao tc qua bin ny.
Cc hm truy cp i tng:

(foreach pt plst (command pt)) ; gi cc im trong danh sch cho Spline

(entlast) - ly tn i tng v sau cng


(entnext [ename]) - tn i tng lin sau i tng ename.
Nu khng c ename, hm tr v tn i tng u.

(command _c)

; ng kn Spline, hon tt lnh

(entget ename) ly m i tng c tn ename

(princ)

; rt lui im lng

(entmake [elist]) to i tng mi t m elist (danh sch)

15

V d 1: V on thng ni 2 im (1 2) v (6 5) trong mt phng XY


sau chy on chng trnh sau:
(setq ename (entlast)) ;ly tn i tng va v, gn cho bin ename
(setq ecode (entget ename)) ;ly m i tng gn cho bin ecode
Kt qu:
q

Bin ename c gi tr <Entity name: 7ef4fea0>

Bin ecode l danh sch:

((-1 . <Entity name: 7ef4fea0>) (0 . LINE)


(330 . <<Entity name: 1bbd0c8>) (5 . 6A) (100 . AcDbEntity)
(67 . 0) (410 . Model) (8 . 0) (100 . AcDbLine)
(10 1.0 2.0 0.0) (11 6.0 5.0 0.0) (210 0.0 0.0 0.0 1.0))

V d (2)

2012
tt
tt

V d

Danh sch ny th hin m i tng ca on thng c qun l trong


CSDL ca AutoCAD. thao tc vi d liu ny cn nm c ngha cc
thnh phn. Tham kho DXF Reference trong Help ca AutoCAD.

Cc lnh chnh sa trong AutoCAD ni chung lin quan n vic


chn i tng (nhm i tng) trn bn v.

thc hin, AutoCAD a li nhc Select Object(s) dng lnh.


Trong lp trnh t ng thit k, ngi dng cn truyn d liu cho
lnh sa i mt cch t ng, khng qua thao tc chn trc tip.
AutoLISP s dng mt loi d liu kiu nhm chn,
chn gi l Selection
Set hoc Pick Set.

Mt s hm thng dng x l d liu loi ny:

ssget chn nhm i tng theo cc cch khc nhau

ssadd thm i tng vo nhm chn

ssdel loi i tng khi nhm chn

sslength s lng i tng trong nhm chn

ssname tn i tng trong nhm chn

ssmemb kim tra xem i tng c thuc nhm chn khng

(setq elist ((0 . CIRCLE) (8 . MYLAYER) (10 5.0 7.0 0.0) (40 . 1.0)))
(entmake elist)
Vng
g trn c
v v nu chy
y tip
p cc biu thc v d
1,, kt qu
q
nhn c nh sau:

Bin ename c gi tr <Entity name: 7ef4feb8>

Bin ecode l danh sch:

((-1 . <Entity name: 7ef4feb8>) (0 . CIRCLE)


(330 . <<Entity name: 7ef4fcf8>) (5 . 8F) (100 . AcDbEntity)
(67 . 0) (410 . Model) (8 . MYLAYER) (100 . AcDbCircle)
(10 5.0 7.0 0.0) (40 . 1.0) (210 0.0 0.0 0.0 1.0))
C th thy rng AutoCAD t thm cc m nhm chung vo m ca
i tng va to nh tn i tng, nt, mu... theo gi tr mc nh.

ssGet

2012t
2012
t
t

5.6. Chnh sa i tng


AutoCAD

V d 2: To lp MYLAYER, v i tng vng trn c tm (5.0 7.0 0.0)


v bn knh 1.0 trn lp va to.

Hm dng chn nhm i tng nh khi thao tc trc tip


trong mi trng AutoCAD. C php chung ca hm nh sau:
(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])

sel-method chui k t th hin cch chn nhm i tng


C-CrrosingWindow, CP-CrossingPolygon, F-Fence, L-Last,
P-Previous,
P Previous, W-Window,
W Window, WP-Polygon,
WP Polygon, X-chn
X chn tt c, k c
trn cc lp Off, Frozen v nm ngoi vng nhn thy.
pt1, pt2 im xc nh vng s chn cc i tng (C hoc W).
pt-list danh sch cc im, xc nh ng gp khc (F) hoc a
gic (CP,WP) lin quan n vng chn.
filter-list danh sch lin kt th hin cch chn loi tr, v d
(ssget X ((0 . LINE) (62 . 5))) s ch chn cc on thng
Line c v mu xanh (m mu 5).
Khi hm ssget khng c tham s, AutoCAD s hin li nhc
Select Objects... yu cu ngi dng chn trc tip.

Hm dng thm i tng vo nhm chn.


(ssadd [ename [ss]])

ename tn i tng mi cn thm vo nhm chn.

ss tn nhm chn s c b sung i tng chn mi.

Nu hm khng c tham s, nhm chn rng s c to ra.

Nu ch c tham s ename, s to nhm chn ch gm 1 phn t.

Kt qu tr v ca hm l tn nhm chn ss.

V d
(setq ss1 (ssadd))

; to nhm chn rng, gn cho bin ss1

(setq ss2 (entlast))

; to nhm chn gm phn t va v, gn cho bin ss2

(ssadd (entlast) ss1) ; thm i tng va v vo nhm ss1. Khi ss1 v


; ss2 l nh nhau: cng cha phn t va v.

ssDel

2012
tt

tt

ssAdd

Hm dng loi i tng khi nhm chn, tng t la chn


R (remove) trong yu cu chn i tng ca AutoCAD.
(ssdel ename ss)

ename tn i tng cn loi khi nhm chn.

ss tn nhm chn.

Nu ename thuc nhm ss, nhm chn ss s c loi bt phn


t c tn ename. Hm tr v tn nhm chn.
Nu ename khng thuc nhm ss, hm tr v NIL.

V d
(setq ss (ssadd (entlast))

; to nhm ss gm i tng va v.

(ssadd (entnext) ss)

; v b sung thm i tng u trong CSDL.

(ssdel (entlast) ss)

; loi i tng cui khi nhm chn ss

(ssadd (entnext) ss1) ; thm i tng u trong CSDL vo nhm ss1.

16

(sslength ss) tr v s lng i tng trong nhm chn ss.


(ssname ss index) tr v tn i tng th index trong nhm
chn ss. Lu cc i tng trong nhm c nh s t 0.
(ssmemb ename ss) tr v tn i tng ename nu i tng
ny nm trong nhm ss, cn nu khng, hm tr v NIL.
V d p dng: nhp 2 nhm chn vo 1 nhm.
(setq ss1 (ssget)) ; yu cu ngi dng chn i tng, a vo nhm ss1.
(setq ss2 (ssget)) ; yu cu ngi dng chn i tng, a vo nhm ss2.
(setq num (sslength ss2)) ; ly s phn t trong nhm ss2, gn cho bin num
(setq ind 0)
; khi to b m
(repeat num
; lp num ln
(setq ent (ssname ss ind)) ; ly tn phn t th ind
(ssadd ent ss1)
; thm vo nhm ss1
(setq ind (1+ ind))
; tng ind thm 1
)
; kt thc vng lp

Chnh sa cc i tng

2012
tt
tt

ssLength, ssName v ssMemb

Trong thit k cc thao tc chnh sa i tng nh sao chp, xa, quay


khng th thiu.
thc hin t ng cc thao tc ny, c th s dng hm command gi
cc lnh AutoCAD v cc nhm chn.
Cng c th truy cp trc tip vo CSDL ca AutoCAD chnh sa. Thao
tc thay i trc tip m i tng thc hin bng hm (entmod elist)
v cp nht li hnh nh mi ca i tng bng hm (entupd ename).
Mt cch hu hiu khc l kt hp c 2 cch trn thc hin chnh sa
i tng AutoCAD.
Cc v d minh ha:
V d 1: Hm ngi dng ss-rcopy to nhm i tng mi quay mt
gc so vi nhm i tng gc.
V d 2: Sa i tng bng entmod v entupd
V d 3: Hm ngi dng CenterLine thm ng tm cho cc
vng trn trn bn v.

V d 2

2012t
2012
t
t

V d 1
(defun ss-rcopy (ss pt ang / ss1 ent num ind)
; khai bo hm ss-rcopy
(if (null ss) (setq ss1 NIL)
; ss nhm chn
(progn
; pt tm quay
(setq ss1 (ssadd))
; ang gc quay
(setq num (sslength ss)
ind 0)
(while (< ind num)
(setq ent (ssname ss ind))
; copy ti ch
(command _.Copy ent pt pt)
(command _.Rotate (entlast) pt ang) ; quay
(ssadd (entlast) ss1)
(setq ind (1+ ind))
; kt thc while, progn, if
)))
ss1 ; kt qu tr v: nhm i tng mi to hoc NIL nu nhm chon rng.
)
; kt thc hm

Gi s to lp MYLAYER, v vng trn c tm (5.0 7.0 0.0), bn knh 1.0


(setq elist ((0 . CIRCLE) (8 . MYLAYER) (10 5.0 7.0 0.0) (40 . 1.0)))
(entmake elist)
sau mun i bn knh thnh 10.0 v mu t ByLayer thnh .
(setq newrad (cons 40 10.0) ; khai bo danh sch lin kt th hin bn knh mi
newclr (cons 62 1))
; danh sch lin kt th
hin mu mi (1 = )
(setq ent (entlast))
; ly tn i tng va v (vng trn)
(setq ecode (entget ent))
; ly thng tin m i tng v thay i chng
(if (setq clr (assoc 62 ecode))
; nu t mu (c m 62)
(setq ecode (subst newclr clr ecode)) ; th thay mi
(setq ecode (append ecode (list newclr))) ; nu cha th thm vo
)
(entmod ecode) ; cp nht d liu
(entupd ent)
; cp nht i tng

V d ny v thm ng tm vo cc vng trn do ngi dng chn


(setq ss (ssget ((0 . CIRCLE)))) ; yu cu ngi dng chn i tng, nhng
(setq ind 0
; ch a cc vng trn vo nhm chn.
num (length ss))
; m s phn t chn
(repeat num
(setq ent (ssname ss ind)
ecode (entget ent)
; ly m i tng
cen (cdr (assoc 10 ecode))
; tm vng trn
rad (cdr (assoc 40 ecode)))
; bn knh
(setq c1 (polar cen 0.0 (* 1.1 rad))
; v 2 ng tm, di 1,1 knh
c2 (polar cen pi (* 1.1 rad))
c3 (polar cen (* pi 0.5) (* 1.1 rad))
c4 (polar cen (* pi 0.5) (* 1.1 rad)))
(command _.Line c1 c2 )
(command _.Line c3 c4 )
; i tng tip theo
(setq ind (1+ ind))
)
; kt thc vng lp

2012
tt

tt

V d 3

17

You might also like