예제 #1
0
        internal static bool IsClockwiseRing(com.epl.geometry.MultiPathImpl polygon, int iring)
        {
            int high_point_index = polygon.GetHighestPointIndex(iring);
            int path_start       = polygon.GetPathStart(iring);
            int path_end         = polygon.GetPathEnd(iring);

            com.epl.geometry.Point2D q = polygon.GetXY(high_point_index);
            com.epl.geometry.Point2D p;
            com.epl.geometry.Point2D r;
            if (high_point_index == path_start)
            {
                p = polygon.GetXY(path_end - 1);
                r = polygon.GetXY(path_start + 1);
            }
            else
            {
                if (high_point_index == path_end - 1)
                {
                    p = polygon.GetXY(high_point_index - 1);
                    r = polygon.GetXY(path_start);
                }
                else
                {
                    p = polygon.GetXY(high_point_index - 1);
                    r = polygon.GetXY(high_point_index + 1);
                }
            }
            int orientation = com.epl.geometry.Point2D.OrientationRobust(p, q, r);

            if (orientation == 0)
            {
                return(polygon.CalculateRingArea2D(iring) > 0.0);
            }
            return(orientation == -1);
        }