C#ATIA

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

3Dな曲線をエクスポートしてみる1

修正すべき部分は多々ありますが、インポートに関しては
一区切り付け、エクスポートに取り掛かろうかと思ってます。

最初はインポート機能は、

Fusion360sirenの処理呼び出し
 ↓
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側ではエラーとなってしまいます。

と言うところで、つっかえています・・・。