// CREATES A LINE OF DOMINOES ALONG SELECTED NURBS CURVES $curves = `ls -sl`; $domino_spacing = 1; $domino_count = 0; $domino_group = `group -empty -n "dominoes"`; for($c = 0; $c < size($curves); $c++) { $curve = $curves[$c]; $c_len = `arclen $curve`; float $i = 0; // create dominos along curve for(; $i<$c_len; $i+=$domino_spacing) { // get curve point information $curve_u = get_u_from_arc_length($curve, $i); $curve_p = `pointOnCurve -pr $curve_u -p $curve`; // create domino and relocate to correct position $domino = `polyCube -ch on -o on -h 1.4 -w .8 -d .2 -cuv 4`; xform -t $curve_p[0] ($curve_p[1]+0.7) $curve_p[2] $domino; // align domino's rotation $curve_t = `pointOnCurve -pr $curve_u -t $curve`; $rot = `angleBetween -euler -v1 0 0 1 -v2 $curve_t[0] 0 $curve_t[2]`; xform -r -ro $rot[0] $rot[1] $rot[2] $domino; // tilt first domino down if ($i == 0) { xform -cp $domino; xform -relative -rp 0 -.7 0 $domino; xform -relative -os -ro 25 0 0 $domino; xform -relative -ws -t 0 .05 0 $domino; } // add to group of dominoes $domino_name = ("domino_"+$domino_count); rename $domino[0] $domino_name; parent $domino_name $domino_group; $domino_count++; } } // gets u value on curve from specified arc length proc float get_u_from_arc_length(string $curve, float $target_a_len) { $c_len_locator = arcLengthDimension ($curve+".u[0]"); $epsilon = .001; // how close we need to get to the specified arc length float $min_u = `getAttr ($curve+".minValue")`; float $max_u = `getAttr ($curve+".maxValue")`; float $current_u; float $current_a_len; while(true) { $current_u = (($max_u-$min_u)/2) + $min_u; setAttr ($c_len_locator+".uParamValue") $current_u; $current_a_len = `getAttr ($c_len_locator+".arcLength")`; // DEBUG // print("Min: "+$min_u+" Max: "+$max_u+" U: "+$current_u+" | Current: "+$current_a_len+" | Target: "+$target_a_len+"\n"); if($epsilon > abs($target_a_len-$current_a_len)) { break; } if($target_a_len < $current_a_len) { $max_u = $current_u; } else { $min_u = $current_u; } } delete `listRelatives -fullPath -p $c_len_locator`; return $current_u; }