Atrybuty bloków mają trzy tryby swojej widoczności: wszystkie są widoczne, lub wszystkie są niewidoczne albo – w trybie standard, niewidoczne są ukryte, a widoczne są widoczne. Odpowiada za to zmienna systemowa o nazwie ATTMODE. Do zmiany można użyć też polecenia ATRWID (_ATTDISP). Operacje te działają globalnie – dla wszystkich bloków z atrybutami w rysunku. Co zrobić gdy zechcemy (z różnyc powodów) sterować widocznością atrybutów dla tylko wybranych bloków, tak jak na (ruchomym) obrazie poniżej?
Pozostaje jedynie manipulacja programowa. Rzecz jasna LISP-owa. Poniżej kod definicji polecenia ATTH, które działa jak przełącznik radiowy – pokazuje lub ukrywa wszystkie atrybuty wskazanych bloków.
; ------------------------------------------------------------------------ ;
; Polecenie ATTH dla wskazanych blokow z atrybutami zmienia ich widocznosc ;
; by kojacek - 2015, 2021 ;
; ------------------------------------------------------------------------ ;
(defun C:ATTH (/ s l %l %o %v)
(princ "\nZmiana widoczności atrybutów bloku.")
(if
(setq s
(ssget ":L"
(list
(cons 0 "INSERT")
(cons 66 1)
(cons 410 (getvar "CTAB"))
)
)
)
(progn
(setq l (cd:SSX_Convert s 0))
(cd:SYS_UndoBegin)
(foreach % l
(setq %l (cd:BLK_GetAttEntity %))
(foreach %1 %l
(setq %o (vlax-ename->vla-object %1)
%v (vla-get-visible %o)
)
(vla-put-visible
%o
(if
(= %v :vlax-false)
:vlax-true
:vlax-false
)
)
)
)
(cd:SYS_UndoEnd)
)
(princ "\nNic nie wybrano.")
)
(princ)
)
; ------------------------------------------------------------------------ ;
To stosunkowo proste narzędzie umożliwia sterowanie widocznością atrybutów wskazanych bloków w dwóch trybach: widoczne / ukryte. Wykorzystuje właściwość dostępną dla każdego obiektu graficznego o nazwie Visible. Rzecz jasna zmiana następuje dla obiektów typu ATTRIB (a nie) ATTDEF, czyli zmiany dotyczą tylko wybranych odniesień bloków. Makro do poprawnego działania wymaga załadowanego CADPL-Pack’a.
O zmianach widoczności obiektów w bloku (tu HATCH) pisałem też TU.
< . . . > To jest wpis numer 202…