feat(rcf): append material node links
This commit is contained in:
@ -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
|
||||||
|
|
||||||
@ -180,83 +182,84 @@ def load_object(target=None, data=None, create=False):
|
|||||||
if target is None and create:
|
if target is None and create:
|
||||||
mesh = bpy.data.meshes[data["data"]]
|
mesh = bpy.data.meshes[data["data"]]
|
||||||
if mesh:
|
if mesh:
|
||||||
target = bpy.data.objects.new(data["name"],mesh)
|
target = bpy.data.objects.new(data["name"], mesh)
|
||||||
else:
|
else:
|
||||||
print("Missing meshes")
|
print("Missing meshes")
|
||||||
|
|
||||||
# Load other meshes metadata
|
# Load other meshes metadata
|
||||||
dump_anything.load(target, data)
|
dump_anything.load(target, data)
|
||||||
|
|
||||||
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:
|
||||||
target = bpy.data.collections.new(data["name"])
|
target = bpy.data.collections.new(data["name"])
|
||||||
|
|
||||||
# Load other meshes metadata
|
# Load other meshes metadata
|
||||||
# dump_anything.load(target, data)
|
# dump_anything.load(target, data)
|
||||||
|
|
||||||
# load objects into collection
|
# load objects into collection
|
||||||
for object in data["objects"]:
|
for object in data["objects"]:
|
||||||
target.objects.link(bpy.data.objects[object])
|
target.objects.link(bpy.data.objects[object])
|
||||||
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:
|
||||||
getattr(bpy.data,type).new(data["name"])
|
getattr(bpy.data, type).new(data["name"])
|
||||||
|
|
||||||
# Load other meshes metadata
|
# Load other meshes metadata
|
||||||
dump_anything.load(target, data)
|
dump_anything.load(target, data)
|
||||||
except:
|
except:
|
||||||
@ -275,18 +278,22 @@ def update_scene(msg):
|
|||||||
|
|
||||||
if msg.mtype in SUPPORTED_TYPES:
|
if msg.mtype in SUPPORTED_TYPES:
|
||||||
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]
|
||||||
@ -346,7 +353,7 @@ class session_add_property(bpy.types.Operator):
|
|||||||
|
|
||||||
property_path: bpy.props.StringProperty(default="None")
|
property_path: bpy.props.StringProperty(default="None")
|
||||||
depth: bpy.props.IntProperty(default=1)
|
depth: bpy.props.IntProperty(default=1)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
return True
|
return True
|
||||||
@ -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)
|
||||||
|
Reference in New Issue
Block a user