2017-07-15 15 views
1

我希望有人能帮助我解决这个问题。c#进程,运行批处理文件,用于搅拌器导出得到暂停

现状:

我需要从搅拌机导出动画,因为它必须是一个C#应用程序的内部跳跳虎的序列。我使用的搅拌机OBJ出口与Python脚本,这几乎等同于该搅拌器维基的例子: 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) 

除了我写了如下的批处理文件:

"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#代码如下所示:

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(); 
     } 
    } 
} 

当我使用窗口CMD外壳时,一切正常。对于每个帧,都会创建一个obj文件。但是,当我使用我的c#应用程序cmd行是打开的时候,搅拌机开始执行,并且对于第一帧大约250个中的12个都按原样工作,然后没有任何反应,应用程序仍在等待退出,但没有新的obj文件被创建。

在我编写批处理文件之前,我试图直接运行带有python脚本的搅拌器作为一个进程,并且我遇到了同样的问题,但是在几个输出框后“暂停”/“拖延”。我猜它必须与我的C#进程代码(因为在cmd shell中运行确实工作),但我不知道我在做什么错了。

回答

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代码放到一个尝试,除块代码会显示python脚本的成功,因为即使使用sys.exit(1),搅拌器也会以成功消息终止。

在解决神秘添加像这样来写你的错误信息,你以后可以读取一个文件(或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()) 

让我知道这是否有助于你进一步