Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Bauteil in Baugruppe ausrichten

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:  Bauteil in Baugruppe ausrichten (5243 mal gelesen)
dechgo
Mitglied
Dipl. Ing. (FH)


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

Beiträge: 93
Registriert: 13.04.2005

Win 7 (64bit)
Inventor 2011
AutoCAD 2011
Producstream Professional Pro 2011

erstellt am: 05. Jun. 2009 14:41    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 möchte per VBA ein Bauteil in eine Baugruppe einfügen und dies an eine vorgegebene Position verschieben und durch vorgegeben Winkel im Raum ausrichten.

Das einfügen und Positionieren klappt einwandfrei. Nur beim Drehen, bzw. ausrichten komme ich nicht weiter.

Mir ist ehrlich gesagt nicht ganz klar was Inventor beim Drehen macht. Ich habe mit dem Matrix-Befehl "SetToRotation" herumgespielt.
Wenn ich das Bauteil nur um eine Achse drehen will funktioniert es einwandfrei.

Wenn ich das Bauteil mittels VBA um den xAchsen-Vektor(1,0,0) um 45°drehe und danach den Code nochmals laufen lassen müsste eigentlich eine Gesamtrotation von 90° rauskommen. Allerdings dreht er bei gar nicht weiter.
Anscheinend spielt bei der Rotation bereits die Orientierung des Bauteils ein Rolle.
wie kann ich dann ein bereits verdrehtes Teil einfach weiter drehen?

Vielleicht kann mir einer weiterhelfen...

Gruss Dennis


hier der Code:

Public Sub Rottest()

Dim oTeil As ComponentOccurrence

Dim otransgeom As TransientGeometry
Dim xAchse As Vector
Dim yAchse As Vector
Dim zAchse As Vector
Dim opunkt As Point
Dim oMatrix As Matrix

Dim neueAchse As Vector

Dim pi

pi = 4# * Atn(1#)
    'Referenz auf Applikation
    Dim oApp As Application
    Set oApp = ThisApplication

    'Referenz auf Dokument
    Dim oDoc As AssemblyDocument
    Dim oAsmCompDef As AssemblyComponentDefinition
   
    Set oDoc = oApp.ActiveDocument
    Set oAsmCompDef = ThisApplication.ActiveDocument.ComponentDefinition
    Set otransgeom = oApp.TransientGeometry
    Set oMatrix = otransgeom.CreateMatrix
   
    Set oTeil = oAsmCompDef.Occurrences.Item(3)
   
   
    'achsen:
    Set xAchse = otransgeom.CreateVector(1, 0, 0)
    Set yAchse = otransgeom.CreateVector(0, 1, 0)
    Set zAchse = otransgeom.CreateVector(0, 0, 1)
   
    Set opunkt = otransgeom.CreatePoint(0, 0, 0)
   
     
   
    Call oMatrix.SetToRotation(90 * pi / 180, yAchse, opunkt)
    oTeil.Transformation = oMatrix

end sub


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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 05. Jun. 2009 20:40    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 dechgo 10 Unities + Antwort hilfreich

Hallo

Weiter gedreht wird in dem du den neuen (Gesamt)Winkel angibst. Das heißt in deinem Fall, ist das Teil schon um 45° gedreht, muß für eine weitere Drehung um 45° ein Winkel von 90° angegeben werden.

------------------
MfG
RK

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

dechgo
Mitglied
Dipl. Ing. (FH)


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

Beiträge: 93
Registriert: 13.04.2005

Win 7 (64bit)
Inventor 2011
AutoCAD 2011
Producstream Professional Pro 2011

erstellt am: 07. Jun. 2009 23:49    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 rkauskh,

vielen Danke für die Antwort.

Das ist aber nur soweit hilfreich, wenn ich genau weiss, wie das Teil ausgerichtet ist.
Wenn es aber nun bereits im Raum verdreht liegt und ich es einfach um eine vorgegeben Achse, um einen bestimmten Winkel drehen möchte funktioniert das aber schon nicht mehr.
In gewisser Weise suche ich einen Befehl der einfach dreht und keine Rücksicht auf die aktuelle Lage nimmt.

Die einzige Idee die ich noch habe ist, die Positionsmatrix des Bauteils auszulesen und durch Matrizenmultiplikation mit einer Rotationsmatrix die neue Rotation durchführe. Naja empfinde ich aber etwas umständlich, hab die Hoffnung dass es etwas einfacher geht....

Gruss Dennis

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 11. Jun. 2009 16:50    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 dechgo 10 Unities + Antwort hilfreich

Hallo

Zitat:
die Positionsmatrix des Bauteils auszulesen und durch Matrizenmultiplikation mit einer Rotationsmatrix die neue Rotation durchführe

Laut Hilfe soll es aber genauso gehen. Hab's ausprobiert, aber mein Versuchsteil dachte nicht daran sich zu drehen. Ich glaub ich hätte in der Schule beim Thema Matrizen doch besser aufpassen sollen. 

------------------
MfG
RK

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

dechgo
Mitglied
Dipl. Ing. (FH)


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

Beiträge: 93
Registriert: 13.04.2005

Win 7 (64bit)
Inventor 2011
AutoCAD 2011
Producstream Professional Pro 2011

erstellt am: 25. Jun. 2009 09: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

hallo rkauskh,

bin nun endlich mal dazu gekommen, dass mit der Matrizenmultiplikation auszuprobieren:

Also bei mir funktioniert meine Gedachte vorgehensweise. Also Positionsmatrix des Bauteils auslesen und dann mit einer Rotationsmatrix drehen.

Hier ist mein Code.
Um den Code zu verwenden folgende Vorgehensweis: Neue Baugruppe, ein Bauteil reinladen (dieses am besten in den Ursprung legen, keine Abhängigkeiten vergeben). Bauteil selektieren und Code ausführen.
Jedes mal wenn der Code ausgeführt wird, wird das Bauteil um 30° um die x-Achse der Baugruppe gedreht.

Public Sub Rot_x()
'Rotation um x-Achse


Dim pi

pi = 4# * Atn(1#)

    'Referenz auf Applikation
    Dim oApp As Application
    Set oApp = ThisApplication

    'Referenz auf Dokument
    Dim oDoc As AssemblyDocument
    Set oDoc = oApp.ActiveDocument
   
    Dim oTransGeom As TransientGeometry
    Set oTransGeom = oApp.TransientGeometry


    Dim oPosMatrix As Matrix
    Dim oRotMatrix As Matrix

    Set oPosMatrix = oTransGeom.CreateMatrix
    Set oRotMatrix = oTransGeom.CreateMatrix

   
    Dim ss As SelectSet
    Set ss = oDoc.SelectSet
   
   
    'Bauteil aus Selektion:
    Dim oCompOcc As ComponentOccurrence
    Set oCompOcc = ss.Item(1)
   

    'Winkel 30°:
    Dim theta As Double
    theta = 30 * pi / 180

    'Postionsmatrix vom Bauteil:
    Set oPosMatrix = oCompOcc.Transformation

    'RotationsMatrix erzeugen:
    Set oRotMatrix = rot_x_Matrix(theta)
   
    'Matrizenmultiplikation:
    Call oRotMatrix.PostMultiplyBy(oPosMatrix)
   
   
    'Bauteil anhand Matrix positionieren:
    oCompOcc.Transformation = oRotMatrix
       

End Sub


Function rot_x_Matrix(theta As Double) As Matrix
'Rotation um x-Achse

Dim oMatrix As Matrix

    Set oMatrix = ThisApplication.TransientGeometry.CreateMatrix

    '1. Spalte
    oMatrix.Cell(1, 1) = 1
    oMatrix.Cell(2, 1) = 0
    oMatrix.Cell(3, 1) = 0
    oMatrix.Cell(4, 1) = 0
   
    '2. Spalte
    oMatrix.Cell(1, 2) = 0
    oMatrix.Cell(2, 2) = Cos(theta)
    oMatrix.Cell(3, 2) = Sin(theta)
    oMatrix.Cell(4, 2) = 0

    '3. Spalte
    oMatrix.Cell(1, 3) = 0
    oMatrix.Cell(2, 3) = -Sin(theta)
    oMatrix.Cell(3, 3) = Cos(theta)
    oMatrix.Cell(4, 2) = 0

    '4.Spalte
    oMatrix.Cell(1, 4) = 0
    oMatrix.Cell(2, 4) = 0
    oMatrix.Cell(3, 4) = 0
    oMatrix.Cell(4, 4) = 1
   
    Set rot_x_Matrix = oMatrix

End Function


Gruss Dennis

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 25. Jun. 2009 19:43    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 dechgo 10 Unities + Antwort hilfreich

Hallo

Danke für den Code, vielleicht versteh ich damit ja mal wie das mit Matrizen funktioniert.   

------------------
MfG
RK

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