AutoLISP

Zmiana widoczności atrybutów bloku

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

Dodaj komentarz

Ta witryna wykorzystuje usługę Akismet aby zredukować ilość spamu. Dowiedz się w jaki sposób dane w twoich komentarzach są przetwarzane.