Ejemplo n.º 1
0
        private static bool IsCubicChordMonotone(Point[] controlPoints, double squaredTolerance)
        {
            double num = GeometryHelper.SquaredDistance(controlPoints[0], controlPoints[3]);

            if (num <= squaredTolerance)
            {
                return(false);
            }
            Vector lhs  = controlPoints[3].Subtract(controlPoints[0]);
            Vector rhs  = controlPoints[1].Subtract(controlPoints[0]);
            double num2 = GeometryHelper.Dot(lhs, rhs);

            if ((num2 < 0.0) || (num2 > num))
            {
                return(false);
            }
            Vector vector3 = controlPoints[2].Subtract(controlPoints[0]);
            double num3    = GeometryHelper.Dot(lhs, vector3);

            if ((num3 < 0.0) || (num3 > num))
            {
                return(false);
            }
            if (num2 > num3)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 2
0
        internal static void FlattenFigure(PathFigure figure, IList <Point> points, double tolerance,
                                           bool removeRepeat)
        {
            if (figure == null)
            {
                throw new ArgumentNullException(nameof(figure));
            }
            if (points == null)
            {
                throw new ArgumentNullException(nameof(points));
            }
            if (tolerance < 0.0)
            {
                throw new ArgumentOutOfRangeException(nameof(tolerance));
            }
            var list = removeRepeat ? new List <Point>() : points;

            list.Add(figure.StartPoint);
            foreach (var data in figure.AllSegments())
            {
                data.PathSegment.FlattenSegment(list, data.StartPoint, tolerance);
            }
            if (figure.IsClosed)
            {
                list.Add(figure.StartPoint);
            }
            if (removeRepeat && list.Count > 0)
            {
                points.Add(list[0]);
                for (var i = 1; i < list.Count; i++)
                {
                    if (!MathHelper.IsVerySmall(GeometryHelper.SquaredDistance(points.Last(), list[i])))
                    {
                        points.Add(list[i]);
                    }
                }
            }
        }