Exemple #1
0
        public void CircleInSquare_SelectsOne()
        {
            List <Brep> TestEnv    = BrepFactory.CircleInSquare();
            Brep        testCircle = TestEnv[0];
            Brep        testSquare = TestEnv[1];

            List <Brep> allRegions     = Breps.SplitTwoBreps(testSquare, testCircle);
            List <Brep> resultGeometry = Logic.Relationships.Select.FloorFromCore(allRegions, testCircle);

            Assert.AreEqual(resultGeometry.Count, 1);
        }
Exemple #2
0
        public void CircleWithTransverseRectangle_SelectsTwo()
        {
            List <Brep> TestEnv       = BrepFactory.CircleWithTransverseRectangle();
            Brep        testCircle    = TestEnv[0];
            Brep        testRectangle = TestEnv[1];

            List <Brep> allRegions     = Breps.SplitTwoBreps(testCircle, testRectangle);
            List <Brep> resultGeometry = Logic.Relationships.Select.FloorFromCore(allRegions, testRectangle);

            Assert.AreEqual(resultGeometry.Count, 2);
        }
Exemple #3
0
        public void SquareWithCircumscribedCircle_SelectsFour()
        {
            List <Brep> TestEnv    = BrepFactory.SquareWithCircumscribedCircle();
            Brep        testCircle = TestEnv[1];
            Brep        testSquare = TestEnv[0];

            List <Brep> allRegions     = Breps.SplitTwoBreps(testCircle, testSquare);
            List <Brep> resultGeometry = Logic.Relationships.Select.FloorFromCore(allRegions, testSquare);

            Console.WriteLine(allRegions.Count);
            Console.WriteLine(testSquare.GetArea());
            Console.WriteLine(testCircle.GetArea());

            Assert.AreEqual(resultGeometry.Count, 4);
        }
Exemple #4
0
        /// <summary>
        /// Identify class methods parse data from TestFitPackage to prepare for calculations.
        /// Geometry is sent to Select class methods for processing. Each select method is solving a limited relationship problem.
        /// While Select methods may be over-specific and overlap with each other sometimes, they're just different groupings of all other general methods.
        /// Structure allows for quick readability and for Select methods to be directly tested without having to set up a whole test fit.
        /// </summary>
        /// <param name="tf"></param>
        /// <returns></returns>
        public static List <Brep> FloorPlateRegions(TestFitPackage tf)
        {
            //Parse floor and core profiles from TestFitPackage.
            Curve baseCurve = tf.FloorPlanPackage.FloorProfile;
            Curve coreCurve = tf.FloorPlanPackage.CoreProfile;

            Brep baseSurface = Brep.CreatePlanarBreps(baseCurve)[0];
            Brep coreSurface = Brep.CreatePlanarBreps(coreCurve)[0];

            List <Brep> AllRegions = Breps.SplitTwoBreps(baseSurface, coreSurface);

            //Determine base floor plate region.
            List <Brep> ValidFloorRegions = Select.FloorFromCore(AllRegions, coreSurface);

            return(ValidFloorRegions);
        }
Exemple #5
0
        public void CircleInSquare_NotCore()
        {
            List <Brep> TestEnv    = BrepFactory.CircleInSquare();
            Brep        testCircle = TestEnv[0];
            Brep        testSquare = TestEnv[1];

            List <Brep> allRegions     = Breps.SplitTwoBreps(testSquare, testCircle);
            List <Brep> resultGeometry = Logic.Relationships.Select.FloorFromCore(allRegions, testCircle);

            double resultArea  = resultGeometry[0].GetArea();
            double profileArea = testSquare.GetArea();
            double coreArea    = testCircle.GetArea();

            double difference = (profileArea - coreArea) - resultArea;
            bool   tolerated  = (difference < 0.01) ? true : false;

            Assert.IsTrue(tolerated);
        }
Exemple #6
0
        public void CircleWithTransverseRectangle_NotCore()
        {
            List <Brep> TestEnv       = BrepFactory.CircleWithTransverseRectangle();
            Brep        testCircle    = TestEnv[0];
            Brep        testRectangle = TestEnv[1];

            List <Brep> allRegions     = Breps.SplitTwoBreps(testCircle, testRectangle);
            List <Brep> resultGeometry = Logic.Relationships.Select.FloorFromCore(allRegions, testRectangle);

            Point3d coreCenter = Logic.Utils.GetRegionCenter(testRectangle);

            foreach (Brep region in resultGeometry)
            {
                Point3d regionCenter = Logic.Utils.GetRegionCenter(region);

                if (regionCenter.DistanceTo(coreCenter) < .05)
                {
                    Assert.Fail();
                }
            }
        }
Exemple #7
0
        public static List <Brep> NotCirculationRegions(List <Brep> baseRegions, List <Brep> exemptRegions)
        {
            List <Brep> validRegions      = baseRegions;
            List <Brep> validRegionsCache = new List <Brep>();

            foreach (Brep exemption in exemptRegions)
            {
                for (int i = validRegions.Count - 1; i >= 0; i--)
                {
                    List <Brep> splitOperation = Breps.SplitTwoBreps(validRegions[i], exemption);

                    if (splitOperation.Count < 1)
                    {
                        continue;
                    }

                    foreach (Brep splitBrep in splitOperation)
                    {
                        //Remove any regions coincident with circulation. (Can be more than one.)
                        Point3d regionCenter = Utils.GetRegionCenter(splitBrep);

                        if (regionCenter.DistanceTo(exemption.ClosestPoint(regionCenter)) < 0.1)
                        {
                            //Do nothing.
                        }
                        else
                        {
                            validRegionsCache.Add(splitBrep);
                        }
                    }
                }
                validRegions = validRegionsCache;
                validRegionsCache.Clear();
            }
            return(validRegions);
        }