p2or
2/3/2018 - 2:11 PM

blender-add-nodes-and-frame-them.py

#https://blender.stackexchange.com/q/99989/3710
    
import bpy

class FrameSelection(bpy.types.Operator):
    """Add a frame to all selected Nodes"""
    bl_idname = "node.frame_selection"
    bl_label = "Add Frame"
    bl_options = {'REGISTER', 'UNDO'}
    
    @classmethod
    def poll(cls, context):
        space = context.space_data
        return space.type == 'NODE_EDITOR'

    def execute(self, context):
        space = context.space_data
        node_tree = space.node_tree
        node_active = context.active_node
        node_selected = context.selected_nodes
        
        #context.area.tag_redraw()
        #context.space_data.node_tree.update_tag()
        
        '''
        if len(node_selected) == 0:
            self.report({'ERROR'}, "Nothing in selection")
            return {'CANCELLED'}
        '''
        
        a = node_tree.nodes.new('ShaderNodeBsdfDiffuse')
        a.location = 0,0
        
        b = node_tree.nodes.new('ShaderNodeBsdfDiffuse')
        b.location = 200,0
        
        frame = node_tree.nodes.new('NodeFrame')
        
        for node in [a,b]:
            node.parent = frame
            
        bpy.ops.node.select_all()
        
        return {'FINISHED'}

def register():
    bpy.utils.register_class(FrameSelection)


def unregister():
    bpy.utils.unregister_class(FrameSelection)


if __name__ == "__main__":
    register()