Render.ru

Проблема с назначением на клавишу MEL-сценария!

Артур Тертерян 79136

Активный участник
Рейтинг
5
#1
Вот какая штука, назначаю скрипт (с ним все в порядке) на клавишу "\", но он не работает. Скрипт с видео-урока The Gnomon Workshop - Automotive Modeling Techniques - zzToggleSubDee.mel. Может быть кто-то тренировался по этому видео? Собственно он, скрипт, отвечает за конвертацию полиг. в сабди. Порядок моих действий прост: назначаю клавишу, копирую скрипт из блокнота (смотрел все внимательно, никакие фрагменты коды упущены не были) в Command, подтверждаю действие и сохраняюсь. Результата отсутствует. Пользуюсь Maya 2008, на эту версию жалоб особых нет.
Относительно недавно стал пользоваться Maya. Сталкивался ли кто-либо с подобной ситуацией? Подскажите, пожалуйста, на какие моменты надо обратить внимание?
 

Миша Ершов

Модератор форума
Рейтинг
314
#2
А что на нажатие клавиши говорит script editor со включенным Echo All Commands? Появляется текст скрипта? Если да то проблема в нём.
 

Артур Тертерян 79136

Активный участник
Рейтинг
5
#3
Да, текст скрипта появляется в script editor. Если я правильно вас понял, то проблема в скрипте? В идеале он не должен там появляться? В таком случае, еще пара вопросов: можно ли вставить в Maya скрипт на клавишу не прибегая к copy-paste? Второй вопрос (он не связан с данной темой): почему каждый раз, когда я загружаю программу, в ее интерфейсе не сохраняются мои настройки, в частности, постоянно исчезает раздел MJPolyTool?
Заранее спасибо за ответы.
 

fm4

Активный участник
Рейтинг
15
#4

Артур Тертерян 79136

Активный участник
Рейтинг
5
#6
А можно ли в этом форуме выложить интересующий меня скрипт, с тем чтобы опытные пользователи Maya проверили его работоспособность? Программа для меня новая, вполне допускаю, что все таки я делаю что-то не так.
 

Миша Ершов

Модератор форума
Рейтинг
314
#7
Да, текст скрипта появляется в script editor. Если я правильно вас понял, то проблема в скрипте? В идеале он не должен там появляться?
Нет, если текст скрипта появляется, значит он выполняется, но сам скрипт не работает. Выкладывайте скрипт посмотрим!
 

Артур Тертерян 79136

Активный участник
Рейтинг
5
#8
Вот этот скрипт:


/* This file downloaded from Highend3d.com
''
'' Highend3d.com File Information:
''
'' Script Name: toggle subdivision surfaces v1.5
'' Author: Hamish McKenzie
'' Last Updated: July 28, 2001
'' Update/Change this file at:
'' http://www.highend3d.com/maya/mel/?section=modeling#1131
''
'' History:
'' toggle subdivision surfaces v1.0 on July 4, 2001 by Hamish McKenzie
''
'' Please do not alter any information above this line
'' it is generated dynamically by Highend3d.com and will
'' be changed automatically on any updates.
*/



//
// toggle subdivision surfaces
//
// Created by Hamish McKenzie www.emissionpossible.com
// Created : 4 July 2001
// Amended : 9 April 2003**
//
// Description:
// a simple little script that will hopefully make lightwave users
// a little more comfortable with their modelling. it will toggle
// an object between subdiv and poly. it will also convert a nurbs
// surface to subdiv.
//
// 13/12/01:Fixed it, so hopefully it now works. The original version
// of this script was one of my first. And it showed. So I've
// re-written it, so its a lot cleaner, and it should work properly
// now. Plus it now works with multiple selections, as well as when
// you've got components selected instead of objects.
//
// 26/03/03simple change. it now works on hilite selections if either
// an object or component isn't selected.
//
// **it now checks to see if there are any "intermediate" objects
// that share the same transform, and deletes them. It also
// automatically deletes history on the object. It seems to be very
// reliable now. It also no longer relies on external scripts.
//
// Hamish McKenzie ©2003...


global proc zzToggleSubDee() {
string $selObjs[] = `ls -sl -o`;
if ( `size $selObjs` == 0 ) $selObjs = `ls -hl`;

for ( $obj in $selObjs ) {
int $isShape = `zzIsType shape $obj`;
int $isTransform = `zzIsType transform $obj`;

//delete history on the object
delete -ch $obj;

//now check to see if there are any "intermediate" objects in the transform
string $shapes[] = `listRelatives`;

//SHAPES
if ( $isShape ) {
string $objTransform[] = `listRelatives -p $obj`;
string $children[] = `listRelatives -c $objTransform`;

for ( $child in $children ) { //discover any intermediate objects that are children of the transform in question
if ( `getAttr ( $child + ".intermediateObject" )` ) { delete $child; }
}

string $objType = `nodeType $obj`;
if ( $objType == "subdiv" ) {
string $newObject[] = `subdToPoly -ch 0 -aut 1 -format 0 -depth 0 -sampleCount 1 -maxPolys 15000 -epp 1 -suv 1 -subdNormals 0 $obj`;
delete $obj;
rename $newObject[0] $obj;
}
if ( $objType == "mesh" ) {
string $newObject[] = `polyToSubdiv -ch 0 -aut 1 -ap 0 -mpc 100000 -me 255 $obj`;
delete $obj;
rename $newObject[0] $obj;
}
if ( $objType == "nurbsSurface" ) {
string $newObject[] = `nurbsToSubdiv -ch 0 -aut 1 -rn 0 -mpc 100000 -mp 1 $obj`;
delete $obj;
rename $newObject[0] $obj;
}
}

//TRANSFORMS
if ( $isTransform ) {
string $children[] = `listRelatives -c $obj`;
for ( $child in $children ) { //discover any intermediate objects that are children of the transform in question
if ( `getAttr ( $child + ".intermediateObject" )` ) { delete $child; }
}

string $objShape[] = `listRelatives -s $obj`;
string $objType = `nodeType $objShape`;
if ( $objType == "subdiv" ) {
string $newObject[] = `subdToPoly -ch 0 -aut 1 -format 0 -depth 0 -sampleCount 1 -maxPolys 15000 -epp 1 -suv 1 -subdNormals 0 $objShape[0]`;
delete $objShape[0];
rename $newObject[0] $objShape[0];
}
if ( $objType == "mesh" ) {
string $newObject[] = `polyToSubdiv -ch 0 -aut 1 -ap 0 -mpc 100000 -me 255 $objShape[0]`;
delete $objShape[0];
rename $newObject[0] $objShape[0];
}
if ( $objType == "nurbsSurface" ) {
string $newObject[] = `nurbsToSubdiv -ch 0 -aut 1 -rn 0 -mpc 100000 -mp 1 $objShape[0]`;
delete $objShape[0];
rename $newObject[0] $objShape[0];
}
}
}
//RESTORE SELECTION
select $selObjs;
}


global proc int zzIsType ( string $type, string $obj ) {
$selType = `nodeType $obj`;
$isType = 0;
if ( $type == "transform" ) {
if ( $selType == "transform" ) {
$isType = 1;
}
}

if ( $type == "shape" ) {
if ( $selType == "mesh" || $selType == "subdiv" || $selType == "nurbsSurface" ) {
$isType = 1;
}
}
return $isType;
}
 

Helicooper

Пользователь сайта
Рейтинг
4
#9
или я не внимательно вчитался, или этот скрипт сам по себе ничего не делает, а процедуры в нем надо вызвать.
Хоть и кривой метод, но можно дописать в конце такую строку:
zzToggleSubDee;
 

Артур Тертерян 79136

Активный участник
Рейтинг
5
#10
Я не владею этим языком, однако видел результат его (скрипта) действия. Я даже убеждён, что он рабочий. Думаю, я делаю что-то не так как нужно, хотя вроде бы все проверял не раз. Если кому-либо из читающих эту ветку форума не сложно написать порядок действий при назначении скрипта на клавишу, буду очень признателен.
 

Fabis

Активный участник
Рейтинг
16
#11
Проверил - работает в Майа 2009. По-моему у вас ошибка - вы в поле Command ввели весь скрипт, хотя нужно вводить команду вызова скрипта, то есть, как и сказал Helicooper, команду zzToggleSubDee;
 

Артур Тертерян 79136

Активный участник
Рейтинг
5
#13
Такой вот появился вопрос. Прошу прощение у модераторов за расспрос в пределах одной темы. Прочитал, что для того чтобы сохранить настройки в maya, в частности, меня интересует раздел MJPollyTool, надо его mel прописать в userSetup.mel, но по указанным расположениям этого скрипта, я его его не обнаружил. Как вариант предлагалось создать этот файл самому, но в maya 2008 есть две директории scripts. Первая находится в ...\maya\scripts, а вторая ...\maya\2008\scripts. Вопрос таков: в какой из них надо создавать этот mel? Нужно ли в него просто вставить весь скрипт MJPollyTool.mel или есть какие-либо особенности? Надо ли вобще создавать этот mel-файл? Возможно в этой версии maya он называется как-то по другому? Во всех топиках, где обсуждался этот вопрос, рассматривались более ранние версии программы.
 

Fabis

Активный участник
Рейтинг
16
#14
Не зависимо от версии метод один и тот же: в директории ...\maya\{MAYA_VERSION}\scripts создаете или находите userSetup.mel, затем в нем пишете либо MJPollyTool.mel; либо source MJPolyTool;
 
Сверху