// // Perform a - (b - c) = // 1. a - b // 2. b - c // private static List <FigSynthProblem> ConstructGroupedSubtraction(List <ShapeType> shapes) { // // Construct a - b // Figure defaultLargeFigure = Figure.ConstructDefaultShape(shapes[0]); List <FigSynthProblem> aMinusB = SubtractShape(defaultLargeFigure, shapes[1]); // // For each of the aMinusB problems, the outer bounds is defined by a shape; subtract the new shape. // List <FigSynthProblem> newSynths = new List <FigSynthProblem>(); foreach (FigSynthProblem top in aMinusB) { List <FigSynthProblem> bMinusC = SubtractShape(((top as BinarySynthOperation).rightProblem as UnarySynth).figure, shapes[2]); foreach (FigSynthProblem bc in bMinusC) { newSynths.Add(FigSynthProblem.AppendFigureSubtraction(top, bc)); } } return(newSynths); }
// // (a + b) - c // // First append, then subtract from the entire shape. // private static List <FigSynthProblem> ConstructAppendThenSubtract(List <ShapeType> shapes) { // // Construct a + b // Figure defaultLargeFigure = Figure.ConstructDefaultShape(shapes[0]); List <FigSynthProblem> aPlusB = AddShape(defaultLargeFigure, shapes[1]); // // For each of the aPlusB problems, the outer bounds is defined by the exterior segments / set of points. // List <FigSynthProblem> newSynths = new List <FigSynthProblem>(); foreach (FigSynthProblem top in aPlusB) { Polygon outerPoly = Polygon.MakePolygon(top.GetExteriorSegments()); List <FigSynthProblem> xMinusC = SubtractShape(outerPoly, shapes[2]); foreach (FigSynthProblem x in xMinusC) { newSynths.Add(FigSynthProblem.AppendFigureSubtraction(top, x)); } } return(newSynths); }