feat: input value support
This commit is contained in:
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import re
|
||||||
import bpy
|
import bpy
|
||||||
import mathutils
|
import mathutils
|
||||||
from replication.exception import ContextError
|
from replication.exception import ContextError
|
||||||
@ -30,12 +30,50 @@ from .dump_anything import (
|
|||||||
np_dump_collection)
|
np_dump_collection)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SKIN_DATA = [
|
SKIN_DATA = [
|
||||||
'radius',
|
'radius',
|
||||||
'use_loose',
|
'use_loose',
|
||||||
'use_root'
|
'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):
|
def load_pose(target_bone, data):
|
||||||
target_bone.rotation_mode = data['rotation_mode']
|
target_bone.rotation_mode = data['rotation_mode']
|
||||||
loader = Loader()
|
loader = Loader()
|
||||||
@ -282,6 +320,11 @@ class BlObject(BlDatablock):
|
|||||||
and 'cycles_visibility' in data:
|
and 'cycles_visibility' in data:
|
||||||
loader.load(target.cycles_visibility, data['cycles_visibility'])
|
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):
|
def _dump_implementation(self, data, instance=None):
|
||||||
assert(instance)
|
assert(instance)
|
||||||
|
|
||||||
@ -350,7 +393,10 @@ class BlObject(BlDatablock):
|
|||||||
dumper.depth = 1
|
dumper.depth = 1
|
||||||
for index, modifier in enumerate(modifiers):
|
for index, modifier in enumerate(modifiers):
|
||||||
data["modifiers"][modifier.name] = dumper.dump(modifier)
|
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)
|
gp_modifiers = getattr(instance, 'grease_pencil_modifiers', None)
|
||||||
|
|
||||||
if gp_modifiers:
|
if gp_modifiers:
|
||||||
|
Reference in New Issue
Block a user