1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

вопросы по MEL

Тема в разделе "Maya", создана пользователем JazzzDima, 10 дек 2010.

Модераторы: Dark™, Skif
  1. JazzzDima

    JazzzDima Знаток

    С нами с:
    01.02.2008
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    31
    вопрос такой, делаю окно со слайдером и кнопкой, по нажатию на кнопку мне нужно взять значение со слайдера и присвоить его переменной. как это сделать?

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

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

    VirtualV Активный участник

    С нами с:
    25.04.2007
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    5
    attrFieldSliderGrp -l "Max" -min -10.0 -max 10.0 NAME;
    float $noiseMin = `attrFieldSliderGrp -q -v NAME`;
     
  3. JazzzDima

    JazzzDima Знаток

    С нами с:
    01.02.2008
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    31
    -v
    у меня ругается на такой флаги:(

    // Error: Invalid flag '-v' //
     
  4. VirtualV

    VirtualV Активный участник

    С нами с:
    25.04.2007
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    5
    Вобще 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`;
     
  5. JazzzDima

    JazzzDima Знаток

    С нами с:
    01.02.2008
    Сообщения:
    100
    Симпатии:
    0
    Баллы:
    31
    спасибо тебе большое, работает:)
     
  6. A.D.I.D.A.S.

    A.D.I.D.A.S. Активный участник

    С нами с:
    04.09.2010
    Сообщения:
    274
    Симпатии:
    1
    Баллы:
    14
    Ламерский вопрос . Хотел создать маркин менюшку где была бы команда которая перемещает пивот выбранного объекта в начало координат . Скрипт эдитор пишет примерни следующее move -1.25 0 0 curve1.scalePivot curve1.rotatePivot ; . Как заменить имя объекта на "любой выделенный объект" ?
     
  7. VirtualV

    VirtualV Активный участник

    С нами с:
    25.04.2007
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    5
    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");
     
  8. VARVAR13

    VARVAR13 Активный участник

    С нами с:
    29.12.2010
    Сообщения:
    80
    Симпатии:
    3
    Баллы:
    9
    а может в начало координат должно быть move 0 0 0 ??
     
  9. Dark™ vip

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    В своем скрипте просто убираете имя объекта, оставляете только атрибут, например, .scalePivot.
     
  10. A.D.I.D.A.S.

    A.D.I.D.A.S. Активный участник

    С нами с:
    04.09.2010
    Сообщения:
    274
    Симпатии:
    1
    Баллы:
    14
    Решил взяться за MEL более серьёзно чем один раз прочитать главу книги у Цыпцына .
    Не могу взять в толк где у когда нужно ставить скобки , кавычки и прочие вещи . Напрягает немного когда что то придумал на MEL , а сделать не можеш из-за того что где то например скобки не стоят . У Цыпцына по этому поводу только самую малость .
    Например вот кусок кода
    if( objExists ( "myCurve" )==1)
    {
    delete"myCurve" ;
    }

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

    VirtualV Активный участник

    С нами с:
    25.04.2007
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    5
    если решил заняться 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" это имя, тобиш строка, строка берется в кавычки если не объявлена как переменная.
     
  12. sanctus

    sanctus Активный участник

    С нами с:
    29.08.2006
    Сообщения:
    312
    Симпатии:
    0
    Баллы:
    16
    если кода не много в блоке, то можно и без фигурных скобок, и на той же самой строке
    лишь бы читабельность не пропала

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


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

    Код:
    if( `objExists "persp"` ==1) print "persp"; print " exist"
    и еще, когда пишете код в сообщении на форуме, помечайте его тэгом code, здесь на рендере это делается одним кликом
    со временем глаза привыкают к моноширинному шрифту, и код читается намного легче.
     
  13. sanctus

    sanctus Активный участник

    С нами с:
    29.08.2006
    Сообщения:
    312
    Симпатии:
    0
    Баллы:
    16
    еще проще:
    Код:
    if( `objExists "persp"`) print "persp"; print " 123";
     
  14. A.D.I.D.A.S.

    A.D.I.D.A.S. Активный участник

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

    JBond Знаток

    С нами с:
    17.06.2009
    Сообщения:
    451
    Симпатии:
    5
    Баллы:
    37
    может PATH , а не PATCH
     
  16. VARVAR13

    VARVAR13 Активный участник

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


    и по поводу опечаток в книге по адресу www.davidgould.com там вроде как есть список опечаток и исправления...
     
  17. A.D.I.D.A.S.

    A.D.I.D.A.S. Активный участник

    С нами с:
    04.09.2010
    Сообщения:
    274
    Симпатии:
    1
    Баллы:
    14
    Ппц ... не только в книге опечатки . Правда не помогло .
    Кароче вот что у меня в файле maya.env
    MAYA_SCRIPTS_PATH = C:\Documents and Settings\Administrator\Desktop\Scripts
     
  18. A.D.I.D.A.S.

    A.D.I.D.A.S. Активный участник

    С нами с:
    04.09.2010
    Сообщения:
    274
    Симпатии:
    1
    Баллы:
    14
    Народ плиз объясните . Почему например в этом коде (
    Код:
    [b]if( `obgExists Sphere` ){ действие ; }[/b]
    )необязательно писать "==1" . Никак в толк не возьму . Вроде или у Цыпцына или еще где то читал по этому поводу , но что и где уже непомню .
    P.S. Предыдущий вопрос тоже в силе .
     
  19. Dark™ vip

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    Потому что условный оператор и так получает нужное значение от конструкции с кавычками. Оператор сравнения в данном случае лишний.
     
  20. sanctus

    sanctus Активный участник

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

    Поэтому нам результат 1 сравнивать с единицей не обязательно.
     
Модераторы: Dark™, Skif

Поделиться этой страницей