【问题标题】:Maya API (C++) - Class Static Member Variable and Its Individuality in the Other InstancesMaya API (C++) - 类静态成员变量及其在其他实例中的个性
【发布时间】:2015-05-18 18:21:26
【问题描述】:

这些天我正在使用 Maya API (C++) 进行编码,首先我有点困惑的是,当你在头文件中定义一个类时,显然你只需要制作静态成员变量(属性),所以所有实例共享公共数据。同时在 Maya 中,例如,当我创建插件名称“Sphere”的实例时,它会创建它,我可以更改属性并且一切正常。但是当我在 Maya 场景中创建另一个 Sphere 对象时,静态属性也有它们的本地值。就像我更改“Sphere2.radius”一样​​,它根本不会更新第一个实例“Sphere1.radius”。

这是执行相同行为的代码:

class Morpher : public MPxDeformerNode
{
public:
    Morpher();
    virtual ~Morpher();
    static void* creator();
    static MStatus initialize();

    virtual MStatus deform(
        MDataBlock& data,
        MItGeometry& itGeo,
        const MMatrix& localToWorldMatrix,
        unsigned int geomIndex);

    static MTypeId id;
    static MObject aBlendMesh;
    static MObject aRadius;
};

以及初始化函数:

MStatus Morpher::initialize(){
    MStatus status;

    MFnNumericAttribute nAttr;
    MFnTypedAttribute tAttr;

    aBlendMesh = tAttr.create("blendMesh", "blendMesh", MFnData::kMesh);
    addAttribute(aBlendMesh);
    attributeAffects(aBlendMesh, outputGeom);

    aRadius = nAttr.create("radius", "radius", MFnNumericData::kFloat);
    nAttr.setKeyable(true);
    nAttr.setMin(0);
    nAttr.setMax(1);
    addAttribute(aRadius);
    attributeAffects(aRadius, outputGeom);

    MGlobal::executeCommand(
        "makePaintable -attrType multiFloat -sm deformer blendMesh weights;");

    return MS::kSuccess;
}

所以我想知道你们是否有任何使用此 API 的经验,或者我没有正确理解静态概念或 Maya 正在以自己的方式处理该部分?

谢谢,

【问题讨论】:

  • 请在问题中添加标签“maya”。它有更多的条目,很容易回答。我真的很想知道答案,我想知道 Maya 是如何做到的。

标签: c++ 3d maya-api


【解决方案1】:

答案很简单(虽然我同意这两个人和 Maya 文档在说“属性”时滥用术语)

当您创建 C++ 类时,静态变量是属性定义 - 属性定义不是实例化的值,而只是对属性是什么的描述。

稍后,当您创建 Maya 节点的实例时,Maya 将读取定义,以创建可以存储值的属性。该属性就是您在 Maya 中看到的属性,并且该属性是宿主值。

静态变量(即属性定义)是唯一的,并且对于所有实例都是相同的。节点属性归 Maya 节点实例所有,与其他节点不同。

如果您需要进一步阅读,我收到了几篇谈论属性的文章: http://around-the-corner.typepad.com/.services/blog/6a0163057a21c8970d0163057a224d970d/search?filter.q=attributes

【讨论】:

  • @formerRigger,有帮助吗?
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-08
相关资源
最近更新 更多