68 lines
1.6 KiB
Python
68 lines
1.6 KiB
Python
|
import bpy
|
||
|
|
||
|
class BlenderMaxwellConnectViewer(bpy.types.Operator):
|
||
|
bl_idname = "blender_maxwell.connect_viewer"
|
||
|
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 = [
|
||
|
BlenderMaxwellConnectViewer,
|
||
|
]
|
||
|
|
||
|
BL_KMI_REGISTER = [
|
||
|
dict(
|
||
|
_=(
|
||
|
BlenderMaxwellConnectViewer.bl_idname,
|
||
|
"LEFTMOUSE",
|
||
|
"PRESS",
|
||
|
),
|
||
|
ctrl=True, ## CTRL
|
||
|
shift=True, ## Shift
|
||
|
alt=False, ## Alt
|
||
|
),
|
||
|
]
|