From 51cb099c4cc01b9c8eb9a3eb4425250fb5c9266b Mon Sep 17 00:00:00 2001 From: Swann Date: Thu, 24 Dec 2020 16:37:53 +0100 Subject: [PATCH] feat: skin vertices data replication fix: empty modifiers stask --- multi_user/bl_types/bl_object.py | 46 +++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/multi_user/bl_types/bl_object.py b/multi_user/bl_types/bl_object.py index dbd2ce1..2aa21e6 100644 --- a/multi_user/bl_types/bl_object.py +++ b/multi_user/bl_types/bl_object.py @@ -23,9 +23,19 @@ import mathutils from replication.exception import ContextError from .bl_datablock import BlDatablock, get_datablock_from_uuid -from .dump_anything import Dumper, Loader +from .dump_anything import ( + Dumper, + Loader, + np_load_collection, + np_dump_collection) +SKIN_DATA = [ + 'radius', + 'use_loose', + 'use_root' +] + def load_pose(target_bone, data): target_bone.rotation_mode = data['rotation_mode'] loader = Loader() @@ -64,7 +74,7 @@ def find_data_from_name(name=None): logging.warning( "Lightprobe replication only supported since 2.83. See https://developer.blender.org/D6396") elif bpy.app.version[1] >= 91 and name in bpy.data.volumes.keys(): - # Only supported since 2.91 + # Only supported since 2.91 instance = bpy.data.volumes[name] return instance @@ -150,12 +160,12 @@ class BlObject(BlDatablock): vertex_group.add( [vert['index']], vert['weight'], 'REPLACE') + object_data = target.data + # SHAPE KEYS if 'shape_keys' in data: target.shape_key_clear() - object_data = target.data - # Create keys and load vertices coords for key_block in data['shape_keys']['key_blocks']: key_data = data['shape_keys']['key_blocks'][key_block] @@ -212,6 +222,15 @@ class BlObject(BlDatablock): if target.data is None and img_uuid: target.data = get_datablock_from_uuid(img_uuid, None) + if hasattr(object_data, 'skin_vertices') \ + and object_data.skin_vertices\ + and 'skin_vertices' in data: + for index, skin_data in enumerate(object_data.skin_vertices): + np_load_collection( + data['skin_vertices'][index], + skin_data.data, + SKIN_DATA) + def _dump_implementation(self, data, instance=None): assert(instance) @@ -273,13 +292,14 @@ class BlObject(BlDatablock): return data # MODIFIERS - modifiers = getattr(instance,'modifiers', None ) - if modifiers: - dumper.include_filter = None - dumper.depth = 1 + if hasattr(instance, 'modifiers'): data["modifiers"] = {} - for index, modifier in enumerate(modifiers): - data["modifiers"][modifier.name] = dumper.dump(modifier) + modifiers = getattr(instance, 'modifiers', None) + if modifiers: + dumper.include_filter = None + dumper.depth = 1 + for index, modifier in enumerate(modifiers): + data["modifiers"][modifier.name] = dumper.dump(modifier) gp_modifiers = getattr(instance, 'grease_pencil_modifiers', None) @@ -408,6 +428,12 @@ class BlObject(BlDatablock): key_blocks[key.name]['relative_key'] = key.relative_key.name data['shape_keys']['key_blocks'] = key_blocks + if hasattr(object_data, 'skin_vertices') and object_data.skin_vertices: + skin_vertices = list() + for skin_data in object_data.skin_vertices: + skin_vertices.append(np_dump_collection(skin_data.data, SKIN_DATA)) + data['skin_vertices'] = skin_vertices + return data def _resolve_deps_implementation(self):