Вопрос по синтаксису МЕЛ
- Автор темы DEL
- Дата создания
вы пробовали вручную в поле пути к текстуре вбить "sourceimages\Water lilies.jpg" или просто "Water lilies.jpg" при уже назначенной текстуре, лежащей, скажем на рабочем столе? У меня безуспешно - он опять назначает абсолютный путь на рабочий стол, при том, что у меня уже назначен проект и картинка с аналогичным названием лежит в папке "sourceimages". Причем если назначить путь через браузер, то все нормально. Это какая-то проблема с обновлением путей, пока в качестве решения могу предложить вариант: скрипт собирает пути в массив, копирует все текстуры в папку "sourceimages" и переименовывает эти текстуры присваивая им префикс с именем проекта, к примеру, затем в соответствующие nodes вводит названия текстур с префиксом, таким образом в папке "sorceimages" будут те же текстуры просто с отличным от оригинала названием и обновление путей с абсолютного на относительный должно произойти.
2 DEL
может не работает потому что ты не выделяешь текстурные ноды?? Если хочешь что бы обрабатывалось не для выделенных а для всех в сцене, поменяй эту строчку
на
может не работает потому что ты не выделяешь текстурные ноды?? Если хочешь что бы обрабатывалось не для выделенных а для всех в сцене, поменяй эту строчку
Код:
// получить список выделенных объектов
string $textureFiles[] = `ls -sl`;
Код:
// получить список всех объектов в сцене c типом "file"
string $textureFiles[] = `ls -type "file"`;
- Рейтинг
- 314
DEL, вот я делал давно, смысл тот же в общем.
{
$txtrs = `ls -sl`;
for ($i = 0; $i<size($txtrs); $i++)
{
string $txtname = `getAttr ($txtrs[$i] + ".ftn")`;
$txtname = basename ($txtname, "");
setAttr ($txtrs[$i] + ".ftn") -type "string" ("textures//" + $txtname);
};
}
В вашем скрипте я не понял что значит строчка //extracts the name of texture file, есть же команда для этого специальная - basename.
И еще советую не юзать укороченный цикл for. Он выглядит чуток короче, но по функциональности и удобству сильно уступает нормальному for, да еще и вносит путаницу.
{
$txtrs = `ls -sl`;
for ($i = 0; $i<size($txtrs); $i++)
{
string $txtname = `getAttr ($txtrs[$i] + ".ftn")`;
$txtname = basename ($txtname, "");
setAttr ($txtrs[$i] + ".ftn") -type "string" ("textures//" + $txtname);
};
}
В вашем скрипте я не понял что значит строчка //extracts the name of texture file, есть же команда для этого специальная - basename.
И еще советую не юзать укороченный цикл for. Он выглядит чуток короче, но по функциональности и удобству сильно уступает нормальному for, да еще и вносит путаницу.
И еще советую не юзать укороченный цикл for. Он выглядит чуток короче, но по функциональности и удобству сильно уступает нормальному for, да еще и вносит путаницу.
- Рейтинг
- 314
На личном опыте. Писал довольно сложный менеджер проектов. Используя укороченный цикл for для казалось бы простых ситуаций, мне всегда приходилось потом переделывать весь цикл в полноценный for, так как функций обычного не хватало при последующем кодинге. К примеру с урезанным for поработать с двумя массивами одновременно уже не получается. Ну и конечно дело привычки и стиля программирования тоже. Некоторые любят себе проблем сами напридумывать
опиши порядок действий как ты инициируешь глобальную процедуру global proc textrFile()? Где она у тебя храниться? В файле? Или ты ее после загрузки копируешь этот скрипт в ScriptEditor, запускаешь а потом вызываешь textrFile())?
В вашем скрипте я не понял что значит строчка //extracts the name of texture file, есть же команда для этого специальная - basename.
string $path = "C:/AW/Maya5.0/bin/maya.exe";
string $filepart = `match "[^/\\]*$" $path`;
// Result: "maya.exe"
Думаю дело не в скрипте. Все куски кода работают по отдельности. Fabis оказался прав. Дело в том, что я пробовал проделать то же самое вручную.( удалить из поля File Name все до имени фаила) , но никак не получилось. Зато удется удалить весь путь.
Пока не знаю почему происходит, потому, что не у всех так. Например Styler смог без проблем запустить.
Можно попробовать так ка написал Fabis, но у меня есть другая идея. Если она дает удалить весь путь а до этого имая файла я сохранил в переменной $lastMbr, то возможно сделать это по очереди, тоесть вытащить фаил из пути поместить его в пееменную string $lastMbr = `match "[^/\\]*$" $blck`;, удалить весь путь setAttr -type "string" ($texField+".ftn") ""; а затем назначить значение , которое хранится в переменной $lastMbr. Kогда приду домой с работы продолжу тестровать.
Как ва кажется это будет работать?
- Рейтинг
- 314
Нужно учитывать, что если вписать в поле пути "filename.jpg", то майка будет искать его не в папке sourceimages, а в корневой папке проекта.
Т.е. чтобы файл "Water lilies.jpg" нашелся в майке при вводе этого значения в поле вручную, его нужно поместить в корневой каталог проекта.
Вообще все пути в проекте идут относительно корневой папки.
И еще по работе этого поля пути к текстуре. "Странно" оно работает потому, что если уже введен путь к текстуре, и мы пытаемся вручную ввести другой путь, но не правильный (каковым в примере Fabis'a является "Water lilies.jpg"), то майка не выдаст ошибки, а просто вернет старый правильный путь на место. Но это произойдет только в том случае, если имя файла в новом пути такое же как и имя файла в старом пути.
Примеры:
введено: "textures\sideleaf.jpg"
вводим: sideleaf.jpg
результат (если этой текстуры нет в корне проекта): возвращается старый правильный путь, без отчета об ошибке.
введено: "textures\sideleaf.jpg"
вводим: "filenew.jpg"
результат (если filenew.jpg нет в корне проекта): идет отчет об ошибке, остается в поле новое имя
В общем вся путаница из-за того, что не сделали у этого поля нормальный feedback.
Ну это я понял Я имел в виду неоправданное исполользование более сложной команды, когда в майке специально для этого есть basename.
Т.е. чтобы файл "Water lilies.jpg" нашелся в майке при вводе этого значения в поле вручную, его нужно поместить в корневой каталог проекта.
Вообще все пути в проекте идут относительно корневой папки.
И еще по работе этого поля пути к текстуре. "Странно" оно работает потому, что если уже введен путь к текстуре, и мы пытаемся вручную ввести другой путь, но не правильный (каковым в примере Fabis'a является "Water lilies.jpg"), то майка не выдаст ошибки, а просто вернет старый правильный путь на место. Но это произойдет только в том случае, если имя файла в новом пути такое же как и имя файла в старом пути.
Примеры:
введено: "textures\sideleaf.jpg"
вводим: sideleaf.jpg
результат (если этой текстуры нет в корне проекта): возвращается старый правильный путь, без отчета об ошибке.
введено: "textures\sideleaf.jpg"
вводим: "filenew.jpg"
результат (если filenew.jpg нет в корне проекта): идет отчет об ошибке, остается в поле новое имя
В общем вся путаница из-за того, что не сделали у этого поля нормальный feedback.
Этот код "вынимает" из пути файл.На пример :
string $path = "C:/AW/Maya5.0/bin/maya.exe";
string $filepart = `match "[^/\\]*$" $path`;
// Result: "maya.exe"
string $path = "C:/AW/Maya5.0/bin/maya.exe";
string $filepart = `match "[^/\\]*$" $path`;
// Result: "maya.exe"
мы пытаемся вручную ввести другой путь, но не правильный (каковым в примере Fabis'a является "Water lilies.jpg"),
придется в коде дописать вместо $lastMbr это: ("{имя другой папки}/"+ $lastMbr)
Fabis, ну в майе 2009 относительный путь "sourceimages\..."(в код тоже вводим) как вручную так и через скрипт сразу нормально срабатывает без помощи открытия и закрытия браузера. Браузер понадобился только, чтобы заработал нормально исходный код для папки Source Images:
Код:
setAttr -type "string" ($texField+".ftn") $lastMbr;
RGBam, оп-па, и в самом деле, если в майа 2009 ввести вместо абсолютного пути относительный, то есть "sourceimages\..." то обновляется все прекрасно, а в майе 2008 это не работает, при вводе нового относительного пути возвращает старый абсолютный путь Беда какая-то, причем последовательность действий была в обеих версиях одинаковая. Мистика какая-то, но скрипт-то должен быть универсальным иначе обидно будет...
Вообщем весь этот код оказался лишним. Есть замечательная команда dirmap. В ней надо указать два абсолютных пути к проектам (главное чтобы папки с текстурами и папки с др. файлами сходились), первый путь, описывающий чужую директорию проекта с другого компа, второй - текущую. И если какой то файл программа не найдет на новом компе, то она полезет его искать в другой директории, которую мы указали второй. Эта команда применима к любым путям насколько я понял.
Связь директорий сохраняется на файл сцены. Вот такое вот пироги =)
Код:
dirmap -en true; \\включает данную возможность
dirmap -m "{чужая директория проекта}" "{новая директория проекта}";