Render.ru

Создание новых атрибутов для изменения размера объекта

Slavenin

Активный участник
Рейтинг
12
#1
Решил сделать для собственного удобства объекту три атрибута отвечающие за реальный размер. Но че-то никак не получается через них размер изменять.

Второй день сегодня пытаюсь решить эту задачку, создал объекту новый атрибут допустим Sx, через экспрессию (pCube1.SX = `getAttr pCube1.boundingBoxSizeX`;) присвоил ему значение равное размеру объекта по X, но вот изменить через атрибут Sx значение размера не получается. Пробовал через атрибутную групу результат такой же... Сломал всю голову никак не получается... Может кто сталкивался или объяснит почему ничего не получается и как можно сделать такую штуку, если возможно вообще?
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#2
boundingBoxSizeX - это output атрибут, его нельзя изменить.
 

Slavenin

Активный участник
Рейтинг
12
#3
ну майка же как-то вычисляет размеры объекта, хотя просмотрев входные атрибуты я так и не понял как. Идея в том что тогда можно изменять их значения чтобы на выходе получать нужный размер.
 

Slavenin

Активный участник
Рейтинг
12
#4
решил зайти с другой стороны, написал простенький скриптик, который изменяет размер, прада не знаю как сделать чтобы автоматически подгружался выбранный объект, поэтому сделал кнопочку для обновления параметров при выделении нового объекта, ну и пришлось все сделать через скейл.

Кому нада пользуйтесь

Код:
global proc Mas_sizeObj()
{

if (`window -exists SizeObject`)
{
  deleteUI SizeObject;
}
string $mas_nameObj[] = `ls -sl`;
window -s 1 -rtf 1 SizeObject;
columnLayout -adj true -cat "left" 5;
textFieldGrp -text (`getAttr ($mas_nameObj[0]+".boundingBoxSizeX")`) -l "SizeX" -w 50 -cw 1 50 mas_sizeX;
textFieldGrp -text (`getAttr ($mas_nameObj[0]+".boundingBoxSizeY")`) -l "SizeY" -w 50 -cw 1 50 mas_sizeY;
textFieldGrp -text (`getAttr ($mas_nameObj[0]+".boundingBoxSizeZ")`) -l "SizeZ" -w 50 -cw 1 50 mas_sizeZ;
button -l "Reload" -c "Mas_sizeObj()";
button -l "Change" -c "Mas_setSize()";
window -edit -widthHeight 180 150 SizeObject;
showWindow SizeObject;

}

global proc Mas_setSize()
{
  makeIdentity -apply true -t 0 -r 0 -s 1 -n 0;
  delete -ch;

  float $mas_sizeX = `textFieldGrp  -q -text mas_sizeX`;
  float $mas_sizeY = `textFieldGrp  -q -text mas_sizeY`;
  float $mas_sizeZ = `textFieldGrp  -q -text mas_sizeZ`;
  
  string $mas_nameObj[] = `ls -sl`;
  setAttr ($mas_nameObj[0]+".scaleX") ($mas_sizeX/(`getAttr ($mas_nameObj[0]+".boundingBoxSizeX")`));
  setAttr ($mas_nameObj[0]+".scaleY") ($mas_sizeY/(`getAttr ($mas_nameObj[0]+".boundingBoxSizeY")`));
  setAttr ($mas_nameObj[0]+".scaleZ") ($mas_sizeZ/(`getAttr ($mas_nameObj[0]+".boundingBoxSizeZ")`));
}
просьба удалить предыдущий пост, там скрипт неправильный
 

Slavenin

Активный участник
Рейтинг
12
#5
окончательный вариант

Код:
global proc Mas_sizeObj()
{

if (`window -exists SizeObject`)
{
  deleteUI SizeObject;
}
string $mas_nameObj[] = `ls -sl`;
window -s 1 -rtf 1 SizeObject;
columnLayout -adj true -cat "left" 5;
textFieldGrp -text (`getAttr ($mas_nameObj[0]+".boundingBoxSizeX")`) -l "SizeX" -w 50 -cw 1 50 mas_sizeX;
textFieldGrp -text (`getAttr ($mas_nameObj[0]+".boundingBoxSizeY")`) -l "SizeY" -w 50 -cw 1 50 mas_sizeY;
textFieldGrp -text (`getAttr ($mas_nameObj[0]+".boundingBoxSizeZ")`) -l "SizeZ" -w 50 -cw 1 50 mas_sizeZ;
button -l "Reload" -c "Mas_sizeObj()";
button -l "Change" -c "Mas_setSize()";
window -edit -widthHeight 180 150 SizeObject;
showWindow SizeObject;

}

global proc Mas_setSize()
{

  float $mas_sizeX = `textFieldGrp  -q -text mas_sizeX`;
  float $mas_sizeY = `textFieldGrp  -q -text mas_sizeY`;
  float $mas_sizeZ = `textFieldGrp  -q -text mas_sizeZ`;
  
  string $mas_nameObj[] = `ls -sl`;
  float $mas_indexX = ($mas_sizeX/(`getAttr ($mas_nameObj[0]+".boundingBoxSizeX")`));
  float $mas_indexY = ($mas_sizeY/(`getAttr ($mas_nameObj[0]+".boundingBoxSizeY")`));
  float $mas_indexZ = ($mas_sizeZ/(`getAttr ($mas_nameObj[0]+".boundingBoxSizeZ")`));
  
  scale -r -p 0cm 0cm 0cm $mas_indexX $mas_indexY $mas_indexZ;
}
 

Slavenin

Активный участник
Рейтинг
12
#8
смысл в том, что реальные размеры объекта всегда под рукой и поддаются быстрому редактированию без лишних манипуляций, мне щас это очень полезно, так как делаю модельки для ювелирки, поэтому все арзмеры должны быть точно соблюдены :)
 
Сверху