Számítógépes tervezés alapjai

Embed Size (px)

Citation preview

TOLVALY-ROCA FERENC A SZMTGPES TERVEZS ALAPJAI AUTOLISP S AUTODESK INVENTOR ALAPISMERETEK

MSZAKI TUDOMNYOS FZETEK 7.

TOLVALY-ROCA FERENC

A SZMTGPES TERVEZS ALAPJAIAUTOLISP S AUTODESK INVENTOR ALAPISMERETEK

ERDLYI MZEUM-EGYESLET Kolozsvr 2009

A knyv megjelenst tmogatta:

a Szlfld Alap

Lektor: Bitay Enik Tolvaly-Roca Ferenc 2009 Kiadja: Az Erdlyi Mzeum-Egyeslet Felels kiad: Sipos Gbor Sorozatszerkeszt: Bitay Enik Olvasszerkeszt: PONTLAB Kft. Bortterv: Knczey Elemr A bort Autodesk grafikt is tartalmaz Trdels: PONTLAB Kft. Nyomdai munklatok: Europrint Kft, Nagyvrad Tel./Fax: +40-259-472631

Descrierea CIP a Bibliotecii Naionale a Romniei

TOLVALY-ROCA, FERENC A szmtgpes tervezs alapjai : AutoLisp s Autodesk Inventor alapismeretek / Tolvaly-Roca Ferenc. - Cluj-Napoca : Societatea Muzeului Ardelean, 2009 Bibliogr. ISBN 978-973-8231-81-8 004.42 CAD

TartalomElsz 1. AutoLISP 1.1. Az AutoCAD programozhatsga 1.2. AutoLISP alapfogalmak 1.3. AutoCAD pontok AutoLISP-ben 1.3.1. Az AutoCAD pontok trolsi formja 1.3.2. A listk elemeihez val hozzfrs 1.4. AutoLISP s az AutoCAD utastsok 1.5. Interaktv adatbevitel AutoLISP alatt 1.6. Sajt AutoLisp fggvnyek ltrehozsa 1.7. Listakezel fggvnyek 1.8. AutoLISP program-llomnyok 1.9. Logikai s egyenlsgi tesztek 1.10. Ciklusszervezs AutoLISP-ben 1.11. Karaktersorok kezelse s kirsa 1.12. Az AutoCAD entitsaihoz val hozzfrs 1.13. Entits nevnek hasznlata AutoCAD parancsokban 1.14. Hozzfrs az entitsok tulajdonsgaihoz 1.15. Rajzelemek mdostsa az asszocicis listk segtsgvel 1.16. Kivlasztott elemsorozatok kezelse AutoLISP-el 1.17. Gyakran hasznlt AutoLISP fggvnyek 1.18. Fggvnyek brzolsa AutoLISP segtsgvel 2. Autodesk Inventor 2009 2.1. Bevezets 2.2. Meglv rajz kinyitsa. j rajz kezdse 2.3. A grafikus kperny 2.4. Billentyparancsok 2.5. Alapbelltsok 2.5.1. Document Settings... (Dokumentum belltsok) 2.5.2. Application Options (Alkalmazs belltsok) 2.6. Knyszerek 2.7. Vzlatkszt s -szerkeszt parancsok. A Sketch Panel 2.8. Alaptest ltrehozsa profilbl 2.8.1. Az Extrude (Kihzs) sajtossg alkalmazsa 2.8.2. A Fillet (Lekerekts) sajtossg alkalmazsa 2.8.3. A Hole (Furat) sajtossg alkalmazsa 2.8.4. A Chamfer (lletrs) sajtossg alkalmazsa 2.9. Sajtossgok 2.9.1. Az Extrude (Kihzs) sajtossg 07 09 09 10 19 19 20 22 22 23 26 27 27 30 31 33 34 35 37 39 41 82 87 87 90 92 94 95 95 98 104 108 116 121 124 126 129 130 130 5

Tartalom

2.9.2. A Fillet (llekerekts) sajtossg 2.9.3. A Chamfer (lletrs) sajtossg 2.9.4. A Hole (Furat) sajtossg 2.9.5. A Browser Bar (ttekinttr) hasznlata 2.9.6. A Revolve (Megforgats) sajtossg 2.9.7. A Circular Pattern (Krkioszts) sajtossg 2.9.8. Az alkatrszek szne 2.9.9. A Rib (Borda) sajtossg 2.9.10. Mirror parancs Sajtossgok tkrzse 2.9.11. A Rectangular Pattern (Ngyszg kioszts) sajtossg 2.9.12. A Shell (Hj) sajtossg 2.9.13. A Loft (Psztzs) sajtossg 2.8.14. A Sweep (Seprs) sajtossg 2.9.15. A Split (Kettoszts) sajtossg 2.9.16. A Coil (Spirl) sajtossg 2.9.17. A Thread (Menet) sajtossg 2.9.18. Munkask, munkatengely s munkapont 2.10. Skrajzok ksztse testmodellek alapjn 2.10.1. Vetletek ltrehozsa Irodalom The Basics of Computer Aided Design. Basics of AutoLISP Programming and Autodesk Inventor (Summary) Contents Grundlagen des rechneruntersttztes Entwerfen und Konstruieren. Elementare Begriffe AutoLISP und Autodesk Inventor (Zusammenfassung) Inhalt Bazele proiectrii asistate de calculator. Noiuni de baz AutoLISP i Autodesk Inventor (Rezumat) Cuprins

132 135 136 137 139 144 145 147 155 157 162 164 168 173 176 179 182 183 183 190 191 192 194 195 197 198

6

ElszAmi 78 vvel ezeltt valszntlennek tnt, ma valsg: az ember mr vods kortl nem csak jtkra, hanem tanulsra hasznlja a szemlyi szmtgpet, felnttknt pedig mindennapos hasznlati eszkzknt munkra vagy szrakozsra is. A szemlyi szmtgpek ilyen mret elterjedse, szinte a tudomny minden terletre alkalmazhatv tette, napjainkban pedig kijelenthetjk, egyes ellenvlemnyek ellenre is, hogy nlklzhetetlen a modern kutats minden terletn, a mrnki tudomnyok tern pedig alapvet munkaeszkz. A szmtgpes tervezs (Computer Aided Design a tovbbiakban CAD), vagy ms nven Szmtgppel Segtett Tervezs, egy nagyon szles fogalomterlet. A knyv, amelyet az olvas a kezben tart, a Sapientia Magyar Tudomnyegyetem mechatronika szakn oktatott Szmtgpes Tervezs tantrgy eladsanyagt igyekszik rott formba nteni. Az itt bemutatott, illetve oktatott anyag csupn egy kis rsze a CAD-nek s a gpszetben alkalmazott szmtgpes tervezsnek is. Az elads clja alapszinten megismertetni az Autodesk AutoCAD szoftvere alatt alkalmazhat, felhasznli programozi felletek jelen esetben az AutoLisp ltal nyjtott lehetsgeket, valamint a parametrikus modellez programok kzl, az Autodesk Inventor 2009-et. Meg kell jegyeznnk, hogy az emltett programok mellett, a szoftverek magas szint alkalmazsa is folyik az egyetemi oktats minden szintjn, de nem ktelez tananyag formjban. Igen sajtsgos helyzetet jelent az a tny, hogy a romniai oktatsban hasznlt licenszek kizrlag angol nyelv szoftverre szlnak, a Sapientia Egyetemen az oktats pedig csak magyar nyelven zajlik. Emiatt az anyag az angol nyelv utastsok, parancsok mellett azoknak a magyar megfeleljt is bemutatja, a parametrikus modellezshez kapcsold fogalmakat pedig magyarul kzli. Ebbl kifolylag helyenknt kiss szokatlan az angolmagyar fogalmak ltszlagos keveredse, de ez elkerlhetetlen az angol nyelv szoftverek magyar nyelven trtn oktatsnl. A jelen knyv feladatokat nem tartalmaz, hanem gyakorlati pldkon keresztl igyekszik a legrvidebb ton a legtbb elmleti ismeretanyagot tadni az olvasknak. Az Inventorban csupn a testmodellezs alapvet parancsait s skrajzbl csupn a nzetek ksztsnek alapvet lpseit ismertetjk. A skrajz teljes ismertetse, a szerelsi modellezs, bemutatk ksztse, az Inventor Studio, vgeselem- s dinamikai analzis, az elkvetkez ktetek anyaga. Az AutoLISP elsajttsa lehetetlen az AutoCAD alapos ismerete nlkl. Az els rszben bemutatott AutoLISP ismeretek, szmos hivatkozst tartalmaznak AutoCAD szakkifejezsekre. Ezrt a szerz, e knyv forgatsa eltt, az AutoCAD brmelyik vltozatnak alapos elsajttst ajnlja elszr.

7

Elsz

A jelen knyvet a szerz elssorban az oktats tmogatsnak cljbl lltotta ssze, de oly mdn, hogy azt bizalommal forgathatjk, azok a legklnbzbb szakosts mrnk szakemberek is, akik az ismereteiket szeretnk bvteni a szmtgpes tervezs ezen a kt sajtsgos terletn. Marosvsrhely, 2009.

A szerz

8

1. AutoLISP1.1. Az AutoCAD programozhatsgaAz AutoCAD egyik legrgebbi s legelterjedtebb szmtgpes tervezi (CAD) program. Legels megjelent vltozattl kezdve, a program fejleszti igyekeztek lehetsget adni a felhasznlnak az alapprogram utastsainak bvtsre, a felhasznl ltal ksztett jabb utastsok hasznlatnak lehetsges ttelre. A CAD programoknl hasznlt programozi fellet ltalnosan API vagyis Advanced Programming Interface nven ismert. Ezek kzl a legels, amelyet AutoCAD alatt hasznlni lehetett az AutoLISP, ekkor mg a program lehetsgei korltozottak voltak, ennek felhasznli fellete a DOS opercis rendszer alatt nem volt, vagy csak elenysz mrtkben volt vltoztathat. Az j AutoCAD programok vltozatainak azonban mr szinte minden aspektusa vltoztathat: ActiveX; Visual Basic; AutoLISP s VisualLisp; ObjectARX; Menk mdostsa; DIESEL szveg feldolgozs, pldul llapotsor. Az Active X: OLE 2.0-t hasznlva, script llomnyok, makrk vagy sajt alkalmazsok kszthetk partner programoknak, magas szint programnyelvek segtsgvel, mint Visual Basic 4.0 s C++. A kvetkez hrom fogalom, alapfogalmak az Active X terminolgiban: Azon AutoCAD objektumokat, amelyek elrhetk s mdosthatk az AutoCAD programban, Active X elemeknek nevezzk (vonalak, layerek, szvegstlus, block stb.); Az eljrsok olyan fggvnyek, amelyek hatnak egy Active X elemre; A tulajdonsgok olyan fggvnyek, amelyek egy Active X elem llapotrl adnak informcikat, Az ObjectARX a halad felhasznlknak nyjt inkbb programozsi lehetsgeket: AutoCAD Runtime Extension; DLL (Dynamic Link Library) ; C s C++ nyelven j parancsokat lehet ltrehozni; Kzvetlenl az AutoCAD objektumokat kezeli.

9

AutoLISP

Az AutoLISP alaposabb tanulmnyozsa eltt lssuk, nhny fontos tulajdonsgt: AutoCAD rendszer hatkonysgt nvelheti; Rutin feladatokat automatizlhat; Mdostani lehet rendszervltozkat; Mdostani lehet rajzokat, rajzelemeket; AutoCAD legrgebbi programozi krnyezete; Sok AutoCAD parancs maga is AutoLISP fggvny.

1.2. AutoLISP alapfogalmakAz AutoLISP a LISP programozsi nyelv AutoCAD-re alkalmazott vltozata. A LISP egyik legrgebbi magas szint programozsi nyelv (1960), amelynek tbb vltozata is ltezik: Common LISP, Franz LISP, Mu LISP s X LISP. Az AutoCAD programozsra hasznlt AutoLISP-nek nagyon sok vonz tulajdonsga van mind a kezdk, mind a haladk szempontjbl: - Szintaxisa rendkvli egyszer s pontos. Knnyen megtanulhat mind a Lisp interpretor kirtkelsi alapja, mind a programnyelv szintaxisa. - Interpretor tpus programozsi nyelv, ami azt jelenti, hogy a megrt program interaktv mdon az AutoCAD parancssorbl kiprblhat; - Az AutoLISP egyenesen az AutoCAD programra hat, egyb kls pldul kompiltor segtsge nlkl; - Segti a programozt egyszer fggvnyek megrsra, s ezek sszefzsvel bonyolult, de knnyen rthet programok elksztsben. - Az AutoLISP kdprogram knnyen ttekinthet. - Megengedi ciklusok, teszt s logikai fggvnyek hasznlatt. Az AutoLISP az AutoCAD standard tartozka, minden egyes vltozatban megtallhat, s minden j munkaszesszi indtsakor automatikusan betltdik. A programok a legegyszerbb ASCII szvegszerkesztben (pldul Notepad) megrhatk, de a bonyolult, legmodernebb programozsi felletekre jellemz Visual Lisp-ben is, ami a 2000-es AutoCAD vltozattl a program standard tartozka. Lvn egy interpretor tpus programozsi nyelv, az AutoLISP kifejezsek futtathatk az AutoCAD parancssorbl. Ha az AutoCAD egy nyitott kerek zrjelet olvas be a parancssorbl, akkor rgtn az utna kvetkez karaktersorokat tadja kirtkels vgett az AutoLISP interpretornak. Ugyanaz trtnik felkiltjel ! hasznlata esetn is. Az AutoLISP utastssor egy kerek zrjel-pr (zrjel-prok) kz rt karakterek sorozata. A zrjelben tallhat karakterek sorozata az n. szimbolikus kifejezsekbl, vagy rviden s-kifejezsekbl ll. A s-kifejezsek az AutoLISP progra10

AutoLISP

mok alap utastsai, alapveten zrjelek kz zrt listk formjban hasznljuk ket. Amikor az AutoLISP s-kifejezsekre bukkan, azokat felmri s kirtkeli, a kirtkels eredmnyt pedig visszafordtja az AutoCAD parancssorba. A programozs sorn a leggyakrabban elkvetett hiba a zrjelek nem megfelel szm prostsa: minden kinyitott zrjelet ugyanolyan szm bezrt zrjel kell, hogy kvessen, egybknt az interpretor hibazenetet r ki: "extra right paren on input. Az AutoLISP interpretor mkdst az 1.1. bra szemllteti.

Command: (+ 55 2)

(+ 55 2)

AutoCAD

57

AutoLISP

Command:57 Command:

1.1. bra AutoLISP interpretor mkdse

Az 1.1. brn megfigyelhet, hogy az AutoCAD parancssorba rt nyitott zrjel tadja az utna kvetkez + 55 2 karaktereket az AutoLISP kirtkelnek, kirtkels utn pedig, az AutoCAD parancssorban megjelenik a kirtkels eredmnye, az 57. Az 1.2. brn lthat egy hasonl folyamat abban az esetben, ha a zrjel egy mr fut AutoCAD parancsban jelenik meg. Ebben az esetben az array utasts, egy opci Rectangular/Polar kvet, polar opcit vlasztva s berva, a kvetkez krds a krsokszorozs kzppontjt kri. Ez megadva a 7, 15 koordintj pontokkal, az AutoCAD parancssorban szveg krdezi az elemek szmt. Ha nem 11

AutoLISP

tudjuk, csupn azt, hogy 15 fokonknt vannak az elemek, hasznlhatjuk az AutoLISP ltal nyjtott szmtsi lehetsget: nyitott zrjellel meghvjuk az AutoLISP interpretort s berjuk (/ 360 15). Zrjelet zrva, visszafordul a parancssorban a 360:15 = 24, s az AutoCAD parancssorban az elemek szmt a 24 fogja jelenteni.

Command: array polar 7, 15 (/ 360 15)

(/ 360) 15

AutoCAD24Command: array polar 7, 15 24

AutoLISP

1.2. bra AutoLISP kirtkelsi ciklus

A felkiltjel hasznlata szimblumok s vltozok lekrdezsre alkalmas:

Command:!pi 3.14159 Command:

12

AutoLISP

Atomok s listkKt alapvet AutoLISP objektum ltezik: atom s lista. Az atomok egyszer-, a listk pedig komplex elemek. Ezek az AutoLISP alapelemei. Alapelemek: Listk Atomok sorozata zrjelek kztt Atomok Definci: minden ami nem lista a nyelv eszkzeivel nem bonthat tovbb Konstans atomok Szimblikus atomok Specilis atomok: nil, t AZ ATOM RTKE MAGA AZ ATOM. Konstans atomok: Szmok: egsz (integer), vals (real) szm; 1234, 56.78, 123.56e-3 Karaktersorok (string), ketts aposztrf kztt; abcdefghijk... Kivlasztsi halmaz (selection set); Objektum nv (entity name); llomny-ler (file descriptor). Szimbolikus atomok: Szimbolikus atomok = Vltozk; A vltoz neve betvel kezddik, s brmilyen jel kvetheti, kivtel az elvlaszt jelek; Plda: point1, point2, teljes hossz A vltoz egy rtket jell, trol. Specilis atomok: rtkt nem lehet/szabad felldefinilni; t igaz rtket jelli; nil hamis rtk s res lista (); (atom amely lista is !!!) pi 3.141592; pause \\.

13

AutoLISP

A lista kerek zrjelek kztt elhelyezett, szkzkkel elvlasztott atomok listja: A listk egymsba gyazhatk; Egymsba gyazs szintjeinek nincs korltja; res lista: () vagy nil. Plda:

(1 2 3 5) (11 (2 3) (4 (5 6))) (1 string 1455.6001)Ha a listkat hibsan rjuk be, hibazenetet trit vissza az AutoLISP. Hibs listalehetsgek:

(ez (nincs befejezve) (ez mar)(ket lista) (tul (sok (a)) bezaro) zarojel) )hibasan kezdodik a lista) hianyzik a kezdo zarojel (ez egy list (es egy)) atomLista tpusok: Adatlista: (123 345.56 qwerty 78e-6); Pontlista: 2D pontlista: (0.0 1.0); 3D: (12.3 45.6 0.0); Fggvnylista: (+ 3 4); (setq qq 1.2). Egyszeren eldnthetjk, hogy egy elem atom vagy lista: ha egy elem nincs zrjelben, akkor atom, egybknt mindig lista.

Kirtkels:A kiertkels egy folyamat, amely sorn egy AutoLISP kifejezs feldolgozsra kerl. AutoLISP egy interpretlt nyelv. Az Interpretor agykzpontja az evaluator vagy magyarul a kirtkel, rtelmez. A felhasznl interaktv mdon prbeszdet folytat az rtelmezprogrammal. A kirtkelsi ciklus folyamata: 1. Az rtelmez program beolvas egy s-kifejezst 2. A kifejezst kirtkeli 14

AutoLISP

meghatrozza a kifejezs rtkt mintha fggvny lenne lehetnek mellkhatsok 3. A kifejezs rtkt kirja, majd kezdi az 1. ponttl A hrom lpsnek megfelel egy-egy LISP fggvny: READ, EVAL, PRINT. Ezrt nevezik mg ezt a vgtelen ciklust: READEVALPRINT ciklusnak. Ugyanakkor a beolvass eltt mg kirja a prompt-ot (parancssort):

Command:

Atomok kirtkelseAz atomok egyszer elemek, legtbbszr a sajt rtkkre vannak kirtkelve. Ezek kzl kivtel a szimblum, amelyet a legutoljra hozzrendelt rtkre rtkel ki az Interpretor. Pldul ha az xcb szimblumhoz legutoljra a 2.25553 vals szmot ktttk, akkor az xcb szimblum kirtkelse a 2.2553.

Listk kirtkelseMINDEN KIRTKELEND LISTA ELS ELEME EGY FGGVNY KELL LEGYEN! Az AutoLISP els lpsben minden lista els elemt elemzi, ha ez nem egy fggvny, hibazenetet kld. A lista fggvny utn kvetkez elemei a fggvny argumentumai. A msodik lpsben az AutoLISP a fggvnyt rtkeli ki, mint utastssorozatok egymsutnisgt. Pldul a + fggvny kirtkelst szvegben gy rhatnnk le: Keresd meg a lista argumentumaiknt szerepl tbbi elem rtkeit. Mikor megvannak, add ket ssze s fordtsd vissza az sszeads eredmnyt, mint a lista kirtkelt vgeredmnyt. Harmadik lpsknt kirtkeli az els argumentumot, ideiglenesen trolva annak az rtkt. Megkeresi, hogy ltezik-e mg argumentum a listban, ha igen kirtkeli azt is, s jra keresi, hogy ltezik-e mg argumentum, mindig kirtkelve azt s ideiglenesen trolva azokat az rtkeket. Negyedik lpsben, ha mr nincs kirtkelend argumentum, az AutoLISP interpretor befejezi a fggvny utastssorozatt, pldul egy sszeadssal, a + fggvny esetben, s visszafordtja annak az rtkt. Nzzk pldaknt egy bonyolultabb lista kirtkelsi ciklust:

(+ 2 (+ 2 3))

15

AutoLISP

Els rnzsre azt mondannk, hogy valsznleg bellrl fog kifele rtkelni az interpretor. Tveds! Az AutoLISP Interpretor kivtel nlkl mindig balrl jobbra vgzi el az rtkelst! Els lpsknt egy lista rtkelsnl mindig egy fggvnyt keres: (+ ... A + fggvny utastssorozatt kvetve keresi az argumentumokat, sorjban kirtkelve azokat. Az els argumentum az a 2-es atom. Ezt kirtkeli s ideiglenesen trolja. Keresi a harmadik elemet, amely egy jabb argumentum, a mi esetnkben egy lista. Mit tesz egy listval? Keresi az els elem formjban a fggvnyt, amelynek az utastssorozatt az elzvel azonos mdon ngy lpsben vgrehajt, vgeredmnyknt visszafordtva az 5-t s ideiglenesen trolva azt, mint a lista msodik argumentumt. Nem tallvn jabb argumentumokat, vgrehajtja a kirtkelsi ciklus negyedik lpst, visszafordtva az argumentumok sszegt, a 7-et. Egy kirtkelhet lista formja, mindig az albbi kell legyen: (fuggveny argumentum1 argumentum2 ... argumentumn) Kztelez mdon mindig egy fggvnnyel kezddik, ha nem, akkor az AutoLISP hibazenetet ad, tudatva, hogy az els elem nem fggvny, meglltva a kirtkelst.

Nil kirtkelseA nil az AutoLISP egyik kivteles eleme. Amg az elemek vagy atomok, vagy listk, a nil lehet mindkett egytt, atom s lista is. Listaknt kifejezhet gy, mint () res lista. Logikai kirtkelsben pedig hamisat jelent.

A kirtkels meglltsaA quote fggvny egyetlen argumentumot enged meg, ezt kirtkeletlenl fordtja vissza. Hasznlata: olyan esetekben, amikor egy atom vagy lista kirtkelst meg akarjuk lltani. Plda:

Command:(quote (1.1 2.2 3.3)) (1.1 2.2 3.3)).Termszetesen szrevehet, hogy a quote fggvny nlkl az AutoLISP hibt zenne, mivel a msodik listban nem ltezik egy fggvny sem. A quote helyett a jel is hasznlhat:

Command:(1.1 2.2 3.3) (1.1 2.2 3.3)16

AutoLISP

A hozzrendelsA hozzrendels vagy hozzkts az a specifikus AutoLISP folyamat, amely sorn egy szimbolikus atomhoz vltozhoz egy rtket ktnk hozz. Ez az rtkhozzrendels ideiglenes, adott pillanatban ugyanahhoz a vltozhoz egy ms rtk kthet hozz. A vltoz tpust gy nem szksges meghatrozni. A hozzrendels a setq fggvnnyel vgezhet el. Hasznlata: (setq szimb1 kifej1 szimb2 kifej2 .... szimbn kifejn) Ahol a szimb1 ... szimbn vltozk, a kifej1... kifejn pedig atomok, vagy listk. Plda:

Command:(setq szimbolum 78) 78 Command:!szimbolum 78 Command:(setq szimbolum karaktersor) karaktersor Command:!szimbolum karaktersorMegfigyelhet, hogy a szimbolum nev vltozhoz elszr hozzktttk a 78 egsz szmot. Visszakrdezve a felkiltjellel, visszafordtja a 78-at. Tovbbiakban ugyanazon vltozhoz hozzktjk a karaktersor karaktersor tpus adatot, a tovbbiakban visszakrdezve a felkiltjellel a karaktersor-t fordtja vissza.

Szmadatok tpusaiKt alapvet szmadattpus ltezik az AutoLISP-ben: egsz szmok s vals szmok. A szmadatok tpust egyszeren le is krdezhetjk a type fggvny segtsgvel:

Command:(type 1.0) REALA vals szmok gy ismerhetk fel, hogy tizedespontot tartalmaznak. Az AutoCAD-el ellenttben AutoLISP-en a 1 s +1 kztti vals szmok mindig kell tartalmazzk a tizedespont eltt a 0-t is: 0.025, +0.369.

17

AutoLISP

Command:(type 5) INTAz egsz szmok nem tartalmaznak tizedespontot. rtkk -2 147 483 648 s +2 147 483 647 kztt lehet. Bels rendszerben az AutoLISP 32 biten hasznlja az egsz szmokat, az AutoCAD-el val kapcsolata sorn csupn 16 biten. Emiatt az AutoCAD-be nem vihetk t egsz szmok csak 32 767 s + 32 767 kztt. Ha az intervallumon kvli szmokat akarunk hasznlni, vagy vals formban hasznljuk, vagy a szmtsok sorn nyert rtkeket az tvitel eltt talaktjuk valsakk a float fggvnnyel. Ha egy lista argumentumai csak egsz szmok, akkor a visszafordtott kirtkels is egsz szm lesz. Ha legalbb az egyik argumentum vals szm, akkor a visszafordtott rtk vals lesz.

A kijelzsek pontossga s a bels pontossgAutoLISP-ben a kifejezs implicit pontossga 5 tizedes. A bels pontossga ellenben legkevesebb 14 tizedes pontossg. Ha egy vals szm kijelzse nagyobb pontossggal szksges, mint az implicit 5, akkor azt elbb t kell alaktani karaktersorr, majd a megfelel pontossggal azt kiratni. Az rtos fggvny hrom argumentumot enged meg, amely egy vals szm, egy AutoCAD ltal felismert egysg s a tizedes szmok szmt jelentik. Neve az angol real to string szsszettelbl szrmazik. Szintaxisa: (rtos [mod] ) A mod, a pontossag, valamint az AutoCAD UNITMODE rendszervltozjnak s DIMZIN mretvltozjnak belltstl fgg. A mod s a pontossag egsz szmok, amelyek a vlasztott hosszmrtkegysget s a pontossgot hatrozzk meg. Az rtelmezhet md belltsok a kvetkezk: Md rtke Karaktersor formtuma 1 Tudomnyos 2 Tizedes 3 Mrnki (lb s tizedes hvelyk) 4 ptszeti (lb s a hvelyk trtrsze) 5 Trt Plda:

Command: (rtos 10 2 10) 10.0000000000A gyakorlatban szinte kizrlag a md 2-es belltst hasznljuk, amint azt a fenti plda is mutatja. 18

AutoLISP

1.3. AutoCAD pontok AutoLISP-ben1.3.1. Az AutoCAD pontok trolsi formjaAz AutoCAD program a sajt adatbzisban Descartes-koordinta rendszert hasznl a kt- s hromdimenzis pontok lersra. Az AutoLISP az AutoCAD pontot egy vals szmokbl ll listval rja le. Egy hromdimenzis AutoCAD pont hrom egymstl fggetlen szmbl ll, amelyek az X, Y s Z tengelyre vettett tvolsgok. Az AutoCAD-ben nagyon sokflekppen adhat meg egy pont koordintja: abszolt-, relatv-, vagy polriskoordintkban, vagy akr object snap formjban is. Az AutoCAD adatbzisban azonban csupn hrom szm formjban van trolva. Az 1, 2, 3 koordintj pontot az 1.3. bra szemllteti.

X = 1.0

Y = 2.01.3. bra Az 1, 2, 3 koordintj pont

Z = 3.0

Ez a pont AutoLISP-ben hrom vals szmbl ll lista, ahol az els elem az X koordinta, a msodik az Y s a harmadik a Z (1.4. bra).

(1.0

2.0

3.0)

1.4. bra Az 1, 2, 3 koordintj pont AutoLISP lista formjban

Lista ksztshez a list vagy quote fggvnyt hasznlhatjuk. Pldaknt lssuk ezek hasznlatt az elbb szemlltetett pont esetben:

Command:(quote (1.0 2.0 3.0)) (1.0 2.0 3.0)A list fggvny estben a lista argumentumaibl egy lista lesz a kirtkels eredmnye.

Command:(list 1.0 2.0 3.0) (1.0 2.0 3.0).

19

AutoLISP

1.3.2. A listk elemeihez val hozzfrsEgy AutoLISP lista a szmtgp memrijban binris faknt van jelen. Ennek a binris fnak brmely gazata egy csompont. A binris fa cscsa a gykrcsompont. Innen kezdve az AutoLISP lista struktrja csompontonknt sztszedhet. Alapveten minden csompont kt gra bomlik: a lista els eleme s a lista az els elem nlkl (1.5. bra).

Lista gykere

els elem

lista els elem nlkl

1.5. bra A gykr-csompont s binris fa els elagazsa

Pldaknt az 1.6. brn nzzk meg az (55.0 26.0 11.0) lista teljes legazst a binris fban.

(55.0 26.0 11.0)

55.0

(26.0 11.0)

26.0

(11.0)

11.01.6. bra Plda egy lista lebontsra

()

Az AutoLISP a binris gazat mindkt elemt elrheti a car s a cdr fggvnyek segtsgvel (1.7. bra).

20

AutoLISP

lista gykr-csompontja

car

cdr

1.7. bra A car s cdr fggvnyek hasznlata egy lista binris gainak elrsre

A car fggvny egy lista els elemt fordtja vissza kirtkelsknt:

Command:(car (list 2.0 1.0 3.0)) 2.0A cdr fggvny egy listbl visszafordtja listt az els elem nlkl.

Command:(cdr (list 2.0 1.0 3.0)) (1.0 3.0).

plista (1.0 2.0 3.0) (car plista) 1.0 (cdr plista) (2.0 3.0) (cdr (cdr plista)) (3.0) (cdr (cdr (cdr plista))) ()

(car (cdr plista)) 2.0 (car (cdr (cdr plista))) 3.0

1.8. bra Egy AutoCAD pont koordintihoz val hozzfrs

21

AutoLISP

Mindkt fggvny az argumentumban szerepl listt vagy a vltozt, amihez egy listt ktttnk, nem bontja le vglegesen, csupn visszatrti a mr emltett rszeket. Egy AutoCAD pont X, Y, Z koordintihoz val hozzfrst az 1.8. bra szemllteti.

1.4. AutoLISP s az AutoCAD utastsokMint mr emltettk az AutoLISP egyik risi elnye, hogy interpretor tpus programozsi nyelv. Interaktv mdon meghvhat a kirtkelsi modul brmely AutoCAD utasts kzben, vagy berva az AutoLISP utastst, az rgtn lthat az AutoCAD programban. Nagyon fontos, hogy az AutoLISP programon bell lehetsg van brmely AutoCAD utastst is hasznlni! A command fggvny, amelynek brmennyi argumentuma lehet, tudatja az AutoCAD-el, hogy az argumentumaiban lev kifejezsek AutoCAD utastsok. Ekkppen a command fggvny argumentumai karaktersorok s vltozok lesznek. Pldul:

Command:(command line 1, 1 5, 5 ) Command:nilA kirtkels eredmnye egy egyenes lesz az 1, 1 s 5, 5 koordintj pontok kztt. A nil visszafordtsa azt jelenti, hogy az AutoLISP egy AutoCAD utastssal fejezte be, s ennek a visszafordtott kirtkelse nem lehet ms, mint nil. A legutols argumentum, a egy ENTER-nek felel meg. Vagy:

Command:(setq pont1 (list 1.0 1.0 1.0) pont2 (list 5.0 5.0 5.0)) Command:(command line pont1 pont2 ) Command:nilA command fggvny hasznlata rendkvl egyszer: brmely AutoCAD utasts beprogramozhat egy AutoLISP programsorba, ha elszr kiprbljuk magt az utastst s a parancsban lev, illetve berand szveget karaktersorknt, vagy az rtkeket szmadatknt a command fggvny argumentumaiknt rjuk be. A pause szimblum lehetsget ad a felhasznlnak egy AutoCAD krs futtatsra. Hasznlata kizrlag a command fggvnyen bell trtnhet csak.

22

AutoLISP

1.5. Interaktv adatbevitel AutoLISP alattAz AutoLISP-nek lteznek olyan fggvnyei, amelyek lehetv teszik a kirtkels meglltst s megvrjk egy vagy tbb felhasznli adatbevitelt (egsz szm, vals szm, pont stb.), majd utna folytatdik a kirtkels. Ezek a fggvnyek a szkpzs szempontjbl eltagknt a get- sztaggal kezddnek s uttagknt a bekrt adat tpusval: getpoint, getreal, getdist, getstring stb. Ebben a fejezetben a getpoint s a getdist fggvnyek hasznlatt mutatjuk be, a tbbi fggvnyt a Gyakran hasznlt AutoLISP fggvnyek cm fejezetben (1.17. fejezet) mutatjuk be. A getpoint fggvny lehetv teszi a kirtkels meglltsa mellett egy AutoCAD pont valamilyen megengedett formban val kijellst, bevitelt. Pldaknt:

Command:(getpoint) 1,1,2 (1.0 2.0 3.0)A getdist fggvny, kt AutoCAD pont ltal meghatrozott tvolsg bevitelt teszi lehetv. Opcionlisan megenged egy karaktersort is argumentumknt. Plda:

Command:(setq tav1 (getdist)) 1,1 Second point:2,2 1.141421 Command:!tav1 1.41421opcionlis karaktersorral pedig:

Command:(getpoint Kerem az elso pontot:) Kerem az elso pontot:1,1 (1.0 1.0 0.0)

1.6. Sajt AutoLISP fggvnyek ltrehozsaA ltez bels AutoLISP fggvnyek mellett lehetsg van sajt, a felhasznl ltal definilt fggvnyek elksztsre, amelyben a mr ltez bels vagy elzleg ltrehozott sajt fggvnyek is hasznlhatk. A defun fggvny szintaxisa a kvetkez:

23

AutoLISP

(defun ( / A defun fggvny egy szimb nev fggvnyt definil (nem szabad kzvetlenl idzjelbe tenni). A fggvny nevt az argumentumok listja kveti (amely kitltetlen is lehet), majd ezt opcionlisan egy trtjel utn a fggvny egy vagy tbb loklis szimblum kvetheti. A trtjelet, az els loklis szimblumtl s az utols argumentumtl legalbb egy-egy szkzzel el kell klnteni. Ha a fggvnynek nem adunk meg sem argumentumot, sem loklis szimblumot, akkor a fggvny nevt egy res zrjelprnak kell kvetnie. Az albbi pldk az argumentumlistk hasznlatnak lehetsges helyes s egy nem megengedett vltozatt szemlltetik:

(defun (defun (defun (defun

fug fug fug fug

(x y)...) kt argumentuma (/ a b)...) kt loklis szimbluma (x / ideigl)...)egy argumentum s egy loklis szimblum ()...) sem argumentum, sem loklis szimblum

Azonos nvvel nem definilhat tbb argumentumot egy fggvnyhez, azonban egy loklis vltoz neve azonos lehet egy msik loklis vltoz vagy egy argumentum nevvel, mint pldul:

(defun fubar ( a a / b ). . . ) (defun fubar ( a b / a a b ). . . )

nem megengedett hibtlan

Az argumentumok s loklis szimblumok listjt a fggvny vgrehajtsa sorn kirtkelsre vr egy vagy tbb kifejezs kveti. Ha az argumentumok/szimblumok listban ugyanaz a ttel tbbszr is szerepel, akkor az AutoLISP minden nv els elfordulst hasznlja fel, a tovbbiakat pedig figyelmen kvl hagyja. A defun fggvny az ltala definilt fggvny nevvel tr vissza. Az gy definilt fggvny hvsakor az AutoLISP kirtkeli az argumentumait, s hozzrendeli az argumentumokat a szimblumokhoz. A fggvnyen belli loklis szimblumok hasznlata a kls szinteken hozzjuk tartoz rtkeket nem befolysolja. A fggvny az utolsknt kirtkelt kifejezs eredmnyvel tr vissza. A fggvny minden elz kifejezsnek csak mellkhatsa van. Maga a defun fggvny a definilt fggvny nevvel tr vissza. Az albbi plda j fggvnyt hatroz meg a defun fggvny segtsgvel, s bemutatja az j fggvnyek ltal visszaadott rtkeket:

(defun minusz20 (- 20 x) ) minusz20 10) minusz20 72.5)24

(x)eredmnye MINUSZ 20 eredmnye -10 eredmnye 52.5.

AutoLISP

Soha ne hasznljuk beptett fggvnyek vagy szimblumok nevt szimb elnevezsknt, mivel ebben az esetben a beptett fggvny tbb nem lesz elrhet. A beptett, valamint az elzleg definilt fggvnyek listjt az atoms-family fggvny segtsgvel kaphatjuk meg. A defun egy specilis esete az, amikor a ltrehozott fggvnyt hasznlni lehet, mint brmilyen AutoCAD utastst, zrjel hasznlata nlkl. Az j sajt parancsfggvny gy hozhat ltre, hogy a definils sorn a fggvny neve el egy c: jelet tesznk. Ebben az esetben a ltrehozand fggvny nem hasznlhat argumentumokat. Plda:

(defun c:bre () (setq bp (getpoint Valassza ki a torespontot !)) (command Break bp @) ) Command:bre Valassza ki a torespontot! Command:nilMegfigyelhet, hogy a parancsfggvnyt gy kell meghvni, mint brmely AutoCAD utastst! A parancssorba egyszeren irjuk be a fggvny nevt s adjunk egy Entert!

Helyi s globlis vltozkAz AutoLISP programok hasznlata sorn gyakori eset, amikor ugyanazt a fggvnyt egy AutoCAD szesszi alatt tbbszr is hasznlni kivnjuk. Ilyenkor a setqval megkttt vltozk, ha nem voltak a sajt fggvny definilsakor helyi vltozknt meghatrozva, akkor mindig az elz programfuttats sorn hozzkttt utols rtkkel indulnak. Legtbb esetben ez slyos hibkhoz vezet. A defun szintaxisban tallhat helyivaltozok ppen ezt a clt szolgljk: a sajt fggvny ltrehozsakor az itt feltntetett vltozk minden futtats utn visszanyerik azeltti rtkket. Az sszes tbbi vltoz, amely kirtkelsre kerl, az utols hozzkttt adattal lp ki a sajt fggvny futtatsa utn. A globlis szimblumokhoz brmelyik fggvny hozzfrhet, illetve azokat mdosthatja. A globlis szimblumok tovbb brmely kifejezsben felhasznlhatk. A loklis szimblumok s az argumentumok csak az ket definil fggvny (s az ezen fggvnybl hvott fggvnyek) kirtkelse sorn brnak jelentssel. A fggvnyek argumentumai loklis argumentum mdjra viselkednek: a fggvny megvltoztathatja rtkket, de a fggvnybl trtn kilpst kveten ezek a vltoztatsok elvesznek. Plda:

25

AutoLISP

(setq helyivaltozo 10) (defun fuggveny (/ helyivaltozo) (setq helyivaltozo 3) (setq valtozo (+ helyivaltozo 3)) ) Command:6 Command:!valtozo Command:6 Command:helyivaltozo Command:10

1.7. Listakezel fggvnyekEbben az fejezetben nhny alapvet listakezel fggvny hasznlatt ismerhetjk meg. A length fggvny egy lista elemeinek szmt fordtja vissza egsz szm formjban. Szintaxisa: (length ). Plda:

Command:(setq lista1 (list 1 jj lp piros 0.1) Command:(length lista1) 6Az nth fggvny egy lista n-ik elemt trti vissza kirtkelsknt. Szintaxisa: (nth ) ahl az arg egy egsz szm 0 s n-1 kztt, ha a lista hossza n. Plda:

(setq lista2 (list ttt 78 56 8.2)) (nth 0 lista2) ttt (nth 2 lista2) 56.Az apply fggvny tad egy argumentumlistt egy fggvnynek. Szintaxisa: (apply ).

26

AutoLISP

Plda:

(apply 9.

+

(1 2 3))

A mapcar fggvny a fuggveny kirtkelsnek eredmnyvel tr vissza, oly mdon, hogy a listk elemeit a lista1-tl a listan-ig egyenknt a fggvny argumentumaiknt kezeli. (mapcar ... ) A listk szmnak egyeznie kell a fuggveny ltal ignyelt argumentumok szmval. Plda:

(setq a 1 b 2 c 30) (mapcar '1+ (list a b c)) (2 3 31).

1.8. AutoLISP program-llomnyokEddig azt lthattuk, hogy az AutoCAD parancssorbl hogyan lehet AutoLISP utastsokat futtatni. Komplex kifejezseket tartalmaz fggvnyek esetn ez a mdszer nem hasznlhat, ilyenkor egy szvegszerkeszt hasznlata ajnlott, a ltrejtt llomnyt pedig .lsp kiterjesztssel mentjk el. A szvegszerkesztben megrt fggvnyt lehet utlag szerkeszteni, javtani. Az .lsp kiterjeszts llomnyokat be lehet tlteni az AutoCAD program al az appload utastssal. Miutn betltttk az llomnyt, a benne tallhat fggvnyek futtathatk a mr ismert mdon. A gyakran hasznlt programok betlthetk egy specilis llomnyba az acad.lsp nev llomnyba. Ez minden AutoCAD szesszi sorn automatikusan betltdik s a benne tallhat fggvnyek brmikor indthatk. Az AutoLISP programok szerkeszthetk, futtathatk s kereshetk a hibk, az AutoCAD-ben megtallhat VisualLISP szerkesztben. Ebben a szerkesztben magas nyelv programozsra jellemz programoz-felleten soronknt futtathatk a bonyolult fggvnyek, megllthat a kirtkels, vizulisan ellenrizhet az egyes vltoz pillanatnyi rtke, szintaxisellenrzs s hibakeress vgezhet. Megjegyzs: az AutoLISP programokon bell megengedett a kommentrok hasznlata. A ; jelet hasznlva brmilyen magyarzatot a programba lehet rni. Ha egy sorba ; jelet runk (abban a sorban) az utna kvetkez jeleket, karaktereket az AutoLISP nem veszi figyelembe, s gy nem kerlnek kirtkelsre.

27

AutoLISP

1.9. Logikai s egyenlsgi tesztekA feltteles kifejezsek ellenrzik egy AutoLISP program futst. Az 1.9. bra egy AutoLISP program elgazst szemlltet.

lltsd be az x rtkt

x = Ez en vagyok nil vagyis hamis A fggvny (z) ga

T vagyis igaz

A fggvny (y) ga

1.9. bra Egy AutLISP programelgazs

A fenti diagrammban, ha az x vltoz rtke az Ez en vagyok karaktersor, akkor a program az y gon, ellenkez esetben a z gon fog tovbbmenni. Az if s cond fggvnyek feltteles tesztfggvnyek, amelyek az AutoLISP programelgazsok kezelsre szolglnak. Az if fggvny mkdst az albbiakkal szemlltethetjk:

(if (visszafordtok T) (akkor tedd ezt) (ha nem akkor tedd ezt) )Az if fggvny szintaxisa: (if [akkor-kif] [egyebkent-kif]) Ez a fggvny felttelesen rtkeli ki a kifejezseket. Ha a feltetel-kif rtke nem nil, akkor az akkor-kif kifejezs kerl kirtkelsre, ha igen, akkor az egyebkent-kif kifejezs. Az utols argumentum (egyebkent-kif) el is hagyhat. Az if fgg-

28

AutoLISP

vny a kivlasztott kifejezs rtkvel tr vissza; amennyiben az egyebkent-kif hinyzik s a feltetel-kif rtke nil, az if fggvny nil rtkkel tr vissza. Pldaknt:

(if (= 77 3) "IGEN!!" "nem.") (if (= 6 (+ 4 2)) "IGEN!:") (if (= 1 (+ 9 4)) "IGEN:!")

eredmnye "nem." eredmnye "IGEN eredmnye nil.

Mivel az if fggvnynek csupn hrom argumentuma lehet, amibl az egyik ppen a tesztkifejezs, a msodik a T llapotra kirtkelt argumentum, a harmadik pedig a nil logikai llapotra kirtkelt argumentum, tbb argumentum kirtkelse lehetetlen. Erre hasznljuk a progn fggvnyt, amely gymond egy argumentum al gyjti az egyes logikai elgazs al kerl, akrmilyen nagyszm kifejezst. Pldul:

(if (> 3 2) (progn (setq wer 12) (command line pt1 pt2) (command zoom e ) ) (setq wer 789) )A cond fggvny az AutoLISP programnyelv elsdleges feltteles fggvnye. Szintaxisa: (cond ( . . .) ( ...) . . .) Ez a fggvny argumentumknt tetszleges szm listt fogad el. Minden lista els elemt kirtkeli (a megadott sorrendben), egszen addig, amg valamelyik rtke nem klnbzik a nil rtktl. Ekkor kirtkeli a listban a teljesl felttelt kvet kifejezseket, s az allista utols kifejezsnek rtkvel tr vissza. Amennyiben az allistban csak egyetlen kifejezs szerepel (azaz az eredmeny hinyzik), a fggvny a felttel kirtkelsnek eredmnyvel tr vissza. A cond fggvny esetsztvlasztsos (case tpus) fggvnyknt hasznlhat. ltalnos gyakorlat a T hasznlata utols (alaprtelmezs szerinti) feltetel kifejezsknt. Nzznk egy pldt. Legyen adott az s-szimblumban egy, a felhasznltl vlaszknt kapott karakterlnc. Az albbi fggvny leellenrzi a felhasznl ltal adott vlaszt, s 1-gyel tr vissza, ha a karakterlnc I vagy i, illetve 0-val, ha a vlasz N vagy n; egyb esetekben a fggvny eredmnye nil. Pldul:

29

AutoLISP

(cond ((= s "I") ((= s "i") ((= s "N") ((= s "n") (T nil) )

1) 1) 0) 0)

1.10. Ciklusszervezs AutoLISP-benA ciklusok szervezse brmely programozsi nyelv egyik elengedhetetlen eszkze. A ciklusok kt rszbl llnak: a ciklusfejbl s ciklusmagbl. A ciklusfej tartalmazza a fggvny nevt s a ciklus mkdsnek, illetve befejezsnek felttelt. A ciklusmag azon kifejezsek sszessge, amelyekre a ciklusban ismtelten viszszatrnk. A ciklusban mdostjuk a kifejezsben szerepl vltozk rtkeit, s ugyanazokat a mveleteket hajtjuk vgre ezekkel a mdostott rtkekkel. Ciklusszervez fggvnyekkel eltesztel ciklusokat kszthetnk. Ez azt jelenti, ha a ciklusfggvny kerl kirtkelsre, az els lps egy felttelvizsglat lesz, hogy teljeslnek-e a ciklusmagban lv kifejezsek kirtkelsnek felttelei. Ha igen, akkor megtrtnik a ciklusmagban tallhat kifejezsek kirtkelse. Ha pedig nem, akkor a ciklusmagot kihagyja s folytatja a kvetkez kifejezs kirtkelsvel. A repeat, while s a foreach az AutoLISP ciklusfggvnyei. A hrom fggvny kztt lnyeges klnbsg van tartalmilag s formailag is. A legegyszerbb a repeat fggvny: (repeat ). A fggvny annyiszor ismtli a kifejezssorokat, amennyi a hanyszor argumentum (amely egy egsz szm vagy egy egsz szmra rtkelend kifejezs) rtke. Egy lista minden elemnek kirtkelst egy kifejezsre, a foreach fggvny segtsgvel tehetjk meg. (foreach ) Ez a fggvny a listn vgighaladva, annak minden elemt hozzrendeli a nevhez, s a listban lv minden elem esetre mindegyik kifejezst kirtkeli. A fggvnyhvsban tetszleges szm kifejezs adhat meg. A foreach fggvny az utols kifejezs kirtkelsnek eredmnyvel tr vissza. Pldul:

(foreach lovak '(EZ EGY PELDA) (print lovak)) EZ EGY PELDA PELDA30

AutoLISP

A foreach fggvny csak az utoljra kirtkelt kifejezs eredmnyvel tr viszsza, ezrt jelenik meg a kirs utn mg egyszer a PELDA karaktersor. A harmadik ciklusfggvny a while, a legkomplexebb s egyben egyik leghasznltabb is: (while < kifejezesek. . .>) Ez a fggvny kirtkeli a feltetel kifejezst, s ha rtke nem nil, akkor a tbbi kifejezesek-et is kirtkeli, majd jbl kirtkeli a feltetel kifejezst. Ezt addig folytatja, amg a feltetel rtke nem nil. A while fggvny az utols kifejezs legutols rtkvel tr vissza. Pldul:

(setq x 1) (while (