public void DoMultiSelect(Point pt) { shapes = new List <Shape>(); RectangleGeometry HitTestArea = new RectangleGeometry(new Rect( Canvas.GetLeft(activeShape), Canvas.GetTop(activeShape), activeShape.Width, activeShape.Height)); VisualTreeHelper.HitTest(canvas, null, result => { var shape = result.VisualHit as Shape; if (shape != null && shape != activeShape) { shapes.Add(shape); } return(HitTestResultBehavior.Continue); }, new GeometryHitTestParameters(HitTestArea)); if (shapes.Count > 0) { DoubleCollection dc = new DoubleCollection(2); dc.Add(2); dc.Add(2); pointsInitial = new List <Point>(); foreach (Shape shape in shapes) { shape.StrokeDashArray = dc; pointsInitial.Add(new Point(Canvas.GetLeft(shape), Canvas.GetTop(shape))); } pointStart = pt; } DeactivateShape(); toolMode = NToolMode.Move; }
public void DoSelect(Point pt, bool doubleclick = false) { DeactivateShape(); HitTestResult result = VisualTreeHelper.HitTest(canvas, pt); if (result != null && result.VisualHit is Shape) { activeShape = (result.VisualHit as Shape); DoubleCollection dc = new DoubleCollection(2); dc.Add(2); dc.Add(2); activeShape.StrokeDashArray = dc; pointInitial = new Point(Canvas.GetLeft(activeShape), Canvas.GetTop(activeShape)); pointStart = pt; if (activeShape is Polyline) {//start polyline editing linePointIndex = GetPolylinePointIndex(activeShape as Polyline, pt, doubleclick); } } else { toolMode = NToolMode.Pan; pointInitial = new Point((canvas.RenderTransform as TranslateTransform).X, (canvas.RenderTransform as TranslateTransform).Y); pointStart = canvas.TranslatePoint(pt, null); Debug.WriteLine("start pan: " + pointStart); canvas.CaptureMouse(); } }
public void MouseDown(Point pt, bool multiselect, bool doubleclick) { if (multiselect) { toolMode = NToolMode.MultiSelect; } switch (toolMode) { case NToolMode.Rect: DoRect(pt); break; case NToolMode.Select: DoSelect(pt, doubleclick); break; case NToolMode.Pan: DoSelect(pt, doubleclick); break; case NToolMode.Delete: DoDelete(pt); break; case NToolMode.Scale: DoScale(pt); break; case NToolMode.Rotate: DoRotate(pt); break; case NToolMode.Line: DoLine(pt); break; case NToolMode.Move: pointStart = pt; break; case NToolMode.MultiSelect: DoRect(pt); activeShape.Fill = new SolidColorBrush(); DoubleCollection dc = new DoubleCollection(2); dc.Add(5); dc.Add(2); activeShape.StrokeDashArray = dc; break; } }
public NCanvas(Canvas canvas) { toolMode = NToolMode.None; pointStart = new Point(0, 0); pointEnd = new Point(0, 0); lineThickness = 1; this.canvas = canvas; activeShape = null; ConnectDistance = 5; }