maya screenshot pyqt截屏

流程中的截图功能是必不可少的,实现的方法也很多。但是原理都是将一个动态桌面生成静态页面,然后裁剪选择的区域.之前基于pyqt写过一个截图的功能。现在跟大家分享一下,你可以任意更改代码,也可以写个界面把截图功能嵌入进去,当然如果可以请保留作者的信息.请留意博客更新,会不定期分享更多的代码便于大家学习!
由于工作时间没时间更新代码,也没优化,把之前写的代码附上,运行以下代码需要事先安装好pyqt.如果没有安装可以试试从maya2014 以上的PySide里导入QtGui和QtCore,我没测试PySide,不过应该可以。如果有什么问题请留言。 »Read More

Maya API – Custom locator Node

如何通过maya api 创建自己的locator,可以通过OpenMayaMPx.MPxLocatorNode 来实现。也可以将现有的曲线转为custom locator ,或者反过来转为曲线都可以通过api实现,甚至可以实现重绘 polygon。

代码如下:

»Read More

only one column of a QTreeView/QTreeWidget editable只让一列可以编辑

如果你不写gui,可能不会在意maya channelBox的ui是如何实现的。最近一个工具需要用属性栏来显示和设置参数,当然思路有很多种。我使用QTreeView and QStandardItemModel 来实现的。因为我需要选择设置参数时能同时选中它的标签,但是标签那一栏需要设置为不可编辑,只做显示用。

只要override flags 方法即可

1
2
3
4
5
    def flags(self,index):
        flags = QtCore.Qt.ItemIsEnabled|QtCore.Qt.ItemIsSelectable
        if index.isValid() and index.column()==1:
            flags|= QtCore.Qt.ItemIsEditable
        return flags

如果使用的是QTreeWidget只有使用openPersistentEditor()和closePersistentEditor()来解决这一问题

1
2
3
4
5
6
7
8
9
10
11
        self._lastOpen = None
        self.itemDoubleClicked.connect(self.openEditStatus)
        self.itemSelectionChanged.connect(self.closeEditStatus)
    def closeEditStatus(self):
        if self._lastOpen:
            self.closePersistentEditor(self._lastOpen,1)
            self._lastOpen = None
    def openEditStatus(self):
        if self.currentColumn() == 1:
            self.openPersistentEditor(self.currentItem(),1)
            self._lastOpen = self.currentItem()

Maya魔方绑定的原理 Rubik’sCube rigging

魔方的实现有很多种方法,但是实现的过程都大同小异。我采用的的表达式让时间帧来控制主程序,或者可以使用scriptJob直观的去控制旋转。魔方分别有右、左、前、后、上、下六个面,创建六个控制器并且标号(也可以用8个控制器,俩个中间的)以6个控制器为例:right - 0/left -1 /front -2 /back - 3/up -4/down - 5

一、控制器如何分别控制所对应区域的方块:所有的方块都被6个控制器父子约束,根据标号跟方块的位置参数做比较

二、如何得到旋转的控制器是哪个方向:

1、探测当前控制器在时间线上的度数,可以得到在旋转的方向的标记号

2、如果旋转度数等于0度或90度或者90度的倍数(包括负数) 返回 0

3、如果旋转度数不等于0度或90度或者90度的倍数(包括负数)返回 1

假如等到标记号是1,$index =1;

获取所有方块的$axis[$index]的位移值,如:block1.tx

核心原理如下: »Read More

py2exe的使用方法

py2exe能够把Python script转换成可以在windows上独立执行的(即不需安装)的exe程序。对于非计算机专业的可能对于文件的执行略有压力,导致在网上看了不少的步骤最后都没法转换成功。我总结了一下,就几个点:
1、创建一个py文件,如下打开D盘的命令:

1
2
import os
os.startfile("D:")

2、创建一个setup脚本(setup.py)

1
2
3
from distutils.core import setup
import py2exe
setup(console=['test.py'])

把1、2俩步的test.py 和 setup.py文件放入c:\Python26 下或者你的安装目录

3、检查一下第一段脚本看能否运行(如果打开了D盘说明脚本无误):
a、在windows开始--运行 输入 cmd
b、改变一下路径,输入 cd c:\Python26
c、然后输入 python test.py

4、运行 python setup.py install (注意:确保路径是正确,如c:\Python26>python setup.py install)
5、执行:输入python setup.py py2exe (注意:确保路径是正确,如c:\Python26>python setup.py py2exe)
屏住呼气!!!赶紧去路径dist文件下找exe文件吧!

如何拥有我们自己的脚本编辑器

实现很简单,而且还会自动显示帮助,省去来回切换maya帮助的烦恼了。

1
2
3
4
5
6
7
8
9
10
11
12
import maya.cmds as mc
def myScriptEditor():
 
    if mc.window('myPyScriptEditor', exists=True):
        mc.deleteUI('myPyScriptEditor')
    mc.window("myPyScriptEditor", title="My Python Script Editor")
    mc.columnLayout(adjustableColumn=True)
    mc.cmdScrollFieldReporter(height=200)
    mc.cmdScrollFieldExecuter(height=200, sourceType='python')
    mc.showWindow()
 
myScriptEditor()

把sourceType=’python’ 换成 sourceType=’mel’ 就可以成为mel的编辑器了。

Numpy Maya Python

我们知道在maya mel 中有Matrix,但是在python中怎么实现呢?
默认的python中只能用list保存一组值,当数组来使用。不过由于list中的元素可以是任何对象,因此list中所保存的对象是指针。这样为了保存一个简单[1,2,3],就需要三个指针和三个整数对象。这样的数值运算无疑是对内存的一种浪费。此外python本身还提供了一个array模块,array对象和list的不同,它直接保存数值,类似于C中的一维数组,但是由于它不支持多维数组,也没有各种运算函数,因为不适合做数值的运算。
当然我们可以用强大的list代替。如:

1
2
3
4
5
6
7
rows=20
cols=10
matrix=[]
for i in xrange(0,rows):
    matrix.append([])
    for j in xrange(0.cols):
        matrix[i].append(0)

可是这样的效率、内存都是不小的负担,Numpy的出现弥补了这些缺陷,numpy提供俩种基本的对象:ndarray(存储单一数据的多维数组),ufunc(对数组进行处理的函数)
»Read More

using eclipse with maya

关于 eclipse 配置问题

A . 需要的软件:

  1. Eclipsehttp://www.eclips.org
  2. python: http://www.python.org
  3. Eclipse Maya-Editor: download
  4. Eclipse Mel-Editor: download
  5. jdk (注意选择的位数跟eclipse要一致): http://www.oracle.com (我用mac系统自带jdk,所以不需要另安装)

»Read More

scale muscle in maya

我们以一个名为 Mus_Scale 肌肉物体和 global_ctl 的整体控制器为例子:

  • global_ctl 的 Scale X / Y / Z 分别关联  cMuscleObject_cMuscleSurfaceMus_Scale1Shape1 的 User Scale X / Y / Z  (muscleData下)
  • global_ctl 的 Scale Y 关联 cMuscleCreatorMus_Scale1 的 User Scale  (nurbsData下)
  • global_ctl 的 Scale X / Y / Z 分别关联 linearMus_Scale1AUTO1 的 Scale X / Y / Z

»Read More

install PyQt for maya

• Mac OS X:

Lion:  

• windows:

MAYA  2011 & 2012 64bits »Read More