24 kwietnia 2024


Kontynuując tematykę symboli obiektów w AutoCADzie przedstawiamy następne z podstawowych tablic tych symboli. Na początek – tablica bloków.

Andrzej Gumuła

Wtablicy bloków AutoCAD przechowuje informacje o wszystkich blokach zdefiniowanych w rysunku, wliczając w to bloki anonimowe. Bloki anonimowe (inaczej bloki bez nazwy) są wykorzystywane przez AutoCAD m. in. przy tworzeniu kreskowań. Nie można ich wstawiać do rysunku za pomocą polecenia „_.insert”, ale można w tym celu skorzystać z funkcji entmake. Jak definiować te i inne bloki – piszemy poniżej.
Bardzo ważnym kodem grupy, która określa rodzaj bloku w tablicy jest kod 70. Poszczególne jego wartości oznaczają: 1 – blok anonimowy, wygenerowany przez kreskowanie, wymiar skojarzony, inną operację wewnętrzną lub aplikację, 2 – ten blok zawiera atrybuty, które nie są stałe, 4 – ten blok jest zewnętrznym odnośnikiem, 8 – ten blok jest odnośnikiem nakładkowym, 16 – ten blok jest zależny, 32 –  to jest odnośnik lub blok zależny od zewnętrznego odnośnika (ignorowany na wejściu), 64 – blok występuje w rysunku.
Blok jest elementem złożonym, tzn. składa się z kilku (przynajmniej trzech) list kodów grup DXF. Jego definicja składa się z wielu rekordów zapisanych w tablicy bloków. W związku z tym przy definiowaniu bloku dla każdego takiego rekordu funkcja entmake musi być wywoływana. Dotyczy to rekordu nagłówka, rekordów definiujących elementy graficzne bloku oraz znacznika końca.
Posiłkując się schematem pokazanym na rysunku  przedstawimy kolejno przykłady definiujące trzy różne bloki.
Przykład 1 – Blok normalny
(entmake ‘((0 . „BLOCK”)  (2 . „NAZWA_BLOKU”)  ( 70 . 0) (10 0.0 0.0 0.0)))
(entmake ‘((0 . „CIRCLE”) (10  0.0 2.0 0.0) (40 . 2.0) (62 . 1)))
(entmake ‘((0 . „ENDBLK”)))

Przykład 2 – Blok z atrybutami
(entmake ‘((0 . „BLOCK”)  (2 . „NAZWA_BLOKU_Z_ATRYBUTAMI”)  (70 . 2) (10 0.0 0.0 0.0)))
(entmake ‘( (0 . „ATTDEF”) (8 . „0”) (10 –2.0 0.0 0.0)  (40 . 1.0) (41 . 0.7) (72 . 2) (74 . 1)  (11 –2.0 0.0 0.0) (1 . „”) (2 . „ATRYBUT_1”) (3 . „”) (70 . 1)))
(entmake ‘( (0 . „ATTDEF”) (8 . „0”) (10 2.0 0.0 0.0)  (40 . 1.0) (41 . 0.7) (72 . 0) (74 . 1)  (11 2.0 0.0 0.0) (1 . „”) (2 . „ATRYBUT_2”) (3 . „”) (70 . 0)))
(entmake ‘((0 . „ENDBLK”)))

Wartość 1 dla kodu 70 w definicji pierwszego atrybutu oznacza, że w definicji bloku będą występować kolejne atrybuty.
Przykład 3 – Blok anonimowy.
(entmake ‘((0 . „BLOCK”) (2 . „*U”) (70 . 1) (10 1. 0 1.0 0.0)))
(entmake ‘((0 . „LINE”) (10 0.0 0.0 0.0) (11 2.0 2.0 0.0)))
(setq BlockName ‘((0 . „ENDBLK”)))

Taki blok wstawiamy przykładowym poleceniem:
(entmake (list ‘(0 . „INSERT”) (cons 2 BlockName) ‘(10 5.0 4.0 0.0) ‘(41 1) ‘(42 2) ‘(50 1.5708)))

Analizując pozycje tablicy bloków możemy łatwo określić np. nazwy zdefiniowanych bloków w rysunku czy ścieżki dostępów do wszystkich odnośników (patrz: przykład).
(defun XrefList (/ Paths Block)
(while (setq Block (tblnext „block” (null Block)))
(if
(or (= 4 (logand 4 (cdr (assoc 70 Block))))
(= 8 (logand 8 (cdr (assoc 70 Block))))
(setq Paths (cons (cdr (assoc 1 Block))) Paths)
);end if
);end while
(reverse Paths)
)

bloki
Rys. Schemat definicji bloku w tablicy symboli

cały artykuł dostępny jest w wydaniu 10 (25) październik 2009