| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: MV-Blöcke zweimal mit Ursprung auflösen (2566 mal gelesen)
|
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 08. Mrz. 2013 15:19 <-- editieren / zitieren --> Unities abgeben:
Hallo Lisp-Gemeinde, vielleicht kann mir hier jemand helfen. Es geht um AutoCAD Architecture 2011. Ich würde gerne eine kleine Routine programmieren, die alle Einfügungen eines bestimmten MV-Blocks (zweimal mit Ursprung auflöst. Das Problem dabei ist, dass nach dem ersten Auflösen des MV-Blocks sich unbenannte Blöcke ergeben, die erst beim nächsten Auflösen zu den eigentlichen AutoCAD-Blöcken werden. Nach dem ersten Auflösen habe ich sozusagen neue Objekte und mein Auswahlsatz stimmt nicht mehr. Aufgrund der unbeannten Blöcke "*U36..." kann ich auch die Objekte nicht erneut auswählen. Oder doch? ------------------ Schöne Grüsse Wilfried Nelkel http://www.cad-nelkel.de http://www.schulungshandbuch.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 08. Mrz. 2013 15:36 <-- editieren / zitieren --> Unities abgeben: Nur für Wilfried Nelkel
Hallo Wilfried, nur ganz kurz: _explode ssget "_P" _explode Hintergrund: Die durch das Explode entstandenen Objekte kannst du mit dem Auswahlsatz 'Vorher' ermitteln. Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 08. Mrz. 2013 15:47 <-- editieren / zitieren --> Unities abgeben:
|
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001 AutoCAD/ADT/ACA 2002 - 2023, Hardware: HP Z620 Workstation, 2 x Xeon E5-2690 v2@3.00GHz, 96 GB RAM, NVIDIA Quadro RTX 4000, Windows 10-64bit ..... ATC-Trainer
|
erstellt am: 08. Mrz. 2013 16:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, Also in der befehlszeile funktioniert es. Im Programm irgendwie nicht. Schon das auswählen eines MV-Blocks und selectsimilar schlägt fehl. ------------------ Schöne Grüsse Wilfried Nelkel http://www.cad-nelkel.de http://www.schulungshandbuch.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Mrz. 2013 08:15 <-- editieren / zitieren --> Unities abgeben: Nur für Wilfried Nelkel
Hallo Wilfried, ich bin zwar nicht Holger, aber ich könnte mir vorstellen, daß es folgendermaßen funktionieren müßte (ungetestet): Code:
(defun MvExplode (aws / AWS1 M N) (setq n 0) (repeat (sslength aws) (command "_.explode" (ssname aws n)) (setq aws1 (ssget "_P")) (if aws1 (progn (setq m 0) (repeat (sslength aws1) (command "_.explode"(ssname aws m)) (setq m (+ m 1))))) (setq n (+ n 1))) ) (defun c:test ( / ) (princ "\nMV-Blöcke auswählen:") (MvExplode (ssget)))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Koordinatenausgabe Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 09. Mrz. 2013 10:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, danke für Dein Listing. Aber ich möchte einen bestimmten MV-Block zweimal mit Ursprung auflösen, damit ich eine Blockdefinition habe, auf deren Attribute ich zugreifen kann. Das habe ich bislang programmiert / zusammengeklöppelt. (defun c:sele (/) ;sset) (if (/= (setq sset (ssget "_I")) nil) (progn (setq hnd (ssname sset 0)) ) (progn (setq hnd (entsel "\nWählen Sie den Raumstempel an: ")) (setq hnd (car hnd)) (setq hnd2 (entget hnd)) ) ) (if (= (cdr (assoc 0 hnd2)) "AEC_MVBLOCK_REF") (progn (setq obj (cdr (assoc 0 (entget hnd)))) (setq sset (ssget "_X" (list (cons 0 obj)))) (if (> (sslength sset) 0) (sssetfirst sset sset) ) (command "_EXPLODE" sset "") (princ "\n1. Streich") (setq ss2 (ssget "_p")) ;;; (command "_EXPLODE" ss2 "") ;;; (princ "\n2. Streich") ) (alert "Kein MV-Block gewählt. Programm wird beendet!") ) (princ) ) Das Problem ist wohl das erste "_EXPLODE". Es wird hier nur das erste Element des Auswahlsatzes "SSET" aufgelöst (Drum habe ich das 2. Ursprung in Semikolon gesetzt)
Verwende ich anstatt Explode testhalber "_ERASE" so werden die Objekte im Auswahlsatz gelöscht. Komisch
------------------ Schöne Grüsse Wilfried Nelkel http://www.cad-nelkel.de http://www.schulungshandbuch.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Mrz. 2013 10:12 <-- editieren / zitieren --> Unities abgeben: Nur für Wilfried Nelkel
|
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 09. Mrz. 2013 10:17 <-- editieren / zitieren --> Unities abgeben:
|
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 09. Mrz. 2013 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für Wilfried Nelkel
Hallo Wilfried, so hat bei mir funktioniert: Code:
(defun c:sele ( / OBJ SSET) ;sset) (if (setq sset (ssget "_I")) (setq obj (ssname sset 0)) (setq obj (car(entsel "\nWählen Sie den Raumstempel an: "))) ) (if (and obj (=(cdr(assoc 0 (entget obj))) "AEC_MVBLOCK_REF")) (progn (command "_.explode" obj) (setq sset (ssget "_p")) (command "_.explode" (ssname sset 0)) (setq sset (ssget "_p")) (command "_.explode" (ssname sset 0)) ) (alert "Kein MV-Block gewählt. Programm wird beendet!") ) (princ) )
Bei Dir ist der erste Fehler in folgender Zeile: (setq obj (cdr (assoc 0 (entget hnd)))) Du versuchts einen Objektname (Gruppencode 0) als Objekt weiterzugeben. Weiter habe ich dann nicht mehr geschaut. Probier es aus und Debugge Dich mal durch den Code durch: http://www.bosse-engineering.com/Download/090501_VisualLISP-Editor.pdf
------------------ viele Grüße Jörn http://www.bosse-engineering.com Koordinatenausgabe Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 09. Mrz. 2013 22:39 <-- editieren / zitieren --> Unities abgeben: Nur für Wilfried Nelkel
Zitat: Original erstellt von Wilfried Nelkel: ...Das Problem ist wohl das erste "_EXPLODE". Es wird hier nur das erste Element des Auswahlsatzes "SSET" aufgelöst...
Das ist leider in der Standardeinstellung in Lisp so. Der _EXPLODE Befehl reagiert bei der Lisp-Eingabe anders als in der Befehlszeile und löst nur ein Element auf. Um mit Lisp einen Auswahlsatz in einem Schritt zu zerlegen mußt Du SO vorgehen. Grüsse, Henning
------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 09. Mrz. 2013 22:56 <-- editieren / zitieren --> Unities abgeben:
|
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001 AutoCAD/ADT/ACA 2002 - 2023, Hardware: HP Z620 Workstation, 2 x Xeon E5-2690 v2@3.00GHz, 96 GB RAM, NVIDIA Quadro RTX 4000, Windows 10-64bit ..... ATC-Trainer
|
erstellt am: 09. Mrz. 2013 23:42 <-- editieren / zitieren --> Unities abgeben:
Jetzt muss ich doch nochmal was posten... Folgendes Listing: (defun c:sele (/) ;sset) (if (/= (setq sset (ssget "_I")) nil) (progn (setq hnd (ssname sset 0)) ) (progn (setq hnd (car (entsel "\nWählen Sie den Raumstempel an: "))) ) ) ;;; (if (= (cdr (assoc 0 hnd)) "AEC_MVBLOCK_REF") (if (/= hnd nil) (progn (setq obj (cdr (assoc 0 (entget hnd)))) (setq sset (ssget "_X" (list (cons 0 obj)))) (if (> (sslength sset) 0) (sssetfirst sset sset) ) (setvar "qaflags" 1) (command "_explode" sset "") (setvar "qaflags" 0) (setq ss2 (ssget "_p")) (setvar "qaflags" 1) (command "_explode" ss2 "") (setvar "qaflags" 0) ) ;;;(c:reatt) (alert "Kein MV-Block gewählt. Programm wird beendet!") ) (princ) ) Ich muss (so scheint es zumindest) nach dem ersten "EXPLODE" die Leertaste drücken, damit das zweite Explode korrekt ausgeführt wird. Im Textfenster von AutoCAD sehe ich diese Meldungen: Wählen Sie den Raumstempel an: <Auswahlsatz: 2637> Unbekannter Befehl "SELE". Drücken Sie F1-Taste für Hilfe. Unbekannter Befehl "SELE". Drücken Sie F1-Taste für Hilfe. Also irgendwie kann das doch nicht so schwer sein...
------------------ Schöne Grüsse Wilfried Nelkel http://www.cad-nelkel.de http://www.schulungshandbuch.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 10. Mrz. 2013 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für Wilfried Nelkel
Hallo Wilfried, gestern war ich wohl auf einem falschen Dampfer. Folgender Code müßte passen: Code:
(defun c:sele ( / HND SS2 SSET) ;sset) (if (setq sset (ssget "_I")) (setq hnd (ssname sset 0)) (setq hnd (car (entsel "\nWählen Sie den Raumstempel an: "))) ) ;;; (if (= (cdr (assoc 0 hnd)) "AEC_MVBLOCK_REF") (if hnd (progn (setq sset (ssget "_X" (list (assoc 0 (entget hnd))))) (if (> (sslength sset) 0) (progn (setvar "qaflags" 1) (command "_explode" sset "") (setvar "qaflags" 0) (setq ss2 (ssget "_p")) (setvar "qaflags" 1) (command "_explode" ss2 "") (setvar "qaflags" 0))) ) ;;;(c:reatt) (alert "Kein MV-Block gewählt. Programm wird beendet!") ) (princ) )
Vom Prinzip habe ich nur die Zeile "(sssetfirst sset sset)" rausgenommen, weil Du dem Explode-Befehl doch den Auswahlsatz im Aufruf übergibst. ------------------ viele Grüße Jörn http://www.bosse-engineering.com Koordinatenausgabe Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wilfried Nelkel Mitglied glaubt mir eh keiner
Beiträge: 806 Registriert: 15.03.2001
|
erstellt am: 10. Mrz. 2013 12:21 <-- editieren / zitieren --> Unities abgeben:
Hy Jörn, oft sieht man den Wald vor lauter Bäumen nicht. Vielen herzlichen Dank, es funktioniert genau so wie ich es wollte. Finde ich cool. Danke und 10 U für Dich ------------------ Schöne Grüsse Wilfried Nelkel http://www.cad-nelkel.de http://www.schulungshandbuch.de
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |