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); }
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); }
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); }
/// <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); }
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); }
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(); } } }
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); }