MEL для начинающих, знатаки атвечают |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
MEL для начинающих, знатаки атвечают |
08/10/2011, 21:18
Сообщение
#16
|
|
Бывалый Группа: Пользователи Сообщений: 104 Регистрация: 25/09/2010 Из: Могилёв Пользователь №: 80 693 |
Народ плиз объясните . Почему например в этом коде (
Код [b]if( `obgExists Sphere` ){ действие; }[/b] )необязательно писать "==1" . Никак в толк не возьму . Вроде или у Цыпцына или еще где то читал по этому поводу , но что и где уже непомню .P.S. Предыдущий вопрос тоже в силе . |
|
|
16/10/2011, 15:44
Сообщение
#17
|
|
Бывалый Группа: Пользователи Сообщений: 104 Регистрация: 25/09/2010 Из: Могилёв Пользователь №: 80 693 |
Ковыряю понемногу книгу Гоулда . Дошёл пока до анимации . Не могу понять почему не работает код :
CODE play ; $time = `currentTime -q ` ; if ( $time == 96 ) { play -st 0 ; currentTime 1 ; } Тоесть у меня проигрываеться анимация , но в нужный момент не останавливаеться а повторяеться по кругу . P.S. Вставил код в експрешн эдитор . Всё работает . Получаеться Maya не проверяет значение переменной при воспроизведении ? Как тогда правильно написать ? Ещё вопрос . Для закрепления пройденного придумал такой вот наивный скрипт : CODE float$value[] = `keyframe -q -vc Sphere_translateY` ; for ( $ind in $value ) { if ( $ind > 0 ) $ind = $ind + 1 ; else $ind = $ind + 1.5 ; print ( $ind + " " ) ; } Скрипт выполняеться нормально , print пишет изменённые значения у ключей . Однако в граф едиторе всё без изминений и сама анимация не меняеться . Почему ? Начальные значения ключей переодически меняються с -2.5 по 2.5 . |
|
|
16/10/2011, 19:54
Сообщение
#18
|
|
Советчик Группа: Пользователи Сообщений: 91 Регистрация: 28/03/2010 Пользователь №: 77 536 |
Народ плиз объясните . Почему например в этом коде ( Код [b]if( `obgExists Sphere` ){ действие; }[/b] )необязательно писать "==1" . Никак в толк не возьму . Вроде или у Цыпцына или еще где то читал по этому поводу , но что и где уже непомню .P.S. Предыдущий вопрос тоже в силе . Хоть и не знаю сильно mel, но суть такова obgExists возвращает значение 1 если объект, указанный в качестве аргумента функции - существует и 0 если нет. А вообще почитай про возвращаемое значение функции. ( на примере любого языка программирования) Сообщение отредактировал FierceTerrity - 16/10/2011, 19:55 |
|
|
16/10/2011, 20:55
Сообщение
#19
|
|
Советчик Группа: Пользователи Сообщений: 91 Регистрация: 28/03/2010 Пользователь №: 77 536 |
upd.
Представь что функция obgExists выглядит так. (утрировано) obgExists(char object) { if(проверка существования обьекта (каким методом - не знаю)) { param pam pam; param pam pam; return true; *(return 1) - объект существует,возвращаем 1. } else { param pam pam; param pam pam; return false; *(return 0) - объект не существует,возвращаем 0. } } Сообщение отредактировал FierceTerrity - 16/10/2011, 21:01 |
|
|
17/10/2011, 23:50
Сообщение
#20
|
|
Бывалый Группа: Пользователи Сообщений: 104 Регистрация: 25/09/2010 Из: Могилёв Пользователь №: 80 693 |
FierceTerrity в принципе суть улавил спасибо .
Остался один вопрос . Не могу понять почему не работает код : CODE play ; $time = `currentTime -q ` ; if ( $time == 96 ) { play -st 0 ; currentTime 1 ; } Тоесть у меня проигрываеться анимация , но в нужный момент не останавливаеться а повторяеться по кругу . P.S. Вставил код в експрешн эдитор . Всё работает . Получаеться Maya не проверяет значение переменной при воспроизведении ? Как тогда правильно написать ? Сори за павтор , просто интересно как заставить скрипт проверять значение во время воспроизведения анимации . |
|
|
18/10/2011, 07:23
Сообщение
#21
|
|
Советчик Группа: Пользователи Сообщений: 91 Регистрация: 28/03/2010 Пользователь №: 77 536 |
Если это весь код, то он у тебя проверяться будет всего 1 раз. (если конечно майка сама не будет зацикливать скрипт (хотя я в этом сильно сомневаюсь))
Тебе все это нужно запихнуть в цикл, и каждый кадр/секунду проверять значение. Код play; $proverka = '1'; while($proverka == true) { $time = `currentTime -q `; if ( $time == 96 ) { play -st 0; currentTime 1; $proverka = 'FALSE'; } } И мне кажется ты не совсем правильно останавливаешь анимацию чего-либо. (правда сам не знаю синтаксиса MEL) Распиши поконкретнее какая задача перед тобой стоит. Я прост не знаю нужно ли тебе остановить всю анимацию или какого-то объекта в отдельности. Отпиши что делают команды: play -st 0 ;currentTime -q (интересуют ключи) з.ы. советую потом вставить задержку равную кадру/секунде/минуте , ибо этот цикл будет в секунду проверят много раз, что нецелесообразно с точки зрения поедания ресурсов. Сообщение отредактировал FierceTerrity - 18/10/2011, 07:25 |
|
|
18/10/2011, 17:26
Сообщение
#22
|
|
Бывалый Группа: Пользователи Сообщений: 104 Регистрация: 25/09/2010 Из: Могилёв Пользователь №: 80 693 |
В общем так .
play - просто запускает всю имеющуюся анимацию в сцене . А -st ( -state ) это ссостояние команды если 1 то анимация проигрываеться , если 0 то останавливаеться . Можно запихнуть команду в переменную ( $qwerty = ` play -q -st ` ; ) и в зависимости от того проигрываеться анимации или нет , по требованию выдаёться 1 или 0 . currentTime - показывает текущее время . А флаг -q ( -query ) это режим проверки . Я хотел ( хочу ) запустить анимацию , после чего она сама бы остановилась после 96 кадра . Когда я кидал свой код в экспрешн эдитр то он выполнялся без проблем т.к. экспрешн выполняеться в каждом кадре анимации . А вот в виде скрипта код работать не хочет . Я мелом более менее серьёзно занялся лиш недавно , поэтому незнаю , может такой код правельнее писать в виде экспрешена . А в виде скрипта это может и глупость . Просто не заработало , решил разобраться . |
|
|
19/01/2012, 13:20
Сообщение
#23
|
|
Новичок Группа: Пользователи Сообщений: 2 Регистрация: 19/01/2012 Пользователь №: 85 173 |
Подскажите как реализовать в скрипте возможность объединения кривых, так же как это сделано в CorelDraw.
MEL только начал изучать и пока ни как не могу найти решение.
Прикрепленные изображения
|
|
|
19/01/2012, 15:49
Сообщение
#24
|
|
Рыцарь форума Группа: Пользователи Сообщений: 2 473 Регистрация: 12/07/2002 Из: Днепропетровск Пользователь №: 326 |
последовательность телодвижений
1. Выделяем кривые 2. вызываем Cut Curve 3. Удаляем ненужные части 4. проверяем чтобы оставшиеся части кривых имели правильное направление, т.е. конец предыдущей кривой приходил в начало следующей, в противном случае, меняем направление у неправильной 5. Последовательно соединяем все куски, при необходимости "закрываем" кривую.. Если сама процедура многоразовая, то просто MEL тут непоможет.... Для сложных кривых это обычно делается в иллюстраторе или кореле и через *.ai выталкивается в MAYA.... Сообщение отредактировал svv3d - 19/01/2012, 15:54 |
|
|
19/01/2012, 21:00
Сообщение
#25
|
|
Новичок Группа: Пользователи Сообщений: 2 Регистрация: 19/01/2012 Пользователь №: 85 173 |
последовательность телодвижений 1. Выделяем кривые 2. вызываем Cut Curve 3. Удаляем ненужные части 4. проверяем чтобы оставшиеся части кривых имели правильное направление, т.е. конец предыдущей кривой приходил в начало следующей, в противном случае, меняем направление у неправильной 5. Последовательно соединяем все куски, при необходимости "закрываем" кривую.. Если сама процедура многоразовая, то просто MEL тут непоможет.... Для сложных кривых это обычно делается в иллюстраторе или кореле и через *.ai выталкивается в MAYA.... Последовательность ясна. Но вся головоломка в том что нужно соединить так большое колличество разных объектов. Corel просто не справляется с таким объемом обрабатываемой информации и вылетает. 1. Выделить кривые можно это не проблема 2. Сut Curve тоже исполнимо 3. ????? а вот тут ступор. Как описать в скрипте (именно в скрипте, в ручную обработать отдельно 40 000 объектов не реально) какие остатки от Сut Curve удалять а какие соединять? Нужно что то типа Boolean, только для кривых. Если кто то знает алгоритм работы Boolean с объектами, опешите его пожалуйста. |
|
|
11/09/2012, 22:31
Сообщение
#26
|
|
Бывалый Группа: Пользователи Сообщений: 104 Регистрация: 25/09/2010 Из: Могилёв Пользователь №: 80 693 |
Подсмотрел где то MEL команду
displaySurface -xRay 1 которая переводит выделенный обьект в режим xRay . Хочу повесить на клавишу переключение типа если отображение норм сделать xRay и наоборот , если отображение xRay сделать норм . Как это реализовать в виде скрипта ? Я пробовал что то типа такого : if ( displaySurface -xRay 0 ) displaySurface -xRay 1 ; else ( displaySurface -xRay 1 ) displaySurface -xRay 0 ; но оно не работает . |
|
|
12/09/2012, 09:40
Сообщение
#27
|
|
Президент Афро-Азиатской-Евро-Австралии Группа: Пользователи Сообщений: 275 Регистрация: 10/04/2006 Из: Севастополь Пользователь №: 29 811 |
попробуй так(для одного выделенного объекта):
CODE { int $xray[] = `displaySurface -q -xRay`; if($xray[0]){ displaySurface -xRay 0; }else{ displaySurface -xRay 1; } } Если надо для всех выделенных(по первому): CODE {
string $array[] = `ls -sl`; int $xray[] = `displaySurface -q -xRay $array[0]`; if($xray[0]){ displaySurface -xRay 0; }else{ displaySurface -xRay 1; } } Сообщение отредактировал IKS2k - 12/09/2012, 10:01 |
|
|
12/09/2012, 20:06
Сообщение
#28
|
|
Бывалый Группа: Пользователи Сообщений: 104 Регистрация: 25/09/2010 Из: Могилёв Пользователь №: 80 693 |
IKS2k спасибо большое . На рендере предложили такой вот код
CODE string $sel[] = `ls -sl -ap -dag -type surfaceShape`; for ($obj in $sel) { $xRayStatus = `displaySurface -q -xRay $obj`; displaySurface -xRay (!$xRayStatus[0]) $obj; }; Но у меня он нехочет работать если у объекта есть инстанс . Хотя я не понимаю чего майке не нравиться . Шейп один и тот же . Изменил основной объект изменились копии ... |
|
|
13/09/2012, 00:28
Сообщение
#29
|
|
Президент Афро-Азиатской-Евро-Австралии Группа: Пользователи Сообщений: 275 Регистрация: 10/04/2006 Из: Севастополь Пользователь №: 29 811 |
Вуаля.... ?!
CODE string $sel[] = `ls -sl -dag -type surfaceShape`;
for ($obj in $sel) { $xRayStatus = `displaySurface -q -xRay $obj`; displaySurface -xRay (!$xRayStatus[0]) $obj; } |
|
|
13/09/2012, 18:58
Сообщение
#30
|
|
Бывалый Группа: Пользователи Сообщений: 104 Регистрация: 25/09/2010 Из: Могилёв Пользователь №: 80 693 |
IKS2k спасибо так работает .
|
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 19/04/2024 - 22:52 |