refactor: cleanup bl_material
This commit is contained in:
@ -6,6 +6,38 @@ from .. import utils
|
|||||||
from .bl_datablock import BlDatablock
|
from .bl_datablock import BlDatablock
|
||||||
|
|
||||||
|
|
||||||
|
def load_node(target_node_tree, source):
|
||||||
|
target_node = target_node_tree.nodes.get(source["name"])
|
||||||
|
|
||||||
|
if target_node is None:
|
||||||
|
node_type = source["bl_idname"]
|
||||||
|
|
||||||
|
target_node = target_node_tree.nodes.new(type=node_type)
|
||||||
|
|
||||||
|
utils.dump_anything.load(
|
||||||
|
target_node, source)
|
||||||
|
|
||||||
|
if source['type'] == 'TEX_IMAGE':
|
||||||
|
target_node.image = bpy.data.images[source['image']['name']]
|
||||||
|
|
||||||
|
for input in source["inputs"]:
|
||||||
|
try:
|
||||||
|
if hasattr(target_node.inputs[input], "default_value"):
|
||||||
|
target_node.inputs[input].default_value = source["inputs"][input]["default_value"]
|
||||||
|
except Exception as e:
|
||||||
|
print("loading error {}".format(e))
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
def load_link(target_node_tree, source):
|
||||||
|
input_socket = target_node_tree.nodes[source['to_node']
|
||||||
|
['name']].inputs[source['to_socket']['name']]
|
||||||
|
output_socket = target_node_tree.nodes[source['from_node']
|
||||||
|
['name']].outputs[source['from_socket']['name']]
|
||||||
|
|
||||||
|
target_node_tree.links.new(input_socket, output_socket)
|
||||||
|
|
||||||
|
|
||||||
class BlMaterial(BlDatablock):
|
class BlMaterial(BlDatablock):
|
||||||
def construct(self, data):
|
def construct(self, data):
|
||||||
return bpy.data.materials.new(data["name"])
|
return bpy.data.materials.new(data["name"])
|
||||||
@ -26,45 +58,15 @@ class BlMaterial(BlDatablock):
|
|||||||
|
|
||||||
target.node_tree.nodes.clear()
|
target.node_tree.nodes.clear()
|
||||||
|
|
||||||
|
# Load nodes
|
||||||
for node in data["node_tree"]["nodes"]:
|
for node in data["node_tree"]["nodes"]:
|
||||||
# fix None node tree error
|
load_node(target.node_tree, data["node_tree"]["nodes"][node])
|
||||||
|
|
||||||
index = target.node_tree.nodes.find(node)
|
|
||||||
|
|
||||||
if index is -1:
|
|
||||||
node_type = data["node_tree"]["nodes"][node]["bl_idname"]
|
|
||||||
|
|
||||||
target.node_tree.nodes.new(type=node_type)
|
|
||||||
|
|
||||||
utils.dump_anything.load(
|
|
||||||
target.node_tree.nodes[index], data["node_tree"]["nodes"][node])
|
|
||||||
|
|
||||||
if data["node_tree"]["nodes"][node]['type'] == 'TEX_IMAGE':
|
|
||||||
target.node_tree.nodes[index].image = bpy.data.images[data["node_tree"]
|
|
||||||
["nodes"][node]['image']['name']]
|
|
||||||
|
|
||||||
for input in data["node_tree"]["nodes"][node]["inputs"]:
|
|
||||||
try:
|
|
||||||
if hasattr(target.node_tree.nodes[index].inputs[input], "default_value"):
|
|
||||||
target.node_tree.nodes[index].inputs[input].default_value = data[
|
|
||||||
"node_tree"]["nodes"][node]["inputs"][input]["default_value"]
|
|
||||||
except Exception as e:
|
|
||||||
print("loading error {}".format(e))
|
|
||||||
continue
|
|
||||||
# utils.dump_anything.load(
|
|
||||||
# target.node_tree.nodes[index],data["node_tree"]["nodes"][node])
|
|
||||||
|
|
||||||
# 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]
|
load_link(target.node_tree, data["node_tree"]["links"][link])
|
||||||
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']]
|
|
||||||
|
|
||||||
target.node_tree.links.new(input_socket, output_socket)
|
|
||||||
|
|
||||||
def dump(self, pointer=None):
|
def dump(self, pointer=None):
|
||||||
assert(pointer)
|
assert(pointer)
|
||||||
@ -79,41 +81,48 @@ class BlMaterial(BlDatablock):
|
|||||||
"line_color",
|
"line_color",
|
||||||
"view_center",
|
"view_center",
|
||||||
]
|
]
|
||||||
|
node_dumper = utils.dump_anything.Dumper()
|
||||||
|
node_dumper.depth = 1
|
||||||
|
node_dumper.exclude_filter = [
|
||||||
|
"dimensions",
|
||||||
|
"select",
|
||||||
|
"bl_height_min",
|
||||||
|
"bl_height_max",
|
||||||
|
"bl_width_min",
|
||||||
|
"bl_width_max",
|
||||||
|
"bl_width_default",
|
||||||
|
"hide",
|
||||||
|
"show_options",
|
||||||
|
"show_tetxures",
|
||||||
|
"show_preview",
|
||||||
|
"outputs",
|
||||||
|
"width_hidden"
|
||||||
|
]
|
||||||
|
input_dumper = utils.dump_anything.Dumper()
|
||||||
|
input_dumper.depth = 2
|
||||||
|
input_dumper.include_filter = ["default_value"]
|
||||||
|
links_dumper = utils.dump_anything.Dumper()
|
||||||
|
links_dumper.depth = 3
|
||||||
|
links_dumper.exclude_filter = ["dimensions"]
|
||||||
data = mat_dumper.dump(pointer)
|
data = mat_dumper.dump(pointer)
|
||||||
|
|
||||||
if pointer.use_nodes:
|
if pointer.use_nodes:
|
||||||
nodes = {}
|
nodes = {}
|
||||||
dumper = utils.dump_anything.Dumper()
|
|
||||||
dumper.depth = 1
|
|
||||||
dumper.exclude_filter = [
|
|
||||||
"dimensions",
|
|
||||||
"select",
|
|
||||||
"bl_height_min",
|
|
||||||
"bl_height_max",
|
|
||||||
"bl_width_min",
|
|
||||||
"bl_width_max",
|
|
||||||
"bl_width_default",
|
|
||||||
"hide",
|
|
||||||
"show_options",
|
|
||||||
"show_tetxures",
|
|
||||||
"show_preview",
|
|
||||||
"outputs",
|
|
||||||
]
|
|
||||||
|
|
||||||
for node in pointer.node_tree.nodes:
|
for node in pointer.node_tree.nodes:
|
||||||
nodes[node.name] = dumper.dump(node)
|
nodes[node.name] = node_dumper.dump(node)
|
||||||
|
|
||||||
if hasattr(node,'inputs'):
|
if hasattr(node, 'inputs'):
|
||||||
nodes[node.name]['inputs'] = {}
|
nodes[node.name]['inputs'] = {}
|
||||||
|
|
||||||
for i in node.inputs:
|
for i in node.inputs:
|
||||||
input_dumper = utils.dump_anything.Dumper()
|
|
||||||
input_dumper.depth = 2
|
if hasattr(i, 'default_value'):
|
||||||
input_dumper.include_filter = ["default_value"]
|
nodes[node.name]['inputs'][i.name] = input_dumper.dump(
|
||||||
if hasattr(i,'default_value'):
|
i)
|
||||||
nodes[node.name]['inputs'][i.name] = input_dumper.dump(i)
|
|
||||||
data["node_tree"]['nodes'] = nodes
|
data["node_tree"]['nodes'] = nodes
|
||||||
utils.dump_datablock_attibutes(
|
data["node_tree"]["links"] = links_dumper.dump(pointer.node_tree.links)
|
||||||
pointer.node_tree, ["links"], 3, data['node_tree'])
|
|
||||||
elif pointer.is_grease_pencil:
|
elif pointer.is_grease_pencil:
|
||||||
utils.dump_datablock_attibutes(pointer, ["grease_pencil"], 3, data)
|
utils.dump_datablock_attibutes(pointer, ["grease_pencil"], 3, data)
|
||||||
return data
|
return data
|
||||||
@ -129,6 +138,7 @@ class BlMaterial(BlDatablock):
|
|||||||
len(diff_rev.keys()) > 0)
|
len(diff_rev.keys()) > 0)
|
||||||
|
|
||||||
def resolve_dependencies(self):
|
def resolve_dependencies(self):
|
||||||
|
# TODO: resolve node group deps
|
||||||
deps = []
|
deps = []
|
||||||
|
|
||||||
if self.pointer.use_nodes:
|
if self.pointer.use_nodes:
|
||||||
|
@ -4,6 +4,7 @@ from jsondiff import diff
|
|||||||
|
|
||||||
from .. import utils
|
from .. import utils
|
||||||
from .bl_datablock import BlDatablock
|
from .bl_datablock import BlDatablock
|
||||||
|
from .bl_material import load_link, load_node
|
||||||
|
|
||||||
|
|
||||||
class BlWorld(BlDatablock):
|
class BlWorld(BlDatablock):
|
||||||
@ -18,40 +19,13 @@ class BlWorld(BlDatablock):
|
|||||||
target.node_tree.nodes.clear()
|
target.node_tree.nodes.clear()
|
||||||
|
|
||||||
for node in data["node_tree"]["nodes"]:
|
for node in data["node_tree"]["nodes"]:
|
||||||
index = target.node_tree.nodes.find(node)
|
load_node(target.node_tree, data["node_tree"]["nodes"][node])
|
||||||
|
|
||||||
if index is -1:
|
|
||||||
node_type = data["node_tree"]["nodes"][node]["bl_idname"]
|
|
||||||
|
|
||||||
target.node_tree.nodes.new(type=node_type)
|
|
||||||
|
|
||||||
utils.dump_anything.load(
|
|
||||||
target.node_tree.nodes[index], data["node_tree"]["nodes"][node])
|
|
||||||
|
|
||||||
if data["node_tree"]["nodes"][node]['type'] == 'TEX_IMAGE':
|
|
||||||
target.node_tree.nodes[index].image = bpy.data.images[data["node_tree"]
|
|
||||||
["nodes"][node]['image']['name']]
|
|
||||||
|
|
||||||
for input in data["node_tree"]["nodes"][node]["inputs"]:
|
|
||||||
try:
|
|
||||||
if hasattr(target.node_tree.nodes[index].inputs[input], "default_value"):
|
|
||||||
target.node_tree.nodes[index].inputs[input].default_value = data[
|
|
||||||
"node_tree"]["nodes"][node]["inputs"][input]["default_value"]
|
|
||||||
except Exception as e:
|
|
||||||
print("loading error {}".format(e))
|
|
||||||
continue
|
|
||||||
|
|
||||||
# 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]
|
load_link(target.node_tree, data["node_tree"]["links"][link])
|
||||||
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']]
|
|
||||||
|
|
||||||
target.node_tree.links.new(input_socket, output_socket)
|
|
||||||
|
|
||||||
def dump(self, pointer=None):
|
def dump(self, pointer=None):
|
||||||
assert(pointer)
|
assert(pointer)
|
||||||
@ -62,7 +36,7 @@ class BlWorld(BlDatablock):
|
|||||||
"preview",
|
"preview",
|
||||||
"original",
|
"original",
|
||||||
"uuid"
|
"uuid"
|
||||||
]
|
]
|
||||||
data = world_dumper.dump(pointer)
|
data = world_dumper.dump(pointer)
|
||||||
if pointer.use_nodes:
|
if pointer.use_nodes:
|
||||||
nodes = {}
|
nodes = {}
|
||||||
@ -89,15 +63,16 @@ class BlWorld(BlDatablock):
|
|||||||
for node in pointer.node_tree.nodes:
|
for node in pointer.node_tree.nodes:
|
||||||
nodes[node.name] = dumper.dump(node)
|
nodes[node.name] = dumper.dump(node)
|
||||||
|
|
||||||
if hasattr(node,'inputs'):
|
if hasattr(node, 'inputs'):
|
||||||
nodes[node.name]['inputs'] = {}
|
nodes[node.name]['inputs'] = {}
|
||||||
|
|
||||||
for i in node.inputs:
|
for i in node.inputs:
|
||||||
input_dumper = utils.dump_anything.Dumper()
|
input_dumper = utils.dump_anything.Dumper()
|
||||||
input_dumper.depth = 2
|
input_dumper.depth = 2
|
||||||
input_dumper.include_filter = ["default_value"]
|
input_dumper.include_filter = ["default_value"]
|
||||||
if hasattr(i,'default_value'):
|
if hasattr(i, 'default_value'):
|
||||||
nodes[node.name]['inputs'][i.name] = input_dumper.dump(i)
|
nodes[node.name]['inputs'][i.name] = input_dumper.dump(
|
||||||
|
i)
|
||||||
data["node_tree"]['nodes'] = nodes
|
data["node_tree"]['nodes'] = nodes
|
||||||
utils.dump_datablock_attibutes(
|
utils.dump_datablock_attibutes(
|
||||||
pointer.node_tree, ["links"], 3, data['node_tree'])
|
pointer.node_tree, ["links"], 3, data['node_tree'])
|
||||||
|
Reference in New Issue
Block a user