好吧,我想我有更好的方式来问这个问题。 假设我想在某个轴上将对象放大 10,每次放大之间有一些时间间隔间隙,所以我认为我应该使用这个脚本...
import bpy
import time
obj = bpy.context.active_object
for i in range(10):
time.sleep(0.5)
obj.scale[0]+=0.1
但这显示了整个脚本执行后的结果(缩放对象),我应该做什么来工作它,就像随着脚本的进行而更新一样。
得到了解决方案之一,但这可能不是我认为最好的解决方案。 应用转换后添加
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
当我尝试在脚本中制作转换动画时,我也遇到了这个问题。据我所知,
bpy.ops.wm.redraw_timer(type='DRAW_WIN_SWAP', iterations=1)
是在脚本执行完成之前使视口更新的唯一方法。我还指出,未来版本中可能不支持此功能,但似乎没有“正确”的方法来做到这一点。 bpy.context.view_layer.update()
不起作用。
我发现这个问题的背景是一个大学顶点项目,该项目在 Python 中实现了 TCP 服务器(使用服务器的单独线程和 Blender 模式计时器操作符来检查传入消息),以允许外部应用程序操作 3D Blender 中的模型。