Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  CATIA V5 Programmierung
  Bauteil innerhalb der Produktstruktur um seine eigene X-Achse 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 CATIA & Co.
  
KISTERS 3DViewStation: Germar Nikol - Der Visionär hinter der Erfolgsgeschichte, eine Pressemitteilung
Autor Thema:  Bauteil innerhalb der Produktstruktur um seine eigene X-Achse rotieren (22 mal gelesen)
ballazolo
Mitglied
Entwicklungsengineure


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

Beiträge: 38
Registriert: 20.08.2013

HP Z420
Intel(R), Xeon(R), CPU E5-1620, 3,60 GHz
Arbeitsspeicher: 16GB

erstellt am: 15. Mai. 2025 14:02    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 zusammen,

ich versuche, ein Bauteil in CATIA mithilfe des untenstehenden VBA-Codes zu rotieren. Das Bauteil ist bereits in einer Produktstruktur positioniert. Die Rotation soll jedoch um die X-Achse des lokalen Koordinatensystems des Bauteils erfolgen – nicht um das globale Koordinatensystem.

- Die neue XOrientierung der rotierten Bauteil ist gegebem (die RotationsAchse)
- Die YOrientierung der rotierten Bauteil rechne ich mithilfe der folgenen Funktion aus:

Function RotateVector(V As Variant, axis As Variant, angleDeg As Double) As Variant
    Dim k(0 To 2) As Double
    Dim length As Double
    Dim angleRad As Double
    Dim i As Integer

    ' 1. Achse normalisieren
    length = Sqr(axis(0) ^ 2 + axis(1) ^ 2 + axis(2) ^ 2)
    If length = 0 Then
        MsgBox "Fehler: Rotationsachse darf kein Nullvektor sein"
        Exit Function
    End If
    For i = 0 To 2
        k(i) = axis(i) / length
    Next i

    ' 2. Winkel in Radiant
    angleRad = angleDeg * PI / 180

    ' 3. Berechne Kreuzprodukt k × v
    Dim cross(0 To 2) As Double
    cross(0) = k(1) * V(2) - k(2) * V(1)
    cross(1) = k(2) * V(0) - k(0) * V(2)
    cross(2) = k(0) * V(1) - k(1) * V(0)

    ' 4. Skalarprodukt k · v
    Dim dot As Double
    dot = k(0) * V(0) + k(1) * V(1) + k(2) * V(2)

    ' 5. Berechne die drei Terme der Rodrigues-Formel
    Dim term1(0 To 2) As Double
    Dim term2(0 To 2) As Double
    Dim term3(0 To 2) As Double
    Dim Result(0 To 2) As Double

    For i = 0 To 2
        term1(i) = V(i) * Cos(angleRad)
        term2(i) = cross(i) * Sin(angleRad)
        term3(i) = k(i) * dot * (1 - Cos(angleRad))
        Result(i) = term1(i) + term2(i) + term3(i)
    Next i

    RotateVector = Result
End Function

- Die ZOrientierung wird mithilfe des Crossproducts berechnet. Das Crossproduct gibt die Normale zwischen den XOrientierung und YOrientierung aus

Sub CrossProduct(v1() As Double, v2() As Double, v3() As Double)
Den Normalenvektor kann man mit dem Kreuzprodukt berechnen.
'Dim f(2), s(2), n(2)
'oPL.GetFirstAxis f
'oPL.GetSecondAxis s
'n(0) = f(1) * s(2) - f(2) * s(1)
'n(1) = f(2) * s(0) - f(0) * s(2)
'n(2) = f(0) * s(1) - f(1) * s(0)
v3(0) = (v1(1) * v2(2) - v1(2) * v2(1))
v3(1) = (v1(2) * v2(0) - v1(0) * v2(2))
v3(2) = (v1(0) * v2(1) - v1(1) * v2(0))
End Sub


Zwar berechne ich die Transformationsmatrix basierend auf einer Drehung um die lokale Achse, aber beim Anwenden in CATIA wird die Rotation dennoch relativ zum globalen Achsensystem durchgeführt.

Hier ist der Code damit man einen Bauteil in Produkt cotext verschiebt/positioniert:

Set move1 = productToMove.Move
Set move1 = move1.MovableObject
Dim arrayOfVariantOfDouble1(11)

arrayOfVariantOfDouble1(0) = XCoord(0)
arrayOfVariantOfDouble1(1) = XCoord(1)
arrayOfVariantOfDouble1(2) = XCoord(2)

arrayOfVariantOfDouble1(3) = YCoord(0)
arrayOfVariantOfDouble1(4) = YCoord(1)
arrayOfVariantOfDouble1(5) = YCoord(2)

arrayOfVariantOfDouble1(6) = ZCoord(0)
arrayOfVariantOfDouble1(7) = ZCoord(1)
arrayOfVariantOfDouble1(8) = ZCoord(2)

arrayOfVariantOfDouble1(9) = Position(0)
arrayOfVariantOfDouble1(10) = Position(1)
arrayOfVariantOfDouble1(11) = Position(2)

Set move1Variant = move1
move1Variant.Apply arrayOfVariantOfDouble1


Problem:
Die Rotation wird aktuell in Bezug auf das globale Koordinatensystem ausgeführt, anstatt sich auf das lokale Koordinatensystem des Bauteils zu beziehen.

Frage:
Wie kann ich eine Rotation so anwenden, dass das Bauteil sich tatsächlich um sein eigenes lokales Koordinatensystem dreht – speziell um dessen X-Achse – und nicht um das globale Koordinatensystem?

Für jeden Hinweis wäre ich sehr dankbar!


[Diese Nachricht wurde von ballazolo am 16. Mai. 2025 editiert.]

[Diese Nachricht wurde von ballazolo am 19. Mai. 2025 editiert.]

Von Ralf Tide am 10.06. aus dem Dokumente-Forum hierher verschoben...

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)2025 CAD.de | Impressum | Datenschutz