LISPy do bloków.


Rekomendowane odpowiedzi

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie