Tag: Offset
-
Inventor2014 APIで「親アセンブリ原点からの現在のオフセット」の情報を取り出す方法
アセンブリファイルに配置されたオカレンスの位置情報は、QA-8359 「アセンブリファイルに配置されたオカレンスの位置情報を取得する方法」で紹介されている通りで、本来ComponentOccurrenceのTransformationであるマトリクスオブジェクトに格納されているTranslationプロパティ情報は、トップアセンブリから見ての相対座標が格納されています。 しかし、サブアセンブリなどにポジションリプリゼンテーション”が設定されている場合は、サブアセンブリのオカレンス情報「oSubAsmOccur.Definition.Occurrence.Item()」でオカレンスの位置を取得した場合、現在の位置ではなく、サブアセンブリドキュメント内の位置(ポジションリプリゼンテーションのマスター位置)を返し、同時にリプレゼンテーションでポジションが移動している場合のサブアセンブリパーツ位置(相対座標)を取得できず、この場合は、絶対座標になってしまいます。 ポジションリプリゼンテーションが設定されている場合では、直接オカレンス側ではなくサブオカレンス側のマトリクスを使い、更に移動後に反転などの計算に用いなければ求められません。 (計算後のマトリクスを与える必要があります。) 一方、”iPropart”の”オカレンス”タブ内に表示される”親アセンブリ原点からの現在のオフセット”内の「角度」情報は、Inventor製品側のオカレンスタブ内の「コアプログラム内」でこのComponentOccurrenceのTransformationであるマトリクスオブジェクト内のベクトルオブジェクト(Vector)を用いて「内積」による角度計算をして表示しています。 APIでは以下のサンプルコードのようにMatrixから角度計算にて求められます。 注意しなければならないのは、角度の計算に伴う符号検査の中で、値の符号を取り出すための Sgn 関数の取り扱いに注意が必要です。 number > 0 1 number = 0 0 number < 0 -1 つまり、検査したMatrixの値が”0″の場合、戻りが0となり、直後に乗算に用いていますので、2π(=180度)の値も、結果として “0”ラジアンにして デグリ変換しているので 0 度として現れますので、判定が必要となります。 Public Function Acos(value) As Double Acos = Math.Atn(-value / Math.Sqr(-value * value + 1)) + 2 * Math.Atn(1) End Function Sub CalculateRotationAngles(ByVal oMatrix As Inventor.Matrix, ByRef aRotAngles() As Double) Const…

You must be logged in to post a comment.