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)); } }
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)); } }
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)); } }
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(); }
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); } }
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)); }
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)); }
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); }
public bool IsVisible(Point pt) { return(skPath.Contains(pt.X, pt.Y)); }
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))); } }
/// <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)); }