关于 Blender 中的模态运算符 Python

About modal operators in Blender Python

我想制作一个程序,使用模态运算符在 Blender 的 Python.

中每 0.01 秒继续打印 ("test")

我也想按Esc键退出

我能做什么?

我编写并执行了以下代码,但 Blender 死机了。使用模态运算符似乎可以避免冻结,但我不确定如何使用它。

import time
import threading

#A function that keeps executing print ("test")
def worker():
    while True:
        print("test")

def schedule(interval, f, wait=True):
    base_time = time.time()
    next_time = 0
    while True:
        t = threading.Thread(target=f)
        t.start()
        if wait:
            t.join()
        next_time = ((base_time - time.time()) % interval) or interval
        time.sleep(next_time)

#Execute worker function every 0.01 second
schedule(0.01, worker, False)

在 Blenders 文本编辑器中,您会找到一个名为 operator_modal_timer.py 的 python 模板,它可以按照您想要的方式工作。

对运算符的第一次调用是 execute() 方法,您可以在其中使用 wm.event_timer_add 创建计时器。然后在 modal() 方法中响应计时器事件或在收到 esc 键事件时取消运算符。

如果将运算符放在 an addon 中,则每次启动 blender 时都可以启用它。