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 6. előadás.

Hasonló előadás


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

1 Grafikus tervezőrendszerek programozása 6. előadás

2 Asszociációs listák Alapesetben két elemű listák listája ( (kulcs1 érték1) (kulcs2 érték2)... ) Például ( (”Isaac Asimov” ”Alapitvány”) (”Frank Herbert” ”Dűne”) (”Ian Fleming” ”Goldfinger”) ) Felhasználás: –Tudás reprezentációra –AutoLisp változók értékeinek tárolására

3 Asszociációs listák kezelése 1. Egy érték lekérdezése (assoc elem lista) Példa (setq lst ‘((a 1) (b 2) (c 3))) (assoc ‘b lst) -> (b 2) (assoc ‘r lst) -> nil A kulcs bármilyen kifejezés lehet (setq lst ‘((a q) ((b) w))) (assoc ‘(b) lst) -> ((b) w)

4 Asszociációs listák kezelése 2. Csak a kulcs első előfordulását adja vissza (assoc ‘b ‘((a 1) (b 2) (c 3) (b 4)) ) -> (b 2) Nem csak két elemű listák lehetnek az elemek (assoc ‘b ‘((a 1 2 3) (b q w e) (c 88 99)) ) -> (b q w e)

5 Lista tagja Ellenőrzi hogy egy elem szerepel-e egy listában (member elem lista) Ha az elem szerepel a listában akkor visszaadja a lista maradékát a kifejezés előfordulásától Példa (member ‘q ‘(a q u a)) -> (q u a) (member ‘b ‘(a q u a)) -> nil (setq lst ‘((a 1) (b 2) (c 3))) (member ‘b lst) -> nil (member ‘(b 2) lst) -> ((b 2) (c 3))

6 Rajzelemek kezelés A rajzelemek kezeléséhez tudni kell a nevét A rajzelem neve: A rajzelem neve nem módosítható Rajzelem nevet nem lehet létrehozni A rajzelem név használható a command parancsban rajzelem kiválasztásra: Az utolsó rajzelem színének pirosra állítása (command ”_chprop” (entlast) ”” ”_color” ”_red” ””) Az utoljára létrehozott rajzelem nevének lekérdezése: (entlast)

7 Rajzelem kiválasztás Egy rajzelem kiválasztása: (entsel [prompt]) Bemenet: –Egy rajzelemet kell kiválasztani a képernyőn A függvény visszatérési értéke egy lista: –A rajzelem neve –A kiválasztási pont Csak egy rajzelem kiválasztását engedi !!!

8 Példa

9 Kiválasztás és transzformáció A nentsel és nentselp függvények hasonlóak az entsel függvényhez de két extra adatot ad vissza –Rajzelem neve –Kiválasztási pont –Lokálisból a globális koordináta rendszerbe való transzformáláshoz szükséges mátrix –A rajzelemet tartalmazó blokkok listája

10 Példa 1. Command: line Specify first point: 1,1 Specify next point or [Undo]: 3,1 Specify next point or [Undo]: 3,3 Specify next point or [Close/Undo]: 1,3 Specify next point or [Close/Undo]: c Command: block Enter block name or [?]: square Specify insertion base point: 2,2 Select objects:

11 Példa 2. Command: ucs Current ucs name: *WORLD* Enter option[New/Move/orthoGraphic/Prev/ Restore/Save/Del/Apply/?/World] : z Specify rotation angle about Z axis : 45 Command: insert Enter block name or [?]: square Specify insertion point or [Scale/X/Y/Z/Rotate/PScale/PX/PY/PZ/PRotate]: 7,0 Enter X scale factor, specify opposite corner, or [Corner/XYZ] : Enter Y scale factor : Specify rotation angle :

12 Példa 3. (setq ndata (nentsel)) ( ; Objektum neve ( ) ; Kiválasztási pont (( ) ; Aktuális koord. ( ) ; rendszerből a világ ( ) ; koord. rendszerbe ( ) ; transzformáló mátrix ) ( ) ; a kiválasztott objektumot ; tartalmazó block )

13 Rajzelemek definíciója A rajzelem nevének ismeretében lekérdezhető a rajzelem definíciója (entget ename) Egy asszociációs listát ad vissza !

14 Példa 1. (command ”_line” ”1,1” ”2,2” ””) (setq e (entget (entlast))) ( (-1. ) (0. "LINE") (330. ) (5. "89") (100. "AcDbEntity") (67. 0) (410. "Model") (8. "0") (100. "AcDbLine") ( ) ( ) ( ) )

15 Példa 2. A rajzelem típusa: (cdr (assoc 0 e)) -> ”LINE” A layer ahol a rajzelem van: (cdr (assoc 8 e)) -> ”0” A vonal kezdőpontja: (cdr (assoc 10 e)) -> ( ) A vonal végpontja: (cdr (assoc 11 e)) -> ( )

16 DXF Az asszociációs lista kulcsai DXF kódok Egy AutoCAD rajz elmenthető DWG és DXF file formátumban DWG – bináris, nem publikált formátum DXF – szöveges formátum A DXF formátum is teljes rajz reprezentáció !

17 Néhány DXF kód KódMegnevezés Entity name 0Rajzelem típusa, szöveges formában 5Rajzelem „handle” 6Vonal típus 7Szöveg típusa 8Layer neve 10Fő pontok, 3D-s pont 11-18Egyébb pontok 40Valós szám, pl. Kör sugara

18 Rajzelemek törlése Egy rajzelem „törlése” –AutoCAD paranccsal: _erase –AutoLisp: (entdel ename) A törölt rajzelem megmarad az adatbázisban így visszaállítható: –undo AutoCAD paranccsal –(entdel ename) Másodszori meghívásával

19 Rajzelemek módosítása (entmod assoc-lista) assoc-lista: Az entget parancs által visszaadott listához hasonló kell legyen A rajzelem típusát nem lehet megváltoztatni. A hivatkozott elemeknek létezniük kell. Pl. blokkok, szövegtípus A parancs ellenőrzést is végez. Komoly hiba esetén nem végez módosítást a rajzelemen.

20 Példa (command ”_line” ”0,0” ”1,1” ””) (setq ent (entget (entlast)) opos (assoc 11 ent) npos ( ) ; helyettesítsük a régi koordinátát new (subst npos opos ent) ) (entmod new)

21 entmake Rajzelem létrehozása: –command –entmake Az entmake függvény argumentuma egy associációs lista, de nem tartalmazza a rajzelem nevét

22 Összetett rajzelemek Összetett rajzelem: –Block –Régi típusú polyline Több rajzelemet is magukba foglalnak A rajzelemek szekvenciális (egymás utáni) elérése: (entnext [ename]) –(setq a (entnext)) : Az első rajzelemet adja vissza –(entnext a) : Az második rajzelemet adja vissza –Stb.

23 Teljes rajz adatbázis átnézése (defun count ( / ent c) (setq ent (entnext) c 0) (while ent (setq c (+ c 1) ent (entnext ent)) ) (princ ”Rajzelemek száma: ”) (princ c) (terpri) )

24 Rajzelem neve és handle A rajzelemek neve minden egyes rajz megnyitásnál megváltozik!!! Szükség lehet állandó hivatkozási névre A handle ilyen név, egy szám szöveges formában A handle-ből visszakapható a rajzelem neve (handent ”89”) ->

25 Felhasználói alkalmazások A rajzelemekhez adat(ok) füzhető(k) Ezek az adatok egy alkalmazáshoz is tartoznak Az alkalmazásokat be kell jegyezni az AutoCAD-ben: (regapp alkalmazás) Például: (regapp ”TEST-DATA”)

26 Felhasználói adatok A felhasználói adatok is tárolódnak a rajzban A felhasználói adatokat is asszociációs listában kell tárolni A listában DXF kódokat kell használni Néhány DXF kód NévMegnevezés 1000Szöveg 1003Layer neve 1005Rajzelem handle 10103D-s pont 1040Valós szám 1070Egész szám

27 Felhasználói adatok, példa (regapp ”TEST-DATA”) (setq lastent (entget (entlast))) (setq exdata '( (-3 ( ”TEST-DATA” (1000. ”Szöveg”) ) ))) ; adatok összefűzése (setq newent (append lastent exdata)) (entmod newent) ; rajzelem definíció és xdata lekérdezése (entget (car (entsel)) '(”TEST-DATA”))

28 Felhasználói adatok, eredmény ( (-1. ) (0. "LINE") (330. ) (5. "89") (100. "AcDbEntity") (67. 0) (410. "Model") (8. "0") (100. "AcDbLine") ( ) ( ) ( ) (-3 ("TEST-DATA" (1000. "Szöveg"))) )

29 Adatok csoportosítása (-3 (”my-app” (1002. ”{”) (1000. ”hossz”) ( ) (1002. ”}”) (1002. ”{”) (1000. ”szélesség”) ( ) (1002. ”}”) )


Letölteni ppt "Grafikus tervezőrendszerek programozása 6. előadás."

Hasonló előadás


Google Hirdetések