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 ...
随机推荐
- java虚拟机的内存模型
一.为什么要了解java虚拟机的内存模型 java虚拟机作为java代码运行的平台,是java技术的基石.了解java虚拟机的内存模型也就变得十分必要.它能帮助我们更好的了解java代码的运行机制,更 ...
- Linux记录-salt-minion安装
python -m SimpleHTTPServer 8888#!/bin/bash sed -i 's/^#//g' /etc/yum.repos.d/centos7.4.repo sed -i ' ...
- C#设计模式(12)——组合模式
1.组合模式 在软件开发中我们经常会遇到处理部分与整体的情况,如我们经常见到的树形菜单,一个菜单项的子节点可以指向具体的内容,也可以是子菜单.类似的情况还有文件夹,文件夹的下级可以是文件夹也可以是文件 ...
- java实现《剑指offer》(二)11~20 更新中
11.二进制中1的个数 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. (1)最优解 public class Solution { public int NumberOf1(int ...
- IO流之FileUtils工具类的使用
IO流之FileUtils工具类的使用: 使用apache的commons-io包下的FileUtils,我筛选了一些常用方法:
- vue watch bug记录
watch中,写箭头函数,获取不到正确的this 换成function,正确取到this
- 解析/proc/net/dev
https://stackoverflow.com/questions/1052589/how-can-i-parse-the-output-of-proc-net-dev-into-keyvalue ...
- Android文字转语音引擎(TTS)使用
百度网盘下载地址 密码:3si0资源来源:https://blog.csdn.net/Sqq_yj/article/details/82460580?utm_source=blogxgwz4 简单比较 ...
- Nginx负载均衡session会话保持方法
负载均衡时,为了保证同一用户session会被分配到同一台服务器上,可以使用以下方法: 1.使用cookie 将用户的session存入cookie里,当用户分配到不同的服务器时,先判断服务器是否存在 ...
- 判断闰年(Java)
package day01; import java.util.Scanner; public class leap_year { public static void main (String[] ...