; erweitert um setzen der Blockelemente auf aktuellen Layer, Th.J. 09/03 ; Startname von BLOCK_KONVERT auf BLOKO geaendert (defun c:BLOKO ( / SPIN UPDATE_BLOCK UPDATE_BLOCKS) ;.... lokale Funktionen definieren ;; --------------------------------------------------------------------------------------------------- ;; ;; -- SPIN : Funktion zur Spinradausgabe in der Kommandozeile (Kleiner Gimmick) -- ;; ;; -- Aufruf (Spin SYM) mit SYM als übergeordneter Variable -- ;; ;; --------------------------------------------------------------------------------------------------- ;; (defun Spin (SYM / ) (setq SYM (cond ((= SYM "-" ) "\\") ((= SYM "\\") "|" ) ((= SYM "|" ) "/" ) ((= SYM "/" ) "-" ) (T "-" ))) (princ (strcat "\rScanning... " SYM " ")) SYM ) ;; --------------------------------------------------------------------------------------------------- ;; ;; --------------------------------------------------------------------------------------------------- ;; ;; -- UPDATE_BLOCK : Ändert den ersten Block der übergebenen Blockliste entsprechend den Vorgaben -- ;; ;; -- .. Farbe auf "VONBLOCK" und Linientyp auf "VONLAYER" -- ;; ;; --------------------------------------------------------------------------------------------------- ;; (defun UPDATE_BLOCK( BLOCKLISTE / BLOCKDEF BLOCKNAME BLOCKELEMENT OBJEKTDATEN SPINSYM ) (if (=(type BLOCKLISTE) 'LIST) ; Parameter o.k. ? (progn (setq BLOCKNAME (car BLOCKLISTE)) ; Aktuell bearbeiteter Block = erster aus Liste (setq BLOCKLISTE(cdr BLOCKLISTE)) ; ... Rest als BLOCKLISTE Weitermerken (if(setq BLOCKDEF (tblsearch "BLOCK" BLOCKNAME)) ; Blockdefinition zum Blocknamen auslesen (progn ; (if (and (/=(logand(cdr(assoc 70 BLOCKDEF))1)1) ; ist Block kein unbenannter Block (Bemassung.) ; (/= (logand(cdr(assoc 70 BLOCKDEF))4)4)) ; und kein XREF, dann.. ;;;; ;;;; unbenannte blöcke zulassen ;;;; (if (/= (logand(cdr(assoc 70 BLOCKDEF))4)4) ; und kein XREF, dann.. (progn (setq BLOCKELEMENT (cdr (assoc -2 BLOCKDEF))) ; Adresse der Blockelemente holen (while BLOCKELEMENT ; und solange nicht alle Blockelemente abgearbeitet sind ... (if (=(cdr(assoc 0 (entget BLOCKELEMENT))) "INSERT"); Ist BLOCKELEMENT ein Block, dann... (progn (setq BLOCKNAME(cdr(assoc 2(entget BLOCKELEMENT)))) ;BLOCKNAME des Unterblocks holen (if (not (member BLOCKNAME BLOCKLISTE));wenn dieser nicht in der Blockliste vorhanden (if (not BLOCKLISTE) ; wenn Blockliste vorhanden ... (setq BLOCKLISTE(append BLOCKLISTE(list BLOCKNAME)));dann BLOCKNAME darin ablegen (setq BLOCKLISTE (list BLOCKNAME)) ; sonst BLOCKLISTE erzeugen und dito ) ) ) ) ; end [IF BLOCKELEMENT selber ein BLOCK ("INSERT") ; wenn Blockelement kein Unterblock ist.................................................. (setq OBJEKTDATEN (entget BLOCKELEMENT)) ; Elementdaten auslesen ;;;; ;;;; Beginn einschub Th.J. ;;;; (if LAY_MODUS ; auf angegebenen Layer setzen (setq OBJEKTDATEN(subst (cons 8 NEULAYER)(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ;;;; ;;;; Ende einschub Th.J. ;;;; (if(assoc 62 OBJEKTDATEN) ; Objektfarbe auf "VONBLOCK" setzen (setq OBJEKTDATEN(subst(cons 62 0)(assoc 62 OBJEKTDATEN)OBJEKTDATEN)) ) (if(assoc 6 OBJEKTDATEN) ; Objekt-Linientyp auf "VONLAYER" setzen (setq OBJEKTDATEN(subst(cons 6 "BYLAYER")(assoc 6 OBJEKTDATEN)OBJEKTDATEN)) ) (if(assoc 370 OBJEKTDATEN) ; Objekt-Linienstärke setzen ;(setq OBJEKTDATEN(subst(cons 370 -2)(assoc 370 OBJEKTDATEN)OBJEKTDATEN)) ; "vonBLOCK" ;(setq OBJEKTDATEN(subst(cons 370 -2)(assoc 370 OBJEKTDATEN)OBJEKTDATEN)) ; "Vorgabe" (setq OBJEKTDATEN ; auf "von LAYER" (list (reverse(cdr(member(assoc 370 OBJEKTDATEN) (reverse OBJEKTDATEN)))) (cdr(member(assoc 370 OBJEKTDATEN)OBJEKTDATEN))) ) ) ; (setq OBJEKTDATEN(subst (cons 8 "0")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ;auf Layer "0" (entmod OBJEKTDATEN) ; Objektdaten in Zeichnungsdatenbank updaten (setq BLOCKELEMENT (entnext BLOCKELEMENT)) ; nächstes Blockelement holen, Blockende="nil" (setq SPINSYM (Spin SPINSYM)) ; und als Gimmick: eine schöne Kommandozeilenausgabe ;-) ) ;end [WHILE BLOCKELEMENT] ) ); .........................................................end [IF ..kein unbenannter Block..] ) ) ; end [IF BLOCKDEFINITION konnte ausgelesen werden] ) (setq BLOCKLISTE nil) ; bei falschem Parametertyp BLOCKLISTE auf "nil" setzen ); .......................................................................... end [BLOCKLISTE = Liste] BLOCKLISTE ; Liste mit allen gefundenen Blocknamen zurückliefern ) ; end [DEFUN] ;; --------------------------------------------------------------------------------------------------- ;; ;; --------------------------------------------------------------------------------------------------- ;; ;; -- UPDATE_BLOCKS : Ändert die Elemente aller in der Zeichnung gefundenen Blöcke, bzw. der vom -- ;; ;; -- Anwender ausgewählten Blöcke entsprechend ==> Siehe oben -- ;; ;; --------------------------------------------------------------------------------------------------- ;; (defun UPDATE_BLOCKS( / OLDCMD BLOCKNAME BLOCK BLOCKLISTE MODUS INDEX AUSWAHL) (setq OLDCMD (getvar "CMDECHO")) (setvar "CMDECHO" 0) ; Bildschirmausgabe bei "Command" aus (command "._undo" "m") ; Markierung für "Zurück-Befehl" setzen ;;;; ;;;; Beginn einschub Th.J. ;;;; (initget "J N") (setq LAY_MODUS (getkword (strcat "\nBlockelemente auf aktuellen Layer setzen? (J/ "))) (if (not LAY_MODUS) (setq MODUS "N")) ; Vorgabe bei "Enter"-Eingabe setzen (if (= (strcase LAY_MODUS) "N") ; bei nein auf FALSE setzen... (setq LAY_MODUS F) (progn ; ansonsten aktuellen Layer abfragen (setq NEULAYER (getvar "CLAYER")) (setq LAY_MODUS T) ) ) ;;;; ;;;; Ende einschub Th.J. ;;;; (initget "G A") (setq MODUS (getkword (strcat "\nanze Zeichnung oder usgewählte Blöcke: "))) (if (not MODUS) (setq MODUS "G")) ; Vorgabe bei "Enter"-Eingabe setzen (if (= (strcase MODUS) "G") ; die ganze Zeichnung bearbeiten... (while (setq BLOCKNAME(tblnext "BLOCK" (null BLOCKNAME))) ; solange Blöcke in der Zeichnung... (UPDATE_BLOCK (list(cdr(assoc 2 BLOCKNAME)))) ; ... Blöcke "updaten" ) (progn ; sonst gewählte Blöcke (oder nichts) bearbeiten (princ "\nZu bearbeitende(n) Block(s) wählen: ") (if(setq AUSWAHL (ssget '((0 . "INSERT")))) ; Blockauswahl vom Nutzer bereitstellen lassen (progn (setq INDEX 0) ; Auswahlindex auf 0 setzen (repeat (sslength AUSWAHL) ; Auswahl durchlaufen und abarbeiten... (setq BLOCK(cdr(assoc 2 (entget(ssname AUSWAHL INDEX))))) ; Blockname auslesen (if BLOCKLISTE (setq BLOCKLISTE (append BLOCKLISTE (list BLOCK))) ; .. und in Liste ablegen (setq BLOCKLISTE (list BLOCK)) ) (setq INDEX(1+ INDEX)) ; Auswahlindex erhöhen und nächsten Block.. ) (setq zaehl_elem 0) ; end [REPEAT] (while BLOCKLISTE ;... und Blockliste updaten (setq BLOCKLISTE (UPDATE_BLOCK BLOCKLISTE)) (setq zaehl_elem (1+ zaehl_elem)) ) ) ) ; end [IF AUSWAHL..] ) ) ; end [IF MODUS] (command "._regen") ; Zeichnung regenerieren (princ "\n......... und Fertig") (setvar "CMDECHO" OLDCMD) (princ) ; ohne Rückgabe beenden ) ; end [DEFUN] ;; --------------------------------------------------------------------------------------------------- ;; ; .... Rest der "KOMMANDIERTEN" FUNKTION" (UPDATE_BLOCKS) (princ) ) ;; --------------------------------------------------------------------------------------------------- ;; (princ "\n Starten mit : BLOKO")