Lisp für alles von Block setzten innerhalb von Blöcken? / Rund um AutoCAD
nena23 06. Dez. 2019, 16:11

Noch jemand wach? 

meinte ich hätte sowas mal gehabt.
Müllzeichnungen mit reichlich Blöcken müssen aufgehübscht werden. Und jeden Blocktyp einzeln öffnen und Eigenschaften auf "von Block" umlegen dauert zu lange.

Danke

spider_dd 06. Dez. 2019, 16:20

Ist zwar schon etwas älter, aber könnte das sein was Du meinst.
Klick

HTH
Gruß
Thomas

nena23 06. Dez. 2019, 16:36

Danke, aber läuft nicht. "Fehlerhafte DXF-Gruppe: ((-1 . <Objektname: 6...."

Andreas Kraus 09. Dez. 2019, 09:00

Hallo nena23,
hier mal ein Lisp dass die Farbe aller Objekte in allen Blöcken auf vonblock stellt.

Kannst du erweitern für Linientyp, Linienstärke, usw.

Code:
(vlax-for blk (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
(if (= (vla-get-IsLayout blk) :vlax-false)
(vlax-for obj blk
(vla-put-color obj 0)
)
)
)

EDIT: Da ist jetzt noch nichts mit Layer tauen, entsperren oder irgend eine Fehlerbehandlung dabei

nena23 09. Dez. 2019, 09:29

Danke. Aber irgendwie passiert da nix. Habs mit appload geladen.
Meldung: Keine Umwandlung des lisp-Wertes in VARIANT mit folgendem Typ:  0

Dirk

Andreas Kraus 09. Dez. 2019, 13:36

Vielleicht so:

Code:
(vl-load-com)
(vlax-for blk (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
(if (= (vla-get-IsLayout blk) :vlax-false)
(vlax-for obj blk
(if (vlax-property-available-p obj "color")
(vla-put-color obj 0)
)
)
)
)

Ich hab mal reingeschrieben dass die Farbe nur geändert wird wenn das Objekt auch "Farbe hat"

Ach ja ... danach bitte regenerieren

CADmium 09. Dez. 2019, 13:49

(vl-load-com)
(defun C:BLKOBJCOLOR(/ blk obj TC-OBJ)
(vlax-for blk (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
      )
  (if (= (vla-get-IsLayout blk) :vlax-false)
    (vlax-for obj blk
      (cond
        ((and(not(vl-catch-all-error-p                             
                  (setq TC-OBJEKT(vl-catch-all-apply
                                    'vlax-property-available-p
                                      (list OBJ 'TrueColor)
                                    )
                  )
                )
            )
            TC-OBJEKT
            (not(vl-catch-all-error-p                             
                  (setq TC-OBJEKT(vl-catch-all-apply
                                    'vla-Get-TrueColor
                                    (list OBJEKT)
                                  )     
                  )
                )
            )
          )   
          (vla-put-ColorMethod TC-OBJEKT acColorMethodByLayer)
       
          (vlax-release-object TC-OBJEKT)
        )                       
        ((vlax-property-available-p obj "color")
            (vla-put-color obj acbyBlock)
        )
      )                 
    )
  )
)
(vla-Regen(vla-get-activedocument(vlax-get-acad-object))acAllViewports)
)

nena23 09. Dez. 2019, 14:00

Danke erstmal, werde ich nochmal ausprobieren.
Habe inzwischen im x-ten Versuch eine lsp gefunden ("fixblockII") die es ohne Fehlermeldung tut. Zwar auf vonLayer, aber das passt hierfür auch.
Dirk


cadffm 09. Dez. 2019, 15:38

Schau das die verwendeten Codeschnipsel nicht alle Blöcke bearbeiten, denn es ist nicht
wirklich was du möchtest (je nach Datei/Inhalt/Stilen).

Die Beispiele hier im Thread sind dann doch eher fürs programmierende Volk
die sich derartige Sicherungen noch selbst einbauen.

Bemaßungen, StandardBemaßungspfeile, , Tabellen oder auch Anordnungn und mehr noch sind auch alles "Blöcke",
ich denke nicht das du wirklich ALLE bearbeiten willst.
(falls doch, ist es ein diskussionswürdiges Vorhaben  )

Musicus 11. Dez. 2019, 10:58

Zitat:
Original erstellt von nena23:
Danke erstmal, werde ich nochmal ausprobieren.
Habe inzwischen im x-ten Versuch eine lsp gefunden ("fixblockII") die es ohne Fehlermeldung tut. Zwar auf vonLayer, aber das passt hierfür auch.
Dirk



Wenn das Ergebnis VONLAYER auch passt, dann sollte es der Befehl _-SETBYLAYER eigentlich auch tun.