Created
March 10, 2025 23:49
-
-
Save vankessel/326e40db5215926d24bd98231fb67731 to your computer and use it in GitHub Desktop.
Select Similar Nodes (Blender addon script)
This file contains hidden or 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": "Kara 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