Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Grafikus tervezőrendszerek programozása Iványi Péter.

Hasonló előadás


Az előadások a következő témára: "Grafikus tervezőrendszerek programozása Iványi Péter."— Előadás másolata:

1 Grafikus tervezőrendszerek programozása Iványi Péter

2 Lisp programozási nyelv Kifejlesztése: 1960-ban, John McCarthy, Massachusetts Institut of Technology LISt Processing – Lista feldolgozás Fortran –nal egyidős Szakértői rendszerekben, mesterséges intelligencia kutatásban használj(t)ák „Programozható programnyelv”-ként is szokták definiálni

3 AutoCAD „programozása” AutoCAD egy alap CAD rendszer A CAD rendszer szinte minden aspektusa módosítható –ActiveX –Visual Basic –AutoLisp és Visual Lisp –ObjectARX –Menük módosítása –DIESEL – szöveg processzálás, pl. státusz sor

4 AutoCAD és ActiveX Microsoft COM (Component Object Model) technológiára épül A rajzok és rajz elemek megosztása más alkalmazásokkal, Word, Excel Feladatok automatizálása Több programozási nyelven elérhető –Visual Basic –Java –C++

5 AutoCAD ActiveX Automation Interface

6 AutoCAD és ObjectARX AutoCAD Runtime Extension DLL (Dynamic Link Library) C és C++ nyelven új parancsokat lehet létrehozni Közvetlenül az AutoCAD objektumokat kezeli

7 AutoLisp AutoCAD rendszer hatékonyságát növelheti Rutin feladatokat automatizálhat Módosítani lehet rendszerváltozókat Módosítani lehet rajzokat, rajz elemeket AutoCAD legrégebbi programozói környezete Sok AutoCAD parancs maga is AutoLisp függvény

8 ObjectARX void chngAtt() { ads_name entres; ads_point ptres; AcDbObjectId _Id, _attId; AcDbObjectIterator *pIttr = NULL; if(acedEntSel("Select a Block Reference", entres, ptres) != RTNORM ) { //Selection failed return; } acdbGetObjectId(_Id, entres); AcDbObjectPointer pRef(_Id,AcDb::kForRead); if(pRef.openStatus()!=Acad::eOk) { //Open failed return; }

9 ObjectARX pIttr = pRef->attributeIterator(); while(!pIttr->done()) { _attId = pIttr->objectId(); AcDbObjectPointer pAtt(_attId,AcDb::kForWrite); if(pAtt.openStatus()==Acad::eOk) { pAtt->setTextString("We changed this"); break; } pIttr->step(); } delete pIttr; }

10 Visual Basic Option Explicit Sub chngAtt() Dim objEnt As AcadObject Dim objRef As AcadBlockReference Dim varAtts As Variant Dim objAtt As AcadAttributeReference Dim emptyPt As Variant ThisDrawing.Utility.GetEntity objEnt, emptyPt, "Select Block: „ If objEnt.ObjectName = "AcDbBlockReference" Then Set objRef = objEnt If objRef.HasAttributes Then varAtts = objRef.GetAttributes Set objAtt = varAtts(0) objAtt.TextString = "We changed this" End If End Sub

11 AutoLisp (defun C:chngAtt (/ Mainent entList entAtt entNewAttVal) (setq Mainent (entsel)) (setq entList (entget (car Mainent))) (setq entAtt (entget (entnext (cdr (assoc -1 entList))))) (setq entNewAttVal (subst (cons 1 "We changed this") (assoc 1 entAtt) entAtt) ) (entmod entNewAttVal) (entupd (car Mainent)) (princ) )

12 Visual Lisp Az AutoLisp „új generációja” Nem teljesen kompatibilis –Foglalt szimbólumok nem újradefiniálhatók –Függvények nem listák Fejlesztő környezet –Editor –Szintaxis ellenőrzés és szintaxisnak megfelelő szinezés –Debugger hibakereséshez –Több file menedzselése

13 Lisp L anguage of I nfinite S tupid P arantheses (megszámlálhatatlan ostoba zárójelek nyelve) ; megjegyzés (elem1 (elem2 (elem3 elem4) (elem5 ‘(elem6. elem7)) )

14 Lisp megjegyzések Egyszerű megjegyzés: pontos vesszőtől ( ; ) a sor végéig Több soros megjegyzés: két jel közötti rész a megjegyzés ;| szöveg |;

15 Lisp megjegyzések példa ; Megjegyzés teljes sorban (elema elemb elemc) ; sorvégi megjegyzés (elem1 ;| megjegyzés |; (elem2 elem3)) (elem4 ;| több soros megjegyzés, akár Lisp is lehet (elem1) |; elem5)

16 A nyelv jelkészlete Speciális jelek ( Kezdő zárójel ) Bezáró zárójel. Pont ‘ Aposztrof ; Pontosvessző Betűk, számok, szimbólumok Elválasztó jelek Szóköz, sor vége, TAB Speciális jelek Kettős aposztrof (”), sztring esetén Vezérlőjelek: backslash ( \ ) „le nem írható jelek esetén”,

17 Vezérlőjelek KódJelentés \\ Backslash ( \ ) karakter \” Kettős aposztrof karakter sztringben \e Escape karakter \n Új sor karakter \r Return karakter \t TAB karakter \nnnnnn oktális kódú jel

18 Jelkészlet példa (elem1 ”adat: \”4\”\n”) (elem2 elem3. elem4) (elem5 ;megjegyzés elem6 elem7 ‘(elem8 elem9) )

19 AutoLisp alapelemek A nyelv programok és adatok leírására egyetlen szerkezetet használ, a John Carthy által kidolgozott szimbólikus kifejezéseket, S-kifejezéseket.

20 AutoLisp alapelemek Alapelemek: –Listák Atomok sorozata zárójelek között –Atomok Definíció: –„minden ami nem lista”, –a nyelv eszközeivel nem bontható tovább Konstans atomok Szimbólikus atomok –Speciális atomok nil, t

21 Konstans atomok Az atom értéke maga az atom. –Számok: egész (integer), valós (real) szám 1234, 56.78, e-3 –Szövegek (string), kettős aposztrof között ”abcdefghijk...” –Kiválasztási halmaz (selection set) –Objektum név (entity name) –File leíró (file descriptor)

22 Szimbólikus atomok Szimbólikus atomok = Változók A változó neve betűvel kezdődik és minden jel követheti, kivétel az elválasztó jelek Példa: point1, point2, teljes_hossz A változó egy értéket jelöl, tárol

23 Speciális atomok Értékét nem lehet/szabad felüldefiniálni t – igaz értéket jelöli nil – hamis érték és üres lista () (atom amely lista is !!!) pi – pause – ”\\”

24 Listák Kerek zárójelek között elhelyezett, szóközökkel elválasztott atomok listája. A listák egymásba ágyazhatók. Egymásba ágyazás szintjeinek nincs korlátja. Üres lista: () vagy nil ( ) ( 1 ( 2 3 ) ( 4 ( 5 6 ) ) ) ( 1 ”text” )

25 Hibás listák (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)) atom

26 Lista típusok Adat lista: ( ”qwerty” 78e-6) Pont lista: –2D: ( ) –3D: ( ) Függvény lista: (+ 3 4) (setq qq 1.2)

27 Kiértékelés LISP = Lista feldolgozás Feldolgozás folyamata = kiértékelés AutoLISP egy interpretált nyelv Interpreter szíve az evaluator = kiértékelő, értelmező A felhasználó interaktív módon párbeszédet folytat az értelmezőprogrammal.

28 Kiértékelési ciklus 1.Az értelmező program beolvas egy S- kifejezlst 2.A kifejezést kiértékeli meghatározza a kifejezés értékét mintha függvény lenne lehetnek mellékhatások 3.A kifejezés értékét kiírja, majd kezdi az 1. ponttól

29 Kiértékelési ciklus A három lépésnek megfelel egy-egy LISP függvény: READ, EVAL, PRINT Ezért nevezik ezt a végtelen ciklust: –read-eval-print ciklusnak A beolvasás előtt még kiírhatja a prompt-ot Parancs: Command:

30 Kiértékelés sorrendje 1.Konstans atom értéke: maga az atom 2.Szimbólikus atom értéke: a szimbólumhoz rendelt értéke 3.Lista esetén függvényként értékeli ki

31 AutoLisp függvények A függvények általános formája: (művelet A... B) így sohasem kérdés hogy melyik művelet hajtódik végre először Ellentétben a matematikai kifejezéssel: * 4 amit csak megfelelő gyakorlás után tudunk megoldani: először a szorzást majd az összeadást hajtjuk végre

32 Kezdjünk el programozni! Az egyik legegyszerűbb számítógép a zsebkalkulátor Egyszerű számítási műveletek: (+ 5 5) (+ -5 5) (+ 5 -5) (- 5 5) (* 3 4) (/ 8 12)

33 Függvény lista kiértékelése A kiértékelés balról jobbra történik Először az argumentumokat értékeli ki, majd a teljes kifejezést A kiértékelés eredménye is egy kifejezés: atom vagy lista !!! Mivel az adat lista és a függvény lista „azonos” ezért megvalósítja a Neumann elvet: adat és program nem különböztethető meg

34 Műveletek egymásba ágyazása Egy művelet argumentuma lehet szám vagy egy másik művelet. Egymásba ágyazás esetén először a legbelső zárójel közötti részt redukáljuk számmá, majd a követkető szintet és így tovább.

35 Kiértékelési példa 1. (* (+ 2 2) (/ (* (+ 3 5) (/ 30 10)) 2)) = (* 4 (/ (* 8 3) 2)) = (* 4 (/ 24 2)) = (* 4 12) = 48

36 Kiértékelési példa 2. (+ 2 (/ 12 4) (* 2 2)) Argumentumok kiértékelése 1. 2=2 2. (/ 12 4)=3 3. (* 2 2)=4 Kifejezés kiértékelése ( )=9

37 Kiértékelési példa 3. (+ 2 (/ 5 10)) Argumentumok kiértékelése 1. 2=2 2. (/ 5 10)=0 !!! Kifejezés kiértékelése (+ 2 0)=2 Ha az összes argumentum integer akkor az eredmény is integer !!!

38 Kiértékelési példa 4. (+ 2 (/ )) Argumentumok kiértékelése 1. 2=2 2. (/ )=0.5 !!! Kifejezés kiértékelése ( )=2.5

39 Kiértékelés elkerülése Kifejezés „szó szerinti, konstansként” való kezelése: –(quote (1 2 3))=(1 2 3) –‘(1 2 3)=(1 2 3) –(1 2 3)=error

40 AutoCAD parancs használata AutoCAD parancsot hajt végre az AutoLISP programból (command argumentumok... ) Vonalat rajzol a 0,0 ponttól vízszintesen (command ”vonal” ”0,0” ”1,0” ””) Az üres sztring ( ”” ) jelentése: a SPACE vagy az ENTER billentyű lett lenyomva Még visszatérünk rá

41 Függvények definíciója (defun szimbólum (arg1 arg2...) kifejezések... ) –szimbólum – a függvény neve –arg1, arg2,... – a függvény argumentumai –kifejezések – a függvény végrehajtása során értékelődnek ki Még visszatérünk rá

42 Példa (defun xy () (command ”vonal” ”0,0” ”1,0” ””) (command ”vonal” ”0,0” ”0,1” ””) )

43 Definiált atomok, függvények listázása A változók alapértéke: nil (speciális atom) Definiált atomok, szimbólumok listázása: (atoms-family 0) Változó definiált-e? (atoms-family 1 ‘(”setq” ”pp”)) Rendszerváltozók lekérdezése AutoCAD paranccsal: setvar


Letölteni ppt "Grafikus tervezőrendszerek programozása Iványi Péter."

Hasonló előadás


Google Hirdetések