public static CirculationPackage CirculationConfig(TestFitPackage tf, List <Curve> axisSegments) { //Classifications. List <bool> TouchesEdge = new List <bool>(); List <bool> TouchesCore = new List <bool>(); List <bool> IsLong = new List <bool>(); double avgLength = Utils.GetAverageLength(axisSegments); Interval lengthRange = Utils.GetLengthRange(axisSegments); for (int i = 0; i < axisSegments.Count; i++) { bool floorProfileEdgeTest = Confirm.CurvesIntersect(axisSegments[i], tf.FloorPlanPackage.FloorProfile, true); TouchesEdge.Add(floorProfileEdgeTest); bool coreEdgeTest = Confirm.CurvesIntersect(axisSegments[i], tf.FloorPlanPackage.CoreProfile, true); TouchesCore.Add(coreEdgeTest); bool isLong = (axisSegments[i].GetLength() > avgLength) ? true : false; IsLong.Add(isLong); } List <Curve> MainCirculationCurves = new List <Curve>(); List <Curve> OptionalCirculationCurves = new List <Curve>(); for (int i = 0; i < axisSegments.Count; i++) { if (TouchesCore[i] == false && TouchesEdge[i] == false) { MainCirculationCurves.Add(axisSegments[i]); } else if (TouchesCore[i] == true) { MainCirculationCurves.Add(axisSegments[i]); } else if (TouchesEdge[i] == true && IsLong[i] == true) { MainCirculationCurves.Add(axisSegments[i]); } else { OptionalCirculationCurves.Add(axisSegments[i]); } } bool hasOneAxis = Confirm.AllAxisColinear(MainCirculationCurves); if (hasOneAxis) { Curve singleAxisCurve = Curves.ExtendToBounds(tf.FloorPlanPackage.FloorProfile, MainCirculationCurves[0]); MainCirculationCurves.Clear(); MainCirculationCurves.Add(singleAxisCurve); } CirculationPackage ClassifiedCirculation = new CirculationPackage(MainCirculationCurves, OptionalCirculationCurves); return(ClassifiedCirculation); }