Пример #1
0
        // Vertex Source Interface
        void RewindZero()
        {
            if (m_status == StrokeMath.Status.Init)
            {
                vertexDistanceList.Close(true);
                if (m_auto_detect)
                {
                    if (m_orientation == EndVertexOrientation.Unknown)
                    {
                        m_orientation = (AggMath.CalculatePolygonArea(vertexDistanceList) > 0.0) ?
                                        EndVertexOrientation.CCW :
                                        EndVertexOrientation.CW;
                    }
                }
                switch (m_orientation)
                {
                case EndVertexOrientation.CCW:
                {
                    m_stroker.Width = m_width;
                }
                break;

                case EndVertexOrientation.CW:
                {
                    m_stroker.Width = -m_width;
                }
                break;
                }
            }
            m_status     = StrokeMath.Status.Ready;
            m_src_vertex = 0;
        }
 public static void ShortenPath(VertexDistanceList vertexDistanceList, double s, bool closed)
 {
     if (s > 0.0 && vertexDistanceList.Count > 1)
     {
         double d;
         int    n = (int)(vertexDistanceList.Count - 2);
         while (n != 0)
         {
             d = vertexDistanceList[n].dist;
             if (d > s)
             {
                 break;
             }
             vertexDistanceList.RemoveLast();
             s -= d;
             --n;
         }
         if (vertexDistanceList.Count < 2)
         {
             vertexDistanceList.Clear();
         }
         else
         {
             n = (int)vertexDistanceList.Count - 1;
             VertexDistance prev = vertexDistanceList[n - 1];
             VertexDistance last = vertexDistanceList[n];
             d = (prev.dist - s) / prev.dist;
             double x = prev.x + (last.x - prev.x) * d;
             double y = prev.y + (last.y - prev.y) * d;
             last.x = x;
             last.y = y;
             if (!prev.IsEqual(last))
             {
                 vertexDistanceList.RemoveLast();
             }
             vertexDistanceList.Close(closed);
         }
     }
 }
 public static void ShortenPath(VertexDistanceList vertexDistanceList, double s, bool closed)
 {
     if (s > 0.0 && vertexDistanceList.Count > 1)
     {
         double d;
         int n = (int)(vertexDistanceList.Count - 2);
         while (n != 0)
         {
             d = vertexDistanceList[n].dist;
             if (d > s) break;
             vertexDistanceList.RemoveLast();
             s -= d;
             --n;
         }
         if (vertexDistanceList.Count < 2)
         {
             vertexDistanceList.Clear();
         }
         else
         {
             n = (int)vertexDistanceList.Count - 1;
             VertexDistance prev = vertexDistanceList[n - 1];
             VertexDistance last = vertexDistanceList[n];
             d = (prev.dist - s) / prev.dist;
             double x = prev.x + (last.x - prev.x) * d;
             double y = prev.y + (last.y - prev.y) * d;
             last.x = x;
             last.y = y;
             if (!prev.IsEqual(last))
             {
                 vertexDistanceList.RemoveLast();
             }
             vertexDistanceList.Close(closed);
         }
     }
 }