Render.ru

вопросы по MEL

VIG 142133

Пользователь сайта
Рейтинг
2
Всем привет. Задача - необходимо приаттачить geometry cach к 1000 объектов. Но проблема в том, что команда attachGeometryCache является Runtime, не имеет никаких флагов и при выполнении выдает диалоговое окно для выбора кеш файла. Вопрос, есть ли возможность указать команде путь к кеш файлу програмно?
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
Надо просто исходные коды просмотреть. А делается это в данном случае так:
runTimeCommand -q -c attachGeometryCache;
Видим связанную команду, ее исходники и изучаем.
 

VIG 142133

Пользователь сайта
Рейтинг
2
выдала doImportCacheArgList(0,{}); но по ней тоже ничего нет. или я не знаю где искать ) как можно посмотреть ее исходники? или описание. В майской док-ции нет.
 

VIG 142133

Пользователь сайта
Рейтинг
2
выдала doImportCacheArgList(0,{}); но по ней тоже ничего нет. или я не знаю где искать ) как можно посмотреть ее исходники? или описание. В майской док-ции нет.
Все, разобрался, doImportCacheArgList это не команда, это скрипт, его то и надо смотреть
 
Господа, у меня вопрос по переменным в процедурах.
Есть нормально работающий целый код. Хочу его разбить на части (start, end) и в середину вставить некоторые действия. Возникает проблема с переменными. В первой части кода, создается Плейн и загоняется в string $plane[]. Во всех последующих процедурах, пишется "$plane" is an undeclared variable. Как я ее только не пытался сделать глобальной (и приписывал Global в “теле” процедуры, и пробовал объявить в самом начале), ничего не выходит.

Что бы не быть голословным, вот тот самый код:
Код:
// перед запуском должен быть выделен полигон, или три вертекса, или два ребра.
proc start() {
    	ConvertSelectionToVertices;
		string $vtxSel[] = `ls -sl -fl`;
		string $selectedObjectStore[] = `ls -sl -o`;
		[b]$objectSelectionStore[/b] = `listRelatives -p $selectedObjectStore[0]`;

		if (size($vtxSel) < 3)
			error "Please select at least 3 Vertices, 2 Edges or 1 Face";

		// create and align helperPlane
		string [b]$plane[][/b] = `polyPlane -w 1 -h 1 -sx 1 -sy 1 -ax 0 1 0 -cuv 2 -ch 1 -n rotationPlane`;

		select ( $plane[0] + ".vtx[0:2]") $vtxSel[0] $vtxSel[1] $vtxSel[2];
		snap3PointsTo3Points(0);
	
	    select $plane[0];
	    MoveTool;
}
//получается, объект у которого было выделение, заносится в $objectSelectionStore
//а созданная плоскость (которая в последствии будет определять опорную точку) в $plane[]
---------------------------------------------------------------------------------------------------------------
// вот тут и начинаются проблемы с переменной $plane[0]. 
proc rotZ() {
string $obj1 = [b]$plane[0][/b]; 
float $getPivotRotZ = `getAttr ($obj1 + ".rotateAxisZ")`;
$pivotRotZ = $getPivotRotZ + 90.0;
setAttr ($obj1 + ".rotateAxisZ") $pivotRotZ;
}
----------------------------------------------------------------------------------
// здесь они продолжаются уже с двумя. $plane[0] и $objectSelectionStore
proc end() { 

	// parent object to helperPlane
        	parent [b]$objectSelectionStore $plane[0][/b];

		// freeze transformations on object    
		makeIdentity -apply true -t 0 -r 1 -s 0 -n 0 $objectSelectionStore;
    
		// unparent object
		parent -world $objectSelectionStore;

		// cleanup
		delete $plane;
}
В общем, суть вопроса: как сделать так, что бы информация об объектах (их названия) присвоенная переменными в куске start, оставалась и распознавалась во всех остальных частях кода?
 

VARVAR13

Активный участник
Рейтинг
8
Переменные созданные внутри процедуры, вне самой процедуры несуществует...
общие переменные нужно создавать вне процедуры
 

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

Активный участник
Рейтинг
17
Вариации на тему "Хелп не читал, не читаю и читать не буду!"

область видимости переменных - это общий принцип программирования, одинаковый во всех известных мне языках. В майской документации описан. И в сопутствующей литературе тоже.
опять же передача данных в процедуру и получение результата - тоже общий принцип, вытекающий из предыдущего, и методы здесь опять-таки одинаковые во всех известных мне языках : либо через параметры процедуры, либо через глобальные переменные, либо через запись/чтение.
Глобальные переменные вещь довольно тонкая, их лучше на начальном этапе не использовать, optionVar не все понимают, запись-чтение в файл неэлегантно. так что остается передавать имя вашей плоскости в процедуру через параметры вызова процедуры, что-то типа

gloabal proc myProc(string $nameOfPlane)
(
print ("Name of plane is "+$nameOfplane+"\n")
};

cooтветсвенно вызов будет либо

myProc "pPlane1" ;

либо

myProc("pPlane1")
 

Ken_Zin

Мастер
Рейтинг
108
Почему если выполнять команды по очереди,то всё срабатывает, а если выделить всё в script editor и запустить единовременно,то вторая команда не работает?
string $Rmpa = `shadingNode -asTexture ramp`;
removeMultiInstance -break true ($Rmpa + ".colorEntryList[1]");
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
У меня Maya 2013, все сработало по варианту Покатигорошек
 

gimmick

Активный участник
Рейтинг
5
Вычисление изменения инпута ноды.


В ригах стараюсь избегать использования экспрешнов, успешно заменяя их нод-нетворками (которые, понятное дело, работают быстрее). И практически любую логическую конструкцию получается так реализовать. Исключение составляет - сохранение значения атрибута с предыдущего шага выполнения. В экспрешне это можно сделать, используя глобальную переменную. Предыдущим шагом выполнения при этом будет - предыдущий кадр. Очевидно, что и для работающих в реальном времени нод время каким-то образом квантуется. Так же Майя различает dirty и clean plugs. Dirty plug - это атрибут который не вычислился с тех пор, как значение входящего атрибута изменилось. Т.е. существует ДЕЛЬТА между предыдущим значением атрибута и текущим.


Вопрос: как вычислять эту разницу между текущим значением атрибута и значением до его изменения без помощи экспрешна с глобальной переменной или скомпилированной специально для этого ноды? Можно ли решить эту задачу, используя только стандартные майские ноды (кроме expression)?
 

gimmick

Активный участник
Рейтинг
5
зачем вычислять изменения, если майя их уже вычислила?
Нужно вычислить не новое значение, а именно разность между новым значением и предыдущим.
Например, такое может понадобиться для вычисления вектора направления движения объекта.
 

Покатигорошек

Активный участник
Рейтинг
15
если это делать на атрибуте одной ноды - нужно программировать. если есть нода с управляющим атрибутом, то plusMinusAverage должен сработать
 

HunterWolf

Знаток
Рейтинг
42
Подскажите есть ли где для примера меловский гуй глянуть где вместо Тул Бокса, сделан скажем Аутлайнер или другой элемент, только имено в слоте интерфейса тулбокса.
 

gimmick

Активный участник
Рейтинг
5
если есть нода с управляющим атрибутом, то plusMinusAverage должен сработать
Не совсем понятно, что подавать на второй input plusMinusAverage в качестве значения атрибута до его изменения. Собственно, в этом и вопрос.
 
Сверху