Esempio n. 1
0
 public StrokeGenerator()
 {
     m_stroker = new StrokeMath();
     vertexDistanceList = new VertexDistanceList();
     m_out_vertices = new VertexStore();
     m_status = StrokeMath.Status.Init;
 }
Esempio n. 2
0
 public ContourGenerator()
 {
     m_stroker          = new StrokeMath();
     m_width            = 1;
     vertexDistanceList = new VertexDistanceList();
     m_out_vertices     = new VertexStore();
     m_status           = StrokeMath.Status.Init;
     m_src_vertex       = 0;
     m_closed           = false;
     m_orientation      = 0;
     m_auto_detect      = false;
 }
Esempio n. 3
0
 public ContourGenerator()
 {
     m_stroker = new StrokeMath();
     m_width = 1;
     vertexDistanceList = new VertexDistanceList();
     m_out_vertices = new VertexStore();
     m_status = StrokeMath.Status.Init;
     m_src_vertex = 0;
     m_closed = false;
     m_orientation = 0;
     m_auto_detect = false;
 }
 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);
         }
     }
 }
Esempio n. 6
0
 //-------------------------------------------------------calc_polygon_area
 public static double CalculatePolygonArea(VertexDistanceList st)
 {
     int i;
     double sum = 0.0;
     double x = st[0].x;
     double y = st[0].y;
     double xs = x;
     double ys = y;
     int j = st.Count;
     for (i = 1; i < j; i++)
     {
         VertexDistance v = st[i];
         sum += x * v.y - y * v.x;
         x = v.x;
         y = v.y;
     }
     return (sum + x * ys - y * xs) * 0.5;
 }