Skip to content

Commit

Permalink
Zoom in and out to selected nodes (#4061)
Browse files Browse the repository at this point in the history
* zoom in and out to selected

* to shortcuts docs

* minor tweaks
  • Loading branch information
vicdoval authored Apr 22, 2021
1 parent c74bbc7 commit dc7a620
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 1 deletion.
2 changes: 2 additions & 0 deletions docs/shortcuts.rst
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ This is a collection of shortcuts useful in the Sverchok node tree, some are Ble

**Numpad .** - Frame selected

**Alt + Z** - Toggle between 'Zoom Selected' and 'View All'

**F** - Links (connects) the selected nodes from left to right using the first output socket with the first empty input socket.

**V** - Vectors - Edges - Faces connector: the same of the F key but connecting vertices to vertices, edges to edges and faces (or polygons) to faces (or polygons) if possible.
Expand Down
2 changes: 1 addition & 1 deletion ui/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"color_def", "sv_IO_panel", "sv_examples_menu", 'sv_3d_panel', 'nodeview_operators',
"sv_panels", "nodeview_rclick_menu", "nodeview_space_menu","nodeview_solids_menu",
"monad", "sv_icons", "presets", "nodes_replacement", "sv_panel_display_nodes",
"sv_temporal_viewers", "sv_vep_connector",
"sv_temporal_viewers", "sv_vep_connector", "zoom_to_node",
# bgl modules
"bgl_callback_3dview", "bgl_callback_nodeview",
# show git info
Expand Down
3 changes: 3 additions & 0 deletions ui/nodeview_keymaps.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,9 @@ def add_keymap():
kmi = km.keymap_items.new('node.sv_node_connector', 'V', 'PRESS')
nodeview_keymaps.append((km, kmi))

kmi = km.keymap_items.new('node.zoom_to_node', 'Z', 'PRESS', alt=True)
nodeview_keymaps.append((km, kmi))

# 3D View
km = kc.keymaps.new(name='3D View', space_type='VIEW_3D')
kmi = km.keymap_items.new('wm.sv_obj_modal_update', 'F5', 'PRESS', ctrl=True, shift=True)
Expand Down
61 changes: 61 additions & 0 deletions ui/zoom_to_node.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####

import bpy

class ZoomToNodeOperator(bpy.types.Operator):
"""Zoom In and Out from node"""
bl_idname = "node.zoom_to_node"
bl_label = "Zoom To Node Operator"

@classmethod
def poll(cls, context):
space = context.space_data
return space.type == 'NODE_EDITOR'

def execute(self, context):
if context.scene.zoomed_in:
bpy.ops.node.view_all()
for i in range(5):
bpy.ops.view2d.zoom_in()
context.scene.zoomed_in = False
else:
context.scene.zoomed_in = True
bpy.ops.view2d.zoom_border()
bpy.ops.node.view_selected()
node_selected = context.selected_nodes
if len(node_selected) > 1:
for i in range(3):
bpy.ops.view2d.zoom_in()


return {'FINISHED'}


def register():
bpy.utils.register_class(ZoomToNodeOperator)
bpy.types.Scene.zoomed_in = bpy.props.BoolProperty(
name='Zoom In and out from node',
default=False,
description='Zoom to selected/ Zoom to all')


def unregister():
bpy.utils.unregister_class(ZoomToNodeOperator)
del bpy.types.Scene.zoomed_in

0 comments on commit dc7a620

Please sign in to comment.