private void ChangeIsStroked(PathThumb senderThumb, MenuItem menuItem)
        {
            var segment = senderThumb.PathPoint.Object as PathSegment;

            segment.IsStroked  = !segment.IsStroked;
            menuItem.IsChecked = segment.IsStroked;
        }
        private void ChangeIsClosed(PathThumb senderThumb, MenuItem menuItem)
        {
            var figure = senderThumb.PathPoint.Object as PathFigure;

            figure.IsClosed    = !figure.IsClosed;
            menuItem.IsChecked = figure.IsClosed;
        }
        private void SelectThumb(PathThumb mprt)
        {
            CommitOrAbortKeyboardOperation();

            var   points = GetPoints();
            Point p      = points[mprt.Index].TranslatedPoint;

            _selectedPoints.Add(mprt.Index, p);

            mprt.IsPrimarySelection = false;
        }
예제 #4
0
        protected virtual PathThumb CreateThumb(PlacementAlignment alignment, Cursor cursor, int index,
                                                PathPoint pathpoint, Transform transform)
        {
            var designerThumb = new PathThumb(index, pathpoint)
            {
                Cursor = cursor
            };

            designerThumb.OperationMenu = BuildMenu(pathpoint);

            designerThumb.InnerRenderTransform = ((Transform)transform.Inverse);

            if (pathpoint.TargetPathPoint != null)
            {
                designerThumb.IsEllipse  = true;
                designerThumb.Foreground = Brushes.Blue;

                var bnd = new Binding("TranslatedPoint")
                {
                    Source    = pathpoint.TargetPathPoint,
                    Mode      = BindingMode.OneWay,
                    Converter = new RelativeToPointConverter(pathpoint)
                };
                designerThumb.SetBinding(PathThumb.RelativeToPointProperty, bnd);
            }

            AdornerPanel.SetPlacement(designerThumb, designerThumb.AdornerPlacement);
            adornerPanel.Children.Add(designerThumb);

            DragListener drag = new DragListener(designerThumb);

            drag.Transform = transform;

            WeakEventManager <DesignerThumb, MouseButtonEventArgs> .AddHandler(designerThumb,
                                                                               "PreviewMouseLeftButtonDown", ResizeThumbOnMouseLeftButtonUp);

            drag.MouseDown += drag_MouseDown;
            drag.Started   += drag_Started;
            drag.Changed   += drag_Changed;
            drag.Completed += drag_Completed;
            return(designerThumb);
        }
		private void SelectThumb(PathThumb mprt)
		{
			CommitOrAbortKeyboardOperation();
			
			var points = GetPoints();
			Point p = points[mprt.Index].TranslatedPoint;
			_selectedPoints.Add(mprt.Index, p);

			mprt.IsPrimarySelection = false;
		}
		private void ChangeIsStroked(PathThumb senderThumb, MenuItem menuItem)
		{
			var segment = senderThumb.PathPoint.Object as PathSegment;
			segment.IsStroked = !segment.IsStroked;
			menuItem.IsChecked = segment.IsStroked;
		}
		private void ChangeIsClosed(PathThumb senderThumb, MenuItem menuItem)
		{
			var figure = senderThumb.PathPoint.Object as PathFigure;
			figure.IsClosed = !figure.IsClosed;
			menuItem.IsChecked = figure.IsClosed;
		}
		private void ConvertPart(PathThumb senderThumb, PathPartConvertType convertType)
		{
			if (senderThumb.PathPoint.ParentObject is PathFigure)
			{
				var pathFigure = senderThumb.PathPoint.ParentObject as PathFigure;
				var pathSegment = senderThumb.PathPoint.Object as PathSegment;

				var idx = pathFigure.Segments.IndexOf(pathSegment);

				var point = senderThumb.PathPoint.Point;

				if (pathSegment is PolyLineSegment) {
					var poly = pathSegment as PolyLineSegment;
					var lst = poly.Points.Take(senderThumb.PathPoint.PolyLineIndex);
					var lst2 = poly.Points.Skip(senderThumb.PathPoint.PolyLineIndex + 1);
					var p = poly.Points[senderThumb.PathPoint.PolyLineIndex];
					pathFigure.Segments.RemoveAt(idx);
					var p1 = new PolyLineSegment();
					p1.Points.AddRange(lst);
					pathFigure.Segments.Insert(idx, p1);
					pathSegment =  new LineSegment() {Point = p};
					pathFigure.Segments.Insert(idx+1, pathSegment);
					var p2 = new PolyLineSegment();
					p2.Points.AddRange(lst2);
					pathFigure.Segments.Insert(idx+2, p2);
					idx++;
				} else if (pathSegment is PolyBezierSegment) {
					//TODO
				} else if (pathSegment is PolyQuadraticBezierSegment) {
					//TODO
				}

				pathFigure.Segments.RemoveAt(idx);

				var midp = senderThumb.PathPoint.ParentPathPoint.Point - ((senderThumb.PathPoint.ParentPathPoint.Point - point) / 2);
				
				PathSegment newSegment = null;
				switch (convertType)
				{
					case PathPartConvertType.ToBezierSegment:
						newSegment = new BezierSegment() { Point1 = midp - new Vector(40, 40), Point2 = midp + new Vector(-40, 40), Point3 = point };
						break;
					case PathPartConvertType.ToQuadricBezierSegment:
						newSegment = new QuadraticBezierSegment() { Point1 = point - new Vector(40, 40), Point2 = point  };
						break;
					case PathPartConvertType.ToArcSegment:
						newSegment = new ArcSegment() { Point = point, Size = new Size(20, 20) };
						break;
					case PathPartConvertType.insertPoint:
						pathFigure.Segments.Insert(idx, pathSegment);
						newSegment = new LineSegment() { Point = midp, };
						break;
					default:
						newSegment = new LineSegment() { Point = point };
						break;
				}

				pathFigure.Segments.Insert(idx, newSegment);
			}

			this.ExtendedItem.ReapplyAllExtensions();
		}
		protected virtual PathThumb CreateThumb(PlacementAlignment alignment, Cursor cursor, int index, PathPoint pathpoint, Transform transform)
		{
			var designerThumb = new PathThumb(index, pathpoint) {Cursor = cursor};
			designerThumb.OperationMenu = BuildMenu(pathpoint);
			
			designerThumb.InnerRenderTransform = ((Transform)transform.Inverse);
			
			if (pathpoint.TargetPathPoint != null) {
				designerThumb.IsEllipse = true;
				designerThumb.Foreground = Brushes.Blue;

				var bnd = new Binding("TranslatedPoint") { Source = pathpoint.TargetPathPoint, Mode = BindingMode.OneWay, Converter = new RelativeToPointConverter(pathpoint) };
				designerThumb.SetBinding(PathThumb.RelativeToPointProperty, bnd);
			}

			AdornerPanel.SetPlacement(designerThumb, designerThumb.AdornerPlacement);
			adornerPanel.Children.Add(designerThumb);

			DragListener drag = new DragListener(designerThumb);
			drag.Transform = transform;

			WeakEventManager<DesignerThumb, MouseButtonEventArgs>.AddHandler(designerThumb, "PreviewMouseLeftButtonDown", ResizeThumbOnMouseLeftButtonUp);

			drag.MouseDown += drag_MouseDown;
			drag.Started += drag_Started;
			drag.Changed += drag_Changed;
			drag.Completed += drag_Completed;
			return designerThumb;
		}
        private void ConvertPart(PathThumb senderThumb, PathPartConvertType convertType)
        {
            if (senderThumb.PathPoint.ParentObject is PathFigure)
            {
                var pathFigure  = senderThumb.PathPoint.ParentObject as PathFigure;
                var pathSegment = senderThumb.PathPoint.Object as PathSegment;

                var idx = pathFigure.Segments.IndexOf(pathSegment);

                var point = senderThumb.PathPoint.Point;

                if (pathSegment is PolyLineSegment)
                {
                    var poly = pathSegment as PolyLineSegment;
                    var lst  = poly.Points.Take(senderThumb.PathPoint.PolyLineIndex);
                    var lst2 = poly.Points.Skip(senderThumb.PathPoint.PolyLineIndex + 1);
                    var p    = poly.Points[senderThumb.PathPoint.PolyLineIndex];
                    pathFigure.Segments.RemoveAt(idx);
                    var p1 = new PolyLineSegment();
                    p1.Points.AddRange(lst);
                    pathFigure.Segments.Insert(idx, p1);
                    pathSegment = new LineSegment()
                    {
                        Point = p
                    };
                    pathFigure.Segments.Insert(idx + 1, pathSegment);
                    var p2 = new PolyLineSegment();
                    p2.Points.AddRange(lst2);
                    pathFigure.Segments.Insert(idx + 2, p2);
                    idx++;
                }
                else if (pathSegment is PolyBezierSegment)
                {
                    //TODO
                }
                else if (pathSegment is PolyQuadraticBezierSegment)
                {
                    //TODO
                }

                pathFigure.Segments.RemoveAt(idx);

                var midp = senderThumb.PathPoint.ParentPathPoint.Point - ((senderThumb.PathPoint.ParentPathPoint.Point - point) / 2);

                PathSegment newSegment = null;
                switch (convertType)
                {
                case PathPartConvertType.ToBezierSegment:
                    newSegment = new BezierSegment()
                    {
                        Point1 = midp - new Vector(40, 40), Point2 = midp + new Vector(-40, 40), Point3 = point
                    };
                    break;

                case PathPartConvertType.ToQuadricBezierSegment:
                    newSegment = new QuadraticBezierSegment()
                    {
                        Point1 = point - new Vector(40, 40), Point2 = point
                    };
                    break;

                case PathPartConvertType.ToArcSegment:
                    newSegment = new ArcSegment()
                    {
                        Point = point, Size = new Size(20, 20)
                    };
                    break;

                case PathPartConvertType.insertPoint:
                    pathFigure.Segments.Insert(idx, pathSegment);
                    newSegment = new LineSegment()
                    {
                        Point = midp,
                    };
                    break;

                default:
                    newSegment = new LineSegment()
                    {
                        Point = point
                    };
                    break;
                }

                pathFigure.Segments.Insert(idx, newSegment);
                operation = PlacementOperation.Start(extendedItemArray, PlacementType.MovePoint);
                CommitOperation();
            }

            this.ExtendedItem.ReapplyAllExtensions();
        }