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

  [71] XDATA - dane dodatkowe

index  

  XDATA czyli dane dodatkowe obiektu. Kolejnym dowodem na niezwykłą elastyczność AutoCAD-a, są tzw dane dodatkowe, czyli dane dołączane przez użytkownika, do danych standardowych każdego obiektu. Przykładem mogą opisy warstw: [67] znowu warstwy... . Standardowo AutoCAD wykorzystuje także dane dodatkowe dla zastępst w stylach wymiarowania. Nazwą aplikacji w tym przypadku jest "ACAD".
Dane dodatkowe oferują programującemu (LISP, VBA, ObjectARX) potężne możliwości. Jedynym ograniczeniem dla danych dodatkowych jest ich wielkość - 16kB (16 383 B) na każdy obiekt. Programowy dostęp do XDATA obiektów jest stosunkowo prosty. Poniżej przedstawiam trzy funkcje lispowe manipulujące na danych dodatkowych. Są to funkcje umożliwiające dodawanie, odczytywanie i usunięcie danych. Są to funkcje działające we wszystkich AutoCAD-ach od wersji 12 wzwyż - wykorzystują tylko podstawowe narzędzia modyfikujące dane obiektów AutoLISP-a. Podobne narzędzia można też skonstruować w oparciu o ActiveX. Funkcje wyglądają tak:

;;; ========================================================= ;;;
;;; dodaje dane dodatkowe                                     ;;;
;;; ========================================================= ;;;
(defun jk:XDT_PutxData (en appName Data / d xd)
  (regapp appName)
  (setq d (entget en)
        xd (list (list -3 (cons appName Data)))
  )
  (entmod (append d xd))
)
;;; ========================================================= ;;;
;;; czyta dane dodatkowe                                      ;;;
;;; ========================================================= ;;;
(defun jk:XDT_GetxData (en appName)
  (cadr
    (assoc -3 (entget en (list appName)))
  )
)
;;; ========================================================= ;;;
;;; usuwa dane dodatkowe                                      ;;;
;;; ========================================================= ;;;
(defun jk:XDT_RemoveXData (en appName / d x)
  (setq d (entget en (list appName)))
  (foreach %
    (cdr (assoc -3 d))
    (setq x (cons -3 (list (cons (car %) nil)))
         d (subst x (assoc -3 d) d)
         d (entmod d)
    )
  )
)
O danych dodatkowych oraz o przykładach wykorzystania prezentowanych funkcji można przeczytać również tu: forum www.cad.pl . W przyszłości opiszę tutaj również kody DXF danych dodatkowych.

Zobacz również: [67] znowu warstwy...
      aktualizacja: 01-08-2010