Difference between revisions of "GetClosestCVOnCurveToVectorWithinZPlane MEL"

From scripting
Jump to: navigation, search
(Created page with " global proc int GetClosestCVOnCurveToVectorWithinZPlane(vector $V1, string $Crv1, float $ZDev) { //vector $V1 = <<25666.759821, 10518.81918, 1000>>;...")
 
(No difference)

Latest revision as of 05:40, 22 April 2017

global proc int GetClosestCVOnCurveToVectorWithinZPlane(vector $V1, string $Crv1, float $ZDev) {
            //vector $V1 = <<25666.759821, 10518.81918, 1000>>;
            //NP int $JJJ = GetClosestCVOnCurveToVectorWithinZPlane($V1, "d129", 4000);
            //string $Crv1 = "d129";
            //float $ZDev = 4000;
            string $CurCrvShapeArr[] = `listRelatives($Crv1)`;
            string $CurCrvShape = $CurCrvShapeArr[0];
            int $CurCrvSpansNum = `getAttr($CurCrvShape+".spans")`;
            int $WinningPtIndex = -1;
            float $WinningDist = 100000000;
            int $w = 0;
            //for ($w=0;$w<=$CurCrvSpansNum;$w++) {
            do {
                float $CCArr[] = `pointPosition($Crv1+".cv["+ $w +"]")`;
                vector $CCVec = <<$CCArr[0],$CCArr[1],$CCArr[2]>>;
                vector $Diff1 = $CCVec - $V1;
                float $DMag = mag($Diff1);
                float $ZDiff = abs(($CCVec.z) - ($V1.z));
                
                if ($ZDiff < $ZDev) {
                    if ($DMag < $WinningDist) {
                        $WinningDist = $DMag;
                        $WinningPtIndex = $w;
                    }                        
                }
                $w++;
            } while ($w<=$CurCrvSpansNum);
            //}
            //note:  -1 means nothing was in the plane or close enough.
    return $WinningPtIndex;
}


More information on vectors and vector mathematics, read pages 14-16, 20-21 in YSYT.