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:
@ -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):
|
||||||
|
Reference in New Issue
Block a user