<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.slicer.org/w/index.php?action=history&amp;feed=atom&amp;title=Slicer3%3AEditor%3ARasterizing%3AAGGextended_demo</id>
	<title>Slicer3:Editor:Rasterizing:AGGextended demo - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.slicer.org/w/index.php?action=history&amp;feed=atom&amp;title=Slicer3%3AEditor%3ARasterizing%3AAGGextended_demo"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Editor:Rasterizing:AGGextended_demo&amp;action=history"/>
	<updated>2026-04-19T11:30:54Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Editor:Rasterizing:AGGextended_demo&amp;diff=3833&amp;oldid=prev</id>
		<title>Marianna: 1 revision</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Editor:Rasterizing:AGGextended_demo&amp;diff=3833&amp;oldid=prev"/>
		<updated>2008-05-15T18:00:47Z</updated>

		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 18:00, 15 May 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Marianna</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicer3:Editor:Rasterizing:AGGextended_demo&amp;diff=3832&amp;oldid=prev</id>
		<title>Andy at 15:09, 20 December 2006</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicer3:Editor:Rasterizing:AGGextended_demo&amp;diff=3832&amp;oldid=prev"/>
		<updated>2006-12-20T15:09:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;An example from [http://antigrain.com The Antigrain Graphics (AGG)] code extended to 7 vertices.&lt;br /&gt;
&lt;br /&gt;
[[Image:Agg-intersection.png|right|thumb|202px]]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 #include &amp;quot;agg_basics.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;agg_rendering_buffer.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;agg_rasterizer_scanline_aa.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;agg_scanline_u.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;agg_renderer_scanline.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;agg_pixfmt_rgb.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;platform/agg_platform_support.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ctrl/agg_slider_ctrl.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;ctrl/agg_cbox_ctrl.h&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 enum flip_y_e { flip_y = true };&lt;br /&gt;
 &lt;br /&gt;
 #define NUMPOINTS 7&lt;br /&gt;
 &lt;br /&gt;
 namespace agg&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
     class square&lt;br /&gt;
     {&lt;br /&gt;
     public:&lt;br /&gt;
         square(double size) : m_size(size) {}&lt;br /&gt;
 &lt;br /&gt;
         template&amp;lt;class Rasterizer, class Scanline, class Renderer, class ColorT&amp;gt;&lt;br /&gt;
         void draw(Rasterizer&amp;amp; ras, Scanline&amp;amp; sl, Renderer&amp;amp; ren, ColorT color,&lt;br /&gt;
                   double x, double y)&lt;br /&gt;
         {&lt;br /&gt;
             ras.reset();&lt;br /&gt;
             ras.move_to_d(x*m_size,        y*m_size);&lt;br /&gt;
             ras.line_to_d(x*m_size+m_size, y*m_size);&lt;br /&gt;
             ras.line_to_d(x*m_size+m_size, y*m_size+m_size);&lt;br /&gt;
             ras.line_to_d(x*m_size,        y*m_size+m_size);&lt;br /&gt;
             agg::render_scanlines_aa_solid(ras, sl, ren, color);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
     private:&lt;br /&gt;
         double m_size;&lt;br /&gt;
     };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     template&amp;lt;class Renderer&amp;gt; class renderer_enlarged&lt;br /&gt;
     {&lt;br /&gt;
     public:&lt;br /&gt;
         renderer_enlarged(Renderer&amp;amp; ren, double size) :&lt;br /&gt;
             m_ren(ren),&lt;br /&gt;
             m_square(size),&lt;br /&gt;
             m_size(size) {}&lt;br /&gt;
 &lt;br /&gt;
         //--------------------------------------------------------------------&lt;br /&gt;
         void color(rgba8 c) { m_color = c; }&lt;br /&gt;
 &lt;br /&gt;
         //--------------------------------------------------------------------&lt;br /&gt;
         void prepare() {}&lt;br /&gt;
 &lt;br /&gt;
         //--------------------------------------------------------------------&lt;br /&gt;
         template&amp;lt;class Scanline&amp;gt; void render(const Scanline&amp;amp; sl)&lt;br /&gt;
         {&lt;br /&gt;
             int y = sl.y();&lt;br /&gt;
 &lt;br /&gt;
             unsigned num_spans = sl.num_spans();&lt;br /&gt;
             typename Scanline::const_iterator span = sl.begin();&lt;br /&gt;
 &lt;br /&gt;
             do&lt;br /&gt;
             {&lt;br /&gt;
                 int x = span-&amp;gt;x;&lt;br /&gt;
                 const typename Scanline::cover_type* covers = span-&amp;gt;covers;&lt;br /&gt;
                 int num_pix = span-&amp;gt;len;&lt;br /&gt;
 &lt;br /&gt;
                 do&lt;br /&gt;
                 {&lt;br /&gt;
                     int a = (*covers++ * m_color.a) &amp;gt;&amp;gt; 8;&lt;br /&gt;
                     m_square.draw(m_ras, m_sl, m_ren,&lt;br /&gt;
                                   rgba8(m_color.r, m_color.g, m_color.b, a),&lt;br /&gt;
                                   x, y);&lt;br /&gt;
                     ++x;&lt;br /&gt;
                 }&lt;br /&gt;
                 while(--num_pix);&lt;br /&gt;
             }&lt;br /&gt;
             while(--num_spans);&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
     private:&lt;br /&gt;
         rasterizer_scanline_aa&amp;lt;&amp;gt; m_ras;&lt;br /&gt;
         scanline_u8 m_sl;&lt;br /&gt;
         Renderer&amp;amp;   m_ren;&lt;br /&gt;
         square      m_square;&lt;br /&gt;
         rgba8       m_color;&lt;br /&gt;
         double      m_size;&lt;br /&gt;
     };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 class the_application : public agg::platform_support&lt;br /&gt;
 {&lt;br /&gt;
     double m_x[NUMPOINTS];&lt;br /&gt;
     double m_y[NUMPOINTS];&lt;br /&gt;
     double m_dx;&lt;br /&gt;
     double m_dy;&lt;br /&gt;
     int    m_idx;&lt;br /&gt;
     int m_numPoints;&lt;br /&gt;
 &lt;br /&gt;
     agg::slider_ctrl&amp;lt;agg::rgba8&amp;gt; m_slider1;&lt;br /&gt;
     agg::slider_ctrl&amp;lt;agg::rgba8&amp;gt; m_slider2;&lt;br /&gt;
 &lt;br /&gt;
 public:&lt;br /&gt;
     the_application(agg::pix_format_e format, bool flip_y) :&lt;br /&gt;
         agg::platform_support(format, flip_y),&lt;br /&gt;
         m_slider1(80, 10,    600-10, 19,    !flip_y),&lt;br /&gt;
         m_slider2(80, 10+20, 600-10, 19+20, !flip_y)&lt;br /&gt;
     {&lt;br /&gt;
         m_idx = -1;&lt;br /&gt;
         m_numPoints = NUMPOINTS;&lt;br /&gt;
         m_x[0] = 57;    m_y[0] = 100;&lt;br /&gt;
         m_x[1] = 369;   m_y[1] = 170;&lt;br /&gt;
         m_x[2] = 143;   m_y[2] = 310;&lt;br /&gt;
         m_x[3] = 153;   m_y[3] = 310;&lt;br /&gt;
         m_x[4] = 143;   m_y[4] = 360;&lt;br /&gt;
         m_x[5] = 173;   m_y[5] = 360;&lt;br /&gt;
         m_x[6] = 173;   m_y[6] = 380;&lt;br /&gt;
 &lt;br /&gt;
         add_ctrl(m_slider1);&lt;br /&gt;
         add_ctrl(m_slider2);&lt;br /&gt;
 &lt;br /&gt;
         m_slider1.range(8.0, 100.0);&lt;br /&gt;
         m_slider1.num_steps(23);&lt;br /&gt;
         m_slider1.value(32.0);&lt;br /&gt;
 &lt;br /&gt;
         m_slider2.range(0.1, 3.0);&lt;br /&gt;
         m_slider2.value(1.0);&lt;br /&gt;
 &lt;br /&gt;
         m_slider1.label(&amp;quot;Pixel size=%1.0f&amp;quot;);&lt;br /&gt;
         m_slider2.label(&amp;quot;Gamma=%4.3f&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
         m_slider1.no_transform();&lt;br /&gt;
         m_slider2.no_transform();&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     virtual ~the_application()&lt;br /&gt;
     {&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     virtual void on_init()&lt;br /&gt;
     {&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     virtual void on_draw()&lt;br /&gt;
     {&lt;br /&gt;
         typedef agg::renderer_base&amp;lt;agg::pixfmt_bgr24&amp;gt; ren_base;&lt;br /&gt;
 &lt;br /&gt;
         agg::pixfmt_bgr24 pixf(rbuf_window());&lt;br /&gt;
         ren_base ren(pixf);&lt;br /&gt;
         agg::scanline_u8 sl;&lt;br /&gt;
 &lt;br /&gt;
         ren.clear(agg::rgba(1,1,1));&lt;br /&gt;
 &lt;br /&gt;
         agg::rasterizer_scanline_aa&amp;lt;&amp;gt; ras;&lt;br /&gt;
 &lt;br /&gt;
         int size_mul = int(m_slider1.value());&lt;br /&gt;
 &lt;br /&gt;
         ras.gamma(agg::gamma_power(m_slider2.value()));&lt;br /&gt;
         ras.filling_rule(agg::fill_even_odd);&lt;br /&gt;
 &lt;br /&gt;
         agg::renderer_enlarged&amp;lt;ren_base&amp;gt; ren_en(ren, size_mul);&lt;br /&gt;
 &lt;br /&gt;
         ras.reset();&lt;br /&gt;
 &lt;br /&gt;
         ras.move_to_d(m_x[0]/size_mul, m_y[0]/size_mul);&lt;br /&gt;
         for (int i = 0; i &amp;lt; m_numPoints; i++)&lt;br /&gt;
           {&lt;br /&gt;
           ras.line_to_d(m_x[i]/size_mul, m_y[i]/size_mul);&lt;br /&gt;
           }&lt;br /&gt;
 &lt;br /&gt;
         ren_en.color(agg::rgba8(0,255,0, 255));&lt;br /&gt;
         agg::render_scanlines(ras, sl, ren_en);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
         agg::render_scanlines_aa_solid(ras, sl, ren, agg::rgba8(0,0,0));&lt;br /&gt;
 &lt;br /&gt;
         ras.gamma(agg::gamma_none());&lt;br /&gt;
 &lt;br /&gt;
         agg::path_storage ps;&lt;br /&gt;
         agg::conv_stroke&amp;lt;agg::path_storage&amp;gt; pg(ps);&lt;br /&gt;
         pg.width(2.0);&lt;br /&gt;
 &lt;br /&gt;
         for (int i = 0; i &amp;lt; m_numPoints; i++)&lt;br /&gt;
           {&lt;br /&gt;
           int nextPoint = (i+1)%m_numPoints;&lt;br /&gt;
           ps.remove_all();&lt;br /&gt;
           ps.move_to(m_x[i], m_y[i]);&lt;br /&gt;
           ps.line_to(m_x[nextPoint], m_y[nextPoint]);&lt;br /&gt;
           ras.add_path(pg);&lt;br /&gt;
           agg::render_scanlines_aa_solid(ras, sl, ren, agg::rgba8(0,150,160, 200));&lt;br /&gt;
           }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
         // Render the controls&lt;br /&gt;
         agg::render_ctrl(ras, sl, ren, m_slider1);&lt;br /&gt;
         agg::render_ctrl(ras, sl, ren, m_slider2);&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     virtual void on_mouse_button_down(int x, int y, unsigned flags)&lt;br /&gt;
     {&lt;br /&gt;
         if(flags &amp;amp; agg::mouse_left)&lt;br /&gt;
         {&lt;br /&gt;
             unsigned i;&lt;br /&gt;
             for (i = 0; i &amp;lt; m_numPoints; i++)&lt;br /&gt;
             {&lt;br /&gt;
                 if(sqrt( (x-m_x[i]) * (x-m_x[i]) + (y-m_y[i]) * (y-m_y[i]) ) &amp;lt; 10.0)&lt;br /&gt;
                 {&lt;br /&gt;
                     m_dx = x - m_x[i];&lt;br /&gt;
                     m_dy = y - m_y[i];&lt;br /&gt;
                     m_idx = i;&lt;br /&gt;
                     break;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
             if(i == m_numPoints + 1)&lt;br /&gt;
             {&lt;br /&gt;
                 if(agg::point_in_triangle(m_x[0], m_y[0],&lt;br /&gt;
                                           m_x[1], m_y[1],&lt;br /&gt;
                                           m_x[2], m_y[2],&lt;br /&gt;
                                           x, y))&lt;br /&gt;
                 {&lt;br /&gt;
                     m_dx = x - m_x[0];&lt;br /&gt;
                     m_dy = y - m_y[0];&lt;br /&gt;
                     m_idx = m_numPoints + 1;&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     virtual void on_mouse_move(int x, int y, unsigned flags)&lt;br /&gt;
     {&lt;br /&gt;
         if(flags &amp;amp; agg::mouse_left)&lt;br /&gt;
         {&lt;br /&gt;
             if(m_idx == m_numPoints + 1)&lt;br /&gt;
             {&lt;br /&gt;
                 double dx = x - m_dx;&lt;br /&gt;
                 double dy = y - m_dy;&lt;br /&gt;
                 m_x[1] -= m_x[0] - dx;&lt;br /&gt;
                 m_y[1] -= m_y[0] - dy;&lt;br /&gt;
                 m_x[2] -= m_x[0] - dx;&lt;br /&gt;
                 m_y[2] -= m_y[0] - dy;&lt;br /&gt;
                 m_x[0] = dx;&lt;br /&gt;
                 m_y[0] = dy;&lt;br /&gt;
                 force_redraw();&lt;br /&gt;
                 return;&lt;br /&gt;
             }&lt;br /&gt;
 &lt;br /&gt;
             if(m_idx &amp;gt;= 0)&lt;br /&gt;
             {&lt;br /&gt;
                 m_x[m_idx] = x - m_dx;&lt;br /&gt;
                 m_y[m_idx] = y - m_dy;&lt;br /&gt;
                 force_redraw();&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
             on_mouse_button_up(x, y, flags);&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     virtual void on_mouse_button_up(int x, int y, unsigned flags)&lt;br /&gt;
     {&lt;br /&gt;
         m_idx = -1;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 int agg_main(int argc, char* argv[])&lt;br /&gt;
 {&lt;br /&gt;
     the_application app(agg::pix_format_bgr24, flip_y);&lt;br /&gt;
     app.caption(&amp;quot;AGG Example. Anti-Aliasing Demo&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     if(app.init(600, 400, agg::window_resize))&lt;br /&gt;
     {&lt;br /&gt;
         return app.run();&lt;br /&gt;
     }&lt;br /&gt;
     return 1;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andy</name></author>
		
	</entry>
</feed>