diff --git a/apps/sample/trimesh_closest/trimesh_closest.cpp b/apps/sample/trimesh_closest/trimesh_closest.cpp index f0f05f9f..53f46494 100644 --- a/apps/sample/trimesh_closest/trimesh_closest.cpp +++ b/apps/sample/trimesh_closest/trimesh_closest.cpp @@ -66,8 +66,14 @@ void Usage() exit(-1); } -template -bool UnitTest_Closest(const char *filename1, int sampleNum, float dispPerc) +// Testing of closest point on a mesh functionalities +// Two main options +// - using or not precomputed edges and planes +// - using the simple wrapper or the basic functions of the grid. +// - using the fn as size of the grid or the edge lenght as cell side + +template +bool UnitTest_Closest(const char *filename1, int sampleNum, float dispPerc, std::vector resultVec) { MeshType mr; typedef typename MeshType::ScalarType ScalarType; @@ -87,7 +93,7 @@ bool UnitTest_Closest(const char *filename1, int sampleNum, float dispPerc) exit(-1); } int endOpen = clock(); - printf("Mesh loaded in %6.3f - ",float(endOpen-startOpen)/CLOCKS_PER_SEC); + printf("Loading %6.3f - ",float(endOpen-startOpen)/CLOCKS_PER_SEC); int startSampling = clock(); @@ -108,41 +114,73 @@ bool UnitTest_Closest(const char *filename1, int sampleNum, float dispPerc) } int endSampling = clock(); - printf("Mesh Sampled in %6.3f - ",float(endSampling-startSampling)/CLOCKS_PER_SEC); + printf("Sampling %6.3f - ",float(endSampling-startSampling)/CLOCKS_PER_SEC); int startGridInit = clock(); TriMeshGrid TRGrid; - TRGrid.Set(mr.face.begin(),mr.face.end()); + if(useFaceNumForGrid) + { + TRGrid.Set(mr.face.begin(),mr.face.end(),mr.fn*2); + } + else + { + float avgEdge = tri::Stat::ComputeFaceEdgeAverage(mr); + TRGrid.SetWithRadius(mr.face.begin(),mr.face.end(),avgEdge*2); + } if(useEdge) tri::UpdateEdges::Set(mr); int endGridInit = clock(); - printf("Grid Init in %6.3f\n",float(endGridInit-startGridInit)/CLOCKS_PER_SEC); + printf("Grid Init %6.3f - ",float(endGridInit-startGridInit)/CLOCKS_PER_SEC); const ScalarType maxDist=std::max(dispAbs*10.0f,mr.bbox.Diag()/1000.f); CoordType closest; ScalarType dist; - std::vector resultVec(MontecarloSamples.size()); int startGridQuery = clock(); double avgDist=0; - if(useEdge) + resultVec.resize(MontecarloSamples.size()); + if(useEdge && useWrap) for(size_t i=0;i MarkerFace; + MarkerFace mf; + mf.SetMesh(&mr); + face::PointDistanceFunctor PDistFunct; + for(size_t i=0;i MarkerFace; + MarkerFace mf; + mf.SetMesh(&mr); + face::PointDistanceBaseFunctor PDistFunct; + for(size_t i=0;i (argv[1],sampleNum,dispPerc); - UnitTest_Closest (argv[1],sampleNum,dispPerc); - UnitTest_Closest (argv[1],sampleNum,dispPerc); - UnitTest_Closest (argv[1],sampleNum,dispPerc); - UnitTest_Closest(argv[1],sampleNum,dispPerc); - UnitTest_Closest(argv[1],sampleNum,dispPerc); + std::vector resultVecRT11; + std::vector resultVecRT01; + std::vector resultVecRT00; + std::vector resultVecRT10; + std::vector resultVecBS01; + std::vector resultVecBS00; + UnitTest_Closest (argv[1],sampleNum,dispPerc,resultVecRT11); + UnitTest_Closest (argv[1],sampleNum,dispPerc,resultVecRT11); + UnitTest_Closest (argv[1],sampleNum,dispPerc,resultVecRT01); + UnitTest_Closest (argv[1],sampleNum,dispPerc,resultVecRT00); + UnitTest_Closest (argv[1],sampleNum,dispPerc,resultVecRT10); + UnitTest_Closest (argv[1],sampleNum,dispPerc,resultVecBS01); + UnitTest_Closest (argv[1],sampleNum,dispPerc,resultVecBS01); + UnitTest_Closest(argv[1],sampleNum,dispPerc,resultVecBS01); + + for(size_t i=0;i