import bpy class ConnectViewerNode(bpy.types.Operator): bl_idname = 'blender_maxwell.connect_viewer_node' bl_label = 'Connect Viewer to Active' bl_description = 'Connect active node to Viewer Node' bl_options = {'REGISTER', 'UNDO'} @classmethod def poll(cls, context): space = context.space_data return ( space.type == 'NODE_EDITOR' and space.node_tree is not None and space.node_tree.bl_idname == 'MaxwellSimTreeType' ) def invoke(self, context, event): node_tree = context.space_data.node_tree mlocx = event.mouse_region_x mlocy = event.mouse_region_y bpy.ops.node.select( extend=False, location=(mlocx, mlocy), ) select_node = context.selected_nodes[0] for node in node_tree.nodes: if node.bl_idname == 'ViewerNodeType': viewer_node = node break else: viewer_node = node_tree.nodes.new('ViewerNodeType') viewer_node.location.x = select_node.location.x + 250 viewer_node.location.y = select_node.location.y select_node.select = False new_link = True for link in viewer_node.inputs[0].links: if link.from_node.name == select_node.name: new_link = False continue node_tree.links.remove(link) if new_link: node_tree.links.new(select_node.outputs[0], viewer_node.inputs[0]) return {'FINISHED'} #################### # - Blender Registration #################### BL_REGISTER = [ ConnectViewerNode, ] BL_KMI_REGISTER = [ { '_': ( ConnectViewerNode.bl_idname, 'LEFTMOUSE', 'PRESS', ), 'ctrl': True, 'shift': True, 'alt': False, }, ]