Jon Ciesla bf231a
From b9c4b1c72b4ad6b24c37f402d3eec39ef393b0eb Mon Sep 17 00:00:00 2001
Jon Ciesla 599c4e
From: Tom Hughes <tom@compton.nu>
Jon Ciesla 599c4e
Date: Sun, 19 May 2013 14:17:43 +0100
Jon Ciesla bf231a
Subject: [PATCH 04/15] Make rasterizer_outline_aa ignore close_polygon when
Jon Ciesla 599c4e
 vertex count < 3
Jon Ciesla 599c4e
Jon Ciesla 599c4e
---
Jon Ciesla 599c4e
 include/agg_rasterizer_outline_aa.h | 107 ++++++++++++++++++------------------
Jon Ciesla 599c4e
 1 file changed, 52 insertions(+), 55 deletions(-)
Jon Ciesla 599c4e
Jon Ciesla 599c4e
diff --git a/include/agg_rasterizer_outline_aa.h b/include/agg_rasterizer_outline_aa.h
Jon Ciesla 599c4e
index 4d6dd57..24301d5 100644
Jon Ciesla 599c4e
--- a/include/agg_rasterizer_outline_aa.h
Jon Ciesla 599c4e
+++ b/include/agg_rasterizer_outline_aa.h
Jon Ciesla 599c4e
@@ -333,68 +333,65 @@ namespace agg
Jon Ciesla 599c4e
         int y2;
Jon Ciesla 599c4e
         int lprev;
Jon Ciesla 599c4e
 
Jon Ciesla 599c4e
-        if(close_polygon)
Jon Ciesla 599c4e
+        if(close_polygon && (m_src_vertices.size() >= 3))
Jon Ciesla 599c4e
         {
Jon Ciesla 599c4e
-            if(m_src_vertices.size() >= 3)
Jon Ciesla 599c4e
+            dv.idx = 2;
Jon Ciesla 599c4e
+
Jon Ciesla 599c4e
+            v     = &m_src_vertices[m_src_vertices.size() - 1];
Jon Ciesla 599c4e
+            x1    = v->x;
Jon Ciesla 599c4e
+            y1    = v->y;
Jon Ciesla 599c4e
+            lprev = v->len;
Jon Ciesla 599c4e
+
Jon Ciesla 599c4e
+            v  = &m_src_vertices[0];
Jon Ciesla 599c4e
+            x2 = v->x;
Jon Ciesla 599c4e
+            y2 = v->y;
Jon Ciesla 599c4e
+            dv.lcurr = v->len;
Jon Ciesla 599c4e
+            line_parameters prev(x1, y1, x2, y2, lprev);
Jon Ciesla 599c4e
+
Jon Ciesla 599c4e
+            v = &m_src_vertices[1];
Jon Ciesla 599c4e
+            dv.x1    = v->x;
Jon Ciesla 599c4e
+            dv.y1    = v->y;
Jon Ciesla 599c4e
+            dv.lnext = v->len;
Jon Ciesla 599c4e
+            dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr);
Jon Ciesla 599c4e
+
Jon Ciesla 599c4e
+            v = &m_src_vertices[dv.idx];
Jon Ciesla 599c4e
+            dv.x2 = v->x;
Jon Ciesla 599c4e
+            dv.y2 = v->y;
Jon Ciesla 599c4e
+            dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext);
Jon Ciesla 599c4e
+
Jon Ciesla 599c4e
+            dv.xb1 = 0;
Jon Ciesla 599c4e
+            dv.yb1 = 0;
Jon Ciesla 599c4e
+            dv.xb2 = 0;
Jon Ciesla 599c4e
+            dv.yb2 = 0;
Jon Ciesla 599c4e
+
Jon Ciesla 599c4e
+            switch(m_line_join)
Jon Ciesla 599c4e
             {
Jon Ciesla 599c4e
-                dv.idx = 2;
Jon Ciesla 599c4e
-
Jon Ciesla 599c4e
-                v     = &m_src_vertices[m_src_vertices.size() - 1];
Jon Ciesla 599c4e
-                x1    = v->x;
Jon Ciesla 599c4e
-                y1    = v->y;
Jon Ciesla 599c4e
-                lprev = v->len;
Jon Ciesla 599c4e
-
Jon Ciesla 599c4e
-                v  = &m_src_vertices[0];
Jon Ciesla 599c4e
-                x2 = v->x;
Jon Ciesla 599c4e
-                y2 = v->y;
Jon Ciesla 599c4e
-                dv.lcurr = v->len;
Jon Ciesla 599c4e
-                line_parameters prev(x1, y1, x2, y2, lprev);
Jon Ciesla 599c4e
-
Jon Ciesla 599c4e
-                v = &m_src_vertices[1];
Jon Ciesla 599c4e
-                dv.x1    = v->x;
Jon Ciesla 599c4e
-                dv.y1    = v->y;
Jon Ciesla 599c4e
-                dv.lnext = v->len;
Jon Ciesla 599c4e
-                dv.curr = line_parameters(x2, y2, dv.x1, dv.y1, dv.lcurr);
Jon Ciesla 599c4e
-
Jon Ciesla 599c4e
-                v = &m_src_vertices[dv.idx];
Jon Ciesla 599c4e
-                dv.x2 = v->x;
Jon Ciesla 599c4e
-                dv.y2 = v->y;
Jon Ciesla 599c4e
-                dv.next = line_parameters(dv.x1, dv.y1, dv.x2, dv.y2, dv.lnext);
Jon Ciesla 599c4e
-
Jon Ciesla 599c4e
-                dv.xb1 = 0;
Jon Ciesla 599c4e
-                dv.yb1 = 0;
Jon Ciesla 599c4e
-                dv.xb2 = 0;
Jon Ciesla 599c4e
-                dv.yb2 = 0;
Jon Ciesla 599c4e
-
Jon Ciesla 599c4e
-                switch(m_line_join)
Jon Ciesla 599c4e
-                {
Jon Ciesla 599c4e
-                case outline_no_join:
Jon Ciesla 599c4e
-                    dv.flags = 3;
Jon Ciesla 599c4e
-                    break;
Jon Ciesla 599c4e
+            case outline_no_join:
Jon Ciesla 599c4e
+                dv.flags = 3;
Jon Ciesla 599c4e
+                break;
Jon Ciesla 599c4e
 
Jon Ciesla 599c4e
-                case outline_miter_join:
Jon Ciesla 599c4e
-                case outline_round_join:
Jon Ciesla 599c4e
-                    dv.flags = 
Jon Ciesla 599c4e
-                            (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) |
Jon Ciesla 599c4e
-                        ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1);
Jon Ciesla 599c4e
-                    break;
Jon Ciesla 599c4e
+            case outline_miter_join:
Jon Ciesla 599c4e
+            case outline_round_join:
Jon Ciesla 599c4e
+                dv.flags = 
Jon Ciesla 599c4e
+                        (prev.diagonal_quadrant() == dv.curr.diagonal_quadrant()) |
Jon Ciesla 599c4e
+                    ((dv.curr.diagonal_quadrant() == dv.next.diagonal_quadrant()) << 1);
Jon Ciesla 599c4e
+                break;
Jon Ciesla 599c4e
 
Jon Ciesla 599c4e
-                case outline_miter_accurate_join:
Jon Ciesla 599c4e
-                    dv.flags = 0;
Jon Ciesla 599c4e
-                    break;
Jon Ciesla 599c4e
-                }
Jon Ciesla 599c4e
+            case outline_miter_accurate_join:
Jon Ciesla 599c4e
+                dv.flags = 0;
Jon Ciesla 599c4e
+                break;
Jon Ciesla 599c4e
+            }
Jon Ciesla 599c4e
 
Jon Ciesla 599c4e
-                if((dv.flags & 1) == 0 && m_line_join != outline_round_join)
Jon Ciesla 599c4e
-                {
Jon Ciesla 599c4e
-                    bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1);
Jon Ciesla 599c4e
-                }
Jon Ciesla 599c4e
+            if((dv.flags & 1) == 0 && m_line_join != outline_round_join)
Jon Ciesla 599c4e
+            {
Jon Ciesla 599c4e
+                bisectrix(prev, dv.curr, &dv.xb1, &dv.yb1);
Jon Ciesla 599c4e
+            }
Jon Ciesla 599c4e
 
Jon Ciesla 599c4e
-                if((dv.flags & 2) == 0 && m_line_join != outline_round_join)
Jon Ciesla 599c4e
-                {
Jon Ciesla 599c4e
-                    bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2);
Jon Ciesla 599c4e
-                }
Jon Ciesla 599c4e
-                draw(dv, 0, m_src_vertices.size());
Jon Ciesla 599c4e
+            if((dv.flags & 2) == 0 && m_line_join != outline_round_join)
Jon Ciesla 599c4e
+            {
Jon Ciesla 599c4e
+                bisectrix(dv.curr, dv.next, &dv.xb2, &dv.yb2);
Jon Ciesla 599c4e
             }
Jon Ciesla 599c4e
+            draw(dv, 0, m_src_vertices.size());
Jon Ciesla 599c4e
         }
Jon Ciesla 599c4e
         else
Jon Ciesla 599c4e
         {
Jon Ciesla 599c4e
-- 
Jon Ciesla 599c4e
1.8.1.4
Jon Ciesla 599c4e