实现Maya FEM节点

准备实现FEM节点。


发现一种让自定义的Locator以及它的变换节点自动命名的方法。代码如下:

void FEMSimulationNode::postConstructor()
{
	MFnDependencyNode nodeFn(thisMObject());
	nodeFn.setName( "femSimulationShape#");
}

只要重载postConstructor函数,设置名字为xxxShape#, maya就会把变换节点名字设置为 xxx编号,把当前节点命名为xxxShape编号,#被maya自动填入编号 。

例如femSimulationShape1之类。


今天看Maya的帮助文档,发现MPlug分为 networked 和non-networked 两种,又看了complete maya programming 448页关于两种的说明。这里简单介绍下两种Plug的区别,同时记下自己关于Maya节点实现机制的一些猜测。


当一个Plug指代一个属性时,它记录了访问这个属性完整路径(形如节点名/属性名)。用户可以通过这条路径访问到属性。这种用途的Plug是non-networked plug

当一个Plug与另一个Plug连接时,Maya记录下这些连着的Plug,在每个节点维护一个Plug Tree(因为属性可以嵌套),求值时,需要遍历每个节点的树。树中的Plug就是networked plug


一个猜测是,maya两个节点连接的时候,实际上连接线两端的属性都指向同一份数据; 而断开连接时,又分裂成两份数据。这样就导致了连接和非连接的属性在实现上的区别,因而需要两种不同的Plug去指代这些数据。



posted @ 2014-12-25 15:37  dydx  阅读(249)  评论(0编辑  收藏  举报