Last active
September 27, 2020 22:35
-
-
Save vankessel/b49b96b2be3f6974ad9f866c46402700 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""Blender add-on that selects all nodes in the current node editor view of the same type as the active node. | |
Default shortcut is Shift Ctrl Q. | |
""" | |
import bpy | |
bl_info = { | |
"name": "Select Similar Nodes", | |
"author": "Kevin van Kessel", | |
"description": "Select nodes of the same type as the active node", | |
"version": (1, 0, 0), | |
"blender": (2, 80, 0), | |
"category": "Node", | |
} | |
class SelectSimilarNodes(bpy.types.Operator): | |
"""Select nodes of the same type as the active node""" | |
bl_idname = "node.select_similar_nodes" | |
bl_label = bl_info["name"] | |
bl_options = {'REGISTER', 'UNDO'} | |
@classmethod | |
def select_similar_nodes_in_same_group(cls, target_node, node_tree): | |
node_type = target_node.bl_static_type | |
tree_contains_target_node = False | |
group_nodes = [] | |
similar_nodes = [] | |
for node in node_tree.nodes: | |
if node == target_node: | |
tree_contains_target_node = True | |
if node.bl_static_type == 'GROUP': | |
group_nodes.append(node) | |
if node.bl_static_type == node_type: | |
similar_nodes.append(node) | |
if tree_contains_target_node: | |
for node in similar_nodes: | |
node.select = True | |
else: | |
for group in group_nodes: | |
cls.select_similar_nodes_in_same_group(target_node, group.node_tree) | |
def execute(self, context): | |
target_node = context.active_node | |
node_tree = context.material.node_tree | |
SelectSimilarNodes.select_similar_nodes_in_same_group(target_node, node_tree) | |
return {'FINISHED'} | |
def menu_func(self, context): | |
self.layout.operator(SelectSimilarNodes.bl_idname) | |
addon_keymaps = [] | |
def register(): | |
bpy.utils.register_class(SelectSimilarNodes) | |
bpy.types.NODE_MT_node.append(menu_func) | |
wm = bpy.context.window_manager | |
kc = wm.keyconfigs.addon | |
if kc: | |
km = wm.keyconfigs.addon.keymaps.new(name='Node Editor', space_type='NODE_EDITOR') | |
kmi = km.keymap_items.new(SelectSimilarNodes.bl_idname, 'Q', 'PRESS', shift=True, ctrl=True) | |
addon_keymaps.append((km, kmi)) | |
def unregister(): | |
addon_keymaps.reverse() | |
for km, kmi in addon_keymaps: | |
km.keymap_items.remove(kmi) | |
addon_keymaps.clear() | |
bpy.utils.unregister_class(SelectSimilarNodes) | |
bpy.types.NODE_MT_node.remove(menu_func) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment