Опрос
Что такое, по вашему мнению, «демократия»?
Функция compute
| Индекс материала |
|---|
| Функция compute |
| Страница 2 |
Функция compute представляет собой тот фрагмент кода, где на основе входных атрибутов рассчитывается выходная информация. Функция compute принимает ссылку на объект MDataBlock, который используется для извлечения и установки атрибутов разных узлов. Чрезвычайно важна, чтобы для получения всей информации, необходимой узлу для расчета выходных значений, применялся исключительно MDataBlock. В ходе вычислений вы не должны использовать никакие данные, взятые из источников за пределами этого объекта.
Также чрезвычайно важно, чтобы в теле функции compute не вызывались команды языка MEL setAttr и getAttr. Обе команды могут стать косвенной причиной вычислений над графом DG. Если во время этих вычислений будет явно или неявно запрошено значение того же самого подключения, это приведет к образованию бесконечного цикла. Рассмотрим следующий пример.
Даже не отличаясь особой ясностью, он наделе демонстрирует опасность применения getAttr в тексте функции compute. Мы создадим экземпляр класса MyNode с именем myNodel. Предположим, что узел имеет два атрибута: scores - массив результатов игрока, а также average - его средний результат. В случае запроса атрибута average узел должен вычислить это значение.
Выполнение MGlobal: :executeCommand в вызванной функции compute порождает бесконечный цикл. MStatus MyNode::compute( const MPlug& plug, MDataBlock& data ) { MStatus stat; if( plug == avgAttr ) { MArrayDataHandle scoresHnd = data. inputArrayValue( scoresAttr ); MDataHandle avgHnd = data. outputValue( avgAttr ); MGlobal::executeCommand( "getAttr myNodel.
Поиск
В закладку
Авторизация
Погода


