Grafikus tervezőrendszerek programozása
-
Upload
cara-jacobs -
Category
Documents
-
view
33 -
download
0
description
Transcript of Grafikus tervezőrendszerek programozása
Grafikus tervezőrendszerek programozása
10. előadás
DCL bevezetés
• DCL = Dialog Control Language
• Párbeszédablakok programozási nyelve
• AutoCAD ablakai is DCL-ben vannak írva
• Például az acad.dcl file
• Hierarchikus felépítésű nyelv
DCL példa
DCL alapok
• A programozható párbeszédpanelek téglalap alakú részekre (zónákra, tile) tagolódnak.
• A zónák önállóan programozhatók, és mozaikszerűen összeépíthetők.
• Vannak passzív zónák, melyek csak megjelenítésre szolgálnak, és vannak aktív zónák is, melyek interaktív adatbevitelre szolgálnak
Hierarchikus fa
Jelkészlet
• A DCL nyelv jelkészlete– Az abécé betűi és a számjegyek– Speciális jelek: { } = _ . : ; " / *
• Sztringen belül bármilyen jel előfordulhat• Megjegyzések (C típusúak):
– // - egy sornyi megjegyzés– /* */ - jelek közötti megjegyzés
Szintakszis 1.• Fejléc dcl_settings : default_dcl_settings { audit = n; }
• Ellenőrzi a DCL file szemantikáját• n értéke:
– 0 : Nincs ellenőrzés– 1 : Hibákat ellenőrzi– 2 : Figyelmeztetéseket ad– 3 : Javaslatokat ad
Szintakszis 2.• Zóna definíciója name : item1 [ : item2 : item3 ... ] { attribute1 = value1; attribute2 = value2; ... }
• Ahol item már elözőleg definiált zóna• A name zóna örökli az összes item zóna
attribútumát (balról – jobbra)• A {} zárójelek közötti rész az attribútumokat
írhatja felül
Szintakszis 3.
• Egy zóna neve csak betűket, számokat és az aláhúzás jelet tartalmazhatja
• Például egy gomb definíciója: button : tile {
fixed_height = true;
is_tab_stop = true;
}
Szintakszis 4.
• Például az alapesetben kiválasztott gomb definíciója:
default_button : button {
is_default = true;
}
• Örökli az előző gomb definícióját és kiegészíti egy új attribútummal
Szintakszis 5.
• Egy definiált zónára hivatkozni is lehet name;
ill. : name {
attribute = value;
}
Szintakszis 6.
• Attribútumok definiálása attribute = value;
• Ahol:– attribute – egy érvényes kulcsszó– value – egy érték ami szöveg vagy
kulcsszó
• A sort a pontosvessző (;) zárja!
Definiált zóna típusok
Egyszerű példa, DCLhello : dialog {
label = ”Hello World Példa”;
: text {
label = ”Hello World!”;
}
: button {
key = ”accept”;
label = ”Rendben”;
is_default = true;
}
}
Egyszerű példa, AutoLisp
(defun hello ( / dcl_id )
(setq dcl_id (load_dialog ”hello.dcl”))
(if (not (new_dialog ”hello” dcl_id))
(exit)
)
(action_tile ”accept” ”(done_dialog)”)
(start_dialog)
(unload_dialog dcl_id)
)
Általános LISP program DCL-el
• DCL file betöltése: load_dialog
• A dialógus definíciójának betöltése: new_dialog
• A dialógus zónáinak beállítása ill. a zónák call-back függvények definíciója: Pl. action_tile
• A dialógus ablak megjelenítése: start_dialog
• A dialógus ablak kitöltése
Név és kor lekérdezése
DCL dialógus ablak
Érvénytelen kor megadása
Végső dilógus ablak
DCL ablak szerkezete 1.nev_dcl : dialog {
label = "Személyes adatok";
: edit_box {
label = "Mi a neved: ";
mnemonic = "N";
key = "nev";
alignment = centered;
edit_limit = 30;
edit_width = 30;
}
DCL ablak szerkezete 2. : edit_box {
label = "Hány éves vagy: ";
mnemonic = "H";
key = "kor";
alignment = centered;
edit_limit = 3;
edit_width = 3;
value = "";
}
DCL ablak szerkezete 3. : button { key = "accept"; label = "Rendben"; is_default = true; fixed_width = true; alignment = centered; }
: errtile { width = 34; }}
Név és kor lekérdezése (AutoLisp)(defun c:nev ( / dcl_id name age ) ; ellenörző függvények ide jönnek (setq dcl_id (load_dialog "name.dcl")) (if (not (new_dialog "nev_dcl" dcl_id)) (exit) ) (set_tile "nev" "Ird ide a neved") (action_tile "nev" "(setq name $value)") (action_tile "kor" "(setq age $value)") (action_tile "accept" "(nev_ell)") (start_dialog) (unload_dialog dcl_id)
(alert (strcat "Az Ön neve " name "\nés kora " age)))
Név ellenőrző függvény
(defun nev_ell ()
(if (or (= (get_tile ”nev”)
”Ird ide a neved”)
(= (get_tile ”nev”) ””)
)
(set_tile ”error”
”Nem adtad meg a neved!”)
(kor_ell)
)
)
Kor ellenőrző függvény
(defun kor_ell ()
(if (< (atoi (get_tile "kor")) 1)
(set_tile "error" "Nem érvényes kor!")
(done_dialog)
)
)
DCG = DCL code generator
DCG 1.
DCG 2.
DCG 3.
DCG 4.
DCG 5.
DCG 6.
DCG 7.
DCG 8.
DCG 9.