Пример #1
0
        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;
        }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
 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;
 }