Vous êtes sur la page 1sur 97
CHUONG 26: CAC VAN DE CO BAN CUA NGON NGU AUTOLISP AutoLISP Ii ngén ngit lip trinh 6 thé sif dung céc tinh nang, céc leah trong AutoCAD. AutoLISP dya trén eo sé ngon ngit lip tinh LISP - ngén ngir lp uinh ti we ip ta thy hign hau hét cdc thao tie cn thiét nhu soan thio, g@ roi chung trink, g voi AutoCAD ma khdng cdn théat ra khdi AutoCAD. VLISP bao gém cdc city s6 vi cdc Menu riéng ae due khi AutoCAD khdi déing. Cling chi § r AutoCAD, thi ta phdi kich hogt cho etfa sé AutoCAD hogt song td Tai BALL: KHOI DONG VISUAL LISP Dang @ trong méi tru@ing AutoCAD, dé khdi déng mdi truting phat trién giao iép VLISP ta cé dich sau: Pull-down menu: Tools! AutoLISP/ Visual LISP Editor Go lénh : Vlisp Sau khi goi lénh sé xudi hién man hinh Visual LISP for AuoCAD. = Toolbars: VLISP e6 ec thank cong cu Toolbars nhuf sau: Stindard, Debug, View, Search, Tools, Bé déng/ md cdc Toolbars ta goi View/ Toolbars va chon thanh cing cu clin mi. - Console Window: Bé nhdp ede lénh cila AutoLISP. = Status bar: Hién thj céc thang tin tom tit. Sera) sae) sale ram Order » togury . BE Undste Fields F Bockedter te and Block n-lace Edting % pea kureaen... Visual LISP for AutoCAD -Drawingtashwe> - [Viswal| SP Console). ‘esi Moet ebay Tonk Wid H |Se0@/4a ores jor - ele ®) | eel anse ml | = 4 34 BAI 2: CONSOLE WINDOW ‘Trong ctta sé Console, ta c6 thé nhap va chay ede lénh cia AutoLISP va xem két qui. (Cie tinh nang thao téc ea Console Window. - CTRL+ENTER: Dé nhap biéu thde wén nbiéu dong. - TAB: Dé truy xuéit Igi ede lénh di nh§p wong Console Window. ‘Néu din SHILF+TAB thi déi hudng truy xudit ngudc lai, - ESC: Xéa ede Text sau dau nic Console (_$). HIFT+ESC: Bé lai Text bat ky sau ddu nhifc Console. - An phim phai chudt, hode SHIFT+F10; Dé hién Shortcut Menu. a eee en ale] Ga} Fle Edt Sewch view Project Oeiug ods Wrdow | § (sqrt 256) 16.8 $(setq WET “WELLOY) BAL 3; CUA SO VISUAL LISP TEXT EDITOR Visual LISP Text Editor la cdng cu dé soan thio, céng cu chinh cia mdi iruémg phat trién giao tiép VLISP. Dé xem cifa sd Text Editor, ta hay mé mét chung trinh bit ky c6 phan md rong 1a *.LSP. Cac tinh nang cha yéu cia Visual LISP Editor = Tao ma Cac phéin khdc nhau cia chutng trinh AutoLISP duge VLISP Text Editor bigt va gain mi mau khde nhau, Diéu dé gidp ta tim kiém ede phan cia chuung tinh, bién va 15i chefing trinh mOt céch dé dang. ~ Ghép didi edic du ngode trong chyfing irinh; VLISP Text Editor c6 thé gidp ta do dim du ngoie don con thiéu bling ciich da tim cip dau ngodc ding lién két voi déu ngode ma. = Kiém tra 1éi ca php ma AutoLISP: VLISP Text Editor cin c6 thé lam bat sang cac Ii cd phép trong chufting trinh, - Thue hign cdc biéu thite: VLISP Text Editor cho phép ta thir chay cée biéu thi: ma khéng cin thodt khdi VLISP Text Editor. Ngoai ra con c6 thé sao chép tir, sao chép file, di chuyén, tim kiém file... ee eee ee ee ee eliks aAe Ede Seorch ew Project Debug Took Window a a) a3 (8606 see07 8 Fee Gis Standard error Function (aerun apacaR (st GE (> st “Functian cancert (prince (streat “\nError: BAIL 4: DINH DANG MA QUAN LY CHUONG TRIN 1. Tao ma mau cla VLISP: Trong cic cita s6 Console hay Text Editor khi ta nhiip Text vio thi VLISP xe dinh xem Text mi ta nhap vio la | him, bign, chudi hay think phin nao khac, sau d6-VLISP gin cie miu cho moi loai thanh phan do dé ta quan ly va phat hién thiéu sét tén him, diu ngode ddn trong chung tinh, Diféi day 1a miu gin mic dink etia VLISP: MAU GAN CAC THANH PHAN CUA AutoLISP Bo Diu ngode don (Parenthesis) + Nun lise 86 nguyén (Interger) + Mau Teal 86 thyte ~ Mau xanh Cée him (go sin ~ Miu den ‘Cie than phan riéng khong nhan biét Ta 06 thé déi miu me dinh tir main menu VLISP nhut sau: Tools/ Window Attributef Configure Current rs Gere emelacd “one ceec pimia = ED Envrorment options ka ‘Save setungs TL. Tim kiém bang ky higu bling APROPOS: Khi thue hién chuting trinh AutoLISP, sit dung tinh ndng Apropos gidp ta tim kiém bing ky higu mot céeh nhanh chéng, Bé thuc hign Apropos ta Lim nhu sau: Pull-down meau: View /Apropos Window ‘Thanh Tools: Nuit Apropos Sau d6 xuat hign hop thoai Apropos options. Trén dé hién ra text ta da nhdp. Ti€p theo Iya chon Match by prefix, use WCMATCH hay Lowercase symbols va dn OK sé hign ra bing két qui. TEI Foie beta Too Window Het Irepect.. cbse Trace Stack hese ree Trace Cees R Synbe Srses... cbshies Watch vind cekshetow IIL. Dinh dgng ma quin 1y emg trinh VLISP: Bé tao cic khéi Text, sfp x€p cach canh 1é thut ddu déng cho chuong winh ta sit dung bd dinh dang md mie dinh VLISP. Ta cing e6 thé dinh dang Iai Text trong cifa si Text Editor nhu sau: 1. Binh dang tat cd Text trong cita sé Text Editor nu sau Tools! Format code in Editor (tir menu VLISP) 2. Dinh dang céc thinh phan cia Text trong cifa sé Text Editor: + Chon doan Text, + Tools! Format cade in Selection (tif menu VLISP) 3. Binh dang qua h6p theai Format options. Dé 1a hién hp thoai d6 ta Kim nbu sau (1irmenu VLISP); Tools! Environment Options’ Visual LISP Format Options ‘Trén hép thoai Format Options ta c6 thé dinh dang. m xuat [Ea wren Hop AutockO Mode Cabahec BAIS: KIEM TRA LOI CU PHAP (SYNTAX ERRORS) 1. Kiém tra cic cap dau ngage dem: Léi ca phap thuting mic nhat 14 s6 cae dau ngodc dén ma va déng khong edn bing hode khéng lién két think cap. Céc lénh lién két cdc du ngode dan: * CTRL+): Match Forward + Néu dit con tr inte du ngodc mé thi CTRL+] sé chuyén con uo 14i sau diiu ngodc déng nung ing trong chung trinh, + Neu dat con trd sau diu ngode md thi CTRL+| sé chuyén con tré tdi sau dau ngodc déng gin ahat, * CTRL+[: Match Backward + Néu dat con tr sau diu déng ma thi CTRL+ sé chuyén con tré tdi trade du ngode md ting Mg trong chiding tinh + Néu dat con tré trude dau ngode déng thi CTRL+| sé chuyén con trd tdi tree déu ngodc md gan nbat. * CTRL+SHIFT+): Select Forward & CTRL+SHIFT+|; Select Backward Twong wf nh Match Forward & Match Backward, nhumg kich sing Text d gitta ddu va cui. IL. Tim cae 13i eft phiip bling enh CHECK: Lénh Check cia VLISP cé thé do tim dive I5i sau: tén bign sai, cde d6i sd, ct phiip khong diing khi goi him. Dé di tim 14i trong chucing wink AutoLISP, tric tién ta mé ctl 56 Text Editor va goi lénh Cheek. Tools! ntit Check Text in Editor: FR] d® Gm 181 ca (on b6 file chuding tinh, doan chung tinh di chon, Sau khi da biét dude cdc Ibi dé ta c6 thé sta ngay, hod khé tim vi tri 16i thi ta double-click vao dong thang 6 Build Output, khi dy VLISP mé cifa sé Text Editor vi dit con trd du ctu lénh lién quan IIL. Dé tim di cd php qua mau: VLISP gin ede miu cho mi loai dé dé ta quin ly va phét hign thiéu s6t tén ham, dilu ngode dun wong chuong winh. 6: MG DAU AUTOLISP: L. Cau tao chung tinh AutoLISP: MOt chudng trinh AutoLISP 14 tip hdp céc biéu thie (Expesion) duge ait trong cic clip dau ngode don md vi déng (Perenthesis). Bidu thie ciia AutoLISP la tip hyp cde con 36, chubi ky us va ching dude cach nhau béi ky tf trong. Néu ta nhjp mot biéu thie nim wong cip ngoje don vao dong nhc “Command:” cia ACAD, hay vio diu nhc “_$” ciia Console Windows trong VLISP, thi my théng dich biéu thie dé réi dua két qua ra man hinh va liu két qué trén bé nhé. Vi du Command: (+ 100 30) 150, © C6 thé sitdung ciic Iénh cia ACAD trong chuung tinh: (command ) Trong 46 cé thé 1 tén enh cia ACAD, 1d 56 nguyén, x0 thy, tén bien, * Cac quy ude viet ky higu dic biét trong chung trinh; - Viel “ * trong him Command ting ducing vai phim ENTER. vi dy (Command “SOLID” P1 P2 P3 P4 “ ") - Viét (Command) trong chung trinh twung dung vedi CTRL+C (hity ln) + Viéi PAUSE trong lénh Command cia chuéng trinh dé ditng lai khi chay chuong tinh dé hip dit liéu. vi du: (Command “CIRCLE” PI PAUSE “CIRCLE” P2 PAUSE) = Vigi ; trong chung trinh dé ghi cha dong Text, AutoLISP khdng chay dong chuting trinh sau ddu; may. Vidy: (CT chuyen doi tu do thanh radian (defun RA-DO (x) ; ham RA-DO eo I doi sox (Pi(/x 180) bieu thue than ham TL, Soan thio chutomg trinh: Mun c6 mét chudng trinh tric hét phai soan thio né trong m6t phan mém soan thio. déi vi ACAD ta 06 thé soan thao trong cilu s6 Text Editor vita Visual LISP, Cach md ctta s6 Text Editor: ‘Tools! AmtoLISPY Visual LISP Editor ‘Sau d6 chon New dé soan thio chuiing tinh mdi, hode chon Open dé mé file chuing wink da c6 ra dé higu chinh, Sau khi sogn thio xong, ta ghi thinh file chung tinh AutoLISP phi c6 dudi LSP. i] tym Open Fe =o ‘akoes 5 Paettes » Fllcrmewtee: emus ret. une eee cinta pret set. Wi rake E aaa Load Fil.. curkshife Brae Order * ingury * Tole Gc perce 2 pane ete ba ake iF tbktatr Hef end Blok tn-goce Edting % Deecgredia.. IM. Tai chuwng trinh AutoLISP: Trude khi chay chufdng tfink can phai tdi nd vaio ACAD. C6 nhiéu each tli chuting tinh nhu sau: 1. Pull-down menu: Tools! Load Application. Sau khi hap lénh sé xudit hign hop thogi Load/ Unload Application. Trén d6 ta chon tén file, dn nit Load dé tli, rdi din ait Close tit hop thoai. 2. Go lénh; (Load “”) ‘Vi dy: command: (Load “Hyuong”) 3. Ding cit s6 Visual LISP Text Editor dé tai, Pull-down menu: Tools! Load Text in Editor, ‘Thanh Tools: Nut Load Active Edit Window. Flename: | Fetal pe |AsCAD Ase (ain ie ACDOCKEG. C\PragamFis\dusoC A 2008, | ARDBCRES. C\ProgramfiessoCAD 2008, « IV, Chay chuting trinh AutoLISP: Sau khi tdi mdi ¢6 thé chay chwmg wink duue. Cae csich chay chucng tinh: 1. Chay tireita sé ACAD: ‘Command: (-) 2. Chay chuong trink bing ciich nbap tén console Window. ngode don sau dau nhc (_$) eda trong V. Tao thém lénh cho ACAD: Ta c6 thé bién tén him dude tao do Defun thinh mOt lénh cia ACAD bing cach dit én him c6 dang: C: XXX. Trong dé: - Phin: ludn bit bude phdi cd. = Phin XXX: 1 tén lénh dude tao ra cho AutoCAD, nén ding chit in hoa. Cho ¥ cing ham C:XXX khong ¢6 déi s@ wan cur nhumg phdi c6 dau () sau tén him XXX, va 6 thé c6 Adi sé cuc bd (dat sau dau /). Khi m6t him cia AutoLISP dude dit c6 dang CXXX thi XXX 1A tén | Kgnh mdi cia ACAD, cho nén dé tdi va chay chuong trinh cé tén him nhu way, ta chi clin nh§p tén XXX sau dong, nhac lénh command: cia ACAD. BAIT: CAC KHALI NIEM CO SO TRONG AUTOLISP 1. Biéu thife tong AutoLISP: Mi chusing tinh AutoLISP bao gém chudi cde biéu thie (Expresion) dive dat tong ei ngoge don md va. déng. Biéu thife cia Auto LISP 1a tap hop cae x6, chudi ky tw ma ching dit céch nhau béi khodng, wong, Bigu thie etia AUtoLISP c6 dang nhw sau: (Function Arguments) + Function: tén him. + Arguments : di sé, ‘Méi bidu thite due bat dau bai difu ngode don md: (Sau dé 1a tén ham, réi cde déi sé ctia ham 46, két thic biéu thie 1a du ngo’c don déng), Mii d5i s6 cia ham cé thé 14 mét biéu thifc. Do vily mét bidu thie od thé chia ede bidu thie con trong dé. Vi du ode biéu thie sau: 1. Command: (+9 1) 10 Day 1a 1 bigu thie: ham céng e6 2 d6i sO 1a 9 vi 1, két qui hodn tra 18 10, 2. _$(* 2(+87)) 30 iiy 18 cae biéu thite ling nhau: biéu thic con bén trong chita him edng (+) 2 doi sd 1 8 7. Két qui cita bidu thic ham cong dé sé 1a 1 tong 2 déi sé ciia him nan (*). 3. _S (List (#2 1) (34) (3.12) Day 1 cde biéu thite léng nhau: cé 2 bigu thie con bén tong (him + vi him *) ma két qud ciia ching sé li 2 d6i sé cho ham List eta biéu thie ngoai. Két qua hoan tri sé la danh dich List: (3.12) u thie don gian nhw én (hay cae ma ca AutoLISP khong cdn phai soan thio nhur mot chuiing trinh, cho nén ta c6 thé nhgp vio sau dong nhac lénh Command: cha AutoCAD (biéu thie 1) hog nhip vio sau div nhc enh _$ ca cif x6 Console trong VLISP (biéu thi AutoLISP sé xit ly va hodn tra két qua ngay tai difu bite dé, * Néu ta nhip vio sO lvidng cdc déiu ngokc dan déng cha ding, AutoLISP sé hién ra dau nhife ahd & ddu dong nbu sau: (> P I. Cac kiéu dif lige cia AutoLISP: | INTERGERS (kiéu sé nguyén) ya REALS (kidu si thuc): INTERGERS 14 ede sé nguyén khdng chifa dau thép phan va chon trong khoding +2 147 483 647 dén -2 147 483 648. Néu ta nhjp vio con 86 ngoai khéang trén, hodc két qui gitia cde x cho phép 14 con sé Idn hdn 86 eye dai thi AUtoLISP sé dua ra két qui sai. * Vi du: -8/92) 4° Két qua ham chia (/) dé di bé di phiin 1é, khong phai * REALS 1a s6 c6 chita dau chim thap phan. 2. LISTS (Kiéu danh sich): LISTS 1a kiéu dir ligu dic urumg ca AwoLISP. LIST c6 thé bao gém cdc gid tri cu thé, cfc bién, cic him. Vi dy: US$ (6 4.5 -7) (6 4.5 -7) 2_$(x “Lim” -90) (x “Lim” -90) * Chay: + Ham QUOTE (c6 thé viet tf 1A dtu") due ding dé tao ra mGt him LIST gém toan 1 cde gid tri, Vi du: S(quate (13 -4.7)) (3-47) Hote SU 3-47) (3-47) + Co thé thay hom QUOTE béi him LIST; mi ham LIST gém cée phéin wir la cdc gid wi va cd cac bién nifa. Vidu: _$ (setq A (setpoint “Cho diem A:”)) (50.0 100.0 0.0) _$ (List A) 50.0 100.0 0.0) 6 nguyén. 3, STRING (kiéu chudi ky wf): STRINGS la chudi cdc ky wf dit bén trong déu ngode kép * *. Chudi ky ur khang duge vuet qua 132 ky we. Vidu 1. _$ (setq VIET “Chuong tinh ve nha") “Chuong trink ve aha” 2. _$ (setq STRING (getstring “Ho & Ten:")) “Ng. Van.A" * Chai: NEu ta dgL ky ty die bigt \ ding trude ea sau: ‘o 2d xudng dong te 2 ESC w : ENTER Ww : TAB Anon f tw ma hé 8 1 nnn : " 2 nhiéu gio trinh hép ain NU4Kxxx ky tu ma ASCTI lA xxxx \M+nxxxx : ky ty’ ma UNICODE la xxxx ¥ ly khde sé cho ta cae F nghia khde nhu 4, Ngoai ra cin ee dir ligu kiéu: ~ SYMBOLS: dé m6 ta ede ky ty ASCII ma ching chtfa 1 thong tin ndo dé = Kigu dai wong vé VLA (Visual LISP ActiveX); cae d6i wing dt tén cia bin vé AutoCAD co thé 1a dir ligu trong AutoLISP, + Kiéu File: AutoLISP c6 thé ding file descriptor mé ti duéi dang déi s6 cho ham AutoLISP. IIL. Cée bién trong AutoL ISP: Max bién AutoLISP niin cac gid tri kidu dit ligu 43 gan cho né cho dén khi gin gid wi mdi. Cae bién wong ng6n agit Lip winh bie cao khdc thutmg phii khai bao kiéu bién wutde khi sir dung, con AuloLISP iyf dong xdc dinh kiéu bign theo gid tri d3 gain cho nd Bie biét trong do g6c ctia AULoLISP phdi ding don vi la Radian (RA); bién s6 pi duye gain gid tri 3.14159. MOt bién khong dude gan gid wi thi goi 1a Nil. Bién vdi Nil khi gid tri cla né KhOng con ciin thiet niia, s€ gdm vige sf dung b6 nhé Ham Setq due sit dung dé pin gid tr} cho ede bign, Né e6 dang sau: (Seq ...) Ham Setg sé gin gid tri cho bién 1, gin gid tri 2 cho bién 2. gid tri cia biéu thie cia biéu thi bign cudi cling, nhu vi du sat 1. Viet riéng: _$(Serq k 3.5) 3.5 _$(Setq 1-7) oF -S(setq t “HELLO!") “HELLO!” 2. Viet gop lai: $ (Sctq k 3.5 | -7 + “HELLO!”) “HELLO! Céch bién thi gia tri mét bién: 1. Sk 35 _sr “HELLO! Nhung AutoLISP chi hoan tii 2. Viet g6p lai: _§(Setq k 3.5 1-7 r “HELLO!M) “HELLO!” * Cach hién thi gid wi mot bien: 1. Sk 35 fr “HELLO!” 2, Command: !k 35 Command: tr “HELL © Céc bide hé thong trong AuioLISP: Dé vuy ep dén ede bign he thing AutoCAD, ta sif dung 2 him AutoLISP nhu sau: ‘Tra cifu gid ui hién théfi bign he thong: {getvar “tén bign hé théng”) * Vid: 1. Command: (getvar “LTSCALE") 13.0 2. _$ (getvar “FILLETRAD”) 00 é giin gid wi mdi cho bign hé théng; (setvar “tén bién hé théng™ ) "Vi du; 1, Command; (setvar “LTSCALE™ 1) 1 2. _$ (setvar “DIMCEN” 3) 3 IV, Ciic hitm (hay Ignh) trong AutoLISP: 1. Ci phép eda ham: Cac him AutoLISP ¢6 et phiip dade m6 ti nhw sau: (foo string [number...|} Trong dé: + too: tén him. + string: déi sé (bign) theo yéu cdu cia ham foo. + number: déi sé tily § (c6 thé khang c6). = we du: _$ (getpoint Point [dang nbie]) “Tn d6 him getpoint dé nh4p mét diém, d6i 6 Point 1a mot toa dd dim, edn di sO d wrong | | dé ghi chit, c6 thé cho hogic khong 3 (getpoint P1 “Cho toa do diem 1:") Cho toa do diem 1: 2. _$ (quote (+ 4 6) (+ 4 6) 2. Binh nghia bam vA thite thi ham: Phin nay ta xét céch dinh nghia mOt him ya goi him ra chay nhw thé mo, * Ci phdp dinh nghia mot ham: (defun ) Trong dé: + Thanh phan diu tien trong cp ( ) 18 tit khéa defim. + Thinh phan thirhai 1a ten ham nap va, + Thanh phan thif ba 1a bién toan cyc hay bién cuc b (dit sau dau /). Bién cyc b9 chi cé tic dung trong mot him con, + Thanh phin cudéi cing 14 biu thife thin him. ° Vidu: '. doi tu BO thinh RADIAN (defun DO-RA (x) s:him DO-RA niy cd 1 déi sox (* pi x E80) = du thifc than ham). me Y. Ciic him (hay lénh) ed bin cla AwtoL.ISP: 1. Ham QUOTE: Ham nay dig € hoin tri biéu thie mA khng tinh todn. Ci phdp cia him QUOTE: (quote ) hotie ‘ ..) © Vi dw: Chudng trinh fim canh huyén cia tam gidc vudng, biét 2 canh x.y (defun HUYEN () :cdinb nghia him HL (setq x (getreal “Cho canh x:")) —ohiip do Id can x (30 thyfe) (setq y (getreal “Cho eanh y:")) j::ohdip do In can y (si huge) (seg k (+ xx) (hy yD stk 1A tng binh phucing 2 canh x.y (prine “\nGia ti=") in két qui d6 dai | canh huyén tinh dude. (setg 1 (sqrt k)) 3 bling cain bic hai ctia k Ham tra itu va gin gid tri cho bién hé thing ctia AutoCAD: Dé truy ciip dén cdc bién hé thong AutoCAD, ta st dung 2 ham AutoLISP nh sau: ‘Tra cfu gid tri hiGn thai bign hé thing: (getvar “ten bién hé théing”) Dé gin gid tri mdi cho bién hé thing: (setvar “tén bién hé thong” ...): todn wir cong. (- ...): todn ti tit, (* ...): todn ti nhn. (/ (max . (min ...); tim gid tri eyt tiéu. * Cée him sé hoe va dai sé: (1+ -): dém ting lén 1 dan vi * Vi du: _$ (setg AUL+9)) (1 ): dém gidm di 1 don vi. (get ....): tim miu sé chung Idn (rem ...): im phdn du-cita phép chia, (sqrt ): khai can bic 2. (expt x p): tinh x mip © Vi du: expt 2.3) (exp p): tinh © mit p. (abs ): My gid wi wyét déi cba s6 thue. (log x): tinh logarit tw nhién co sé e cita x. (float x): chuyén s6 x tif nguyén sang 86 thy (fix x); chuyén x tir sé thy sang s6 nguyén, (sin alpha): tinh sin g6e alpha (radian), (cos alpha): tinh cosin géc alpha (radian). (atan x): tinh arctang eta x (radian). (angle pl p2): tinh géc xdc dink béi duting plp2 va truc x (thea radian). (distance p1 p2): tinh khoding cich plp2. (polar p d): tinh wa d6 1 diém ma eéch diém edt p mot khoding d va nim wen duimg —>8 hing nghiéng vdi truc x géc alpha. 6. Cée ham wit ly chudi ky wf (STRING): (streat ..) — : ghép n6i cdc chudi than 1 chudi Vi dy : _S(streat “Ha Noi* *-" “Viét Nam“) i N6i-Viet Nam” (strease)} ‘huy€n ky ty¢ trong chudi string thinh chif in hoa, néu khang cho T, n€u cho T thi chuyén thanh chi thuting. (sirlen ) ; chon ra chudi con trong chudi string, tif phiin tit bat dau n vei chiéw dai 1. * Vi du : _$ (substr “AUTOLISP” 5 3) “Ls” _S(substr ” AUTOLISP™ 5) “LISP” (chr ) ; ho&n wi ky wr wong dmg vii so nguyén 1a ma ASCIL * Vi dy: _$ (chr 65) “An (acii ) : chuyén I sé thanh s6 nguyén © Vi-du: _S(atoi “12.3") > 7, Ham aif ly danh ssch (LIST): ‘Ngon ngit LISP n6i chung va ed AutoLISP dy trén nén ting li danh sdeh ede thing tin, MOL biéu thie chinh 1a mt danh sich. Chung trinh AutoLISP bao gém cic biéu thie, ma mdi biéu thie duge bat dau biing du ngode don md va két thie bling dau ngode don ding. Cc biéu thie c6 thé ling vao nhau. AutoLISP c6 sn cic ham dé xif ly vii cic danh sich. healec.com.yn * Hop nhdt ede biéu thie thinh mot danh séeh: (ist ...) $(setq CHAOMlist “Xin chao” “cdc ban!")) gio anh © Chi § MOt diém trong AutoL ISP due gan béi Ienh List; tife 1A cdc toa dé (x,y) trong 2D hay (x,y.2) trong 3D duve viet dudi dang List nhy sau: ‘Command: (list 20 35) (20.35) ‘Command: (setq P2(list 34.5 75 80)) (34.5 75 80) * Cac 1énh lua chon phin tit trong LIST va xi ly LE List 14 4p hop nhiéu phn ti bén trong. Boi khi ta cdn tia chon Lify 1 sé phan tir wong danh sich List 46. AutoLISP dita ra cdc him Iya chon hg Car nut sau (ear ) + chi ly ra (hoan wa) phan w thir I ong danh sich List. (eadr ) + chi ly ra (hon tri) phan tif thi 2 trong danh List. (eaddr ) ; chi ly ra (hoan tra) phan wi thi 3 trong danh sich List. * Cha ¥: Trong thuc tién nguéti ta thuting sit dung Car dé chon toa dé x chia diém, Cadr dé chon oa dG y cia diém, Caddr dé chon twa d6 2 cba diém * Vi du: Gia sit ta c6 1 diém Pt duige gain toa d6 x 18 10, toa 6 y 1a -11, toa do x 1h 12.5 bai bigu (hvic: sa: _Stsetq Pulist 10 -11 12.5) (10-11 12.5) ‘Ta sit dung cde lénh car, cadr, ead dé chon toa dé x, y. 2 nhur sau: _Stsetq x(car PU) 10 S(setq y(cadr PO} 1 Stsetq z (addr Pty) 12.5 (edr) = bé phan wi dau tién, chi lay ra cde phdn wif thet 2 md di. * Chil §: Céic ham Car, Cdr c6 thé dng vio nhau dé tao thanh céc tén méi: (caar ) = (car (car ) = (ede (edr ) = (car (cdr (car ))) (cdar ) = (edr (car )) (last ) : chi chon phiin tif cudi cing trong List. (nth ) : chon phan tit thif n trong List. * Vi du: _S(setq L(list 1 23 4 5)) (12345) S(last Ly 5 _S(nth OL) 1 —Sinth 3 Ly 4 _Siedr L) (2345) (length ): hodn wa séf leung phdin c6 trong List © Vidu: _$ (length “(mn (p q))) 3 (reverse ): hodn wi ddi ngude cae phan wi tit ddu xuding didi wong List * Vidu: _$ (reverse “(I 2 3 4 5) G432h (cons ) :dé tao ra m6t List méi bing cach néi hai thanh pliin phia sau tén him lai véi nhau. + Néu thanb phn cuéi Ja List thi tao ra List mdi néi phan vir dliu vai phiin tif cudi véi nhaw. _S(setq A (list 1 2 3) B “object” “object” Sitcoms ( 5 5) A) 25123 + Néu thanh phan cuéi 1a Symbol thi tgo ra List méi néi phan ti? ddu vai phan tit cuéi vdi nhau va céch nhau diu chim . (Dotted pair): § (cons (+ 1 9) B) (10. “object”) ee (append cham nay ndi céc phan ti List 2 vao eudi List |. * Vidu: _$ (append “(1 2 3) (list “M" “N" *P" -Q")) (123°M “POY (subst ) chim nay thay thé mét phan tif ci wong List bing mot phiin ur mei. © Widu: _S (subst “NEW" 12 (list “10” “117 “12° 13") (10.11 NEW" 13) (mapear chim fune> ...) chim nay sip xép va hodn trd céc thanh phiin dude xif If gitfa cde Listl, List2...bdi him Fune, * Vi dy: _$ (mapcar “1+ “(10 20 30)) (i 21 31) (apply ) :0€ thye thi him fune véi ede phiin ti ca List. * Widu: _$ (apply “streat (list “GOOD” “MORNING” “1")) “GOOD MORNING !* (lambda ) : dé dinh nghTa mot ham khong cdn héi tén, chi ding mot Lin tiét kiém bd nhd, theo ham nay ma him mapear thie thi. * Vi du: (defun LAMO) (mapear *Mambda (x y 2) (xGya)) “(23) *(20.30) (122 -13.3) ) ) Hoan tr két qua a Lis (-204 129.9) een See ee Cac him so samh giifa 2 bién hay hai phan ti gdm cé: (cq ) :-n€u bién 1 ging hét bien 2 thi sé hoan wa T, cdn bién | khic bign 2 thi hon tra Nil. *Widu: _S(eq 3.5 3.5) T Seq x 7) Nil (equal ) : néu biéu thie 1 bling biéu thite 2 véi dO chinh xé¢ d3 dinb thi hodn tra T. *Vidu: _$ (= 5.66 5.66) T S(= BB) T S(=2y) Nil © Chil f+ d6i véi sé thue may tinh xem sé 0 1a mot s6 xap xi bing 0, cho nén ki dé so sinh c6 khi hoan tra Nil. Truging hdp nay nén ding ham Equal dé so sinh (/= ) : néu 2 biéu thie khée nhau sé han iT, *Vidu: (t= (* 2 3) 9 T S$ (/= (lista be) (list a b)) T (>= col thye 25): n€u sO thue | Ién hon hay bing sO thye 2 thi hodn tri T, nguge lai sé hoan tr Nil, (<= ) ; n€u s& thuc | nhé hon hay bling sO thy 2 thi hon td T, ngude lai sé hoan ti. Nil. (> ) : ham NOT hoan wi T néu gi © Vidu: Stsetq x Sy “Blue* 2 Nil “Sa 2 hoalec.com.vn fare nhl aldo tinh héfp dn cho la Nil, cdn gid tri cho hic Nil sé hodn ti Nil. 9. Céc ham hinh hoc va hfing gide: (distance ) : tinh khoing cdch gi langle ) : tinh géc tao boi dudmg P1P2 vei truc x (tink theo radian) {polar ) : him Polar dinh toa dO | diém mdi, so véi diém vn Pt céch doan delta, nim trén dutng thing nghiéng voi truc x géc alpha, finters [seg|) : ham Inters hodn tra toa d6 ciia giao diém giite PIP2 vai P3P4. Néu bign [seg] 14 Nil thi hai dutmg thing dé xem 1a dai v@ tn va hon tri. ta do giao diém ciia ching. Néu {seg] nhgn gid trj T thi hoan ti Nil khi hai dogn thing khong cdt 4 bén trong ciia ching. *Vidu: _Sisetq A “(0 0) B *(50 50)) (50 50) _Sisetq C "(10 0) D "(50 10) (30 10) Sisetq M ‘(0 50) N ‘(50 20)) (50 20) _Minters A BC D) Nil _Séinters A BC DT) ‘Nil _Sinters A BC D NIL) (3.33333 3.33333) _Sinters A BM N) GL25_ 31.25) (trans ) ; 1énh Trans dé chuyén hé toa dé cil sang hé toa d6 mai cia toa dd mit diém Pt. Trong dé ede bién va liy gid tri nhw sau: O ding voi hé WCS 1 ting vai he UCS © Vidw: Ta chuyén diém PU 1SO, 0, 0) tir h@ UCS hign thai sang he WCS: _S(trans "(150 0 0) 1 0) (292.449 72.963 3.552) {sin ) choan tra gid tri sin gée d6. (cos } shodn ta gid tri cos aoe d6 {evunit ) :ham Convert units ding dé chuyén déi mot s& tirhé do ndy sang hé do khéc. *Vidw: _S(evunit 25.4 “mm” “in”) Lo _Stevunit 1 23.4 “mm”) 10, Ham kiém sodt loi; Diy 18 cit phap ciia mét ham xifly Ii: (Yerror® ) ‘Trong 46 String la cau gidi thich clin AutoLISP vé 18i 43 pham, * Vide: (defun *error* (msg) (pring “error:") (pring msg) (prine) ) Ta thu@ing nhdp dite thong béo 1di chuong tinh védi cdc dang sau: ; **ERROR: too few arguments : **ERROR: bad arguments type: 2D/ 3D point VI. Nhap va xu Cling nhir cdc ngon ngit lip trinh khde, AutoLISP sirdung 2 dang quan If dir ligu: ghi vio bd ahd cia may, cach thit hai Ia ghi vao file da liéu ngogi vi trén dia cng, dia mém khong sif dyng bO nhd cia may, Trong qué trinh lim vige, cc file dif liu d6 dutde md ra dé ghi hodc nhJp vao khi AutoLISP yéu cau. 1 Le mév dng file (open ): lénh mé file theo mode: “er” chi dé doc file “w' ghi thanh file mai “a” ghi ti€p vao file hign thai. hi xong viée phii déng file 1g (close ); 1énh déng file Widu: (setq fil “SOMEFILE.TXT) (setq x (open fil “r”) et 0) (while (read-line x) {setq ct (I+ et)) ) {close x) 2. Lénh ohap dif ligu tif file va ghi dif liéu vie file: ‘Trude khi nhap hay ghi dif ligu edn quay lai véi min hinh hay may in, chon ch€ dO min hinh Text hay Graphics: (graphser); chuyén man hinh sang ché 49 48 hoa Graphics (textser) — ; chuyén man hinh sang ché dO vain bin Text (textpage) ; chuyén man hinh sang ché dO viin bin Text va x6a sach man hinh, dua con tré lén gée cdi én man hinh, * Nhgp dit ligu tir file: (read-line ) : c6 mé td file sé nhip dir ligu tit file, khong cé m6 ti file sé nhiip dit ban phi (read-char ) : ahip mi ASCII cia ky ufdoc tir file mo doe tir bin phim. * Xual (ghi) di ligu vao | file: (write-line ): cho mo ti file sé ghi chubi ky uf vao file, khong cho mé 4 file thi ghi chudi ky tv ra man hinh. * Vidu: (Write-line “Test” f) ¢write-char ) : cho mé td file thi ghi ky tw tng vdi ma ASCII vao file; khong cho mé td thi ghi ky tu tmg véi ma ASCII ra man hinh. *Vidu: Qwrite-char 65) <--> A6S néu khong cho mo ti file sé 3, Ce ham ho PRIN Cc him ho Print sé xu‘t ra min hinh, méy in hoe ghi vio file dir lieu. (prine m6 ul file]) :n€uc6 mé 1d file thi ndi dung bidu thie duve ghi vio file dé; nu khéng mé ti ham prine sé in két qui va hoan tri ra man hinh, (prin [mé ta file]) : ham sé in bi€u thée ra man hinh, n€u c6 mé ta file thi § nghia nh da ni 3 wén. Khi in ra néu la chudi ky up thi dit trong ditu“", *Vidy: Command: (setq a 123 b (a) (A) inna hoalec.com.vn AA ‘in nOi dung biéu thite va hon ta. Command: (print a) ta mnhléu gléo trim héfp ddin Command; (prin! b) (AMA) in noi dung biéu thde va hoan tri Command: (prin! “Hello” f) “Hello” <3 in ndi dung biéu thie la dong ky w dat trong “ (print [mé ti file): gidng nhv prin1, ham print sé in biéu thde ra man hinh, néu cé m6 ti file thi ¥ nghta nluf da ndi d wén. Sau khi in néu fi chudi ky tw thi dinh mot khodng trong & cudi dong. “Vi dur _S (pring “W AutoLISP”) AutoLISP" AutoLISP” ;;; ham in vi hoan wa _S (print “Wt AutoL ISI mot dong tréng khong in ham in va hoan tri “At AutoLISP™ “Wt AutoLIS! _S (prince (+ 200 55)) 255 255 va hodn wi _S (print (+ 200 ham dé lai mot dong trong khéng in ja hm in va hoan tra 258 255 md file _S(seiq f (open “Textfile.txt” “w")) ghi bigu thie yao file _Siprine “Bay fi file vin bin” * Chi ¥ + Him Princ sé in ra chudi ky /khOng cé du ngodc kép “*, com hm Print sé in ra chudi ky ty trong dau ngoiic kép “", + Ham (princ) hay due ding dé x6a min hinh AutoCAD khi chay chudng tinh, * Chi §: Chung nay ta da khie sit cdc Iénh co ban hay ding nhat cla AutoLISP. Cac ban c6 thé im higu them Ignh khde trong mue Help cia AutoLISP nh sau; Menu: VLISP> Help> Visual LISP Help Topics (F1}> Help Topics> AutoLISP Reference Phan trén ta da sitdung min hinh 1a mdt thiét bi in ra, tide 1a sit dung thiét bi xudt mat dinh la CON (min day: du: hinh). Néu ta muén xuét ti 1igu ra may in (Printer), hodc cifa song song thi cin sir dung thém lénh khdc sau Thiét bi xu: Phain ciing thid' PRN man hink, ban phim COMI, COM2 céing ndi tigp 1, 2 LPT LPT2 céng song song 1, 2 NUL Khong c6 thiét bj xual nhap Gia sif mun xudit ra may in ta din ding ky méy in giGng nhyt me | file (thay (én file bing tén my in). Vi (seiq A (open “PRN™ “w") thue hién ede lénh khae (close A): déng méy in, ‘CHUONG 27: CAU TRUC TRONG CHUGNG TRINH AUTOLISP Céu tric trong chung trinh AutoLISP cing e6 di ede de trimg nhw trong edie ngén ngit lip tinh khdc: If, While, Cond, Progn. BALI: HAM DIEU KIEN UF) I 1a him didu kién rift thuding ding trong chuung tinh AutoLISP. Y nghia: Néu diéu kién néu ra la dang (T) thi thye hién hién biéu thie du; con diéu kién néu fa 1. sai (Nil) thi thye hign biéu thie sau. Ci phap: (if ) * Vi du: Ham if trén due mé ti trong chung trinh sau day so sinh 2 khoding cach xuit phat tit 2 diém pl! va p2 trén man hinh, Chuting trinh viel trong cifa sG Text Editor cia WLISP. Chay chwong trinh: _3 (TESTTING) Diem dau tren man hinh: 0,0 (defun TESTTING {/ * y) Diem thu 2 wen man hinh: 10,0 fee eae Khoang cach tu pl: 50 teeta x (aetenst Ft iceling oaks 60 Geeta y Lgetaist Fa vimoang cach t4 122°}} Chieu dai khong bang nhau {prompt “\nthicu dai bang nnau") (prompt “\nchiew dai khong bang nhau”) ) Behe ke _$ (TESTING) ___tprine) Diem dau tren man hink: 0,0 > Samnecea Diem thu 2 tren man hinh: 100.0 [¢ Khoang cach tu pl: 99 Khoang cach tu p2: 99 Chieu dai bang nhau BAL 2: HAM LUA CHON (COND) Ham Cond ding tudng ty nly ham If nhung him Cond 06 thé xif If vdi nhiéu diéu ki€n thi, Nghia 1a him Cond cé thé thay cho mhigu ham If mét ide va hodn ta gid un tinh sau cing. Cai phap: {cond Biéu kign | dang thi thye hién Ken Diéu kién 2 ching thi thue hién lénh Bidu kign'n dng thi thy hig enh ) * Mi du: Ham cond duc md ta trong chudng tinh sau day so sinh 2 khodng cach xudt phat tit 2 diém pl va p2 trén man binh. Chyong trinh viét trong cita s6 Text Editor cia VLISP. (efun TESTING (7 x y) (setg pt (getpoint “Dien dau tren nan hinh:")) (Setq p2 (getpoint thu 2 tren man hinns)) (setq x (getaist p1 “knoang each tu pi=")) Esetq y (getaist pz ~knoang cach tu p2=")) (cond Ce x y} (prompt “\othiew dat bang shaw") {Le 4 3) Chrome “Anithoang cack te pt nko ben ta (O44) (prompt “\noang each tu pt ton han tu pO"3) » fe nee cone ipriney Chay chung tinh: _$ (TESTTING) Diem daw tren man hinh; 0,0 Diem thu 2 tren man hinh: 100,0 Khoang cach tu pl: 50 Khoang cach tu p2: 60 Khoung each tu pl nho hon p2 _sresrmno) hoalec.com.yn Diem dau tren man hinh; 0.0 Dicm thu 2 tren man hinh: 100.0 mile oh den Khoang each tu pl: 60 Khoang each tu p2: 50 ‘Khoang each tu p! lon hon p2 _S (TESTTING) Diem daw tren man hinh: 0,0 Diem thu 2 tren man hinh: 100,0 Khoang cach tu pl: 99 Khoang cach tu p2: 99 Chieu dai bang nhau. BAL3: HAM PROGN Ham Progn sé g6p cae biéu the Jai think mot biéu thifc cing thu hign thea mot cach thee ma Progn quy dinh. Ham proga cho phép tién hinh nhieu ham if 4 trong d6. Cit phip: (progn ) *Vidy: defun protca b) GE ab) (rage (pring "\on- aS ate ab aM) (prot 8 8) a-B-2 § «prot 2 9) ail a) L$ (prot nm my o. i fFror: baw argunent type: munberp: « BAIA V AP HUU HAN (REPEAT) ). Lip khong, LISP c6 hai loai vong lip hay ding 12; Lip biét wdc si vong Hip n (Repe uke sO vong lip (While). Cai php: Repe: Aut PMU nes (defun CHUOLYONETRON( ) (repeat ) Xsete pt "(50 58 -8)) Vi dy: Chuiding tinh ve 18 ving tron véi ede (repeat 18 ee fe is (connand tam wen x va cach nhau 10 don vi, bin kinh cing wound “CIRELE” At 25 bling 25 den vi ve duong tron tam PT, ban Kin 25 don of a ani rq pt (List (+ 18 (car pt)) 5H 8) Chay chudng tinh ta c6 két qui nur hinh: tron tag x ka 18 don vi _$«DT) 5000 [eeu ie oer Baa &Ae “es de Stared ei ‘ é 3 ry é aa Zea e057 0000 oo BAIS: VONG LAP KHONG BIET SO LAN (WHILE) sat diéu kign cho, néu diéu kién khde Nil (sai) thi thu hi cho tdi khi diéu kign 1a Nil thi ditn, Ham lip e6 digu kign Whi Eu tite, Cong vie tién hai m: Cii phip: (while . Sarees Mi de qi chuong trinh wong lap WHILE Chay chuting trinh ta o6 két qua ohu bink: (deFun DONGTAM () son Geta r (getdist “cho ban Kink veng tren thu 1:"} n 108) S000 (vile (c= romp + dheu kien F be non woae bang onnand “CIRCLE” "(450 101 3 we vong trom €o tam La (158,100) ban kin F) etqr (+ 10 r)) than kioh vong ‘teow saw tang ‘then1m aon vi het unite Cipro Oboe tetra yy [elegy (coneana “zoo ari) comes b weenter” pause) Window Help: -a% Penna Boone 14n Bee — =| V GS "ou0 += €) lo Biowint dave! OOS va C} “2 3 a& or at 11648 168 70, 00000 Shar nip ORTHO SS 6: HAM FOREACH (XU LY LIST) Him Poreach tich ting phiin tf theo thi wy trong danh sich va ding né Ln higt Kim bién cho bigu thie, hoan td két qua cia bi€u thife cudi cing, Cai phap: {foreach ) * Vidu Command: (foreach n “(a b c){print n) A B ce Ham nay in ra ting phan wr trong List va hoan trl e. Lénh nay tong ducing 3 ham: (print a) (print b) {print c) BAL7: LENH COMMAND TRONG AUTOLISP Biéu thie Command trong AutoLISP ding dé goi cdc Kénh cia AutoCAD, Cac vi du 3 ede phéin én ta da sir dung him Command dé goi ede Ienh: LINE, CIRCLE...cila AutoCAD Ci phép: (command * 4 Wenh) hoe mor diém, én lenh”

Vous aimerez peut-être aussi