Merge branch '106-skin-weight-isn-t-properly-replicated' into 'develop'

Resolve "Skin weight isn't properly replicated"

See merge request slumber/multi-user!91
This commit is contained in:
Swann Martinez
2020-12-24 15:42:46 +00:00

View File

@ -23,9 +23,19 @@ import mathutils
from replication.exception import ContextError from replication.exception import ContextError
from .bl_datablock import BlDatablock, get_datablock_from_uuid 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): def load_pose(target_bone, data):
target_bone.rotation_mode = data['rotation_mode'] target_bone.rotation_mode = data['rotation_mode']
loader = Loader() loader = Loader()
@ -150,12 +160,12 @@ class BlObject(BlDatablock):
vertex_group.add( vertex_group.add(
[vert['index']], vert['weight'], 'REPLACE') [vert['index']], vert['weight'], 'REPLACE')
object_data = target.data
# SHAPE KEYS # SHAPE KEYS
if 'shape_keys' in data: if 'shape_keys' in data:
target.shape_key_clear() target.shape_key_clear()
object_data = target.data
# Create keys and load vertices coords # Create keys and load vertices coords
for key_block in data['shape_keys']['key_blocks']: for key_block in data['shape_keys']['key_blocks']:
key_data = data['shape_keys']['key_blocks'][key_block] key_data = data['shape_keys']['key_blocks'][key_block]
@ -212,6 +222,15 @@ class BlObject(BlDatablock):
if target.data is None and img_uuid: if target.data is None and img_uuid:
target.data = get_datablock_from_uuid(img_uuid, None) 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): def _dump_implementation(self, data, instance=None):
assert(instance) assert(instance)
@ -273,13 +292,14 @@ class BlObject(BlDatablock):
return data return data
# MODIFIERS # MODIFIERS
modifiers = getattr(instance,'modifiers', None ) if hasattr(instance, 'modifiers'):
if modifiers:
dumper.include_filter = None
dumper.depth = 1
data["modifiers"] = {} data["modifiers"] = {}
for index, modifier in enumerate(modifiers): modifiers = getattr(instance, 'modifiers', None)
data["modifiers"][modifier.name] = dumper.dump(modifier) 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) 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 key_blocks[key.name]['relative_key'] = key.relative_key.name
data['shape_keys']['key_blocks'] = key_blocks 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 return data
def _resolve_deps_implementation(self): def _resolve_deps_implementation(self):