ナカナカ本題が進みません。
いつもAPIではお世話になっている基準フューチャーに
updateBodyメソッドがあるんです。
Fusion 360 Help
使ったこと無いんです。 が、必要になりそうなので試しています。
まず、この様なデータを用意しました。
・基準フューチャーを作成し、円柱のボディを作成し、
基準フューチャーから抜ける。
・ブロックを作る。
・2個のボディをブーリアン和。
・お互いのボディの境界付近が絡むようなフィレット(ルールド)。
色ぐらい付けるべきですかね?
タイムラインではこんな感じです。
一番最初が基準フューチャーです。
要は、基準フューチャーで作成されたボディが関連するタイムラインが
欲しく、updateBodyメソッドの効果を知りたかったんです。
念のため、GUIの操作で
基準フューチャーに戻り、新たなボディ(ボディ19)を作成。
古いボディ(ボディ18)を削除し、基準フューチャーから
抜けると・・・ブーリアンとフィレットが赤くなりエラーです。
そりゃ参照すべきボディが消えてしまったので、迷子になるのは
当然です。
実験の為に、こんな感じで作りました。
# Fusion360API Python script import adsk.core, adsk.fusion, traceback def run(context): ui = adsk.core.UserInterface.cast(None) try: app :adsk.fusion.Application = adsk.core.Application.get() ui = app.userInterface des :adsk.fusion.Design = app.activeProduct # root :adsk.fusion.Component = des.rootComponent # 差し替え用円柱 tmpMgr :adsk.fusion.TemporaryBRepManager = adsk.fusion.TemporaryBRepManager.get() PNT3D = adsk.core.Point3D radius = 10 brep :adsk.fusion.BRepBody = tmpMgr.createCylinderOrCone( PNT3D.create(0,0,0), radius, PNT3D.create(0,0,2), radius) # BaseFeature取得 tl :adsk.fusion.Timeline = des.timeline tlObj :adsk.fusion.TimelineObject = tl.item(0) # tlObj.rollTo(True) # タイムラインのロールは必要無し baseFeat :adsk.fusion.BaseFeature = adsk.fusion.BaseFeature.cast(tlObj.entity) # sourceBody :adsk.fusion.BRepBody = baseFeat.bodies[0] # 編集に入ってからじゃないとNG # BaseFeature編集 baseFeat.startEdit() sourceBody :adsk.fusion.BRepBody = baseFeat.bodies[0] # newBody = root.bRepBodies.add(brep, baseFeat) #入れちゃダメ baseFeat.updateBody(sourceBody, brep) # 差し替え! # BaseFeature編集終了 baseFeat.finishEdit() # tl.moveToEnd() # ロールを戻す必要無し except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
コメントにしている行が多数あるのは、それだけ失敗したからです。
実行すると
見栄えの問題から色を付けましたが、関係ないです。
驚くことに、エラーになりません。updateBodyの名称は嘘じゃないです。
これ、こちらのBoxerで使用されているんです。
FusionBoxer/OffsetBoundingBoxCommand.py at master · tapnair/FusionBoxer · GitHub
最初見た時 "こんな事出来るんだぁ" と思いましたよ。
ドキュメントの日付を見ると、CustomFeaturesと同じタイミングで
実装されたっぽいですね。