C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

Fusion360 PythonスプリクトがSWIG

以前、フォーラムのこちらで
Fusion360Pythonスプリクト(アドイン)は"SWIG" と言うものを利用している
と書きました。
Re: Auto LISP はいつごろ サポートされますか? - Autodesk Community

これ、公にはされていないと思います。
何故それを知ったのか? のお話です。


まず、新規でスプリクトを作成します。
f:id:kandennti:20190612190254p:plain

spyderが起動してこんな感じの雛形コードが出てきます。

#Author-
#Description-

import adsk.core, adsk.fusion, adsk.cam, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface
        ui.messageBox('Hello script')
        
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

最初に出てくる雛形のコードを変更しようと思えば出来ると思うのですが、
それ程バリバリ開発するわけではないので、そのままです。

雛形コードだけじゃ上手くいかなかったので、こんな感じで修正します。

#Author-
#Description-

import adsk.core, adsk.fusion, adsk.cam, traceback

def run(context):
    ui = None
    try:
        app = adsk.core.Application.get()
        ui  = app.userInterface
        #ui.messageBox('Hello script')
        
        doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
        design = app.activeProduct
        design.designType = adsk.fusion.DesignTypes.ParametricDesignType 
        
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

邪魔なメッセージボックスをコメントにし、サンプルコードで
よく見かける、ドキュメントを新作し作業スペースのデザインの取得まで
追記しました。
しダイレクトモードに切り替えるところまで追記しました。

続いて

        doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)

の部分にブレークポイントを設置します。
f:id:kandennti:20190612190319p:plain



先にspyderでのデバッグツールバーの御説明を。
f:id:kandennti:20190612190329p:plain

・・・こちらの説明の方が的確です。
spyderのデバッガ【python】
spyderのバージョンが異なるので、画像は異なります。
(そもそも由緒正しいpythonユーザーはspyder使わないと思います)

自分もspyderに詳しい訳では無いのですが、今まで触ってきた感触として
付け加えますと
・Debug : デバッグの開始 これを押さないと始まらない
・Step : 一行づつ実行 関数の宣言上で行うと関数の終了まで実行
・Step Info : 本気で一行づつ実行
・Step Return : 関数終了直前まで実行
・Continue : ブレークポイントまで実行
・Exit : デバッグの中止 押すとGUI側でエラー出ます(別に問題有りません)
あまりに自分の言葉での表現で申し訳ないのですが、実際開発する際は
ブレークポイント仕掛ける → Debug → Continue → Exit
のような手順になるのではないかと思います。

念の為お伝えすると、
デバッグ中にExitを押さずに再度Debugをすると、Fusion360落ちます。
・最初の画像の "スプリクトとアドイン" ダイアログを表示させたまま
 デバッグを始めると、Fusion360落ちます。


話を戻して、 Debug → Continue まで進めていきます。
f:id:kandennti:20190612190411p:plain
ここで、Step Info(本気で一行づつ実行)を押します。すると
少し待たされるのですが、エディタのタブが増えます!
f:id:kandennti:20190612190420p:plain
「core.py」って、最初のimportで読み込ませているライブラリ(正しくは
パッケージ?)です。

エディタのスライドバーをグーっと先頭まで持っていくと
f:id:kandennti:20190612190430p:plain
ほら、SWIGって書いてある!
URLも記載されているので、サイトを覗いて説明読むと・・・
そういうことらしいです。

Step Return と Step Info 辺りを利用しながら進めると、「fusion.py」も
開きます。
f:id:kandennti:20190612190443p:plain

今回のコードには無関係ですが、「cam.py」も開くと思います。


「core.py」は、Autodeskの3DCADカーネルの "Shape Manager" では無く、
カーネルを仲介しているグルーコードパッケージなんだろうと思います。

詳しくはわからないのですが、この辺り読むと
SWIG を使って C++ のクラスを C# で読み込む方法 | Moonmile Solutions Blog
C / C ++ライブラリを他言語のグルーコードを自動的に作成出来るんじゃないのかな?
使うことはなさそうですが。