3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> MEL для начинающих, знатаки атвечают
__A.D.I.D.A.S.__
сообщение 08/10/2011, 21:18
Сообщение #16


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 103
Регистрация: 25/09/2010
Из: Могилёв
Пользователь №: 80 693



Народ плиз объясните . Почему например в этом коде (
Код
[b]if( `obgExists Sphere` ){ действие; }[/b]
)необязательно писать "==1" . Никак в толк не возьму . Вроде или у Цыпцына или еще где то читал по этому поводу , но что и где уже непомню .
P.S. Предыдущий вопрос тоже в силе .
Go to the top of the page
 
+Quote Post
__A.D.I.D.A.S.__
сообщение 16/10/2011, 15:44
Сообщение #17


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 103
Регистрация: 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 .
Go to the top of the page
 
+Quote Post
FierceTerrity
сообщение 16/10/2011, 19:54
Сообщение #18


Советчик
Иконка группы

Группа: Пользователи
Сообщений: 91
Регистрация: 28/03/2010
Пользователь №: 77 536



Цитата(__A.D.I.D.A.S.__ @ 08/10/2011, 22:18) *
Народ плиз объясните . Почему например в этом коде (
Код
[b]if( `obgExists Sphere` ){ действие; }[/b]
)необязательно писать "==1" . Никак в толк не возьму . Вроде или у Цыпцына или еще где то читал по этому поводу , но что и где уже непомню .
P.S. Предыдущий вопрос тоже в силе .

Хоть и не знаю сильно mel, но суть такова
obgExists возвращает значение 1 если объект, указанный в качестве аргумента функции - существует и 0 если нет.

А вообще почитай про возвращаемое значение функции. ( на примере любого языка программирования)

Сообщение отредактировал FierceTerrity - 16/10/2011, 19:55
Go to the top of the page
 
+Quote Post
FierceTerrity
сообщение 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
Go to the top of the page
 
+Quote Post
__A.D.I.D.A.S.__
сообщение 17/10/2011, 23:50
Сообщение #20


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 103
Регистрация: 25/09/2010
Из: Могилёв
Пользователь №: 80 693



FierceTerrity в принципе суть улавил спасибо .
Остался один вопрос . Не могу понять почему не работает код :
CODE
play ;
$time = `currentTime -q ` ;
if ( $time == 96 )
{
play -st 0 ;
currentTime 1 ;
}

Тоесть у меня проигрываеться анимация , но в нужный момент не останавливаеться а повторяеться по кругу .
P.S. Вставил код в експрешн эдитор . Всё работает . Получаеться Maya не проверяет значение переменной при воспроизведении ? Как тогда правильно написать ?
Сори за павтор , просто интересно как заставить скрипт проверять значение во время воспроизведения анимации .
Go to the top of the page
 
+Quote Post
FierceTerrity
сообщение 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
Go to the top of the page
 
+Quote Post
__A.D.I.D.A.S.__
сообщение 18/10/2011, 17:26
Сообщение #22


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 103
Регистрация: 25/09/2010
Из: Могилёв
Пользователь №: 80 693



В общем так .
play - просто запускает всю имеющуюся анимацию в сцене . А -st ( -state ) это ссостояние команды если 1 то анимация проигрываеться , если 0 то останавливаеться . Можно запихнуть команду в переменную ( $qwerty = ` play -q -st ` ; ) и в зависимости от того проигрываеться анимации или нет , по требованию выдаёться 1 или 0 .
currentTime - показывает текущее время . А флаг -q ( -query ) это режим проверки .
Я хотел ( хочу ) запустить анимацию , после чего она сама бы остановилась после 96 кадра . Когда я кидал свой код в экспрешн эдитр то он выполнялся без проблем т.к. экспрешн выполняеться в каждом кадре анимации . А вот в виде скрипта код работать не хочет . Я мелом более менее серьёзно занялся лиш недавно , поэтому незнаю , может такой код правельнее писать в виде экспрешена . А в виде скрипта это может и глупость . Просто не заработало , решил разобраться .
Go to the top of the page
 
+Quote Post
DmitryAuto
сообщение 19/01/2012, 13:20
Сообщение #23


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 2
Регистрация: 19/01/2012
Пользователь №: 85 173



Подскажите как реализовать в скрипте возможность объединения кривых, так же как это сделано в CorelDraw.
MEL только начал изучать и пока ни как не могу найти решение.
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
svv3d
сообщение 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
Go to the top of the page
 
+Quote Post
DmitryAuto
сообщение 19/01/2012, 21:00
Сообщение #25


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 2
Регистрация: 19/01/2012
Пользователь №: 85 173



Цитата(svv3d @ 19/01/2012, 17:49) *
последовательность телодвижений
1. Выделяем кривые
2. вызываем Cut Curve
3. Удаляем ненужные части
4. проверяем чтобы оставшиеся части кривых имели правильное направление, т.е. конец предыдущей кривой приходил в начало следующей, в противном случае, меняем направление у неправильной
5. Последовательно соединяем все куски, при необходимости "закрываем" кривую..
Если сама процедура многоразовая, то просто MEL тут непоможет....

Для сложных кривых это обычно делается в иллюстраторе или кореле и через *.ai выталкивается в MAYA....


Последовательность ясна. Но вся головоломка в том что нужно соединить так большое колличество разных объектов. Corel просто не справляется с таким объемом обрабатываемой информации и вылетает.
1. Выделить кривые можно это не проблема
2. Сut Curve тоже исполнимо
3. ????? а вот тут ступор. Как описать в скрипте (именно в скрипте, в ручную обработать отдельно 40 000 объектов не реально) какие остатки от Сut Curve удалять а какие соединять?

Нужно что то типа Boolean, только для кривых. Если кто то знает алгоритм работы Boolean с объектами, опешите его пожалуйста.
Go to the top of the page
 
+Quote Post
__A.D.I.D.A.S.__
сообщение 11/09/2012, 22:31
Сообщение #26


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 103
Регистрация: 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 ;
но оно не работает .
Go to the top of the page
 
+Quote Post
IKS2k
сообщение 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
Go to the top of the page
 
+Quote Post
__A.D.I.D.A.S.__
сообщение 12/09/2012, 20:06
Сообщение #28


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 103
Регистрация: 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;
};

Но у меня он нехочет работать если у объекта есть инстанс . Хотя я не понимаю чего майке не нравиться . Шейп один и тот же . Изменил основной объект изменились копии ... huh.gif
Go to the top of the page
 
+Quote Post
IKS2k
сообщение 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;
}
Go to the top of the page
 
+Quote Post
__A.D.I.D.A.S.__
сообщение 13/09/2012, 18:58
Сообщение #30


Бывалый
Иконка группы

Группа: Пользователи
Сообщений: 103
Регистрация: 25/09/2010
Из: Могилёв
Пользователь №: 80 693



IKS2k спасибо так работает .
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






3 страниц V  < 1 2 3 >
Fast ReplyReply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 20/09/2019 - 02:25