1 / 29

Grafikus tervezőrendszerek programozása

Grafikus tervezőrendszerek programozása. 6. előadás. 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:

Télécharger la présentation

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 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: <Entity name: 7ef4fe88> • 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ésnentselpfü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:<Négy vonal kiválasztása> Select objects:<ENTER>

  11. Példa 2. Command:  ucs Current ucs name: *WORLD* Enter option[New/Move/orthoGraphic/Prev/ Restore/Save/Del/Apply/?/World] <World>:  z Specify rotation angle about Z axis <0>:  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] <1>:<ENTER> Enter Y scale factor <use X scale factor>:<ENTER> Specify rotation angle <0>:<ENTER>

  12. Példa 3. (setq ndata (nentsel)) (<Entity Name: 400000a0> ; 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 ) (<Entity name:6000001c>) ; 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 . <Entity name: 7ef72e88>) (0 . "LINE") (330 . <Entity name: 7ef72cf8>) (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

  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”) -> <Entity name: 7ef72e67>

  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

  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 . <Entity name: 7ef72e88>) (0 . "LINE") (330 . <Entity name: 7ef72cf8>) (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 . ”}”) ) )

More Related