【早期驯服Maya C++记录】(附官方案例地址)获得某plug的属性值

前言

自学第四天。现在知道如果是一般的计算节点Node,是可以通过inputValue来获取自己的plug属性值。但一直有一个疑问就是如果自己开发的不是一般节点,而是命令行,ik节点等等这又怎么说?还有跨节点的属性值获取又要怎么解决。
今天乱翻之下找到了目前的一个方案。
现在大概能知道的情报就是,Maya的node有一串串插槽,大概就是对应MPlug类的管理。Mplug类有方法可以获取对应的属性内容。plug的引用内容,你需要指定数据类型,才能对内容进行读取和利用。

ps:小白一枚,有错误望指正。

列举某些情况下,找到Plug

MPlug文档指路

  • 如果你开发的是一个节点,你想得到这个节点本身的plug
	MObject thisNode = thisMObject();
	MPlug thisPlug(thisNode, num);//num 是你声明的addAttribute的属性
  • 你想找到拥有某个属性名对应的plug
    MPlug findPlug ( const MObject & attr,
    bool wantNetworkedPlug,
    MStatus * ReturnStatus = NULL
    ) const->
        const MFnDependencyNode & iNode,
        MObject attr = iNode.attribute(i);
        MFnAttribute mfnAttr(attr);
        MPlug plug = iNode.findPlug(attr, true);
  • 从获得的MDagPath-》MObject类型的node-》plug->
 MObject locatorNode = objPath.node();
 MPlug cvLocationsPlug(locatorNode, cvColor::cvLocations);

获得plug后,这个plug背后的引用属性可以分为非Array和Array,处理方式不同

如果属性真实类型为Numeric

可以直接使用这个方法,也可以用下面那个方法

	MObject thisNode = thisMObject();
	MPlug thisPlug(thisNode, num);
	int numofjnts = thisPlug.asInt();

如果属性真实类型为其他

    //
    // Get the cvLocations attribute value
    //
    MPlug cvLocationsPlug(locatorNode, cvColor::cvLocations);
    MObject cvLocationsObject;
    stat = cvLocationsPlug.getValue(cvLocationsObject);

这个例子是插槽引用的属性类型是MObject->

测试

从int转成MString类型有些麻烦,干脆就这么测试

	MObject thisNode = thisMObject();
	MPlug thisPlug(thisNode, num);
	int numofjnts = thisPlug.asInt();

	MString s = "1";
	for (int i = 0; i < numofjnts; i++)
	{
		s = s + "0";
		MGlobal::displayInfo("nums");
	}
	MGlobal::displayInfo(s);

这个情况num=6,可以看到输出完全正确。
在这里插入图片描述

  • 补一下int数据转MString
		std::string t = std::to_string(joint_num);
		const char* c = t.c_str();
		MString s(c);
		MGlobal::displayInfo("nodeFn.name() has got " + s + " joints in the chain.");

后记

关于如何取值,两个方法的说法有些不一样,目前使用上看不出什么差别

  • 第一种方法
    Retrieve the value in the current evaluation context of the attribute this plug references.
    第二种方法
    Retrieve the current value of the attribute this plug references.
    有大佬能解释一下吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在这些引用中,都提到了"bind error: Permission denied"的错误。这个错误通常表示程序在尝试绑定到指定的网络地址和端口时被拒绝了权限。这可能是因为操作系统限制了程序对某些端口或网络地址的访问权限。 在这些引用中的例子中,出现了类似的错误信息。第一个引用提到了使用C语言编写的程序遇到了"bind error: Permission denied"错误。第二个引用中的Haskell程序也遇到了相同的错误。第三个引用中的示例是关于Hadoop的安装过程中出现了"Permission denied"的问题。 对于这个错误,一种可能的解决方法是以管理员身份运行程序,以获得足够的权限来绑定到所需的网络地址和端口。另外,还可以检查操作系统的防火墙设置,确保允许程序访问所需的端口。 总结起来,"bind error: Permission denied"错误表示程序在绑定网络地址和端口时被拒绝了权限。可以尝试以管理员身份运行程序,并检查操作系统的防火墙设置,以解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【Linux系统编程】普通用户绑定(bind)特权端口](https://blog.csdn.net/weixin_33994444/article/details/88600055)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [超级马里亚java源码-HadoopCourse:终极实践Hadoop-驯服您的大数据!:https://www.udemy.com/the-](https://download.csdn.net/download/weixin_38588394/19416862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值