Exemplo n.º 1
0
float
DeformModel::intersect_vf(unsigned int fid1, unsigned int vid2, unsigned int fid2)
{
	if (!_fac_boxes[fid1].overlaps(_vtx_boxes[vid2]))
		return -1.f;

	for (id_list::iterator it1=_vtx_fids[vid2].begin(); it1!=_vtx_fids[vid2].end(); it1++) {
			unsigned int fid = *it1;
			if (!Covertex_F(fid1, fid)) {
				if (fid == fid2)
					return do_vf(fid1, vid2);
				else
					return -1.f;
			}
	}
	return -1.f;
}
Exemplo n.º 2
0
static int
do_define_font (integer f, char *cnom, char *caire, scaled s, integer natural_dir) {

  boolean res; /* was the callback successful? */
  integer callback_id;
  char *cnam;
#if TIMERS
    struct timeval tva;
    struct timeval tvb;
    double tvdiff;
#endif
  int r;
  res = 0;

  callback_id=callback_defined(define_font_callback);
  if (callback_id>0) {
    if (caire == NULL || strlen(caire)==0) {
      cnam = xstrdup(cnom);
    } else {
      cnam = xmalloc(strlen(cnom)+strlen(caire)+2);
      sprintf(cnam,"%s/%s",caire,cnom);
    }
#if TIMERS
	gettimeofday(&tva,NULL);
#endif
    callback_id = run_and_save_callback(callback_id,"Sdd->",cnam,s,f);
#if TIMERS
	gettimeofday(&tvb,NULL);
	tvdiff = tvb.tv_sec*1000000.0;
	tvdiff += (double)tvb.tv_usec;
	tvdiff -= (tva.tv_sec*1000000.0);
	tvdiff -= (double)tva.tv_usec;
	tvdiff /= 1000000;
	fprintf(stdout,"\ncallback('define_font',%s,%i): %f seconds\n", cnam,f,tvdiff);
#endif
    free(cnam);
    if (callback_id>0) { /* success */
      luaL_checkstack(Luas[0],1,"out of stack space");
      lua_rawgeti(Luas[0],LUA_REGISTRYINDEX, callback_id);
      if (lua_istable(Luas[0],-1)) {
#if TIMERS
	gettimeofday(&tva,NULL);
#endif
	res = font_from_lua(Luas[0],f);	
	destroy_saved_callback (callback_id);
#if TIMERS
	gettimeofday(&tvb,NULL);
	tvdiff = tvb.tv_sec*1000000.0;
	tvdiff += (double)tvb.tv_usec;
	tvdiff -= (tva.tv_sec*1000000.0);
	tvdiff -= (double)tva.tv_usec;
	tvdiff /= 1000000;
	fprintf(stdout,"font_from_lua(%s,%i): %f seconds\n", font_name(f),f,tvdiff);
#endif
	lua_pop(Luas[0],1);
      } else if (lua_isnumber(Luas[0],-1)) {
	r = lua_tonumber(Luas[0],-1);	
	destroy_saved_callback (callback_id);
	delete_font(f);
	lua_pop(Luas[0],1);
	return r;
      } else {
	lua_pop(Luas[0],1);
	delete_font(f);
	return 0;
      }
    }
  } else {
    res = read_tfm_info(f,cnom,caire,s);
    if (res) {
      set_hyphen_char(f,get_default_hyphen_char());
      set_skew_char(f,get_default_skew_char());
    }
  }
  if (res) {
    do_vf(f);
    set_font_natural_dir(f,natural_dir);
    return f;
  } else {
    delete_font(f);
    return 0;
  }

}