Render.ru

MEL (global proc)

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

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

С уважением, Дмитрий.
 
#2
Ищи лучше, где у тебя баг окопался, который только в процедуре проявляется.

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

/////////////////
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
Привет, FlugErr

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

Алексей Гусев
 
#5
Привет,Алексей

Да, может и не надо делать это процедурой... Но, видать, какие-то "грабли" здесь есть. Не хотелось бы в будущем на них нарваться...)
 
#6
setAttr ($current + ".fileTextureName") -type "string" $fullPath;

Вот это вот попробуй переписать как:
eval ("setAttr " + $current + ".fileTextureName -type \"string\" " + $fullPath);
 
#7
Спасибо за подсказку, 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"?

Ещё раз спасибо
 
Сверху