📝

Fusion 360のPython APIのメモ

2021/06/03に公開

位置固定ジョイント関連

位置固定ジョイントを名前から探す場合

jointsじゃなくてasBuiltJointsを使うのがポイント。jointsを使ったサンプルばかりで全然動かなくてハマった。

https://forums.autodesk.com/t5/fusion-360-api-and-scripts/simple-drive-joint-example/td-p/7425711

jnt :adsk.fusion.Joint = root.asBuiltJoints.itemByName('回転')
if not jnt:
     ui.messageBox('Joint not found')
     return

位置固定ジョイントをFusion 360の画面で選択する場合

jntSelect = ui.selectEntity('ジョイントを選択してください', 'Joints')
if jntSelect:
	jnt = adsk.fusion.AsBuiltJoint.cast(jntSelect.entity)

位置固定ジョイントの角度をPythonから指定する場合

上で探したジョイントからRevoluteJointMotionにキャストしてrotationValueにラジアンで値を入れる。読み出す場合も同じ。ラジアンで読み取るので必要であれば変換する。
後半3行は別のサンプルに書いてあったのでそのまま記載。

rev = adsk.fusion.RevoluteJointMotion.cast(jnt.jointMotion)
rev.rotationValue = math.pi/180
adsk.doEvents()
time.sleep(0.1)
app.activeViewport.refresh(

Event関連

ExecuteHandlerが実行されない

上の行だとExecuteHandlerが実行されず、下の行だと実行される。
これが分からずめっちゃ時間掛かった。

# selectJointsControlled.setSelectionLimits(2)
selectJointsControlled.setSelectionLimits(0)

似たような話が以下の記事に書いてありました。
https://kantoku.hatenablog.com/entry/2020/01/22/120059

Occurenceの角度(Roll, Pitch, Yaw)を測定したい場合

getAsCoordinateSystem()で(origin, xAxis, yAxis, zAxis)の配列が得られる。

target = occ.transform.getAsCoordinateSystem()
ui.messageBox( str(target[1].x * 180/math.pi) )

https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-957d3c2d-294a-4fdb-8301-26ec31234655

以下の形式で得られるので、OccurenceのX軸のx方向成分、y方向成分、z方向成分が得られることになる?これが何故角度になっているのかが理解できてなくて悩んだ。

(origin, xAxis, yAxis, zAxis) = matrix3D_var.getAsCoordinateSystem()

最終的な自分の理解では、アークタンジェントで各成分から角度を出したときに、結局同じ値になったからそのままでいいのかなというところまでしか到達できませんでした。
各軸に沿った回転は以下の計算でいいのか、、。回転方向がこれで正しいのかちょっと怪しいです。

math.atan2(target[2].z, target[2].y)* 180/math.pi,
math.atan2(target[3].x, target[3].z)* 180/math.pi,
math.atan2(target[1].y, target[1].x)* 180/math.pi

以下の方法だと、ワールド座標のX軸と、原点からOccurenceのPositionをつなぐベクトルの角度しか得られずずっと悩んでいた。

xVector = des.rootComponent.xConstructionAxis.geometry.direction

ui.messageBox( occ.transform.translation.angleTo(xVector) )

https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-957d3c2d-294a-4fdb-8301-26ec31234655

4足ロボットでフォローしているでべさんも同じところで悩んでいた投稿を見つけた。

https://twitter.com/devemin/status/1359496157135659016?s=20

https://forums.autodesk.com/t5/fusion-360-api-and-scripts/how-to-get-roll-pitch-yaw-angles-of-occurrence-amp-joints-not/m-p/10070729

CSVを書き出したい場合

Discussion