Ejemplo n.º 1
0
        public static void GetGraphPoints(this Path path, IDrawingBoardHolder holder, out Point a, out Point b, out Point c, out Point d)
        {
            path.GetScreenPoints(out a, out b, out c, out d);

            a = new Point(holder.PixelToGraphX(a.X), holder.PixelToGraphY(a.Y));
            b = new Point(holder.PixelToGraphX(b.X), holder.PixelToGraphY(b.Y));
            c = new Point(holder.PixelToGraphX(c.X), holder.PixelToGraphY(c.Y));
            d = new Point(holder.PixelToGraphX(d.X), holder.PixelToGraphY(d.Y));
        }
Ejemplo n.º 2
0
 private void GenerateBezierUi(IBezierGroup bezierGroup, Canvas canvas, IDrawingBoardHolder eventsHolder)
 {
     canvas.Children.Clear();
     DrawLines();
     _beziers.Clear(canvas, eventsHolder);
     foreach (var f in bezierGroup.Fragments)
     {
         _beziers.AddBezier(canvas, eventsHolder, f);
     }
 }
Ejemplo n.º 3
0
        public BezierLinkedList AddBezier(Canvas canvas, IDrawingBoardHolder eh, IBezierFragment bf)
        {
            var newNode = new BezierCurve(this, Count);

            canvas.Children.Add(newNode.Line1);
            canvas.Children.Add(newNode.Line2);
            canvas.Children.Add(newNode.Path);
            canvas.Children.Add(newNode.Start);
            canvas.Children.Add(newNode.End);
            canvas.Children.Add(newNode.Control1);
            canvas.Children.Add(newNode.Control2);


            newNode.Start.MouseDown    += eh.OnStartPointMouseDown;
            newNode.End.MouseDown      += eh.OnEndPointMouseDown;
            newNode.Control1.MouseDown += eh.OnControl1PointMouseDown;
            newNode.Control2.MouseDown += eh.OnControl2PointMouseDown;
            var a = new Point(eh.GraphToPixelX(bf.From.X), eh.GraphToPixelY(bf.From.Y));
            var b = new Point(eh.GraphToPixelX(bf.B.X), eh.GraphToPixelY(bf.B.Y));
            var c = new Point(eh.GraphToPixelX(bf.C.X), eh.GraphToPixelY(bf.C.Y));
            var d = new Point(eh.GraphToPixelX(bf.To.X), eh.GraphToPixelY(bf.To.Y));

            newNode.PathFigure.StartPoint = a;
            newNode.BezierSegment.Point1  = b;
            newNode.BezierSegment.Point2  = c;
            newNode.BezierSegment.Point3  = d;
            newNode.Start.SetValue(Canvas.LeftProperty, a.X - HalfEllipseWidth);
            newNode.Start.SetValue(Canvas.TopProperty, a.Y - HalfEllipseWidth);
            newNode.End.SetValue(Canvas.LeftProperty, d.X - HalfEllipseWidth);
            newNode.End.SetValue(Canvas.TopProperty, d.Y - HalfEllipseWidth);
            newNode.Control1.SetValue(Canvas.LeftProperty, b.X - HalfEllipseWidth);
            newNode.Control1.SetValue(Canvas.TopProperty, b.Y - HalfEllipseWidth);
            newNode.Control2.SetValue(Canvas.LeftProperty, c.X - HalfEllipseWidth);
            newNode.Control2.SetValue(Canvas.TopProperty, c.Y - HalfEllipseWidth);

            newNode.SetLines();

            if (Last == null)
            {
                First = Last = newNode;
            }
            else
            {
                var last = (BezierCurve)Last;
                newNode.Previous = last;
                last.Next        = newNode;
                Last             = newNode;
            }
            ++Count;
            return(this);
        }
Ejemplo n.º 4
0
 public static StringBuilder AppendCurves(
     this StringBuilder sb,
     IEnumerable <IBezierCurve> curves,
     IDrawingBoardHolder holder,
     Func <Point, Point, Point, Point, string> format)
 {
     foreach (var curve in curves)
     {
         Point a, b, c, d;
         curve.Path.GetGraphPoints(holder, out a, out b, out c, out d);
         sb.AppendLine(format(a, b, c, d));
     }
     return(sb);
 }
Ejemplo n.º 5
0
        public BezierLinkedList Clear(Canvas canvas, IDrawingBoardHolder eventsHolder)
        {
            foreach (var n in this)
            {
                n.Start.MouseDown    -= eventsHolder.OnStartPointMouseDown;
                n.End.MouseDown      -= eventsHolder.OnEndPointMouseDown;
                n.Control1.MouseDown -= eventsHolder.OnControl1PointMouseDown;
                n.Control2.MouseDown -= eventsHolder.OnControl2PointMouseDown;

                n.Start.Tag = n.End.Tag = n.Control1.Tag = n.Control2.Tag = null;

                canvas.Children.Remove(n.Path);
                canvas.Children.Remove(n.Start);
                canvas.Children.Remove(n.End);
                canvas.Children.Remove(n.Control1);
                canvas.Children.Remove(n.Control2);
            }
            Count = 0;
            First = null;
            Last  = null;
            return(this);
        }
Ejemplo n.º 6
0
        public MainWindow()
        {
            _eh = this;
            InitializeComponent();



            var t = new TransformGroup();

            t.Children.Add(_scaleTransform     = new ScaleTransform(1, 1, CanvasHalfWidth, CanvasHalfHeight));
            t.Children.Add(_translateTransform = new TranslateTransform(0, 0));
            TheCanvas.RenderTransform          = t;

            _timer = new DispatcherTimer {
                Interval = TimeSpan.FromMilliseconds(80)
            };
            _timer.Tick += OnTimerTick;

            KeyDown             += MainWindow_KeyDown;
            MouseWheel          += TheCanvas_MouseWheel;
            MouseLeftButtonDown += MainWindow_MouseLeftButtonDown;
            MouseMove           += MainWindow_MouseMove;
            MouseLeftButtonUp   += MainWindow_MouseLeftButtonUp;

            var nameSuffix = "";
            //if (ApplicationDeployment.IsNetworkDeployed)
            //{
            Version version = GetType().Assembly.GetName().Version;

            nameSuffix = " " + version.Major + "." + version.Minor;
            //}
            Title = "YouVisio Grapher" + nameSuffix;

            _runnerCreator = new FuncRunnerCreator();

            ReDrawCanvas();
        }
Ejemplo n.º 7
0
        public string ToCode(IDrawingBoardHolder holder)
        {
            if (Count == 0)
            {
                return("");
            }
            Point a, b, c, d;

            First.Path.GetGraphPoints(holder, out a, out b, out c, out d);

            if (Count == 1)
            {
                const double tolerance = 0.000001;
                if (abs(a.X) < tolerance &&
                    abs(a.Y) < tolerance &&
                    abs(d.X - 1) < tolerance &&
                    abs(d.Y - 1) < tolerance)
                {
                    return($"bezier(x,{b.X:N2},{b.Y:N2},{c.X:N2},{c.Y:N2})");
                }
                return($"bezier(x,{a.X:N2},{a.Y:N2},{b.X:N2},{b.Y:N2},{c.X:N2},{c.Y:N2},{d.X:N2},{d.Y:N2})");
            }

            if (Count == 2)
            {
                Point e, f, g, h;
                Last.Path.GetGraphPoints(holder, out e, out f, out g, out h);
                return("bezier2parts(x,\n" +
                       $"       {a.X:N2}, {a.Y:N2}, {b.X:N2}, {b.Y:N2}, {c.X:N2}, {c.Y:N2},\n" +
                       $"       {e.X:N2}, {e.Y:N2}, {f.X:N2}, {f.Y:N2}, {g.X:N2}, {g.Y:N2}, {h.X:N2}, {h.Y:N2})");
            }

            if (Count == 3)
            {
                Point e, f, g, h;
                First.Next.Path.GetGraphPoints(holder, out e, out f, out g, out h);
                Point i, j, k, l;
                First.Next.Next.Path.GetGraphPoints(holder, out i, out j, out k, out l);
                return("bezier3parts(x,\n" +
                       $"       {a.X:N2}, {a.Y:N2}, {b.X:N2}, {b.Y:N2}, {c.X:N2}, {c.Y:N2},\n" +
                       $"       {e.X:N2}, {e.Y:N2}, {f.X:N2}, {f.Y:N2}, {g.X:N2}, {g.Y:N2},\n" +
                       $"       {i.X:N2}, {i.Y:N2}, {j.X:N2}, {j.Y:N2}, {k.X:N2}, {k.Y:N2}, {l.X:N2}, {l.Y:N2})");
            }

            if (Count == 4)
            {
                Point e, f, g, h;
                First.Next.Path.GetGraphPoints(holder, out e, out f, out g, out h);
                Point i, j, k, l;
                First.Next.Next.Path.GetGraphPoints(holder, out i, out j, out k, out l);
                Point m, n, o, p;
                First.Next.Next.Next.Path.GetGraphPoints(holder, out m, out n, out o, out p);
                return("bezier4parts(x,\n" +
                       $"       {a.X:N2}, {a.Y:N2}, {b.X:N2}, {b.Y:N2}, {c.X:N2}, {c.Y:N2},\n" +
                       $"       {e.X:N2}, {e.Y:N2}, {f.X:N2}, {f.Y:N2}, {g.X:N2}, {g.Y:N2},\n" +
                       $"       {i.X:N2}, {i.Y:N2}, {j.X:N2}, {j.Y:N2}, {k.X:N2}, {k.Y:N2},\n" +
                       $"       {m.X:N2}, {m.Y:N2}, {n.X:N2}, {n.Y:N2}, {o.X:N2}, {o.Y:N2},\n" +
                       $"       {p.X:N2}, {p.Y:N2})");
            }


            return
                (new StringBuilder()
                 .AppendLine($"return beziers(b => b.from({a.X:N2},{a.Y:N2})")
                 .AppendCurves(this, holder, (a1, b1, c1, d1) => $"    .to({d1.X:N2},{d1.Y:N2}).curve({b1.X:N2},{b1.Y:N2},{c1.X:N2},{c1.Y:N2})")
                 .AppendLine(").run(x)")
                 .ToString());
        }