Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  TransformBy für Point3D

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:  TransformBy für Point3D (1408 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: 10. Mrz. 2009 16:25    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


muster.zip

 
Hallo,

habe folgende Frage:

Ich muss nach wie vor einen Punkt vom WCS in ein benutzerdefiniertes Koordinatensystem umwandeln, da ich die Daten für meinen Export so brauche. Ich habe in der angehängten Zeichnung das beschrieben, wie ich es haben möchte.

Ich habe in der Klasse Point3D die Funktion TransformBy gefunden, die eine Matrix von mir haben möchte. Meine Frage: Wie erzeuge ich eine solche Materix damit ich das gewünschte Ergbnis erhalte?

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

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


Ex-Mitglied

erstellt am: 10. Mrz. 2009 17:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Benny,

hilft Dir das?

Fragt nach einem Punkt und zeigt Dir dann die Koordianten lt. WCS und lt UCS 

Code:
Dim tPntRes As EditorInput.PromptPointResult = tAcadDoc.Editor.GetPoint(vbNewLine & "Punkt zeigen: ")
If tPntRes.Status = EditorInput.PromptStatus.OK Then
   Debug.Print("Im WCS: " & tPntRes.Value.ToString)
   Dim tPnt2 As Geometry.Point3d = tPntRes.Value.TransformBy(tAcadDoc.Editor.CurrentUserCoordinateSystem)
   Debug.Print("Im UCS: " & tPnt2.ToString)
Else
   'kein punkt gewaehlt oder abgerochen
End If

- alfred -

[EDIT]sorry, obiger code ist verkehrt, weil GetPoint die Koordinaten lt. UCS retourniert, im Grund kannst Du aber, wenn Du den Punkt im WCS von der Linie bekommst, dann einfach schreiben:
.TransformBy(tAcadDoc.Editor.CurrentUserCoordinateSystem.Inverse)
[/EDIT]


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

[Diese Nachricht wurde von a.n. am 10. Mrz. 2009 editiert.]

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. Mrz. 2009 17: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

Hi Alfred,

ich glaube schon dass mir das hilft. Nur ist hier vorausgesetzt, dass der Benutzer das benutzerdefinierte UCS selbst schon erzeugt hat. Und genau das möchte icht nicht haben. Ich möchte automatisch evt. mittels 3 Punkten ein UCS erzeugen, nur habe ich das nocht nicht hingekriegt.

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

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


Ex-Mitglied

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

Hi Benny,

gehört noch gefeilt, dass gleich Punkte herangezogen werden, die rechte Winkel ergeben, aber das wäre mal ein Beispiel (meldet noch Fehler, wegen nicht-senkrecht zueinanderstehender Achsangaben, zeigt aber Vorgehensweise)

Code:
   Public Shared Sub CADde_createUCS()
      Dim tAcadDoc As ApplicationServices.Document = Nothing
      Try
         tAcadDoc = ApplicationServices.Application.DocumentManager.MdiActiveDocument
         Dim tCCSys As Geometry.CoordinateSystem3d = tAcadDoc.Editor.CurrentUserCoordinateSystem.CoordinateSystem3d  'current coordinate system

         Dim tPntOrig As Geometry.Point3d = New Geometry.Point3d(10, 20, 30)  'origin of ucs
         Dim tPntXDir As Geometry.Point3d = New Geometry.Point3d(25, 25, 45)  'punkt, der x-richtung zeigt
         Dim tPntYDir As Geometry.Point3d = New Geometry.Point3d(25, 40, 45)  'punkt, der x-richtung zeigt
         Dim tVecX As Geometry.Vector3d = (tPntXDir - tPntOrig).GetNormal
         Dim tVecY As Geometry.Vector3d = (tPntYDir - tPntOrig).GetNormal

         Dim tCoordSys As Geometry.CoordinateSystem3d = New Geometry.CoordinateSystem3d(New Geometry.Point3d(10, 20, 30), tVecX, tVecY)

         Dim tCoordMat As Geometry.Matrix3d = New Geometry.Matrix3d
         tCoordMat = Geometry.Matrix3d.AlignCoordinateSystem(tCCSys.Origin, tCCSys.Xaxis, tCCSys.Yaxis, tCCSys.Zaxis, tCoordSys.Origin, tCoordSys.Xaxis, tCoordSys.Yaxis, tCoordSys.Zaxis)

         tAcadDoc.Editor.CurrentUserCoordinateSystem = tCoordMat
      Catch ex As Exception
         Call MsgBox("Fehler aufgetreten" & vbNewLine & ex.Message)
      End Try

   End Sub


- alfred -

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

[Diese Nachricht wurde von a.n. am 10. Mrz. 2009 editiert.]

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: 11. Mrz. 2009 17: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

Hallo Alfred,

ich hätte da noch eine Frage:
Eigentlich brauche ich dieses UCS nur um die Matrix herauszukriegen, damit ich meine Punkte umrechnen kann. Meine Frage: Kann ich anhand von meinen 3 Punkten (Ursprungspunkt, Punkt auf X - Achse, Punkt in Y - Richtung) eine Matrix definieren ohne den Umweg über das UCS zu machen?

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

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


Ex-Mitglied

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

Hi Benny,
Zitat:
Eigentlich brauche ich dieses UCS nur um die Matrix herauszukriegen
...jetzt nähern wir uns;)

Matrix-Definitionen sind fast eine eigene Wissenschaft, da wird's jetzt leider (von meiner Seite) wenig Source geben, da das einigermaßen intensiv (zeitaufwendig) ist und ich bisher nicht so gearbeitet habe (verwende Matrix-Funktionen lediglich um Objekte zu schieben, drehen oder skalieren, und da gibt's vorbereitete Funktionen dafür

Geometry.Matrix3d.Displacement
Geometry.Matrix3d.Rotation
Geometry.Matrix3d.Scale

und auf die schnelle bin ich (auch am gestrigen Beispiel zu ersehen) nicht zu dem Punkt gekommen, dass die Ausgangsvektoren senkrecht zueinander stehen, ist eine Menge Vektoren-Rechnung, das übersteigt die Zeit, die ich hier investieren kann, nicht böse sein. 

Solange Deine Geometrie-/Punktexportfunktion nicht auch noch skaliert wird, kannst Du mit einer leeren Matrix beginnen und dann in Einzelschritten mit obigen Funktionen 'hinbiegen', sprich mit Displacement schiebst Du's zu Deinem Ursprung, dann drehst Du's einmal um die X-Achse, einmal um die Y-Achse (wenn überhaupt noch notwendig, denn Dein BKS in der Musterzeichnung war doch senkrecht ausgerichtet) und dann sollte diese definiert sein.

Beispiel:

Code:
            Dim tMatrix As Geometry.Matrix3d = New Geometry.Matrix3d
      tMatrix = Geometry.Matrix3d.Rotation(Math.PI / 2, New Geometry.Vector3d(0, 1, 0), Geometry.Point3d.Origin)
      tMatrix = tMatrix * Geometry.Matrix3d.Displacement(New Geometry.Vector3d(10, 10, 10))


Wichtig zu beachten sind die Reihenfolgen des Aufbaus, diese sind nicht tauschbar bzw. liefern unterschiedliche Ergebnisse!!

- alfred -

- alfred -

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

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: 12. Mrz. 2009 12: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 Alfred,

so langsam glaub ich verstehe ich ungefähr so vielleicht ein bisschen irgendwie wie die Matrix funktioniert. Jedenfalls besten Danke für deine Hilfe!!

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

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