Hi,
ersetze die "attributifizierten" Blöcke doch einfach GLEICH durch neue Blöcke...
Für solche Fälle benutze ich immer diese Pgme:
<pre>
;;; Pgm "BRED" ersetzt vorhandene Inserts durch andere Inserts
;;; Attributwerte werden nicht berücksichtigt.
;;; Passe die Variable "BLLIST" auf Deine Bedürfnisse an
;;; Aufbau von "BLLIST" (("Alter Blockname" "Neuer Blockname")(..))
;;; Die Ersetzungsliste kann soviele Blöcke wie nötig enthalten.
;;; Voaraussetzung ist aber, daß die neuen Blöcke entweder in der
;;; aktuellen Zeichnung bereits definiert sind, oder aber als DWG
;;; im Acad-Suchpfad zu finden sind...
(defun C:BLRED (/ ALT-OS ALT_BL BLCKLIST BLLIST
INDEX MADE_IT NEU_BL OBJ_DAT OBJ_KORD
OBJ_LAY OBJ_NAME OBJ_SC1 OBJ_SC2 OBJ_SC3
OBJ_WINK SGET SGET_NAME SLENG
)
(setvar "CMDECHO" 0)
(setvar "FILEDIA" 0)
(setq ALT-OS (getvar "osmode"))
(setvar "OSMODE" 0)
(command "_.ucs" "_w")
(setq BLLIST (list (cons "SS_HD" "G_SS")
(cons "SS_MD" "G_SS")
(cons "SS_ND" "G_SS")
(cons "S_HD" "G_S")
(cons "S_MD" "G_S")
(cons "S_ND" "G_S")
(cons "VS_HD" "G_VS")
(cons "VS_MD" "G_VS")
(cons "VS_ND" "G_VS")
(cons "AS_HD" "G_AS")
(cons "AS_MD" "G_AS")
(cons "AS_ND" "G_AS")
(cons "HAS_HD" "G_HAS")
(cons "HAS_MD" "G_HAS")
(cons "HAS_ND" "G_HAS")
(cons "WT_HD" "G_WT")
(cons "WT_MD" "G_WT")
(cons "WT_ND" "G_WT")
(cons "LS_HD" "G_LS")
(cons "LS_MD" "G_LS")
(cons "LS_ND" "G_LS")
(cons "VBS_HD" "G_VBS")
(cons "VBS_MD" "G_VBS")
(cons "VBS_ND" "G_VBS")
(cons "PFAHL_HD" "G_PFAHL")
(cons "PFAHL_MD" "G_PFAHL")
(cons "PFAHL_ND" "G_PFAHL")
) ;_ end LIST
) ;_ end setq
(foreach ELEMENT BLLIST
(setq ALT_BL (car ELEMENT)
NEU_BL (cdr ELEMENT)
SGET (ssget "X" (list (cons 0 "INSERT") (cons 2 ALT_BL))) ;_ end ssget
) ;_ end setq
(if SGET
(progn (setq SLENG (sslength SGET)
INDEX 0
) ;_ end setq
(if (= (tblsearch "BLOCK" NEU_BL) NIL)
(progn (command "_.insert" NEU_BL "0,0" "1" "" "") ;_ end command
(entdel (entlast))
) ;_ end progn
) ;_ end if
(while (< INDEX SLENG)
(setq SGET_NAME (ssname SGET INDEX)
OBJ_DAT (entget SGET_NAME)
OBJ_LAY (assoc 8 OBJ_DAT)
OBJ_NAME (assoc 2 OBJ_DAT)
OBJ_KORD (assoc 10 OBJ_DAT)
OBJ_SC1 (assoc 41 OBJ_DAT)
OBJ_SC2 (assoc 42 OBJ_DAT)
OBJ_SC3 (assoc 43 OBJ_DAT)
OBJ_WINK (assoc 50 OBJ_DAT)
BLCKLIST (list '(0 . "INSERT")
(cons 2 NEU_BL)
OBJ_LAY
OBJ_KORD
OBJ_SC1
OBJ_SC2
OBJ_SC3
OBJ_WINK
) ;_ end list
) ;_ end setq
(setq MADE_IT (entmake BLCKLIST))
(if (/= MADE_IT NIL)
(entdel SGET_NAME)
) ;_ end if
(setq INDEX (1+ INDEX))
) ;_ end while
(princ (strcat "\n"
(itoa INDEX)
"x "
ALT_BL
" durch "
NEU_BL
" ersetzt!"
) ;_ end strcat
) ;_ end princ
) ;_ end progn
(princ (strcat "\nKein Block: \"" ALT_BL "\" vorhanden!"))
) ;_ end if
) ;_ end foreach
(setvar "OSMODE" ALT-OS)
(setvar "CMDECHO" 1)
(setvar "FILEDIA" 1)
(princ)
) ;_ end defun
(princ "\nBlöcke austauschen, Start mit \"BLRED\" !")
(princ)
;;; Pgm "BLREDEF2" tauscht nur einen Block aus. Und zwar den, der
;;; als Startvariable übergeben wird -> "(C:BLREDEF2 "BLOCKNAME")"
;;; Hier ist die Zielsetzung das Ersetzen eines Block z.B. "Otto"
;;; innerhalb der aktuellen DWG durch eine neue Version des Blocks,
;;; der als z.B. "Otto.dwg" im Acad-Suchpfad zu finden ist.
;;; Dafür wird "Otto" in der aktuellen DWG erstmal umbenannt, dann
;;; durch den neuen "Otto" ersetzt und die alte Version gelöscht.
;;; Attribute werden NICHT berücksichtigt!
(defun c:blredef2 (bnam / ALT-CMD ALT-FILE ALT-OS
BLCKLIST BLLIST DAT DWG-NAM FILE
INDEX LW MADE_IT NAME_DATEI OBJ_DAT
OBJ_KORD OBJ_LAY OBJ_NAME OBJ_SC1 OBJ_SC2
OBJ_SC3 OBJ_WINK SGET SGET_NAME SHELLCMD
SLENG TMP-NAM TMP-THERE
)
(setq alt-cmd (getvar "CMDECHO")
alt-file (getvar "FILEDIA")
alt-os (getvar "OSMODE")
) ;_ end setq
(setvar "CMDECHO" 0)
(setvar "FILEDIA" 0)
(setvar "OSMODE" 0)
(command "_.ucs" "_w")
(setq bllist (LIST (cons 0 "INSERT") (cons 2 bnam)) ;_ end LIST
tmp-nam "$temp$"
sget (ssget "x" bllist)
dat (findfile "temp-dir.txt")
file (open dat "r")
lw (read-line file)
tmp-there (vl-file-directory-p lw)
) ;_ end setq
(close file)
(if (= tmp-there nil)
(progn (setq shellcmd (strcat "md " lw))
(command "_.shell" shellcmd)
) ;_ end progn
) ;_ end if
(setq name_datei "file-list.txt"
name_datei (strcat lw name_datei)
) ;_ end setq
(if (= sget nil)
(princ
(strcat "\nKein Block für einen Austausch vorhanden...")
) ;_ end princ
(progn (command "_.rename" "_block" bnam tmp-nam)
(setq sleng (sslength sget)
index 0
name_datei (open name_datei "a")
dwg-nam (getvar "dwgname")
) ;_ end setq
(princ dwg-nam name_datei)
(princ "\n" name_datei)
(close name_datei)
(if (= (tblsearch "BLOCK" bnam) nil)
(progn (command "_.insert" bnam "0,0" "1" "" "") ;_ end command
(entdel (entlast))
) ;_ end progn
) ;_ end if
(while (< index sleng)
(setq sget_name (ssname sget index)
obj_dat (entget sget_name)
obj_lay (assoc 8 obj_dat)
obj_name (assoc 2 obj_dat)
obj_kord (assoc 10 obj_dat)
obj_sc1 (assoc 41 obj_dat)
obj_sc2 (assoc 42 obj_dat)
obj_sc3 (assoc 43 obj_dat)
obj_wink (assoc 50 obj_dat)
blcklist (list '(0 . "INSERT")
(cons 2 bnam)
obj_lay
obj_kord
obj_sc1
obj_sc2
obj_sc3
obj_wink
) ;_ end list
) ;_ end setq
(setq made_it (entmake blcklist))
(if (/= made_it nil)
(entdel sget_name)
) ;_ end if
(setq index (1+ index))
) ;_ end while
(princ (strcat "\n" (itoa index) "x " bnam " ersetzt!") ;_ end strcat
) ;_ end princ
) ;_ end progn
) ;_ end if
(command "_.purge" "_block" tmp-nam "_n")
(setvar "CMDECHO" alt-cmd)
(setvar "FILEDIA" alt-file)
(setvar "OSMODE" alt-os)
(princ)
) ;_ end defun
</pre>
Ok, ich hoffe das hilft.
Ciao,
Marc
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP