void draw_aliased() { pixfmt pixf(rbuf_window()); renderer_base rb(pixf); renderer_bin ren_bin(rb); agg::path_storage path; path.move_to(m_x[0] - 200, m_y[0]); path.line_to(m_x[1] - 200, m_y[1]); path.line_to(m_x[2] - 200, m_y[2]); path.close_polygon(); ren_bin.color(agg::rgba(0.1, 0.5, 0.7, m_alpha.value())); m_ras.gamma(agg::gamma_threshold(m_gamma.value())); m_ras.add_path(path); agg::render_scanlines(m_ras, m_sl_bin, ren_bin); //-- Drawing an outline with subpixel accuracy (aliased) //typedef agg::renderer_primitives<renderer_base> renderer_pr; //renderer_pr ren_pr(rb); //agg::rasterizer_outline<renderer_pr> ras_line(ren_pr); //ren_pr.line_color(agg::rgba(0.0, 0.0, 0.0)); //ras_line.add_path(path); }
void draw_anti_aliased() { pixfmt pixf(rbuf_window()); renderer_base rb(pixf); renderer_aa ren_aa(rb); agg::path_storage path; path.move_to(m_x[0], m_y[0]); path.line_to(m_x[1], m_y[1]); path.line_to(m_x[2], m_y[2]); path.close_polygon(); ren_aa.color(agg::rgba(0.7, 0.5, 0.1, m_alpha.value())); m_ras.gamma(agg::gamma_power(m_gamma.value() * 2.0)); m_ras.add_path(path); agg::render_scanlines(m_ras, m_sl_p8, ren_aa); }
virtual void on_draw() { typedef agg::renderer_base<pixfmt> ren_base; pixfmt pixf(rbuf_window()); ren_base rbase(pixf); trans_roundoff roundoff; if(m_redraw_flag) { g_rasterizer.gamma(agg::gamma_none()); rbase.clear(agg::rgba8(255,255,255)); g_rasterizer.filling_rule(agg::fill_non_zero); agg::render_ctrl(g_rasterizer, g_scanline, rbase, m_rotate); agg::render_ctrl(g_rasterizer, g_scanline, rbase, m_even_odd); agg::render_ctrl(g_rasterizer, g_scanline, rbase, m_draft); agg::render_ctrl(g_rasterizer, g_scanline, rbase, m_roundoff); agg::render_ctrl(g_rasterizer, g_scanline, rbase, m_angle_delta); m_redraw_flag = false; } else { rbase.copy_bar(0, int(32.0 * rbuf_window().height() / m_dy), rbuf_window().width(), rbuf_window().height(), agg::rgba8(255,255,255)); } if(m_draft.status()) { g_rasterizer.gamma(agg::gamma_threshold(0.4)); } agg::trans_affine mtx; mtx.reset(); mtx *= agg::trans_affine_rotation(g_angle * agg::pi / 180.0); mtx *= agg::trans_affine_translation(m_dx / 2, m_dy / 2 + 10); mtx *= agg::trans_affine_scaling(rbuf_window().width() / m_dx, rbuf_window().height() / m_dy); agg::conv_transform<agg::path_storage> fill(g_path, mtx); agg::conv_transform < agg::conv_transform<agg::path_storage>, trans_roundoff > fill_roundoff(fill, roundoff); agg::conv_stroke < agg::conv_transform<agg::path_storage> > stroke(fill); agg::conv_stroke < agg::conv_transform < agg::conv_transform<agg::path_storage>, trans_roundoff > > stroke_roundoff(fill_roundoff); g_pflag = m_even_odd.status() ? agg::fill_even_odd : agg::fill_non_zero; unsigned i; for(i = 0; i < g_npaths; i++) { g_rasterizer.filling_rule(g_pflag); if(m_roundoff.status()) g_rasterizer.add_path(fill_roundoff, g_attr[i].index); else g_rasterizer.add_path(fill, g_attr[i].index); if(m_draft.status()) { agg::render_scanlines_bin_solid(g_rasterizer, g_scanline, rbase, g_attr[i].fill_color); } else { agg::render_scanlines_aa_solid(g_rasterizer, g_scanline, rbase, g_attr[i].fill_color); } if(g_attr[i].stroke_width > 0.001) { stroke.width(g_attr[i].stroke_width * mtx.scale()); stroke_roundoff.width(g_attr[i].stroke_width * mtx.scale()); if(m_roundoff.status()) g_rasterizer.add_path(stroke_roundoff, g_attr[i].index); else g_rasterizer.add_path(stroke, g_attr[i].index); if(m_draft.status()) { agg::render_scanlines_bin_solid(g_rasterizer, g_scanline, rbase, g_attr[i].stroke_color); } else { agg::render_scanlines_aa_solid(g_rasterizer, g_scanline, rbase, g_attr[i].stroke_color); } } } }