尝试外部程序启动blender运行python脚本

目标

我想尝试在一个Windows窗口中启动blender之后运行一个脚本。在之前的博客中已经说明了如何创建一个能启动其他程序的Windows窗口。
这个测试脚本的功能是对模型进行细分,最终程序的效果如下:
在这里插入图片描述

Test.obj
Test.obj
Test_high.obj
在这里插入图片描述

实践步骤以及问题

1.python脚本参数

整体步骤很简单,但是有一点需要注意的是传参数的问题
关于blender的启动参数,官方文档有说明。其中说明了--python可以启动python脚本。但问题是,python脚本也需要参数。
一开始,我尝试在--python后跟的python文件名后接上python脚本的参数,然后在python脚本中用fileName = sys.argv[1]获取。可惜失败了。
之后,我查到有其他人也在关注这个问题(https://www.it1352.com/328534.html)。并且给出了正确的格式:
启动时:

blender -b "demo.blend" -P script.py -- 50

其中50是给python脚本的参数。
然后,在python脚本中:

fov = float(sys.argv[-1])   

它使用了下标-1,表示最后一个参数。
我尝试使用了它,成功了。不过关于这个格式还有待更进一步的研究。

2.python脚本如下:
import bpy
import sys

fileName = sys.argv[-1]

bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()

bpy.ops.import_scene.obj(filepath=fileName)

view_layer = bpy.context.view_layer
bpy.ops.object.select_all(action="SELECT")
selection = bpy.context.selected_objects
for obj in selection:
    view_layer.objects.active = obj
    bpy.ops.object.editmode_toggle()
    bpy.ops.mesh.subdivide(number_cuts=3, smoothness=0.5)

bpy.ops.export_scene.obj(filepath=fileName.replace(".obj","_high.obj"))

它做的事就是导入一个模型,执行bpy.ops.mesh.subdivide操作,之后导出。

3.C#代码中按钮的回调函数如下:
private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog = new OpenFileDialog();
            //标题
            dialog.Title = "选择obj模型";   
            //过滤器
            dialog.Filter = "Obj文件(*.obj)|*.obj";
            //检测是否存在
            dialog.CheckFileExists = true;
            
            if (dialog.ShowDialog() == DialogResult.OK)//成功打开:
            {
                string MeshPath = System.IO.Path.GetFullPath(dialog.FileName);//获得模型路径

                System.Diagnostics.Process process = new System.Diagnostics.Process();
                process.StartInfo.FileName = "C:/Program Files/Blender Foundation/Blender 2.81/blender.exe";    //程序exe路径,这里暂时写死
                process.StartInfo.Arguments = "--background --python D:/Temp/HighRez2.py -- " + MeshPath;       //启动参数,暂时硬编码python脚本路径 
                process.Start(); 

            }

        }

值得优化的部分是:

3.1.blender程序路径

这里是写死的,理想状态下应该能从注册表中获取,只是我这里没有能从注册表中找到blender的安装路径。如果找不到,那提供一个配置文件来指明本机的blender安装路径也是个解决方法。

3.2.脚本路径

这里是写死的绝对路径,如果要做正式的工具,可能会协同exe放在一起并使用相对路径,又或者有配置文件。

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值