Пример #1
0
 private void Bvm_PropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     if (e.PropertyName == nameof(BezierViewModel.InterpolantPoints))
     {
         BezierViewModel bvm  = (BezierViewModel)sender;
         Primitives      prim = m_prims.Single((p) => p.BVM == bvm);
         RedrawPolyline(prim);
     }
 }
Пример #2
0
        void RedrawPolyline(Primitives prim)
        {
            BezierViewModel bvm   = prim.BVM;
            Polyline        lines = prim.Interpolant;

            for (int ip = 0; ip < bvm.InterpolantPoints.Length; ip++)
            {
                Point lp = TransformPoint(bvm.InterpolantPoints[ip], new Size(), false);
                lines.Points[ip] = lp;
            }
        }
Пример #3
0
        void RedrawCircles(Primitives prim)
        {
            BezierViewModel bvm = prim.BVM;

            for (int i = 0; i < bvm.Bezier.ControlPoints.Count; i++)
            {
                Ellipse e = prim.Points[i];

                Point p = TransformPoint(bvm.Bezier.ControlPoints[i], e.RenderSize, true);
                Canvas.SetLeft(e, p.X);
                Canvas.SetTop(e, p.Y);
            }
        }
Пример #4
0
        void RemoveBezier(BezierViewModel bvm)
        {
            Primitives prim = m_prims.Single((p) => p.BVM == bvm);

            foreach (var point in prim.Points)
            {
                m_leftDescriptor.RemoveValueChanged(point, Ellipse_PositionChanged);
                m_topDescriptor.RemoveValueChanged(point, Ellipse_PositionChanged);
                DrawingCanvas.Children.Remove(point);
            }

            DrawingCanvas.Children.Remove(prim.Interpolant);
        }
Пример #5
0
 private void Beziers_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     if (e.Action == NotifyCollectionChangedAction.Add)
     {
         Bezier          b   = (Bezier)e.NewItems[0];
         BezierViewModel bvm = new BezierViewModel(b, BezierModel.InterpolantResolutionToUse);
         m_bezierViewModels.Add(bvm);
     }
     if (e.Action == NotifyCollectionChangedAction.Remove)
     {
         Bezier          b   = (Bezier)e.OldItems[0];
         BezierViewModel bvm = m_bezierViewModels.Single((bv) => bv.Bezier == b);
         m_bezierViewModels.Remove(bvm);
     }
 }
Пример #6
0
        void AddBezier(BezierViewModel bvm)
        {
            Primitives prim = new Primitives();

            prim.BVM = bvm;

            //Draw points
            m_circlesNotDragged = true;
            for (int i = 0; i < bvm.Bezier.ControlPoints.Count; i++)
            {
                Ellipse e = new Ellipse();
                e.Stroke          = new SolidColorBrush(Colors.Black);
                e.StrokeThickness = 5;
                e.Fill            = new SolidColorBrush(Colors.Gray);
                e.Width           = 40;
                e.Height          = 40;
                m_leftDescriptor.AddValueChanged(e, Ellipse_PositionChanged);
                m_topDescriptor.AddValueChanged(e, Ellipse_PositionChanged);

                Point p = TransformPoint(bvm.Bezier.ControlPoints[i], new Size(e.Width, e.Height), true);
                Canvas.SetLeft(e, p.X);
                Canvas.SetTop(e, p.Y);

                prim.Points.Add(e);

                DrawingCanvas.Children.Add(e);
            }
            m_circlesNotDragged = false;

            //Draw bezier
            Polyline lines = new Polyline();

            lines.Stroke          = new SolidColorBrush(Colors.Black);
            lines.StrokeThickness = 1;

            for (int ip = 0; ip < bvm.InterpolantPoints.Length; ip++)
            {
                Point lp = TransformPoint(bvm.InterpolantPoints[ip], lines.RenderSize, false);
                lines.Points.Add(lp);
            }

            prim.Interpolant = lines;
            DrawingCanvas.Children.Add(lines);

            m_prims.Add(prim);
        }
Пример #7
0
        private void BezierViewModels_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            if (e.Action == NotifyCollectionChangedAction.Add)
            {
                BezierViewModel bvm = (BezierViewModel)e.NewItems[0];
                WeakEventManager <BezierViewModel, PropertyChangedEventArgs> .AddHandler(bvm, "PropertyChanged", Bvm_PropertyChanged);

                AddBezier(bvm);
            }

            if (e.Action == NotifyCollectionChangedAction.Remove)
            {
                BezierViewModel bvm = (BezierViewModel)e.OldItems[0];
                WeakEventManager <BezierViewModel, PropertyChangedEventArgs> .RemoveHandler(bvm, "PropertyChanged", Bvm_PropertyChanged);

                RemoveBezier(bvm);
            }
        }