Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  90 Grad rotieren

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:  90 Grad rotieren (2247 mal gelesen)
archstudent
Mitglied



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

Beiträge: 29
Registriert: 06.02.2005

erstellt am: 24. Aug. 2005 13: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

Hallo!

Ich möchte das Arbeitstempo mit Autocad etwas verbessern. Statt dem normalen drehen soll z.B. Drehen um 90 Grad mit dem Tastenkürzel
Str + L (bzw R) funktionieren.

Jetzt wollte ich mir ein Button machen und diesen mit einem vlisp verknüpfen. Allerdings klappt das mit dem lisp noch nicht so (soll mein erster Code werden... ;-))


;;; Function C:rotate90 = Programm
(defun C:rotate90 ()

; objekt wählen, aus Schwerpunkt rotationsachse wählen


   
; rotieren um 90 Grad

Command: (command "_rotate" P1 P2 "")

)


(princ)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Wie bekomme ich den Schwerpunkt eines beliebigen Objekts?
Wie kann ich den Winkel von z.B. 90 Grad am Besten reinbasteln?

Danke!


Dominik

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

.

erstellt am: 24. Aug. 2005 14:16    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 archstudent 10 Unities + Antwort hilfreich

normales rotieren:
(command "_rotate" pause "" pause "90")
und
(command "_rotate" pause "" pause "-90")

.. und wo ist der "Schwerpunkt" z.B. einer Polylinie .. Lnienschwerpunkt,Flächenschwerpunkt usw... das ist auch etwas mehr Rechnerei

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 24. Aug. 2005 16:00    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 archstudent 10 Unities + Antwort hilfreich

Hallo Dominik

Also wenn das dein erster Code werden soll hast du dir zu viel vorgenommen. Die Aufgabenstellung hört sich zwar einfach an, ist sie aber nicht. Das ist zwar bei Objekten wie Kreise oder Linien zu bewerkstelligen, aber bei andern komplexeren Objekten, oder mehreren unterschidelichen eine irre Arbeit (soll heißen nicht zu machen). Zudem ist auch fraglich ob man die Objekte immer um den Schwerpunkt drehen möchte. Für den Anfang ist die Lösung von Thomas genau das Richtige.

------------------
  Martin 

Viele Grüße aus dem schönen Münsterland!

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

archstudent
Mitglied



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

Beiträge: 29
Registriert: 06.02.2005

erstellt am: 24. Aug. 2005 17:09    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

Gerne ein bischen mehr! ;-)

Hab' mich zuvor schon mit VBA beschäftigt, nun wollte ich mal n' bischen lispeln.


...es muß ja nicht genau der Schwerpunkt aller Objekte sein. Wenn ich allerdings den Nullpunkt angebe, kann es sein, daß ich erst einmal mit suchen beschäftigt bin. Es reicht vielleicht schon die Auswahlstelle oder so.

Wie bekomme ich es hin, daß ich auch mehrere Objekte auf einmal wählen kann?


;;; Function C:rotate90 = Programm
(defun C:rotate90 ()

; objekt wählen, aus Schwerpunkt rotationsachse wählen

   
; rotieren um 90 Grad

Command: (command "_rotate" pause "" pause "90")

)


(princ)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


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

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



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

Beiträge: 2490
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 24. Aug. 2005 17:29    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 archstudent 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von archstudent:
Wie bekomme ich es hin, daß ich auch mehrere Objekte auf einmal wählen kann?

Code:

(princ "\nLos jetzt, wählen!: ")
(setq sget (ssget))

Wenn Du dann was gewählt hast, erhälst Du ein Selection Set.
Weitere Vearbeitung siehe VLisp-Hilfe: ssname, sslength, repeat, while

------------------
Ciao,
Marc

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

archstudent
Mitglied



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

Beiträge: 29
Registriert: 06.02.2005

erstellt am: 24. Aug. 2005 19:16    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

Danke Marc,

funktioniert so weit alles. Wie kann man die Anzahl der Klicks aber noch reduzieren, z.B. das nach dem Kreuzen keine Bestätigung erforderlich ist und daß das Selectionset nicht vor dem rotieren und der Auswahl des Basispunktes zusätzlich aktiviert werden muß?


;;; Function C:Abdichtung = Programm
(defun C:rotate90 ()


; objekt wählen, aus Schwerpunkt rotationsachse wählen


(princ "\nLos jetzt, wählen!: ")
(setq alles (ssget))

; rotieren um 90 Grad

Command: (command "_rotate" pause "" pause "90")


)


(princ)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

tunnelbauer
Ehrenmitglied V.I.P. h.c.
Bauingenieur



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

Beiträge: 7085
Registriert: 13.01.2004

ich hab eh keine Probleme damit...

erstellt am: 24. Aug. 2005 19: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 archstudent 10 Unities + Antwort hilfreich

1. Was ist das was du da gepostet hast ? (oder ist dir da Code in die Signatur gerutscht ?)
2. Was funktioniert alles ? Poste mal was du hast - denn ohne deinen Code zu sehen können wir nicht sagen was geändert gehört. Das was du da gepostet hast kann nicht funktionieren...
3. Wie soll AutoCAD wissen, dass du keine weiteren Objekte wählen willst wenn du dies nicht explizit bestätigst ?
4. Das mit dem Basispunkt ist dasselbe wie bei Punkt 2. (wir brauchen den Code um zu wissen was korregiert gehört)

------------------
Grüsse

Thomas

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

.

erstellt am: 24. Aug. 2005 21:44    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 archstudent 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von archstudent:
Ich möchte das Arbeitstempo mit Autocad etwas verbessern...

..lassen ?

Wenn mein Eindruck täuschen soll,
dann arbeite dich z.B. mit Mapcar'S Seiten oder der Online-Hilfe im VLIDE etwas in die Lisp-Thematik ein und dann geht's konkret weiter. Wie soll das funktionieren , wenn dir hier was von vla-get-Boundingbox, mapcar und anderen Sachen erzählt wird und das Elementare fehlt ?
P.S.Die Foren-Suchfunktion sollte zu den Stichworten auch schon etwas finden.

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

archstudent
Mitglied



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

Beiträge: 29
Registriert: 06.02.2005

erstellt am: 24. Aug. 2005 22:35    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 Thomas!

Es geht lediglich darum, durch ein Tastenkürzel selektierte Objekte um 90 Grad zu drehen, statt den nette Drehen-Button anzuklicken, das Objekt zu wählen, zu bestätigen, den Winkel von 90 Grad einzutippen und dann nochmal zu bestätigen.....

Dat muß mit ner lächerlichen Zeile Lisp funktionieren!!!

Funktioniert auch soweit, nachdem man ein BD-Button damit gefütter und ein Tastenkürzel vergeben hat.

Autocad dürfte wohl eines der besten CAD-Programme sein,im Vergleich zu Vectorworks ist es aber im Bereich Arbeitstempo "nackt" schlichtweg lahm. Aber da kann man ja nachhelfen!

Trotzdem danke für den Link!

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

.

erstellt am: 24. Aug. 2005 23:00    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 archstudent 10 Unities + Antwort hilfreich

ok .. wenn's schon um Selektierte Elemente geht :
(if (or(setq AUSWAHL(ssget "_I"))
      (setq AUSWAHL(ssget))
    )
  (command "_rotate" AUSWAHL "" pause "90")
)

P.S. kann man auch in eine Zeile schreiben 

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 24. Aug. 2005 23:19    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 archstudent 10 Unities + Antwort hilfreich

Hallo archstudent,

Ich denke du brauchst erst einmal einen Fahrplan, und dann kannst du dich mit einzelnen Details beschäftigen. In jedem deiner Beiträge kam bisher immer auch ein neuer Wunsch zur Funktionalität heraus .. wäre das alles von Beginn an bekannt gewesen, hätten die Lösungsvorschläge sicher auch anders ausgesehen.

Wenn ich das alles richtig interpretiere, dann wählst du irgendwie irgendwelche Zeichnungselemente aus, mit einem KreuzenFenster - ok. Dieser Vorgang gehört mit in das Lisp, nur dann kannst du auf einfachem Wege den Drehpunkt bestimmen und den zusätzlichen Klick zum Beenden der Objektwahl sparen.

du musst also wie folgt vorgehen:
(setq p1(getpoint ..);erste Fensterecke
(setq p2(getcorner p1 ..);zweite Fensterecke
(setq aws(ssget "_C" p1 ..);Kreuzen-Auswahl, evtl, auch noch eine Filterliste?
(setq dpt (list (/(+ (car p1)(car p2))2.0)(/(+ (cadr p1)(cadr p2))2.0)));Das ist die Mitte des Kreuzen-Fensters
Nun hast du alles, was du brauchst:
aws=Elemente als Auswahlsatz
dpt=Drehpunkt
(command "_rotate" aws "" dpt 90.0)

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH                              Autodesk User Group Central Europe
Individuelle Lösungen von Heute auf Morgen.              AUGCE Manager Deutschland

Jackpot on demand - Wir eröffnen den Spätsommer mit einer Verlosung!

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

mkl-cad
Mitglied
Technischer Zeichner


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

Beiträge: 378
Registriert: 23.07.2003

ACAD 2002
Express Tools 1-9
Architektural Desktop
Windows XP
Server Windows 2003
3 GHz Rechner
1 GB RAM
80 GB Festplatte
ATI FireGL V3100
2 17" Flachbildschirme

erstellt am: 25. Aug. 2005 07:57    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 archstudent 10 Unities + Antwort hilfreich

Hallo

ich glaube ich weiß nun was Dominik genau will. Die Lösung von Holger ist zwar schon richtig. Dominik möchte aber als Auswahlsatz die schon markierten Objekte benutzen (Objekt vor Befehl)?
So: ?

(defun C:rotate90 ()
(setq AWS (ssget))
(princ "\nDrehpunkt: ")
(command "_rotate" aws "" pause 90.0)
(princ)
)
So schon besser?


Aber deine Wünsche gehen zu weit :-)  Wie soll ACAD ohne Bestätigung wissen wann man alle Objekte gewählt hat? Einzelauswahl geht. (Variable pickadd)
Wie soll ermittelt werden um welchen Punkt die Objekte gedreht werden sollen. Ermittlung eines Schwerpunktes ist zu schwer, siehe oben.
Das mach bei einzelnen Objekten ja eher gehen, bei Blöcken wirds schon wieder schwer. Sollen die um den Basispunkt gedreht werden? Und Polylinien? Man könnte dann höchstens einen Filter einbauen der solche Objekte ausfiltert. Ein Programm das von allen verschiednen Objekten den Scherpunkt ermittelt mach ich aber nicht (Hab dafür momentan keine Zeit)

OK, hab gerade gesehen das Thomas das schon vorgeschlagen hat. Dann vergessen wir mein gelispel da oben wieder.
------------------
        Martin       

Viele Grüße aus dem schönen Münsterland!

[Diese Nachricht wurde von mkl-cad am 25. Aug. 2005 editiert.]

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

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: 25. Aug. 2005 12:39    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 archstudent 10 Unities + Antwort hilfreich

Hallo Dominik!
ich hatte hier mal die Funktion get-bounding-box eingestellt. Mit einer kleinen Änderung kriegt man damit auch so eine Art "Schwerpunkt". In Wirklichkeit ist das die Mitte des umschreibenden Rechtecks, aber bei den meisten Grundobjekten damit auch der "Schwerkunkt", bzw. die "Mitte" des Objekts.
Hier der geänderte Code:
Code:
(defun get-bounding-box-center (ename / vlaname minb maxb)
  (vl-load-com)
  (setq vlaname (vlax-ename->vla-object ename))
  (vla-GetBoundingBox vlaname 'minb 'maxb)
  (setq minb (vlax-safearray->list minb))
  (setq maxb (vlax-safearray->list maxb))
  (list (/ (+ (car minb) (car maxb)) 2) (/ (+ (cadr minb) (cadr maxb)) 2) (/ (+ (last minb) (last maxb)) 2))
)

Einschränkung: geht nur mit einem Objekt. Der Dreh wäre dann mit

Code:
(command "_rotate" (setq dummy (car (entsel))) "" (get-bounding-box-center dummy) 90)
zu bewerkstelligen.

Grüsse, Henning

------------------
VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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

.

erstellt am: 25. Aug. 2005 12:53    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 archstudent 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von wronzky:
Einschränkung: geht nur mit einem Objekt

wie man es auf mehrere anwedet kannst du z.B:hieraus entnehmen ...


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

archstudent
Mitglied



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

Beiträge: 29
Registriert: 06.02.2005

erstellt am: 25. Aug. 2005 20:46    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

Hey, danke für die vielen Lösungen!!!

ich hab' mir jetzt was zusammengebastelt:


(defun C:r90 ( / AUSWAHL INDEX elem  xmin xmax MINX MAXX MINY MAXY)
  (vl-load-com)
  (if(or(and(setq AUSWAHL (ssget "I"))(>(sslength AUSWAHL) 0))
        (and(setq AUSWAHL (ssget))    (>(sslength AUSWAHL) 0))
    )
    (progn
      (setvar "Pickfirst" 1)   
      (command "_ucs" "_W")
      (setq INDEX -1)
      (repeat (sslength AUSWAHL)
        (setq ELEM(ssname AUSWAHL(setq INDEX (1+ INDEX))))     
        (vla-getboundingbox
          (vlax-ename->vla-object elem)
          'xmin
          'xmax
        )
        (if (= INDEX 0)
          (progn           
            (setq MINX (car (vlax-safearray->list xmin)))
            (setq MINY (cadr(vlax-safearray->list xmin)))
            (setq MAXX (car (vlax-safearray->list xmax)))
            (setq MAXY (cadr(vlax-safearray->list xmax)))
          )
          (progn
            (if (<(car (vlax-safearray->list xmin)) MINX)(setq MINX (car (vlax-safearray->list xmin))))
            (if (<(cadr(vlax-safearray->list xmin)) MINY)(setq MINY (cadr(vlax-safearray->list xmin))))
            (if (>(car (vlax-safearray->list xmax)) MAXX)(setq MAXX (car (vlax-safearray->list xmax))))
            (if (>(cadr(vlax-safearray->list xmax)) MAXY)(setq MAXY (cadr(vlax-safearray->list xmax))))
          )
        )
       
      ) 
 

(setq minb (list MINX MINY))
(setq maxb (list MAXX MAXY))
   
(command "_rotate" AUSWAHL "" (list (/ (+ (car minb) (car maxb)) 2) (/ (+ (cadr minb) (cadr maxb)) 2) (/ (+ (last minb) (last maxb)) 2)) 90.0)
(command "_ucs" "_V")

    )
  )
)


...funktioniert super! *ggg*

Wenn jetzt nur noch das(/die) gedrehte(n) Objekt(e) selektiert blieben.

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

.

erstellt am: 25. Aug. 2005 20:52    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 archstudent 10 Unities + Antwort hilfreich

dazu kannst du (sssetfirst AUSWAHL AUSWAHL) nach dem command nutzen

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

archstudent
Mitglied



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

Beiträge: 29
Registriert: 06.02.2005

erstellt am: 25. Aug. 2005 21:17    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

Genial!

Autocad geht so langsam richtig ab... :-)))))))))))

Der fertige Code:

(defun C:r90 ( / AUSWAHL INDEX elem  xmin xmax MINX MAXX MINY MAXY)
  (vl-load-com)
  (if(or(and(setq AUSWAHL (ssget "I"))(>(sslength AUSWAHL) 0))
        (and(setq AUSWAHL (ssget))    (>(sslength AUSWAHL) 0))
    )
    (progn
      (setvar "Pickfirst" 1)   
      (command "_ucs" "_W")
      (setq INDEX -1)
      (repeat (sslength AUSWAHL)
        (setq ELEM(ssname AUSWAHL(setq INDEX (1+ INDEX))))     
        (vla-getboundingbox
          (vlax-ename->vla-object elem)
          'xmin
          'xmax
        )
        (if (= INDEX 0)
          (progn           
            (setq MINX (car (vlax-safearray->list xmin)))
            (setq MINY (cadr(vlax-safearray->list xmin)))
            (setq MAXX (car (vlax-safearray->list xmax)))
            (setq MAXY (cadr(vlax-safearray->list xmax)))
          )
          (progn
            (if (<(car (vlax-safearray->list xmin)) MINX)(setq MINX (car (vlax-safearray->list xmin))))
            (if (<(cadr(vlax-safearray->list xmin)) MINY)(setq MINY (cadr(vlax-safearray->list xmin))))
            (if (>(car (vlax-safearray->list xmax)) MAXX)(setq MAXX (car (vlax-safearray->list xmax))))
            (if (>(cadr(vlax-safearray->list xmax)) MAXY)(setq MAXY (cadr(vlax-safearray->list xmax))))
          )
        )
       
      ) 
 

(setq minb (list MINX MINY))
(setq maxb (list MAXX MAXY))
   
(command "_rotate" AUSWAHL "" (list (/ (+ (car minb) (car maxb)) 2) (/ (+ (cadr minb) (cadr maxb)) 2) (/ (+ (last minb) (last maxb)) 2)) 90.0)
(command "_ucs" "_V")
(sssetfirst AUSWAHL AUSWAHL)

    )
  )
)


Danke an alle!

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