global proc vector snapToClosestSpan(string $curve, string $vert,vector $curveVector[]) { vector $closestDistance[]; vector $positionVert = `xform -q -ws -t $vert`; // returns the position of the current Vert vector $tempVec; vector $tempCurveVec; vector $finalVec; float $span = `getAttr ($curve+".spans")`; float $testDistWinner = 100000; float $testDistChallenger; float $j = 0; float $tempDistance; int $closestArray; int $m = $span *100; int $k = 0; while ($k <= $m) { // all jacked up right here. $distance = GzDistance($curveVector[$k], $positionVert); $testDistChallenger = $distance; if ($testDistChallenger < $testDistWinner) { //print "Challenger Wins!!!\n"; $testDistWinner = $testDistChallenger; $closestArray = $k; //print $closestArray; } else { //print "Winner remains Champion!!!\n"; } //print $closestDistance[$k]; //print "\n"; $j=$j+ .01; $k++; } //print ($vert + " is closest to " + $curveVector[$closestArray]+"\n"); $finalVec = $curveVector[$closestArray]; //print ($finalVec + " Number " + $closestArray+"\n"); return $finalVec; } // -------------------- Gz Distance Begin --------------------// // Gz Distanc calculator between 2 vectors. global proc float GzDistance(vector $tempCurveVec, vector $positionVert) { float $tempX; float $tempY; float $tempZ; vector $tempCurveVec; $tempX = (($tempCurveVec.x) - ($positionVert.x))*(($tempCurveVec.x) - ($positionVert.x)); $tempY = (($tempCurveVec.y) - ($positionVert.y))*(($tempCurveVec.y) - ($positionVert.y)); $tempZ = (($tempCurveVec.z) - ($positionVert.z))*(($tempCurveVec.z) - ($positionVert.z)); $tempDistance = ($tempX + $tempY + $tempZ); $distance = sqrt($tempDistance); return $distance; } // -------------------- Gz Distance End --------------------// global proc vector[] getPointsOnCurve(string $curve) { float $span = `getAttr ($curve+".spans")`; int $k = 0; int $m = $span *100; float $j = 0; vector $curveVector[]; string $infoNode; while ($k <= $m) { $infoNode = `pointOnCurve -ch on -pr $j $curve`; $curveVector[$k] = `getAttr ($infoNode + ".position")`; // returns the position of the point on Curve $j=$j+.01; $k++; } return $curveVector; } // get your curve { string $selectionEdge[] = `ls -sl -fl`; string $curveArray[] = `polyToCurve -form 0 -degree 1 -n edgeCurve01`; string $curve = $curveArray[0]; rebuildCurve -ch 1 -rpo 1 -rt 0 -end 1 -kr 1 -kcp 1 -kep 1 -kt 0 -s 4 -d 3 -tol 0.00393701 $curve; xform -cp $curve; // get your verts select -r $selectionEdge; ConvertSelectionToVertices; string $vert[] =`ls -sl -fl`; int $vertsToSnap = `size($vert)`-1; // get the amount of spans in this jig vector $curveVector[] = getPointsOnCurve($curve); //print $curveVector; int $i = 0; vector $move; while ($i <=$vertsToSnap) { select -r $vert[$i]; $move = snapToClosestSpan($curve, $vert[$i], $curveVector); move ($move.x) ($move.y) ($move.z) ; $i++; //print $vert[$i]; } delete $curve; select -r $selectionEdge; }