private void SplitCubes( List<MedianCutCube> cubes, int count )
{
int cubeIndexToSplit = cubes.Count - 1;
while ( cubes.Count < count )
{
MedianCutCube cubeToSplit = cubes[cubeIndexToSplit];
MedianCutCube cube1, cube2;
// find the longest color size to use for splitting
if ( ( cubeToSplit.RedSize >= cubeToSplit.GreenSize ) && ( cubeToSplit.RedSize >= cubeToSplit.BlueSize ) )
{
cubeToSplit.SplitAtMedian( RGB.R, out cube1, out cube2 );
}
else if ( cubeToSplit.GreenSize >= cubeToSplit.BlueSize )
{
cubeToSplit.SplitAtMedian( RGB.G, out cube1, out cube2 );
}
else
{
cubeToSplit.SplitAtMedian( RGB.B, out cube1, out cube2 );
}
// remove the old "big" cube
cubes.RemoveAt( cubeIndexToSplit );
// add two smaller cubes instead
cubes.Insert( cubeIndexToSplit, cube1 );
cubes.Insert( cubeIndexToSplit, cube2 );
if ( --cubeIndexToSplit < 0 )
{
cubeIndexToSplit = cubes.Count - 1;
}
}
}