Пример #1
0
        public void PathContainsPoint()
        {
            using (var path = new SKPath()) {
                path.AddRect(SKRect.Create(10, 10, 100, 100), SKPathDirection.Clockwise);

                Assert.IsTrue(path.Contains(30, 30));
                Assert.IsFalse(path.Contains(5, 30));
            }
        }
Пример #2
0
        public void PathContainsPoint()
        {
            using (var path = new SKPath ()) {
                path.AddRect (SKRect.Create (10, 10, 100, 100), SKPathDirection.Clockwise);

                Assert.IsTrue (path.Contains (30, 30));
                Assert.IsFalse (path.Contains (5, 30));
            }
        }
Пример #3
0
        public void PathContainsPointInRoundRect()
        {
            using (var path = new SKPath()) {
                var rrect = new SKRoundRect(SKRect.Create(10, 10, 100, 100), 5, 5);
                path.AddRoundRect(rrect);

                Assert.True(path.Contains(30, 30));
                Assert.False(path.Contains(5, 30));
            }
        }
Пример #4
0
        private void skiaCanvasElement_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            SKPoint skPoint = new SKPoint((float)e.GetPosition(skiaCanvasElement).X, (float)e.GetPosition(skiaCanvasElement).Y);

            if (drawing == true)
            {
                if (path == null)
                {
                    path = new SKPath();
                }

                if (path.PointCount == 0)
                {
                    path.MoveTo(skPoint);
                }
                else
                {
                    path.LineTo(skPoint);
                }
            }
            else
            {
                if (path != null)
                {
                    if (path.Contains(skPoint.X, skPoint.Y))
                    {
                        dragging       = true;
                        dragStartPoint = skPoint;
                    }
                }
            }

            skiaCanvasElement.InvalidateVisual();
        }
Пример #5
0
        public static bool Contains(ComponentLoad load, IssoPoint2D pt, ModelViewSurface surface)
        {
            switch (load.CompType)
            {
            case ComponentTypes.ctDistributedLoad:
            {
                float  ArrawHeight = surface.ViewHeight / 30;
                SKPath b           = new SKPath();
                b.MoveTo(load.AppNodes[0].Location.X, load.AppNodes[0].Location.Y);
                b.LineTo(load.AppNodes[0].Location.X, load.AppNodes[0].Location.Y + ArrawHeight);
                b.LineTo(load.AppNodes[1].Location.X, load.AppNodes[1].Location.Y + ArrawHeight);
                b.LineTo(load.AppNodes[1].Location.X, load.AppNodes[1].Location.Y);
                b.Close();
                return(b.Contains(pt.X, pt.Y));
            }

            case ComponentTypes.ctForce:
            {
                float  ArrawHeight = surface.ViewHeight / 15;
                SKPath b           = new SKPath();
                b.MoveTo(load.AppNodes[0].Location.X - ArrawHeight / 6, load.AppNodes[0].Location.Y);
                b.LineTo(load.AppNodes[0].Location.X - ArrawHeight / 6, load.AppNodes[0].Location.Y - ArrawHeight);
                b.LineTo(load.AppNodes[0].Location.X + ArrawHeight / 6, load.AppNodes[0].Location.Y - ArrawHeight);
                b.LineTo(load.AppNodes[0].Location.X + ArrawHeight / 6, load.AppNodes[0].Location.Y);
                b.Close();
                SKMatrix rotate = SKMatrix.MakeRotationDegrees(load.Direction + 90, load.AppNodes[0].Location.X, load.AppNodes[0].Location.Y);;
                b.Transform(rotate);
                return(b.Contains(pt.X, pt.Y));
            }

            default: return(false);
            }
        }
Пример #6
0
        public static bool Contains(ComponentLinear linear, IssoPoint2D pt, ModelViewSurface surface)
        {
            SKPath pin = new SKPath();
            // Определим начало координат - это всегда точка, расположенная левее
            IssoPoint2D ptstart, ptend;

            if (linear.Start.X < linear.End.X)
            {
                ptstart = linear.Start;
                ptend   = linear.End;
            }
            else
            {
                ptstart = linear.End;
                ptend   = linear.Start;
            }
            double ang = Math.Asin((ptend.Y - ptstart.Y) / linear.Length);
            float  dy  = 7 / surface.scaleFactor;

            pin.MoveTo(ptstart.X, ptstart.Y - dy);
            pin.LineTo(ptstart.X, ptstart.Y + dy);
            pin.LineTo(ptstart.X + linear.Length, ptstart.Y + dy);
            pin.LineTo(ptstart.X + linear.Length, ptstart.Y - dy);
            pin.Close();
            pin.Transform(SKMatrix.MakeRotation((float)ang, ptstart.X, ptstart.Y));
            return(pin.Contains(pt.X, pt.Y));
        }
Пример #7
0
        public override bool Contains(SKPoint point)
        {
            var linePath = new SKPath();

            linePath.MoveTo(FirstPoint.X, FirstPoint.Y);
            linePath.LineTo(SecondPoint.X, SecondPoint.Y);

            return(linePath.Contains(point.X, point.Y));
        }
Пример #8
0
 public bool Contains(float x, float y, ContainsMode mode)
 {
     if (mode == ContainsMode.Geometry)
     {
         return(Geometry.Contains(x, y));
     }
     else if (mode == ContainsMode.Bounds)
     {
         return(Bounds.Contains(x, y));
     }
     return(false);
 }
Пример #9
0
 public bool IsVisible(Point pt)
 {
     return(skPath.Contains(pt.X, pt.Y));
 }
Пример #10
0
        public void OnTouchEffectAction(object sender, TouchActionEventArgs args)
        {
            //Console.WriteLine("x: " + args.Location.X);
            //Console.WriteLine("y: " + args.Location.Y);
            var test = ConvertToPixel(args.Location);

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    int     checkX = (int)_boxes[i + j * 4].X;
                    int     checkY = (int)_boxes[i + j * 4].Y;
                    SKPoint center = new SKPoint(checkX + _boxSize / 2, checkY + _boxSize / 2);

                    if (_path.IsEmpty ||
                        test.X < _crossedBoxes[_crossedBoxes.Count - 1].X + 15.0 / 8 * _boxSize &&
                        test.X > _crossedBoxes[_crossedBoxes.Count - 1].X - 9.0 / 8 * _boxSize &&
                        test.Y <_crossedBoxes[_crossedBoxes.Count - 1].Y + 15.0 / 8 * _boxSize &&
                                test.Y> _crossedBoxes[_crossedBoxes.Count - 1].Y - 9.0 / 8 * _boxSize)
                    {
                        if (test.X < checkX + _boxSize * 7.0 / 8 &&
                            test.X > checkX + _boxSize * 1.0 / 8 &&
                            test.Y < checkY + _boxSize * 7.0 / 8 &&
                            test.Y > checkY + _boxSize * 1.0 / 8 &&
                            !_path.Contains(center.X, center.Y))
                        {
                            if (_path.IsEmpty)
                            {
                                _path.Reset();
                                _path.MoveTo(center);
                                CanvasView.InvalidateSurface();
                            }
                            else
                            {
                                Console.WriteLine("CenterX: " + center.X);
                                Console.WriteLine("CenterY: " + center.Y);
                                _path.LineTo(center);
                                CanvasView.InvalidateSurface();
                            }
                            _crossedBoxes.Add(center);
                        }
                    }
                }
            }

            switch (args.Type)
            {
            case TouchActionType.Pressed:
                break;

            case TouchActionType.Moved:
                _path.Reset();

                if (_crossedBoxes.Count != 0)
                {
                    _path.MoveTo(_crossedBoxes[0]);

                    foreach (SKPoint point in _crossedBoxes)
                    {
                        _path.LineTo(point);
                    }
                    _path.LineTo(ConvertToPixel(args.Location));
                    CanvasView.InvalidateSurface();
                }
                break;

            case TouchActionType.Released:
                if (!_path.IsEmpty)
                {
                    _path.Reset();
                    _crossedBoxes.Clear();
                    CanvasView.InvalidateSurface();
                }

                break;

            case TouchActionType.Cancelled:
                if (!_path.IsEmpty)
                {
                    CanvasView.InvalidateSurface();
                }

                break;
            }

            SKPoint ConvertToPixel(Point pt)
            {
                return(new SKPoint((float)(CanvasView.CanvasSize.Width * pt.X / CanvasView.Width),
                                   (float)(CanvasView.CanvasSize.Height * pt.Y / CanvasView.Height)));
            }
        }
Пример #11
0
 /// <summary>
 /// Check Skia path if it contains a point.
 /// </summary>
 /// <param name="path">Path to check.</param>
 /// <param name="point">Point.</param>
 /// <returns>True, if point is contained in a path.</returns>
 private static bool PathContainsCore(SKPath path, Point point)
 {
     return(path.Contains((float)point.X, (float)point.Y));
 }