1 / 43

Grafikus tervezőrendszerek programozása

Grafikus tervezőrendszerek programozása. Iványi Péter. 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

yagil
Download Presentation

Grafikus tervezőrendszerek programozása

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 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 • Language of Infinite Stupid Parantheses (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 • 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

  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, 123.56e-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– 3.141592 • 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 ) ( 1 ( 2 3 ) ( 4 ( 5 6 ) ) ) ( 1 ”text” 145.67 )

  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: (123 345.56 ”qwerty” 78e-6) • Pont lista: • 2D:(0.0 1.0) • 3D: (12.3 45.6 0.0) • 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 • Az értelmező program beolvas egy S-kifejezlst • A kifejezést kiértékeli • meghatározza a kifejezés értékét • mintha függvény lenne • lehetnek mellékhatások • 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 • Konstans atom értéke: maga az atom • Szimbólikus atom értéke: a szimbólumhoz rendelt értéke • 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: 3 + 5 * 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 • 2 = 2 • (/ 12 4) = 3 • (* 2 2) = 4 • Kifejezés kiértékelése (+ 2 3 4) = 9

  37. Kiértékelési példa 3. (+ 2 (/ 5 10)) • Argumentumok kiértékelése • 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 (/ 5.0 10)) • Argumentumok kiértékelése • 2 = 2 • (/ 5.0 10) = 0.5 !!! • Kifejezés kiértékelése (+ 2 0.5) = 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

More Related