예제 #1
0
        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);
        }
예제 #2
0
        public static List <Curve> CoreCurvesWithoutEgress(List <Curve> coreAccessCurves, List <Curve> circulationAxisCurves)
        {
            List <Curve> curvesWithoutEgress = new List <Curve>();

            foreach (Curve accessCurve in coreAccessCurves)
            {
                for (int i = 0; i < circulationAxisCurves.Count; i++)
                {
                    bool curvesIntersect = Confirm.CurvesIntersect(accessCurve, circulationAxisCurves[i], true);

                    if (curvesIntersect)
                    {
                        break;
                    }
                    else if (i == circulationAxisCurves.Count - 1)
                    {
                        curvesWithoutEgress.Add(accessCurve);
                    }
                }
            }

            return(curvesWithoutEgress);
        }