Rekomendowane odpowiedzi

Opublikowano

Witam!

Poszukuję LISPów (lub innych rozwiązań), które wykonają mi następujące czynności:

1. Usuną atrybuty z definicji bloku i z jego wystąpień w rysunku, bez rozeksplodowywania bloku.

2. Ustawią warstwę dla atrybutów we wskazanym wystąpieniu - taką jaka jest w definicji bloku. (Wyjaśnienie: Mamy wstawione do rysunku bloki z atrybutami na jakich "dzikich warstwach". Wchodzimy w edycję bloku zmieniamy warstwę dla wszystkich elementów, w tym atrybutów - np. na 0. Zapisujemy edytowany blok. Jednak w wystąpieniach bloku, atrybuty zachowują wcześniej zdefiniowaną warstwę, a ja chciałbym, żeby one przeniosły się na warstwę z bieżącej definicji bloku). Jak to zrobić? Nie uśmiecha mi się zmieniać tego "ręcznie" dla każdego argumentu osobno!

Pozdr.

Opublikowano

do 1:

(defun C:DELA (/ OB OB# BL CMD)
 (vl-load-com)
 (if (setq OB (entsel "\nWskaz blok z ktorego usunac atrybuty: "))
   (if
     (and
       (= (cdr (assoc 0 (entget (car OB)))) "INSERT")
       (setq OB# (vlax-Ename->vla-Object (car OB)))
       (setq BL (kr:BLK_GetBlockName OB#))
     )
     (progn
       (setq CMD (getvar 'CMDECHO))
       (setvar 'CMDECHO 0)
       (foreach % (jk:BLK_Get-Objects BL "ATTDEF")
         (vla-Delete (vlax-Ename->vla-Object %))
       )
       (command "_attsync" "_S" (car OB) "_Y")
       (setvar 'CMDECHO CMD)
     )
   )
   (princ "\n** Nic nie wskazano **")
 )
 (princ)
)
; ============================================================ ;
; Get block name                                               ;
;   Blk# - VLA block reference object                          ;
; ============================================================ ;
(defun kr:BLK_GetBlockName (Blk#)
 (if (vlax-Property-Available-P Blk# 'EffectiveName)
   (vla-Get-EffectiveName Blk#)
   (vla-Get-Name Blk#)
 )
)
; ============================================================ ;
; Funkcja zwraca liste ENAME, obiektow okreslonego typu (argu- ;
; ment ObjType, w definicji bloku (rowniez XREF) podanego jako ;
; argument Name                                                ;
; (jk:BLK_Get-Objects "POM" "INSERT")                          ;
; ============================================================ ;
(defun jk:BLK_Get-Objects (Name ObjType / En Ed res)
 (setq En (tblobjname "BLOCK" Name))
 (while
   (and
     (setq En (entnext En))
     (setq Ed (entget En))
     (/= "ENDBLK" (cdr (assoc 0 Ed)))
   )
   (if
     (= (cdr (assoc 0 Ed)) (strcase ObjType))
     (setq res
       (append
         (list (cdr (assoc -1 ed)) )
         res
       )
     )
   )
 )
 res
)

(princ "\n>> Wczytano DelAtt>LSP. Polecenie DELA. <<")
(princ)

j.

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się