LISPy do bloków.


Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...