| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Blöcke um Einfügepunkt spiegeln (Lisp oder Makro) (2075 mal gelesen)
|
3jalex Mitglied
Beiträge: 244 Registriert: 13.03.2006 AutoCAD MEP 2013 AutoCAD Architecture 2013 Windows 7 Professional 64 Bit Vectorworks 2013
|
erstellt am: 02. Jul. 2010 17:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute Ich möchte gerne einzelne Blöcke zurückpiegeln. Hier ist ein tolles Lisp welches ALLE Blöcke am Einfügepunkt speigelt: (defun c:blkmirror ( / ALISTE tfac) (setq ALISTE (ssget "_X" '( (0 . "INSERT") ) ) ) (if ALISTE (progn (mapcar '(lambda (el) (command "_.mirror" el "" (setq tfac(cdr(assoc 10(entget el)))) (polar tfac pi 10.0) "_Y") ) (bau_elemli ALISTE) ) ) ) (princ) ) (defun bau_elemli (asatz / n elemli) (setq n 0) (repeat (sslength asatz) (setq elemli(cons (ssname asatz n) elemli) n (1+ n)) ) elemli )
Das habe ich hier gefunden: http://ww3.cad.de/foren/ubb/Forum54/HTML/004538.shtml#000002 Weiss jemand wie man nur einen Block oder eine Auswahl von Blöcken am Eifügepunkt spiegelt? Ich möchte ja die richtigen Böcke nicht spiegeln. Vielen Dank Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 02. Jul. 2010 18:14 <-- editieren / zitieren -->
Hi, mach Dich mit SSGET vertraut, guck in die Hilfe und insbesondere um die Bedeutung von "X". Ohne Optionen könntest Du's mal so probieren (tauschen): (setq ALISTE (ssget '((0 . "INSERT")))) - alfred - ------------------ www.hollaus.at |
3jalex Mitglied
Beiträge: 244 Registriert: 13.03.2006 AutoCAD MEP 2013 AutoCAD Architecture 2013 Windows 7 Professional 64 Bit Vectorworks 2013
|
erstellt am: 05. Jul. 2010 08:55 <-- editieren / zitieren --> Unities abgeben:
Vilen Dank Alfred Wow. Mit der neuen Zeiele geht es fast perfekt Jedoch funktioniert es nicht bei allen Blöcken. Manchmal kommt diese Fehlermeldung: BLKMIRROR 2 gefunden Punkte dürfen nicht identisch sein. Funktion abgebrochen Wie könnte man das noch beheben? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 05. Jul. 2010 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für 3jalex
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 05. Jul. 2010 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für 3jalex
|
3jalex Mitglied
Beiträge: 244 Registriert: 13.03.2006 AutoCAD MEP 2013 AutoCAD Architecture 2013 Windows 7 Professional 64 Bit Vectorworks 2013
|
erstellt am: 05. Jul. 2010 09:08 <-- editieren / zitieren --> Unities abgeben:
|
3jalex Mitglied
Beiträge: 244 Registriert: 13.03.2006 AutoCAD MEP 2013 AutoCAD Architecture 2013 Windows 7 Professional 64 Bit Vectorworks 2013
|
erstellt am: 05. Jul. 2010 10:21 <-- editieren / zitieren --> Unities abgeben:
Da hab ich mich wohl zu früh gefreut. Das Gewählte wird um das WKS um die X-Achse gespiegelt. Eigentlich sollte es um die X-Achse des jeweiligen Objektes gespiegelt werden. Hier einer meiner früheren versuchen mit einem Makro: ^C^C_ucs;o \_ucs;X;90;_rotate;v;;0,0,0;180;_ucs;w; Dieses geht zwar mit drehen (anstatt spiegeln) mann muss aber das Objekt immer vorher auswählen (sonst stimmt der Drehpunkt nicht). Leider kann ich kein Lisp und beim Script ist es mit der Auswahl schwierig. In diesem Fall komme ich wohl nicht um Lisp herum... Ein Attsync zum Dessert wäre auch noch schön Gruss Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 05. Jul. 2010 10:33 <-- editieren / zitieren --> Unities abgeben: Nur für 3jalex
|
3jalex Mitglied
Beiträge: 244 Registriert: 13.03.2006 AutoCAD MEP 2013 AutoCAD Architecture 2013 Windows 7 Professional 64 Bit Vectorworks 2013
|
erstellt am: 07. Jul. 2010 09:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Vielen, vielen Dank für das Lisp. Mit der Anpassung von Alfred geht CACmium's Lisp für die Y-Achse. Der aktuelle Stand ist weiter unten. Nun suche ich noch die Anpassung für die X-Achse. Da ich weder ein X noch ein Y oder 0,0;1,0 gefunden habe, weiss ich nicht wie ich das Lisp anpassen kann: (defun c:blkmirror ( / ALISTE tfac) (defun bau_elemli (asatz / n elemli) (if(=(type ASATZ)'PICKSET) (progn (setq n -1) (repeat (sslength asatz) (setq elemli(cons (ssname asatz (setq N(1+ N))) elemli)) ) elemli ) ) ) (if(setq ALISTE (ssget '((0 . "INSERT")))) (mapcar '(lambda (el / DATA) (setq DATA(entget el)) (setq gc41(assoc 41 DATA)) (entmod(subst (cons 41(*(cdr gc41)-1))gc41 DATA)) ) (bau_elemli ALISTE) ) ) (command "_attsync" "_n" "*") (princ) ) 1) Wo kann ich hier die Spiegelachse von Y auf X ändern? 2) Wie kann ich das Attsync nur auf die vorher gewählten Blöcke anwenden (nicht wie oben für alle)? Diese Anpassung: (command "_attsync" "auswählen" "L" "J") hat nicht die gewählten Blöcke sondern nur den letzten Block synchronisiert.
Besten Dank. [Diese Nachricht wurde von 3jalex am 07. Jul. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 07. Jul. 2010 10:18 <-- editieren / zitieren --> Unities abgeben: Nur für 3jalex
zu 1.) (entmod(subst (cons 42(*(cdr gc42)-1))gc42 DATA)) das sind einfach die Sklalierfaktoren der Blockreferenz ... die mal -1 multipliziert ist eine Spiegelung.... ein bißchen Beschäftigung mit der Materie würde nicht schaden! zu.2 ) das ist aufwendiger ..Ermittlung aller Blocknamen in der Auswahl und dann übergabe an Attsync... könnte dann so aussehen: (defun c:blkmirror ( / ALISTE tfac N BLKLIST) (defun bau_elemli (asatz / n elemli) (if(=(type ASATZ)'PICKSET) (progn (setq n -1) (repeat (sslength asatz) (setq elemli(cons (ssname asatz (setq N(1+ N))) elemli)) ) elemli ) ) ) (if(setq ALISTE (ssget '((0 . "INSERT")))) (mapcar '(lambda (el / DATA) (setq DATA(entget el)) (setq gc41(assoc 41 DATA)) (entmod(subst (cons 41(*(cdr gc41)-1))gc41 DATA)) (if (not(member (setq N(strcase(cdr(assoc 2 DATA)))) BLKLIST)) (setq BLKLIST(cons N BLKLIST)) ) ) (bau_elemli ALISTE) ) ) (foreach BLK BLKLIST (command "_attsync" "_n" BLK) ) (princ) ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |