Вычислительный мирMatrix в Maya API

0

У меня проблема с моим настраиваемым DG Node. Я использую API майя в C++.

Вот следующая настройка:

  • У меня есть атрибут inputWorldMatrix
  • У меня есть атрибуты outputTranslationX, Y и Z

Теперь моя цель - создать такой же эффект, как и разложитьMatrix

Я подключаю worldMatrix преобразования (objA) в свой входнойWorldMatrix attr моего CustomNode и подключаю его outputTranslationX, Y, Z в другое преобразование (objB) tx, ty, tz attr.

Проблема в том, что после того, как я сделал все соединения, узел преобразования objB никак не затронут. В моей вычислительной функции, когда я cout << translation.x << endl; он показывает мне, что он становится грязным (что он должен) и что это значение не меняется.

Мой вопрос: где проблема?

Вот код вычислительной функции:

MStatus WorldMatrix :: compute (const MPlug & plug, MDataBlock & data) {

MStatus status;

if((plug == aOutTranslationX) || (plug == aOutTranslationY) || (plug == aOutTranslationZ))
{
    //get worldMatrix dataHandle
    MDataHandle hInputMatrix = data.inputValue(aWorldMatrix, &status);
    CHECK_MSTATUS_AND_RETURN_IT(status);   

    //get the worldMatrix and the translation
    MMatrix mInputMatrix = hInputMatrix.asMatrix();       
    MTransformationMatrix mTransMat(mInputMatrix);
    MVector translation = mTransMat.getTranslation(MSpace::kWorld);

    cout << translation.x << translation.y << translation. z << endl;    

    //get outMatrixX data
    MDataHandle hOutMatrixX = data.outputValue(aOutTranslationX, &status);
    CHECK_MSTATUS_AND_RETURN_IT(status);

    //get outMatrixY data
    MDataHandle hOutMatrixY = data.outputValue(aOutTranslationY, &status);
    CHECK_MSTATUS_AND_RETURN_IT(status);

    //get outMatrixZ data
    MDataHandle hOutMatrixZ = data.outputValue(aOutTranslationZ, &status);
    CHECK_MSTATUS_AND_RETURN_IT(status);

    float outX = translation.x;//do some compute stuff
    float outY = translation.y;//do some compute stuff 
    float outZ = translation.z;//do some compute stuff

    //set outMatrixX with outX value
    hOutMatrixX.setFloat(outX);

    //set outMatrixY with outY value
    hOutMatrixY.setFloat(outY);

    //set outMatrixZ with outZ value
    hOutMatrixZ.setFloat(outZ);

    data.setClean(plug);
    return MS::kSuccess;
}
else
{
    return MS::kUnknownParameter;
}

}

Атрибут my aWorldMatrix создается атрибутом MFnMatrixAttribute и устанавливается как функция MFnMatrixAttribute :: kFloat в функции инициализации

И, конечно же, это влияет на атрибуты OutputTranslationX, Y, Z. Думаю, мне также нужно преобразовать вектор в float (для setFloat), но не знаю, как это сделать. Было бы здорово, если бы кто-нибудь мог мне помочь. Заранее спасибо!!

Cheerio turkish engineer

Теги:
matrix
maya

1 ответ

1

Это обычная майя, которая не загрязняет вещи. Но скорее уведомить майю, что вычисление может потребоваться. Если в сцене, которая находится последним в строке, нет элемента, или элемента графического интерфейса, которому требуется значение, то Maya просто не вычислит это для вас. Таким образом, проблема не в вычислении, она находится в сцене или влияет на сеть.

Поэтому подключите вывод, если ваш штекер к чему-то вроде преобразования, которое имеет формы как дети и т.д. * И вы увидите реакцию Майи. Майя просто оптимизирует вас как лишнюю. Если это не работает, ваш атрибут влияет неправильно.

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

Таким образом, код, который вы дали, не может использоваться для отладки ситуации, поэтому большинство пользователей SO просто игнорируют вас.

 * No it is not enough to connect to a node. The node needs to be one 
   that updates the graphics state somehow.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню