六六の魔法世界

注册

Maya技能 - 技术分享 - 软件插件技术贴 - 2022年6月5日

在Maya中书写自定义热盒

生成热盒使用的popupMenu同样是一个很简单的方式。

代码步骤为1、判断自定义热盒是否存在,存在则删除

2、创建热盒本体对象

3、为热盒添加menuItem并编辑菜单项位置等选项

import maya.cmds as mc

class redBox(object):
    def __init__(self):
        self._removeOld()
        self._build()
    
    def _removeOld(self):
        if mc.popupMenu(redBox_name, ex = 1):
            mc.deleteUI(redBox_name)
menu = mc.popupMenu(redBox_name, mm = 1, b = 1, aob = 1, ctl = 1, alt = 1, sh = 0, p = 'viewPanes', pmo = 1, pmc = '')

其中aob指定是否创建子项;b指定鼠标点击按钮,最左侧为1,最右侧为3;p指定在哪里可以呼出此热盒。

为使代码有良好的可读性与分类,我将创建热盒对象与创建热盒菜单项放置在了一起,你当然可以将它们合并。

def _build(self):
    menu = mc.popupMenu(redBox_name, mm = 1, b = 1, aob = 1, ctl = 1, alt = 1, sh = 0, p = 'viewPanes', pmo = 1, pmc = self._buildMenu)
    
def _buildMenu(self, menu, *args):
    mc.popupMenu(redBox_name, e = True, dai = True)
    mc.menuItem(p = menu, l = '方向', c = 'print "ss"')
    mc.menuItem(p = menu, l = '下沉', rp = 'N', c = 'print "ll"')

menuItem中rp可以指定菜单项的位置,具体见下图。同样,不论是具有方向的还是在下面陈列的菜单项都可以为其添加图片,直接使用图片名称而非完整路径的方法在我上一篇文章有介绍。

热盒中各个方向所代表的re标志字符串

同样,我们还可以与常规一样为热盒指定子热盒。

mc.menuItem(p = menu, l = '下沉', c = 'print "ss"')
mc.menuItem(p = menu, l = '方向', rp = 'N', c = 'print "ll"')
subMenu = mc.menuItem(p = menu, l = '子菜单', rp = 'E', subMenu = 1)
mc.menuItem(p = subMenu, l = '发生什么事了', rp = 'NE', c = 'print "发生什么事了",')

在需要添加子热盒的菜单项使用subMenu标志,并使用变量接收这个菜单项,使子热盒的菜单项的父项能指定到这个菜单项即可。在为热盒下方的菜单项添加子项时同样可以适用这个方法。

参考文章:https://bindpose.com/custom-marking-menu-maya-python/

它的博客里有很多优质文章,建议收藏。

代码模板在下方链接。

    相关文件下载地址
    该资源需登录后下载,去登录?
    ©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!