Maya API - Получить сетку из материала - PullRequest
0 голосов
/ 22 марта 2019

В настоящее время я работаю над пользовательским плагином для Mayport. В данный момент я пытаюсь разобрать материалы из Maya в моих собственных материалах каркаса.

Я создал обратный вызов, который вызывается при добавлении шейдера Ламберта (см. Фрагмент кода ниже). Я чувствую, что этот обратный вызов вызывается еще до инициализации (просто) добавленного шейдера Ламберта, но это не относится к делу.

MCallbackId lambert_added_id = MDGMessage::addNodeAddedCallback(
    LambertAddedCallback,  // The callback function
    "lambert", // The type of object that triggers the callback
    m_material_parser.get(), // Client data
    &status // Return status
);

Статус возврата MStatus::kSuccess. Всякий раз, когда я добавляю шейдер Ламберта, этот обратный вызов срабатывает.

Хотя мой вопрос ... Как мне получить узел сетки, к которому добавлен этот материал? Я пытался получить соединения шейдера Ламберта, но их нет (см. Фрагмент кода ниже).

void LambertAddedCallback(MObject& node, void* client_data)
{
    assert(node.apiType() == MFn::Type::kLambert);

    MFnLambertShader fn_lambert(node);

    MGlobal::displayInfo(node.apiTypeStr() + MString(" added!"));

    {
        MString str = fn_lambert.parentNamespace();
        MGlobal::displayInfo((str + " = parentNameSpace").asChar());
    }

    {
        MPlugArray plug_array;
        fn_lambert.getConnections(plug_array);
        auto num = plug_array.length();
        MGlobal::displayInfo("Pluggies: ");
        for (int i = 0; i < plug_array.length(); ++i)
        {
            MGlobal::displayInfo(plug_array[i].name().asChar());
        }
    }
}

Печатает обратный вызов:

 = parentNamespace

Ничего другого не напечатано, что означает, что parentNamespace и нет подключенных к нему штекеров ..? Я знаю, что когда вы добавляете шейдер Ламберта в сетку, он применяется как поверхностный шейдер в группе шейдеров, но я не могу найти это отношение в обратном вызове.

Итак, мой вопрос к вам: могу ли я получить сетку, с которой (и как) связан этот шейдер Ламберта?

...