C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

平面のtransformプロパティ

あぁリンクしようと思っていたのに、APIフォーラムのサーバーがダメっぽい。

先日バグじゃないのかな?って質問に対して、リプライした際に
気が付いたのですが、ちょっと意外だなと思ったお話です。


Fusion360のドキュメントを新作すると必ず作成されるのが原点です。
f:id:kandennti:20211109092655p:plain
その中の ”XY” ”XZ” ”YZ” が平面です。・・・そう言う順番なんだ。
余談ですが、CATIA V5の場合は "XY" "YZ" "ZX" です。
f:id:kandennti:20211109093001p:plain
他の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のネーミング方が、異質ではあるものの
理に叶っていると感じませんかね?(個人的には感じます)