Ускоряя Maya, послесловие. Скрипты для ускорения работы в Maya.
- Автор темы Дмитрий damat Астапкович
- Дата создания
В чем сложность то?
Для другого окна по аналогии.
Код:
string $focused_win = `getPanel -withFocus`;
if ($focused_win == "polyTexturePlacementPanel1") {
optionVar -intValue show_shaded_UV (!`optionVar -query show_shaded_UV`);
textureWindow -edit -displaySolidMap (`optionVar -query show_shaded_UV`) $focused_win;
}
Я, малость не это имел в виду, моя задумка заключалась сделать один скрипт, а не два. Этот скрипт должен вычислять окно в котором нахожусь и согласно типу окна делать то или иное действие.
Например, если я работаю в рабочем окне Майя, то при нажатии на кпопечку "8" включается или выключается WireframeMode, а если в текстурЭдиторе, то включается или выключается ShadedUV. Вот в этом и заключается сложность, как это всё правильно приготовить и чтобы работало.
Например, если я работаю в рабочем окне Майя, то при нажатии на кпопечку "8" включается или выключается WireframeMode, а если в текстурЭдиторе, то включается или выключается ShadedUV. Вот в этом и заключается сложность, как это всё правильно приготовить и чтобы работало.
- Рейтинг
- 14
Привет.
Правильно всё Dark подсказал. У тебя и будет один скрипт. Который в зависимости от того, какая панель активна, будет отрабатывать либо так, либо эдак.
Только я бы предложил сравнивать не название панели, а именно тип:
Узнать название типов для той или иной панели (с чем сравнивать-то) - проще простого: надо выполнить только первые 2 строчки, а потом заставить Майю вывести тип панели:
Только из скрипт эдитора это выполнить не получится - иначе Майя всегда будет возвращать его тип. Повесь этот скриптик на какой-нибудь временный хоткей - и понажимай его, располагая курсор мышки то над одной панелью, то над другой.
А ещё - мне кажется, что ты возможно путаешь окно и панель.
Правильно всё Dark подсказал. У тебя и будет один скрипт. Который в зависимости от того, какая панель активна, будет отрабатывать либо так, либо эдак.
Только я бы предложил сравнивать не название панели, а именно тип:
Код:
string $focused_panel = `getPanel -withFocus`; // получили внутреннее Майское название (уникальный идентификатор) для той панели, которая под курсором
string $type = `getPanel -typeOf $focused_panel`; // узнали, какого типа эта панель
if ($type == "modelPanel") // если тип панели - вьюпорт
{
// тут пишем код, который будет выполняться для вьюпорта
}
else if ($type "другойТипПанели") // если другой тип панели
{
// код для другого типа панели
}
else
{
// код для всех остальных случаев
}
Код:
string $focused_panel = `getPanel -withFocus`;
string $type = `getPanel -typeOf $focused_panel`;
print $type;
А ещё - мне кажется, что ты возможно путаешь окно и панель.
Вот так сделал, работает только WireframeShadedMode в основном рабочем окне, а в текстурЭдиторе, всё никак.
Код:
string $currentPanel = `getPanel -withFocus`;
string $panelType = `getPanel -typeOf $currentPanel`;
if ($panelType == "modelPanel") {
$value = !(`modelEditor -q -wireframeOnShaded $currentPanel`);
modelEditor -e -wireframeOnShaded $value $currentPanel;
}
else if ($panelType == "polyTexturePlacementPanel1") {
$value = !(`textureWindow -q -displaySolidMap $currentPanel`);
textureWindow -e -displaySolidMap $value $currentPanel;
}
- Рейтинг
- 14
- Рейтинг
- 47
Лексей, я в предыдущем сообщении как раз эту ситуацию и описывал
В твоем коде в переменную $panelType ты загоняешь не название панели, а ее тип (polyTexturePlacementPanel1 – это название панели!!!). Так вот проблема в том, что (лично у меня) корректно определяется только тип вьюпортов (modelPanel), а все остальные, (что бы там ни было: редактор материалов, Юви, и т.д.) определяется как scriptedPanel.
Таким образом, в твоей строчке кода:
Maya видит
Естественно scriptedPanel не тоже самое что polyTexturePlacementPanel1. Поэтому в текстур эдиторе ничего не происходит.
Dark же, в своем коде к переменной $focused_win присвоил название панели, а не тип (который как я писал выше, как-то не корректно определяется.)
Следовательно, в твоем коде вместо строчки
нужно вписать (лично я так делаю)
и все заработает.
Ps: Может быть более прохаванные знатоки Мела прокомментируют ситуацию с типом панелей (окон). Самому интересно в чем здесь дело.
PPs: ну вот, пока писал ответ уже было опубликовано еще одно сообщение
И кстати да, можно писать либо
либо (что скорее всего, более логично)
В твоем коде в переменную $panelType ты загоняешь не название панели, а ее тип (polyTexturePlacementPanel1 – это название панели!!!). Так вот проблема в том, что (лично у меня) корректно определяется только тип вьюпортов (modelPanel), а все остальные, (что бы там ни было: редактор материалов, Юви, и т.д.) определяется как scriptedPanel.
Таким образом, в твоей строчке кода:
Код:
else if ($panelType == "polyTexturePlacementPanel1")
Код:
else if (scriptedPanel == "polyTexturePlacementPanel1")
Dark же, в своем коде к переменной $focused_win присвоил название панели, а не тип (который как я писал выше, как-то не корректно определяется.)
Код:
string $focused_win = `getPanel -withFocus`;
if ($focused_win == "polyTexturePlacementPanel1")
Код:
else if ($panelType == "polyTexturePlacementPanel1") {
Код:
else if (`getPanel -withFocus` == "polyTexturePlacementPanel1") {
Ps: Может быть более прохаванные знатоки Мела прокомментируют ситуацию с типом панелей (окон). Самому интересно в чем здесь дело.
PPs: ну вот, пока писал ответ уже было опубликовано еще одно сообщение
И кстати да, можно писать либо
Код:
else if (`getPanel -withFocus` == "polyTexturePlacementPanel1") {
else if ($currentPanel== "polyTexturePlacementPanel1") {
- Рейтинг
- 51
Ps: Может быть более прохаванные знатоки Мела прокомментируют ситуацию с типом панелей (окон). Самому интересно в чем здесь дело.
Соответственно, остается только проверка имени scriptedPanel, как и предложил Александр. Конечно, слегка напрягает такой тупой подход, но я не припомню, чтобы названия этих панелей когда-либо менялись. Немного успокоить себя можно, если проверять не по полному имени, а по его части без цифр, т.е. через gmatch и *. Но по опыту могу сказать, что это скорее излишняя морока, так как gmatch имеет свойство рандомно приводить к ошибкам исполнения при использовании во вложенных процедурах.
PS про предыдущие вопросы помню, но пока руки совсем никак не дойдут.
Благодарствую!
Скажите пожалуйста, а как сделать вот такой тогглер:
В данном случае получается, что в текстурЭдиторе работает, а в рабочем окне не работает и понятно почему, флаг -textureSampling (int) использует значения 1 и 2.
string $currentPanel = `getPanel -withFocus`;
string $panelType = `getPanel -typeOf $currentPanel`;
if ($panelType == "modelPanel") {
$value = !(`modelEditor -q -textureSampling $currentPanel`);
modelEditor -e -textureSampling $value $currentPanel;
}
else if (`getPanel -withFocus` == "polyTexturePlacementPanel1") {
$value = !(`textureWindow -q -imageUnfiltered $currentPanel`);
textureWindow -e -imageUnfiltered $value $currentPanel;
}
Скажите пожалуйста, а как сделать вот такой тогглер:
В данном случае получается, что в текстурЭдиторе работает, а в рабочем окне не работает и понятно почему, флаг -textureSampling (int) использует значения 1 и 2.
string $currentPanel = `getPanel -withFocus`;
string $panelType = `getPanel -typeOf $currentPanel`;
if ($panelType == "modelPanel") {
$value = !(`modelEditor -q -textureSampling $currentPanel`);
modelEditor -e -textureSampling $value $currentPanel;
}
else if (`getPanel -withFocus` == "polyTexturePlacementPanel1") {
$value = !(`textureWindow -q -imageUnfiltered $currentPanel`);
textureWindow -e -imageUnfiltered $value $currentPanel;
}
- Рейтинг
- 51
Лексей, я ничего не понял. Пожалуйста, формулируй запросы/вопросы более явно: как написать тогглер, который делает вот это. Сейчас я вижу нерабочий код, по которому надо понять смысл запроса и дополнительное пояснение, почему он не работает.
Судя по всему, вопрос в том, как написать условие менять значение с 1 на 2 и наоборот?
Судя по всему, вопрос в том, как написать условие менять значение с 1 на 2 и наоборот?
- Рейтинг
- 51
А в чем вопрос-то? Код написан, единственная проблема в том, переключение через инверт значания работает только на 1 и 0. Если 1 и 2, тогда надо написать стандартный if типа такого:
Если вопрос именно в этом, то он совсем детский.
Код:
$value = `modelEditor -q -textureSampling $currentPanel`;
if ($value == 1) {
modelEditor -e -textureSampling 2 $currentPanel;
}
else {
modelEditor -e -textureSampling 1 $currentPanel;
}
Усё получилось с помощью Дмитрия, за что ему спасибо.
Код:
string $currentPanel = `getPanel -withFocus`;
string $panelType = `getPanel -typeOf $currentPanel`;
if ($panelType == "modelPanel") {
$value = `modelEditor -q -textureSampling $currentPanel`;
if ($value == 1) {
modelEditor -e -textureSampling 2 $currentPanel;
}
else {
modelEditor -e -textureSampling 1 $currentPanel;
}
}
else
if (`getPanel -withFocus` == "polyTexturePlacementPanel1") {
$value = !(`textureWindow -q -imageUnfiltered $currentPanel`);
textureWindow -e -imageUnfiltered $value $currentPanel;
};
- Рейтинг
- 14
Выходные... Ночь идёт полным ходом...
Преамбула: я в последнее время пользуюсь 3делайтом.
Если кто так же, как и я:
1. Ненавидит в Майе наличие главное меню (которое отжирает драгоценное экранное место);
2. Не любит лезть за командами в хотбокс;
3. Предпочитает всё держать на маркин-менюхах;
4. Собирается пользоваться или уже пользуется делайтом...
... то вот, пожалуйста:
https://dl.dropbox.com/u/22103610/Maya_settings/scripts/DRL/DRL_3delightMM.mel
Это скрипт, который переносит всё меню делайта на 2 маркин-менюхи: левую и среднюю кнопки мыши.
Как всегда в моих ММ, ключевые пункты выделены жирным и курсивом.
Ставим скрипт как обычно (копируем в любую папку со скриптами).
Добавляем хоткей.
В хоткее вызываем:
Аргументы у процедуры - срабатывать ли при зажатых Shift и Ctrl соответственно.
Просто я, вот, сам повесил на Shift+S. И, чтобы не конфликтовало со стандартной Майской ММ (которая нужна только в граф эдиторе), использовал в хоткее такой код:
Как видите, первый аргумент - 1, потому что хоткей - с шифтом.
Скрипт небольшой, но при работе с делайтом прям-таки необходимый.
Преамбула: я в последнее время пользуюсь 3делайтом.
Если кто так же, как и я:
1. Ненавидит в Майе наличие главное меню (которое отжирает драгоценное экранное место);
2. Не любит лезть за командами в хотбокс;
3. Предпочитает всё держать на маркин-менюхах;
4. Собирается пользоваться или уже пользуется делайтом...
... то вот, пожалуйста:
https://dl.dropbox.com/u/22103610/Maya_settings/scripts/DRL/DRL_3delightMM.mel
Это скрипт, который переносит всё меню делайта на 2 маркин-менюхи: левую и среднюю кнопки мыши.
Как всегда в моих ММ, ключевые пункты выделены жирным и курсивом.
Ставим скрипт как обычно (копируем в любую папку со скриптами).
Добавляем хоткей.
В хоткее вызываем:
Код:
DRL_3delightMM (0, 0);
Просто я, вот, сам повесил на Shift+S. И, чтобы не конфликтовало со стандартной Майской ММ (которая нужна только в граф эдиторе), использовал в хоткее такой код:
Код:
string $currentPanel = `getPanel -withFocus`;
if ($currentPanel == "graphEditor1")
buildKeyframeTangentMM;
else
DRL_3delightMM (1, 0);
Скрипт небольшой, но при работе с делайтом прям-таки необходимый.
- Рейтинг
- 137
Я тут чуток вставлю все о своих баранах... ))) Три копейки о скрипте Views и вышенаписанной проблеме с ним связанной: пораскинув мозгами, я пришел к выводу, что image plane вращается из-за того, что вращается камера, если смотреть с разных сторон (так устроен скрипт), а следовательно, никак нельзя, походу, "заморозить" позицию самой image plane, вращая в этот jе момент камеру, которая связана с данным image plan'ом, т.к. своих rotate channels у нее нет. Получается вывод, что если пользовать этот скрипт, то нуно ставить только полигональные плоскости с картинками и работать так. Фигово. :-(
- Рейтинг
- 137
Нашел простое решение. Может кому пригодится, если кто хочет использовать скрипт "Views" корректно при работе с image plan'ами. Итак: просто создаем, так сказать, второй аналог нужной камеры, на нее вешаем image plane, а сами крутим-вертим оригинальные камеры top, side и т.д. (переходим в них по хоткею). И все на месте и ничего не крутится. Красота.