Blender 未实时执行 python

问题描述 投票:0回答:2

好吧,我想我有更好的方式来问这个问题。 假设我想在某个轴上将对象放大 10,每次放大之间有一些时间间隔间隙,所以我认为我应该使用这个脚本...

import bpy
import time

obj = bpy.context.active_object

for i in range(10):
    time.sleep(0.5)
    obj.scale[0]+=0.1

但这显示了整个脚本执行后的结果(缩放对象),我应该做什么来工作它,就像随着脚本的进行而更新一样。

python scripting blender
2个回答
0
投票

得到了解决方案之一,但这可能不是我认为最好的解决方案。 应用转换后添加

bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)

更新后的代码将如下所示:

import bpy
import time

obj = bpy.context.active_object

for i in range(10):
    obj.scale[0]+=0.1
    bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
    time.sleep(0.5)

此外,搅拌机官方并不认为这是一个好的做法,因此这可能以后不起作用。 https://www.blender.org/api/blender_python_api_2_76_2/info_gotcha.html#can-i-redraw-during-the-script


0
投票

当我尝试在脚本中制作转换动画时,我也遇到了这个问题。据我所知,

bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
是在脚本执行完成之前使视口更新的唯一方法。我还指出,未来版本中可能不支持此功能,但似乎没有“正确”的方法来做到这一点。
bpy.context.view_layer.update()
不起作用。

我发现这个问题的背景是一个大学顶点项目,该项目在 Python 中实现了 TCP 服务器(使用服务器的单独线程和 Blender 模式计时器操作符来检查传入消息),以允许外部应用程序操作 3D Blender 中的模型。

© www.soinside.com 2019 - 2024. All rights reserved.