Example #1
0
 void AddPoint(Point pt, IBrush brush, double radius, float?pressure = null)
 {
     _points[_index] = new CanvasPoint {
         Point = pt, Brush = brush, Radius = radius, Pressure = pressure
     };
     _index = (_index + 1) % _points.Length;
 }
Example #2
0
 /// <summary>
 /// Clears the state maintained by <see cref="LineMode"/>
 /// </summary>
 public override void Reset()
 {
     ActiveLine   = null;
     ActiveVertex = null;
     Marker       = null;
     base.Reset();
 }
Example #3
0
 public void DrawBitmap(IBitmap bitmap, CanvasPoint point)
 {
     _canvas?.DrawBitmap((SKBitmap)bitmap.EngineElement, point.ToSKPoint(), new SKPaint()
     {
         FilterQuality = this.InterpolationMode.ToSKFilterQuality(),
     });
 }
Example #4
0
        public NodeViewModel(Node node, Vector location, IControlTypesResolver controlTypesResolver)
        {
            Node                 = node;
            Title                = node.Title;
            Location             = new CanvasPoint(location);
            ControlTypesResolver = controlTypesResolver;

            foreach (var pin in node.InputPins)
            {
                AddInputPin(pin);
            }

            foreach (var pin in node.OutputPins)
            {
                AddOutputPin(pin);
            }

            node.Processed   += OnNodeProcessed;
            node.PinsChanged += OnNodePinsChanged;

            _disposable = Disposable.Create(() =>
            {
                node.PinsChanged -= OnNodePinsChanged;
                node.Processed   -= OnNodeProcessed;
            });
        }
Example #5
0
        public void DrawText(string text, IFont font, IBrush brush, CanvasPoint point, IDrawTextFormat format)
        {
            var skPoint = point.ToSKPoint();
            var skPaint = GetSKPaint(font, (SKPaint)brush.EngineElement, format, ref text, ref skPoint);

            DrawMultilineText(text, skPoint, skPaint);
        }
Example #6
0
        public NodeViewModel(Node node, Vector location, IControlTypesResolver controlTypesResolver)
        {
            Node = node;
            Title = node.Title;
            Location = new CanvasPoint(location);
            ControlTypesResolver = controlTypesResolver;

            foreach (var pin in node.InputPins)
            {
                AddInputPin(pin);
            }

            foreach (var pin in node.OutputPins)
            {
                AddOutputPin(pin);
            }

            node.Processed += OnNodeProcessed;
            node.PinsChanged += OnNodePinsChanged;

            _disposable = Disposable.Create(() =>
            {
                node.PinsChanged -= OnNodePinsChanged;
                node.Processed -= OnNodeProcessed;
            });
        }
        public CanvasPoint BeginRelinkage(PinViewModel pinViewModel)
        {
            _currentUnfinishedLink = _linkViewModels.First(model => model.TargetPinViewModel == pinViewModel);
            _currentUnfinishedLink.TargetPinViewModel = null;
            var canvasPoint = new CanvasPoint();

            _currentUnfinishedLink.EndPoint = canvasPoint;
            return(canvasPoint);
        }
Example #8
0
 public Vector(double _x, double _y, int xi, int yi)
 {
     SortMode   = 1;
     X          = _x;
     Y          = _y;
     Alternates = new CanvasPoint {
         DotIndexLeft = xi, DotIndexTop = yi, ValueX = _x, ValueY = _y
     };
 }
Example #9
0
 public void AddPoint(CanvasPoint p)
 {
     if (_path.PointCount == 0)
     {
         _startFigure = false;
         _path.MoveTo(p.ToSKPoint());
     }
     else
     {
         _path.LineTo(p.ToSKPoint());
     }
 }
Example #10
0
        public void LeftMouseDownEventHandler(CanvasPoint mouseCoordinate)
        {
            if (!ViewModelMediator.MovingMode && ViewModelMediator.SelectedShapeType == ShapeType.FreeHand)
            {
                ViewModelMediator.RaiseViewModelEvent(this, ViewModelMediator.ViewModelEvent.DrawingStarted);
                drawn = false;  // new drawing started
                ShapeViewModel shapeVM = CreateShapeVM();
                if (shapeVM.Shape is Polyline polyLine)
                {
                    polyLine.Points.Add(new System.Windows.Point(mouseCoordinate.AbsolutePoint.X, mouseCoordinate.AbsolutePoint.Y));
                }

                Shapes.Add(shapeVM);
            }
        }
Example #11
0
        public PinViewModel(NodeViewModel nodeViewModel, IPin pin, IControlTypesResolver controlTypesResolver)
        {
            ControlTypesResolver = controlTypesResolver;
            NodeViewModel = nodeViewModel;
            Pin = pin;
            Name = pin.Name;
            Type = pin.Type;
            Point = new CanvasPoint();

            var changablePin = pin as INotifyPropertyChanged;
            if (changablePin != null)
            {
                changablePin.PropertyChanged += OnPinPropertyChanged;
                _disposable = Disposable.Create(() => changablePin.PropertyChanged -= OnPinPropertyChanged);
            }

            UpdateValue();
        }
Example #12
0
        public PinViewModel(NodeViewModel nodeViewModel, IPin pin, IControlTypesResolver controlTypesResolver)
        {
            ControlTypesResolver = controlTypesResolver;
            NodeViewModel        = nodeViewModel;
            Pin   = pin;
            Name  = pin.Name;
            Type  = pin.Type;
            Point = new CanvasPoint();

            var changablePin = pin as INotifyPropertyChanged;

            if (changablePin != null)
            {
                changablePin.PropertyChanged += OnPinPropertyChanged;
                _disposable = Disposable.Create(() => changablePin.PropertyChanged -= OnPinPropertyChanged);
            }

            UpdateValue();
        }
Example #13
0
        /// <summary>
        /// Moves the <see cref="ActiveVertex"/> or <see cref="Marker"/>
        /// </summary>
        public override void OnMouseMove(MouseEventArgs e, Keys modifierKeys)
        {
            base.OnMouseMove(e, modifierKeys);
            var location = Canvas.SnapToInterval ? e.Location.Snap(Canvas.SnapInterval) : e.Location;

            if (ActiveVertex != null)
            {
                ActiveVertex.MoveTo(location, modifierKeys);
                Marker = null;
            }
            else
            {
                if (Marker == null)
                {
                    Marker = new CanvasPoint();
                }
                Marker.MoveTo(location, modifierKeys);
            }
            Invalidate();
        }
Example #14
0
        public void LeftMouseUpEventHandler(CanvasPoint mouseCoordinate)
        {
            if (!ViewModelMediator.MovingMode && ViewModelMediator.SelectedShapeType != ShapeType.FreeHand)
            {
                if (firstPoint == null)
                {
                    ViewModelMediator.RaiseViewModelEvent(this, ViewModelMediator.ViewModelEvent.DrawingStarted);
                    drawn = false;  // new drawing started
                    ShapeViewModel shapeVM = CreateShapeVM();
                    firstPoint = mouseCoordinate.AbsolutePoint;

                    if (shapeVM.Shape is Line line)
                    {
                        line.X1 = firstPoint.X;
                        line.Y1 = firstPoint.Y;
                        line.X2 = firstPoint.X;
                        line.Y2 = firstPoint.Y;
                        Shapes.Add(shapeVM);
                    }
                    else
                    {
                        shapeVM.Shape.Width           = 0;
                        shapeVM.Shape.Height          = 2;
                        shapeVM.Shape.RenderTransform = new TranslateTransform(firstPoint.X, firstPoint.Y);
                        Shapes.Add(shapeVM);

                        ShapeViewModel tempLineVM = CreateShapeVM(ShapeType.Line);
                        Line           tempLine   = tempLineVM.Shape as Line;
                        tempLine.X1 = firstPoint.X;
                        tempLine.Y1 = firstPoint.Y;
                        tempLine.X2 = firstPoint.X;
                        tempLine.Y2 = firstPoint.Y;
                        Shapes.Add(tempLineVM);
                    }
                }
                else if (secondPoint == null)
                {
                    secondPoint = mouseCoordinate.AbsolutePoint;
                    if (ViewModelMediator.SelectedShapeType == ShapeType.Line)
                    {
                        Shape shape = Shapes.Last().Shape;
                        (shape as Line).X2 = secondPoint.X;
                        (shape as Line).Y2 = secondPoint.Y;
                        drawn      = true;
                        firstPoint = secondPoint = null;
                        ViewModelMediator.RaiseViewModelEvent(this,
                                                              ViewModelMediator.ViewModelEvent.DrawingEnded);
                    }
                    else
                    {
                        Shapes.Remove(Shapes.Last());
                        Shape shape  = Shapes.Last().Shape;
                        var   angle  = Math.Atan((secondPoint.Y - firstPoint.Y) / (secondPoint.X - firstPoint.X));
                        var   rotate = new RotateTransform(angle * 180 / 3.14);
                        rotate.CenterX        = (firstPoint.X + secondPoint.X) / 2;
                        rotate.CenterY        = (firstPoint.Y + secondPoint.Y) / 2;
                        shape.RenderTransform = rotate;
                    }
                }
                else
                {
                    drawn      = true;
                    firstPoint = secondPoint = null;
                    ViewModelMediator.RaiseViewModelEvent(this,
                                                          ViewModelMediator.ViewModelEvent.DrawingEnded);
                }
            }
        }
Example #15
0
 static public Point ToGdiPoint(this CanvasPoint canvasPoint)
 {
     return(new Point(canvasPoint.X, canvasPoint.Y));
 }
Example #16
0
        private void DrawCanvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            CanvasPoint p = CoordHelper.TranslateFromMouse(CanvasWrapper.Config, e.GetPosition(drawCanvas).X, e.GetPosition(drawCanvas).Y);

            if (activeMode == TOOL_MODE_POINT)
            {
                EventBus.Publish(new InputPointSelected(p.DotIndexLeft, p.DotIndexTop, p.ValueX, p.ValueY));
                CanvasWrapper.AddInputPoint(p.DotIndexLeft, p.DotIndexTop, p.ValueX, p.ValueY);
                demo.Points.Add(new Vector {
                    X = p.ValueX, Y = p.ValueY, Alternates = new CanvasPoint {
                        DotIndexLeft = p.DotIndexLeft, DotIndexTop = p.DotIndexTop
                    }
                });
                return;
            }

            if (activeMode == TOOL_MODE_LINE)
            {
                if (pointsSelected == 0)
                {
                    point1_xi = p.DotIndexLeft;
                    point1_yi = p.DotIndexTop;
                    pointsSelected++;
                }
                else if (pointsSelected == 1)
                {
                    pointsSelected++;
                    point2_xi = p.DotIndexLeft;
                    point2_yi = p.DotIndexTop;
                    CompleteLine();
                }
            }

            if (activeMode == TOOL_MODE_POLYGON)
            {
                if (pointsSelected == 0)
                {
                    point1_xi = p.DotIndexLeft;
                    point1_yi = p.DotIndexTop;
                    pointsSelected++;
                }
                else if (pointsSelected == 1)
                {
                    pointsSelected++;
                    point2_xi = p.DotIndexLeft;
                    point2_yi = p.DotIndexTop;
                    AddPolygonLine();
                }
                else if (pointsSelected >= 2)
                {
                    pointsSelected++;

                    // last end point becomes new start point
                    point1_xi = point2_xi;
                    point1_yi = point2_yi;
                    point2_xi = p.DotIndexLeft;
                    point2_yi = p.DotIndexTop;

                    AddPolygonLine();
                }
            }
        }
Example #17
0
        public void DrawLine(IPen pen, CanvasPoint p1, CanvasPoint p2)
        {
            CheckUsability();

            _graphics.DrawLine((Pen)pen.EngineElement, p1.ToGdiPoint(), p2.ToGdiPoint());
        }
Example #18
0
 public CanvasPoint BeginRelinkage(PinViewModel pinViewModel)
 {
     _currentUnfinishedLink = _linkViewModels.First(model => model.TargetPinViewModel == pinViewModel);
     _currentUnfinishedLink.TargetPinViewModel = null;
     var canvasPoint = new CanvasPoint();
     _currentUnfinishedLink.EndPoint = canvasPoint;
     return canvasPoint;
 }
Example #19
0
 static public SKPoint ToSKPoint(this CanvasPoint point)
 {
     return new SKPoint(point.X, point.Y);
 }
Example #20
0
        private void VisualizeLogisim(LogisimConverter.LogisimModel model)
        {
            canvasControl1.RemoveAllItems();

            // Comps

            foreach (var comp in model.comps)
            {
                CanvasRect rect = new CanvasRect((PointF)comp.loc,
                                                 LogisimConverter.CompSize, LogisimConverter.CompSize, Color.Gold);

                rect.Text = comp.name;

                if (comp.name == "Text")
                {
                    // Skip labels
                    continue;
                }
                else if (comp.name == "1")
                {
                    rect.FrontColor = Color.Tomato;
                }
                else if (comp.name == "0")
                {
                    rect.FrontColor = Color.LimeGreen;
                }

#if DEBUG
                rect.Text += " #" + comp.id.ToString();
#endif

                canvasControl1.AddItem(rect);
            }

            // Wires

            foreach (var wire in model.wires)
            {
                List <PointF> path = new List <PointF>();

                foreach (var p in wire.path)
                {
                    path.Add(p);
                }

                CanvasPolyLine line = new CanvasPolyLine(path, 1, Color.Black);
                line.Text = wire.name;

                WireMeta meta = new WireMeta();

                meta.wire     = wire;
                line.UserData = meta;

                canvasControl1.AddItem(line);
                WireDirection(wire, meta);
            }

            // Vias

            foreach (var vias in model.viases)
            {
                CanvasPoint point = new CanvasPoint(vias.loc, 5, Color.Gold);
#if DEBUG
                //point.Text = vias.id.ToString();
                //point.TextColor = Color.DeepPink;
#endif
                canvasControl1.AddItem(point);
            }

            canvasControl1.Invalidate();
        }
Example #21
0
 public void DrawText(string text, IFont font, IBrush brush, CanvasPoint point)
 {
     DrawMultilineText(text.RemoveReturns(), point.ToSKPoint(), GetSKPaint(font, (SKPaint)brush.EngineElement));
 }
Example #22
0
        public void DrawText(string text, IFont font, IBrush brush, CanvasPoint point, IDrawTextFormat format)
        {
            CheckUsability();

            _graphics.DrawString(text, (Font)font.EngineElement, (Brush)brush.EngineElement, point.ToGdiPoint(), (StringFormat)format?.EngineElement);
        }
Example #23
0
 public void AddPoint(CanvasPoint p)
 {
     throw new NotImplementedException();
 }
Example #24
0
        public void MouseMoveEventHandler(CanvasPoint mouseCoordinate)
        {
            if (Shapes.Count != 0 && !drawn && !ViewModelMediator.MovingMode)
            {
                var shape = Shapes.Last().Shape;

                if (shape is Polyline polyline)
                {
                    if (mouseCoordinate.LeftMouseButtonPressed)
                    {
                        polyline.Points.Add(new System.Windows.Point(mouseCoordinate.AbsolutePoint.X, mouseCoordinate.AbsolutePoint.Y));
                    }
                }
                else if (shape is Line line && firstPoint != null)
                {
                    line.X2 = mouseCoordinate.AbsolutePoint.X;
                    line.Y2 = mouseCoordinate.AbsolutePoint.Y;
                }
                else if (secondPoint != null)
                {
                    var xDiff = secondPoint.X - firstPoint.X;
                    var yDiff = secondPoint.Y - firstPoint.Y;
                    shape.Width = Math.Sqrt(Math.Pow(xDiff, 2) + Math.Pow(yDiff, 2));

                    var m          = yDiff / xDiff;
                    var c          = firstPoint.Y - m * firstPoint.X;
                    var tempHeight =
                        (m * mouseCoordinate.AbsolutePoint.X - mouseCoordinate.AbsolutePoint.Y + c)
                        / Math.Sqrt(Math.Pow(m, 2) + 1);

                    if (shape is Rectangle)
                    {
                        shape.Height = Math.Abs(tempHeight);
                    }
                    else
                    {
                        shape.Height = Math.Abs(tempHeight) * 2;
                    }

                    Transform      rectifyTranslate      = Transform.Identity;
                    Transform      rectifyWidthTranslate = new TranslateTransform(-shape.Width / 2, 0);
                    Transform      translate             = Transform.Identity;
                    TransformGroup tansformGroup;
                    if (!(shape.RenderTransform is TransformGroup existingGroup))
                    {
                        translate = new TranslateTransform(
                            (firstPoint.X + secondPoint.X) / 2, (firstPoint.Y + secondPoint.Y) / 2);
                        tansformGroup = new TransformGroup();
                        tansformGroup.Children.Add(rectifyTranslate);
                        tansformGroup.Children.Add(rectifyWidthTranslate);
                        tansformGroup.Children.Add(translate);
                        tansformGroup.Children.Add(shape.RenderTransform);
                        shape.RenderTransform = tansformGroup;
                    }

                    tansformGroup = shape.RenderTransform as TransformGroup;
                    if (tempHeight > 0)
                    {
                        tansformGroup.Children[0] = new TranslateTransform(0, -tempHeight);
                    }
                    else if (shape is Ellipse)
                    {
                        tansformGroup.Children[0] = new TranslateTransform(0, tempHeight);
                    }
                }
            }
Example #25
0
 public void RightMouseUpEventHandler(CanvasPoint mouseCoordinate)
 {
     Reset();
 }
Example #26
0
 public void DrawLine(IPen pen, CanvasPoint p1, CanvasPoint p2)
 {
     _canvas?.DrawLine(p1.ToSKPoint(), p2.ToSKPoint(), GetSKPaint(pen));
 }
Example #27
0
        public void DrawBitmap(IBitmap bitmap, CanvasPoint point)
        {
            CheckUsability();

            _graphics.DrawImage((Bitmap)bitmap.EngineElement, point.ToGdiPoint());
        }