Saturday, December 3, 2005

Анимацийг хувилж blend target бэлдэх

//-----------------------------------------------------------------------------------------------
/*
   Тайлбар:
   Анимаци хийгдсэн биетийг фрэйм бүрд хувилна.
   Хувилсан шинэ биетүүдийг груплэн багцалж
   шинээр нэр оноох бөгөөд цаашид дундын морф хийхэд хэрэглэгдэнэ.
 
  Аргумент:
  string $obj =  Процедурт хэрэглэгдэх объектын нэр
  string $char = Хувилсан биетийн өмнө залгагдах нэр
  string $name = Үүссэн биет ямар нэртэй байхыг зааж өгнө
 
  Жишээ:
  animToBlend ("bound_geo","cat","jawLeft");
 
*/
//-----------------------------------------------------------------------------------------------

global proc animToBlend (string $obj, string $char, string $name) {

    float $start  = `playbackOptions -q -min`;
    float $end  = `playbackOptions -q -max`;
    float $frame = `currentTime -q`;
    float $step = 1;
    string $dupe[];
    string $parent = `createNode transform -name  ($char + "_" + $name + "_blend")`;  

    progressWindow -t "animToBlend" -progress $start -status ("animToBlend on frame: "+$frame) -min $start -max $end -isInterruptable true;
  
    for($frame=$start;$frame<=$end;$frame+=$step)
        {
        currentTime $frame;
        if($frame == $end) $dupe = `duplicate -name ($char  + "_" + $name) $obj`;
        else $dupe = `duplicate -name ($char + "_" + $name + "_" + $frame) $obj`;
        parent $dupe[0] $parent;
        if(`progressWindow -q -isCancelled`) { progressWindow -endProgress; undoInfo -state on;return;}
        progressWindow -e -progress $frame -status ("running animToBlend on frame: "+$frame);
        }
    progressWindow -endProgress;
    print ("successfully created " + $name + " blendShape targets for " + $char + "\n");
    currentTime $start;
    }

FK удирдлага оноох

//-----------------------------------------------------------------------------------------------
/* 
  author: Joe Harkins                                
  name: createCtl
 
  description:
  creates a nurbs circle controller for each selected object based on a few user input args
  parents the shape of the circle to each object and sets display override based on naming tokens
  nurbs цагираган удирдлагыг үүсгэнэ. хэрэглэгчийн идэвхжүүлсэн холбоос бүрийн дор shape зангилаа үүсгэж үүссэн цагирагыг онооно.
    Тухайн холбоосын нэрийг  харж байгаад ямар өнгөөр дүрслэхийг мөн тодорхойлно. холбоос нь голынх бол cn,c_ харин баруун бол
    rt эсвэл r_ гэх зэргээр нэрлэгдсэн байх зайлшгүй шаардлагатай.Жишээ нь l_hand, rtShoulder гэх мэт
 
  Аргументууд:
  string $sel[] = list of selected objects
  float $x = цагираг X тэнхлэг рүү харсан байдалтай үүснэ. 
  float $y = цагираг Y тэнхлэг рүү харсан байдалтай үүснэ.
  float $z = цагираг Z тэнхлэг рүү харсан байдалтай үүснэ.
  float $r = цагирагын радиус
 
  Жишээ:
  Холбоосуудыг идэвхжүүлж байгаад доорхи маягаар бичнэ.
  createCtl `ls -sl` 1 0 0 .25;
 
*/
//-----------------------------------------------------------------------------------------------

global proc createCtl(string $sel[], float $x, float $y, float $z, float $r){
    string $joint;
    for ($joint in $sel){
        float $loc[] = `xform -q -ws -t $joint`;
        circle -fp $loc[0] $loc[1] $loc[2] -sw 360 -nr $x $y $z  -r $r -n ($joint + "_control");
        parent -r -shape ($joint + "_controlShape") $joint;
        setAttr ($joint + "_controlShape.overrideEnabled") 1;
        setAttr ($joint + ".overrideEnabled") 1;
       
        if((`gmatch $joint "*cn*"`)||(`gmatch $joint "*c_*"`)){
                    // Хэрэв гол хэсгийн холбоос бол шар өнгөтэй болгоно
                    setAttr ($joint + "_controlShape.overrideColor") 17;
                    setAttr ($joint + ".overrideColor") 17;
                    }
        else if((`gmatch $joint "*lf*"`)||(`gmatch $joint "*l_*"`))
                             {
                    // Хэрэв зүүн талд харьяалагдах бол ногоон
                    setAttr ($joint + "_controlShape.overrideColor") 14;
                    setAttr ($joint + ".overrideColor") 14;
                    }
        else if((`gmatch $joint "*rt*"`)||(`gmatch $joint "*r_*"`))
                                                           {
                    // Хэрэв баруун талд харьяалагдах бол улаан
                    setAttr ($joint + "_controlShape.overrideColor") 13;
                    setAttr ($joint + ".overrideColor") 13;
                    }
        else if(`gmatch $joint "*"`){
                    // Аль ч талд харьяалагдахгүй бол цэнхэр
                    setAttr ($joint + "_controlShape.overrideColor") 6;
                    setAttr ($joint + ".overrideColor") 6;
                    }   
                   
                    delete ($joint + "_control");               
            }
           
}