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

MEL (global proc)

Тема в разделе "Maya", создана пользователем -, 31 авг 2002.

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

    Приветствую!

    Иметься скрипт, который при запуске из Script Editor выполняеться правильно и как задумывалось. Но после того как я объявляю этот скрипт глобальной процедурой - работает, но не правильно... В учебниках сказано, что процедура - это поименованный скрипт. Но на практике оказалось, что это не совсем так. Разъясните, пожалуйста.

    С уважением, Дмитрий.
     
  2. Guest

    Ищи лучше, где у тебя баг окопался, который только в процедуре проявляется.

    Как программер с 15-летним стажем уверяю тебя - чудес не бывает :) А конкретнее трудно - без сорса-то...
     
  3. Guest

    Хорошо, попробую сам...
    И все-таки... Вот сорс, и я буду рад любым советам, наставлениям, пожеланиям, и предложениям...)

    /////////////////
    string $filename = "";
    $filename = `fileDialog -dm "*.mtl"`;
    string $buffer[], $texName, $texPath, $fullPath;
    //
    string $file;
    string $fileList[];
    string $current;
    string $matList[] = `ls -type phong`;
    for ($current in $matList)
    {
    $file = `shadingNode -asTexture file`;
    connectAttr -f ($file + ".outColor") ($current + ".color");
    }
    $fileList = `ls -type file`;
    //
    int $s = 0;
    string $textureloc = "";
    $numTokens = `tokenize $filename "/" $buffer`;
    print $buffer;
    for ($i = 0; $i < ($numTokens - 1); $i++)
    $textureloc = ($textureloc + $buffer[$i] + "/");
    int $mtlfile = eval("fopen( \""+$filename+"\", \"r\")" );
    while (!(`feof $mtlfile`))
    {
    $curWord = `fgetword $mtlfile`;
    if ($curWord == "map_Kd")
    {
    $texName = `fgetword $mtlfile`;
    $numTokens = `tokenize $texName "\\" $buffer`;
    if ($numTokens > 1)
    {
    int $j = size($buffer);
    $texName = $buffer[$j-1];
    $fullPath = ($textureloc + $texName);
    for ($current in $fileList)
    {
    setAttr ($current + ".fileTextureName") -type "string" $fullPath;
    }
    }
    }
    }
    fclose $mtlfile;
    ///////////////
     
  4. Guest

    Привет, FlugErr

    Зачем тебе его процедурой делать если
    можно просто в файл записать и сделать "source yourfile.mel" ?
    Или параметры передавать надо?
    Не очень ясно - что не так работает.

    Алексей Гусев
     
  5. Guest

    Привет,Алексей

    Да, может и не надо делать это процедурой... Но, видать, какие-то "грабли" здесь есть. Не хотелось бы в будущем на них нарваться...)
     
  6. Guest

    setAttr ($current + ".fileTextureName") -type "string" $fullPath;

    Вот это вот попробуй переписать как:
    eval ("setAttr " + $current + ".fileTextureName -type \"string\" " + $fullPath);
     
  7. Guest

    Спасибо за подсказку, Joss

    Я теперь понял суть использования команды eval...)

    Ну и так скать, не отходя от кассы...) В документации на команду fileBrowserDialog есть такая строка, относящаяся к флагу -mode:
    "0 for read 1 for write 2 for write without paths (segmented files) 4 for directories have meaning when used with the action +100 for returning short names."

    Что это это за экшн такой "+100"?

    Ещё раз спасибо
     
Модераторы: Dark™, Skif

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