| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Markieren mit vla-get-... (1260 / mal gelesen)
|
Emu1989 Mitglied Elektroplaner
Beiträge: 26 Registriert: 10.11.2015 AutoCAD 2018
|
erstellt am: 03. Dez. 2018 18:10 <-- editieren / zitieren --> Unities abgeben:
Tagchen Habe eine Lisp gefunden, in welcher ich die Blöcke sperren und wieder freigeben kann. Die ist ganz gut und würde mir auch viel Zeit ersparen, allerdings sperrt sie mir die Blöcke im ganzen Dokument. (vl-load-com) (princ) (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (if (and (= :vlax-false (vla-get-islayout blk)) (= :vlax-false (vla-get-isxref blk)) ) (vla-put-explodable blk :vlax-false) ) ) (princ) )
Die Auswahlfunktion mit setq ... (car (entsel "\nBlbalabla.. und entget ist mir bekannt, kann ich hier allerdings nicht anwenden, da ich keine Ahnung habe, mit was ich: (vla-get-activedocument (vlax-get-acad-object)) ersetzten soll.
Vielleicht kann mir ja jemand helfen. Gruss Emu
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wolfgang Kirsch Mitglied Büroberater
Beiträge: 41 Registriert: 29.04.2002
|
erstellt am: 03. Dez. 2018 20:29 <-- editieren / zitieren --> Unities abgeben: Nur für Emu1989
Da muss nichts ersetzt werden, die Idee mit entget ist schon recht gut. Eine kleine Ergänzung reicht: Code:
(defun c:not_explode (/ BLOCKNAMEN BLOCKNAMES IDX) (vl-load-com) ;(princ) ist hier überflüssig (setq blocknames (ssget (list (cons 0 "INSERT") (cons 67 0)))) ; Auswahlsatz bilden: Blockreferenzen im Modellbereich (if blocknames ; wenn etwas gefunden wurde, dann (progn (setq idx 0) ; setze Index für Schleife (repeat (sslength blocknames) ; wiederhole so oft, wie Objekte im Auswahlsatz sind (setq blocknamen (cons ; bilde eine Liste mit dem Namen der Blockreferenz (cdr (assoc 2 (entget (ssname blocknames idx)))) ; hier den Namen extrahieren blocknamen ; und durch das "cons" in die Liste "Blocknamen" werfen ) ;_ end of cons ) ;_ end of setq (setq idx (1+ idx)) ; setze index eins rauf ) ;_ end of repeat ) ;_ end of progn ) ;_ end of if (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)) ) ;_ end of vla-get-blocks (if (and (member (vla-get-name blk) blocknamen) ; wenn der Name der Blockdefinition in der Liste der ausgewählten Blockreferenzen enthalten ist (= :vlax-false (vla-get-islayout blk)) (= :vlax-false (vla-get-isxref blk)) ) ;_ end of and (vla-put-explodable blk :vlax-false) ) ;_ end of if ) ;_ end of vlax-for (princ) ) ;_ end of defun (c:not_explode)
Ist jetzt zwar ein Mix aus visual und vanilla Lisp, aber was soll's. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Emu1989 Mitglied Elektroplaner
Beiträge: 26 Registriert: 10.11.2015 AutoCAD 2018
|
erstellt am: 04. Dez. 2018 09:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Kirsch Wahnsinn wie lange ich gestern ausprobiert und versucht habe und du das aus der Hand schüttelst. Mit (member (vla-get-name blk) blocknamen) geht's Vielen Dank für deine Mühe und Zeit. Die kurzen Inputs zu den Zeilen sind echt der Hit. Jedoch noch eine kleine Frage; wenn ich es richtig verstanden habe und ich einen Block markiere, wird mit den Zeilen ((setq idx 0) (repeat (sslength blocknames) ) eine Schleife gesetzt um jede Blockdefinition/-name im angewählten Block auszufiltern und in einer "temporären" liste zu speichern, welche wieder ausgelesen wird? Dementsprechend müsste dann in allen Unterblöcken ebenfalls (vla-put-explodable blk) auf vlax-false gesetzt werden? Oder sehe ich das falsch? =)
Grüsschen Emu Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Emu1989 Mitglied Elektroplaner
Beiträge: 26 Registriert: 10.11.2015 AutoCAD 2018
|
erstellt am: 04. Dez. 2018 11:37 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 04. Dez. 2018 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für Emu1989
|
C4DP4P57 Mitglied Technischer Zeichner
Beiträge: 153 Registriert: 06.05.2009 Win 10 Windows 10 Enterprise 64Bit Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz 32 GB RAM NVIDIA Quadro P1000 AutoCAD 2019.1.2 64Bit
|
erstellt am: 04. Dez. 2018 14:02 <-- editieren / zitieren --> Unities abgeben: Nur für Emu1989
Hallo, beziehst du das AutoCAD-Magazin? Im Heft 2/2008 gab es eine LISP namens Blockade.lsp mit fünf Befehlen (blocklock, blockunlock, blocklockall, blockunlockall, Switch-Blocklock). Schreib einfach mal die Redaktion an. P.S. Da steht zwar "getestet unter 2006 bis 2008", aber bei mir unter AutoCAD 2019 läuft es ohne Probleme. Gruß Jörg ------------------ Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Emu1989 Mitglied Elektroplaner
Beiträge: 26 Registriert: 10.11.2015 AutoCAD 2018
|
erstellt am: 04. Dez. 2018 15:18 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörg Danke für deinen super Tipp, ja das wäre genau das was ich suche, bis auf das, dass ich sicher 1000 Blöcke habe, bei welchen ich sep. die Namen auflisten müsste, da ich nur immer der erste Block gesperrt haben möchte. @cadffm: Danke für deine Erklärung, momentan fehlt mir die Zeit, mich hier so tief einzulesen, daher habe ich auf Hilfe von hier gehofft. Selber machen macht natürlich Freude aber wenn ich etwas kann, helfe ich gerne jemandem, der das nicht kann, so hilft er mir sicherlich ebenfalls Mal, falls er etwas benötigt was er nicht kann. "Teamwork" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Emu1989 Mitglied Elektroplaner
Beiträge: 26 Registriert: 10.11.2015 AutoCAD 2018
|
erstellt am: 04. Dez. 2018 16:12 <-- editieren / zitieren --> Unities abgeben:
Habe etwas gefunden, was mir das Leben nun bedeutend einfacher macht. Danke trotzdem allen für eure Hilfe. Hoffe ihr könnt dies ebenfalls so gut gebrauchen wie ich. (Datei angehängt) Gruss Emanuel Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |