feat: input value support

This commit is contained in:
Swann
2021-02-26 12:27:56 +01:00
parent 317fc03f87
commit c1c39438e3

View File

@ -17,7 +17,7 @@
import logging
import re
import bpy
import mathutils
from replication.exception import ContextError
@ -30,12 +30,50 @@ from .dump_anything import (
np_dump_collection)
SKIN_DATA = [
'radius',
'use_loose',
'use_root'
]
def get_number(e):
return int(re.findall('[0-9]+', e)[0])
def dump_modifier_geometry_node_inputs(modifier):
inputs_name = [p for p in dir(modifier) if "Input_" in p]
inputs_name.sort(key=get_number)
dumped_inputs = []
for inputs_index, input_name in enumerate(inputs_name):
input_value = modifier[input_name]
dumped_input = None
if isinstance(input_value, bpy.types.ID):
dumped_input = input_value.uuid
elif type(input_value) in [int, str, float]:
dumped_input = input_value
elif hasattr(input_value, 'to_list'):
dumped_input = input_value.to_list()
dumped_inputs.append(dumped_input)
return dumped_inputs
def load_modifier_geometry_node_inputs(dumped_modifier, target_modifier):
inputs_name = [p for p in dir(target_modifier) if "Input_" in p]
inputs_name.sort(key=get_number)
logging.info(inputs_name)
for input_index, input_name in enumerate(inputs_name):
dumped_value = dumped_modifier['inputs'][input_index]
input_value = target_modifier[input_name]
logging.info(input_name)
if type(input_value) in [int, str, float]:
input_value = dumped_value
elif hasattr(input_value, 'to_list'):
for index in range(len(input_value)):
input_value[index] = dumped_value[index]
else:
target_modifier[input_name] = get_datablock_from_uuid(dumped_value, None)
def load_pose(target_bone, data):
target_bone.rotation_mode = data['rotation_mode']
loader = Loader()
@ -282,6 +320,11 @@ class BlObject(BlDatablock):
and 'cycles_visibility' in data:
loader.load(target.cycles_visibility, data['cycles_visibility'])
if hasattr(target, 'modifiers'):
nodes_modifiers = [mod for mod in target.modifiers if mod.type == 'NODES']
for modifier in nodes_modifiers:
load_modifier_geometry_node_inputs(data['modifiers'][modifier.name], modifier)
def _dump_implementation(self, data, instance=None):
assert(instance)
@ -350,7 +393,10 @@ class BlObject(BlDatablock):
dumper.depth = 1
for index, modifier in enumerate(modifiers):
data["modifiers"][modifier.name] = dumper.dump(modifier)
# hack to dump geometry nodes inputs
if modifier.type == 'NODES':
dumped_inputs = dump_modifier_geometry_node_inputs(modifier)
data["modifiers"][modifier.name]['inputs'] = dumped_inputs
gp_modifiers = getattr(instance, 'grease_pencil_modifiers', None)
if gp_modifiers: