mayation_

Rotate on Curve

Posted in tools by A. Benjasem on November 13, 2009

I haven’t posted anything for sometime because I’m working on a new script. For now, this is a script I’ve developed a few years ago. It’s a tool to duplicate a nurbs object along a curve while rotating it. There is also the option of lofting the duplicates. Enjoy.

// RotateOnCurve.mel Rotate on Curve.
// The script rotates the object along a curve 'n' number of times with rotations.
// written by Amenah Benjasem.// https://mayation.wordpress.com
group -em -n ronc;
addAttr -ln path -dt "string";
addAttr -ln object -dt "string";
addAttr -ln Repetition -at short;
addAttr -ln xRotation -at short;addAttr -ln yRotation -at short;
addAttr -ln zRotation -at short;
if (`window -exists ronc`) {deleteUI ronc; windowPref -remove ronc;}
window -widthHeight 360 350 -s 1 -title "Rotate on Path" ronc;
columnLayout -columnAttach "right" 10 -rowSpacing 10 -columnWidth 340 columnlayout ;
attrFieldSliderGrp  -min 2 -max 100 -at ronc.Repetition ;
attrFieldSliderGrp  -min 1 -max 360 -fs 10 -at ronc.xRotation ;
attrFieldSliderGrp  -min 1 -max 360 -fs 10 -at ronc.yRotation ;
attrFieldSliderGrp  -min 1 -max 360 -fs 10 -at ronc.zRotation ;
$t_loft = `checkBox -label "Loft" -align "left"`;
setParent ..;setParent ..;
button -label "duplicate on curve" -h 30 -width 200 -command "dupl($t_loft)" dupl;
button -label "exit" -h 30 -width 200 -command "exit()" exit ;
showWindow ronc;
select -cl;
print "\n\n- - - - \nRotateOnCurve.mel:\n========\nPlace object pivot in desired place.";
print " Select 1)Path  2)object. \n amna\n";
global proc dupl(string $t_loft) {
$sel = `ls -sl`;
if (size($sel) > 0) {
$obj = `ls -selection -tail 1`;
setAttr ronc.object -type "string" $obj;
$path = `ls -selection -head 1`;
setAttr ronc.path -type "string" $path;
print ("\nPath: " + $path[0] + ", Object: " + $obj[0] + ".\n");
$knots = `getAttr ronc.Repetition`;
$knots_ = $knots - 1;
rebuildCurve -rt 0 -s $knots_ $path;
$rotx = `getAttr ronc.xRotation`;
$roty = `getAttr ronc.yRotation`;
$rotz = `getAttr ronc.zRotation`;
////duplicate move and rotate object..
 for ($i = 1; $i <= $knots; $i++) {
    $point = $path[0] + ".ep[" + $i + "]";  
     $pos = `getAttr $point`; 
     $newobj = `duplicate -n obj $obj[0] `;
     rotate -r  $rotx $roty $rotz $newobj;   
    move -rpr $pos[0] $pos[1] $pos[2] $newobj;
   $rotx = $rotx + $rotx;
   $roty = $roty + $roty;
   $rotz = $rotz + $rotz;   }
   $loft = `checkBox -q -v $t_loft`;
    string $name;
     if ($loft == 1) {
       for ($i = 0; $i<=($knots-2); $i++) {
         if ($i == 0) { $name = "obj"; }
            if ($i > 0) { $name  =  "obj" + $i;}
              $j = $i+1;
            $name2 = "obj" + $j;
            loft $name $name2;   }  
}    }else{  print "\nError: Select Path then object\n";  } }
global proc exit() {
   delete ronc;
   deleteUI ronc;  }