2017-07-15 2 views
1

誰かがこの問題を助けてくれることを願っています。ブレンダーのエクスポートのバッチファイルを実行するプロセスが一時停止する

状況:

私はそれがC#のアプリの内部ティガーなければならないシーケンスとしてブレンダーからアニメーションをエクスポートする必要があります。私はかなりこのブレンダーのwikiの例と同じだPythonスクリプトでブレンダーOBJエクスポーターを使用しています: https://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Import-Export/Wavefront_OBJ

これは私が書いたPythonスクリプトは次のとおりです。その私のほかに

import bpy 
import sys 

argv = sys.argv 
argv = argv[argv.index("--") + 1:] # get all args after "--" 

obj_out = argv[0] 

bpy.ops.export_scene.obj(filepath=obj_out, axis_forward='-Z', axis_up='Y', use_animation=1, keep_vertex_order=1, use_normals=1, use_materials=0) 

次のバッチファイルを書いた:

using System; 
using System.Diagnostics; 

namespace BlenderToObjs 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ProcessStartInfo processInfo; 
      Process process; 

      processInfo = new ProcessStartInfo("cmd.exe", "/c \"" + @"C:\blender_export_to_obj.bat" + "\""); 
      processInfo.CreateNoWindow = false; 
      processInfo.UseShellExecute = false; 

      processInfo.RedirectStandardError = true; 
      processInfo.RedirectStandardOutput = true; 

      process = Process.Start(processInfo); 
      process.WaitForExit(); 
     } 
    } 
} 
0123:

"C:\Program Files\Blender Foundation\Blender\blender.exe" "C:\Users\holgk\Documents\Some Folders\Test.blend" --background --python "C:\Program Files\Blender Foundation\Blender\convert_blend_to_obj.py" -- "C:\Users\holgk\Documents\Some Folders\Test.obj" 

私のC#のコードは次のようになります

ウィンドウのcmdシェルを使用しているとき、すべてが正常に動作します。すべてのフレームに対して、objファイルが作成されます。しかし、私は私のC#アプリケーションを使用しているときに、cmdの行が開いている、ブレンダーが実行を開始し、最初のフレームの約250すべてが正常に動作し、何も起こらず、アプリケーションはまだ出口を待っているが、新しいobjファイルが作成されます。

バッチファイルを書き込む前に、そのpythonスクリプトをプロセスとして直接実行しようとしましたが、同じ問題が発生しましたが、エクスポートのいくつかのフレームの後で「一時停止」/「停止」していました。

私はそれが私のC#プロセスコードと関係があると思っています(cmdシェルを実行すると動作します)が、私は何が間違っているのかわかりません。

答えて

0

あなたのブレンダーが処理中にフリーズしているか、objエクスポートが失敗している可能性がありますか?

エラーをキャッチしてブレンダーが終了しないように見えるので、そのまま続けるようです。終了して

import bpy 
import sys 

def main(): 
    try: 
     # Do stuff 
     argv = sys.argv 
     argv = argv[argv.index("--") + 1:] # get all args after "--" 

     obj_out = argv[0] 

     bpy.ops.export_scene.obj(filepath=obj_out, axis_forward='-Z', axis_up='Y', use_animation=1, keep_vertex_order=1, use_normals=1, use_materials=0) 
     O.wm.quit_blender() 

    except: 
     # you could write your error file here 

     # exit blender 
     sys.exit(1) 
     O.wm.quit_blender() 
main() 

ここでの問題は、あなたがブレンダーを終了することができないということです(まだ、または私はそれを考え出したことはありません):

まず、あなたはブロックを除いて、試しにあなたのpythonのコードをラップする必要がありますsys.exit(1)ブレンダーを使用しても成功メッセージで終了するため、pythonスクリプトの成功を示すコードです。

後で読むことができる(または、あなたのC#コードを読み取ることができる)ファイルにエラー・メッセージを書き込むために、このような何かを追加

 log.error('Failed to bake light map textures', exc_info=True) 
     if 'ERROR_FILE' in os.environ: 
      with open(os.environ['ERROR_FILE'], 'w') as file: 
       file.write(traceback.format_exc()) 

はその謎を解く際に任意の更なるあなたを助けたなら、私に知らせて

関連する問題