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)
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
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)
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)
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")
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'}