[Bf-blender-cvs] [d98e05f4b56] temp-node-tree-pages-prototype: initial pages
Jacques Lucke
noreply at git.blender.org
Thu Mar 18 13:51:19 CET 2021
Commit: d98e05f4b56d5d10e23bdfcfb0f2b992bd4a59dc
Author: Jacques Lucke
Date: Thu Mar 18 12:48:45 2021 +0100
Branches: temp-node-tree-pages-prototype
https://developer.blender.org/rBd98e05f4b56d5d10e23bdfcfb0f2b992bd4a59dc
initial pages
===================================================================
M release/scripts/startup/bl_operators/node.py
M release/scripts/startup/bl_ui/space_node.py
===================================================================
diff --git a/release/scripts/startup/bl_operators/node.py b/release/scripts/startup/bl_operators/node.py
index 67723cfb3bc..5d3d2192a77 100644
--- a/release/scripts/startup/bl_operators/node.py
+++ b/release/scripts/startup/bl_operators/node.py
@@ -21,6 +21,7 @@ from __future__ import annotations
import bpy
import nodeitems_utils
+from mathutils import Vector
from bpy.types import (
Operator,
PropertyGroup,
@@ -343,6 +344,59 @@ class NODE_OT_follow_portal(Operator):
bpy.ops.node.view_selected()
return {'FINISHED'}
+PAGE_SIZE = 10000
+
+def get_page_center(page):
+ return Vector((page * PAGE_SIZE, 0))
+
+def node_is_on_page(node, page):
+ page_center = get_page_center(page)
+ return (abs(page_center.x - node.location.x) < PAGE_SIZE / 2
+ and abs(page_center.y - node.location.y) < PAGE_SIZE / 2)
+
+def get_nodes_on_page(ntree, page):
+ return [n for n in ntree.nodes if node_is_on_page(n, page)]
+
+class NODE_OT_goto_page(Operator):
+ '''Goto page'''
+ bl_idname = "node.goto_page"
+ bl_label = "Goto Page"
+
+ page: bpy.props.IntProperty(default=0)
+
+ @classmethod
+ def poll(cls, context):
+ space = context.space_data
+ return space.type == 'NODE_EDITOR'
+
+ def execute(self, context):
+ space = context.space_data
+ ntree = space.node_tree
+ for node in ntree.nodes:
+ node.select = False
+
+ nodes_on_page = get_nodes_on_page(ntree, self.page)
+ if len(nodes_on_page) > 0:
+ for node in nodes_on_page:
+ node.select = True
+ bpy.ops.node.view_selected()
+ for node in nodes_on_page:
+ node.select = False
+ ntree.nodes.active = None
+ else:
+ page_center = get_page_center(self.page)
+ new_node = ntree.nodes.new('NodeReroute')
+ new_node.select = True
+ new_node.location = page_center
+
+ context_copy = context.copy()
+ def update_after_draw():
+ bpy.ops.node.view_selected(context_copy)
+ ntree.nodes.remove(new_node)
+ bpy.app.timers.register(update_after_draw, first_interval=0.01)
+
+ return {'FINISHED'}
+
classes = (
NodeSetting,
@@ -353,4 +407,5 @@ classes = (
NODE_OT_collapse_hide_unused_toggle,
NODE_OT_tree_path_parent,
NODE_OT_follow_portal,
+ NODE_OT_goto_page,
)
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 7f66cdd3d74..706a9fe4585 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -168,6 +168,11 @@ class NODE_HT_header(Header):
else:
row.template_ID(snode, "node_tree", new="node.new_geometry_nodes_modifier")
+ row = layout.row(align=True)
+ for page in range(5):
+ props = row.operator("node.goto_page", text=str(page))
+ props.page = page
+
else:
# Custom node tree is edited as independent ID block
NODE_MT_editor_menus.draw_collapsible(context, layout)
More information about the Bf-blender-cvs
mailing list