コード例 #1
0
 public EditorState(IChangeDrawingState subject)
 {
     _subject       = subject;
     StartAction    = new EditorAction((MouseDownPosition) => { });
     ContinueAction = new EditorAction((currentMousePosition) => { });
     FinishAction   = new EditorAction((mouseUpPostion) => { });
     _subject.IsOperationInProcess = true;
     _captureMouse = true;
 }
コード例 #2
0
            public RegularTriangleDrawingState(IChangeDrawingState subject) : base(subject)
            {
                _startDrawing3PointBase = _startActions[2];
                _startActions[2]        = (mouseDownPosition) =>
                {
                    _startDrawing3PointBase(RegularTriangle3Point(_trianglePoints, mouseDownPosition));
                };

                _continueDrawing3PointBase = _continueActions[3];
                _continueActions[3]        = (mouseDownPosition) =>
                {
                    _continueDrawing3PointBase(RegularTriangle3Point(_trianglePoints, mouseDownPosition));
                };
            }
コード例 #3
0
            public TriangleDrawingState(IChangeDrawingState subject) : base(subject)
            {
                _trianglePoints = new PointCollection();

                _startActions = new Dictionary <int, EditorAction>(2);

                _startActions[0] = (mouseDownPosition) =>
                {
                    var polyline = new Polyline();
                    (_subject.CurrentImage.Child as Canvas).Children.Add(polyline);
                    _subject.CurrentFigure = polyline;
                    _trianglePoints        = new PointCollection();
                    _trianglePoints.Add(mouseDownPosition);
                    (_subject.CurrentFigure as Polyline).Points = _trianglePoints;
                };
                _startActions[2] = (mouseDownPosition) =>
                {
                    _trianglePoints.Add(mouseDownPosition);
                    var triangle = new Polygon()
                    {
                        Focusable = true
                    };
                    triangle.Points = _trianglePoints;
                    var image = _subject.CurrentImage.Child as Canvas;
                    Canvas.SetTop(triangle, 0);
                    Canvas.SetLeft(triangle, 0);
                    image.Children.Remove(_subject.CurrentFigure);
                    image.Children.Add(triangle);
                    _subject.CurrentFigure = triangle;
                };
                StartAction = (mouseDownPosition) =>
                {
                    if (_subject.CurrentImage == null)
                    {
                        return;
                    }
                    _startActions[_trianglePoints.Count](mouseDownPosition);
                };

                _continueActions = new Dictionary <int, EditorAction>(3);

                _continueActions[1] = (currentCursorPosition) =>
                {
                    (_subject.CurrentFigure as Polyline).Points.Add(currentCursorPosition);
                };
                _continueActions[2] = (currentCursorPosition) =>
                {
                    (_subject.CurrentFigure as Polyline).Points[1] = currentCursorPosition;
                };
                _continueActions[3] = (currentCursorPosition) =>
                {
                    (_subject.CurrentFigure as Polygon).Points[2] = currentCursorPosition;
                };
                ContinueAction = (currentCursorPosition) =>
                {
                    if (_subject.CurrentImage == null)
                    {
                        return;
                    }
                    _continueActions[_trianglePoints.Count](currentCursorPosition);
                };

                FinishAction = (mouseUpPosition) =>
                {
                    if (_subject.CurrentImage == null)
                    {
                        return;
                    }
                    if (_trianglePoints.Count == 3)
                    {
                        if (PositionOfPointYToLineBySegment(_trianglePoints[0], _trianglePoints[1], _trianglePoints[2]) == 0)
                        {
                            (_subject.CurrentImage.Child as Canvas).Children.Remove(_subject.CurrentFigure);
                            _subject.CurrentFigure = null;
                        }
                        Reset();
                    }
                };
            }
コード例 #4
0
            public ImageDrawingState(IChangeDrawingState subject) : base(subject)
            {
                _firstPoint = new Point();

                StartAction = (Point mouseDownPosition) =>
                {
                    _firstPoint = mouseDownPosition;
                    _image      = new Border()
                    {
                        Height     = 0,
                        Width      = 0,
                        Background = Brushes.Transparent
                    };

                    Canvas.SetLeft(_image, mouseDownPosition.X);
                    Canvas.SetTop(_image, mouseDownPosition.Y);
                    _subject.Canvas.Children.Add(_image);
                    _subject.CurrentImage = _image;
                };

                ContinueAction = (Point currentCursorPosition) =>
                {
                    double width  = currentCursorPosition.X - _firstPoint.X;
                    double height = currentCursorPosition.Y - _firstPoint.Y;
                    if (width >= 0)
                    {
                        _image.Width = width;
                    }
                    else
                    {
                        _image.Width = Math.Abs(width);
                        Canvas.SetLeft(_image, _firstPoint.X + width);
                    }
                    if (height >= 0)
                    {
                        _image.Height = height;
                    }
                    else
                    {
                        _image.Height = Math.Abs(height);
                        Canvas.SetTop(_image, _firstPoint.Y + height);
                    }
                };

                FinishAction = (mouseUpPosition) =>
                {
                    if (_image.Width == 0 || _image.Height == 0 ||
                        _image.BorderThickness.Left + _image.BorderThickness.Right >= _image.Width ||
                        _image.BorderThickness.Top + _image.BorderThickness.Bottom >= _image.Height)
                    {
                        _subject.Canvas.Children.Remove(_image);
                        _subject.CurrentImage = null;
                    }
                    else
                    {
                        _image.Child = new Canvas()
                        {
                            Width            = _image.Width - _image.BorderThickness.Left - _image.BorderThickness.Right,
                            Height           = _image.Height - _image.BorderThickness.Top - _image.BorderThickness.Bottom,
                            Background       = _subject.Canvas.Background,
                            ClipToBounds     = true,
                            IsHitTestVisible = true
                        };
                        _subject.FireCurrentElementsEvents(CurrentElement.Image);
                    }
                    Reset();
                };
            }