[英]Blender Python scripting, trying to prevent UI lock up while doing large calculations
我在搅拌机中为N个对象做一个脚本。 运行我的脚本时,它会在用户界面正常工作时锁定用户界面。 我想写一些可以防止这种情况发生的东西,所以我可以看到屏幕上发生了什么,以及使用我的自定义UI来显示进度条。 关于如何在python或blender中实现这一点的任何想法? 大多数计算只需要几分钟,我知道这个请求可能会使他们花费比平时更长的时间。 任何帮助,将不胜感激。
执行大部分工作的功能是用于in b循环。
如果您想在Blender中进行大型计算,并且仍然具有响应式UI,则可能需要使用python计时器检查模型运算符。
它会是这样的:
class YourOperator(bpy.types.Operator):
bl_idname = "youroperatorname"
bl_label = "Your Operator"
_updating = False
_calcs_done = False
_timer = None
def do_calcs(self):
# would be good if you can break up your calcs
# so when looping over a list, you could do batches
# of 10 or so by slicing through it.
# do your calcs here and when finally done
_calcs_done = True
def modal(self, context, event):
if event.type == 'TIMER' and not self._updating:
self._updating = True
self.do_calcs()
self._updating = False
if _calcs_done:
self.cancel(context)
return {'PASS_THROUGH'}
def execute(self, context):
context.window_manager.modal_handler_add(self)
self._updating = False
self._timer = context.window_manager.event_timer_add(0.5, context.window)
return {'RUNNING_MODAL'}
def cancel(self, context):
context.window_manager.event_timer_remove(self._timer)
self._timer = None
return {'CANCELLED'}
您必须自己处理正确的模块导入和操作员注册。
我有一个Conways Game Of Life模态运算符实现,以显示如何使用它: https ://www.dropbox.com/s/b73idbwv7mw6vgc/gol.blend?dl = 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.