码迷,mamicode.com
首页 > Windows程序 > 详细

一、Maya API简介

时间:2016-01-22 22:10:01      阅读:388      评论:0      收藏:0      [点我收藏+]

标签:

#include <maya/MSimple.h>
#include <maya/MIOStream.h>
DeclareSimpleCommand( hello, "Autodesk", "2013");
MStatus hello::doIt( const MArgList& args )
{
    cout << "Hello " << args.asString( 0 ).asChar() << endl;
    return MS::kSuccess;
}

MArgList接受来自MEL command输入的命令参数。

 一个创建NURBS CURVE的例子: 可以学到1命令的parse, 2创建MObject的方法。3. Maya中的数据结构使用

#include <math.h>
#include <maya/MSimple.h>
#include <maya/MIOStream.h>
#include <maya/MFnNurbsCurve.h>
#include <maya/MPointArray.h>
#include <maya/MDoubleArray.h>
#include <maya/MPoint.h>
DeclareSimpleCommand( helix, "Autodesk - Example", "3.0");
MStatus helix::doIt( const MArgList& args )
{
    MStatus stat;
    const unsigned      deg     = 3;                    // Curve Degree
    const unsigned      ncvs    = 20;                   // Number of CVs
    const unsigned      spans   = ncvs - deg;   // Number of spans
    const unsigned      nknots  = spans+2*deg-1;// Number of knots
    double      radius                  = 4.0;                  // Helix radius
    double      pitch                   = 0.5;                  // Helix pitch
    unsigned    i;
    // Parse the arguments.
    for ( i = 0; i < args.length(); i++ )
        if ( MString( "-p" ) == args.asString( i, &stat )
            && MS::kSuccess == stat)
        {
            double tmp = args.asDouble( ++i, &stat );
            if ( MS::kSuccess == stat )
                pitch = tmp;
        }
        else if ( MString( "-r" ) == args.asString( i, &stat )
            && MS::kSuccess == stat)
        {
            double tmp = args.asDouble( ++i, &stat );
            if ( MS::kSuccess == stat )
                radius = tmp;
        }
    MPointArray  controlVertices;
    MDoubleArray knotSequences;
    // Set up cvs and knots for the helix
    //
    for (i = 0; i < ncvs; i++)
        controlVertices.append( MPoint( radius * cos( (double)i ),
        pitch * (double)i, radius * sin( (double)i ) ) );
    for (i = 0; i < nknots; i++)
        knotSequences.append( (double)i );
    // Now create the curve
    //
    MFnNurbsCurve curveFn;
    MObject curve = curveFn.create( controlVertices,
        knotSequences, deg, 
        MFnNurbsCurve::kOpen, 
        false, false, 
        MObject::kNullObj, 
        &stat );
    if ( MS::kSuccess != stat )
        cout << "Error creating curve.\n";
    return stat;
}

MObject是maya中所有node的父类,function sets用来对object进行操作。

Proxies用来创建除了maya中除了MObject之外对象。包括 command对象,file translator对象,和shader的对象。

 

二、关于和MAYA交互的方法:

1. 有4中方式:wrappers, objects, function sets, proxies

2. 操纵maya的objects:

(1)object类型:curves, surfaces, DAG nodes, dependency graph nodes, lights, shaders, textures,etc) 

(2)操作这些object 的handle是MObject, MObject的析构函数不会delete object本身,只会delete the handle object

不能使用指针指向MObject,而是用MobjectHandle

3. Wrappers:简单的object,例如math classes, vectors, matrices, 他们是普通c++类的包装,例如MPointArray 和MDoubleArray。

在循环中不要申明wrapper, 除了静态的MGlobal

4. object 和 function set通常一起使用。

创建一条curve

MFnNurbsCurve curveFn;
MObject curve = curveFn.create( ... );
  • MFnNurbsCurve curveFn; creates a new curve function set which contains methods for operating on curve objects, and the create method in particular is used to create new curves.
  • MObject curve = curveFn.create( ... );creates a new Maya curve object which you can then use however you like

If you add a third line:

curve = curveFn.create( ... );

a second curve is created and the curve MObject now references the new curve. The first curve still exists—it simply is no longer referenced by the MObject handle.

5. Proxies:

  • MPx - Classes with this prefix are all Proxies, API classes designed for you to derive from and create your own object types.

6.MIt - These classes are iterators and work on MObjects much the way a function set does. 

7. Error Check: 

The addition of &stat to the asString() and asDouble() methods allows you to check if the casting operation succeeds.

For example, args.asString(i, &stat) could return MS::kFailure if the index is greater than the number of arguments。

MStatus类的作用:(1)重载了逻辑运算符,可以直接if进行判断。(2)可以获得MstatusCode枚举出错原因

(3)通过errorString()方法获得包含error信息的Mstring

(4)通过perror()函数打印

(5)重载== /!=运算符,可以和Mstatuscode进行比较

 

一、Maya API简介

标签:

原文地址:http://www.cnblogs.com/bubbler/p/5152228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!