Fusion360のスプリクトを作成する際の取っ掛かりになれば、と思い少し
役立つのではないかな?と思うスプリクトを作成しました。(後ほど)
スプリクト(やアドイン)のサンプルは結構多く見付かります。代表的なものは
公式Helpのものです。
Help
全てを見た訳では無いので断言出来ませんが、ほとんどが点・線・面等を
新たに作成するようなものばかりです。これらのサンプルの様に
"新たな要素の作成" は、比較的出来ます。実はスプリクト(や他のソフトのマクロ等)
では、"既存の要素の情報を取得する" 事の方が遥かに難しいです。
例えば「押し出し」について調べたいとします。
最初の段階として "押し出しって何オブジェクトなの?" となるのですが
こちらから探し出すのは現実的とは思えないのが本音です。
https://help.autodesk.com/cloudhelp/ENU/Fusion-360-API/images/Fusion.pdf
"押し出しってExtendFeatureオブジェクトなんだな" とさえわかってしまえば、
こちらを調べてば良いことがわかります。
Help
細かな事はわからなくても(僕もわかっていないのです)きっと押し出しに
関する情報はどれかのプロパティに含まれているはずです。
この "XXって何オブジェクトなの?" を調べるだけの為のスプリクトを
作ってみました。
#FusionAPI_python SelectItemInfo #Author-kantoku #Description-事前選択されている要素のオブジェクト名を表示 import adsk.core, adsk.fusion, traceback def run(context): ui = adsk.core.Application.cast(None) try: #fusion360の取得 app = adsk.core.Application.get() ui = adsk.core.UserInterface.cast(app.userInterface) #選択機能 sels = adsk.core.Selections.cast(ui.activeSelections) #未選択を除外 if sels.count < 1: ui.messageBox('要素を選択してから実行してください') return #ダイアログ用準備 dl_msg = '選択要素名: {}\nオブジェクト名: {}' dl_title = '選択要素情報' dl_btn = adsk.core.MessageBoxButtonTypes.YesNoButtonType dl_icn = adsk.core.MessageBoxIconTypes.InformationIconType dl_no = adsk.core.DialogResults.DialogNo #選択されているものをループ for i,sel in enumerate(sels): #実際に選択した要素 ent = sel.entity #情報取得 msg = dl_msg.format(ent.name,ent.objectType) if i+1 != sels.count: msg += '\n残りの要素も続けますか?({}/{})'.format(i+1,sels.count) else: msg += '\nこれで終了です({}/{})'.format(i+1,sels.count) #情報表示 print(msg) if ui.messageBox(msg,dl_title,dl_btn,dl_icn) == dl_no: break #ループから抜ける except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
どうしても上手く行かない為(選択フィルタの関係上)、事前に調べたい要素を
選択した上でスプリクトを実行する必要があります。
実際に試してみます。
こんな感じのデータを用意しました。
スケッチに丸を描き、押しただけです。このデータのタイムラインの2個を
選択した後、先程のスプリクトを実行します。するとこんなダイアログが表示されます。
これであれば、"何のオブジェクトを調べれば良いのか?" がわかると思います。
(画像の例では ”adsk::fusion::Sketch” と表示されるので、sketchオブジェクトを
調べれば良い事がわかります)
本当は事前選択じゃなくしたいのですが、現状の選択フィルタでは作れそうに無いですね…。