/Nearest Neighbor code
//=====================
//Maya should run thru as many frames as needed to generate the
//appropriate number of particles. Then, run this code. After it
//generates the text file, rewind Maya and run the particle position
//gatherer as needed.
global proc float getDistance(int $myID, string $particleShapeName, int $compareID){
string $ptName = $particleShapeName + ".pt[" + $myID + "]";
float $position1[] = `getParticleAttr -at position -array true $ptName`;
$ptName = $particleShapeName + ".pt[" + $compareID + "]";
float $position2[] = `getParticleAttr -at position -array true $ptName`;
float $tmpX = $position1[0]-$position2[0];
float $tmpZ = $position1[2]-$position2[2];
if ($tmpX > 6 || $tmpZ > 6){
return 1000;
}
if ((($tmpX * $tmpX) + ($tmpZ * $tmpZ)) > 36){
return 1000;
}
return sqrt(($tmpX * $tmpX) + ($tmpZ * $tmpZ));
}
global proc findNearestID(string $particleShapeName){
int $nearestID = -1;
int $totalNumOfParticle = `getAttr ($particleShapeName +".count")`;
print ("Checking " + $totalNumOfParticle + " particles.\n");
$path = "/stuhome/maya/projects/vsfx705/data/particleDistance.txt";
int $fileid = fopen($path, "w");
for ($j = 0; $j < $totalNumOfParticle; $j++){
float $nearestDistance = -1;
for($i = 0; $i < $totalNumOfParticle; $i++){
if($i != $j){
float $distance = getDistance($j, $particleShapeName, $i);
if($nearestDistance == -1 || $nearestDistance > $distance){
$nearestDistance = $distance;
$nearestID = $i;
}
}
}
$halfway = ($nearestDistance/2);
fprint($fileid, $halfway + "\n");
}
fclose($fileid);
print "Done with file";
}
//ParticlesToStemCurves
//=====================
//Called via the script editor to set the rest in motion
global proc string[] particlesToStemCurves(int $startAt, int $endAt)
{
string $result[2];
string $particle[] = `ls -tr "particle*"`;
$tnode = "\"particle1\"";
python("import StemCurveWriter");
python("reload(StemCurveWriter)");
$cmd = python("StemCurveWriter.particlesToStemCurves(" +
$tnode + "," +
$startAt + "," +
$endAt + ")" );
$path = python("StemCurveWriter.writeToFile()");
$result[0] = $cmd;
$result[1] = $path;
return $result;
}