Повний посібник з програмування Maya
Повний посібник з програмування Maya
придатними для зберігання у блоці, вони здатні організувати ефективне звернення до пам'яті. Працюючи з інформацією, розташованої поза блоком, названі класи користуються покажчиками для розіменування відповідних даних.
У вступі згадувалося про те, що зміна одного атрибуту тягне за собою встановлення бітів змін всіх інших, залежних від шго атрибутів, включаючи вихідні з'єднання. Біт змін поширюється по всіх атрибутах, які прямо або опосередковано зачіпає атрибут, що змінився. У складній мережі навіть просте поширення ознак змін може зайняти певний час. Для скорочення цих витрат кожне підключення має прапор поширення. Якщо прапор поширення дорівнює truii, то при отриманні повідомлення, що містить біт змін, підключення встановить внутрішній біт змін і передасть повідомлення іншим підключенням. Якщо ж прапор розповсюдження дорівнює false, підключення не пересилатиме повідомлення з бітом змін далі. На практиці прапор розповсюдження не допускає передачі повідомлень із бітами змін тим підключенням, прапори яких вже мають бути встановлені. Якщо це підключення позначене як змінене, можна припустити, що воно передало це повідомлення всім іншим підключенням, на які саме впливає. Таким чином, якщо ви помітите його як змінене знову, йому не доведеться поширювати своє повідомлення знову.
У більшості ситуацій такий метод працюватиме просто чудово. Однак можливі випадки, коли підключення не має позначки «змінено», тоді як підключення, з'єднані з ним по висхіднимз'єднань, її мають. У цій ситуації їх повідомлення з бітами змін не були коректно передані до останнього підключення. Воно ніколи не буде розраховане знову, оскільки позначене як достовірне. Воно ніколи не дізнається про те, що змінено, оскільки прапор розповсюдження вхідного підключення має значення false.
Навіть якщо таке станеться, це, на щастя, можна виправити. Використовуйте команду dgdirty для встановлення всіх підключень вузла в положення "змінено" або "достовірно". Команда викличе примусове розсилання повідомлення з бітом змін всім вузлам, яких це стосується, незалежно від їх поточних налаштувань прапора поширення. dgdirty $nodeName;
Щоб позначити всі підключення як достовірні, скористайтесь наступною командою: dgdirty -clean $nodeName; 4. C++API _
Обробка наскрізного проходу
Усі нестандартні вузли прямо чи опосередковано породжені від MPxNode. г:>той вузол містить кілька атрибутів, проте найважливішим для розробника є атрибут nodeState. Він доступний через інтерфейс Maya після виконання наступних дій.
1. Виділіть вузол.
3. Розкрийте ширше елемент Node Behavior (Поведінка вузла).
4. Виберіть нове значення зі списку поряд із запрошенням Node State (Стан вузла).
На програмному рівні атрибут nodeState представлений перерахованим типом із чотирма значеннями.
* I (наскрізний прохід)
3 (внутрішньо заборонений) |
При розробці вузла вам потрібно вирішити, чи будете підтримувати стан наскрізного проходу. Насправді це визначається допустимістю поняття наскрізного проходу для вузлів вашого типу. Так, деформатори мають підтримувати цей стан. Якщо атрибут nodeState має значення «наскрізний прохід», необхідно просто передати вхіднийгеометричний об'єкт на вихід, не роблячи ніякої його деформації.
Наступний код показує, як потрібно змінити модуль SwirlDeformer, що підключається, задля підтримки цього стану вузла. Перш ніж виконувати деформацію, функція перевіряє, чи дорівнює атрибут nodeState одиниці (наскрізний прохід). Якщо так, то функція відразу ж завершується, не деформуючи геометрію. 472.
Повний посібник з програмування Maya
MStatus SwirlDeforme::deform( MDataBlock& block, MltGeometry iiter, const MMatrlx &localToWorld,
unsigned int geomlndtix )
MDataHandle stateHnd = data.inputValue( state ); int state = stateHnd.aslnt(); if( state = 1) // Наскрізний прохід return HS:: kSuccess;
MDataHandle envData = block.inputValue(envelope); float env = envData.asFloat();
Циклічні залежності можуть виникати, коли вихід одного вузла надходить на вхід іншого, а потім передається на вхід першого. Між двома вузлами можуть бути інші проміжні вузли, проте найважливіша властивість залежності полягає в тому, що вийшовши з першого вузла і почавши обхід його вихідних з'єднань, ви зрештою повернетеся в цей вузол. Попередня 157 158 159 160 161 162 .. 178 >> Наступна