oscillode/src/blender_maxwell/operators/connect_viewer.py

70 lines
1.5 KiB
Python

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,
},
]