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

Hasonló előadás


Az előadások a következő témára: "Grafikus tervezőrendszerek programozása"— 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

9 ObjectARX while(!pIttr->done()) { _attId = pIttr->objectId();
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 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) Bizonyos jelek speciálisan értelmezendők Syntax highlighting, Visual Lisp is hasonlóan csinálja

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”, Speciális jelek ( Kezdő zárójel ) Bezáró zárójel . Pont Aposztrof ; Pontosvessző

17 Vezérlőjelek Kód Jelentés \\ Backslash ( \ ) karakter \”
Kettős aposztrof karakter sztringben \e Escape karakter \n Új sor karakter \r Return karakter \t TAB karakter \nnn nnn 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 Speciális atomok nil, t
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: (123 345.56 ”qwerty” 78e-6) Pont lista:
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. Mivel programozási nyelv ezért valamit csinálnia kell: értékek meghatározása, stb.

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 ( ) = 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 !!! Egész és valós számok közötti viszony

38 Kiértékelési példa 4. (+ 2 (/ 5.0 10)) Argumentumok kiértékelése
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á Függvény argumentum listája lehet üres is

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

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"

Hasonló előadás


Google Hirdetések