Render.ru

вопросы по MEL

Да действительно, дело было в использовании МоделингТуулКита. (NEX).
При использовании "стандартных" майевских команд, все срабатывает.

Результат - два модифицированных "стандартных" примитива.

subCylinder
Код:
polyCylinder -r 3 -h 6 -sx 8 -sy 1 -sz 1 -ax 0 1 0 -rcp 0 -cuv 3 -ch 1;

string $allObjs[] = `ls-sl`;
for($x=0;$x<size($allObjs);$x++) {
rename $allObjs[$x] ("subCylinder" + $x);
}
string $subCylinder [] = `ls -sl`;

select -r $subCylinder.e[24];
select -add $subCylinder.e[26] ;
select -add $subCylinder.e[28] ;
select -add $subCylinder.e[30] ;
select -add $subCylinder.e[32] ;
select -add $subCylinder.e[34] ;
select -add $subCylinder.e[36] ;
select -add $subCylinder.e[38] ;
changeSelectMode -component;
DeleteEdge;

select $subCylinder [0];
changeSelectMode -object;
select -r $subCylinder.f[12:15] ;
select -r $subCylinder.f[8:15] ;
changeSelectMode -component;
performPolyExtrude 0;
setAttr "polyExtrudeFace1.offset" 0.1;

changeSelectMode -object;
select -r $subCylinder.e[21] ;
changeSelectMode -component;
polyConvertToRingAndSplit;
move -r -os -wd 0 2.903614 0 ;

select $subCylinder [0];
changeSelectMode -object;
select -r $subCylinder.e[19] ;
changeSelectMode -component;
polyConvertToRingAndSplit;
move -r -os -wd 0 -2.855952 0 ;

changeSelectMode -object;
delete -ch;
И subSphere (если просто сабдивить куб, он получается не круглым)
Код:
polyCube -w 7.1 -h 7.1 -d 7.1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1;
string $allObjs[] = `ls-sl`;
for($x=0;$x<size($allObjs);$x++) {
rename $allObjs[$x] ("subSphere" + $x);
}
string $subSphere [] = `ls -sl`;
polySmooth -mth 0 -dv 2 -peh 0 -bnr 1 -c 1 -kb 0 -ksb 1 -khe 0 -kt 1 -kmb 1 -suv 1 -sl 1 -dpe 1 -ps 0.1 -ro 1 -ch 1 $subSphere;

polySphere -r 3 -sx 40 -sy 20 -ax 0 1 0 -cuv 2 -ch 1;
string $subSphereProxy [] = `ls -sl`;   

select $subSphere [0];
select -add $subSphereProxy [0];
//Модификатор майи 2015 (NEX)
CreateShrinkWrap;

delete -ch;
delete $subSphereProxy [0];
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
m.scriptJob( event=("SceneOpened", "mSetProject.mSetProject()") )

Так вот, при загрузке Maya он не срабатывает. Если после загрузки Maya его запустить из скриптедитора, все работает. Но хочется, чтобы он грузился автоматом.
C idle должно заработать.
 

VIG 142133

Пользователь сайта
Рейтинг
2
а можно немного подробнее? из того, что я быстро нагуглил, чтобы запускать c idle надо еще подгружать maya.utils ? Просто в питоне я нуб. Если доступно можно объяснить и это не займет три страницы текста, то буду признателен.
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
а можно немного подробнее? из того, что я быстро нагуглил, чтобы запускать c idle надо еще подгружать maya.utils ? Просто в питоне я нуб. Если доступно можно объяснить и это не займет три страницы текста, то буду признателен.
event поставить на idle. В документации есть список поддерживаемых событий.
 

Alik_msk

Пользователь сайта
Рейтинг
2
вопрос такой, делаю окно со слайдером и кнопкой, по нажатию на кнопку мне нужно взять значение со слайдера и присвоить его переменной. как это сделать?

......
attrFieldSliderGrp -l "Max" -min -10.0 -max 10.0;

//нажатие на кнопку
......
float $noiseMin=как взять текущее значение?;
......
Я не большой знаток по мел, но по практике в жабе знаю, что значение в переменной отвечающей за хранение данных с ползунков, обновляются только когда вы эти ползунки двигаете, если вы это не сделайте, значения всегда будут одинаковы(по умолчанию).
 

Alik_msk

Пользователь сайта
Рейтинг
2
в строке нужно дописать полный путь к файлу exe ( при задании пути использовать обратные косые черты )
например
Код:
system ( "start C:/Notepad/notepad_two.exe " ) ;
при этом в названии не должно быть знаков типа +, в примере папка установленного Notepad++ перемещена по указанному адресу, переименована без знаков + и переименован exe файл ... и все работает...


и по поводу опечаток в книге по адресу www.davidgould.com там вроде как есть список опечаток и исправления...
Знак escape символа(\-косая черта), в коде пишется всегда перед ещё одной косой(\\)
 

Владимир Забелин

Активный участник
Рейтинг
17
Я не большой знаток по мел, но по практике в жабе знаю, что значение в переменной отвечающей за хранение данных с ползунков, обновляются только когда вы эти ползунки двигаете, если вы это не сделайте, значения всегда будут одинаковы(по умолчанию).
Нет, там немного не так. attrFieldSlider - это специальный вид ползунков, напрямую связанный с соответствующим атрибутом объекта. обновление ползунка обновляет значение атрибута, изменение значения атрибута изменяет значение ползунка.
для получения данных от интерфейсных элементов достаточно просто использовать команду этого интерфейсного элемента с ключом -q указав имя этого интерфейсного элемента (которое нужно задать при его создании):
..........................................
attrFieldSlider <bla-bla-bbla> nameOfSlider;
.......................................................
attrFieldSlider -q <bla-bla-bla>nameOfSlider;
 

kyryn

Знаток
Рейтинг
61
Тема я вижу уже поднималась но для windows

2) Что бы открыть блокнот автор пишет код
string $scriptsPath = `internalVar -userScriptDir` ;
chdir $scriptsPath ;
system ( "start notepad.exe learning.mel" )
Как правильно прописать путь для Mac OS?
 

kyryn

Знаток
Рейтинг
61
Тема я вижу уже поднималась но для windows

2) Что бы открыть блокнот автор пишет код
string $scriptsPath = `internalVar -userScriptDir` ;
chdir $scriptsPath ;
system ( "start notepad.exe learning.mel" )
Как правильно прописать путь для Mac OS?
Разобрался , на всякий случай отвечу может кому пригодиться ))
system ("текстовый редактор -e learning.mel ");
У меня так
system ("/Applications/Sublime.app/Contents/MacOS/SublimeText -e learning.mel ");
п.с : спасибо мне )))
 

kyryn

Знаток
Рейтинг
61
Всем привет и еще один вопрос от начинающего )
Есть процедура но незнаю как ее вызвать ? (по книге Гоулда)
Точнее она отрабатывает без ошибок а результат не выдает .
Код:
proc printAnim( int $detailed )
{
print "\nAnimation...";
string $animNodes[];
float $keytimes[];
string $sel[] = `ls -selection`;
for( $node in $sel )
   {
   print ("\nNode: " + $node);
   $animNodes = `keyframe -query -name $node`;
   for( $ac in $animNodes )
      {
      print ("\nAnimCurve: " + $ac );
      $keytimes = `keyframe -query -timeChange $ac`;
      print ("\n" + size($keytimes) + " keys: " );
      for( $keyt in $keytimes )
         {
         $keyv = `keyframe -time $keyt -query -valueChange $ac`;
         if( $detailed )
           {
           float $isBd[] = `keyframe -time $keyt -query -breakdown $ac`;
           print ("\n" + ($isBd[0] ? "Breakdown" : "Normal") + " Key:" );
           }

         print (" [" + $keyt + ", " + $keyv[0] + "]");
        
         if( $detailed )
           {
           print ("\nTangent: ");
           $keyinT = `keyTangent -time $keyt -query -inTangentType $ac`;
           $keyoutT = `keyTangent -time $keyt -query -outTangentType $ac`;
           $keyinA = `keyTangent -time $keyt -query -inAngle $ac`;
           $keyoutA = `keyTangent -time $keyt -query -outAngle $ac`;
           print ("("+ $keyinT[0] + " angle=" + $keyinA[0] +
                  ", " + $keyoutT[0] + " angle=" + $keyoutA[0] + ")");
           }
         }
      }
   } 
}
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
Всем привет и еще один вопрос от начинающего )
Есть процедура но незнаю как ее вызвать ? (по книге Гоулда)
Точнее она отрабатывает без ошибок а результат не выдает .
Код:
proc printAnim( int $detailed )
{
print "\nAnimation...";
string $animNodes[];
float $keytimes[];
string $sel[] = `ls -selection`;
for( $node in $sel )
   {
   print ("\nNode: " + $node);
   $animNodes = `keyframe -query -name $node`;
   for( $ac in $animNodes )
      {
      print ("\nAnimCurve: " + $ac );
      $keytimes = `keyframe -query -timeChange $ac`;
      print ("\n" + size($keytimes) + " keys: " );
      for( $keyt in $keytimes )
         {
         $keyv = `keyframe -time $keyt -query -valueChange $ac`;
         if( $detailed )
           {
           float $isBd[] = `keyframe -time $keyt -query -breakdown $ac`;
           print ("\n" + ($isBd[0] ? "Breakdown" : "Normal") + " Key:" );
           }

         print (" [" + $keyt + ", " + $keyv[0] + "]");
       
         if( $detailed )
           {
           print ("\nTangent: ");
           $keyinT = `keyTangent -time $keyt -query -inTangentType $ac`;
           $keyoutT = `keyTangent -time $keyt -query -outTangentType $ac`;
           $keyinA = `keyTangent -time $keyt -query -inAngle $ac`;
           $keyoutA = `keyTangent -time $keyt -query -outAngle $ac`;
           print ("("+ $keyinT[0] + " angle=" + $keyinA[0] +
                  ", " + $keyoutT[0] + " angle=" + $keyoutA[0] + ")");
           }
         }
      }
   }
}
Код:
printAnim( значение )
После того, как функцию отправил.
 

kyryn

Знаток
Рейтинг
61
Да я пробовал , выдает :
Код:
printAnim( int $detailed );
// Error: printAnim( int $detailed ); //
// Error: Line 1.24: Syntax error //
зато если процедуру сделать без значения printAnim () и убрать if ($detailed)
то процедура вызывается и даже показывает результат как в книге ))
Вопрос почему ?
 

warezyohead

Пользователь сайта
Рейтинг
4
Да я пробовал , выдает :
Код:
printAnim( int $detailed );
// Error: printAnim( int $detailed ); //
// Error: Line 1.24: Syntax error //
зато если процедуру сделать без значения printAnim () и убрать if ($detailed)
то процедура вызывается и даже показывает результат как в книге ))
Вопрос почему ?
Значит ошибка "живёт" где-то коде условия if ($detailed)

// Error: Line 1.24: Syntax error //
А с синтаксимом всё ОК? Просто обычно если Syntax Error, значит ну уж точно что-то написано не так и скорее всего, проблема кроется где-то в районе 24 строки
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
Код:
printAnim(1);
И в перед книги читать по основам программирования.
 

Warpten

Пользователь сайта
Рейтинг
2
Раньше использовал такой макрос. При переходе на 2016 майу пришлось переписывать и теперь он не работает. Помогите ошибку найти, пожалуйста.

// Error: delete 'orientConstrain'; //
// Error: Line 1.8: Syntax error //
 

warezyohead

Пользователь сайта
Рейтинг
4
Раньше использовал такой макрос. При переходе на 2016 майу пришлось переписывать и теперь он не работает. Помогите ошибку найти, пожалуйста.

// Error: delete 'orientConstrain'; //
// Error: Line 1.8: Syntax error //
Попробуйте заключить имя удаляемого объекта в двойные кавычки (delete "orientConstrain"):

delete "objectConstain";
// Error: line 1: No object matches name: objectConstain //
delete 'objectConstain';
// Error: delete 'objectConstain'; //
// Error: Line 1.8: Syntax error //
 

Ken_Zin

Мастер
Рейтинг
108
Untitled-1.jpg
Untitled-1.jpg Ребята, подскажите пожалуйста по dockControl.
Вот код к примеру:

if(`window -q -exists Test`) deleteUI Test;
window -t "Test" -sizeable 1 Test;
columnLayout mainCol;
frameLayout -cll 1 -l "Frame";
button -h 300 -w 150;
button -h 300 -w 150;
button -h 300 -w 150;
button -h 300 -w 150;
setParent mainCol;
showWindow Test;

dockControl -area "left"
-content Test
-allowedArea "left"
-allowedArea "right";

Как прицепить окно Test правильно, чтобы оно не налазило на shelf как на скриншоте?
 
Рейтинг
22
Уменьши высоту баттонов, или установи флаг -height к frameLayout и им регулируй
 
Последнее редактирование:

Ken_Zin

Мастер
Рейтинг
108
Уменьши высоту баттонов, или установи флаг -height к frameLayout и им регулируй
Я намеренно в этом примере сделал высокое окно, в моём скрипте, для которого я хочу решить эту проблему, есть несколько frameLayout'ов, если развернуть их всех, то скрипт наползает на shelf как в примере. Поэтому проблема должна решаться иначе.
 
Сверху