public void ConstructAllImplied() { // // Calculate all the important points of intersection among shapes (as well as Circle-Circle intersections). // ShapeIntersectionCalculator shapeIntCalc = new ShapeIntersectionCalculator(this); List<CircleCircleIntersection> tempCCInter = new List<CircleCircleIntersection>(); shapeIntCalc.CalcCircleCircleIntersections(out tempCCInter); ccIntersections = tempCCInter; // // Generate ALL segment clauses // // Have we done this before? Hard-coded provides collinear relationships. CalculateCollinear(); GenerateSegmentClauses(); // Acquire all of the unlabeled points from the UI drawing. DrawingPointCalculator unlabeledCalc = new DrawingPointCalculator(points, segments, circles); unlabeledPoints = unlabeledCalc.GetUnlabeledPoints(); // Add the implied points to the complete list of points. allFigurePoints.AddRange(unlabeledPoints); // Using only segments, identify all polygons which are implied. PolygonCalculator polyCalc = new PolygonCalculator(segments); polygons = polyCalc.GetPolygons(); shapeIntCalc.CalcCirclePolygonIntersectionPoints(); shapeIntCalc.CalcPolygonPolygonIntersectionPoints(); // Determine what shapes are contained within what other shapes. ShapeContainmentCalculator shapeContainCalc = new ShapeContainmentCalculator(this); shapeContainCalc.CalcCircleCircleContainment(); shapeContainCalc.CalcCirclePolygonContainment(); shapeContainCalc.CalcPolygonPolygonContainment(); // Calculate all (selective) Segment-Segment Intersections CalculateIntersections(); // Find all circle-segment intersection points. // Segments (which are not part of a polygon) may intersect a circle; these are also added to the circle's interesting points. csIntersections = shapeIntCalc.FindCircleSegmentIntersections(); // Find all the angles based on intersections; duplicates are removed. CalculateAngles(); // Identify inscribed and circumscribed situations between a circle and polygon. AnalyzeCirclePolygonInscription(); // Determine which of the UI and implied (intersection) points apply to each circle. // Generates all arc clauses and arcInMiddle clauses. AnalyzeAllCirclePointRelationships(); // // All of the following calculations are used in stating the assumptions (user-defined givens) // CalculateSegmentBisectors(); CalculateAngleBisectors(); // Define in Properties->Build->Compilation Symbols to turn off this section #if !ATOMIC_REGION_OFF List<Sector> localMinorSectors = null; List<Sector> localMajorSectors = null; List<Semicircle> localSemicircles = null; foreach (Circle circle in circles) { circle.ConstructImpliedAreaBasedSectors(out localMinorSectors, out localMajorSectors, out localSemicircles); } // // Atomic region identification // atomicRegions = AtomicRegionIdentifier.AtomicIdentifierMain.GetAtomicRegions(allFigurePoints, circles, polygons); // // This is to ensure that we actually construct all the polygonalized versions of all the atomic regions. // foreach (AtomicRegion atom in atomicRegions) { Polygon poly = atom.GetPolygonalized(); if (Utilities.CONSTRUCTION_DEBUG) { Debug.WriteLine(poly); } } #endif // --- End timing --- stopwatch.Stop(); }
public void ConstructAllImplied() { // // Calculate all the important points of intersection among shapes (as well as Circle-Circle intersections). // ShapeIntersectionCalculator shapeIntCalc = new ShapeIntersectionCalculator(this); List <CircleCircleIntersection> tempCCInter = new List <CircleCircleIntersection>(); shapeIntCalc.CalcCircleCircleIntersections(out tempCCInter); ccIntersections = tempCCInter; // // Generate ALL segment clauses // // Have we done this before? Hard-coded provides collinear relationships. CalculateCollinear(); GenerateSegmentClauses(); // Acquire all of the unlabeled points from the UI drawing. DrawingPointCalculator unlabeledCalc = new DrawingPointCalculator(points, segments, circles); unlabeledPoints = unlabeledCalc.GetUnlabeledPoints(); // Add the implied points to the complete list of points. allFigurePoints.AddRange(unlabeledPoints); // Using only segments, identify all polygons which are implied. PolygonCalculator polyCalc = new PolygonCalculator(segments); polygons = polyCalc.GetPolygons(); shapeIntCalc.CalcCirclePolygonIntersectionPoints(); shapeIntCalc.CalcPolygonPolygonIntersectionPoints(); // Determine what shapes are contained within what other shapes. ShapeContainmentCalculator shapeContainCalc = new ShapeContainmentCalculator(this); shapeContainCalc.CalcCircleCircleContainment(); shapeContainCalc.CalcCirclePolygonContainment(); shapeContainCalc.CalcPolygonPolygonContainment(); // Calculate all (selective) Segment-Segment Intersections CalculateIntersections(); // Find all circle-segment intersection points. // Segments (which are not part of a polygon) may intersect a circle; these are also added to the circle's interesting points. csIntersections = shapeIntCalc.FindCircleSegmentIntersections(); // Find all the angles based on intersections; duplicates are removed. CalculateAngles(); // Identify inscribed and circumscribed situations between a circle and polygon. AnalyzeCirclePolygonInscription(); // Determine which of the UI and implied (intersection) points apply to each circle. // Generates all arc clauses and arcInMiddle clauses. AnalyzeAllCirclePointRelationships(); // // All of the following calculations are used in stating the assumptions (user-defined givens) // CalculateSegmentBisectors(); CalculateAngleBisectors(); // Define in Properties->Build->Compilation Symbols to turn off this section #if !ATOMIC_REGION_OFF List <Sector> localMinorSectors = null; List <Sector> localMajorSectors = null; List <Semicircle> localSemicircles = null; foreach (Circle circle in circles) { circle.ConstructImpliedAreaBasedSectors(out localMinorSectors, out localMajorSectors, out localSemicircles); } // // Atomic region identification // atomicRegions = AtomicRegionIdentifier.AtomicIdentifierMain.GetAtomicRegions(allFigurePoints, circles, polygons); // // This is to ensure that we actually construct all the polygonalized versions of all the atomic regions. // foreach (AtomicRegion atom in atomicRegions) { Polygon poly = atom.GetPolygonalized(); if (Utilities.CONSTRUCTION_DEBUG) { Debug.WriteLine(poly); } } #endif // --- End timing --- stopwatch.Stop(); }