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; }
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; } }