std::auto_ptr< RStarTree<size_t, D, 4, 32, double> > removeOverlapping(std::vector<Center<D> > ¢ers, const double& tolerance=0.5) { typedef RStarTree<size_t, D, 4, 32, double> RTree; typedef std::vector<Center<D> > Centers; std::auto_ptr<RTree> tree(new RTree()); Centers filtered; filtered.reserve(centers.size()); //sort the centers by decreasing response (increasing negative intensity) std::sort(centers.begin(), centers.end(), compare_intensities<D>()); //insert the centers one by one, if no overlap const double tolsq = tolerance * tolerance; for(size_t p=0; p<centers.size(); ++p) { //norm 1 overlapping typename RTree::BoundingBox bb = get_bb(centers[p], tolerance); std::list<size_t> overlapping; tree->Query(typename RTree::AcceptOverlapping(bb), Gatherer<D>(overlapping)); bool is_overlapping = false; //norm 2 overlapping for(std::list<size_t>::const_iterator q= overlapping.begin(); q!=overlapping.end(); ++q) if(tolsq*(centers[p]-filtered[*q]) < pow(centers[p].r + filtered[*q].r ,2)) { is_overlapping = true; break; } if(!is_overlapping) { tree->Insert(filtered.size(), bb); filtered.push_back(centers[p]); } } centers.swap(filtered); return tree; }
////////////////////////////////////////////////////////////////////////// // // output a BezierView format file contains the enclosure // void EncQuadBezier::outputtofile(FILE* fpw) { int i,j, nordir, cr; int p1, p2, p3, p4; REAL* v; // output enclosures (set of triangles) for(nordir=0; nordir<2; nordir++) { if(nordir) fprintf(fpw, "group %d %s\n", nordir+1, "outter_enclosure" ); else fprintf(fpw, "group %d %s\n", nordir+1, "inner_enclosure" ); fprintf(fpw, "1 %d %d\n", (segu+1)*(segv+1), segu*segv*2); for (i=0; i<=segu; i++) { for (j=0; j<=segv; j++) { //per bilinear facet v = get_enc( nordir, i,j); fprintf(fpw,"%f %f %f \n", v[0], v[1], v[2]); } } for (i=0; i<segu; i++) { for (j=0; j<segv; j++) { //per bilinear facet cr = (cralong[i*segv+j]+nordir)%2; // opposite creases in/out p1 = i*(segv+1) + j; p2 = p1 + 1; p3 = p2 + (segv+1); p4 = p1 + (segv+1); if(cr==0) { fprintf(fpw, "3 %d %d %d\n", p1, p3, p2); fprintf(fpw, "3 %d %d %d\n", p3, p1, p4); }else if(cr ==1) { fprintf(fpw, "3 %d %d %d\n", p1, p4, p2); fprintf(fpw, "3 %d %d %d\n", p4, p3, p2); } } } } // export bi3 patches fprintf(fpw, "group 3 surface\n"); fprintf(fpw,"5\n %d %d \n", degu, degv); for (i=0; i<=degu; i++) { for (j=0; j<=degv; j++) { v = get_bb(i,j); fprintf(fpw,"%f %f %f \n", v[0],v[1],v[2]); } } fprintf(fpw,"\n"); }
static int lua_ap_recv(lua_State *L) { request_rec *r = CHECK_REQUEST_OBJECT(1); int type = lua_type(L, 2); apr_off_t bytes = LUAL_BUFFERSIZE; int s = 0; if (type == LUA_TNUMBER || type == LUA_TNIL || type == LUA_TNONE) { int n = 0; apr_bucket_brigade *bb = get_bb(r); bytes = luaL_optint(L, 2, (lua_Integer)bytes); s = ap_get_brigade(r->input_filters, bb, AP_MODE_READBYTES, APR_BLOCK_READ, bytes); if (s == 0) { apr_bucket *e; for (e = APR_BRIGADE_FIRST(bb); s == 0 && e != APR_BRIGADE_SENTINEL(bb); e = APR_BUCKET_NEXT(e)) { if (!APR_BUCKET_IS_EOS(e)) { apr_size_t blen; const char* buf; s = apr_bucket_read(e, &buf, &blen, APR_BLOCK_READ); if (s == 0) { lua_pushlstring(L, buf, blen); n++; } } } } if (n > 0) lua_concat(L, n); else lua_pushnil(L); apr_brigade_cleanup(bb); } else if (type == LUA_TSTRING) { const char* want = lua_tostring(L, 2); if (strcasecmp(want, "*l")) { apr_bucket_brigade *bb = get_bb(r); luaL_Buffer buf; apr_size_t n; luaL_buffinit(L, &buf); s = ap_rgetline(&buf.p, LUAL_BUFFERSIZE, &n, r, 0, bb); if (s == 0) { lua_pushlstring(L, buf.buffer, n); } else lua_pushnil(L); apr_brigade_cleanup(bb); } else { luaL_error(L, "#2 only support number or '*'"); } } return 1; }