3d — Maya API (C ++) — переменная статического члена класса и ее индивидуальность в других экземплярах

В эти дни я пишу в Maya API (C ++), и первое, что меня немного смутило, это то, что когда вы определяете класс в вашем заголовочном файле, очевидно, вам нужно только сделать статическую переменную-член (атрибуты), так что все экземпляры делятся общими данными. В то же время, например, в Maya, когда я создаю экземпляр плагина с именем «Сфера», он создает его, и я могу изменить атрибуты, и все работает отлично. Но когда я создаю другой объект Sphere на сцене Maya, статические атрибуты также имеют свои локальные значения. Как если бы я изменился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 обрабатывает эту часть по-своему?

Спасибо,

1

Решение

Ответ очень прост (хотя я согласен, что и люди, и документация майя злоупотребляют терминологией, когда говорят «атрибут»)

Когда вы создаете свой класс C ++, статические переменные являются определениями атрибутов — определение атрибута — это не экземпляры значений, а только описание того, что это за атрибут.

Позже, когда вы создадите экземпляр узла Maya, Maya прочитает определение, чтобы создать атрибут, в котором вы можете сохранить значение. Этот атрибут тот, который вы видите в Maya, и значения этого хоста.

Статические переменные (то есть определение атрибута) уникальны и одинаковы для всех экземпляров. Атрибут узла принадлежит экземплярам узла Maya и отличается от других узлов.

У меня есть пара статей, рассказывающих об атрибутах, если вам нужны дальнейшие чтения:
http://around-the-corner.typepad.com/.services/blog/6a0163057a21c8970d0163057a224d970d/search?filter.q=attributes

0

Другие решения


По вопросам рекламы [email protected]