/// <inheritdoc /> /// <summary> /// Нарисовать фигуру /// </summary> /// <param name="figure">Рисуемая фигура</param> /// <param name="canvas">Канва</param> public override void DrawFigure(BaseFigure figure, Graphics canvas) { if (figure.Points.GetPoints().Count != 2) { return; } var pen = new Pen(figure.LineProperties.Color, figure.LineProperties.Thickness) { DashStyle = figure.LineProperties.Style }; canvas.DrawLine(pen, figure.Points.GetPoints()[0], figure.Points.GetPoints()[1]); pen.Dispose(); }
/// <summary> /// Обработчик нажатия мышки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseDown(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) { return; } _line = FigureFactory.CreateFigure(ToolType.Line); _line.LineProperties.Color = _figureParameters.LineColor; _line.LineProperties.Style = (DashStyle)_figureParameters.LineStyle; _line.LineProperties.Thickness = _figureParameters.LineThickness; _line.Points.AddPoint(new PointF(e.X, e.Y)); _line.Points.AddPoint(new PointF(e.X, e.Y)); Canvas.Refresh(); }
public void WorkTest() { var line = new Line(new Point(0, 0), new Point(3, 4)); Console.WriteLine(line); var triangle = new Triangle(new Point(0, 0), new Point(3, 0), new Point(0, 4)); var rectangle = new Rectangle(new Point(0, 0), new Point(3, 0), new Point(3, 4), new Point(0, 4)); var circle = new Circle(new Point(0, 0), 5); var figures = new BaseFigure[] { triangle, rectangle, circle }; foreach (var figure in figures) { Console.WriteLine(figure); } }
public void SortByPerimeterTest() { Array.Sort(_figures.BaseFigures, BaseFigure.SortPerimeter()); for (var index = _figures.BaseFigures.Length - 1; index > 0; index--) { if (_figures.BaseFigures[index - 1].Perimeter() > _figures.BaseFigures[index].Perimeter()) { throw new Exception("False"); } } Console.WriteLine("Figures are sorted by perimeter:"); foreach (var figure in _figures) { Console.WriteLine(figure); } }
/// <inheritdoc /> /// <summary> /// Нарисовать фигуру /// </summary> /// <param name="figure">Рисуемая фигура</param> /// <param name="canvas">Канва</param> public override void DrawFigure(BaseFigure figure, Graphics canvas) { var points = figure.Points.GetPoints(); if (points.Count < 2) { return; } var pen = new Pen(figure.LineProperties.Color, figure.LineProperties.Thickness) { DashStyle = figure.LineProperties.Style }; canvas.DrawLines(pen, points.ToArray()); pen.Dispose(); }
//************************************************************************** // Callbacks private void HandleFigureLanded(BaseFigure figure) { bool hasBlocks = false; foreach (BaseBlock block in figure.blocksToAdd) { hasBlocks = true; block.transform.parent = blockContainer; block.HandleLanded(); blocks.Add(block); } if (hasBlocks) { CheckFilledLines(); } SendMessageUpwards(TetrisController.READY_SPAWN_FIGURE); }
/// <summary> /// Обработки отпускания мышки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (_isDraggingSelectionRect) { //Выборка закончилась _isDraggingSelectionRect = false; SelectFiguresInRect(); _isFigurePicked = true; if (_isSelectionEmpty) { _isFigurePicked = false; SelectedFigures.Clear(); _selectedFigure = null; _isSelectionEmpty = false; } } if (_isMouseDown) { if (!IsItMoving(_originalMouseDownPoint, e.Location)) { if (IsPointOnFigure(e.Location)) { SelectedFigures.Clear(); _selectedFigure = _presenter.GetFigures() [GetFigurePointOn(e.Location)]; int index = GetFigurePointOn(e.Location); SelectedFigures.Add(index, _presenter.GetFigures()[index]); _isFigurePicked = true; } else { SelectedFigures.Clear(); _selectedFigure = null; _isFigurePicked = false; } } _isMouseDown = false; } } Canvas.Refresh(); }
/// <summary> /// Получить заливаемую фигуру и его точки /// </summary> /// <param name="inFigure">Фигура на вход</param> /// <param name="outFigure">Заполняемая фигура</param> /// <param name="points">Точки фигуры</param> /// <returns></returns> public static bool GetFillableFigure(BaseFigure inFigure, out FillableFigure outFigure, out IReadOnlyList <PointF> points) { var fillableFigure = inFigure as FillableFigure; if (fillableFigure != null) { outFigure = fillableFigure; points = fillableFigure.Points.GetPoints(); if (points.Count != 2) { return(false); } return(true); } outFigure = null; points = null; return(false); }
/// <summary> /// Обработчик нажатия мышки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseDown(object sender, MouseEventArgs e) { switch (e.Button) { case MouseButtons.Left: if (_polyline == null) { _polyline = FigureFactory.CreateFigure(ToolType.Polyline); _polyline.LineProperties.Color = _figureParameters.LineColor; _polyline.LineProperties.Style = (DashStyle) _figureParameters.LineStyle; _polyline.LineProperties.Thickness = _figureParameters.LineThickness; _polyline.Points.AddPoint(new PointF(e.X, e.Y)); _polyline.Points.AddPoint(new PointF(e.X, e.Y)); Canvas.Refresh(); } else { _polyline.Points.AddPoint(new PointF(e.X, e.Y)); Canvas.Refresh(); } break; case MouseButtons.Right: if (_polyline == null) { return; } OnFigureCreated(_polyline); _polyline = null; break; default: throw new ArgumentOutOfRangeException(); } }
private List <BaseFigure> CreateFigures(Color teamColor, Color32 spriteColor, Board board) { List <BaseFigure> newFigures = new List <BaseFigure>(); for (int i = 0; i < figureOrder.Length; i++) { GameObject newFigure = Instantiate(figurePrefab); newFigure.transform.SetParent(transform); newFigure.transform.localScale = new Vector3(1, 1, 1); newFigure.transform.localRotation = Quaternion.identity; string key = figureOrder[i]; Type figureType = figureLibrary[key]; BaseFigure figure = (BaseFigure)newFigure.AddComponent(figureType); newFigures.Add(figure); figure.Setup(teamColor, spriteColor, this); } return(newFigures); }
/// <summary> /// Обработчик нажатия мышки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseDown(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) { return; } var circle = FigureFactory.CreateFillableFigure(ToolType.Circle) as FillableFigure; if (circle != null) { circle.LineProperties.Color = _figureParameters.LineColor; circle.LineProperties.Style = (DashStyle)_figureParameters.LineStyle; circle.LineProperties.Thickness = _figureParameters.LineThickness; circle.FillProperty.FillColor = _figureParameters.FillColor; _circle = circle; } _circle.Points.AddPoint(new PointF(e.X, e.Y)); _circle.Points.AddPoint(new PointF(e.X, e.Y)); Canvas.Refresh(); }
/// <summary> /// Рисовка маркеров для линии, полилинии, полигона /// </summary> /// <param name="figure">Рисуемая фигура</param> /// <param name="canvas">Канва</param> public static void DrawLineSelection(BaseFigure figure, Graphics canvas) { var points = figure.Points.GetPoints(); CircleDrawer.DrawSelectionRoundShapes(points, canvas); }
/// <inheritdoc /> /// <summary> /// Нарисовать маркеры /// </summary> /// <param name="figure">Рисуемая фигура</param> /// <param name="canvas">Канва</param> public override void DrawSelection(BaseFigure figure, Graphics canvas) { DrawLineSelection(figure, canvas); }
/// <inheritdoc /> /// <summary> /// Удаление фигуры по индексу /// </summary> /// <param name="index">Индекс удаляемой фигуры</param> /// <param name="figure">Фигурa</param> public void DeleteFigureAt(int index, BaseFigure figure) { _figures.Remove(index); HasChanged(); NotifyObservers(); }
/// <summary> /// Рисовка границ и точек /// </summary> /// <param name="figure">Фигура</param> /// <param name="canvas">Канва</param> public abstract void DrawSelection(BaseFigure figure, Graphics canvas);
/// <summary> /// Нарисовать фигуру /// </summary> /// <param name="figure">Рисуемая фигура</param> /// <param name="canvas">Канва</param> public abstract void DrawFigure(BaseFigure figure, Graphics canvas);
public override int GetSurfaceArea() => (int)(BaseFigure.GetArea() * Height * 0.33333333333333);
/// <summary> /// Change the positon with block when king is min available move and king inside in one half /// </summary> /// <param name="figure">Figure instance</param> /// <param name="keyValuePair">The out parametr</param> /// <returns>Reteurn the coordinate and king available move count ande figure</returns> private bool GetMinMovesWithBlockInOneHaalf(BaseFigure figure, out KeyValuePair <CoordinatePoint, (int, BaseFigure)> keyValuePair)
/// <summary> /// Очистить выборку фигур /// </summary> public void ClearSelectedFigures() { SelectedFigures.Clear(); _selectedFigure = null; }
/// <inheritdoc /> /// <summary> /// Добавление фигуры в список фигур /// </summary> /// <param name="index">Индекс фигуры</param> /// <param name="figure">Добавляемая фигура</param> public void AddFigure(int index, BaseFigure figure) { _figures.Add(index, figure); HasChanged(); NotifyObservers(); }
/// <summary> /// Вызов события создания фигуры /// </summary> /// <param name="createdFigure">Созданная фигура</param> private void OnFigureCreated(BaseFigure createdFigure) { var handler = FigureCreated; handler?.Invoke(null, createdFigure); }
//Мышка нажата /// <summary> /// Обработчик события нажатия мышки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (_isFigurePicked && SelectedFigures != null) { if (IsPointOnFigure(e.Location)) { if ((SelectedFigures != null) && SelectedFigures.ContainsKey(GetFigurePointOn(e.Location))) { _selectedFigure = _presenter.GetFigures() [GetFigurePointOn(e.Location)]; //Сохраняем предыдущее состояние BeforeState?.Clear(); foreach (var figure in SelectedFigures) { if (!_presenter.GetFigures().Contains(figure)) { continue; } var index = figure.Key; BeforeState?.Add(index, FigureFactory.CreateCopy(figure.Value)); } MouseMoveDelegate -= MouseMoveSelecting; MouseMoveDelegate += MouseMoveFigure; MouseUpDelegate += MouseUpFigure; _offsetX = _selectedFigure.Points.GetPoints()[0].X - e.X; _offsetY = _selectedFigure.Points.GetPoints()[0].Y - e.Y; } } else if (IsPointOnMarker(e.Location, out _pickedPoint)) { MouseMoveDelegate -= MouseMoveSelecting; MouseMoveDelegate += MouseMoveMarker; MouseUpDelegate += MouseUpMarker; BeforePointState?.Clear(); foreach (var figure in _presenter.GetFigures()) { if (figure.Key != _pickedFigureIndex) { continue; } _oldFigureIndex = figure.Key; BeforePointState?.Add(_oldFigureIndex, FigureFactory.CreateCopy(figure.Value)); } _offsetX = _pickedPoint.X - e.X; _offsetY = _pickedPoint.Y - e.Y; } else { _isMouseDown = true; } } else { _isMouseDown = true; } _originalMouseDownPoint = e.Location; } }
/// <summary> /// Calculate square of specified figure. /// </summary> /// <param name="figure">Figure.</param> /// <returns>Figure square.</returns> public virtual double Calculate(BaseFigure figure) { // NOTE: used solution found here: // https://natalibrilenova.ru/blog/1303-formula-grina-ploschad-ploskoy-oblasti-massa-krivoy-ploschad-cilindricheskoy-poverhnosti.html return(0.5 * figure.Segments.Select(f => f.CalculateIntegralValue()).Sum()); }
/// <summary> /// Конструктор класса команды добавления фигуры /// </summary> /// <param name="model">Модель</param> /// <param name="figure">Фигура для добавления</param> /// <param name="index">Индекс</param> public AddFigureCommand(IModel model, BaseFigure figure, int index) { Model = model; _figure = figure; Index = index; }