Maya API (c++) -类静态成员变量及其在其他实例中的个性
Maya API (C++) - Class Static Member Variable and Its Individuality in the Other Instances
我在玛雅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
相关文章:
- 如何使用模板化类创建其他类的实例?
- 在Visual Studio中单实例Qt应用程序版本5.11.1中,在所有其他窗口的顶部打开Qt MainWindow
- 无法将模板子类强制转换为其他模板实例化
- 将所有其他实例的值相加,并将此实例设置为该总和
- 如果我具有调用其其他实例之一的超载函数,它是否被认为是递归功能
- 创建实例化所有其他类和子系统的类的目的是什么
- JNI-是否可以用其他类替换类的实例化
- 如何在任何其他全局变量或静态变量之前创建/构造类实例
- C 实例化对象,在没有指针的情况下,其他类构造函数中没有默认构造函数
- 通过其他文件中的另一个全局变量使用类的全局实例
- C++模板类,用于创建其他类的实例
- 如何在本地 Windows 网络上发现我的应用程序的所有其他实例
- 指 A 类中类 A 的其他实例
- 如何使用 IloCplex::readSolution() 和查询 cplex 类实例后获取变量值和其他值
- 影响该类的所有其他实例的类的实例
- 向同一网络上的应用程序的所有其他实例发送消息
- 使用整数常量0初始化实例,但不使用其他常数值或整数变量
- 如何让一个方法访问其他模板类实例的私有成员
- 如何访问其他模板类实例的私有成员
- QMutex是否需要是静态的,以便该类实例的其他线程调用知道要挂起它们的操作