Maya API (c++) -类静态成员变量及其在其他实例中的个性

Maya API (C++) - Class Static Member Variable and Its Individuality in the Other Instances

本文关键字:实例 其他 c++ API -类 变量 静态成员 Maya      更新时间:2023-10-16

我在玛雅API编码(c++)这些天,第一件事,我有点困惑的是,当你在你的头文件中定义一个类,显然你只需要使静态成员变量(属性),所以所有的实例共享公共数据。同时,在Maya中,例如,当我创建一个插件名为"Sphere"的实例时,它创建了它,我可以改变属性,一切都很好。但是当我在Maya场景中创建另一个球体对象时,静态属性也有它们的局部值。比如如果我改变Sphere2。半径",它不会更新第一个实例"Sphere1。

下面是执行相同行为的代码:

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正在以自己的方式处理这部分?

谢谢,

答案很简单(虽然我同意这两个人,以及玛雅文档滥用术语说'属性')

创建c++类时,静态变量是属性定义——属性定义不是实例化的值,而只是对属性的描述。

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

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

如果你需要进一步阅读,我有几篇关于属性的文章:http://around-the-corner.typepad.com/.services/blog/6a0163057a21c8970d0163057a224d970d/search?filter.q=attributes