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); } }
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; } }
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); } }
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); }
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); } }
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); }
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); } }