9

私はブレンダーで N 個のオブジェクトのスクリプトを実行しています。スクリプトを実行すると、作業中にユーザー インターフェイスがロックされます。これが起こらないようにする何かを書きたいので、画面で何が起こっているかを確認したり、カスタム UI を使用して進行状況バーを表示したりできます。これがpythonまたはblenderでどのように実行できるかについてのアイデアはありますか? ほとんどの計算には数分しかかかりませんが、このリクエストにより通常よりも時間がかかる可能性があることは承知しています。どんな助けでも大歓迎です。

ほとんどの作業を行っている関数は、for a in bループです。

4

2 に答える 2

16

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 モーダル オペレーターの実装があります。

于 2013-05-24T21:40:38.340 に答える