;;;******************************************************************* ;;; BW_DIMT_LKonv.LSP ;;; ;;; Konvertiert die Bemassungstexte der gesamtem Zeichnung ;;; laut Zuweisungs-Liste, wenn sie den Bemaßungsstil=BWBEMSTIL haben ;;; ;;; ;;; Benutzt externe Routinen: ;;; - vlax*get-property ;;; - vlax*put-property ;;; ;;; ;;; Hier erfolgt keine Behandlung von Laufzeitfehlern! ;;; ;;; 01.06.2010; Peter Baehne; Berlinwasser Services GmbH ;;;******************************************************************* ;;; Active-X Initialisieren (vl-load-com) ;;; Externe Funktionen nachladen (IF (OR (NOT vlax*get-property) (NOT vlax*put-property)) (LOAD "AX_Property") ) ;;;***************************************************************************** ;;; BW_DIMT_KONV ;;; Konvertiert eine Bemassung laut Tabelle(Farbliste) ;;; Ändert Textfarbe, Maßlinien, ... ;;; ;;; DIMT_ename = Elementname, beliebiges Zeichnungselement ;;; Konvertierung wird jedoch nur auf eine Bemassung angewendet ;;; ;;; Beispiel: ;;; Konvertiert die angegebene Bemassung und inkrementiert ggf. beide Zähler ;;; (BW_DIMT_KONV ElementName 0 0) ;;;***************************************************************************** (defun BW_DIMT_KONV (DIMT_ename DIMT_BemZahl DIMT_BemKonvZahl / DIMT_Farben AXobj FarbenPaar Zaehlerliste) ;; Farbliste für Bemaßungstexte als Paare definieren ;; Ein Paar repräsentiert dabei jeweils die alte und zugeordnete neue Farbnummer (setq DIMT_Farben '((191 46) (21 24) (91 112) (51 54) (131 111) (161 164) (31 205) (211 235) (241 25) ) ) ;; Testen, ob wirklich Bemassung und ;; nur berücksichtigen mit Bemaßungsstil=BWBEMSTIL (if (and (= "DIMENSION" (cdr (assoc 0 (entget DIMT_ename)))) (setq DIMT_BemZahl (1+ DIMT_BemZahl)) ;Zähler für Bemassungsobjekt (= "BWBEMSTIL" (cdr (assoc 3 (entget DIMT_ename)))) ) (progn ;; Active-X-Objekt definieren und abfragen (setq AXobj (vlax-ename->vla-object DIMT_ename)) (if (setq FarbenPaar (assoc (vlax*get-property AXobj "TextColor") DIMT_Farben)) ;; Eigenschaften ändern, wenn Maßtext eine alte Farbe hat: ;; - neue Maßtext-Farbe laut Tabelle vergeben ;; - Maßlinie und Maßhilfslinien erhalten Farbe=24 (progn (vlax*put-property AXobj '("TextColor" "DimensionLineColor" "ExtensionLineColor") (list (cadr FarbenPaar) 24 24) ) (vla-update AXobj) (setq DIMT_BemKonvZahl (1+ DIMT_BemKonvZahl)) ;Zähler für geänderte Bemassungsobjekte ) ) ) ) ;; Rückgabe der Zähler (list DIMT_BemZahl DIMT_BemKonvZahl) ) ;;;***************************************************************************** ;;; BW_DIMT_LKonv ;;; Konvertiert alle Bemassungen eines Auwahlsatzes ;;; ;;; Eingabeparameter: ;;; ssDIM = ein Auswahlsatz mit Bemassungen; ;;; Kann auch andere bzw. alle Zeichnungselemente enthalten, ;;; da beim Durcharbeiten nur Bemassungen berücksichtigt werden! ;;; ;;; Beispiele: ;;; - Führt die Konvertierung mit einem interaktiv erstellten Auswahlsatz durch ;;; (BW_DIMT_LKonv (ssget)) ;;; - Führt Konvertierung für ALLE Bemassungen der Zeichnung durch ;;; (BW_DIMT_LKonv (ssget "X" '((0 . "DIMENSION")))) ;;;***************************************************************************** (defun BW_DIMT_LKonv (ssDIM / i Zaehler) ;; Globale Zähler zurückstellen ;; ( ) (setq Zaehler (list 0 0)) ;; NUR ZUM TEST: Alle Bemassungen in Auswahlsatz holen ;;(setq ssDIM (ssget "X" '((0 . "DIMENSION")))) ;; Bemassungstexte der Auswahl konvertieren (if ssDIM ; keine leere Auswahl (repeat (setq i (sslength ssDIM)) ;;Konvertierung für eine Bemassung durchführen (setq Zaehler (BW_DIMT_KONV (ssname ssDIM (setq i (1- i))) (car Zaehler) (cadr Zaehler))) ) ) ;; NUR ZUM TEST ;;(setq ssDIM nil) ; Speicher freigeben (princ (strcat "\n" (itoa (cadr Zaehler)) " von " (itoa (car Zaehler)) " Bemassungen (außerhalb von Blöcken) konvertiert.\n" ) ) (princ) ) ;;;***************************************************************************** ;;; BW_DIMT_LKonv_AllBlocks ;;; Konvertierung der Bemassungen in allen Blöcken ;;; ;;; Es werden die alle Blockdefinitionen abgearbeitet und ggf. Bemassungen konvertiert ;;; Blockreferenzen werden automatisch aktualisiert. ;;;***************************************************************************** (defun BW_DIMT_LKonv_AllBlocks ( / Block Block_Name BlockElement Zaehler Itemx) ;; Globale Zähler zurückstellen ;; ( ) (setq Zaehler (list 0 0)) ;; Alle Blockdefinitionen durchgehen (vlax-for Block (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) (setq Block_Name (vlax-get-property Block "Name")) ;; Nur Zeichnungs-Blöcke bearbeiten ;;(die auch mit dem Befehl -bedit angezeigt und bearbeitet werden können) (if (and ;; kein Dynamischer Block (= (vlax-get-property Block 'IsDynamicBlock) ':vlax-false) ;; kein XRef (= (vlax-get-property Block 'IsXRef) ':vlax-false) ;; kein Layout (= (vlax-get-property Block 'IsLayout) ':vlax-false) ;; HIER ALLE ANONYMEN BLÖCKE AUSFILTERN, DEREN BLOCKNAME MIT "*" BEGINNEN ;; AnonymeBlöcke werden von autocad automatisch für Bemassungspfeile (*Dnnn), Schraffurmuster (*Xnnn) erstellt. ;; Können aber auch durch Lisp oder Arx erstellt worden sein (*Unnn) ;; Werden von ACAD automatisch beim Laden der Zeichnung gelöscht, wenn keine Referenz existiert. (/= (substr Block_Name 1 1) "*") ) ;_ and (progn ;; Konvertierung auf jedes Blockelement anwenden (wirkt nur bei Bemassung) ;;(princ (strcat "\n " Block_Name)) ;nur TEST (vlax-for BlockElement Block (setq Zaehler (BW_DIMT_KONV (vlax-vla-object->ename BlockElement) (car Zaehler) (cadr Zaehler))) ;;(vlax-put-property BlockElement 'Color 1) ;(vlax*get-property BlockElement 'Color)) ) ) ) ) (princ (strcat "\n" (itoa (cadr Zaehler)) " von " (itoa (car Zaehler)) " Bemassungen in Blockdefinitionen konvertiert.\n" ) ) ;; Alle Blockreferenzen im Modellbereich aktualisieren ;;(setvar "CMDECHO" 0) (vlax-for Itemx (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) ;;(vlax-dump-Object Itemx) ;; Auf Blockreferenzen filtern (if (= "AcDbBlockReference" (vlax-get-property Itemx 'ObjectName)) (entmod (entget (vlax-vla-object->ename Itemx))) (vlax-invoke-method Itemx 'Update) ) ) ;;; (setq en (entnext)) ;_ Sets en to first entity name in the drawing. ;;; (setq ed (entget en)) ;_ Sets ed to the entity data for entity name en. ;;; (setq ssInserts (ssget "_X" '((0 . "INSERT"))) ;;; i 0) ;;; (while (setq entname(ssname ssInserts i)) ;;; ;;(setq ed (entget entname)) ;;; ;;(command "_-refedit" "l") ;;; (entupd entname) ;;; (setq i (1+ i)) ;;; ) (princ) ) ;;;***************************************************************************** ;;; BW_DIMT_LKonv_All ;;; Befehlszeilenkommando zur Konvertierung ALLER Bemassungen der Zeichnung ;;;***************************************************************************** (defun C:BW_DIMT_LKonv_All (/) (princ "\nKonvertiere alle Bemassungen dieser Zeichnung lt. BWB-Standard...\n" ) ;; Alle alleinstehenden Bemassungen konvertieren (BW_DIMT_LKonv (ssget "X" '((0 . "DIMENSION")))) ;; Alle Bemassungen innerhalb von Blockdefinitionen konvertieren ;; (BW_Act*on-AllBlocks "(BW_DIMT_LKonv (ssget \"_all\" '((0 . \"DIMENSION\"))))") (BW_DIMT_LKonv_AllBlocks) ;; Zeichnung regenerieren (vlax-invoke-method (vla-get-activedocument (vlax-get-acad-object)) 'Regen T) (princ) ) (princ "\n[DIMT_LKonv.LSP]18.06.2010 geladen.") (princ "\nBefehl zum Konvertieren aller Bemassungen: BW_DIMT_LKonv_All\n") (princ) ;|«Visual LISP© Format Options» (80 2 40 2 nil " " 70 9 0 0 0 T T nil T) ;*** KEINEN Text unterhalb des Kommentars hinzufügen! ***|;