Hi,
ich möchte von einem Part in einem Product die Koordinaten und Winkel der Verschiebung per macro abrufen.
Manuell mache ich das über den "Translation or Rotation"-Befehl in der "DMU-Navigator" Umgebung.
Ich habe ein Part in einem Product dass ich über den "Translation or Rotation"-Befehl verschoben bzw. gedreht habe.
X=1mm
Y=2mm
Z=3mm
RotX=0deg
RotY=45deg
RotZ=90deg
(siehe auch Screenshot im Anhang)
Mit folgendem Code bekomme ich die Werte:
Code:
Sub CATMain()
'***DEKLARATIONEN
Dim intProdDocObj As ProductDocument
Dim intRootProdObj As Product
Dim intProdsObj As Products
Dim intProdObj As Product
Dim intPositionObj As Object
Dim intPosArr(11)
'***OBJEKTE HOLEN
Set intProdDocObj = CATIA.ActiveDocument
Set intRootProdObj = intProdDocObj.Product
Set intProdsObj = intRootProdObj.Products
Set intProdObj = intProdsObj.Item(57) '(intProdsObj.Count)
Set intPositionObj = intProdObj.position
'***POSITION IN ARRAY SCHREIBEN
intPositionObj.GetComponents intPosArr
End Sub
Das Macro gibt folgende Werte zurück:
intPosArr(0) = 0
intPosArr(1) = 0,707
intPosArr(2) = -0,707
intPosArr(3) = -1
intPosArr(4) = 0
intPosArr(5) = 0
intPosArr(6) = 0
intPosArr(7) = 0,707
intPosArr(8) = 0,707
intPosArr(9) = 1 (Verschiebung in X)
intPosArr(10) = 2 (Verschiebung in Y)
intPosArr(11) = 3 (Verschiebung in Z)
Die Verschiebung ist mir klar. Die steht in intPosArr(9) - intPosArr(11)
Aber wie bekomme ich nun die Winkel aus den Werten intPosArr(0) - intPosArr(8)?
Idealerweise möchte ich eine MsgBox die mir dann einfach zum Beispiel für RotY = 45 grad ausgibt
Ich habe den ganzen Tag etwas über Drehmatrizen und Transformationsmatrizen gelesen. Komme damit aber nicht weiter bzw. verstehe nicht wie ich darüber ans Ziel kommen soll.
Ich habe die Werte die das Macro zurück gibt mal etwas durchgerechnet.
Zu erst habe ich den ArcSin davon gebildet:
intPosArr(0) = 0
intPosArr(1) = 0,78524716
intPosArr(2) = -0,78524716
intPosArr(3) = -1,57079633
intPosArr(4) = 0
intPosArr(5) = 0
intPosArr(6) = 0
intPosArr(7) = 0,78524716
intPosArr(8) = 0,78524716
Dann diese Werte von Rad nach grad umgeformt (durch 0,01745 geteilt):
intPosArr(0) = 0
intPosArr(1) = 44,999
intPosArr(2) = -44,999
intPosArr(3) = -90,016
intPosArr(4) = 0
intPosArr(5) = 0
intPosArr(6) = 0
intPosArr(7) = 44,999
intPosArr(8) = 44,999
Somit bekomme ich schonmal Werte die nahe an das ran kommen was ich suche. Aber die Logik dahinter verstehe ich nicht.
Hat jemand einen Beispiel-Code wie man an die Winkel kommt?
Ich denke mein Problem ist überwiegend mathematischer Natur ^^
[Diese Nachricht wurde von KADv5 am 16. Feb. 2018 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP