Maya API Test
import maya.OpenMaya as OpenMaya
import maya.OpenMayaMPx as OpenMayaMPx sl = OpenMaya.MSelectionList()
OpenMaya.MGlobal.getActiveSelectionList(sl)
itersl = OpenMaya.MItSelectionList(sl, OpenMaya.MFn.kDagNode) dagPath = OpenMaya.MDagPath()
dagFn = OpenMaya.MFnDagNode() while (not itersl.isDone()):
itersl.getDagPath(dagPath)
try:
dagPath.extendToShape() # get shaper node
except:
pass
dagObject = dagPath.node()
dagFn.setObject(dagObject)
name = dagFn.name()
print 'Get the Dag Node Name Is :', name itersl.next() # create MFnMeshVertex
object = OpenMaya.MItMeshVertex(dagPath)
while (not object.isDone()):
print object.position().x
object.next()
http://ewertb.soundlinker.com/api/api.php
https://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www/mayaapi.html
https://nccastaff.bournemouth.ac.uk/jmacey/RobTheBloke/www/research/maya/mfnanimcurve.htm
Python PIP升级:
python -m pip install --upgrade pip
Event in Maya Api to capture currentTime / frame change
http://download.autodesk.com/us/maya/2009help/API/class_m_event_message.html#c038e5bbbfc19b2772d1a01220b570c0
// ...
// Our callback Id array to
// store the Ids of all our callbacks
// for later removal
MCallbackIdArray myCallbackIds;
// This is where the actual adding callback happens
// We register our callback to the "timeChanged" event
MCallbackId callbackId = MEventMessage::addEventCallback("timeChanged", (MMessage::MBasicFunction) MySampleCmd::userCB);
// ...
if(myCallbackIds.length() != )
// Make sure we remove all the callbacks we added
stat = MEventMessage::removeCallbacks(myCallbackIds);
class MySampleCmd : public MPxCommand {
public:
MySampleCmd();
virtual ~MySampleCmd();
// Our callback - implemented as a static method
static void userCB(void* clientData);
MStatus doIt( const MArgList& );
MStatus redoIt();
MStatus undoIt();
bool isUndoable() const;
static void* creator();
public:
// Our callback Id array to
// store the Ids of all our callbacks
// for later removal
MCallbackIdArray myCallbackIds;
};
cmd.h
// Clearing our callback Id array
// for housekeeping
myCallbackIds.clear();
} // Destructor
MySampleCmd::~MySampleCmd() { // Make sure we remove all the callbacks we added
// Failing to do so will result in fatal error
if(myCallbackIds.length() != ) // Remove the MEventMessage callback
MEventMessage::removeCallbacks(myCallbackIds);
} MStatus MySampleCmd::redoIt() { // This is where the actual adding callback happens
// We register our callback to the "timeChanged" event
MCallbackId callbackId = MEventMessage::addEventCallback("timeChanged", (MMessage::MBasicFunction) MySampleCmd::userCB); // Append the newly added callback's ID to our list of callback ids
// for future removal
myCallbackIds.append(callbackId);
return MS::kSuccess;
} MStatus MySampleCmd::undoIt() {
MStatus stat;
if(myCallbackIds.length() != )
// Make sure we remove all the callbacks we added
stat = MEventMessage::removeCallbacks(myCallbackIds);
return stat;
} // Our callback function
void SafeSelect::userCB(void* clientData) {
MGlobal::displayInfo( "Callback userCB called!\n" );
return;
}
cmd.cpp
Get Points At Time
MStatus myPlugIn::GetPointsAtTime(
const MDagPath& dagPath,
const MTime& mayaTime,
MPointArray& points )
{
MStatus status = MS::kSuccess; points.clear(); MFnMesh fnMesh; // Move Maya to current frame
MGlobal::viewFrame( mayaTime ); // You MUST reinitialize the function set after changing time!
fnMesh.setObject( dagPath ); // Get vertices at this time
status = fnMesh.getPoints( points ); return status;
}
MStatus myPlugIn::doIt( const MArgList& args )
{
MStatus status = MS::kSuccess; MDagPath dagPath; // .. determing dagPath from current selection, or whatever .. // MPointArray points; MTime currentTime, maxTime; // Get start- and end-frame from Maya
currentTime = MAnimControl::minTime();
maxTime = MAnimControl::maxTime(); // Iterate through time
while ( currentTime <= maxTime )
{
// Get vertices at this time
status = GetPointsAtTime( dagPath, currentTime, points ); // .. do something with the points here .. // // Advance by one frame
currentTime++;
} return status;
}
Use the Get points at time
M3dView Capture
(1)
#Import api modules
import maya.OpenMaya as api
import maya.OpenMayaUI as apiUI #Grab the last active 3d viewport
view = apiUI.M3dView.active3dView()
print view #read the color buffer from the view, and save the MImage to disk
image = api.MImage()
view.readColorBuffer(image, True)
image.writeToFile('C:/test.jpg', 'jpg')
(2)
import os import maya.OpenMaya as mod_om
import maya.OpenMayaUI as mod_om_ui
import maya.cmds as mod_mc
import maya.mel as mel view = mod_om_ui.M3dView.active3dView()
image_ = mod_om.MImage() for frame in range(1,11):
# Change the frame number
mod_mc.currentTime(frame)
for obj in ['headMouthScp_geo', 'pSphere1']: # Isolate the object, so that only that particular object is seen
# Also Tried with turning off/on the visibility
mod_mc.select(obj)
mod_mc.isolateSelect('modelPanel4',s=1)
mod_mc.isolateSelect( 'modelPanel4', addSelected=True )
#mod_mc.select(obj)
#mod_mc.isolateSelect( 'modelPanel4', addSelected=True )
mod_mc.setAttr(obj + '.visibility', 0)
mod_mc.setAttr(obj + '.visibility', 1) # Refresh the scene
view.refresh()
mod_mc.refresh() # Read Color Buffer
view.readColorBuffer(image_, True) # Write The Color Buffer
image_.resize(640, 480)
image_.writeToFile('C:/Temp/Frame_Buffer_%s_%d.bmp' % (obj, frame), 'bmp') mod_mc.select(clear=True)
mod_mc.isolateSelect( 'modelPanel4', state=0 )
(3)cmds context
import contextlib @contextlib.contextmanager
def solo_renderable(solo_cam): # Disable all cameras as renderable
# and store the original states
cams = cmds.ls(type='camera')
states = {}
for cam in cams:
states[cam] = mc.getAttr(cam + '.rnd')
cmds.setAttr(cam + '.rnd', 0) # Change the solo cam to renderable
cmds.setAttr(solo_cam + '.rnd', 1) try:
yield
finally:
# Revert to original state
for cam, state in states.items():
cmds.setAttr(cam + '.rnd', state) with solo_cam('myCamShape'):
cmds.playblast()
OGL Render in backend:
import sys
import os
import contextlib try:
import maya.cmds as cmds
import maya.standalone as standalone standalone.initialize(name='python')
except:
raise ImportError def openScene(openPath):
sceneName = os.path.basename(openPath[:-3])
print "opening path.................\n"
cmds.file(openPath, open=True) if __name__ == "__main__":
openScene(r"c:/test2.ma")
cmds.hwRenderLoad() for x in xrange(1,68,1):
print cmds.ogsRender(width=1280,height=720,cam='camera1',frame = x)
(4)code snipts
<1>
import maya.cmds as cmds
cmds.ls(*cmds.listHistory (mynode), type = 'animCurve' )
<2> iter by type
import maya.OpenMaya as om
import maya.OpenMayaMPx as omp
import maya.OpenMayaAnim as oma # just loop the animation curve
it = om.MItDependencyNodes(om.MFn.kMesh) while not it.isDone():
aobj = it.item()
print aobj
#aniCur = oma.MFnAnimCurve(aobj)
#print aniCur.name() it.next()
(5) save two matrixs into a float* array
// MMatrix stores double values, but I want floating point values on the GPU so convert them here.
unsigned int numFloat = ;
float* temp = new float[numFloat];
unsigned int curr = ;
for(unsigned int row = ; row<; row++)
{
for(unsigned int column = ; column<; column++)
{
temp[curr++] = (float)omat(row, column);
}
}
for(unsigned int row = ; row<; row++)
{
for(unsigned int column = ; column<; column++)
{
temp[curr++] = (float)omatinv(row, column);
}
}
in opencl use pointer offset
__global const float4* matrices, //first matrix is offset matrix, second matrix is offset matrix inverse
__global const float4* matrixInverse = &(matrices[]);
__global const float4* matrix = matrices;
(6) command port eval scripts:
MEL:
commandPort -stp "python" -n ":5055" ;
cmds.commandPort (n=':6328', stp='python')
other Python version:
import socket
maya = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
maya.connect(("127.0.0.1", 5055))
maya.send("""maya.cmds.polySphere( radius=4 )""")
The above code will create a new sphere in your currently running Maya. You can use any python terminal (doesn't have to be mayapy). (If you're running python3, the last command will produce an error until you change it to: maya.send(bytes("""maya.cmds.polySphere( radius=4 )""", 'UTF-8'))
Maya API Test的更多相关文章
- Maya Api笔记 - How polygons are handled internally
为加深记忆和理解Maya的Polygon,尝试利用空闲时间翻译Maya Api文档相关章节. How polygons are handled internally - 多边形是如何在内部处理的
- Maya API编程快速入门
一.Maya API编程简介 Autodesk® Maya® is an open product. This means that anyone outside of Autodesk can ch ...
- 一、Maya API简介
#include <maya/MSimple.h> #include <maya/MIOStream.h> DeclareSimpleCommand( hello, " ...
- Building GCC 4.1.2 in CentOS 7 for Maya API development
Following the official guid: http://help.autodesk.com/cloudhelp/2015/ENU/Maya-SDK/files/Setting_up_y ...
- [zz]Maya C++ API Programming Tips
Maya C++ API Programming Tips source : http://wanochoi.com/?page_id=1588 How to handle the multiple ...
- Debugging Maya Plugin(C++) with CodeBlocks in Linux
My system is CentOS7 x64, Maya2015 x64 for Linux. - Make sure that your project is built with flag - ...
- 十二、shapes
1. The control points are attributes on the shape which are usually arrays of points. Control points ...
- 六、通过插件如何创建自己的MEL command
1. MAYA API支持不同类型的plugin (1)Command Plugin——扩充MEL命令 (2)Tool Commands——通过鼠标输出 (3)DG plugin——对场景添加新的操作 ...
- osg 添加 fbx插件 osg中编译fbx
使用osg加载fbx模型,需要自己编译fbx插件,编译流程与插件使用案例如下 代码地址:https://github.com/shelltdf/osgFBX CMake Error: The foll ...
随机推荐
- mysql清理binlog日志
mysql的binlog日志过多过大,清理过程. 1.查看binlog日志 mysql> show binary logs; +------------------+-----------+ | ...
- python 字符串 切片
####################概念######################''' int 整数 str 字符串 一般不存放大量的数据 bool 布尔值,用来判断. True,False ...
- 基于zookeeper(集群)+LevelDB的ActiveMq高可用集群安装、配置、测试
一. zookeeper安装(集群):http://www.cnblogs.com/wangfajun/p/8692117.html √ 二. ActiveMq配置: 1. ActiveMq集群部署 ...
- 使用rvm安装与切换Ruby
列出已知的 Ruby 版本 rvm list known安装一个 Ruby 版本 rvm install 2.3.1 --disable-binary这里安装了最新的 2.2.0, rvm list ...
- GNU Screen Usage
分屏: 1.在终端输入screen命令 2.Ctrl+a 然后shift+s 上下分屏,切换到下方Ctrl+a tab然后新建一个window(Ctrl+a c) 3.切换到上方,Ctrl+a tab ...
- [Linux] [JNI]
使用 javah 生成头文件后, 编写c代码来实现其中声明的函数, 本文主要解决以下问题: (1) 如何生成动态链接库文件 使用如下格式的 gcc 命令可以将 C文件 编译为 .so 文件, 对于其依 ...
- 在线xss练习平台
在线xss练习平台 HTTPS://ALF.NU/ALERT1 这个是只要能输出alert1就算赢. No.1第一个就很简单了,什么都没有过滤,只需要闭合前面的标签就可以执行xss了. 1 " ...
- 【SRM-05 B】无题?
Description 有一个拥有n个城市的国家.这个国家由n-1条边连接起来.有一天国家发生叛乱.叛军已占领了一些城市.如果叛军占领的城市中,存在两个城市之间有边直接相连,则称这种情况是坏的.现在并 ...
- 用SQLAlchemy创建一对多,多对多关系表
多对多关系表的创建: 如果建立好多对多关系后,我们就可以通过关系名进行循环查找,比如laowang = Teacher.query.filter(Teacher.name=='laowang').fi ...
- python序列化
一. 序列化 1 定义: 在我们存储数据或者⽹网络传输数据的时候. 需要对我们的对象进⾏行行处理理. 把对象处理理成 ⽅方便便存储和传输的数据格式. 这个过程叫序列列化. 不同的序列列化, 结果也不同 ...