Я разрабатываю плагин для C ++, и мне хотелось бы узнать, как работать с объектами не-Maya класса через сцену. Я хочу иметь экземпляр класса, внешнего по отношению к API Maya, в качестве атрибута класса Node. Класс довольно сложный и состоит из нескольких классов.
Я видел, что узел может дать мне структурированное хранилище данных, но, насколько я знаю, он работает только с типами Maya, чего недостаточно для моих целей.
Прямо сейчас я использую MPxCommand для выполнения вычисления этого объекта, но как только он закончится, он будет уничтожен. Я хочу сохранить это в сцене, поэтому мне нужно как-то использовать узлы. На данный момент нет необходимости хранить данные.
Итак, вы знаете способ сделать эквивалент в Maya типичного класса ООП? Я не нашел ни одного примера в devkit или документации.
class Foo : public MPxNode
{
public:
Foo () {};
virtual ~Foo () {};
virtual MStatus compute(const MPlug& plug, MDataBlock& data);
static void* creator();
static MStatus initialize();
static MObject inputMesh;
static MTypeId id;
// I want to keep it alive through the scene.
// static ClassBar myBarObject; // How can I do this??
// barFunction(...); // use ClassBar myBarObj
};
MObject Foo::inputMesh;
MTypeId Foo::id( 0x80000 );
//ClassBar Foo::myBarObj; // ????
большое спасибо
Нет, у вас нет возможности создать узел Maya с точки зрения чистого ООП и извлечь его из того, что когда-либо было в наших библиотеках. Maya MPxNode — это прокси-класс, который инкапсулирует логику внутреннего узла Maya. Однако, когда вы реализуете пользовательский узел, вы описываете, какими должны быть атрибуты, чтобы Maya могла работать с вашими данными и создавать соединения в DG. Способ установить и обработать атрибут зависит от вас. Вам нужно будет добавить свою собственную логику в метод computer (), когда Maya запросит значение атрибута для повторного вычисления.
Для получения дополнительной информации об интеграции пользовательских узлов и библиотек см. Опубликованные там статьи.
http://around-the-corner.typepad.com/