|
@@ -142,6 +142,11 @@ def export_to_json(trees, path="", write_file=True, only_selected=False):
|
|
|
|
|
|
|
|
nodes = {}
|
|
nodes = {}
|
|
|
for n in tree.nodes:
|
|
for n in tree.nodes:
|
|
|
|
|
+ # if this is a node-group, force it to update its interface, because it may be messed up.
|
|
|
|
|
+ # can remove this HACK when I have stronger guarentees about node-group's keeping the interface
|
|
|
|
|
+ from .base_definitions import node_group_update
|
|
|
|
|
+ if hasattr(n, "node_tree"):
|
|
|
|
|
+ node_group_update(n, force=True)
|
|
|
if only_selected and n.select == False:
|
|
if only_selected and n.select == False:
|
|
|
continue
|
|
continue
|
|
|
node_props, sockets = {}, {}
|
|
node_props, sockets = {}, {}
|
|
@@ -452,6 +457,10 @@ def do_import(data, context):
|
|
|
|
|
|
|
|
interface_parent_me = {}
|
|
interface_parent_me = {}
|
|
|
|
|
|
|
|
|
|
+ # I need to guarantee that the interface items are in the right order.
|
|
|
|
|
+ interface_sockets = [] # I'll just sort them afterwards so I hold them here.
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
for s_name, s_props in tree_in_out.items():
|
|
for s_name, s_props in tree_in_out.items():
|
|
|
if s_props["item_type"] == 'SOCKET':
|
|
if s_props["item_type"] == 'SOCKET':
|
|
|
if s_props["socket_type"] == "LayerMaskSocket":
|
|
if s_props["socket_type"] == "LayerMaskSocket":
|
|
@@ -460,6 +469,7 @@ def do_import(data, context):
|
|
|
socket_type = "VectorSocket"
|
|
socket_type = "VectorSocket"
|
|
|
sock = tree.interface.new_socket(s_props["name"], in_out=s_props["in_out"], socket_type=socket_type)
|
|
sock = tree.interface.new_socket(s_props["name"], in_out=s_props["in_out"], socket_type=socket_type)
|
|
|
tree_sock_id_map[s_name] = sock.identifier
|
|
tree_sock_id_map[s_name] = sock.identifier
|
|
|
|
|
+ interface_sockets.append( (sock, s_props['position']) )
|
|
|
# TODO: set whatever properties are needed (default, etc)
|
|
# TODO: set whatever properties are needed (default, etc)
|
|
|
if panel := s_props.get("parent"): # this get is just to maintain compatibility with an older form of this script... and it is harmless
|
|
if panel := s_props.get("parent"): # this get is just to maintain compatibility with an older form of this script... and it is harmless
|
|
|
interface_parent_me[sock] = (panel, s_props["position"])
|
|
interface_parent_me[sock] = (panel, s_props["position"])
|
|
@@ -472,6 +482,13 @@ def do_import(data, context):
|
|
|
tree.interface.items_tree.get(panel),
|
|
tree.interface.items_tree.get(panel),
|
|
|
index,
|
|
index,
|
|
|
)
|
|
)
|
|
|
|
|
+
|
|
|
|
|
+ # Go BACK through and set the index/position now that all items exist.
|
|
|
|
|
+ interface_sockets.sort(key=lambda a : a[1])
|
|
|
|
|
+ for (socket, position) in interface_sockets:
|
|
|
|
|
+ print (socket.name, position)
|
|
|
|
|
+ tree.interface.move(socket, position)
|
|
|
|
|
+
|
|
|
# Now go and do nodes and links
|
|
# Now go and do nodes and links
|
|
|
for tree_name, tree_data in data.items():
|
|
for tree_name, tree_data in data.items():
|
|
|
print ("Importing sub-graph: %s with %s nodes" % (wrapGreen(tree_name), wrapPurple(len(tree_data[2]))) )
|
|
print ("Importing sub-graph: %s with %s nodes" % (wrapGreen(tree_name), wrapPurple(len(tree_data[2]))) )
|