あぁリンクしようと思っていたのに、APIフォーラムのサーバーがダメっぽい。
先日バグじゃないのかな?って質問に対して、リプライした際に
気が付いたのですが、ちょっと意外だなと思ったお話です。
Fusion360のドキュメントを新作すると必ず作成されるのが原点です。
その中の ”XY” ”XZ” ”YZ” が平面です。・・・そう言う順番なんだ。
余談ですが、CATIA V5の場合は "XY" "YZ" "ZX" です。
他のCADに比べて"ZX" の表現は異質ですよね。通常は "XZ" ですから。
話をFusion360に戻しますが、原点の平面はAPI的にConstructionPlane
オブジェクトで、構築平面と同じです。
Fusion 360 Help
transformプロパティを持っていて、これで平面の位置や向きを決めています。
色々と話を省いてしまいますが、この様なスクリプトを作成しました。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core def run(context): ui: adsk.core.UserInterface = None try: app: adsk.core.Application = adsk.core.Application.get() ui = app.userInterface des: adsk.fusion.Design = app.activeProduct root: adsk.fusion.Component = des.rootComponent dumpMat3d(root.xYConstructionPlane.transform) dumpMat3d(root.xZConstructionPlane.transform) dumpMat3d(root.yZConstructionPlane.transform) except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def dumpMat3d(mat: adsk.core.Matrix3D): origin, xAxis, yAxis, zAxis = mat.getAsCoordinateSystem() print('') for v in [origin, xAxis, yAxis, zAxis]: dumpPnt(v) def dumpPnt(p: adsk.core.Point3D): print(f'X{p.x} Y{p.y} Z{p.z}')
何をやっているかと言うと、原点の ”XY” ”XZ” ”YZ” の平面のtransformを
数値で出力しています。
"何それ?" と思われると思いますが、transformはMatrix3Dオブジェクトで
getAsCoordinateSystemメソッドを利用すると、原点とXYZ3つのベクトルに
する事が出来ます。
出力結果はこちらです。
X0.0 Y0.0 Z0.0 X1.0 Y0.0 Z-0.0 X-0.0 Y1.0 Z0.0 X0.0 Y0.0 Z1.0 X0.0 Y0.0 Z0.0 X0.0 Y0.0 Z1.0 X1.0 Y0.0 Z0.0 X0.0 Y1.0 Z0.0 X0.0 Y0.0 Z0.0 X-0.0 Y1.0 Z0.0 X0.0 Y-0.0 Z1.0 X1.0 Y0.0 Z0.0
上から、 ”XY” ”XZ” ”YZ” 平面です。
意外だったのは、”XZ” ”YZ” 平面も
X0.0 Y0.0 Z0.0 X1.0 Y0.0 Z-0.0 X-0.0 Y1.0 Z0.0 X0.0 Y0.0 Z1.0
となると思っていました。
恐らくFusion360は全ての平面はXY平面が元になっていて、
transformプロパティで位置と向きを変更しているだけの様に感じました。
これを知らないと、transformプロパティを利用しようとした際に
間違えちゃいますね。
余談なのですが、Fusion360の "XZ" 平面(CATIA V5の "ZX")の出力結果を
見てみると
X0.0 Y0.0 Z0.0 <-原点 X0.0 Y0.0 Z1.0 <-X軸(単位ベクトル) X1.0 Y0.0 Z0.0 <-Y軸(単位ベクトル) X0.0 Y1.0 Z0.0 <-Z軸(単位ベクトル)
X軸はZ1.0でY軸はX1.0ですね。そう考えると "XZ" より "ZX" と言う
名称にしているCATIA V5のネーミング方が、異質ではあるものの
理に叶っていると感じませんかね?(個人的には感じます)