feat(rcf): append material node links

This commit is contained in:
slumber
2019-03-25 23:31:44 +01:00
parent dab6ca681f
commit 4e2909d9c3

View File

@ -22,10 +22,13 @@ context = None
COLOR_TABLE = [(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1), COLOR_TABLE = [(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1),
(0, 0.5, 1, 1), (0.5, 0, 1, 1)] (0, 0.5, 1, 1), (0.5, 0, 1, 1)]
SUPPORTED_DATABLOCKS = ['collections', 'meshes', 'objects', 'materials', 'textures', 'lights', 'cameras', 'actions', 'armatures'] SUPPORTED_DATABLOCKS = ['collections', 'meshes', 'objects',
SUPPORTED_TYPES = ['Collection','Mesh','Object', 'Material', 'Texture', 'Light', 'Camera', 'Action', 'Armature'] 'materials', 'textures', 'lights', 'cameras', 'actions', 'armatures']
SUPPORTED_TYPES = ['Collection', 'Mesh', 'Object', 'Material',
'Texture', 'Light', 'Camera', 'Action', 'Armature']
# UTILITY FUNCTIONS # UTILITY FUNCTIONS
def clean_scene(elements=SUPPORTED_DATABLOCKS): def clean_scene(elements=SUPPORTED_DATABLOCKS):
for datablock in elements: for datablock in elements:
datablock_ref = getattr(bpy.data, datablock) datablock_ref = getattr(bpy.data, datablock)
@ -136,7 +139,6 @@ def refresh_window():
def init_scene(): def init_scene():
global client global client
for mesh in bpy.data.meshes: for mesh in bpy.data.meshes:
pass pass
@ -190,6 +192,7 @@ def load_object(target=None, data=None, create=False):
except: except:
print("Object loading error") print("Object loading error")
def load_collection(target=None, data=None, create=False): def load_collection(target=None, data=None, create=False):
try: try:
if target is None and create: if target is None and create:
@ -204,54 +207,54 @@ def load_collection(target=None, data=None, create=False):
except: except:
print("Collection loading error") print("Collection loading error")
# TODO: Cleanup
def load_material(target=None, data=None, create=False): def load_material(target=None, data=None, create=False):
try: try:
if target is None and create: if target is None and create:
target = bpy.data.materials.new(data["name"]) target = bpy.data.materials.new(data["name"])
# Load other meshes metadata # Load other meshes metadata
dump_anything.load(target, data) dump_anything.load(target, data)
# load nodes # load nodes
for node in data["node_tree"]["nodes"]: for node in data["node_tree"]["nodes"]:
print("load {}".format(node))
index = target.node_tree.nodes.find(node) index = target.node_tree.nodes.find(node)
if index is -1: if index is -1:
node_type = data["node_tree"]["nodes"][node]["bl_idname"] node_type = data["node_tree"]["nodes"][node]["bl_idname"]
print("Create node {}".format(node_type))
target.node_tree.nodes.new(type=node_type) target.node_tree.nodes.new(type=node_type)
print("properties") dump_anything.load(
dump_anything.load(target.node_tree.nodes[index],data["node_tree"]["nodes"][node]) target.node_tree.nodes[index], data["node_tree"]["nodes"][node])
for input in data["node_tree"]["nodes"][node]["inputs"]: for input in data["node_tree"]["nodes"][node]["inputs"]:
try: try:
target.node_tree.nodes[index].inputs[input].default_value = data["node_tree"]["nodes"][node]["inputs"][input]["default_value"] target.node_tree.nodes[index].inputs[input].default_value = data[
# dump_anything.load(target.node_tree.nodes[index].inputs[input],) "node_tree"]["nodes"][node]["inputs"][input]["default_value"]
except: except:
pass pass
# Load nodes links
# Load nodes links
target.node_tree.links.clear() target.node_tree.links.clear()
for link in data["node_tree"]["links"]: for link in data["node_tree"]["links"]:
current_link = data["node_tree"]["links"][link] current_link = data["node_tree"]["links"][link]
print(target.node_tree.nodes[current_link['to_node']['name']])
input_socket = target.node_tree.nodes[current_link['to_node']
['name']].inputs[current_link['to_socket']['name']]
output_socket = target.node_tree.nodes[current_link['from_node']
['name']].outputs[current_link['from_socket']['name']]
input = ... target.node_tree.links.new(input_socket, output_socket)
output = ...
link_index = target.node_tree.links.new(node)
print(data["node_tree"]["links"][link]) print(data["node_tree"]["links"][link])
except: except:
print("Material loading error") print("Material loading error")
def load_default(target=None, data=None, create=False, type=None): def load_default(target=None, data=None, create=False, type=None):
try: try:
if target is None and create: if target is None and create:
@ -277,16 +280,20 @@ def update_scene(msg):
target = resolve_bpy_path(msg.key) target = resolve_bpy_path(msg.key)
if msg.mtype == 'Object': if msg.mtype == 'Object':
load_object(target=target, data=msg.body,create=net_vars.load_data) load_object(target=target, data=msg.body,
create=net_vars.load_data)
if msg.mtype == 'Mesh': if msg.mtype == 'Mesh':
load_mesh(target=target, data=msg.body,create=net_vars.load_data) load_mesh(target=target, data=msg.body,
create=net_vars.load_data)
if msg.mtype == 'Collection': if msg.mtype == 'Collection':
load_collection(target=target, data=msg.body,create=net_vars.load_data) load_collection(target=target, data=msg.body,
create=net_vars.load_data)
if msg.mtype == 'Material': if msg.mtype == 'Material':
load_material(target=target, data=msg.body,create=net_vars.load_data) load_material(target=target, data=msg.body,
create=net_vars.load_data)
else: else:
load_default(target=target, data=msg.body,create=net_vars.load_data,type=msg.mtype) load_default(target=target, data=msg.body,
create=net_vars.load_data, type=msg.mtype)
recv_callbacks = [update_scene] recv_callbacks = [update_scene]
@ -458,7 +465,8 @@ class session_settings(bpy.types.PropertyGroup):
ip = bpy.props.StringProperty(name="ip") ip = bpy.props.StringProperty(name="ip")
port = bpy.props.IntProperty(name="5555") port = bpy.props.IntProperty(name="5555")
add_property_depth = bpy.props.IntProperty(name="add_property_depth",default=1) add_property_depth = bpy.props.IntProperty(
name="add_property_depth", default=1)
buffer = bpy.props.StringProperty(name="None") buffer = bpy.props.StringProperty(name="None")
is_running = bpy.props.BoolProperty(name="is_running", default=False) is_running = bpy.props.BoolProperty(name="is_running", default=False)
load_data = bpy.props.BoolProperty(name="load_data", default=True) load_data = bpy.props.BoolProperty(name="load_data", default=True)