1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Maya", создана пользователем Slavenin, 6 авг 2009.

Модераторы: Dark™, Skif
  1. Slavenin

    Slavenin Активный участник

    С нами с:
    22.06.2008
    Сообщения:
    264
    Симпатии:
    0
    Баллы:
    16
    Решил сделать для собственного удобства объекту три атрибута отвечающие за реальный размер. Но че-то никак не получается через них размер изменять.

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

    Dark™ Administrator Команда форума

    С нами с:
    28.10.2001
    Сообщения:
    3.110
    Симпатии:
    217
    Баллы:
    1.520
    boundingBoxSizeX - это output атрибут, его нельзя изменить.
     
  3. Slavenin

    Slavenin Активный участник

    С нами с:
    22.06.2008
    Сообщения:
    264
    Симпатии:
    0
    Баллы:
    16
    ну майка же как-то вычисляет размеры объекта, хотя просмотрев входные атрибуты я так и не понял как. Идея в том что тогда можно изменять их значения чтобы на выходе получать нужный размер.
     
  4. Slavenin

    Slavenin Активный участник

    С нами с:
    22.06.2008
    Сообщения:
    264
    Симпатии:
    0
    Баллы:
    16
    решил зайти с другой стороны, написал простенький скриптик, который изменяет размер, прада не знаю как сделать чтобы автоматически подгружался выбранный объект, поэтому сделал кнопочку для обновления параметров при выделении нового объекта, ну и пришлось все сделать через скейл.

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

    Код:
    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")`));
    }
    просьба удалить предыдущий пост, там скрипт неправильный
     
  5. Slavenin

    Slavenin Активный участник

    С нами с:
    22.06.2008
    Сообщения:
    264
    Симпатии:
    0
    Баллы:
    16
    окончательный вариант

    Код:
    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;
    }
     
  6. Slavenin

    Slavenin Активный участник

    С нами с:
    22.06.2008
    Сообщения:
    264
    Симпатии:
    0
    Баллы:
    16
    вот интересно пользовался кто-нить или нет? :)
     
  7. Bipper

    Bipper Активный участник

    С нами с:
    18.10.2001
    Сообщения:
    89
    Симпатии:
    2
    Баллы:
    7
    А смысл?
     
  8. Slavenin

    Slavenin Активный участник

    С нами с:
    22.06.2008
    Сообщения:
    264
    Симпатии:
    0
    Баллы:
    16
    смысл в том, что реальные размеры объекта всегда под рукой и поддаются быстрому редактированию без лишних манипуляций, мне щас это очень полезно, так как делаю модельки для ювелирки, поэтому все арзмеры должны быть точно соблюдены :)
     
Модераторы: Dark™, Skif

Поделиться этой страницей