Render.ru

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

Ro

Знаток
Рейтинг
38
#1
Бодрый день, подскажите, пожалуйста, какой командой можно выполнить такой скрипт:
select "pCube_" + *любое количество знаков, если они есть*
Что бы он выбрал хоть "pCube_123", хоть "pCube_dfdfdfdkj_kje:ib", хоть просто "pCube_". Главное, что бы символы после pCube_ его не волновали
Благодарю
 

iNOD

Активный участник
Рейтинг
18
#2
В поле "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);
    }
}
 

iNOD

Активный участник
Рейтинг
18
#3
Сори затупил. Не так подумал что нужно.)) Вот то что ты просил.

Код:
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;
}
 

Ro

Знаток
Рейтинг
38
#4
iNOD, спасибо, но, никого переименовывать не надо.
В сцене есть обьект pCube_dfdksdfaf;qpvm
Какую функцию добавить, что бы при выполнении "select pCube_*функция*" выбрался этот pCube_dfdksdfaf;qpvm?
Другой вариант: есть изображение, которое нужно применить к материалу в качестве цвета, но его имя постоянно меняется, постоянным остается только начало, например: "photoNumber_"
 

iNOD

Активный участник
Рейтинг
18
#5
Второй вариант на выделение )
А точнее.

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

Ro

Знаток
Рейтинг
38
#6
Пропустил второй пост, спасибо, выделение работает. Значит, звездочка отвечает за такие дела
А как быть с вариантом применения изображения, при котором известна только часть названия?
setAttr -type "string" file1.fileTextureName ("/sourceimages/photoNumber_ ... .jpg"); ? Там звездочка не работает
 

iNOD

Активный участник
Рейтинг
18
#7
Не понял. Ты хочешь к ноде file1 в поле fileTextureName запихать все изображения что в папке? А Sequence уже не катит?)
Опиши что тебе нужно.
 

Ro

Знаток
Рейтинг
38
#8
Зная имя текстуры (abc_1.jpg), ее можно применить к ноде file1:
setAttr -type "string" file1.fileTextureName ("/sourceimages/abc_1.jpg");
А если не знаем окончание имени этой текстуры, знаем только "abc_" ?
 

iNOD

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

Ro

Знаток
Рейтинг
38
#10
Написал скрипт, который создает и настраивает материал и готовит его для загрузки текстур (нормал, дисплейс и т.д.) для импортированной из Zbrush'a модели. Текстуры приходится загружать вручную и искать их среди сотен других текстур в папке, потому что Браш сохраняет их с разными суффиксами (например, текстура с именем Object1-DM(1.25254)4096_u0_v0.tif, где число 1.25254 - результат анализа дисплейса и всегда разное). Если бы можно было загружать текстуры, зная только начало имени (Object1-DM), можно было бы автоматизировать скрипт до полного автоматизма
Ведь умеет же Maya делать "select object1-DM*", было бы неплохо то же самое и с файлами из виндоуса
 

О С (VirtualV)

Активный участник
Рейтинг
5
#11
Помне так получение новых знаний всегда окупаются, другое дело что лень :)
Держи. пример берет из папки пользовательских скриптов имена всех файлов, и добавляет в переменную $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
 

Ro

Знаток
Рейтинг
38
#12
VirtualV, тащемта, это было офигенно. Скрипт доделан
iNod, VirtualV, огромное спасибо
 
Рейтинг
47
#13
Добрый день.
Помогите пожалуйста с именами камер.

Есть маленький скрипт.
Код:
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;
 

iNOD

Активный участник
Рейтинг
18
#14
Создаешь 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;
}
 
Рейтинг
47
#15
iNOD, не совсем то, мой вопрос в большей степени относится к правильности написания команд.

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

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

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

Maledetta

Активный участник
Рейтинг
15
#18
Подскажите как правильно приконектить текстуры с помощью переменных

...
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;
 

Maledetta

Активный участник
Рейтинг
15
#19
Сори, немного неправиьлно скопипастил, из разных вариантов, но смысл тот же
Немогу редактировать предыдущее сообщение :(
 
Сверху