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

前言

       在插件(三)中,我们使用了自定义的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的来源只能是一个!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值