【某彩笔早期驯服Maya C++记录—— MFnAttribute】多级的节点插槽实现

前言

Maya节点的属性的数据类型非常多样且独特,完全没有头绪。这几天想速成一个新功能节点,计算主体还没仔细研究呢,反倒是节点的输入输出的属性就是一座山。假设我需要一个对象到其祖先的所有旋转数据,承接到一个专门接受此类数据的plug。这些旋转数据之后可以用cmd批量连接到plug。

PS(20230411留): 开发过程中碰到一些有价值的问题会更新,因为是新手有些名词可能是用错的,希望大佬能纠正 。

MFnAttribute类继承派生图谱

在这里插入图片描述
我这里尝试了unit,compound,typed,numeric。compoundunit+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之类,对我们新建的列表项的子数组进行可控制的生成。这个我还没仔细研究。挖个坑先。

官方案例学习

buildRotationNode

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值