AutoCAD... AutoLISP... VisualLISP...

  [59] Tablice symboli

index  

  AutoCAD obsługuje dwa rodzaje obiektów niegraficznych. Są to słowniki (obiekty typu DICTIONARY) oraz tablice symboli (obiekty TABLE). Tablice symboli to obiekty niegraficzne rysunkowej bazy danych AutoCAD-a, w których znajdują się definicje innych nazwanych obiektów takich jak bloki, rodzaje linii, style tekstu, widoki itd. W każdym rysunku istnieją tablice o następujących nazwach:
  • APPID - zarejestrowane aplikacje
  • BLOCK - definicje wszystkich bloków
  • DIMSTYLE - style wymiarowania
  • LAYER - warstwy rysunkowe
  • LTYPE - rodzaje linii
  • STYLE - style tekstu
  • UCS - układy współrzędnych
  • VIEW - widoki
  • VPORT - rzutnie
O samych tablicach i ich obiektach, można jeszcze dużo napisać, teraz omówię tylko pewną funkcję dostępu do nazw obiektów w tablicach. Od niepamiętnych czasów (prawie od zawsze) istnieje w AutoCAD-zie plik o nazwie ai_utils.lsp. Plik ten jest zawsze wczytywany wraz ze startem programu. Znajduje się w nim (między innymi) niezykle użyteczna funkcja o nazwie AI_TABLE. Umożliwia ona dostęp do wszystkich tablic symboli i zwraca nazwy zawartych w nich obiektów. Funkcja ma dwa argumenty: nazwę tablicy (STR) oraz bit (INT) określajacy filtrowanie. Wartości bitów i ich znaczenia są następujące:
  • 0 - zwracane są wszystkie elementy w tablicy
  • 1 - dla tablicy LAYER lista bez warstwy "0" i bez rodzaju linii "CONTINUOUS" (dla tablicy LTYPE).
  • 2 - bez bloków anonimowych (tablica BLOCK)
  • 4 - lista bez obiektów zależnych od odniesień zewnętrznych (XRef)
  • 8 - lista bez odnośników zewnętrznych (XRef)
  • 16 - do listy dodany zostaje rodzaj linii "BYBLOCK" i "BYLAYER" (tablica LTYPE)
Wartości bitów są sumowane, czyli przykładowo wywołnie: (ai_table "BLOCK" (+ 2 4 8)) zwraca listę wszystkich bloków w rysunku z wyłączeniem bloków anonimowych, bloków zależnych od odnośników zewnętrzych, oraz samych odnośników) Sposób w jaki funkcja ai_table działa można przeanalizować w pliku ai_utils.lsp, znajduje się on w katalogu Support instalacji AutoCAD-a.
Pomimo tego że ai_table jest bardzo przydatna, w wielu zastosowaniach potrzebowałem takiej funkcji która umożliwiała by przegląd dowolnej tablicy w oknie dialogowym, wybór jednego lub kilku obiektów. Ponieważ chciałem wykorzystywać jedną funkcję służącą do tego celu, w wielu programach, w wielu różnych zastosowaniach, padł pomysł aby napisać taką uniwersalną funkcję biblioteczną. W części odwołuje się właśnie do ai_table, zatem działać będzie tylko w przypadku załadowania ai_utils.lsp. Funkcja nazywa się jk:TBL_Table i wymaga siedmiu argumentów:
(jk:TBL_Table Table Bit Title WText MSel Pos TypeRes)
Kolejno są to:
  • Table i Bit - identyczne jak dla ai_table i omówione wyżej
  • Title - STR, określający tytuł okna dialogowego, lub nil, a wtedy tytułem jest nazwa tablicy.
  • WText - STR, określający tytuł listy, lub nil, a wtedy wyświetlany jest tekst: "Wybierz:"
  • MSel - T lub nil - jest to przełącznik określający czy wybór w liście jest wielo czy jedno pozycyjny (miltiple_select).
  • Pos - liczba INT lub nil - określa który element listy jest wstępnie wybrany (zaznaczony) w czasie wyświetlenia okna dialogowego, jeśli jest nil przyjmowana jest pierwsza pozycja (wartość 0). Jeśli liczba jest większa niż długość listy - przyjmowana jest wartość 0 (pierwsza pozycja listy)
  • TypeRes - liczba INT 0 lub 1 - określa format listy zwracanej przez funkcję: 0 - zwracana jest lista pozycji, zaś gdy wartość wynosi 1 - zwracana jest lista wybranych elementów.
Przykładowo poniższe wywołanie:
(jk:TBL_Table "APPID" 0 "Aplikacje" nil nil 0 1)
wyświetli okno dialogowe:

i zwróci (jeżeli wybrany zostanie przycisk OK): ("ACAD")
Inne przykłady działania funkcji jk:TBL_Util to:
       
      aktualizacja: 25-02-2010   Plik: tableutil.fas