Render.ru

вопросы по MEL

JazzzDima

Знаток
Рейтинг
36
#1
вопрос такой, делаю окно со слайдером и кнопкой, по нажатию на кнопку мне нужно взять значение со слайдера и присвоить его переменной. как это сделать?

......
attrFieldSliderGrp -l "Max" -min -10.0 -max 10.0;

//нажатие на кнопку
......
float $noiseMin=как взять текущее значение?;
......
 

О С (VirtualV)

Активный участник
Рейтинг
5
#4
Вобще attrFieldSliderGrp используетсья для привязки к конкретному артибуту например attrFieldSliderGrp -l "radius" -at "pSphere.tx";
для твоих целей лучше использовать floatSliderGrp или IntSliderGrp.

floatdSliderGrp -l "Max" -min -10.0 -max 10.0 NAME;
float $noiseMin = `attrFieldSliderGrp -q -v NAME`;
 
Рейтинг
34
#6
Ламерский вопрос . Хотел создать маркин менюшку где была бы команда которая перемещает пивот выбранного объекта в начало координат . Скрипт эдитор пишет примерни следующее move -1.25 0 0 curve1.scalePivot curve1.rotatePivot ; . Как заменить имя объекта на "любой выделенный объект" ?
 

О С (VirtualV)

Активный участник
Рейтинг
5
#7
string $sel[] = `ls -sl`;
move -1.25 0 0 ($sel[0]+".scalePivot") ($sel[0]+".rotatePivot");

это будет работать только для 1вого выделенного объекта, если надо для всех тогда:

string $s, $sel[] = `ls -sl`;
for ($s in $sel)
move -1.25 0 0 ($s +".scalePivot") ($s +".rotatePivot");
 

VARVAR13

Активный участник
Рейтинг
8
#8
Ламерский вопрос . Хотел создать маркин менюшку где была бы команда которая перемещает пивот выбранного объекта в начало координат . Скрипт эдитор пишет примерни следующее move -1.25 0 0 curve1.scalePivot curve1.rotatePivot ; . Как заменить имя объекта на "любой выделенный объект" ?
а может в начало координат должно быть move 0 0 0 ??
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#9
В своем скрипте просто убираете имя объекта, оставляете только атрибут, например, .scalePivot.
 
Рейтинг
34
#10
Решил взяться за MEL более серьёзно чем один раз прочитать главу книги у Цыпцына .
Не могу взять в толк где у когда нужно ставить скобки , кавычки и прочие вещи . Напрягает немного когда что то придумал на MEL , а сделать не можеш из-за того что где то например скобки не стоят . У Цыпцына по этому поводу только самую малость .
Например вот кусок кода
if( objExists ( "myCurve" )==1)
{
delete"myCurve" ;
}

Почему myCurve в первом случае взято и в кавычки и в скобки а во втором только в кавычки ?
 

О С (VirtualV)

Активный участник
Рейтинг
5
#11
если решил заняться mel, рекомендую почитать Maya_Дэвид А.Д. Гоулд Maya Полное руководство по программированию, там всё описано. расскажу в крации:
скобки обычно ставятся для объявления блока видимости, обычно это после операторов (if, циклов и тд.), но впринципе можно ставить в любом месте, если после оператора идет лишь одна строка кода то скобки необязательны.
например:
for ($i=0; $i<10; $i++)
print ($i);
или
for ($i=0; $i<10; $i++)
{
print ($i);
}
одно и тоже, но первая запись короче и понятней.
запись же, после оператора идет несколько операций которые нужно выполнить то тут скобки обязятельны

if( objExists ( "myCurve" )==1) взято в скобки из-за приоритета операций, имя "myCurve" должно быть сперва присвоено функции objExists которая выдает результат и сравнивает его с единицей.

delete"myCurve", "myCurve" это имя, тобиш строка, строка берется в кавычки если не объявлена как переменная.
 

sanctus

Активный участник
Рейтинг
15
#12
если кода не много в блоке, то можно и без фигурных скобок, и на той же самой строке
лишь бы читабельность не пропала

и еще, для получения результата команды чаще используют вот такие кавычки: ` `


Код:
if( `objExists "persp"` ==1) print "persp"
через точку с запятой ; можно написать даже несколько комманд подряд

Код:
if( `objExists "persp"` ==1) print "persp"; print " exist"
и еще, когда пишете код в сообщении на форуме, помечайте его тэгом code, здесь на рендере это делается одним кликом
со временем глаза привыкают к моноширинному шрифту, и код читается намного легче.
 
Рейтинг
34
#14
Нашёл я книжку Гоулда . Книжка вроде как хорошая , правда опечаток ( и самое главное в примерах кода ) тьма .
Собственно по ней же и вопросы :
1) Автор создаёт код который открывает фаил скрипта в блокноте для его редактирования . Сам фаил лежит в папке которую автор создал сам в совершенно левом месте . А что бы майка знала где его искать в файле maya.env добавляет переменную окружения типа MAYA_SCRIPTS_PATCH=С:\ ... У меня чёт не выходит правильно создать эту переменную .
2) Что бы открыть блокнот автор пишет код
Код:
string $scriptsPath = `internalVar -userScriptDir` ;
chdir $scriptsPath ;
system ( "start notepad.exe learning.mel" ) ;
Здесь всё вроде понял , правда ника не хочет вместо блокнота открываться другой редактор ( notepad++ ) .
 

VARVAR13

Активный участник
Рейтинг
8
#16
2) Что бы открыть блокнот автор пишет код
string $scriptsPath = `internalVar -userScriptDir` ;
chdir $scriptsPath ;
system ( "start notepad.exe learning.mel" ) ;

Здесь всё вроде понял , правда ника не хочет вместо блокнота открываться другой редактор ( notepad++ ) .
в строке нужно дописать полный путь к файлу exe ( при задании пути использовать обратные косые черты )
например
Код:
system ( "start C:/Notepad/notepad_two.exe " ) ;
при этом в названии не должно быть знаков типа +, в примере папка установленного Notepad++ перемещена по указанному адресу, переименована без знаков + и переименован exe файл ... и все работает...


и по поводу опечаток в книге по адресу www.davidgould.com там вроде как есть список опечаток и исправления...
 
Рейтинг
34
#18
Народ плиз объясните . Почему например в этом коде (
Код:
[b]if( `obgExists Sphere` ){ действие ; }[/b]
)необязательно писать "==1" . Никак в толк не возьму . Вроде или у Цыпцына или еще где то читал по этому поводу , но что и где уже непомню .
P.S. Предыдущий вопрос тоже в силе .
 

sanctus

Активный участник
Рейтинг
15
#20
If это условный оператор, от слова условие.
То что находится в его скобках обычно и считают условием.
Но == и > и остальные операции сравнения это тоже операторы, которые возвращают значение 1 если правда, 0 если неправда
Попробуйте выполнить по одной эти строки:
Код:
print (10>1);
print (10==10);
print (10<1);
Поставив команду в кавычки мы не прото заставляем её выполняться, а еще и забираем результат выполнения.
Обычно это какая-нибудь полезная информация, например имя созданных объектов.
В нашем случае команда просто проверяет имеется ли объект с заданным именем, и возвращает 1 если результат положительный.

Поэтому нам результат 1 сравнивать с единицей не обязательно.
 
Сверху