/// <summary>
 /// Initialize new instance of <see cref="ToolQuadraticBezierSelection"/> class.
 /// </summary>
 /// <param name="layer">The selection shapes layer.</param>
 /// <param name="shape">The selected shape.</param>
 /// <param name="style">The selection shapes style.</param>
 /// <param name="point">The selection point shape.</param>
 public ToolQuadraticBezierSelection(LayerContainer layer, IQuadraticBezier shape, ShapeStyle style, BaseShape point)
 {
     _layer           = layer;
     _quadraticBezier = shape;
     _style           = style;
     _point           = point;
 }
Пример #2
0
 private void Process(IQuadraticBezier quadraticBezier)
 {
     quadraticBezier.Id = NextId();
     Process(quadraticBezier.Start);
     Process(quadraticBezier.Point1);
     Process(quadraticBezier.Point2);
 }
Пример #3
0
        public WpfQuadraticBezier(IQuadraticBezier qb)
        {
            _xqb = qb;

            _fillBrush = new SolidColorBrush(_xqb.Fill.ToNativeColor());
            _fillBrush.Freeze();
            _strokeBrush = new SolidColorBrush(_xqb.Stroke.ToNativeColor());
            _strokeBrush.Freeze();

            _path                 = new Path();
            _path.Tag             = this;
            _path.Fill            = _fillBrush;
            _path.Stroke          = _strokeBrush;
            _path.StrokeThickness = qb.StrokeThickness;
            _pg            = new PathGeometry();
            _pf            = new PathFigure();
            _pf.StartPoint = new Point(qb.Start.X, qb.Start.Y);
            _pf.IsFilled   = qb.IsFilled;
            _pf.IsClosed   = qb.IsClosed;
            _qbs           = new QuadraticBezierSegment();
            _qbs.Point1    = new Point(qb.Point1.X, qb.Point1.Y);
            _qbs.Point2    = new Point(qb.Point2.X, qb.Point2.Y);
            _pf.Segments.Add(_qbs);
            _pg.Figures.Add(_pf);
            _path.Data = _pg;

            Native = _path;
        }
Пример #4
0
        private void Render(Canvas canvas, IQuadraticBezier quadraticBezier)
        {
            var paint = new Paint()
            {
                Color       = ToNativeColor(quadraticBezier.Stroke),
                StrokeWidth = (float)quadraticBezier.StrokeThickness,
                AntiAlias   = true,
                StrokeCap   = Paint.Cap.Butt
            };

            paint.SetStyle(Paint.Style.Stroke);

            var path = new Path();

            path.SetLastPoint(
                (float)quadraticBezier.Start.X,
                (float)quadraticBezier.Start.Y);
            path.QuadTo(
                (float)quadraticBezier.Point1.X,
                (float)quadraticBezier.Point1.Y,
                (float)quadraticBezier.Point2.X,
                (float)quadraticBezier.Point2.Y);

            canvas.DrawPath(path, paint);

            path.Dispose();
            paint.Dispose();
        }
Пример #5
0
 private void Reset(IQuadraticBezier quadraticBezier)
 {
     quadraticBezier.Id = 0;
     Reset(quadraticBezier.Start);
     Reset(quadraticBezier.Point1);
     Reset(quadraticBezier.Point2);
 }
Пример #6
0
 /// <summary>
 /// Initialize new instance of <see cref="QuadraticBezierSelection"/> class.
 /// </summary>
 /// <param name="layer">The selection shapes layer.</param>
 /// <param name="shape">The selected shape.</param>
 /// <param name="style">The selection shapes style.</param>
 /// <param name="point">The selection point shape.</param>
 public QuadraticBezierSelection(XLayer layer, IQuadraticBezier shape, ShapeStyle style, BaseShape point)
 {
     _layer = layer;
     _quadraticBezier = shape;
     _style = style;
     _point = point;
 }
Пример #7
0
 private void Write(IQuadraticBezier quadraticBezier)
 {
     Write(NativeType.QuadraticBezier);
     _writer.Write(quadraticBezier.Id);
     Write(quadraticBezier.Start);
     Write(quadraticBezier.Point1);
     Write(quadraticBezier.Point2);
     Write(quadraticBezier.Stroke);
     _writer.Write(quadraticBezier.StrokeThickness);
     Write(quadraticBezier.Fill);
     _writer.Write(quadraticBezier.IsFilled);
     _writer.Write(quadraticBezier.IsClosed);
 }
 public IQuadraticBezier Convert(IQuadraticBezier quadraticBezier)
 {
     return(new XQuadraticBezier()
     {
         Start = Convert(quadraticBezier.Start),
         Point1 = Convert(quadraticBezier.Point1),
         Point2 = Convert(quadraticBezier.Point2),
         Stroke = Convert(quadraticBezier.Stroke),
         StrokeThickness = quadraticBezier.StrokeThickness,
         Fill = Convert(quadraticBezier.Fill),
         IsFilled = quadraticBezier.IsFilled,
         IsClosed = quadraticBezier.IsClosed
     });
 }
Пример #9
0
 private void Process(IQuadraticBezier quadraticBezier)
 {
     quadraticBezier.Id = NextId();
     Process(quadraticBezier.Start);
     Process(quadraticBezier.Point1);
     Process(quadraticBezier.Point2);
 }
Пример #10
0
 private void Write(IQuadraticBezier quadraticBezier)
 {
     Write(NativeType.QuadraticBezier);
     _writer.Write(quadraticBezier.Id);
     Write(quadraticBezier.Start);
     Write(quadraticBezier.Point1);
     Write(quadraticBezier.Point2);
     Write(quadraticBezier.Stroke);
     _writer.Write(quadraticBezier.StrokeThickness);
     Write(quadraticBezier.Fill);
     _writer.Write(quadraticBezier.IsFilled);
     _writer.Write(quadraticBezier.IsClosed);
 }
Пример #11
0
 public IQuadraticBezier Convert(IQuadraticBezier quadraticBezier)
 {
     return quadraticBezier;
 }
Пример #12
0
 public IQuadraticBezier Convert(IQuadraticBezier quadraticBezier)
 {
     return(quadraticBezier);
 }
Пример #13
0
        public WpfQuadraticBezier(IQuadraticBezier qb)
        {
            _xqb = qb;

            _fillBrush = new SolidColorBrush(_xqb.Fill.ToNativeColor());
            _fillBrush.Freeze();
            _strokeBrush = new SolidColorBrush(_xqb.Stroke.ToNativeColor());
            _strokeBrush.Freeze();

            _path = new Path();
            _path.Tag = this;
            _path.Fill = _fillBrush;
            _path.Stroke = _strokeBrush;
            _path.StrokeThickness = qb.StrokeThickness;
            _pg = new PathGeometry();
            _pf = new PathFigure();
            _pf.StartPoint = new Point(qb.Start.X, qb.Start.Y);
            _pf.IsFilled = qb.IsFilled;
            _pf.IsClosed = qb.IsClosed;
            _qbs = new QuadraticBezierSegment();
            _qbs.Point1 = new Point(qb.Point1.X, qb.Point1.Y);
            _qbs.Point2 = new Point(qb.Point2.X, qb.Point2.Y);
            _pf.Segments.Add(_qbs);
            _pg.Figures.Add(_pf);
            _path.Data = _pg;

            Native = _path;
        }
 public IQuadraticBezier Convert(IQuadraticBezier quadraticBezier)
 {
     return(new WpfQuadraticBezier(quadraticBezier));
 }
Пример #15
0
        public XQuadraticBezierEditor(
            INativeConverter nativeConverter, 
            ICanvasFactory canvasFactory,
            IBoundsFactory boundsFactory,
            ICanvas canvas)
        {
            _canvas = canvas;

            Name = "Quadratic Bézier";
            Key = "Q";
            Modifiers = "";

            var moves = _canvas.Moves.Where(_ => _canvas.IsCaptured);
            var drags = Observable.Merge(_canvas.Downs, _canvas.Ups, moves);

            _downs = _canvas.Downs.Where(_ => IsEnabled).Subscribe(p =>
            {
                if (_canvas.IsCaptured)
                {
                    switch (_state)
                    {
                        case State.Start:
                            {
                                //_xqb.Point2.X = p.X;
                                //_xqb.Point2.Y = p.Y;
                                //_nqb.Point2 = _xqb.Point2;
#if CONNECTORS
                                ConnectPoint2(p);
#endif
                                _nqb.Bounds.Update();
                                _canvas.Render(null);
                                _state = State.Point1;
                            }
                            break;
                        case State.Point1:
                            {
                                //_xqb.Point1.X = p.X;
                                //_xqb.Point1.Y = p.Y;
                                //_nqb.Point1 = _xqb.Point1;
#if CONNECTORS
                                ConnectPoint1(p);
#endif
                                _nqb.Bounds.Hide();
                                _canvas.Render(null);
                                _state = State.None;
                                _canvas.ReleaseCapture();
                            }
                            break;
                    }
                }
                else
                {
                    _xqb = canvasFactory.CreateQuadraticBezier();
                    _xqb.Start.X = p.X;
                    _xqb.Start.Y = p.Y;
                    _xqb.Point1.X = p.X;
                    _xqb.Point1.Y = p.Y;
                    _xqb.Point2.X = p.X;
                    _xqb.Point2.Y = p.Y;
                    _nqb = nativeConverter.Convert(_xqb);
                    _canvas.History.Snapshot(_canvas);
#if CONNECTORS
                    ConnectStart(p);
#endif
                    _canvas.Add(_nqb);
                    _nqb.Bounds = boundsFactory.Create(_canvas, _nqb);
                    _nqb.Bounds.Update();
                    _nqb.Bounds.Show();
                    _canvas.Render(null);
                    _canvas.Capture();
                    _state = State.Start;
                }
            });

            _drags = drags.Where(_ => IsEnabled).Subscribe(p =>
            {
                switch (_state)
                {
                    case State.Start:
                        {
                            _xqb.Point2.X = p.X;
                            _xqb.Point2.Y = p.Y;
                            _nqb.Point2 = _xqb.Point2;
                            _nqb.Bounds.Update();
                            _canvas.Render(null);
                        }
                        break;
                    case State.Point1:
                        {
                            _xqb.Point1.X = p.X;
                            _xqb.Point1.Y = p.Y;
                            _nqb.Point1 = _xqb.Point1;
                            _nqb.Bounds.Update();
                            _canvas.Render(null);
                        }
                        break;
                }
            });
        }
Пример #16
0
        private void DrawQuadraticBezier(XGraphics gfx, IQuadraticBezier quadraticBezier)
        {
            double x1 = quadraticBezier.Start.X;
            double y1 = quadraticBezier.Start.Y;
            double x2 = quadraticBezier.Start.X + (2.0 * (quadraticBezier.Point1.X - quadraticBezier.Start.X)) / 3.0;
            double y2 = quadraticBezier.Start.Y + (2.0 * (quadraticBezier.Point1.Y - quadraticBezier.Start.Y)) / 3.0;
            double x3 = x2 + (quadraticBezier.Point2.X - quadraticBezier.Start.X) / 3.0;
            double y3 = y2 + (quadraticBezier.Point2.Y - quadraticBezier.Start.Y) / 3.0;
            double x4 = quadraticBezier.Point2.X;
            double y4 = quadraticBezier.Point2.Y;

            var pen = new XPen(
                ToXColor(quadraticBezier.Stroke),
                X(quadraticBezier.StrokeThickness));

            gfx.DrawBezier(pen,
                X(x1), Y(y1),
                X(x2), Y(y2),
                X(x3), Y(y3),
                X(x4), Y(y4));
        }
Пример #17
0
 public IQuadraticBezier Convert(IQuadraticBezier quadraticBezier)
 {
     return new WpfQuadraticBezier(quadraticBezier);
 }
Пример #18
0
 private void Reset(IQuadraticBezier quadraticBezier)
 {
     quadraticBezier.Id = 0;
     Reset(quadraticBezier.Start);
     Reset(quadraticBezier.Point1);
     Reset(quadraticBezier.Point2);
 }
Пример #19
0
        public QuadraticBezierBounds(
            INativeConverter nativeConverter,
            ICanvasFactory canvasFactory,
            ICanvas canvas,
            IQuadraticBezier quadraticBezier,
            double size,
            double offset)
        {
            _quadraticBezier = quadraticBezier;
            _size = size;
            _offset = offset;
            _canvas = canvas;

            InitBounds(nativeConverter, canvasFactory);
        }
Пример #20
0
 public IBounds Create(ICanvas canvas, IQuadraticBezier quadraticBezier)
 {
     return new QuadraticBezierBounds(
         _nativeConverter,
         _canvasFactory,
         canvas,
         quadraticBezier,
         15.0,
         0.0);
 }