static int __hwloc_attribute_const rgb_to_fig(int r, int g, int b) { if (r == 0xff && g == 0xff && b == 0xff) return 7; if (!r && !g && !b) return 0; return 32 + rgb_to_color(r, g, b); }
Py::Object RendererAgg::draw_rectangle(const Py::Tuple & args) { _VERBOSE("RendererAgg::draw_rectangle"); args.verify_length(6); theRasterizer->reset_clipping(); Py::Object gcEdge( args[0] ); Py::Object rgbFaceMaybeNone( args[1] ); double l = Py::Float( args[2] ); double b = Py::Float( args[3] ); double w = Py::Float( args[4] ); double h = Py::Float( args[5] ); set_clip_rectangle(gcEdge); double lw = points_to_pixels ( gcEdge.getAttr("_linewidth") ) ; agg::path_storage path; b = height - (b+h); path.move_to(l, b+h); path.line_to(l+w, b+h); path.line_to(l+w, b); path.line_to(l, b); path.close_polygon(); agg::rgba edgecolor = get_color(gcEdge); if (rgbFaceMaybeNone.ptr() != Py_None) { //fill the face Py::SeqBase<Py::Object> rgbFace = rgbFaceMaybeNone; agg::rgba facecolor = rgb_to_color(rgbFace, edgecolor.a); rendererAA->color(facecolor); theRasterizer->add_path(path); agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA); } //now fill the edge agg::conv_stroke<agg::path_storage> stroke(path); stroke.width(lw); rendererAA->color(edgecolor); //self->theRasterizer->gamma(agg::gamma_power(gamma)); theRasterizer->add_path(stroke); agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA); return Py::Object(); }
Py::Object RendererAgg::draw_ellipse(const Py::Tuple& args) { _VERBOSE("RendererAgg::draw_ellipse"); args.verify_length(6); Py::Object gcEdge = args[0]; Py::Object rgbFaceMaybeNone = args[1]; double x = Py::Float( args[2] ); double y = Py::Float( args[3] ); double w = Py::Float( args[4] ); double h = Py::Float( args[5] ); set_clip_rectangle(gcEdge); //last arg is num steps agg::ellipse path(x, height-y, w, h, 100); agg::rgba edgecolor = get_color(gcEdge); if (rgbFaceMaybeNone.ptr() != Py_None) { Py::SeqBase<Py::Object> rgbFace = rgbFaceMaybeNone; agg::rgba facecolor = rgb_to_color(rgbFace, edgecolor.a); theRenderer->color(facecolor); theRasterizer->add_path(path); theRasterizer->render(*slineP8, *theRenderer); } //now fill the edge double lw = points_to_pixels ( gcEdge.getAttr("_linewidth") ) ; agg::conv_stroke<agg::ellipse> stroke(path); stroke.width(lw); theRenderer->color(edgecolor); //self->theRasterizer->gamma(agg::gamma_power(gamma)); theRasterizer->add_path(stroke); theRasterizer->render(*slineP8, *theRenderer); return Py::Object(); }
Py::Object RendererAgg::draw_polygon(const Py::Tuple& args) { _VERBOSE("RendererAgg::draw_polygon"); theRasterizer->reset_clipping(); args.verify_length(3); Py::Object gcEdge( args[0] ); Py::Object rgbFaceMaybeNone( args[1] ); Py::SeqBase<Py::Object> points( args[2] ); set_clip_rectangle(gcEdge); agg::vcgen_stroke::line_cap_e cap = get_linecap(gcEdge); agg::vcgen_stroke::line_join_e join = get_joinstyle(gcEdge); double lw = points_to_pixels ( gcEdge.getAttr("_linewidth") ) ; size_t Npoints = points.length(); if (Npoints<=0) return Py::Object(); // dump the x.y vertices into a double array for faster look ahread // and behind access double xs[Npoints]; double ys[Npoints]; Py::Tuple xy; for (size_t i=0; i<Npoints; ++i) { xy = Py::Tuple(points[i]); xs[i] = Py::Float(xy[0]); ys[i] = Py::Float(xy[1]); ys[i] = height - ys[i]; } agg::path_storage path; for (size_t j=0; j<Npoints; ++j) { double x = xs[j]; double y = ys[j]; if (j==0) path.move_to(x,y); else path.line_to(x,y); } path.close_polygon(); agg::rgba edgecolor = get_color(gcEdge); if (rgbFaceMaybeNone.ptr() != Py_None) { //fill the face Py::SeqBase<Py::Object> rgbFace = rgbFaceMaybeNone; agg::rgba facecolor = rgb_to_color(rgbFace, edgecolor.a); rendererAA->color(facecolor); theRasterizer->add_path(path); agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA); } //now fill the edge agg::conv_stroke<agg::path_storage> stroke(path); stroke.width(lw); stroke.line_cap(cap); stroke.line_join(join); rendererAA->color(edgecolor); //self->theRasterizer->gamma(agg::gamma_power(gamma)); theRasterizer->add_path(stroke); agg::render_scanlines(*theRasterizer, *slineP8, *rendererAA); return Py::Object(); }