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

MEL : путь к текстурам.

Тема в разделе "Maya", создана пользователем DEL, 2 мар 2008.

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

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Привет!
    Хочу поменять путь к секстурам одновренно в нескольких узлах File.Знаю как присвоить значения другим атрибутам, например :

    string $obj[] = `ls -tex` ;
    string $mult ;
    for ($mult in $obj) {
    setAttr ($mult +".useCache") 1;

    а вот как удалить строку до sourceimages\XXX.tga одновременно нескольким не знаю.

    Порылся в MEL Command Reference-е и самое подходящее для моего случая нашел tokenize, но никак не смог заставить делать то, что мне нужно:) На хайенде нашел, скрипт который выполняет эту задачу, но мне очень трудно понять как он действует. Все что я понял(возможно я ошибаюсь) этот скрипт находит нужный(Set) проект в среде винды и таким образом заменяет строку.

    Спасибо
     
  2. Миша Ершов

    Миша Ершов Мастер

    С нами с:
    02.11.2003
    Сообщения:
    1.415
    Симпатии:
    2
    Баллы:
    325
    Что-то я никак не соображу что надо :) Нельзя разве объяснить по-человечески?

    команда

    AEassignTextureCB file1.fileTextureName "filename.jpg" "image";

    не подходит?
     
  3. DEL

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Увы, не подходит.


    Извинаюсь за не очень четко заданый вопрос.
    Значит так, есть проект над которым работали несколько человек и все сцены находились на одном компютере в локальной сети. Тоесть папки с нашими проектами находились на другом компютере. По идее кода начинаешь работать над проектом выполняешь set project... и после сохранения, каждый раз когда нажмешь open scene машина ссылается на проект, который мы указали в set project. Каждый обьект имеет по текстуре и по идее имеют путь
    sourceimage\file.jpg, но некоторые из нас умудрились работаь без set projecт и теперь путь к текстурам в их сценах проходит по всей сети(\\xxx\xxx\"projectName"\sorceimages\file.jpg), что не есть хорошо :) потому, что renderPal 2004(програма для рендера в сети), которым мы пользуемся не видит текстуры с вышеуказаными путями. Ему подавай sourceimages\file.jpg.
    Проблема в том , что в каждой сцене по меньшей мере 150-200 разных таких текстур.
    Так вот, хотелось бы знать если есть такая возможность в МЕЛ, удалить в пути этих файлов строку до sourceimages\file.jpg.
    Тоесть вместо \\ххх\ххх\projectName\sorceimages\file.jpg было только sorceimages\file.jpg и проделать это с неколькими узлами одноверменно.
     
  4. Миша Ершов

    Миша Ершов Мастер

    С нами с:
    02.11.2003
    Сообщения:
    1.415
    Симпатии:
    2
    Баллы:
    325
    Команда stringToStringArray разбивает стринговую строку на массив по разделителю.

    Смысл простой:
    этой командой разбиваем строку на массив. Потом ищем в массиве "sourceimages". Когда находим, то записываем в атрибут оставшуюся часть из массива через наш разделитель "\".
     
  5. DEL

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Спасибо, попробую, но думаю придется повозится с обратным слэшем :)
     
  6. Миша Ершов

    Миша Ершов Мастер

    С нами с:
    02.11.2003
    Сообщения:
    1.415
    Симпатии:
    2
    Баллы:
    325
    Да нет, с чего бы это :)
     
  7. DEL

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Все ! Задачу решил. Еще раз спасибо вам, Миша Ершов.
     
  8. DEL

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Никак не могу получить значения атрибута .fileTextureName нескольких этих файлов. Выполняю вот это :

    string $ut[] = `ls -tex`;
    string $mult;
    for ($mult in $ut)
    {
    getAttr($mult + ".fileTextureName");
    }
    и ничего.Зато выполнив только getAttr($mult + ".fileTextureName"); при выделеном обьекте то все нормально.
    Как сделать так, чтобы получить значения всех обьектов в сцене?
    Спасибо.
     
  9. Миша Ершов

    Миша Ершов Мастер

    С нами с:
    02.11.2003
    Сообщения:
    1.415
    Симпатии:
    2
    Баллы:
    325
    А getAttr куда записывает результат выполнения команды?

    Вот так всё работает :)
    Я кстати очень не люблю урезанный вариант циклов for :) С ними только путаница.

    string $ut[] = `ls -tex`;
    string $textrs[];
    for ($i = 0; $i < size($ut); $i++)
    {
    $textrs[$i] = `getAttr ($ut[$i] + ".fileTextureName")`;
    } ;
    print $textrs;
     
  10. DEL

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Еще раз спасибо вам! :)
    А почему путаница? Обьясните пожалуйста если н етрудно :) .
     
  11. Миша Ершов

    Миша Ершов Мастер

    С нами с:
    02.11.2003
    Сообщения:
    1.415
    Симпатии:
    2
    Баллы:
    325
    Да потому что вот мне нужен просто цикл. Я вставляю for ($element in $array). Всё работает. А потом мне вдруг понадобилось немного (или много) усложнить его. Придется менять цикл на более функциональный, с переменной.
    Я несколько раз ставил укороченные циклы - так потом всё равно их пришлось менять на нормальные. Ну и еще дело в привычке. У меня видимо из паскаля такая осталась :)
     
  12. DEL

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

    С нами с:
    20.04.2005
    Сообщения:
    380
    Симпатии:
    0
    Баллы:
    13
    Спасибо, все понял.А еще прочитал инфы в книге Казмера и Уилкинса ;)
     
Модераторы: Dark™, Skif

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