Maya插件(五): 自定义Dependency Node

来源:互联网 发布:大庆有网络维护学校吗? 编辑:程序博客网 时间:2024/06/03 21:26

前言

       在插件(三)中,我们使用了自定义的Locator结点,它也是个DG Node,本文目的是学习和理解Mplug && Attribute。

MyDGNode是我们自定义的结点, 有输入、输出Attribute,下图是一个用法:

       将时间结点time1的输出-->MyDGNode1-->sphere1(Transform结点).

      

 

 

MyDGNode的实现

       从MPxNode继承。MyDGNode.h

1. virtual MStatus compute(const MPlug &outPlug, MDataBlock &dataBlock);

    当DG网络出现脏数据时,该函数将被调用,用于更新数据.

2. static MStatus initialize();

    初始化该结点,创建Attributes(相当于动态添加类成员变量).

3. static MObject m_inTime;  static MObject m_outValue;

    新的Attribute标识符(句柄).

实现代码MyDGNode.cpp

注册MyDGNode, pluginMain.cpp

Attribute Editor模板MEL

放在Maya用户目录的Scripts下面。

编译工程.....

加载插件后,在MEL窗口中执行如下脚本

// run this MEL to test the MyDGNode

{
     $myNode = `createNode "MyDGNode"`;
    
     // create a polygon sphere
     string $psphere[] = `polySphere -r 1 -sx 20 -sy 20 -ax 0 1 0 -tx 1 -ch 1`;

 

     // connect the output of the node to the x-scale of the ploy sphere
     string $plugName = `connectAttr ($myNode + ".output") ($psphere[0] + ".sx")`;
     print $plugName;
     print("/n");
    
     // connect the time1 output to the "time" of myNode
     $plugName = `connectAttr "time1.outTime" ($myNode + ".time")`;
     print $plugName;
     print("/n");
}

然后开启时间滑块,你会发现球体的缩放动画。

 

做个实验

       在MEL命令中继续输入如下命令:

connectAttr "time1.outTime"  "MyDGNode1.output";

 

直接将time1连接到MyDGNode1的ouput, 发现对显示无影响,看看连接图如下:

 

如果输入的命令是:

connectAttr "pSphere1.sy"  "MyDGNode1.time";

将出现错误, Error: line 1: 'MyDGNode1.time' already has an incoming connection from 'time1.outTime'.

说明incoming的来源只能是一个!

原创粉丝点击