有一个partner问我,他在使用 MDagMessage::addWorldMatrixModifiedCallback 这个事件,但是他想了解到底哪些属性的变化会触发这个事件,他们有一些特殊的需求需要单独处理那些不触发这个事件的属性。
这个就涉及到属性之间相互影响的关系,查了下SDK,上面说“This method registers a callback that is called when a DAG node's worldMatrix changes.”,那也就说,要知道哪些属性变化会触发该事件,只要知道哪些属性会影响到worldMatrix 属性, 一开始,我建议用户使用 affects 命令或者如下命令来获取:
MFnDependencyNode::getAffectedAttributes (const MObject &attr, MObjectArray &affectedAttributes),
MFnDependencyNode::getAffectedByAttributes (const MObject &attr, MObjectArray &affectedByAttributes) const
但这个似乎还是不完美,幸好,MFnAttribute::isAffectsWorldSpace()似乎提供了更好的解决方式。只需要对该接口属性做个判断,理论上,如果该属性会影响世界空间,那么也就会影响world Martrix属性。自己做了些小实验,查看那些触发addWorldMatrixModifiedCallback() 的属性是否会影响世界空间,结果验证了自己的想法。