003-简单的命令插件

Contents

003-简单的命令插件#

"""
initializePlugin()和uninitializePlugin()必须存在于所有插件中。如果两者或其中一个都不存在,则不会加载插件,
并且需要创建者允许 Maya 创建类的实例

initializePlugin()函数可以定义为 C 或 C++ 函数。如果不定义该函数,插件将不会被加载;
该函数包含将插件定义的任何命令、工具、设备等注册到 Maya 的代码。它只被调用一次——在插件加载后立即调用

    例如
        命令和工具是通过实例化一个MFnPlugin功能设置在MObject通过,这个MObject包含 Maya私有信息,
        例如插件文件的名称和加载它的目录。它被传递到MFnPlugin构造函数,以及供应商名称,如果未指定,
        则默认为“未知”,插件的版本号为字符串,默认为“1.0”,以及插件正常运行所需的 API 版本,默认为“任意”

MFnPlugin函数集用于注册插件文件的内容。在以下示例MFnPlugin::registerCommand()被调用来注册“pluginCommand”命令,
以及该命令的创建。完成后,该函数返回一个状态码,指示它是否成功;初始化失败后,插件会自动卸载


uninitializePlugin()可以是 C 或 C++ 函数。如果您忽略声明此函数,您的插件将不会被加载;该函数包含从 Maya 取消注册所需的代码initializePlugin(),
它只被调用一次则当插件被卸载时
    此功能应该用于一些快速清理操作,例如关闭文件。不必在插件退出时删除这些命令或插件创建的节点,因为 Maya 会处理它们。
    因此,不应保留插件分配的 Maya 对象列表,也不应在called情况下释放它们uninitializePlugin()

"""

# Save file:D:/pluginCommand.py

import sys

import maya.OpenMaya as om
import maya.OpenMayaMPx as mpx
import maya.cmds as cmds

# 插件的名称
commandName = "pluginCommand"

# 继承命令的类
class pluginCommand(mpx.MPxCommand):
    def __init__(self):
        super(pluginCommand,self).__init__()
    
    # 命令执行函数,doIt的该类固定的标准函数名称,argList则是命令的传参
    def doIt(self,argList):
        print("....doIt....")

# 获取命令的指针
def cmdCreate():
    return mpx.asMPxPtr(pluginCommand())

# 注册插件函数,initializePlugin是注册maya插件的固定标准函数,必须的注册插件函数
def initializePlugin(mobject):
    mplugin = mpx.MFnPlugin(mobject)
    try:
        # 注册插件,需要插件名称和插件指针
        mplugin.registerCommand(commandName, cmdCreate)
    except:
        sys.stderr.write("Failed to register command: %s" % (commandName))

# 卸载插件函数,uninitializePlugin是卸载maya插件的固定标准函数
def uninitializePlugin(mobject):
    mplugin = mpx.MFnPlugin(mobject)
    try:
        # 卸载插件
        mplugin.deregisterCommand(commandName)
    except:
        sys.stderr.write("Failed to deregister command: %s" % (commandName))

直接在maya的插件管理器加载即可,或者用cmds的命令去加载也可以

import maya.cmds as cmds

cmds.loadPlugin(r"D:\pluginCommand.py")

参考#