zoomCameraCmd

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 sys
import maya.OpenMaya as om
import maya.OpenMayaUI as omui
import 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来实现redo
def redoIt( self ):
# 全局变量camera,会在doIt中先定义
global camera
fnCamera = om.MFnCamera( camera )
# 获取相机的focalLength
f1 = fnCamera.focalLength()
# 设置相机的focalLength
fnCamera.setFocalLength( f1 * 2.0 )

# 重载undoIt来实现undo
def undoIt( self ):
global camera
fnCamera = om.MFnCamera( camera )
f1 = fnCamera.focalLength()
fnCamera.setFocalLength( f1 * 0.5 )

def doIt( self, args ):
global camera
camera = 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 Creator
def 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。
在线版
[url]http://download.autodesk.com/us/maya/2010help/API/zoom_camera_cmd_8py-example.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值