Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaRezső Magyar Megváltozta több, mint 10 éve
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 (6.46616 -1.0606 0.0) ; Kiválasztási pont ((0.707107 0.707107 0.0) ; Aktuális koord. (-0.707107 0.707107 0.0) ; rendszerből a világ (0.0 -0.0 1.0) ; koord. rendszerbe (4.94975 4.94975 0.0) ; 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") (10 1.0 1.0 0.0) (11 2.0 2.0 0.0) (210 0.0 0.0 1.0) )
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)) -> (1.0 1.0 0.0) A vonal végpontja: (cdr (assoc 11 e)) -> (2.0 2.0 0.0)
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 (11 2.0 0.0 0.0) ; 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") (10 0.0 0.0 0.0) (11 2.0 0.0 0.0) (210 0.0 0.0 1.0) (-3 ("TEST-DATA" (1000. "Szöveg"))) )
29
Adatok csoportosítása (-3 (”my-app” (1002. ”{”) (1000. ”hossz”) (1040. 5.432) (1002. ”}”) (1002. ”{”) (1000. ”szélesség”) (1040. 5.432) (1002. ”}”) )
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.