You are on page 1of 40

LP TRNH NG DNG

Ngn ng AUTOLISP
I> TNG QUAN V NGN NG AutoLISP 1. Gii thiu chung: LISP l ch vit tt ca cm t ting Anh: LISt Processor (X l danh sch) AutoLisp l mt ng dng ca ngn ng Lisp c s dng trong mi trng AutoCad. LISP l ngn ng lp trnh thuc nhm tr tu nhn to do MacCarthy son tho cui nhng nm 50. Vi AutoLisp ngi dng c th m rng v tu bin cc chc nng ca AutoCad. Hin nay AutoLisp c hng Autodesk pht trin theo cc s hiu pht hnh ca AutoCad. V cn bn nhng phin bn sau vn s dng c nhng chng trnh lp bng phin bn trc, ngc li th khng c do c mt s bin h thng v lnh ca AutoCad gia cc phin bn khng ging nhau nn vic dng chung c gp mt s tr ngi. Do vy yu cu ngi lp trnh AutoLisp phi nm tht vng AutoCad s dng AutoLisp mt cch hiu qu. AutoLisp l mt ngn ng lp trnh thng dch, ngha l dch n dng no thc hin dng v cho kt qu, khng c trnh bin dch ring. Mt tp hp cc cu lnh ca AutoLisp c gi l hm Lisp v tp (file) cha cc hm gi l tp (file) Lisp c phn m rng l *.Lsp. Vi AutoLisp, ngi dng c th d dng truy cp n d liu ca AutoCad, c th thay i, to mi, xo b cc i tng, thm cc thng tin vo bn v thc hin cc cng vic T ng ho trong thit k... 2. Cc qui c ca AutoLisp: a) Cch vit chng trnh ca AutoLisp C 2 cch vit chng trnh AutoLisp: Vit trc tip:

Ti dng nhc Command: ca AutoCad ta c th g cc cu lnh theo c php ca AutoLisp. Lnh ny s c thc thi ngay v cho kt qu trn mm hnh ti vng dng lnh, nhng lnh ny khng lu tr c. Vit thnh chng trnh:

Dng chng trnh son tho (dng m ASCII) bt k hoc Visual LISP, vit thnh chng trnh nh mt tp tin ngun c phn m rng *.lsp Tn tp tun th theo qui c ca h iu hnh, thng khng qu 8 k t, gia cc k t khng c khong trng.

21

LP TRNH NG DNG

b) Ti v chy chng trnh ng dng AutoLisp T VLISP: Tools\ Load Text in Editor T AutoCad: Tool\ Load Application hoc trn dng lnh Command: ap AutoCad t ng ti ngay t khi khi ng hoc m bn v c 2 cch: t tn tp l ACAD.LSP v t trong th mc Support ca AutoCad Khi ti file ln u s dng Startup Suite\ Contents v chn ng dn cho file

c) Cc hm trong AutoLisp AutoCad nhn v x l cc lnh trong hm ca AutoLisp theo c php sau: Tn hm do ngi dng nh ngha gm cc ch ci v con s tr cc k t c bit: nh: ? < > , . * & ^ % $ # @ ! ~ \ | { } [ ] ..., tn hm khng nn qu di v phi d qun l. Hm v cu lnh ca AutoLisp phi c t trong cp du ngoc n, bt u bng ( v kt thc bng ) Hm c vit t tri qua phi theo kiu Ba-lan, ngha l phn t u tin sau du m ngoc phi l tn hm (c sn hay do ngi lp trnh t nh ngha) hay ton t. Cc phn t ng sau l cc tham s cn thit thc hin hm hay ton t . Phn cch gia tn hm (hay ton t) vi cc tham s, gia cc tham s vi nhau phi c t nht mt du cch ( du Space). Mt cu lnh c th vit trn nhiu dng. Cc dng ch c th vit tht vo tu theo cu trc on lnh cho d hiu. Khng phn bit ch hoa v ch thng, thng th tn hm nn vit bng ch thng, tn cc lnh v cc bin h thng ca AutoCad vit bng ch hoa cho d c v chng trnh sng sa hn. Bt k mt hm no cng tr v mt gi tr no , nu khng c gi tr tr v tr s mc nh l nil. Li ch thch ghi trong chng trnh AutoLisp c ghi sau du ; v khng c thc thi trong chng trnh.

d) Cc bin trong AutoLisp Cc bin ca chng trnh AutoLisp hot ng tng t nh cc bin ca chng trnh khc. Tn bin gm cc ch ci v cc con s (tr cc k t c bit: nh: ? < > , . * & ^ % $ # @ ! ~ \ | { } [ ] ...), nu ch s ng u th tip sau phi l ch ci trnh nhm vi cc hng s. Tn bin khng nn qu di Tn bin khng phn bit ch hoa v ch thng.

22

LP TRNH NG DNG

C 2 loi bin: + Bin chung: l bin tn ti trong sut qu trnh lm vic ca AutoCad. kim tra gi tr cu bin trong dm Command ca AutoCad g !ten_bin. + Bin ring: L bin ch tn ti bn trong mt hm. Kt thc hm bin ny nhn gi tr Nil

Ch : Cc bin tham gia vo cc biu thc phi c gn gi tr hoc nh ngha nu khng ng dng s b li.

23

LP TRNH NG DNG

II> CC KIU D LIU C BN TRONG AutoLISP 1. Kiu danh sch: (list) y l kiu c trng ca ngn ng Lisp bao gm nhm cc gi tr ring l gm cc bin, cc hng s, cc hm... cch nhau bng khong trng nm trong du ngoc n. Danh sch c chia lm 3 loi chnh: Biu thc (expression list): Cha tn hm v cc tham s ca hm To im (Point Coordinate List): C hm Quote hoc du pha trc. y l trng hp c bit ca danh sch kho d liu, trong thng tin lu tr l to im. Kho d liu (Data Storage List): C hm Quote hoc du pha trc c th cha bt k kiu d liu no.

K hiu hon tr ca AutoLisp: LIST V d: to ca 1 im c khai bo di dng danh sch: (1.0 1.0 1.0) hoc (list 1.0 1.0 1.0) 2. Kiu s: 2.1. Kiu s nguyn

Kiu s nguyn l s nguyn thng thng trong ton hc. Trong AutoLisp gii hn ca s nguyn t: -32768 n +32767 Cc php tnh trn s nguyn cho kt qu l mt s nguyn, nu l php chia cho kt qu l mt s nguyn, phn d nu c s b ct b. V d: (/ 5 2) cho kt qu l 2

K hiu hon tr ca AutoLisp: INT Kiu s thc

2.2. -

Kiu s thc trong AutoLisp c chnh xc n 14 ch s sau du phy thp phn Cc s thc c th biu din theo dng ch thch khoa hc, qua mt s e hoc E c theo sau bi s m ca con s . K hiu hon tr ca AutoLisp: REAL

3. Kiu chui: Chui k t l tp hp cc k t bt k t trong du ngoc kp . Trong AutoLisp chui di khng qu 132 k t K hiu hon tr ca AutoLisp: STR

24

LP TRNH NG DNG

4. Kiu i tng v nhm i tng 4.1. Kiu i tng

Mi i tng c v trong AutoCad u c qun l theo tn (ENAME Entity Name). Mi tn i tng s lu tr ton b thng tin v i tng . K hiu hon tr ca AutoLisp: ENAME Nhm i tng

4.2. -

Nhm i tng (AutoCad selection set) l kiu c trng cho tp hp cha cc ENAME ca cc i tng c la chn. Ta c th ly ENAME ca mt i tng trong tp hp cc i tng c chn K hiu hon tr ca AutoLisp: PICKSET

5. S Pi v Nil S Pi trong ton hc trong AutoLisp c k hiu l pi v nhn gi tr khng i l 3.1415926. Pi tham gia vo cc biu thc ton hc v l s o gc bng Radian Nil l k hiu ch ra rng bin hay hm khng c gi tr hoc biu thc lgc nhn gi tr khng ng.

25

LP TRNH NG DNG

III> CC HM CHUN CA AutoLISP 1. Php gn a. Hm (setq...): Chc nng: Gn gi tr cho 1 bin C php: (setq b1 gt1 [b2 gt2] ...) Gii thch: Gn gt1 cho bin b1, gt2 cho bin b2 ... Mi bin nhn mt gi tr vit sau n Gi tr c th l d liu, mt bin khc hoc mt biu thc xc nh trc xo mt bin ra khi b nh: (setq bin Nil) AutoCad thc hin lnh ca AutoLisp m khng hin th cc dng lnh hin trn mn hnh ta gn gi tr 0 cho bin h thng CMDECHO bng lnh: (setq cmdecho 0) b. Hm (setvar...): Chc nng: Gn gi tr cho 1 bin h thng. C php: (setvar varname value) Gii thch: varname: Tn bin h thng value: Gi tr cn gn VD: (setvar FILLETRAD 10.00) ---> 10.00 c. Hm (set...): Chc nng: Gn tn bin cho 1 bin C php: Gii thch: Gn tn bin2 cho bin1 Mi khi ly gi tr ca bin1 th thc cht l ly gi tr ca bin2 VD: (setq a 10.00) (set b a) ---> b = 10.00 (set bin1 bin2)

26

LP TRNH NG DNG

2. Cc hm chuyn lnh t AutoLisp sang AutoCad a. Hm (Load ...) Chc nng: Gi mt chng trnh ng dng vo AutoCad C php: (Load Tn_tp) Gii thch: Tn_tp: l tn tp tin c phn m rng *.LSP, .ARX, .ADS hoc .EXE Nu chng trnh t ngoi th mc lm vic ca AutoCad th phi ch r ng dn ca tp tin b. Hm (Command ...) Chc nng: Thc hin lnh ca AutoCad C php: (Command Tn_lnh chn]...) Gii thch: Tn_lnh: l tn cc lnh ca AutoCad [cc p ng li nhc] v [cc tu chn]: Tun theo cc lnh ca AutoCad Nu Tn_lnh = _Tn_lnh hoc _.Tn_lnh Autocad s truy cp cc ga tr trong bng s liu ca lnh thc thi trong AutoCad VD: (Command CIRCLE (100.00 100.00) 10.00) ---> V ng trn tm c to (100.00, 100.00) c bn knh 10.00 3. Cc hm nhp liu t ngi dng Cc hm sau s tm dng chng trnh yu cu ngi dng nhp d liu vo t bn phm hoc chut a. Hm (getpoint ...) Chc nng: Ch ngi dng nhp to mt dim C php: (getpoint [point] [prompt]) [cc p ng li nhc] [cc tu

27

LP TRNH NG DNG

Gii thch: point: Nu c, cho bng 1 danh sch im , l im th nht, cn im ngi dng nhp vo s l im th 2. im th 2 c th cho bng to tng i. [prompt]: Nu c, l dng nhc hoc gii thch v d liu s nhp. Dng nhc phi c t trong ngoc kp VD: (setq pt1 (getpoint Cho tam duong tron:)) Kt qu cho trn dng nhc: Cho tam duong tron: b. Hm (getdist ...) Chc nng: Ch ngi dng nhp vo: Mt s thc l mt khong cch To ca 1 hoc 2 im

Nu nhp to im, AutoLisp hon tr khong cch gia hai im C php: (getdist [point] [prompt]) Gii thch: point: ging nh getpoint [prompt]: l dng nhc hoc gii thch v d liu s nhp VD: (setq r1 (getdist Cho ban kinh duong tron:)) Kt qu cho trn dng nhc: Cho tam duong tron: - Nhp vo mt s thc dng hoc Nhp to mt im, dng nhc xut hin:

Second point: Tip tc nhp vo im th 2 ly khong cch gi 2 im c. Hm (getangle ...) Chc nng: Ch ngi dng nhp vo: Mt s thc l s o bng ca gc hoc cung trn To ca 1 hoc 2 im

Nu nhp to im, AutoLisp hon tr gc nghing gia on thng ni hai im so vi phng nm ngang

28

LP TRNH NG DNG

Kt qu tr v: REAL ( s o l Radian) C php: (getangle [point] [prompt]) Gii thch: point: ging nh getpoint [prompt]: l dng nhc hoc gii thch v d liu s nhp VD: (setq a1 (getangle Cho goc nghieng cua duong thang:)) Kt qu cho trn dng nhc ch ngi dng nhp s liu: Cho goc nghieng cua duong thang: d. Hm (getint ...) Chc nng: Ch ngi dng nhp vo mt s nguyn Kt qu: INT C php: (getint [prompt]) Gii thch: [prompt]: l dng nhc hoc gii thch v d liu s nhp e. Hm (getreal ...) Chc nng: Ch ngi dng nhp vo mt s thc Kt qu: REAL C php: (getreal [prompt]) Gii thch: [prompt]: l dng nhc hoc gii thch v d liu s nhp f. Hm (iniget...) Chc nng: Kim sot cc kiu gi tr nhp vo t ngi dng cho cc hm nhp s liu h getxxx. Hm ny, nu dng phi t trc cc hm nhp s liu h getxxx cn khng ch C php: (iniget m_s [Chui_nh_dng])

29

LP TRNH NG DNG

Gii thch: m_s: Gi tr m s kim sot cch nhp s liu vo. Gi tr m_s v cc hm chu tc ng cho trong bng sau: M s 0 Chc nng kim sot Hm chu tc ng

Bnh thng tr v Nil nu g ENTER khi Ton b cc hm getxxx tr cha nhp s liu hm getstr getint, getreal, Khng cho php ngi dng g ENTER getangle, khi cha nhp s liu getkword... Khng cho php nhp s 0 Khng cho php nhp s m getint, getreal, getangle, getpoint, getint, getreal, getdist, getdist, getpoint, getdist,

2 4 8

Cho php nhp to im nm ngoi getpoint, getcorner LIMITS ca bn v

Nu m s c gi tr tng ca mt gi tr cho trong bng th chc nng kim sot s l tng cc chc nng. Chui_dnh_dng: L mt chui k t dng lm t kho h tr cho cc hm getxxx c cc tu chn khi nhp s liu + Mi t kho cch nhau mt du trng + Cc ch ci vit hoa vit lin nhau trong t kho s l du hiu ca t kho. Khi nhp s liu, ngi dng g theo cc ch ci vit hoa la chn + Nu tt c cc ch ci trong t kho u vit hoa th cc t kho cch nhau bng du phy (,) VD1: (iniget 1) (setq a1 (getdist Cho ban kinh:)) Kt qu cho trn dng nhc ch ngi dng nhp s liu: Cho ban kinh: Nu ngi dng g ENTER m khng nhp g c s c dng thng bo: Requires numeric distance or two poionts Cho ban kinh: i ngi dng nhp liu chng trnh mi tip tc

30

LP TRNH NG DNG

VD2: (iniget 1 DAi ROng) (setq d1 (getdist DAi/ROng/<Cho duong cheo>:)) Kt qu cho trn dng nhc ch ngi dng nhp s liu: DAi/ROng/<Cho duong cheo>: Ngi dng c th nhp s thc hoc cc ch ci DA hoc RO g. Hm (getkword ...) Chc nng: Ch ngi dng nhp vo mt k t hoc mt chui k t lin nhau khng c du trng Kt qu tr v: STR C php: (getkword [prompt]) Gii thch: Hm ny lun t sau hm initget, nu chui nhp vo khng trng vi t kho trong hm initget trc , getkword yu cu nhp li Hm ny thng p dng khi ngi dng nhp vo cc la chn [prompt]: l dng nhc nn ch r cc t kho ngi dng d nhp d liu. VD: (initget VUong DAgiac:) (getkword Nhap cac lua chon: VUong/DAgiac:) Kt qu cho trn dng nhc: Nhap cac lua chon: VUong/DAgiac: Ta ch cn nhp cc ch ci: VU kt qu tr v: vuong DA kt qu tr v: dagiac h. Hm (getstring ...) Chc nng: Ch ngi dng nhp vo mt chui k t . Nu chui k t di hn 132 k t, hm ch ly 132 k t Kt qu: STR C php: (getstring [string] [prompt])

31

LP TRNH NG DNG

Gii thch: [string]: Nu khng c hoc nhn gi tr Nil, khng c nhp du trng, nu g du trng tng ng g ENTER kt thc nhp. Nu c gi tr khc Nil cho php nhp c du trng. Kt thc nhp phi g ENTER [prompt]: l dng nhc hoc gii thch v d liu s nhp i. Hm (getvar ...) Chc nng: Ly gi tr hin hnh ca bin h thng trong AutoCad C php: (getvar varname) Gii thch: varname: Tn bin h thng VD: (getvar DIMLFAC 10) ---> cho gi tr bin DIMLFAC = 10 4. Cc hm ton hc 4.1. Cc php tnh

Chc nng: Thc hin cc php tnh s hc thng thng C php: (php_ton tham_s1 [tham_s2]...) Gii thch: php_ton: l cc php tnh ton s hc thng thng Php cng: Php tr: Php nhn: Php chia: Php tng thm 1: Php gim i 1: + * / 1+ 1-

tham_s1: Trong php tr v chia th tham_s1 l s b tr hoc b chia tham_s2...: Trong php tr v chia th tham_s2... l s tr hoc s chia Trong php tng thm 1 hoc gim i 1 th ch c 1 tham s

32

LP TRNH NG DNG

Ch : Tham s c th l hng hoc biu thc Kt qu tnh ph thuc ch yu vo kiu ca tham s tham gia php tnh. 4.2. Cc php so snh

Chc nng: Thc hin cc php so snh trong cc biu thc logc C php: (php_so_snh tham_s1 [tham_s2]...) Gii thch: php_so_snh: Bao gm: Bng: Khng bng (khc): Ln hn: Ln hn hoc bng: Nh hn: Nh hn hoc bng: V: Hoc: Ph nh: = /= > >= < <= and or not

tham_s1, tham_s2: l cc i tng so snh Ch : Tham s c th l hng s, bin s hoc biu thc Kt qu tnh ph thuc ch yu vo kiu ca tham s tham gia php tnh. Ring i vi thc, my tnh coi s 0 ch l xp x 0 nn khi dng du = so snh vi s 0 c th tr gi tr Nil. Trong trng hp ny nn dng (equal...) so snh

33

LP TRNH NG DNG

4.3.

Cc hm so snh

a. Hm (eq ...) Chc nng: Thc hin so snh xem hai tham s c thc s bng nhau hay khng Kt qu: cho T (ng) hoc Nil (sai) C php: (eq tham_s1 tham_s2) Gii thch: Kt qu ng khi tham_s1 ging ht tham_s2 (cng l kiu tham s, cng l s...) b. Hm (equal ...) Chc nng: Thc hin so snh xem hai tham s c thc s bng nhau hay khng theo tiu chun l chnh xc km theo Kt qu: cho T (ng) hoc Nil (sai) C php: (equal tham_s1 tham_s2 [_chnh_xc]) Gii thch: Kt qu ng khi tham_s1 bng tham_s2 vi sai s l _chnh_xc (nu c) c. Hm (max ...) Chc nng: Tm gi tr ln nht trong mt dy cc tham s Kt qu: tr v gi tr ln nht C php: (max tham_s1 tham_s2 [tham_s3]...) d. Hm (min ...) Chc nng: Tm gi tr nh nht trong mt dy cc tham s Kt qu: tr v gi tr nh nht C php: (min tham_s1 tham_s2 [tham_s3]...)

34

LP TRNH NG DNG

e. Hm (gcd ...) Chc nng: Tm c s chung ln nht trong mt dy cc tham s kiu s nguyn C php: (gcd tham_s1 tham_s2 [tham_s3]...) Ch : tham_s1 tham_s2 [tham_s3]...: Phi l kiu s nguyn f. Hm (rem ...) Chc nng: Tm phn d trong php chia 2 tham s. Kt qu: tr v s d C php: (rem tham_s1 tham_s2) Gii thch: tham_s1: S b chia tham_s2: S chia 4.4. Cc hm i s

C php: (sqrt number): Ly cn bc 2 ca s thc dng number (expt c_s s_m): Ly lu tha bc s_m ca s thc c_s (exp s_m): Ly lu tha bc s_m ca c s e (abs number): Ly gi tr tuyt i ca mt s number (log number): Ly logarit c s e ca mt s number 4.5. Cc hm lng gic

C php: (sin angle) (cos angle) (atan mumber1 [number2]) Ch : angle: L s o gc ly theo radian mumber1 [number2]: L s thc Kt qu ca hm atan l gc c s o l radian

35

LP TRNH NG DNG

4.6.

Cc hm kim sot dng s

e. Hm (fix ...) Chc nng: Tr v phn nguyn ca mt s. Phn s nguyn ny khng c lm trn C php: (fix number) Ch : Hm ny c s dng nh mt b lc d liu. D liu l s nguyn hay s thc s c lc thnh s nguyn trc khi c gn cho tham s Ngoi ra ta c th s dng hm ny ly phn thp phn (s dng kt hp vi php tr) b. Hm (fload ...) Chc nng: Chuyn mt s c kiu nguyn hoc thc sang kiu s thc C php: (fload number) 5. Cc hm to cu trc iu khin a. Hm (if ...) Chc nng: Ra iu lin thc hin mt s lnh C php: (if testexpr thenexpr [elseexpr]) Gii thch: testexpr: L biu thc kim tra iu kin thenexpr: Biu thc lnh c thc hin nu biu thc testexpr nhn gi tr T elseexpr: Biu thc lnh c thc hin nu biu thc testexpr nhn gi Nil. Nu khng c biu thc ny, hm khng thc hin v tr v gi tr nil b. Hm (while ...) Chc nng: Thc hin cc biu thc, lnh trong hm mt s ln lp c iu kin C php: (while testexpr expr)

36

LP TRNH NG DNG

Gii thch: testexpr: L biu thc kim tra, khi no testexpr nhn gi tr nil, vng lp chng trnh ngng thc hin expr: Biu thc, lnh cn thc hin V d: (defun C:vdt() (setq n 1) (setq pt1 (list 0 0)) (while (<= n 10)

(setq pt2 (list n (+ n 0.5))) (setq n (1+ n)) (command "LINE" pt1 pt2 "") ) (command "ZOOM" "e") ) c. Hm (repeat ...) Chc nng: Thc hin cc biu thc, lnh trong hm mt s ln lp nht nh C php: (repeat int [expr]...) Gii thch: int: L s nguyn ch ln lp expr: Biu thc, lnh cn thc hin V d: (defun C:vdt() (setq n 1) (setq pt1 (list 0 0)) (repeat 10 (setq pt2 (list n (+ n 0.5))) (setq n (1+ n)) (command "LINE" pt1 pt2 "") ) (command "ZOOM" "e")

37

LP TRNH NG DNG

) d. Hm (progn ...) Chc nng: Tp hp cc biu thc thnh mt biu thc v bt cc biu thc ny thc hin theo mt iu khin chung C php: (progn [expr]...) Gii thch: expr: Biu thc, lnh cn thc hin 6. Cc hm x l danh sch a. Hm (quote ...) hoc (...) Chc nng: Tr ra 1 biu thc, kiu l kiu ca biu thc C php: (quote expr) hoc (expr) Gii thch: expr: Biu thc. Nu biu thc l s c th to danh sch im, nu l bin mc d gn gi tr bng s cng khng to c danh sch im b. Hm (list ...) Chc nng: To ra mt danh sch C php: (list expr) Gii thch: expr: Biu thc, t nht c mt tham s. Biu thc l bin hay l s cng to c danh sch im c. Hm (car ...) Chc nng: Hon tr phn u tin ca danh sch. Kt qu l mt gi tr, kiu l kiu ca thnh phn . C php: (car list) Gii thch: list: L mt danh sch

38

LP TRNH NG DNG

d. Hm (cadr ...) Chc nng: Hon tr phn phn t th 2 ca danh sch. Kt qu l mt gi tr, kiu l kiu ca thnh phn . C php: (cadr list) e. Hm (caddr ...) Chc nng: Hon tr phn phn t th 3 ca danh sch. Kt qu l mt gi tr, kiu l kiu ca thnh phn . C php: (caddr list) f. Hm (last ...) Chc nng: Hon tr phn phn t cui cng ca danh sch. Kt qu l mt gi tr, kiu l kiu ca thnh phn . C php: (last list) g. Hm (nth ...) Chc nng: Hon tr phn phn t th int ca danh sch. Kt qu l mt gi tr, kiu l kiu ca thnh phn . Th t bt u 0, 1, 2, ... C php: (nth int list) Gii thch: int: L th t ca phn t cn ly gi tr list: L mt danh sch h. Hm (cdr ...) Chc nng: Hon tr danh sch khng c phn t u C php: (cdr list) i. Hm (reverse ...) Chc nng: Hon tr danh sch ngc vi danh sch ban u C php: (reverse list)
39

LP TRNH NG DNG

k. Hm (length ...) Chc nng: Hon tr s thnh phn trong danh sch C php: (length list) m. Hm (append ...) Chc nng: Gp cc danh sch thnh phn thnh mt danh sch n C php: (append list1 list2 ...) n. Hm (member ...) Chc nng: To mt danh sch mi t mt danh sch c theo mt thnh vin cho trc, danh sch mi c to ra c cc thnh vin l cch thnh vin ca danh sch gc bt u t thnh vin expr cho n thnh vin cui C php: (member expr list) Gii thch: expr: L mt trong cc phn t ca mt danh sch list: L mt danh sch gc o. Hm (assoc ...) Chc nng: Tr v mt danh sch con trong danh sch phc hp C php: (assoc item alist) Gii thch: item: L phn t u tin ca danh sch con tr v, nu khng tm thy danh sch con no cha phn t u tin l item, hm s tr gi tr nil alist: Phi l mt danh sch phc hp v d: (setq alist ((1 ONE) (2 TWO) (3 THREE)))

(assoc 1 alist) --->(1 ONE) (assoc 2 alist) --->(2 TWO)

40

LP TRNH NG DNG

p. Hm (subst ...) Chc nng: Thay th cc thnh vin ca mt danh sch C php: (subst newitem olditem list) Gii thch: newitem: L thnh vin mi oldwitem: L thnh vin c list: Danh sch gc v d: (setq alist ((1 ONE) (2 TWO) (3 THREE))) 7. Cc hm nhp xut d liu a. Hm (promt ...) Chc nng: Xut mt k t ra mn hnh (dng command) C php: (promt msg) Gii thch: msg: Chui k t cn xut ra nh mt dng thng bo b. Hm (open ...) Chc nng: M mt tp tin d liu trn a C php: (open filename mode) Gii thch: filename: Tn tp tin (file) cha d liu. Phn m rng ca tp tin l *.txt hoc bt k do ngi dng t Nu tp tin ny khng nm trong th mc lm vic ca Autocad phi cho ng dn mode: M ca tp tin r : c tp tin ang c trn a w : Ghi vo tp tin, mi ln ghi to mt tp tin mi a : Ghi tip vo tp tin ang tn ti hoc to tp tin mi ghi nu cha c tp tin trn a

41

LP TRNH NG DNG

c. Hm (close ...) Chc nng: ng tp tin d liu ang m bng hm open gii phng b nh cho cc chng trnh khc lm vic C php: (close filename) Gii thch: filename: Tn tp tin cha d liu c m bng hm open d. Hm (findfile ...) Chc nng: Tm tp tin d liu trn a, nu thy AutoLisp s tr v tn tp tin km theo ng dn C php: (findfile filename) e. Hm (read-line ...) Chc nng: c mt dng k t t bn phm hoc tp tin C php: (read-line [fp]) Gii thch: fp : Tn tp tin cha d liu va c m bng lnh open Nu c ghi fp hm s c mt tp tin ny v hon tr 1 chui k t Nu khng c hm s c mt chui k t c g vo t bn phm Mi ln gi hm (read-line...) mt dng d liu tip theo c c vo, khi no khng cn d liu th kt qu l nil f. Hm (read...) Chc nng: c mt chui k t v hon tr gi tr tham s ph hp vi kiu d liu nhp vo C php: (read str) Gii thch: str : Chui k t hoc mt bin kiu chui

42

LP TRNH NG DNG

g. Hm (read-char...) Chc nng: c mt k t t bn phm hoc t tp, kt qu tr v l mt s nguyn m ASCII ca k t va c C php: (read-char [fr]) Gii thch: [fr] : Tn tp tin cha d liu c m bng lnh open, nu khng c my ch ngi dng nhp vo t bn phm h. Hm (write-char...) Chc nng: Ghi mt k t ra vng dng lnh trn mn hnh hoc vo tp tin C php: (write-char n [fr]) Gii thch: n : S nguyn m ASCII ca k t ghi vo [fr] : Tn tp tin cha d liu c m bng lnh open, nu khng c my ch ngi dng nhp vo t bn phm i. Hm (write-line...) Chc nng: Ghi mt chui k t ra vng dng lnh trn mn hnh hoc vo tp C php: (write-line str [fr]) Gii thch: str : chui [fr] : Tn tp tin cha d liu c m bng lnh open, nu khng c my ch ngi dng nhp vo t bn phm k. Cc hm prin1, princ, print Chc nng: In kt qu ra vng dng lnh trn mn hnh hoc vo tp C php: (prin1 expr [fr]) (princ expr [fr]) (print expr [fr])

43

LP TRNH NG DNG

Gii thch: expr : Biu thc [fr] : Tn tp tin cha d liu c m bng lnh open, nu khng c my ch ngi dng nhp vo t bn phm S khc nhau gia cc hm: Cc k t iu khin nh: \n, \r... khng c tc dng i vi hm prin1 m c tc dng i vi hm princ Hm print lun ghi kt qu xung dng mi v sau kt qu c mt du trng

8. Cc hm kim tra d liu a. Hm (type...) Chc nng: Xc nh kiu d liu C php: (type item) Gii thch: item : L bin hay biu thc b. Hm (atom...) Chc nng: Nu tham s khng phi l danh sch tr ra T, ngc li Nil C php: (atom item) Gii thch: item : L tham s c. Hm (listp...) Chc nng: Nu tham s l danh sch tr ra T, cc kiu cn li Nil C php: (listp item) Gii thch: item : L tham s

44

LP TRNH NG DNG

d. Hm (numberp...) Chc nng: Nu tham s l s tr ra T, cc kiu cn li Nil C php: (numberp item) Gii thch: item : L tham s e. Hm (nminusp...) Chc nng: Nu tham s l s m tr ra T, cc trng hp khc Nil C php: (nminusp number) f. Hm (zerop...) Chc nng: Nu tham s l s 0 tr ra T, cc trng hp khc Nil C php: (zerop number) 9. Cc hm chuyn i kiu d liu a. Hm (angtof...) Chc nng: Chuyn i chui k t (cha cc ch s) thnh s thc dng cho gc v tr v s o gc bng radian C php: (angtof str [mode]) Gii thch: str : L chui cha ch s mode: L s nguyn xc nh dng n v nhp vo, nu khng c s tun theo cc ci t ca lnh units Mode nhn cc gi tr sau: 0 : Dng thp phn () 1 : Dng / pht/ giy 2 : Dng Grads 3 : Dng Radian 4 : Dng trc c c km theo ch hng b. Hm (angtos...)
45

LP TRNH NG DNG

Chc nng: Chuyn i s o gc thnh chui k t (cha cc ch s) C php: (angtos angle [mode] [precision]]) Gii thch: angle : L s o gc bng radian mode : L s nguyn xc nh dng n v xut ra, nu khng c s tun theo cc ci t ca lnh UNITS. Cc gi tr ca mode tng t nh hm (angtof...) precision : L chnh xc (s ch s sau du phy thp phn) c. Hm (atof...) Chc nng: Chuyn i chui k t thnh s thc C php: (atof str) Gii thch: str : L chui k t (cha cc ch s) d. Hm (atoi...) Chc nng: Chuyn i chui k t thnh s nguyn C php: (atoi str) Gii thch: str : L chui k t (cha cc ch s) e. Hm (itoa...) Chc nng: Chuyn i s nguyn thnh chui k t C php: (itoa int) Gii thch: int : L s nguyn, nu cho kiu khc hm s bo li

46

LP TRNH NG DNG

f. Hm (rtos...) Chc nng: Chuyn i s thc thnh chui k t C php: (rtos number [mode [precision]]) Gii thch: number : L mt s mode: L m iu khin dng xut ra chui k t Mode nhn cc gi tr sau: 1 : Dng khoa hc 2 : Dng thp phn 3 : Dng k thut 4 : Dng kin trc 5 : Dng hu t (phn s) precision : L chnh xc (s ch s sau du phy thp phn) g. Hm (distof...) Chc nng: Chuyn i chui k t (cha cc ch s) thnh s thc C php: (distof str [mode]) Gii thch: str : L chui k t cha cc ch s mode: L m iu khin nhp vo ca s thc nhn cc gi tr sau: 1 : Dng khoa hc 2 : Dng thp phn 3 : Dng k thut 4 : Dng kin trc 5 : Dng hu t (phn s) h. Hm (fix...) Chc nng: Chuyn i s thc thnh s nguyn, ct b phn thp phn C php: (fix number)

47

LP TRNH NG DNG

Gii thch: number : L mt s thc i. Hm (fload...) Chc nng: Chuyn i s thnh s thc C php: (fload number) Gii thch: number : L mt s nguyn hoc s thc 10. Cc hm x l chui k t Trong AutoLisp chui l cc k t c vit trong ngoc kp . Du \ km theo cc ch ci c tc dng iu khin: Cch vit \\ \n \t \e \ \r a. Hm (strcat...) Chc nng: Ni cc chui thnh phn thnh mt chui chung C php: (strcat str1 str2 [str3]...) Gii thch: str1, str2, str3... : L cc chui thnh phn cn c ghp li b. Hm (strcase...) Chc nng: Chuyn chui ra ch in hoa hoc ch thng C php: (strcase str which) : : : : : : ngha \ Xung dng Tab ESC ENTER

48

LP TRNH NG DNG

Gii thch: str: L chui cn chuyn i which: Nu khng c, tt c chui bin thnh ch in hoa, nu l ch T tt c chui tr thnh ch thng c. Hm (strlen...) Chc nng: m s k t trong chui C php: (strlen str) Gii thch: str: L chui cn m d. Hm (substr...) Chc nng: Trch mt phn ca chui k t thnh mt chui khc C php: (substr str start [length]) Gii thch: str: L chui cn trch start: V tr k t trong chui cn trch ra length: Chiu di ca chui mi (s k t), nu khng c th chui mi bt u t v tr start cho n ht 11. Cc hm x l chui k t 11.1. Cc hm thao tc vi cc i tng c lp a. Hm (entlast) Chc nng: Chn i tng v cui cng trong bn v v tr v m ENAME ca n C php: (entlast) Gii thch: Hm ny khng c i s b. Hm (entnext...) Chc nng: Chn i tng v u tin trong bn v hoc i tng tip sau mt i tng khc v tr v m ENAME ca n C php: (entnext [ename])
49

LP TRNH NG DNG

Gii thch: ename: Nu khng c hon tr thc th u tin ca bn v Nu c hon tr tn thc th tip sau thc th c tn l ename V d: (setq e1 (entnext)) ;Gn tn thc th u tin cho e1

(setq e2 (entnext e1)) ;Gn tn thc th tip sau e1 cho e2 c. Hm (entsel...) Chc nng: Ch ngi dng chn i tng v tr v m ENAME ca n C php: (entsel [promt]) Gii thch: promt: Li nhc, nu khng c dng nhc s l : Select object: V d: (setq e1 (entsel Chon doi tuong thu nhat:)) (setq e2 (entsel Chon doi tuong thu hai:)) (command EXTEND e1 e2 ) d. Hm (nentselp...) Chc nng: Chng trnh t ng chn i tng i qua mt im cho trc C php: (nentselp [promt] [pt]) Gii thch: promt: Li nhc pt: im m i tng i qua e. Hm (entdel...) Chc nng: Xo mt i tng trong bn v hoc khi phc li i tng va b xo C php: (entdel ename) Gii thch: ename: M tn i tng, hm ny ch dng cho thc th chnh, tn thc th do hm (entlast), (entnext)

50

LP TRNH NG DNG

f. Hm (entget...) Chc nng: Hon tr danh sch lit k cc thng tin v i tng c trong bn v c gi C php: (entget ename [applist]) Gii thch: ename: M tn i tng applist: Nu c, danh sch cc chui k t cha cc thng tin m rng c lin quan s c gi ra v hon tr. g. Hm (entmod...) Chc nng: Cp nht li thng tin ca i tng b thay i bng cc hm v v ra i tng vi cc thng tin cp nht. Hm ny thng c dng vi hm (entget) C php: (entmod entlist) Gii thch: entlist: L danh sch cha thng tin ca i tng ly t hm (entget) h. Hm (entmake...) Chc nng: To mt thc th mi bng cch xy dng mt danh sch cc c d liu ca n, khng cn qua cc lnh ca AutoCad C php: (entmake edata) Gii thch: edata: L danh sch cc c s d liu ca i tng cn to. V d: V ng trn (entmake ((0 . CIRCLE) ; Kiu i tng ng trn (62 . 1) ; Mu

(10 4.0 4.0 0.0) ; Tm (4.0 4.0 0.0) (40 . 1.0) (40 . 1.0) ) ) ; Bn knh 1.0

51

LP TRNH NG DNG

11.2. Cc hm thao tc vi bng cc i tng Bng cc thc th l tp hp cc thc th trong mt khi ho chun ca AutoCad. Cc thc th ny khng thy hin hu trn bn v m nm trong cc bng d liu. Cc bng d liu bao gm: LAYER, BLOCK, LTYPE, STYLE, DIMSTYLE, UCS, VPORT... Mi bng i tng ni trn c 3 d liu chnh: + Tn bng nh: LAYER, BLOCK... + Tn i tng trong bng: Lp 0, khi A1 + D liu ca i tng: mu sc, ng nt.... a. Hm (tblnext...) Chc nng: Tm bng d liu v tr ra d liu ca bng C php: (tblnext tblname [rewind]) Gii thch: tblname: Chui k t cha tn bng rewind: Nu c gi tr khc nil, s tr v tn v cc d liu ca bng cc i tng u tin m AutoCad tm thy.Nu khng c hoc nhn gi tr nil, s tr v tn v cc d liu ca bng cc i tng tip theo m AutoCad tm thy b. Hm (tblsearch...) Chc nng: Tm thnh phn c ch nh ca bng i tng v tr ra d liu ca thnh phn C php: (tblsearch tblname symbol [setnext]) Gii thch: tblname: Chui k t cha tn bng symbol: Tn thnh phn ca bng Nu tm thy, s tr v tn v cc d liu ca tn gi ny Nu khng tm thy s tr v nil setnext: L lc chn dng khi c mt lnh tblnext tip sau lnh ny

52

LP TRNH NG DNG

11.3. Cc hm thao tc vi nhm cc i tng Trong AutoCad ngi ta s dung ch vit tt ss (Selection Set) gi tn nhm i tng (Object) hoc nhm thc th (entities) c chn sau dng nhc Select object: ca AutoCad. Kiu ca nhm l PICKSET. C th coi nhm i tng l mt mng cc phn t, mi phn t l tn mt i tng a. Hm (ssget...) Chc nng: Chn cc i tng trong bn v v tr v nhm i tng chn. Nu khng c i tng no hm tr kt qu l nil C php: (ssget [mode] [pt1 [pt2]] [pt-list] [filter-list]) Gii thch: mode: Chui k t cha cc m iu khin vic la chn, nhn cc m sau: L : Last - i tng v cui cng cn tn ti trong bn v c chn P: Previous Tp hp i tng va chn trc W : Windows Cc i tng nm trong ca s chn C : Cross Cc i tng nm trong v ct qua ca s chn X : Tt cc i tng trong bn v c chn WP : Cc i tng nm trong mt a gic cho trc c chn WC : Cc i tng nm trong v ct qua mt a gic cho trc c chn pt1 pt2: Hai im l 2 nh i nhau ca mt ca s hnh ch nht dng cho chn i tng bng Crossing v windows pt-list: Cc im to thnh a gic dng cho la chn WP, WC filter-list: L danh sch cha cc tiu chun lc cho vic chn nhm cc i tng b. Hm (ssadd...) Chc nng: Thm mt i tng vo tp i tng C php: (ssadd [ename] [ss])

53

LP TRNH NG DNG

Gii thch: ename: Chui k t cha tn m i tng cn thm vo, nu i tng ename c trong tp i tng, khng thm vo c na ss: Tn tp i tng Nu c 2 tham s ny khng c, s tr ra mt tp rng Nu ename khc nil tp i tng l nil, hm s tr ra mt tp i tng ch c mt phn t l ename cho Nu c 2 u khc nil, hm s tr ra tp i tng c thm phn t ename va thm vo c. Hm (sslength...) Chc nng: Tr ra s nguyn l s cc i tng c trong tp cc i tng C php: (sslength ss) Gii thch: ss: Tn tp i tng c trong bn v d. Hm (ssdel...) Chc nng: Loi b mt i tng ra khi tp i tng C php: (ssdel ename ss) Gii thch: ename: Chui k t cha m tn i tng cn loi b. Nu i ename ny c trong tp i tng, th n b loi b, nu khng c tr nguyn tp i tng ss: Tn tp i tng c trong bn v e. Hm (ssname...) Chc nng: Tr v ename ca mt i tng c trong tp cc i tng C php: (ssname ss index) Gii thch: ss: Tn tp i tng c trong bn v index: S th t ca cc i tng trong tp hp cc i tng c tnh t 0, 1, 2....

54

LP TRNH NG DNG

IV> HM DO NGI LP TRNH NH NGHA Cc hm ny tng t nh hm (Function) trong ngn ng lp trnh C v C++, th tc (Procedure) trong Pascal, hoc hm con (Subroutine) trong Fortran C php chung ca hm do ngi dng nh ngha: C php: (defun tn_hm (tham_s/ bin_s_ring) ...........................; Thn hm ...........................; Thn hm ) Hoc: (defun tn_hm () ...........................; Thn hm ...........................; Thn hm ) Gii thch: defun: Hm nh ngha ca AutoLisp Tn_hm: Do ngi lp trnh t, tn hm nn vit bng ch hoa v khng c khong trng Thm hm: l cc lnh x l ca AutoLisp. Mt hm c th triu gi nhiu hm khc Trong thn hm bao gm c cc tham s, bin_s_ring, bin_s_chung tham s: L mt hoc nhu bin hnh thc, cc bin ny chung cho c chng trnh, tham gia vo cc biu thc trong thn hm v c tn ti khi thot ra khi AutoCad Khi c triu gi, cc bin hnh thc ny c thay bng cc gi tr Trong hm c th khng c tham s bin_s_ring: Trong hm c th c mt hay nhiu bin s ring, c phn cch nhau bng du trng Cc bin s ny nhn gi tr hoc nh ngha v ch tn ti bn trong hm, khi ra khi hm, gi tr cc bin ny s c xo khi b nh bin_s_chung: Khi hm khng c c tham s ln bin ring, th cc bin s ca n mc nhin l bin chung

55

LP TRNH NG DNG

V d: a. V d v tham s: (defun VD1(x y) ...........................; Thn hm ...........................; Thn hm ) Hm ny c 2 tham s x v y. Hm c triu gi nh sau: (VD1 x y) b. V d v bin s ring: (defun VD2(/ x y) ...........................; Thn hm ...........................; Thn hm ) Hm ny c 2 bin s ring x v y. Hm c triu gi nh sau: (VD2) c. V d v bin s chung: (defun VD3() ...........................; Thn hm ...........................; Thn hm ) Hm ny khng c tham s v bin ring. Hm c triu gi nh sau: (VD3) d. Tn hm l mt lnh ca AutoCad: (defun C:VD4() ...........................; Thn hm ...........................; Thn hm ) Khi chng trnh AutoLisp cha hm trn c gi vo AutoCad th vd4 l mt lnh ca AutoCad, c th gi trn dng ln Command: vd4

56

LP TRNH NG DNG

1. Cc trng hp c bit ca tn hm: 1.1. Tn hm tr thnh mt lnh ca AutoCad (defun C:tn_hm(...) ...........................; Thn hm ...........................; Thn hm ) 1.2. Hm c thc hin ngay sau khi khi ng AutoCad (defun S::tn_hm(...) ...........................; Thn hm ...........................; Thn hm )

2. Mt s v d minh ho 2.1. To Layer

(defun C:TAOLOP() (command "-layer" "n" "dut" "l" "DASHED" "dut" "c" 3 "dut" "") (command "-layer" "n" "tam" "l" "CENTER" "tam" "c" 1 "tam" "") (command "Ltscale" 300) (command "ZOOM" "a") ); Kt thc hm Chng trnh khi chy trong AutoCad s to 2 lp c tn l dut v tam 2.2. V khung tn

(defun c:KBV(/ tyle loai KBV1 KBV2) (setq tyle (getreal "\Cho ty le ban ve : ")) (setq loai (getstring "\Cho kho giay in ban ve A0,A1,A2,A3,A4: <A3> ")) (setq KBV1 (getpoint "\Cho diem chen khung ban ve: ")) (if (= loai "a0") (setq KBV2 (list (+ (car KBV1) (* 1188.0 tyle)) (+ (cadr KBV1) (* 840.0 tyle)))) (if (= loai "a1") (progn (setq KBV2 (list (+ (car KBV1) (* 840.0 tyle)) (+ (cadr KBV1) (* 594.0 tyle)))))

57

LP TRNH NG DNG

(if (= loai "a2") (progn (setq KBV2 (list (+ (car KBV1) (* 560.0 tyle)) (+ (cadr KBV1) (* 418.0 tyle))))) (if (= loai "a4") (progn (setq KBV2 (list (+ (car KBV1) (* 285.0 tyle)) (+ (cadr KBV1) (* 198.0 tyle)))))

(if (= loai "a3") (setq KBV2 (list (+ (car KBV1) (* 396.0 tyle)) (+ (cadr KBV1) (* 285.0 tyle)))) ) ) ) ) ) (command "-layer" "n" "Dam" "l" "CONTINUOUS" "Dam" "c" 5 "Dam" "") (command "-layer" "s" "Dam" "") (command "Rectangle" KBV1 KBV2 ) ); Ht hm Chng trnh chy trong AutoCad s v kch thc khung bn v theo kh bn v m ngi dng yu cu 2.3. i mu ca i tng

(defun C:1() (prompt "_.change ") (princ "\n Change Colour to Red - 1") (setq sset (ssget)) (if (null sset) (progn (princ "\nERROR: Nothing selected.") (exit) ) ) (command "_.change" sset "" "P" "C" "1" "")
58

LP TRNH NG DNG

(princ) ); Ht chng trnh Chng trnh chy trong AutoCad s i mu ca i tng chn sang mu 2.4. i lp ca i tng (defun C:DAM() (prompt "_.change ") (princ "\n Change Layer Dam") (setq sset (ssget)) (if (null sset) (progn (princ "\nERROR: Nothing selected.") (exit) ) ) (command "_.change" sset "" "P" "LA" "Dam" "LT" "BYLAYER" "C" "BYLAYER" "") (princ) ); Ht chng trnh Chng trnh chy trong AutoCad s i lp hin hnh ca i tng sang lp dam 2.5. To underline cho mt nhm text c chn

(defun c:UU( / sset ssl temp ed old new ) (text_uu_ssget); Gi hm con (setq ssl (sslength sset)) (while (> ssl 0) (progn (setq temp (ssname sset (setq ssl (1- ssl)))) (setq ed (entget temp))

(setq old (cons 1 (DXF 1 ed)) new (cons 1 (strcat "%%u" (DXF 1 ed))) ed (subst new old ed) ) (entmod ed)
59

LP TRNH NG DNG

) (princ) )

);Ht hm chnh ;-----------------------------------------------------------(defun text_uu_ssget ( / ssl (setq sset (ssget)) (setq ssl (sslength sset) nsset (ssadd) ) nsset temp ed ); Hm con

(print ssl) (while (> ssl 0) (progn (setq temp (ssname sset (setq ssl (1- ssl)))) (setq ed (entget temp)) (if (= (DXF 0 ed) "TEXT") (ssadd temp nsset)) ) ) (setq ssl (sslength nsset) sset nsset ) (print ssl) (princ) (print) );Ht hm con

60

You might also like