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

MEL команда для имени

Тема в разделе "Maya", создана пользователем Ro, 24 апр 2012.

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

    Ro Знаток

    С нами с:
    28.11.2007
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    28
    Бодрый день, подскажите, пожалуйста, какой командой можно выполнить такой скрипт:
    select "pCube_" + *любое количество знаков, если они есть*
    Что бы он выбрал хоть "pCube_123", хоть "pCube_dfdfdfdkj_kje:ib", хоть просто "pCube_". Главное, что бы символы после pCube_ его не волновали
    Благодарю
     
  2. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    В поле "leave" вводишь что нужно оставить, в поле "add" вводишь что нужно добавить.

    Код:
    if (`window -exists chn`) deleteUI -window chn;
    string $chn = `window -t "Change name" -s off chn`;
    
    formLayout -numberOfDivisions 100 myForm;
        textField -w 290 txt1;
        textField -w 290 txt2;
        text -label "leave" ltx1;
        text -label "add" ltx2;
        button -label "change" -w 340 -c chne chnb;
        
        formLayout -edit
              
              -attachForm chnb "top" 50
              -attachForm chnb "left" 0
              
              -attachForm txt1 "top" 0
              -attachForm txt1 "left" 40
              
              -attachForm txt2 "top" 25
              -attachForm txt2 "left" 40
              
              -attachForm ltx1 "top" 3
              -attachForm ltx1 "left" 10
              
              -attachForm ltx2 "top" 31
              -attachForm ltx2 "left" 10
              
              myForm;
    showWindow chn;
    
    global proc chne()
    {
    string $lv[] = `ls -sl`;
    string $slv;
        for ($slv in $lv)
        {
        string $nlv = `textField -q -tx txt1`;
        string $nadd = `textField -q -tx txt2`;
        string $add = `match $nlv $slv`;
        rename $slv ($add = $add + $nadd);
        }
    }
    
     
  3. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Сори затупил. Не так подумал что нужно.)) Вот то что ты просил.

    Код:
    if (`window -exists sbn`) deleteUI -window sbn;
    string $chn = `window -t "select by name" -s off sbn`;
    
    formLayout -numberOfDivisions 100 myForm;
        textField -w 290 txt1;
        text -label "name" ltx1;
        button -label "select" -w 340 -c psbn bsbn;
        
        formLayout -edit
              
              -attachForm bsbn "top" 25
              -attachForm bsbn "left" 0
              
              -attachForm txt1 "top" 0
              -attachForm txt1 "left" 40
              
              -attachForm ltx1 "top" 3
              -attachForm ltx1 "left" 10
              
              myForm;
    showWindow sbn;
    
    global proc psbn()
    {
    string $sbn = `textField -q -tx txt1`;
    $sbn = ("*" + $sbn + "*");
    select $sbn;
    }
    
     
  4. Ro

    Ro Знаток

    С нами с:
    28.11.2007
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    28
    iNOD, спасибо, но, никого переименовывать не надо.
    В сцене есть обьект pCube_dfdksdfaf;qpvm
    Какую функцию добавить, что бы при выполнении "select pCube_*функция*" выбрался этот pCube_dfdksdfaf;qpvm?
    Другой вариант: есть изображение, которое нужно применить к материалу в качестве цвета, но его имя постоянно меняется, постоянным остается только начало, например: "photoNumber_"
     
  5. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Второй вариант на выделение )
    А точнее.

    Код:
    $sbn = ("*" + $sbn + "*");
    select $sbn; 
    
    Я просто добавил textField и кнопку что б было наглядно как взаимодействуют.
     
  6. Ro

    Ro Знаток

    С нами с:
    28.11.2007
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    28
    Пропустил второй пост, спасибо, выделение работает. Значит, звездочка отвечает за такие дела
    А как быть с вариантом применения изображения, при котором известна только часть названия?
    setAttr -type "string" file1.fileTextureName ("/sourceimages/photoNumber_ ... .jpg"); ? Там звездочка не работает
     
  7. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Не понял. Ты хочешь к ноде file1 в поле fileTextureName запихать все изображения что в папке? А Sequence уже не катит?)
    Опиши что тебе нужно.
     
  8. Ro

    Ro Знаток

    С нами с:
    28.11.2007
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    28
    Зная имя текстуры (abc_1.jpg), ее можно применить к ноде file1:
    setAttr -type "string" file1.fileTextureName ("/sourceimages/abc_1.jpg");
    А если не знаем окончание имени этой текстуры, знаем только "abc_" ?
     
  9. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Смысла нету писать подобный скрипт.
    По причинам:
    1. Это нужно организовать поиск файлов по папке, а за тем уже копировать имя файла и вставлять в file1.fileTextureName, что займет много времени на реализацию, а затраты не окупятся.
    2. Что если там будет два схожих файла? То выдаст ошибку, или ты хочешь применить два файла к file1.fileTextureName?)
    3. Что мешает просто открыть проводником папку с текстурами, а в мае открыть гипершейд, за тем в папке выделить файлы, зажать их мышкой и перетащить их на гипершейд? 2-3 сек делов.
     
  10. Ro

    Ro Знаток

    С нами с:
    28.11.2007
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    28
    Написал скрипт, который создает и настраивает материал и готовит его для загрузки текстур (нормал, дисплейс и т.д.) для импортированной из Zbrush'a модели. Текстуры приходится загружать вручную и искать их среди сотен других текстур в папке, потому что Браш сохраняет их с разными суффиксами (например, текстура с именем Object1-DM(1.25254)4096_u0_v0.tif, где число 1.25254 - результат анализа дисплейса и всегда разное). Если бы можно было загружать текстуры, зная только начало имени (Object1-DM), можно было бы автоматизировать скрипт до полного автоматизма
    Ведь умеет же Maya делать "select object1-DM*", было бы неплохо то же самое и с файлами из виндоуса
     
  11. VirtualV

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

    С нами с:
    25.04.2007
    Сообщения:
    58
    Симпатии:
    0
    Баллы:
    5
    Помне так получение новых знаний всегда окупаются, другое дело что лень :)
    Держи. пример берет из папки пользовательских скриптов имена всех файлов, и добавляет в переменную $res все имена начинающиеся с "cps". в качестве директории можно указать любой путь. По функции gmatch подробнее в хелпе.

    Код:
    string $dir = `internalVar -userScriptDir`;
    string $file[] = `getFileList -folder $dir -filespec "*.mel"`;
    print $file;
    string $match = "cps";
    string $cur;
    string $res;
    for ($cur in $file)
        if (`gmatch $cur ($match + "*")` != 0)
            $res += ($cur + " ");
    print "### RESULT ### ";
    print $res;
    Код:
    результат:
    AEBA_texture3d_warpTemplate.mel
    AEBA_texture_cell3d3Template.mel
    AEBA_texture_cell3dTemplate.mel
    AEBA_texture_fractal4d2Template.mel
    AEBA_texture_fractal4d3Template.mel
    AEBA_texture_oily_specular2Template.mel
    AEJS_GlareTemplate.mel
    AEJS_MosaicTemplate.mel
    AEJS_SurfaceLuminanceTemplate.mel
    AEmr_lightList.mel
    connectPolyShape.mel
    cpsAbout.mel
    cpsAttributes.mel
    cpsControl.mel
    cpsInstallMenu.mel
    cpsLib.mel
    cpsSetup.mel
    cpsSnapVertices.mel
    cpsToolbox.mel
    ### RESULT ### cpsAbout.mel cpsAttributes.mel cpsControl.mel cpsInstallMenu.mel cpsLib.mel cpsSetup.mel cpsSnapVertices.mel cpsToolbox.mel
     
  12. Ro

    Ro Знаток

    С нами с:
    28.11.2007
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    28
    VirtualV, тащемта, это было офигенно. Скрипт доделан
    iNod, VirtualV, огромное спасибо
     
  13. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Добрый день.
    Помогите пожалуйста с именами камер.

    Есть маленький скрипт.
    Код:
    string $currentPanel = `getPanel -withFocus`; 
    string $panelType = `getPanel -typeOf $currentPanel`; 
    if ($panelType != "modelPanel") 
    {
    switchModelView persp;
    }
    else
    {
    int    $gate     = `getAttr  perspShape.displayResolution`;
    if ($gate==1)
        {
        setAttr "perspShape.displayResolution" 0;
        }
    else
        {
        setAttr "perspShape.displayResolution" 1;
        }
    }
    Проблема в том, что в командах getAttr и setAttr, я напрямую указываю perspShape. То есть, если создается камера с другим названием, то Resolution gate естественно не срабатывает.

    Можно ли в некую переменную записывает название активной камеры и использовать ее в нужных местах.
    setAttr " переменная Shape.displayResolution" 0;
     
  14. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Создаешь global переменную. Например global int $a или global string $str но когда используешь нужно указать эту глобальную переменную. Пример:

    Код:
    global int $a;
    
    global proc test1()
    {
    global int $a;
    $a = 1;
    print $a;
    //res 1;
    }
    
    global proc test2()
    {
    global int $a;
    print $a;
    //res 1;
    }
    
     
  15. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    iNOD, не совсем то, мой вопрос в большей степени относится к правильности написания команд.

    Как получить название активной камеры и вложить его в переменную я нашел
    string $cam = currCam();
    // Result: Proba // - Возвращает программа

    Теперь вопрос как вклинить эту переменную в строчку включения атрибута
    setAttr "perspShape.displayResolution" 0; ===>>> setAttr "$camShape.displayResolution" 0;

    Перепробовал разные варианты. В майевском хелпе к сожалению ничего не понял.
     
  16. iNOD

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

    С нами с:
    10.11.2009
    Сообщения:
    631
    Симпатии:
    2
    Баллы:
    19
    Так.

    Код:
    setAttr ($cam + "Shape.displayResolution") 0
    
     
  17. Александр Чернега

    Александр Чернега Знаток

    С нами с:
    24.12.2009
    Сообщения:
    1.058
    Симпатии:
    56
    Баллы:
    53
    Вот это дело.
    Большое спасибо.
     
  18. Maledetta

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

    С нами с:
    09.05.2012
    Сообщения:
    102
    Симпатии:
    23
    Баллы:
    13
    Подскажите как правильно приконектить текстуры с помощью переменных

    ...
    string $file_checker2 = `shadingNode -asTexture file`;
    string $place2dTexture2 = `shadingNode -asUtility place2dTexture`;
    connectAttr -f ($place2dTexture[0] + ".coverage " + $file_checker[0] + ".coverage");
    ...

    пишет // Error: The source attribute 'place2dTexture1.coverage file1.coverage' cannot be found. //
    Хотя если написать тоже самое без переменных то коннектит нормально
    connectAttr -f place2dTexture1.coverage file1.coverage;
     
  19. Maledetta

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

    С нами с:
    09.05.2012
    Сообщения:
    102
    Симпатии:
    23
    Баллы:
    13
    Сори, немного неправиьлно скопипастил, из разных вариантов, но смысл тот же
    Немогу редактировать предыдущее сообщение :(
     
  20. Maledetta

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

    С нами с:
    09.05.2012
    Сообщения:
    102
    Симпатии:
    23
    Баллы:
    13
    Всё, я осознал свою ошибку, всем спасибо
     
Модераторы: Dark™, Skif

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