static void draw_circle(struct graphics_priv *gr, struct graphics_gc_priv *gc, struct point *p, int r) { if ((gr->overlay_parent && !gr->overlay_parent->overlay_enable) || (gr->overlay_parent && gr->overlay_parent->overlay_enable && !gr->overlay_enable) ) { return; } /* FIXME: does not quite match gtk */ /* hack for osd compass.. why is this needed!? */ if(gr->overlay_mode) { r = r / 2; } if(gr->aa) { raster_aacircle(gr->screen, p->x, p->y, r, SDL_MapRGBA(gr->screen->format, gc->fore_r, gc->fore_g, gc->fore_b, gc->fore_a)); } else { raster_circle(gr->screen, p->x, p->y, r, SDL_MapRGBA(gr->screen->format, gc->fore_r, gc->fore_g, gc->fore_b, gc->fore_a)); } }
//http://stackoverflow.com/questions/5279051/how-can-i-create-cartesian-product-of-vector-of-vectors void Worker::raster_circle_wrapper(const Vc &result, const int rc, const ANNcoord sum_of_squares) { //2.do all the possible combinations of the extra dims... for (int j=0; j<Globals::dimm2; j++) { pos_neg[j][0] = centers[rc][j+2] + result[j]; pos_neg[j][1] = centers[rc][j+2] - result[j]; } //3. for each combination of these extra dims... int idx=0; int id_comb=0; int id_dimm=0; for (Vvc::const_iterator it = pos_neg.begin(); it != pos_neg.end(); ++it) { vd2[idx].begin=(*it).begin(); vd2[idx].end=(*it).end(); vd2[idx].me=(*it).begin(); pos_neg_result[idx]=*(it->begin()); idx++; } while(1) { for (id_dimm=0; id_dimm<Globals::dimm2; id_dimm++) //pos_neg_final[id_comb][id_dimm+2] = pos_neg_result[id_dimm]; leaf_centers[id_comb][id_dimm+2] = pos_neg_result[id_dimm]; id_comb++; idx=0; for(Vd::iterator it = vd2.begin(); ; ) { ++(it->me); if (it->me == it->end) { if(it+1 == vd2.end()) { //sort(pos_neg_final.begin(), pos_neg_final.end(), vcsort); //vvcend = std::unique(pos_neg_final.begin(),pos_neg_final.end(),vccomp); //pos_neg_final_size = vvcend - pos_neg_final.begin(); //printVvc(pos_neg_final); //pos_neg_final //pos_neg_final_size = pos_neg_final.size(); raster_circle(centers[rc][0],centers[rc][1],sides[rc],sum_of_squares,rc); return; } else { it->me = it->begin; pos_neg_result[idx] = *(it->me); ++it; } } else { pos_neg_result[idx] = *(it->me); break; } ++idx; } } }