feat: deleyable sytem (blender)
feat: user update
This commit is contained in:
79
delayable.py
Normal file
79
delayable.py
Normal file
@ -0,0 +1,79 @@
|
||||
import bpy
|
||||
from .libs.replication.constants import *
|
||||
from . import operators
|
||||
|
||||
class Delayable():
|
||||
def register(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def execute(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def unregister(self):
|
||||
raise NotImplementedError
|
||||
|
||||
class Timer(Delayable):
|
||||
"""Timer binder interface for blender
|
||||
|
||||
Run a bpy.app.Timer in the background looping at the given rate
|
||||
"""
|
||||
def __init__(self, duration=1):
|
||||
self._timeout = duration
|
||||
|
||||
def register(self):
|
||||
"""Register the timer into the blender timer system
|
||||
"""
|
||||
bpy.app.timers.register(self.execute)
|
||||
|
||||
def execute(self):
|
||||
"""Main timer loop
|
||||
"""
|
||||
return self._timeout
|
||||
|
||||
def unregister(self):
|
||||
"""Unnegister the timer of the blender timer system
|
||||
"""
|
||||
bpy.app.timers.unregister(self.execute)
|
||||
|
||||
class ApplyTimer(Timer):
|
||||
def __init__(self, timout=1,target_type=None):
|
||||
self._type = target_type
|
||||
super().__init__(timout)
|
||||
|
||||
def execute(self):
|
||||
if operators.client:
|
||||
nodes = operators.client.list(filter=self._type)
|
||||
|
||||
for node in nodes:
|
||||
node_ref = operators.client.get(node)
|
||||
|
||||
if node_ref.state == FETCHED:
|
||||
operators.client.apply(uuid=node)
|
||||
|
||||
return self._timeout
|
||||
|
||||
class Draw(Delayable):
|
||||
def __init__(self):
|
||||
self._handler = None
|
||||
|
||||
def register(self):
|
||||
self._handler = bpy.types.SpaceView3D.draw_handler_add(
|
||||
self.execute,(), 'WINDOW', 'POST_VIEW')
|
||||
|
||||
def execute(self):
|
||||
raise NotImplementedError()
|
||||
|
||||
def unregister(self):
|
||||
bpy.types.SpaceView3D.draw_handler_remove(
|
||||
self._handler, "WINDOW")
|
||||
|
||||
class ClientUpdate(Draw):
|
||||
def __init__(self, client_uuid=None):
|
||||
assert(client_uuid)
|
||||
self._client_uuid = client_uuid
|
||||
super().__init__()
|
||||
|
||||
def execute(self):
|
||||
if hasattr(operators,"client"):
|
||||
operators.client.get(self._client_uuid).pointer.update_location()
|
||||
print("update! ")
|
Reference in New Issue
Block a user