From ee4083c134545dcedd03a3430a42352b11818706 Mon Sep 17 00:00:00 2001 From: Swann Date: Fri, 29 Jan 2021 11:28:50 +0100 Subject: [PATCH 1/4] feat: evaluate gpencil on layer change/ frame change/ mode change Related to #166 --- multi_user/bl_types/bl_gpencil.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/multi_user/bl_types/bl_gpencil.py b/multi_user/bl_types/bl_gpencil.py index be6b649..90e9eac 100644 --- a/multi_user/bl_types/bl_gpencil.py +++ b/multi_user/bl_types/bl_gpencil.py @@ -204,7 +204,7 @@ def dump_layer(layer): for frame in layer.frames: dumped_layer['frames'].append(dump_frame(frame)) - + return dumped_layer @@ -287,6 +287,8 @@ class BlGpencil(BlDatablock): for layer in instance.layers: data['layers'][layer.info] = dump_layer(layer) + data["active_layers"] = instance.layers.active.info + data["eval_frame"] = bpy.context.scene.frame_current return data def _resolve_deps_implementation(self): @@ -296,3 +298,17 @@ class BlGpencil(BlDatablock): deps.append(material) return deps + + def layer_changed(self): + return self.instance.layers.active.info != self.data["active_layers"] + + def frame_changed(self): + return bpy.context.scene.frame_current != self.data["eval_frame"] + + def diff(self): + if self.layer_changed() \ + or self.frame_changed() \ + or bpy.context.mode == 'OBJECT': + return super().diff() + else: + return False From 589702dab723edb45019fb388898c18ccd4c1593 Mon Sep 17 00:00:00 2001 From: Swann Date: Fri, 29 Jan 2021 11:54:13 +0100 Subject: [PATCH 2/4] feat: continous update support by toggling the sync_in_editmode flag Related to #166 --- multi_user/bl_types/bl_gpencil.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/multi_user/bl_types/bl_gpencil.py b/multi_user/bl_types/bl_gpencil.py index 90e9eac..91b69c2 100644 --- a/multi_user/bl_types/bl_gpencil.py +++ b/multi_user/bl_types/bl_gpencil.py @@ -308,7 +308,8 @@ class BlGpencil(BlDatablock): def diff(self): if self.layer_changed() \ or self.frame_changed() \ - or bpy.context.mode == 'OBJECT': + or bpy.context.mode == 'OBJECT' \ + or self.preferences.sync_flags.sync_during_editmode: return super().diff() else: return False From 86cb3d29fbd1b57312ff7863e0b4ba0af7fe4ea9 Mon Sep 17 00:00:00 2001 From: Swann Date: Fri, 29 Jan 2021 16:29:27 +0100 Subject: [PATCH 3/4] fix: wrong grease pencil frame after layer update --- multi_user/bl_types/bl_gpencil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/multi_user/bl_types/bl_gpencil.py b/multi_user/bl_types/bl_gpencil.py index 91b69c2..11d5ef8 100644 --- a/multi_user/bl_types/bl_gpencil.py +++ b/multi_user/bl_types/bl_gpencil.py @@ -226,7 +226,6 @@ def load_layer(layer_data, layer): load_frame(frame_data, target_frame) - class BlGpencil(BlDatablock): bl_id = "grease_pencils" bl_class = bpy.types.GreasePencil @@ -265,6 +264,7 @@ class BlGpencil(BlDatablock): load_layer(layer_data, target_layer) + target.layers.update() From cf0d7a11220b457d56eac2aa576115aad97849a7 Mon Sep 17 00:00:00 2001 From: Swann Date: Fri, 5 Feb 2021 10:25:50 +0100 Subject: [PATCH 4/4] fix: temporary for stroke geometry update to fix triangulation with fill materials Related to 170 --- multi_user/bl_types/bl_gpencil.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/multi_user/bl_types/bl_gpencil.py b/multi_user/bl_types/bl_gpencil.py index 11d5ef8..bcc1296 100644 --- a/multi_user/bl_types/bl_gpencil.py +++ b/multi_user/bl_types/bl_gpencil.py @@ -109,7 +109,9 @@ def load_stroke(stroke_data, stroke): stroke.points.add(stroke_data["p_count"]) np_load_collection(stroke_data['points'], stroke.points, STROKE_POINT) - + # HACK: Temporary fix to trigger a BKE_gpencil_stroke_geometry_update to + # fix fill issues + stroke.uv_scale = stroke_data["uv_scale"] def dump_frame(frame): """ Dump a grease pencil frame to a dict