Скелетная анимация и экспорт из Maya 4.0. (2 стр)
Автор: Aidan
Экспорт данных из Maya
Plug-in строится на основе класса, порожденного от одного из классов Maya SDK. Это может быть класс трансляторов (экспорт/импорт), класс команда (добавить свою команду в MEL), класс подчинённых узлов - "dependency node" (всевозможные шейдеры, процедурные текстуры, примитивы). Нам необходим экспорт, поэтому будем использовать класс MPxFileTranslator.
Оформляется plug-in как стандартный DLL-файл, но с расширением mll.
Вот пример класса экспорта (что именно он экспортит - не важно)
class MAnimationExport : public MPxFileTranslator { public: // конструктор и деструктор MAnimationExport() {}; virtual ~MAnimationExport( ) {}; // эта функция перегружаема для Maya // после загрузки plug-in'а Maya вызовет ее для создания // объекта plug-in'а. Эта функция необходима для всех вариаций // plug-in'ов под Maya static void *creator( ); // для файловых трансляторов необходимы методы чтения и записи, // однако импорт нам не нужен, поэтому объявляем только экспорт MStatus writer( const MFileObject& file, const MString& optionsString, MPxFileTranslator::FileAccessMode mode); // следующие функции выполняют роль флагов для Maya // их стоит переопределить под свой транслятор bool haveReadMethod( ) const {return false;} // нет метода для импорта bool haveWriteMethod( ) const {return true;} // есть метод для экспорта bool canBeOpened( ) const {return false;} // можно ли открыть файл // расширение наших файлов по умолчанию // в принципе сюда можно написать что-угодно, а потом при создании файлов // делать свое расширение, как это в сделано примере MString defaultExtension( ) const {return "anm";} // определить, что транслятор файлов может работать с файлами данного типа // по-моему этот метод необходим только если есть импорт // но на всякий случай оставляю MFileKind identifyFile( const MFileObject& fileName, const char *buffer, short size) const; };
Итак, необходимо определить 3 функции: creator, writer identifyFile.
Простейшая функция :) - создать объект этого же класса и вернуть указатель на него
void* MAnimationExport::creator() { return new MAnimationExport; }
Запись данных в файл тоже не немного сложнее