六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 127|回复: 0

zoomCameraCmd

[复制链接]

升级  28.67%

27

主题

27

主题

27

主题

秀才

Rank: 2

积分
93
 楼主| 发表于 2013-2-7 20:30:46 | 显示全部楼层 |阅读模式
helixCmd是一个带命令参数的命令,但执行之后是无法撤销的,也无法重做。Maya是提供了撤销和重做机制的,但需要你去实现它们,不过有些类是自动提供这个功能的。
使用MPxCommand来自定义命令就需要重载redoIt来实现redo,重载undoIt来实现undo,并重载isUndoable来确定命令是可撤销,没有实现这些方法就无法撤销,也无法重做。所以有些插件的部分功能是无法撤销,也无法重做的,因为它们没实现这些方法,要实现这些方法会给开发方面带来更大的困难(比较复杂的插件),也会增加开发的时间。
下面就来看一个简单的例子zoomCameraCmd.py来实现redoIt、undoIt

这个插件会设置当前激活的视图的相机的focalLength,来达到放大两倍(redoIt)或缩小两倍(undoIt)。

zoomCameraCmd.py
# -*- coding: UTF-8 -*-## python:# import maya.cmds# maya.cmds.loadPlugin("zoomCameraCmd.py")# maya.cmds.spZoomCamera()## mel:# loadPlugin zoomCameraCmd.py;# spZoomCamera;import sysimport maya.OpenMaya as omimport maya.OpenMayaUI as omuiimport maya.OpenMayaMPx as ompx# 插件名称kPluginCmdName = "spZoomCamera"print "zoomCameraCmd.py has been imported...."# command# 定义命令class zoomCameraCmd( ompx.MPxCommand ):camera = om.MDagPath()def __init__( self ):super( zoomCameraCmd, self ).__init__()# 重载redoIt来实现redodef redoIt( self ):# 全局变量camera,会在doIt中先定义global camerafnCamera = om.MFnCamera( camera )# 获取相机的focalLengthf1 = fnCamera.focalLength()# 设置相机的focalLengthfnCamera.setFocalLength( f1 * 2.0 )# 重载undoIt来实现undodef undoIt( self ):global camerafnCamera = om.MFnCamera( camera )f1 = fnCamera.focalLength()fnCamera.setFocalLength( f1 * 0.5 )def doIt( self, args ):global cameracamera = om.MDagPath()try:# 获取当前激活的视图的相机omui.M3dView.active3dView().getCamera( camera )except:sys.stderr.write( "ERROR: getting camera \n" )else:self.redoIt()# 重载isUndoable来确定命令是可撤销def isUndoable( self ):return True# Cmd Creatordef cmdCreator():return ompx.asMPxPtr( zoomCameraCmd() )# Initialize the script plug-in def initializePlugin( obj ):    plugin = ompx.MFnPlugin( obj )    try:        plugin.registerCommand( kPluginCmdName, cmdCreator )    except:        sys.stderr.write( "Failed to register command: %s\n" % kPluginCmdName )        raise       # Uninitialize the script plug-in       def uninitializePlugin( obj ):plugin = ompx.MFnPlugin( obj )try:plugin.deregisterCommand( kPluginCmdName )except:sys.stderr.write( "Failed to unregister command: %s\n" % kPluginCmdName )raise
你可以在maya安装目录下的devkit/plug-ins/scripted找到zoomCameraCmd.py。
在线版
http://download.autodesk.com/us/maya/2010help/API/zoom_camera_cmd_8py-example.html
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表