Autor
|
Thema: Catia VBA Achsenkreuz erstellen (2698 mal gelesen)
|
Azazel1 Mitglied
Beiträge: 32 Registriert: 08.09.2014 X5450; 16GB Win 7 SP1 CATIA V5R19 SP9
|
erstellt am: 27. Aug. 2015 13:53 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich versuche anhand einer Exceldatei meine Achsenkreuze in Catia zu importieren. Ich habe mir dementsprechend vorerst ein Makro aufgenommen und Achsenkreuz erstellt um zu verstehen wie ein solches erstellt wird. Das ganze dann nach Excel zu importieren wird das geringste Problem. Hier der Code: Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set axisSystems1 = part1.AxisSystems Set axisSystem1 = axisSystems1.Add() axisSystem1.OriginType = catAxisSystemOriginByCoordinates Dim arrayOfVariantOfDouble1(2) arrayOfVariantOfDouble1(0) = 10.000000 arrayOfVariantOfDouble1(1) = 10.000000 arrayOfVariantOfDouble1(2) = 10.000000 axisSystem1.PutOrigin arrayOfVariantOfDouble1 axisSystem1.XAxisType = catAxisSystemAxisByCoordinates Dim arrayOfVariantOfDouble2(2) arrayOfVariantOfDouble2(0) = 0.969846 arrayOfVariantOfDouble2(1) = 0.200706 arrayOfVariantOfDouble2(2) = -0.138258 axisSystem1.PutXAxis arrayOfVariantOfDouble2 axisSystem1.YAxisType = catAxisSystemAxisByCoordinates Dim arrayOfVariantOfDouble3(2) arrayOfVariantOfDouble3(0) = -0.171010 arrayOfVariantOfDouble3(1) = 0.964610 arrayOfVariantOfDouble3(2) = 0.200706 axisSystem1.PutYAxis arrayOfVariantOfDouble3 axisSystem1.ZAxisType = catAxisSystemAxisByCoordinates Dim arrayOfVariantOfDouble4(2) arrayOfVariantOfDouble4(0) = 0.173648 arrayOfVariantOfDouble4(1) = -0.171010 arrayOfVariantOfDouble4(2) = 0.969846 axisSystem1.PutZAxis arrayOfVariantOfDouble4 part1.UpdateObject axisSystem1 axisSystem1.IsCurrent = True part1.UpdateObject axisSystem1 Set settingControllers1 = CATIA.SettingControllers Set visualizationSettingAtt1 = settingControllers1.Item("CATVizVisualizationSettingCtrl") visualizationSettingAtt1.SaveRepository End Sub Meine Frage ist: Gibt es eine andere Möglichkeit ein Achsenkreuz zu erstellen? Wie werden die Raumkoordinaten X/X,X/Y,X/Z,Y/X,Y/Y,Y/Z,Z/X,Z/Y,Z/Z berechnet? Kann ich nicht direkt eine Verdrehung in Beispielsweiße X = 10°, Y = 15° eingeben? Vielen Dank für eure Hilfe Gruß Azazel
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Aug. 2015 14:09 <-- editieren / zitieren --> Unities abgeben: Nur für Azazel1
Servus Gemäß Doku kann leider nicht die Winkel vorgeben, es geht nur über Vektoren (Methoden PutVectors, PutXAxis, PutYAxis, PutZAxis). Dabei geben die Vektoren die Richtung der Achse an (Einheitsvektor ist scheinbar nicht erforderlich). (siehe auch Doku) Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 27. Aug. 2015 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für Azazel1
Hallo Azazel, ich mach's so: Code:
Function CreateNewAxisSp(oParent As Part, strAxisName As String, Optional iCurr As Boolean = True, Optional iAxType As CATAxisSystemMainType = catAxisSystemStandard) As AxisSystem Dim oAxSyst As AxisSystem Set oAxSyst = oParent.AxisSystems.Add() oParent.UpdateObject oAxSyst oAxSyst.Type = iAxType oAxSyst.IsCurrent = iCurr oAxSyst.Name = strAxisName oParent.Update Set CreateNewAxisSp = oAxSyst End Function
Wenn die Normalausrichtung nicht reicht, bekommt das Achseensystem noch einen Dreh: Code:
Sub SetAxisComp(oAxis As Object, arrComp) 'modify axis components ' Dim oAxis As Object 'AxisSystem 'Dest Ax Sys for catpart Ax2Ax translation Dim arrOrg(2) 'PutOrigin - array Dim arrVX(2) 'PutXAxis - array Dim arrVY(2) 'PutYAxis - array Dim arrVZ(2) 'PutZAxis - array arrOrg(0) = arrComp(9) arrOrg(1) = arrComp(10) arrOrg(2) = arrComp(11) oAxis.PutOrigin arrOrg arrVX(0) = arrComp(0) arrVX(1) = arrComp(1) arrVX(2) = arrComp(2) oAxis.PutXAxis arrVX arrVY(0) = arrComp(3) arrVY(1) = arrComp(4) arrVY(2) = arrComp(5) oAxis.PutYAxis arrVY arrVZ(0) = arrComp(6) arrVZ(1) = arrComp(7) arrVZ(2) = arrComp(8) oAxis.PutZAxis arrVZEnd Sub
Hope it helps, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Azazel1 Mitglied
Beiträge: 32 Registriert: 08.09.2014 X5450; 16GB Win 7 SP1 CATIA V5R19 SP9
|
erstellt am: 27. Aug. 2015 14:12 <-- editieren / zitieren --> Unities abgeben:
|
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 27. Aug. 2015 14:34 <-- editieren / zitieren --> Unities abgeben: Nur für Azazel1
die erste Funktion erzeugt ein Achsensystem, die zweite definiert sie im Raum. An der Stelle würde ich jetzt auch sagen. Siehe Doku. Stichworte: AxisSystems, PutOrigin, PutXAxis; Tschau, Joe ------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Azazel1 Mitglied
Beiträge: 32 Registriert: 08.09.2014 X5450; 16GB Win 7 SP1 CATIA V5R19 SP9
|
erstellt am: 27. Aug. 2015 14:45 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Aug. 2015 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für Azazel1
|
Azazel1 Mitglied
Beiträge: 32 Registriert: 08.09.2014 X5450; 16GB Win 7 SP1 CATIA V5R19 SP9
|
erstellt am: 27. Aug. 2015 15:42 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, habe mir jetzt die Hilfe angesehen und bin schon etwas weiter. Jetzt ist nur noch meine Frage ich bekomme aus der Simulation ein Excel Tabelle mit den Werten X Y Z Rx Ry Rz 10 10 10 10 10 10 davon soll ich jetzt ein Koordiantenkreuz in Catia anlegen. Wenn ich es von händisch mache kommen folgende Werte raus. X/X 0,9698 X/Y 0,2007 X/Z -0,138 Y/X -0,171 Y/Y 0,9646 Y/Z 0,2007 Z/X 0,1736 Z/Y -0,171 Z/Z 0,9698 Wie sieht der Code aus, wenn ich dieses Koordinatenkreuz per VBA erstelle? Mein Code: Sub CATMain() Set partDocument1 = CATIA.ActiveDocument Set part1 = partDocument1.Part Set axisSystems1 = part1.AxisSystems Set axisSystem1 = axisSystems1.Add() Dim originCoord(2) originCoord ( 0 ) = 10.000000 originCoord ( 1 ) = 10.000000 originCoord ( 2 ) = 10.000000 axisSystem1.PutOrigin originCoord Dim XAxis(2) XAxis ( 0 ) = 10.000000 XAxis ( 1 ) = 10.000000 XAxis ( 2 ) = 10.000000 axisSystem1.PutXAxis XAxis Dim YAxis(2) YAxis ( 0 ) = 10.000000 YAxis ( 1 ) = 10.000000 YAxis ( 2 ) = 10.000000 axisSystem1.PutYAxis YAxis End Sub So hat das Achsenkreuz jedoch eine andere Ausrichtung. Hoffe ihr habt noch etwas geduld mit mir :P Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Aug. 2015 15:45 <-- editieren / zitieren --> Unities abgeben: Nur für Azazel1
|
Azazel1 Mitglied
Beiträge: 32 Registriert: 08.09.2014 X5450; 16GB Win 7 SP1 CATIA V5R19 SP9
|
erstellt am: 27. Aug. 2015 16:03 <-- editieren / zitieren --> Unities abgeben:
Rx ist die Rotation um 10° in der X-Achse. Ry ist die Rotation um 10° in der Y-Achse. Rz ist die Rotation um 10° in der Z-Achse. Dementsprechend geb ich auch die Rotation in Catia an, wenn ich rechtsklick auf x axis klicke und Rotation auswähle. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 11780 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Aug. 2015 16:04 <-- editieren / zitieren --> Unities abgeben: Nur für Azazel1
|
Azazel1 Mitglied
Beiträge: 32 Registriert: 08.09.2014 X5450; 16GB Win 7 SP1 CATIA V5R19 SP9
|
erstellt am: 31. Aug. 2015 09:40 <-- editieren / zitieren --> Unities abgeben:
|
joehz Moderator Freiberuflicher Konstrukteur
Beiträge: 1057 Registriert: 25.11.2006 Win7 Pro 64 + Ubuntu + Irix6.5.20 Dell Precision M6600 i7-2960XM 2.7GHz 16GB NVidia Quadro M5010 Catia V5R19 VB6Pro.SP6/VBA 6.5.1053
|
erstellt am: 31. Aug. 2015 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für Azazel1
Hallo azazel, wenn ich mich recht entsinne, sind die Winkel im Bogenmass anzugeben. Die Werte selbst bewegen sich zwischen 0 und +/- 1(für sin(x) oder cos(x). Ein Wert von '10' für die Achsenrichtung kann nicht vorkommen. Vielleicht wär's geschickt, mit einem einfachen Winkel anzufangen, zB 30°? Nur so als Idee. Tschau, Joe
------------------ The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence. ~Charles Bukowski Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Azazel1 Mitglied
Beiträge: 32 Registriert: 08.09.2014 X5450; 16GB Win 7 SP1 CATIA V5R19 SP9
|
erstellt am: 31. Aug. 2015 12:50 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich denke ich bin mittlerweile zu einem korrekten Ergebnis gekommen. Jedoch bin ich mir nicht ganz sicher, worin der Unterschied zwischen Eulerischen Winkel und Kardesischen Winkel besteht. Da ich in der Automobilindustrie unterwegs bin, wird unser Achsenkreuz zuerst um Z gedreht, anschließend um Y und als letztes um X. Es wird immer um die daraus resultierende Achse gedreht. [URL=https://de.wikipedia.org/wiki/Eulersche_Winkel][/URL]. In diesem Beitrag gibt es unter der "Gier-Nick-Roll: z, y′, x″-Konvention" eine Matrix. Die daraus resultierende Matrix stimmt mit meinen Werten in Catia überein, wenn ich dort zuerst um Z,Y,X mein Achsenkreuz drehe. Vielen Dank für die Hilfe. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |