From 5b2dc0b57e8b7e3447aac11fdefdb5b89cca00f5 Mon Sep 17 00:00:00 2001 From: Swann Martinez Date: Mon, 16 Sep 2019 11:42:53 +0200 Subject: [PATCH] fix: force user drawing update --- bl_types/bl_user.py | 4 ++++ delayable.py | 12 +++++++++++- operators.py | 13 ++++++++++++- presence.py | 1 + 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/bl_types/bl_user.py b/bl_types/bl_user.py index f92ba5b..c109dba 100644 --- a/bl_types/bl_user.py +++ b/bl_types/bl_user.py @@ -49,6 +49,10 @@ class BlUser(BlDatablock): def diff(self): + if self.pointer.is_dirty: + self.pointer.is_dirty = False + return True + for i,coord in enumerate(self.pointer.location): if coord != self.buffer['location'][i]: return True diff --git a/delayable.py b/delayable.py index b701296..f95d4fb 100644 --- a/delayable.py +++ b/delayable.py @@ -1,7 +1,7 @@ import bpy import logging -from . import operators, utils +from . import operators, utils, presence from .bl_types.bl_user import BlUser from .libs import debug from .libs.replication.replication.constants import FETCHED @@ -69,6 +69,16 @@ class ApplyTimer(Timer): # class CheckNewTimer(Timer): +class RedrawTimer(Timer): + def __init__(self, timout=1, target_type=None): + self._type = target_type + super().__init__(timout) + + def execute(self): + if presence.renderer: + presence.refresh_3d_view() + + return self._timeout class Draw(Delayable): def __init__(self): diff --git a/operators.py b/operators.py index 146692d..85fdd47 100644 --- a/operators.py +++ b/operators.py @@ -12,6 +12,7 @@ from pathlib import Path import bpy import mathutils from bpy_extras.io_utils import ExportHelper +from bpy.app.handlers import persistent from . import environment, presence, ui, utils, delayable from .libs import umsgpack @@ -131,7 +132,7 @@ class SessionStartOperator(bpy.types.Operator): settings.user_uuid = client.add(usr) delayables.append(delayable.ClientUpdate( client_uuid=settings.user_uuid)) - + # delayables.append(delayable.RedrawTimer(timout=0.5)) for node in client.list(): try: client.commit(node) @@ -302,6 +303,13 @@ class SessionCommit(bpy.types.Operator): client.push(uuid=self.target) return {"FINISHED"} +@persistent +def redresh_handler(dummy): + global client + + user = client.get(uuid=bpy.context.window_manager.session.user_uuid) + user.pointer.is_dirty = True + classes = ( SessionStartOperator, @@ -320,6 +328,7 @@ def register(): register_class(cls) presence.register() + bpy.app.handlers.depsgraph_update_post.append(redresh_handler) def unregister(): @@ -334,6 +343,8 @@ def unregister(): from bpy.utils import unregister_class for cls in reversed(classes): unregister_class(cls) + + bpy.app.handlers.depsgraph_update_post.remove(redresh_handler) if __name__ == "__main__": diff --git a/presence.py b/presence.py index cfc9062..7de4784 100644 --- a/presence.py +++ b/presence.py @@ -96,6 +96,7 @@ def get_client_2d(coords): class User(): def __init__(self, username=None, color=(0, 0, 0, 1)): + self.is_dirty = False self.name = username self.color = color self.location = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]