コード例 #1
0
ファイル: LineDrawer.cs プロジェクト: gelcen/VectorEditor
        /// <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();
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        /// <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();
        }
コード例 #6
0
    //**************************************************************************
    // 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);
    }
コード例 #7
0
ファイル: CursorHandler.cs プロジェクト: gelcen/VectorEditor
 /// <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();
 }
コード例 #8
0
        /// <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);
        }
コード例 #9
0
        /// <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();
            }
        }
コード例 #10
0
    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);
    }
コード例 #11
0
ファイル: CircleHandler.cs プロジェクト: gelcen/VectorEditor
        /// <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();
        }
コード例 #12
0
ファイル: LineDrawer.cs プロジェクト: gelcen/VectorEditor
        /// <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);
        }
コード例 #13
0
ファイル: LineDrawer.cs プロジェクト: gelcen/VectorEditor
 /// <inheritdoc />
 /// <summary>
 /// Нарисовать маркеры
 /// </summary>
 /// <param name="figure">Рисуемая фигура</param>
 /// <param name="canvas">Канва</param>
 public override void DrawSelection(BaseFigure figure, Graphics canvas)
 {
     DrawLineSelection(figure, canvas);
 }
コード例 #14
0
 /// <inheritdoc />
 /// <summary>
 /// Удаление фигуры по индексу
 /// </summary>
 /// <param name="index">Индекс удаляемой фигуры</param>
 /// <param name="figure">Фигурa</param>
 public void DeleteFigureAt(int index, BaseFigure figure)
 {
     _figures.Remove(index);
     HasChanged();
     NotifyObservers();
 }
コード例 #15
0
 /// <summary>
 /// Рисовка границ и точек
 /// </summary>
 /// <param name="figure">Фигура</param>
 /// <param name="canvas">Канва</param>
 public abstract void DrawSelection(BaseFigure figure, Graphics canvas);
コード例 #16
0
 /// <summary>
 /// Нарисовать фигуру
 /// </summary>
 /// <param name="figure">Рисуемая фигура</param>
 /// <param name="canvas">Канва</param>
 public abstract void DrawFigure(BaseFigure figure, Graphics canvas);
コード例 #17
0
 public override int GetSurfaceArea() => (int)(BaseFigure.GetArea() * Height * 0.33333333333333);
コード例 #18
0
 /// <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)
コード例 #19
0
ファイル: CursorHandler.cs プロジェクト: gelcen/VectorEditor
 /// <summary>
 /// Очистить выборку фигур
 /// </summary>
 public void ClearSelectedFigures()
 {
     SelectedFigures.Clear();
     _selectedFigure = null;
 }
コード例 #20
0
 /// <inheritdoc />
 /// <summary>
 /// Добавление фигуры в список фигур
 /// </summary>
 /// <param name="index">Индекс фигуры</param>
 /// <param name="figure">Добавляемая фигура</param>
 public void AddFigure(int index, BaseFigure figure)
 {
     _figures.Add(index, figure);
     HasChanged();
     NotifyObservers();
 }
コード例 #21
0
        /// <summary>
        /// Вызов события создания фигуры
        /// </summary>
        /// <param name="createdFigure">Созданная фигура</param>
        private void OnFigureCreated(BaseFigure createdFigure)
        {
            var handler = FigureCreated;

            handler?.Invoke(null, createdFigure);
        }
コード例 #22
0
ファイル: CursorHandler.cs プロジェクト: gelcen/VectorEditor
        //Мышка нажата
        /// <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;
            }
        }
コード例 #23
0
 /// <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());
 }
コード例 #24
0
 /// <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;
 }