Compare commits

...
6 Commits
3 changed files with 316 additions and 720 deletions
+288 -702
View File
File diff suppressed because it is too large Load Diff
+8 -13
View File
@@ -14,7 +14,7 @@ import bpy
from bpy.props import BoolProperty, EnumProperty
from bpy.types import Operator
from .dumper import dump_nodes, load_nodes
from .dumper import serialize_selected_nodes_from_node_tree, deserialize_nodes_into_node_tree
from .node_utils import remap_node_group_duplicates
from .pack_nodes import combine_objects, extract_objects
from .formats import dump_nkit_format, parse_nkit_format
@@ -28,18 +28,12 @@ class NODEKIT_OT_copy(Operator):
def execute(self, context):
ntree = context.space_data.edit_tree
selected_nodes = [node for node in ntree.nodes if node.select]
serialized_nodes_data = serialize_selected_nodes_from_node_tree(ntree)
ntree_data = {
"nodes": dump_nodes(selected_nodes),
"links": dump_nodes(
[l for l in ntree.links if l.from_node.select and l.to_node.select]
),
}
context.window_manager.clipboard = dump_nkit_format(serialized_nodes_data)
context.window_manager.clipboard = dump_nkit_format(ntree_data)
self.report({"INFO"}, f"Copied {len(selected_nodes)} selected nodes to system clipboard")
num_selected_nodes = len([n for n in ntree.nodes if n.select])
self.report({"INFO"}, f"Copied {num_selected_nodes} selected nodes to system clipboard")
return {"FINISHED"}
@@ -55,7 +49,8 @@ class NODEKIT_OT_copy_tree(Operator):
context.window_manager.clipboard = dump_nkit_format(ntree_data)
self.report({"INFO"}, f"Copied {len(ntree.nodes)} selected nodes to system clipboard")
num_nodes = len(ntree.nodes)
self.report({"INFO"}, f"Copied {num_nodes} selected nodes to system clipboard")
return {"FINISHED"}
@@ -67,7 +62,7 @@ class NODEKIT_OT_paste(Operator):
def execute(self, context):
ntree_data = parse_nkit_format(context.window_manager.clipboard)
load_nodes(ntree_data, context.space_data.edit_tree)
deserialize_nodes_into_node_tree(ntree_data, context.space_data.edit_tree)
self.report({"INFO"}, f"X node(s) pasted from system clipboard") # TODO: Ge the number of parsed nodes returned
return {"FINISHED"}
+15
View File
@@ -1,6 +1,21 @@
from dataclasses import dataclass
from typing import Any
import bpy
@dataclass
class BlenderProperty:
"""
Blender Property abstraction, used since a Blender property value isn't
directly accessible from its Property object representation
NOTE: Do not rely on value being up-to-date, data will get stall
"""
rep: bpy.types.Property
attr: Any
def all_subclasses(cls):
return set(cls.__subclasses__()).union(
[s for c in cls.__subclasses__() for s in all_subclasses(c)]