- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- パーマリンクを表示
- 印刷
- 報告
昭和っぽいタイトルにも関わらずご覧になった皆様こんにちは。
APIなお話です。
2023年の4月のアップデートでCAMに関するAPIが大幅に強化されました。
当時はプレビューとしての導入で、”作製しても公開しないでください”と言う扱いでした。
しかし8月のアップデートで”最初に導入した分は変更しないので公開してもOKです”
(その後も強化され続けており、一部はまだプレビューです)と言うことで、
正式な機能となりました。
ご興味ある方のためにコンテンツとして書き残しておきたいと思います。
本コンテンツは、Fusion 360 Ver2.0.16976の環境で作成しています。
内容的には、今後大幅には変わらないと思っています。
又、当方がC++がわからない為、pythonスクリプトでの説明となります。
もう一つ付け加えておくと、当方win環境で行っていますが、恐らくmacでも動作すると
思います、多分。(←確認出来ないので)
スクリプトの作成方法は・・・ちょっと検索して頂けると見つかると思います。
念のため、公式のHelpはこちらです。
https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-9701BBA7-EC0E-4016-A9C8-964AA4838954
日本語訳してくださった方がいらっしゃいます。
https://cad.vdlz.xyz/3dCad/Fusion360/Documents/API/CreatingAScriptOrAdd-In.html
とりあえずこの様な単純なデータを用意しました。添付しておきます。
φ10とφ20の貫通穴があいているだけです。
続いて、製造に切り替えてみて下さい。既にセットアップを作成しφ10の穴あけについては作製しています。
(切削条件等は今回のテーマでは無い為、デフォルトにて作成しています)
この状態で利用出来る、非常に基本的なスクリプトをご用意しました。
# Fusion360API Python script
import traceback
import adsk.core as core
import adsk.cam as cam
def run(context):
ui: core.UserInterface = None
try:
app: core.Application = core.Application.get()
ui = app.userInterface
# CAM環境チェック
if not can_execute():
ui.messageBox("製造に切り替えてください")
return
# CAM環境取得
camObj: cam.CAM = app.activeProduct
# セットアップの取得
setup: cam.Setup = get_setup(camObj)
if not setup:
return
# 情報を表示
name: str = setup.name
count: int = setup.operations.count
msg: str = f"セットアップ[{name}]のオペレーション数は{count}個です。"
ui.messageBox(msg)
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
def get_setup(camObj: cam.CAM) -> cam.Setup:
'''
最初のセットアップを取得
'''
setups: cam.Setups = camObj.setups
if setups.count < 1:
return None
return setups[0]
def can_execute() -> bool:
'''
CAMワークスペースか? IDでチェック
'''
app: core.Application = core.Application.get()
ui: core.UserInterface = app.userInterface
ws: core.Workspace = ui.activeWorkspace
return ws.id == "CAMEnvironment"
正直に申し上げると、これらの処理は4月以前でも動かせた内容です・・・。
run関数内のコメント部分を追いかけると、何を行っているか?大体感じて頂けるかと思います。
"CAM環境チェック"部分ではアクティブなドキュメント(作業中のドキュメント)が
製造になっているかどうかをチェックして、製造になっていない場合はスクリプトを終了しています。
def can_execute() -> bool:
'''
CAMワークスペースか? IDでチェック
'''
app: core.Application = core.Application.get()
ui: core.UserInterface = app.userInterface
ws: core.Workspace = ui.activeWorkspace
return ws.id == "CAMEnvironment"
”ワークスペース”とは"デザイン"とか"レンダリング"等それぞれの作業領域です。
それぞれにはIDが割り当てられており確認することが出来ます。
"CAM環境取得"部分は、製造を取り仕切る親分です。
画面上ではブラウザツリーの一番上のこちらです。(多分)
"デザイン"時の一番上は、"ルートコンポーネント"と呼ばれる部分ですが、製造では異なります。
"セットアップの取得"では、先頭のセットアップを取得しています。
もうセットアップの説明は不要ですよね。赤矢印部分です。
get_setup関数内で登場する"setups"は緑矢印部分です。
"情報を表示"部分では、先程取得したセットアップから、セットアップ自身の名前と
セットアップ内にあるオペレーションの数を表示させます。
実行させてみると、こんな感じです。
あぁ以前は赤矢印部分は"Fusion360”だったのですが、8月のUpdateで
変更されたんですよね・・・アナウンス無かったのですが。
無事にダイアログが表示されれば、スクリプトの作成も成功です!
キナ臭い?試しに穴あけのオペレーション削除し実行してみて下さい。
オペレーション数が0になるはずです。
興味を持ってここまで読んだ方であれば、φ20の穴あけを作れるはずです。
作成して実行してみて下さい。2個になるはずです。
調子に乗って、セットアップを削除して実行しても・・・何も起こりません。
その為の処理をしなかった為です。
逆に、エラーが発生しない事にお気づきでしょうか?
エラーが発生し、スクリプトが途中で中断しない様にするための処理は行った為、
エラーは発生しない様な処理はしています。
結構大事なのですが、結構厄介な事も事実です。
実はスクリプト(やアドイン)で、行いたい処理を作ること自体は案外出来ます。
え?何故かって? それは行いたいことがゴールになっている為、モチベーションが
高いからです。(何とか作ってやろうと言う気持ちがあるはずです)
厄介なのは、開発者にとって"やって欲しくない操作を防ぐ"事です。
その操作に気が付けば対処出来ると思うので、気付けるかどうかが勝負どころです。
(開発者の"おかしいところがあったら教えて~"は、そういう意味です)
と、今回はほぼ実用的な内容が無い状態となりましたが、CAMの自動化を行う為には
避けられない部分ですので、ご了承ください。
解決済! 解決策の投稿を見る。