Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Rund um AutoCAD
  Blöcke um Einfügepunkt spiegeln (Lisp oder Makro)

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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



Sehen Sie sich das Profil von 3jalex an!   Senden Sie eine Private Message an 3jalex  Schreiben Sie einen Gästebucheintrag für 3jalex

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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



Sehen Sie sich das Profil von 3jalex an!   Senden Sie eine Private Message an 3jalex  Schreiben Sie einen Gästebucheintrag für 3jalex

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3jalex 10 Unities + Antwort hilfreich

... da hast du sicher den Objektfang aktiv ... den mal abschalten ...
Z.B.
(if ALISTE
    (progn
      (setvar "OSMODE" (+ (getvar "OSMODE")16384))
      (mapcar......

------------------
      - 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

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 05. Jul. 2010 08:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3jalex 10 Unities + Antwort hilfreich

Hast du OSNAPCOORD ordentlich eingestellt ? (siehe AutoCAD-Hilfe)

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

3jalex
Mitglied



Sehen Sie sich das Profil von 3jalex an!   Senden Sie eine Private Message an 3jalex  Schreiben Sie einen Gästebucheintrag für 3jalex

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Jupeee

Das wars. Ohne Objektfang funktioniets prima.

Vielen Dank.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

3jalex
Mitglied



Sehen Sie sich das Profil von 3jalex an!   Senden Sie eine Private Message an 3jalex  Schreiben Sie einen Gästebucheintrag für 3jalex

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3jalex 10 Unities + Antwort hilfreich

reicht nicht

(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 "_X"'((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)
)

------------------
  - 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

3jalex
Mitglied



Sehen Sie sich das Profil von 3jalex an!   Senden Sie eine Private Message an 3jalex  Schreiben Sie einen Gästebucheintrag für 3jalex

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für 3jalex 10 Unities + Antwort hilfreich

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz