From 1a6cdeca931df593833faec7d87446132b247010 Mon Sep 17 00:00:00 2001 From: jkuehner Date: Tue, 30 Dec 2014 09:42:02 +0100 Subject: [PATCH] PolyLine/gon Handler fixes, Path Handler worked on --- .../Project/Controls/DragListener.cs | 3 ++ .../Extensions/PathHandlerExtension.cs | 33 ++++++++++++------- .../PointTrackerPlacementSupport.cs | 3 -- .../Extensions/PolyLineHandlerExtension.cs | 9 ++--- .../Extensions/ResizeThumbExtension.cs | 14 +++++--- 5 files changed, 37 insertions(+), 25 deletions(-) diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/DragListener.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/DragListener.cs index ae9dfaac51..20fab52fa2 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/DragListener.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Controls/DragListener.cs @@ -81,6 +81,8 @@ namespace ICSharpCode.WpfDesign.Designer.Controls DeltaDelta = new Vector(); IsDown = true; IsCanceled = false; + if (MouseDown != null) + MouseDown(this); } void Target_MouseMove(object sender, MouseEventArgs e) @@ -125,6 +127,7 @@ namespace ICSharpCode.WpfDesign.Designer.Controls } } + public event DragHandler MouseDown; public event DragHandler Started; public event DragHandler Changed; public event DragHandler Completed; diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs index 7e2709b619..0b1d43b4b6 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PathHandlerExtension.cs @@ -59,6 +59,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions WeakEventManager.AddHandler(resizeThumb, "PreviewMouseLeftButtonDown", ResizeThumbOnMouseLeftButtonUp); + drag.MouseDown += drag_MouseDown; drag.Started += drag_Started; drag.Changed += drag_Changed; drag.Completed += drag_Completed; @@ -131,6 +132,11 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions } } + protected void drag_MouseDown(DragListener drag) + { + + } + // TODO : Remove all hide/show extensions from here. protected void drag_Started(DragListener drag) { @@ -222,12 +228,9 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions Double theta; //if one point selected snapping angle is calculated in relation to previous point - if (_selectedThumbs.Count == 1) - { + if (_selectedThumbs.Count == 1 && mprt.Index > 0) { theta = (180 / Math.PI) * Math.Atan2(_selectedThumbs[mprt.Index].Y + dy - points[mprt.Index - 1].Y, _selectedThumbs[mprt.Index].X + dx - points[mprt.Index - 1].X); - } - else//if multiple points snapping angle is calculated in relation to mouse dragging angle - { + } else { //if multiple points snapping angle is calculated in relation to mouse dragging angle theta = (180 / Math.PI) * Math.Atan2(dy, dx); } @@ -316,7 +319,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions var points = GetPoints(); resizeThumbs = new List(); - for (int i = 1; i < points.Count; i++) + for (int i = 0; i < points.Count; i++) { CreateThumb(PlacementAlignment.BottomRight, Cursors.Cross, i); } @@ -347,17 +350,23 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions if (geometry!=null) { var figure = geometry.Figures[0] as PathFigure; if (figure != null) { + retVal.Add(figure.StartPoint); foreach (var s in figure.Segments) { if (s is LineSegment) retVal.Add(((LineSegment)s).Point); else if (s is PolyLineSegment) retVal.AddRange(((PolyLineSegment)s).Points); -// else if (s is BezierSegment) -// retVal.Add(((BezierSegment)s).Point3); -// else if (s is QuadraticBezierSegment) -// retVal.Add(((QuadraticBezierSegment)s).Point2); -// else if (s is ArcSegment) -// retVal.Add(((ArcSegment)s).Point); + else if (s is BezierSegment) { + retVal.Add(((BezierSegment)s).Point1); + retVal.Add(((BezierSegment)s).Point2); + retVal.Add(((BezierSegment)s).Point3); + } + else if (s is QuadraticBezierSegment) { + retVal.Add(((QuadraticBezierSegment)s).Point1); + retVal.Add(((QuadraticBezierSegment)s).Point2); + } + else if (s is ArcSegment) + retVal.Add(((ArcSegment)s).Point); } } } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PointTrackerPlacementSupport.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PointTrackerPlacementSupport.cs index 7e0e8dae20..077826cb79 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PointTrackerPlacementSupport.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PointTrackerPlacementSupport.cs @@ -72,12 +72,9 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions var pg = shape as Polyline; p = pg.Points[Index]; } else if (shape is Path) { - if (Index > 0) - { var path = shape as Path; var points = PathHandlerExtension.GetPoints(path); p = points[Index]; - } } var transform = shape.RenderedGeometry.Transform; diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PolyLineHandlerExtension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PolyLineHandlerExtension.cs index 7aee687777..a696aac154 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PolyLineHandlerExtension.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/PolyLineHandlerExtension.cs @@ -213,12 +213,9 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions Double theta; //if one point selected snapping angle is calculated in relation to previous point - if (_selectedThumbs.Count == 1) - { + if (_selectedThumbs.Count == 1 && mprt.Index > 0) { theta = (180 / Math.PI) * Math.Atan2(_selectedThumbs[mprt.Index].Y + dy - points[mprt.Index - 1].Y, _selectedThumbs[mprt.Index].X + dx - points[mprt.Index - 1].X); - } - else//if multiple points snapping angle is calculated in relation to mouse dragging angle - { + } else { //if multiple points snapping angle is calculated in relation to mouse dragging angle theta = (180 / Math.PI) * Math.Atan2(dy, dx); } @@ -307,7 +304,7 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions PointCollection points = GetPointCollection(); resizeThumbs = new List(); - for (int i = 1; i < points.Count; i++) + for (int i = 0; i < points.Count; i++) { CreateThumb(PlacementAlignment.BottomRight, Cursors.Cross, i); } diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs index 26d0de1c1c..25d0b6a8e9 100644 --- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs +++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Project/Extensions/ResizeThumbExtension.cs @@ -150,10 +150,16 @@ namespace ICSharpCode.WpfDesign.Designer.Extensions double dy = 0; var alignment = (drag.Target as ResizeThumb).Alignment; - if (alignment.Horizontal == HorizontalAlignment.Left) dx = -drag.Delta.X; - if (alignment.Horizontal == HorizontalAlignment.Right) dx = drag.Delta.X; - if (alignment.Vertical == VerticalAlignment.Top) dy = -drag.Delta.Y; - if (alignment.Vertical == VerticalAlignment.Bottom) dy = drag.Delta.Y; + var delta = drag.Delta; + + var transform = this.ExtendedItem.View.RenderTransform; + if (transform != null) + delta = (Vector)transform.Inverse.Transform((Point)delta); + + if (alignment.Horizontal == HorizontalAlignment.Left) dx = -delta.X; + if (alignment.Horizontal == HorizontalAlignment.Right) dx = delta.X; + if (alignment.Vertical == VerticalAlignment.Top) dy = -delta.Y; + if (alignment.Vertical == VerticalAlignment.Bottom) dy = delta.Y; var designPanel = ExtendedItem.Services.DesignPanel as DesignPanel;