def addFilterNode(self):

        layerNode = paintingLayers.getLayerNodeSelected()
        filterFrame = layerNode.node_tree.nodes["PL_FrameClippingMaskFilters"]

        filterNode = layerNode.node_tree.nodes.new(type=self.filterType)
        filterNode.parent = filterFrame
        filterNode.location = (100, 500)
        filterNode.label = filterNode.name
        filterNode.name = "MLPFilterNode" + filterNode.name

        colorTextureNode = layerNode.node_tree.nodes["Color"]
        filterInputNode = layerNode.node_tree.nodes["PL_filtersColorInput"]
        filterOutputNode = layerNode.node_tree.nodes["PL_filtersColorOutput"]

        if len(bpy.context.scene.mlpFilterLayerCollection) == 0:
            layerNode.node_tree.links.new(filterInputNode.outputs[0],
                                          filterNode.inputs[self.inputSocket])
            layerNode.node_tree.links.new(
                filterNode.outputs[self.outputSocket],
                filterOutputNode.inputs[0])
        else:
            self.bridgeFilterNodes(filterNode)

        return filterNode
    def bridgeFilterNodes(self):

        layerNode = paintingLayers.getLayerNodeSelected()
        filterNode = getFilterNodeSelected()
        fSelType = getFilterNodeType(filterNode)

        fNext = getNextFilterNode(filterNode, fSelType)
        fNextType = getFilterNodeType(fNext)
        nextSocket = None

        if fNextType != None:
            nextSocket = fNext.inputs[fNextType[2]]
        else:
            nextSocket = layerNode.node_tree.nodes[
                "PL_filtersColorOutput"].inputs[0]

        fPrev = getPrevFilterNode(filterNode, fSelType)
        fPrevType = getFilterNodeType(fPrev)

        if fPrevType != None:
            prevSocket = fPrev.outputs[fPrevType[3]]
        else:
            prevSocket = layerNode.node_tree.nodes[
                "PL_filtersColorInput"].outputs[0]

        layerNode.node_tree.links.new(prevSocket, nextSocket)
Пример #3
0
    def draw(self, context):
        layout = self.layout
        layerNode = paintingLayers.getLayerNodeSelected()
        filterNode = layerFilters.getFilterNodeSelected()

        if layerNode != None:

            row = layout.row()

            col = row.column()
            col.template_list('VTOOLS_UL_FilterlayerTree',
                              "filterLayerID",
                              context.scene,
                              "mlpFilterLayerCollection",
                              context.scene,
                              "mlpFilterLayerCollection_ID",
                              rows=2)

            col = row.column(align=True)
            #col.operator(layerFilters.VTOOLS_OP_AddLayerFilter.bl_idname, text="",icon='ADD')
            col.menu(layerFilters.VTOOLS_MT_FiltersMenu.bl_idname,
                     text="",
                     icon='ADD')
            col.operator(layerFilters.VTOOLS_OP_DeleteLayerFilter.bl_idname,
                         text="",
                         icon='REMOVE')

            col.separator()

            opDN = col.operator(
                layerFilters.VTOOLS_OP_MoveLayerFilter.bl_idname,
                text="",
                icon='TRIA_UP')
            opDN.direction = "DOWN"

            opUP = col.operator(
                layerFilters.VTOOLS_OP_MoveLayerFilter.bl_idname,
                text="",
                icon='TRIA_DOWN')
            opUP.direction = "UP"

            if filterNode != None:

                for i in filterNode.inputs:
                    if len(i.links) == 0:
                        layout.prop(i, "default_value", text=i.name)

                layout.separator()

                if hasattr(filterNode, "draw_buttons_ext"):
                    filterNode.draw_buttons_ext(context, layout)
                elif hasattr(filterNode, "draw_buttons"):
                    filterNode.draw_buttons(context, layout)
        else:
            layout.label(text="No layer selected")
def getFirstFilterNode():

    layerNode = paintingLayers.getLayerNodeSelected()
    firstFilterNode = None

    if layerNode != None:
        filtersInitNode = layerNode.node_tree.nodes["PL_filtersColorInput"]
        firstFilterNode = filtersInitNode.outputs[0].links[0].to_node

        if isFilterNode(firstFilterNode) == False:
            firstFilterNode = None

    return firstFilterNode
def getFilterNodeSelectedById(pId):

    filterNode = None
    layerNode = paintingLayers.getLayerNodeSelected()
    filterId = pId

    if filterId != -1 and filterId < len(
            bpy.context.scene.mlpFilterLayerCollection):
        if layerNode != None:
            filterIdName = bpy.context.scene.mlpFilterLayerCollection[
                filterId].filterLayerName
            filterNode = layerNode.node_tree.nodes[filterIdName]

    return filterNode
Пример #6
0
    def draw(self, context):
        layout = self.layout
        layerNode = paintingLayers.getLayerNodeSelected()

        if layerNode != None:
            #layout.prop(context.scene,"mlpDeleteBakedLayers", text="Delete Baked Layers")
            col = layout.column(align=True)
            col.prop(context.scene,
                     "mlpNumLayersToBake",
                     text="Num Layeys Below")
            col.operator(mergeLayers.VTOOLS_OP_mergeLayers.bl_idname,
                         text="Merge Layers",
                         icon='TRIA_UP')
        else:
            layout.label(text="No layer selected")
    def execute(self, context):

        layerNode = paintingLayers.getLayerNodeSelected()
        fNode = getFirstFilterNode()

        bpy.context.scene.mlpFilterLayerCollection.clear()
        bpy.context.scene.mlpFilterLayerCollection_ID = -1

        cont = 0
        while isFilterNode(fNode) == True and fNode != None:
            fNode.location = (300 * cont, 500)
            addFilterToTree(fNode)
            fSelType = getFilterNodeType(fNode)
            fNode = getNextFilterNode(fNode, fSelType)
            cont = cont + 1

        return {'FINISHED'}
    def bridgeFilterNodes(self, pNewFilter):

        layerNode = paintingLayers.getLayerNodeSelected()
        filterNode = getFilterNodeSelected()
        fSelType = getFilterNodeType(filterNode)

        fNext = getNextFilterNode(filterNode, fSelType)
        fNextType = getFilterNodeType(fNext)
        nextSocket = None

        if fNextType != None:
            nextSocket = fNext.inputs[fNextType[2]]
        else:
            nextSocket = layerNode.node_tree.nodes[
                "PL_filtersColorOutput"].inputs[0]

        fNewType = getFilterNodeType(pNewFilter)

        layerNode.node_tree.links.new(filterNode.outputs[fSelType[3]],
                                      pNewFilter.inputs[fNewType[2]])
        layerNode.node_tree.links.new(pNewFilter.outputs[fNewType[3]],
                                      nextSocket)
Пример #9
0
    def draw_item(self, context, layout, data, item, icon, active_data,
                  active_propname):

        image = None
        selectedLayer = paintingLayers.getLayerNodeSelected()
        if selectedLayer != None:
            itemLayerNode = paintingLayers.getLayerNodeById(item.layerID)
            layerNode = paintingLayers.getLayerNodeByName(item.layerName)
            isSelectedLayer = selectedLayer.name == item.layerName
            cs = item.colorSpace

            colorEmboss = False
            maskEmboss = False

            if isSelectedLayer:
                if cs == "color":
                    layout.label(text="", icon="IMAGE")
                    colorEmboss = True
                else:
                    layout.label(text="", icon="IMAGE_ALPHA")
                    maskEmboss = True
            else:
                layout.label(text="", icon="DOT")

            row = layout.row(align=True)

            #row.operator(paintingLayers.VTOOLS_OP_DuplicatePaintingLayer.bl_idname, text="", icon='HIDE_OFF')

            if layerNode.node_tree != None:
                imageColor = layerNode.node_tree.nodes["Color"].image
                imageMask = layerNode.node_tree.nodes["Mask"].image

                if imageColor != None:
                    opm = row.operator(
                        paintingLayers.VTOOLS_OP_SelectLayerColorSpace.
                        bl_idname,
                        text="",
                        icon_value=imageColor.preview.icon_id,
                        emboss=colorEmboss)
                    opm.color = "color"
                    opm.layerID = item.layerID
                    #row.label(text="", icon_value=imageColor.preview.icon_id)
                else:
                    #row.label(text="", icon="FILE")
                    opm = row.operator(
                        paintingLayers.VTOOLS_OP_SelectLayerColorSpace.
                        bl_idname,
                        text="",
                        icon="FILE",
                        emboss=colorEmboss)
                    opm.color = "color"
                    opm.layerID = item.layerID

                if imageMask != None:
                    opm = row.operator(
                        paintingLayers.VTOOLS_OP_SelectLayerColorSpace.
                        bl_idname,
                        text="",
                        icon_value=imageMask.preview.icon_id,
                        emboss=maskEmboss)
                    opm.color = "mask"
                    opm.layerID = item.layerID
                    #row.label(text="", icon_value=imageMask.preview.icon_id)
                else:
                    #row.label(text="", icon="FILE")
                    opm = row.operator(
                        paintingLayers.VTOOLS_OP_SelectLayerColorSpace.
                        bl_idname,
                        text="",
                        icon="FILE",
                        emboss=maskEmboss)
                    opm.color = "mask"
                    opm.layerID = item.layerID

                row = layout.row(align=True)
                row.enabled = isSelectedLayer

                if cs == "color":
                    row.prop(layerNode.node_tree.nodes["Color"],
                             "image",
                             text="")
                else:
                    row.prop(layerNode.node_tree.nodes["Mask"],
                             "image",
                             text="")

                row = layout.row(align=True)
                row.prop(item,
                         "visible",
                         text="",
                         icon='HIDE_OFF',
                         translate=False)
Пример #10
0
    def draw(self, context):
        layout = self.layout

        layerNode = paintingLayers.getLayerNodeSelected()
        colorSpace = paintingLayers.getLayerColorSpace()

        if layerNode != None:

            if colorSpace == "color":
                colorTextureNode = layerNode.node_tree.nodes["Color"]

                layout.separator()

                row = layout.row(align=True)
                row.label(text="", icon="IMAGE")
                row.label(text="Transform:")

                layout.prop(layerNode.node_tree.nodes["colorMapNode"],
                            "scale",
                            text="Scale")
                layout.prop(layerNode.node_tree.nodes["colorMapNode"],
                            "rotation",
                            text="Rotation")
                layout.prop(layerNode.node_tree.nodes["colorMapNode"],
                            "translation",
                            text="Location")

                layout.separator()
                layout.label(text="UV Map:")
                if hasattr(layerNode.node_tree.nodes["colorUVNode"],
                           "draw_buttons_ext"):
                    layerNode.node_tree.nodes["colorUVNode"].draw_buttons_ext(
                        context, layout)

            else:
                maskTextureNode = layerNode.node_tree.nodes["Mask"]

                layout.separator()

                row = layout.row(align=True)
                row.label(text="", icon="IMAGE_ALPHA")
                row.label(text="Transform:")

                layout.prop(layerNode.node_tree.nodes["maskMapNode"],
                            "scale",
                            text="Scale")
                layout.prop(layerNode.node_tree.nodes["maskMapNode"],
                            "rotation",
                            text="Rotation")
                layout.prop(layerNode.node_tree.nodes["maskMapNode"],
                            "translation",
                            text="Location")

                layout.separator()
                layout.label(text="UV Map:")
                if hasattr(layerNode.node_tree.nodes["maskUVNode"],
                           "draw_buttons_ext"):
                    layerNode.node_tree.nodes["maskUVNode"].draw_buttons_ext(
                        context, layout)

        else:
            layout.label(text="No layer selected")
Пример #11
0
    def draw(self, context):
        layout = self.layout

        if bpy.context.scene.vt_mpPaintActiveMaterial == bpy.context.object.active_material.name:

            paintingSetId = bpy.context.scene.mlpLayerSetsCollection_ID > -1

            if paintingSetId == True and context.object.active_material != None:

                layout.operator("image.save_all_modified",
                                text="Save All Images",
                                icon='FILE_TICK')

                row = layout.row()
                col = row.column(align=True)
                col.template_list('VTOOLS_UL_layerTree',
                                  "layerID ",
                                  context.scene,
                                  "mlpLayerTreeCollection",
                                  context.scene,
                                  "mlpLayerTreeCollection_ID",
                                  rows=4)

                col = row.column(align=True)
                col.operator(
                    paintingLayers.VTOOLS_OP_AddPaintingLayer.bl_idname,
                    text="",
                    icon='ADD')
                col.operator(
                    paintingLayers.VTOOLS_OP_DeletePaintingLayer.bl_idname,
                    text="",
                    icon='REMOVE')
                col.operator(
                    paintingLayers.VTOOLS_OP_DuplicatePaintingLayer.bl_idname,
                    text="",
                    icon='DUPLICATE')

                col.separator()

                col.operator(
                    paintingLayers.VTOOLS_OP_MovePaintingLayerDown.bl_idname,
                    text="",
                    icon='TRIA_UP')
                col.operator(
                    paintingLayers.VTOOLS_OP_MovePaintingLayerUp.bl_idname,
                    text="",
                    icon='TRIA_DOWN')

                layerNode = paintingLayers.getLayerNodeSelected()

                if layerNode != None:

                    activeImage = None
                    cs = paintingLayers.getLayerColorSpace()
                    selectedLayer = paintingLayers.getLayerSelectedFromTree()

                    if cs == "color":
                        activeImage = layerNode.node_tree.nodes["Color"].image
                        layout.template_ID(layerNode.node_tree.nodes["Color"],
                                           "image",
                                           new="image.new",
                                           open="image.open")
                    else:
                        activeImage = layerNode.node_tree.nodes["Mask"].image
                        layout.template_ID(layerNode.node_tree.nodes["Mask"],
                                           "image",
                                           new="image.new",
                                           open="image.open")

                    layout.prop(selectedLayer,
                                "colorSpace",
                                text=" ",
                                toggle=True,
                                expand=True)
                    layout.separator()
                    layout.label(text="Layer Properties")

                    col = layout.column(align=True)
                    col.prop(layerNode.node_tree.nodes["PL_BlendMode"],
                             "blend_type",
                             text="")
                    col.prop(layerNode.inputs["Opacity"],
                             "default_value",
                             text="Opacity",
                             slider=True)
                    col.prop(layerNode.inputs["Global Filter"],
                             "default_value",
                             text="Global Filter Layer",
                             slider=True)

                    ps = context.tool_settings.image_paint
                    if ps.canvas != activeImage:
                        ps.canvas = activeImage
            else:
                layout.label(text="No Painting Set selected")
        else:
            layout.operator(
                paintingSet.VTOOLS_OP_CollectPaintingSets.bl_idname,
                text="Update",
                icon='FILE_REFRESH')
    def deleteFilterNode(sefl):

        layerNode = paintingLayers.getLayerNodeSelected()
        filterNode = getFilterNodeSelected()
        filterType = getFilterNodeType(filterNode)
        layerNode.node_tree.nodes.remove(filterNode)
    def moveDN(self):

        layerNode = paintingLayers.getLayerNodeSelected()
        filterNode = getFilterNodeSelected()
        selOutputName = getFilterOutputName(filterNode)
        selInputName = getFilterInputName(filterNode)

        numFilters = len(bpy.context.scene.mlpFilterLayerCollection)
        fsId = bpy.context.scene.mlpFilterLayerCollection_ID

        if fsId > 0:

            if layerNode != None:

                prevFilter = getFilterNodeSelectedById(fsId - 1)
                prevInputName = ""
                prevOutputName = ""

                if prevFilter != None:
                    prevInputName = getFilterInputName(prevFilter)
                    prevOutputName = getFilterOutputName(prevFilter)
                else:
                    prevFilter = layerNode.node_tree.nodes[
                        "PL_filtersColorInput"]
                    prevInputName = "Input"
                    prevOutputName = "Output"

                nextFilter = getFilterNodeSelectedById(fsId + 1)
                nextInputName = ""
                nextOutputName = ""

                if nextFilter != None:
                    nextInputName = getFilterInputName(nextFilter)
                    nextOutputName = getFilterOutputName(nextFilter)
                else:
                    nextFilter = layerNode.node_tree.nodes[
                        "PL_filtersColorOutput"]
                    nextInputName = "Input"
                    nextOutputName = "Output"

                lowerFilter = getFilterNodeSelectedById(fsId - 2)
                lowerOutputName = ""

                if lowerFilter != None:
                    lowerOutputName = getFilterOutputName(lowerFilter)
                else:
                    lowerFilter = layerNode.node_tree.nodes[
                        "PL_filtersColorInput"]
                    lowerOutputName = "Output"

                #paintingLayers.removeNodeLinks(layerNode.node_tree, filterNode, selOutputName)
                #paintingLayers.removeNodeLinks(layerNode.node_tree, prevFilter, prevOutputName)

                layerNode.node_tree.links.new(
                    filterNode.inputs[selInputName],
                    lowerFilter.outputs[lowerOutputName])
                layerNode.node_tree.links.new(
                    filterNode.outputs[selOutputName],
                    prevFilter.inputs[prevInputName])
                layerNode.node_tree.links.new(
                    prevFilter.outputs[prevOutputName],
                    nextFilter.inputs[nextInputName])

            bpy.ops.vtoolpt.collectlayerfilter()
            bpy.context.scene.mlpFilterLayerCollection_ID = fsId - 1

        return {'FINISHED'}