/* Reflect all the figures and groups in the scene.*/ public void ReflectScene(ReflectOrientation reflectOrientation) { SceneRectangle sceneRectangle = CalculateSceneCircumscribingRectangle(); var pointSceneCenter = new ScenePoint { X = (sceneRectangle.Vertex1.X + sceneRectangle.Vertex2.X) / 2.0, Y = (sceneRectangle.Vertex1.Y + sceneRectangle.Vertex2.Y) / 2.0 }; foreach (var figure in _figures) { var points = figure.Value.Points; GeneralMethodsFigure.ReflectFigure(reflectOrientation, pointSceneCenter, ref points); figure.Value.Points = points; } foreach (var composite in _compositeFigures) { foreach (var compositeFigures in composite.Value.ChildFigures) { var points = compositeFigures.Points; GeneralMethodsFigure.ReflectFigure(reflectOrientation, pointSceneCenter, ref points); compositeFigures.Points = points; } } }
/* Calculate the rectangle that wraps figure or group 'name'*/ public SceneRectangle CalculateCircumscribingRectangle(string name) { IFigure figure; ICompositeFigure compositeFigure; if (_figures.TryGetValue(name, out figure)) { var point1 = new ScenePoint { X = figure.CalculateCircumscribingRectangle().Vertex1.X, Y = figure.CalculateCircumscribingRectangle().Vertex1.Y, }; var point2 = new ScenePoint { X = figure.CalculateCircumscribingRectangle().Vertex2.X, Y = figure.CalculateCircumscribingRectangle().Vertex2.Y, }; var ñircumscribingRectangle = new SceneRectangle { Vertex1 = point1, Vertex2 = point2 }; return(ñircumscribingRectangle); } else if (_compositeFigures.TryGetValue(name, out compositeFigure)) { var point1 = new ScenePoint { X = compositeFigure.CalculateCircumscribingRectangle().Vertex1.X, Y = compositeFigure.CalculateCircumscribingRectangle().Vertex1.Y, }; var point2 = new ScenePoint { X = compositeFigure.CalculateCircumscribingRectangle().Vertex2.X, Y = compositeFigure.CalculateCircumscribingRectangle().Vertex2.Y, }; var ñircumscribingRectangle = new SceneRectangle { Vertex1 = point1, Vertex2 = point2 }; return(ñircumscribingRectangle); } else { throw new BadName(); } }
public SceneRectangle CalculateSceneCircumscribingRectangle() { var arrayX = new SortedSet <double>(); var arrayY = new SortedSet <double>(); foreach (var figure in _figures) { SceneRectangle figureSceneRectangle = figure.Value.CalculateCircumscribingRectangle(); var ñircRectangle = new SceneRectangle { Vertex1 = figureSceneRectangle.Vertex1, Vertex2 = figureSceneRectangle.Vertex2 }; arrayX.Add(ñircRectangle.Vertex1.X); arrayX.Add(ñircRectangle.Vertex2.X); arrayY.Add(ñircRectangle.Vertex1.Y); arrayY.Add(ñircRectangle.Vertex2.Y); } foreach (var compositeFigure in _compositeFigures) { var ñircRectangle = new SceneRectangle { Vertex1 = compositeFigure.Value.CalculateCircumscribingRectangle().Vertex1, Vertex2 = compositeFigure.Value.CalculateCircumscribingRectangle().Vertex2 }; arrayX.Add(ñircRectangle.Vertex1.X); arrayX.Add(ñircRectangle.Vertex2.X); arrayY.Add(ñircRectangle.Vertex1.Y); arrayY.Add(ñircRectangle.Vertex2.Y); } var ñircumscribingRectangle = new SceneRectangle { Vertex1 = new ScenePoint { X = arrayX.Min, Y = arrayY.Max }, Vertex2 = new ScenePoint { X = arrayX.Max, Y = arrayY.Min } }; return(ñircumscribingRectangle); }