【发布时间】: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 是如何做到的。