示例#1
0
        private Tuple <CGPoint, CGPoint> CircleConnectedPoint(LiquittableCircle circle, LiquittableCircle other)
        {
            var nfloat = (CircleRatio(circle, other) + _connectThresh) / (1f + _connectThresh);
            var angle  = CoreGraphicsExtensions.Pi2 * _angleOpen * nfloat;

            return(CircleConnectedPoint(circle, other, angle));
        }
示例#2
0
        private UIBezierPath NormalPath(LiquittableCircle circle, LiquittableCircle other)
        {
            var tuple1   = CircleConnectedPoint(circle, other);
            var tuple2   = CircleConnectedPoint(other, circle);
            var cgPoint1 = tuple1.Item1;
            var cgPoint2 = tuple1.Item2;
            var cgPoint3 = tuple2.Item1;
            var cgPoint4 = tuple2.Item2;
            var nullable = CoreGraphicsExtensions.Intersection(cgPoint1, cgPoint3, cgPoint2, cgPoint4);

            if (!nullable.HasValue)
            {
                return(null);
            }
            var uiBezierPath = new UIBezierPath();
            var nfloat       = CircleRatio(circle, other);

            // ISSUE: reference to a compiler-generated method
            uiBezierPath.MoveTo(cgPoint1);
            var cgPoint5      = cgPoint2.Mid(cgPoint3);
            var cgPoint6      = cgPoint1.Mid(cgPoint4);
            var ratio         = (1 - nfloat) / (1 - AngleThreshold) * Viscosity;
            var controlPoint1 = cgPoint5.Mid(nullable.Value).Split(cgPoint6, ratio);
            var controlPoint2 = cgPoint6.Mid(nullable.Value).Split(cgPoint5, ratio);

            // ISSUE: reference to a compiler-generated method
            uiBezierPath.AddQuadCurveToPoint(cgPoint4, controlPoint1);
            // ISSUE: reference to a compiler-generated method
            uiBezierPath.AddLineTo(cgPoint3);
            // ISSUE: reference to a compiler-generated method
            uiBezierPath.AddQuadCurveToPoint(cgPoint2, controlPoint2);
            // ISSUE: reference to a compiler-generated method
            uiBezierPath.ClosePath();
            return(uiBezierPath);
        }
示例#3
0
        private static Tuple <CGPoint, CGPoint> CircleConnectedPoint(LiquittableCircle circle, LiquittableCircle other,
                                                                     nfloat angle)
        {
            var cgPoint = other.Center.Minus(circle.Center);
            var nfloat  = (nfloat)Math.Atan2(cgPoint.Y, cgPoint.X);

            return(new Tuple <CGPoint, CGPoint>(circle.Center.CirclePoint(circle.Radius, nfloat + angle),
                                                circle.Center.CirclePoint(circle.Radius, nfloat - angle)));
        }
示例#4
0
 private nfloat CircleRatio(LiquittableCircle circle, LiquittableCircle other)
 {
     return
         ((nfloat)
          Math.Min(
              Math.Max(
                  1f -
                  (other.Center.Minus(circle.Center).Length() - RadiusThreshold) /
                  (circle.Radius + other.Radius + RadiusThreshold), 0.0), 1.0));
 }
示例#5
0
        public LiquittableCircle[] Push(LiquittableCircle circle, LiquittableCircle other)
        {
            var connectedPath = GenerateConnectedPath(circle, other);

            if (connectedPath == null)
            {
                return(new LiquittableCircle[0]);
            }
            foreach (var layer in connectedPath.Select(ConstructLayer))
            {
                // ISSUE: reference to a compiler-generated method
                _layer.AddSublayer(layer);
            }
            return(new[] { circle, other });
        }
示例#6
0
        private UIBezierPath[] SplitPath(LiquittableCircle circle, LiquittableCircle other, nfloat ratio)
        {
            var tuple1   = CircleConnectedPoint(circle, other, CoreGraphicsExtensions.DegToRad(60));
            var tuple2   = CircleConnectedPoint(other, circle, CoreGraphicsExtensions.DegToRad(60));
            var cgPoint1 = tuple1.Item1;
            var cgPoint2 = tuple1.Item2;
            var cgPoint3 = tuple2.Item1;
            var cgPoint4 = tuple2.Item2;
            var nullable = CoreGraphicsExtensions.Intersection(cgPoint1, cgPoint3, cgPoint2, cgPoint4);

            if (!nullable.HasValue)
            {
                return(new UIBezierPath[0]);
            }
            var self1         = CircleConnectedPoint(circle, other, 0).Item1;
            var self2         = CircleConnectedPoint(other, circle, 0).Item1;
            var nfloat        = (ratio - _connectThresh) / (AngleThreshold - _connectThresh);
            var controlPoint1 = self2.Split(nullable.Value, nfloat * nfloat);
            var uiBezierPath1 = new UIBezierPath();

            // ISSUE: reference to a compiler-generated method
            uiBezierPath1.MoveTo(cgPoint1);
            // ISSUE: reference to a compiler-generated method
            uiBezierPath1.AddQuadCurveToPoint(cgPoint2, controlPoint1);
            // ISSUE: reference to a compiler-generated method
            uiBezierPath1.ClosePath();
            var controlPoint2 = self1.Split(nullable.Value, nfloat * nfloat);
            var uiBezierPath2 = new UIBezierPath();

            // ISSUE: reference to a compiler-generated method
            uiBezierPath2.MoveTo(cgPoint3);
            // ISSUE: reference to a compiler-generated method
            uiBezierPath2.AddQuadCurveToPoint(cgPoint4, controlPoint2);
            // ISSUE: reference to a compiler-generated method
            uiBezierPath2.ClosePath();
            return(new[]
            {
                uiBezierPath1,
                uiBezierPath2
            });
        }
示例#7
0
        private UIBezierPath[] GenerateConnectedPath(LiquittableCircle circle, LiquittableCircle other)
        {
            if (!IsConnected(circle, other))
            {
                return(null);
            }
            var ratio = CircleRatio(circle, other);

            if (ratio >= AngleThreshold && ratio <= 1f)
            {
                var uiBezierPath = NormalPath(circle, other);
                if (uiBezierPath == null)
                {
                    return(null);
                }
                return(new[] { uiBezierPath });
            }
            if (ratio >= 0.0f && ratio < AngleThreshold)
            {
                return(SplitPath(circle, other, ratio));
            }
            return(null);
        }
 public void Setup(LiquidFloatingActionButton actionButton)
 {
     AnimateStyle        = actionButton.AnimateStyle;
     ClipsToBounds       = false;
     Layer.MasksToBounds = false;
     _engine             = new SimpleCircleLiquidEngine
     {
         Viscosity = _viscosity,
         Color     = actionButton.Color
     };
     _bigEngine = new SimpleCircleLiquidEngine
     {
         Viscosity = _viscosity,
         Color     = actionButton.Color
     };
     _baseLiquid = new LiquittableCircle
     {
         Color         = actionButton.Color,
         ClipsToBounds = false
     };
     _baseLiquid.Layer.MasksToBounds = false;
     // ISSUE: reference to a compiler-generated method
     AddSubview(_baseLiquid);
 }
示例#9
0
 private bool IsConnected(LiquittableCircle circle, LiquittableCircle other)
 {
     return(circle.Center.Minus(other.Center).Length() - circle.Radius - other.Radius < RadiusThreshold);
 }