Example #1
0
	std::auto_ptr< RStarTree<size_t, D, 4, 32, double> > removeOverlapping(std::vector<Center<D> > &centers, 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;
	}
Example #2
0
//////////////////////////////////////////////////////////////////////////
//
// 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");
}
Example #3
0
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;
}