Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Objekte drehen, kopieren, verschieben

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:  Objekte drehen, kopieren, verschieben (4008 mal gelesen)
Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 09. Dez. 2008 17: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

Hi,

verwendet VB.NET und möchte meine ausgewählten Linien drehen und verschieben. In VBA gabs da die Funktionen myLine.Move und myLine.Rotate.

Sowas kann ich in .NET nicht finden. Wie kann ich trotzdem meine Objekte verschieben und drehen? Hab die Funktion TransformBy gesehen, kann mit der aber absolut nichts anfangen.

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

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


Ex-Mitglied

erstellt am: 09. Dez. 2008 17:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Benny,

und genau da hast Du schon das richtige gefunden. '<Entity>.TransformBy' ist die Lösung, damit lassen sich Verschiebungen, Skalierungen, Drehungen angeben, und diese neue Matrix (als Ergebnis) wird dann auf die Objekte angewendet.

z.B. eine Verschiebung um 10|10|0 siehst so aus:

Code:
Dim tMoveMat As Geometry.Matrix3d = Geometry.Matrix3d.Displacement(New Geometry.Vector3d(10, 10, 0))
call tNewObj.TransformBy(tMoveMat)

- alfred -

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 10. Dez. 2008 09: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

Hi Alfred,

super danke, hast mir mal wieder weitergeholfen! 

Bis zum nächsten mal... 

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

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

Silvan01
Mitglied



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

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 25. Aug. 2009 14: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 Benny4 10 Unities + Antwort hilfreich

Hallo Zusammen,

habe diesen Beitrag mal ausgegraben um zu fragen wie man eine Curve (Bei mir Polylinie) z.B. 45° im Uhrzeigersinn drehen kann.
Habs mal folgendermaßen probiert aber da tut sich nichts:

Dim Angle as Double = 45
Dim tMoveMat As Matrix3d = Matrix3d.Rotation(Angle, New Vector3d(0, 0, 0), tCurve.StartPoint)
tTrAct.GetObject(tCurve.Id, OpenMode.ForWrite, True, True)
tCurve.TransformBy(tMoveMat)
tAcadDoc.Editor.UpdateScreen()

Kann mir jemand sagen was ich falsch mache?

Grüße Silvan

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


Ex-Mitglied

erstellt am: 25. Aug. 2009 18:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

mit 'Grad' ist nix mit Winkel in der EDV.  Du musst schon auf Radiant umrechnen, also

<Winkel in Grad> / 180 * Math.PI

und 'UpdateScreen' wirkt erst nach TransAction.Commit (glaub ich halt mal)

- alfred-

PS: diese beiden Dinge wären mir mal aufgefallen, ohne den Code zu probieren, ich hoffe nichts übersehen zu haben. 

------------------
www.hollaus.at

Silvan01
Mitglied



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

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 26. Aug. 2009 08:51    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 Benny4 10 Unities + Antwort hilfreich


Screen_Drehen.JPG

 
Hallo Alfred,

hab die beiden Sachen geändert es tut sich aber leider immer noch nichts.
Bei meinem Programmablauf soll der Benutzer eine Polylinie (Das Objekt, dass gedreht werden soll) wählen und anschließend eine andere Polylinie (Mit nur 2 Punkten). Danach soll meine zuerst gewählte Polylinie sich anhand der 2. verdrehen. Am Ende meines Progamms soll die Polylinie mit allen Objekten innerhalb wieder zurückgedreht werden. Wie macht man das am besten?

Folgenden Code hab ich zum verdrehen:

tCurve = Get_Curve(tTrAct, tAcadDoc.Editor, False, "Bitte wählen Sie das Objekt: ")
Dim Helpline As Curve = Get_Curve(tTrAct, tAcadDoc.Editor, False, "Bitte wählen Sie die Hilfslinie: ")
Dim tAdjLeg As Double = Helpline.Bounds.Value.MaxPoint.X - Helpline.Bounds.Value.MinPoint.X
Dim tOppLeg As Double = Helpline.Bounds.Value.MaxPoint.Y - Helpline.Bounds.Value.MinPoint.Y
Dim tHyp As Double = Math.Sqrt(tOppLeg * tOppLeg + tAdjLeg * tAdjLeg)
Angle = Get_Angle(Helpline, tOppLeg, tHyp) 'Hier bekomme ich den Radiant zurück
Dim tMoveMat As Matrix3d = Matrix3d.Rotation(Angle, New Vector3d(0, 0, 0), tCurve.StartPoint)
tTrAct.GetObject(tCurve.Id, OpenMode.ForWrite, True, True)
tCurve.TransformBy(tMoveMat)
tTrAct.Commit()
tAcadDoc.Editor.UpdateScreen()

Hab anbei mal einen Screenshot hochgeladen der zum Verständis dient   

Grüße Silvan

[Diese Nachricht wurde von Silvan01 am 26. Aug. 2009 editiert.]

[Diese Nachricht wurde von Silvan01 am 26. Aug. 2009 editiert.]

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



Techniker / Ingenieur (m/w/d) Elektrotechnik
Menschen und Technologien zu verbinden, den Perfect Match für unsere Kunden zu gestalten, immer die richtigen Expert:innen für die jeweilige Herausforderung zu finden - das ist unser Anspruch bei FERCHAU und dafür suchen wir dich: als ambitionierte:n Kolleg:in, der:die wie wir Technologien auf die nächste Stufe bringen möchte. Wir realisieren spannende Projekte für namhafte Kunden in den Technologiebereichen ...
Anzeige ansehenElektrotechnik, Elektronik

Ex-Mitglied

erstellt am: 26. Aug. 2009 18:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Silvan,

nun das Statment:
Dim tMoveMat As Matrix3d = Matrix3d.Rotation(Angle, New Vector3d(0, 0, 0), tCurve.StartPoint)

birgt einen Auffassungsunterschied zwischen der Doku und dem eigenen Willen. 
Wenn Du eine Achse bestimmst, um welche gedreht werden soll, dann muß die Achse einen Vektor spezifizieren, aus dem zumindest eine Richtung abgeleitet werden kann, in Deinem Fall (0,0,0) gibt es keine Richtung, daher auch keine gültige Achse, daher ev. auch keine gültige Rotationsmatrix. Setze den Vektor auf (0,0,1), dann ist festgelegt, dass um die Z-Achse gedreht wird.

Sollte es bei Dir mit obiger Änderung nicht wirken, dann hier der Code, mit dem ich getestet habe, da funktionierts und Du kannst vergleichen.

Code:
Dim tObj As Entity = Nothing
Dim tSelRes As EditorInput.PromptEntityResult = tAcadDoc.Editor.GetEntity("Element wählen")
If (tSelRes IsNot Nothing) AndAlso (tSelRes.ObjectId.IsValid) Then tObj = CType(tTrAct.GetObject(tSelRes.ObjectId, OpenMode.ForRead, True, True), Entity)
Dim tCurve As DatabaseServices.Curve = CType(tObj, DatabaseServices.Curve)

Dim tObj2 As Entity = Nothing
Dim tSelRes2 As EditorInput.PromptEntityResult = tAcadDoc.Editor.GetEntity("Element wählen")
If (tSelRes2 IsNot Nothing) AndAlso (tSelRes2.ObjectId.IsValid) Then tObj2 = CType(tTrAct.GetObject(tSelRes2.ObjectId, OpenMode.ForRead, True, True), Entity)
Dim Helpline As DatabaseServices.Curve = CType(tObj2, DatabaseServices.Curve)

Dim tAdjLeg As Double = Helpline.Bounds.Value.MaxPoint.X - Helpline.Bounds.Value.MinPoint.X
Dim tOppLeg As Double = Helpline.Bounds.Value.MaxPoint.Y - Helpline.Bounds.Value.MinPoint.Y
Dim tHyp As Double = Math.Sqrt(tOppLeg * tOppLeg + tAdjLeg * tAdjLeg)
Dim tAngle As Double = Helpline.StartPoint.GetVectorTo(Helpline.EndPoint).AngleOnPlane(New Geometry.Plane())
Dim tMoveMat As Geometry.Matrix3d = Geometry.Matrix3d.Rotation(tAngle, New Geometry.Vector3d(0, 0, 1), tCurve.StartPoint)
tTrAct.GetObject(tCurve.Id, OpenMode.ForWrite, True, True)
tCurve.TransformBy(tMoveMat)

tTrAct.Commit()
tAcadDoc.Editor.UpdateScreen()



- alfred -

------------------
www.hollaus.at

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