/* name: bsfFixBlend.mel author: Walter Behrnes version: 2.0 last modified: Oct 05 2007 ////////////////////////////////////////// ///////////// SETUP ////////////////////// ////////////////////////////////////////// 1. Place in scripts folder. 2. open script editor type source "C:/..path to script/bsfFixBlend"; 3. middle mouse drag to tabshelf. ////////////////////////////////////////// ///////////// USAGE ////////////////////// ////////////////////////////////////////// 1. run script. 2. select blend target, press Get Target. this will populate the Blend Target Text Field. 3. select points on blend shapes that you want to reset. 4. press Fix Shape. this will reset the blend shapes to match the Targets point position. */ //GET NAME OF SELECTED TARGET SHAPE global proc bsfGetName(string $name) { //STORE SELECTED OBJECT string $bsfName[] = `ls -sl`; //POPULTE TEXT FIELD textFieldButtonGrp -edit -text $bsfName[0] $name; } //CREATE WINDOW string $bsfwindow = `window -title "BlendShapeFix" -w 400 -h 300`; columnLayout; string $targetName = `textFieldButtonGrp -label "Blend Target" -text "Select Blend Target" -buttonLabel "Get Target" -bc "bsfGetName($targetName);"`; button -label "Fix Shape" -command "fixBlend($targetName);"; showWindow $bsfwindow; //FIX BLEND SHAPE global proc fixBlend(string $bsftargetName) { //CREATE POSITION VARIABLES float $pX, $pY, $pZ; //GET VALUE OF TARGET TEXT FIELD string $obj1 = `textFieldButtonGrp -query -text $bsftargetName`; //GET LIST OF SELECTED POINTS string $oPoints[] = `ls -sl -fl`; //GET SIZE OF POINTS int $pCount = size($oPoints); for ($i=0;$i<$pCount;$i++) { //PLACE SELECTED POINTS INTO VAR string $pX = $oPoints[$i]; //REPLACE COMPONENTS NAME WITH TARGETS NAME string $nPX = `substitute "^[^.]*" $pX $obj1`; //GET ORIGINAL POSITION OF POINT float $mat[] = `xform -query -t -os $nPX`; //MOVE BLEND SHAPE BACK INTO POSITION move -os $mat[0] $mat[1] $mat[2] $oPoints[$i]; } }