(defun c:UMWANDLUNG ( / 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 "VONLAYER" 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.. (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 (if(assoc 62 OBJEKTDATEN) ; Objektfarbe auf "VONLAYER" setzen (setq OBJEKTDATEN(subst(cons 62 256)(assoc 62 OBJEKTDATEN)OBJEKTDATEN)) ) (if(assoc 6 OBJEKTDATEN) ; Objekt-Linientyp auf "VONLAYER" setzen (setq OBJEKTDATEN(subst(cons 6 "BYLAYER")(assoc 6 OBJEKTDATEN)OBJEKTDATEN)) ) ; .............................Beginn Objektumwandlung.................................... (cond ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*ABBIEG*") (setq OBJEKTDATEN(subst (cons 8 "ABBIEGEKANTEN")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*ACHS*,*MITT*") (setq OBJEKTDATEN(subst (cons 8 "ACHSEN")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*VERDE*") (setq OBJEKTDATEN(subst (cons 8 "AVERDECKT")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*BEM*") (setq OBJEKTDATEN(subst (cons 8 "BEMASSUNG")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*HILF*") (setq OBJEKTDATEN(subst (cons 8 "HILFSLINIEN")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*PHAN*") (setq OBJEKTDATEN(subst (cons 8 "PHANTOM")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*SCHRAFF*") (setq OBJEKTDATEN(subst (cons 8 "SCHRAFFUR")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*TEXT*03*") (setq OBJEKTDATEN(subst (cons 8 "TEXT02")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*TEXT*02*") (setq OBJEKTDATEN(subst (cons 8 "TEXT03")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*TEXT*05*") (setq OBJEKTDATEN(subst (cons 8 "TEXT05")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*TEXT*07*") (setq OBJEKTDATEN(subst (cons 8 "TEXT07")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*UM*02*,*025*") (setq OBJEKTDATEN(subst (cons 8 "UMRISS02")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*UM*03*,*035*,KONTUR*,FILTER*,VENTILATOR*") (setq OBJEKTDATEN(subst (cons 8 "UMRISS03")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*UM*05*,*050*,AUSGEZOGEN*") (setq OBJEKTDATEN(subst (cons 8 "UMRISS05")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ((wcmatch(strcase(cdr(assoc 8 OBJEKTDATEN))) "*UM*07*,*070*") (setq OBJEKTDATEN(subst (cons 8 "UMRISS07")(assoc 8 OBJEKTDATEN)OBJEKTDATEN)) ) ('T "Unbekannter Layer") ) ; Ende cond ; (if(ssget OBJEKTDATEN '((0 . "DIMENSION") (-4 . ""))) ; (command "eigändr" "V" "" "LA" "BEMASSUNG" "") ; ) ; (if(ssget OBJEKTDATEN '((0 . "*TEXT") (-4 . ""))) ; (command "eigändr" "V" "" "LA" "TEXT03" "") ; ) ; (if(ssget OBJEKTDATEN '((0 . "HATCH") (-4 . ""))) ; (command "eigändr" "V" "" "LA" "SCHRAFFUR" "") ; ) ; .........................Ende Objektumwandlung......................................... (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 (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.. ) ; end [REPEAT] (while BLOCKLISTE ;... und Blockliste updaten (setq BLOCKLISTE (UPDATE_BLOCK BLOCKLISTE)) ) ) ) ; 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 : UMWANDLUNG\n")