Плагин Maya не выводится из консоли

У меня проблема с примером командного плагина от Maya 2013 API Код для плагина был разбит на файлы .h и .cpp для ясности, но в остальном должен быть корректным.

pluginCmd.h:

// Include the needed headers.
#include <stdio.h>
#include <maya/MString.h>
#include <maya/MArgList.h>
#include <maya/MFnPlugin.h>
#include <maya/MPxCommand.h>
#include <maya/MIOStream.h>

// Class to represent our command.
class commandExample : public MPxCommand
{
public:
commandExample();
virtual ~commandExample();
MStatus doIt( const MArgList& );
MStatus redoIt();
MStatus undoIt();
bool isUndoable() const;
static void* creator();
};

pluginCmd.cpp:

 // Include the header for the file.
#include "pluginCmd.h"
// Constructor for the command object.
commandExample::commandExample() {
cout << "In commandExample::commandExample()\n";
}
// Destructor for the command object.
commandExample::~commandExample() {
cout << "In commandExample::~commandExample()\n";
}
// The actual command/work to be performed.
MStatus commandExample::doIt( const MArgList& ) {
cout << "In commandExample::doIt()\n";
return MS::kSuccess;
}

// The creator is called when the command is invoked and sets up the command object.
void* commandExample::creator() {
cout << "In commandExample::creator()\n";
return new commandExample();
}

// Gets called when the plugin is loaded into Maya.
MStatus initializePlugin( MObject obj ) {
// Set plugin registration info: Author, plugin-version and Maya version needed.
MFnPlugin plugin( obj, "Martin Jørgensen", "1.0", "Any" );
plugin.registerCommand( "commandExample", commandExample::creator );

// Print to show plugin command was registered.
cout << "In initializePlugin()\n";

return MS::kSuccess;
}
// Gets called when the plugin is unloaded from Maya.
MStatus uninitializePlugin( MObject obj )
{
MFnPlugin plugin( obj );
plugin.deregisterCommand( "commandExample" );

// Print to show the plugin was unloaded.
cout << "In uninitializePlugin()\n";
return MS::kSuccess;
}

Он успешно скомпилирован в Windows 7 x64 Visual Studio 12 с библиотеками Maya 2013 x64.
Когда он загружается в диспетчер плагинов, происходит уведомление (он должен напечатать статус инициализации). Но когда он выгружен, появляется инициализированная печать. Кто-нибудь знает, почему это так?

1

Решение

У меня такая же проблема при написании плагина с использованием Visual Studio 2015 и Maya 2016 x64.

Предлагаемый обходной путь

cout << "Something out" << endl;

кажется, больше не работает.

Я понял, что вещи написаны для cerr действительно отображается в окне вывода Maya.

В качестве временного решения я перенаправил cout в cerr:

cout.rdbuf(cerr.rdbuf());

Не идеально, но, по крайней мере, мы увидим результат …

5

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

Пробовал с помощью:

 cout << "Something out" << endl;

как предложил PeterT в комментарии, который работает.

В качестве бонуса я понял, что он не «зависал» при вызове команды, потому что объект команды все еще был активен в истории отмен / повторов. Это была ошибка в моей способности понять работу Майи.

1

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