前言
Maya节点的属性的数据类型非常多样且独特,完全没有头绪。这几天想速成一个新功能节点,计算主体还没仔细研究呢,反倒是节点的输入输出的属性就是一座山。假设我需要一个对象到其祖先的所有旋转数据,承接到一个专门接受此类数据的plug。这些旋转数据之后可以用cmd批量连接到plug。
PS(20230411留): 开发过程中碰到一些有价值的问题会更新,因为是新手有些名词可能是用错的,希望大佬能纠正 。
MFnAttribute类继承派生图谱
我这里尝试了unit,compound,typed,numeric。compound
与unit+numeric
的组合功能类似。但是compound可以加很多不同数据组织形式的 child
实现多级plug——人工
看效果,在选项组里add New Item就可以在一级列表中加入新的子列表插槽,而且transform节点中的rotate也是可以成功连接到对应的插槽中
-
在initialize方法中:
MFnNumericAttribute nAttr; MFnCompoundAttribute cmpAttr; MFnTypedAttribute tAttr; MFnUnitAttribute uAttr; MFnVectorArrayData vectArrayDataFn; ··· rotateX = uAttr.create("rotateX", "rx", MFnUnitAttribute::kAngle, 0.0); nAttr.setStorable(false); rotateY = uAttr.create("rotateY", "ry", MFnUnitAttribute::kAngle, 0.0); nAttr.setStorable(false); rotateZ = uAttr.create("rotateZ", "rz", MFnUnitAttribute::kAngle, 0.0); nAttr.setStorable(false); rotate = nAttr.create("rotate", "r", rotateX, rotateY, rotateZ); nAttr.setStorable(false); rotationList = cmpAttr.create("rotationList", "rl"); cmpAttr.setArray(true); cmpAttr.addChild(rotate); cmpAttr.setReadable(true); cmpAttr.setUsesArrayDataBuilder(true); addAttribute(rotationList);
-
cmpAttr.setArray(true);
实现插入新的子属性 -
cmpAttr.setUsesArrayDataBuilder(true);
默认为false
设置此属性是否使用数组数据生成器。我这个例子是需要的。
挖坑
似乎可以用ArrayDataHandler之类,对我们新建的列表项的子数组进行可控制的生成。这个我还没仔细研究。挖个坑先。