#include "ImplicitedSurfacing.h" typedef std::chrono::high_resolution_clock Clock; static Surfacer *p_ImplicitSurfacer; static int TriProc(int in_i1, int in_i2, int in_i3, VERTICES vs) { const R3Pt pt = vs.ptr[in_i1].position; p_ImplicitSurfacer->s_afaceSurface.addItem( R3Pt_i( in_i3, in_i2, in_i1 ) ); return 1; } static void VertProc(VERTICES vs) { p_ImplicitSurfacer->s_aptSurface.need( vs.count ); p_ImplicitSurfacer->s_avecSurface.need( vs.count ); for ( int i = 0; i < vs.count; i++ ) { p_ImplicitSurfacer->s_aptSurface[i] = vs.ptr[i].position; p_ImplicitSurfacer->s_avecSurface[i] = vs.ptr[i].normal; } } void Surfacer::CalSurfacingPara(vector&Vs, int nvoxels){ vectorleftcorner(3, DBL_MAX); vectorrightcorner(3, DBL_MIN); vectormidpoint(3,0); int nv = Vs.size()/3; for(int i=0;i&Vs,int n_voxels, bool ischeckall, double (*function)(const R3Pt &in_pt)){ p_ImplicitSurfacer = this; ClearBuffer(); CalSurfacingPara(Vs, n_voxels); //polygonize(function, size, bounds, st, triproc, vertproc); double thresDist = 1e-3; double re_time; cout<<"Implicit Surfacing: "< &v, vector&fv){ v = all_v; fv = all_fv; } void Surfacer::WriteSurface(vector **v, vector **fv){ *v = &all_v; *fv = &all_fv; } void Surfacer::ClearBuffer(){ ClearSingleComponentBuffer(); all_v.clear(); all_fv.clear(); } void Surfacer::ClearSingleComponentBuffer(){ s_aptSurface.clearcompletely(); s_avecSurface.clearcompletely(); s_afaceSurface.clearcompletely(); } void Surfacer::GetCurSurface(vector&v,vector&fv){ int beInd = v.size()/3; for(int i=0;i&v,vector&fv){ int beInd = all_v.size()/3; all_v.insert(all_v.end(),v.begin(),v.end()); for(auto a:fv)all_fv.push_back(beInd+a); }