修正すべき部分は多々ありますが、インポートに関しては
一区切り付け、エクスポートに取り掛かろうかと思ってます。
最初はインポート機能は、
・Fusion360でsirenの処理呼び出し
↓
・siren側でFusion360用のPythonコードをファイルに書き出し
↓
・Fusion360で書き出したスプリクトを実行
の手順で行おうと思っていたのですが、siren側で標準出力
した内容をFusion360側(と言いますか、python)で受け取れる事が
わかったので、ファイルに書き出さずに処理させています。
ファイルの書き出しや読み込みの時間的なロスが無い為、
この方法の方が処理が速いだろうと思ったので。
同様にエクスポートも途中の処理をファイルに書き出さずに
行いたいのですが・・・イマイチわかりません。
幸い、sirenはインタラクティブなシェルとして起動する方法があり、
これを立ち上げて、コマンドをダラダラ流し込めば出来そうな
気がしているのですが。
試しに起動だけするコードです。
#FusionAPI_python #Author-kantoku #Description-exp_test1 # -*- coding: utf-8 -*- import adsk.core, adsk.fusion, traceback, os #-----設定------ this_dir = os.path.dirname(os.path.abspath(__file__)) #mruby_sirenパス _siren_path = this_dir + r'\siren_0.14d_mingw64\bin\mirb.exe' #インポート用sirenスプリクトパス #_siren_script_path = this_dir + r'\siren_import.rb' #------------- def run(context): try: #start app = adsk.core.Application.get() ui = app.userInterface import subprocess subprocess.call(_siren_path) ui.messageBox('Done') except: if ui: ui.messageBox('エラー\n{}'.format(traceback.format_exc()))
一応、これだけでインタラクティブsirenの起動は出来ました。
コマンドを送り込みたいのですが、
subprocess.call(_siren_path)
では出来ないことは、何となくわかっています。
そこで、こんな感じに修正してみました。
・・・ import subprocess proc = subprocess.Popen(_siren_path, stdin=subprocess.PIPE, stdout=subprocess.PIPE) proc.communicate('print("hoge")')
インタラクティブsirenが起動しているようにも見えるものの、何も
受け付けてもらえず、Fusion360側ではエラーとなってしまいます。
と言うところで、つっかえています・・・。