public static List <Curve> BestSplitterCurves(List <Brep> zones, List <Curve> circ, Curve core) { int numZones = zones.Count; int numCircCurves = circ.Count; List <Curve> splitterCurves = new List <Curve>(); for (int i = 0; i < numZones; i++) { int validCircCurves = 0; List <bool> intersects = new List <bool>(); List <double> intersectionInterval = new List <double>(); //RhinoApp.WriteLine("---"); for (int j = 0; j < numCircCurves; j++) { if (Confirm.CurveRegionIntersection(circ[j], zones[i]) && circ[j].Degree == 1) { //RhinoApp.WriteLine("Region intersection exists."); validCircCurves++; intersects.Add(true); CurveIntersections csx = Intersection.CurveSurface(circ[j], zones[i].Surfaces[0], 0.1, 0.1); //RhinoApp.WriteLine("--{0} csx event(s). (Overlap: {1})", csx.Count, csx[0].OverlapA.ToString()); intersectionInterval.Add(csx[0].OverlapA.T1 - csx[0].OverlapB.T0); } else { //RhinoApp.WriteLine("Region intersection does not exist."); intersects.Add(false); intersectionInterval.Add(0); } } if (validCircCurves == 0) { //RhinoApp.WriteLine("No circulation options."); Curve newSplitCurve = Select.GenerateSplitCurve(zones[i], core); splitterCurves.Add(newSplitCurve); } if (validCircCurves == 1) { //RhinoApp.WriteLine("Only one option."); splitterCurves.Add(circ[intersects.IndexOf(true)]); } else if (validCircCurves > 1) { //RhinoApp.WriteLine(validCircCurves.ToString() + " options."); splitterCurves.Add(circ[intersectionInterval.IndexOf(intersectionInterval.Max())]); } intersects.Clear(); intersectionInterval.Clear(); } return(splitterCurves); }