|
AutoCAD... AutoLISP... VisualLISP... |
|
[67] znowu warstwy... |
|
Od wersji 2004 AutoCAD-a, użytkownicy mają możliwość dodawania opisu do warstwy. Cecha ta umożliwia dodawanie rozszerzeń tekstowych dla każdej warstwy, w sytuacji kiedy nazwa warstwy może być niezrozumiała, lub niewystarczająca. Pomysłów na wykorzystywanie opisów warstw może być więcej. Dodawanie opisów możliwe jest w oknie dialogowym Menadżera warstw, lub też w linii poleceń, jako opcja polecenia _LAYER Poniżej fragment okna dialogowego Menadżera warstw z zazaczoną kolumną opisów warstw: |
|
|
Istnienie opisów warstw, jest przykładem elastyczności AutoCAD-a, ponieważ mogą one istnieć w każdej wersji programu. Opis nie jest jakąś nową cechą - wykorzystuje się tutaj możliwość dodawania danych dodatkowych (XDATA) do dowolnego obiektu (tutaj warstwy). Możliwość ta istnieje w AutoCAD-zie od wersji 10. Opisy związane są z aplikacją o nazwie "AcAecLayerStandard", oraz "zajmują" dwa kody 1000, jeden to ciąg pusty, drugi wartość opisu warstwy. Jeżeli obiekt (warstwa) ma tak zdefiniowane dane dodatkowe, opis warstwy widoczny jest w oknie dialogowym menadżera warstw. Poniżej prezentuję trzy funkcje LISP-owe, manipulujące na opisach warstw, umożliwiają one sprawdzenie czy warstwa posiada opis, a także dodawanie, zmianę i usunięcie opisu wartwy. Funkcje wygladają tak: |
;;; -----------------------------------------------------------;;; ; Funkcja sprawdza czy warstwa ma dane dodatkowe, jezeli ; ; nazwa alikacji to "AcAecLayerStandard" zwraca dane ; (defun jk:LAY_GetXDataDescript (Lay / el d) (if (setq el (tblobjname "LAYER" Lay)) (if (setq d (cdr (assoc -3 (entget el '("*"))))) (if (= (caar d) "AcAecLayerStandard") d nil ) nil ) nil ) ) ;;; ----------------------------------------------------------;;; ; Funkcja dodaje opis dla warstwy, jesli nie istnieje, oraz ; ; zmienia go gdy istnieje ; (defun jk:LAY_PutXDataDescript (Lay Val / ap el xd d) (if (setq el (tblobjname "LAYER" Lay)) (progn (setq ap "AcAecLayerStandard") (if (not (setq xd (jk:LAY_GetXDataDescript Lay))) (if (not (tblsearch "APPID" ap)) (regapp ap) ) ) (if (not xd) (jk:LAY_PutXData Lay (cons ap (list (cons 1000 "")(cons 1000 Val))) ) (progn (jk:LAY_PutXData Lay (cons ap (list (cons 1000 "")(cons 1000 ""))) ) (jk:LAY_PutXData Lay (cons ap (list (cons 1000 "")(cons 1000 Val))) ) ) ) ) nil ) ) ;;; ----------------------------------------------------------;;; ; Funkcja dodaje dane dodatkowe do obiektu ; (defun jk:LAY_PutXData (Lay LData / d) (setq d (entget (tblobjname "LAYER" Lay))) (entmod (append d (list (list -3 LData)))) ) |
Przykładowe wywołania:(jk:LAY_PutXDataDescript "Layer1" "To jest 1 warstwa")
dodaje opis "To jest 1 warstwa" do warstwy "Layer1" w przypadku gdy opis nie istnie, lub istnieje o innej treści. z kolei: (jk:LAY_PutXDataDescript "Layer1" "")
usuwa opis (przypisuje pusty łańcuch) warstwie "Layer1". Zobacz również: [70] XDATA - dane dodatkowe |
![]()
aktualizacja: 01-08-2010
|
|
|
|
|
|
|