Release 4.02
removed bug in printing Hausdorf distance, removed bug in command line parsing, upgraded import mesh library to support off format
This commit is contained in:
parent
aee55d8418
commit
b2bd5fd8cf
|
@ -24,6 +24,9 @@
|
||||||
History
|
History
|
||||||
|
|
||||||
$Log: not supported by cvs2svn $
|
$Log: not supported by cvs2svn $
|
||||||
|
Revision 1.10 2004/09/21 23:52:50 cignoni
|
||||||
|
Release 4.01
|
||||||
|
|
||||||
Revision 1.9 2004/09/20 16:29:08 ponchio
|
Revision 1.9 2004/09/20 16:29:08 ponchio
|
||||||
Minimal changes.
|
Minimal changes.
|
||||||
|
|
||||||
|
@ -48,7 +51,6 @@ GPL added
|
||||||
|
|
||||||
// standard libraries
|
// standard libraries
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <locale>
|
|
||||||
|
|
||||||
// project definitions.
|
// project definitions.
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
|
@ -58,9 +60,7 @@ GPL added
|
||||||
#include <vcg/complex/trimesh/update/bounding.h>
|
#include <vcg/complex/trimesh/update/bounding.h>
|
||||||
#include <vcg/math/histogram.h>
|
#include <vcg/math/histogram.h>
|
||||||
#include <vcg/complex/trimesh/clean.h>
|
#include <vcg/complex/trimesh/clean.h>
|
||||||
//#include <wrap/io_trimesh/import_smf.h>
|
#include <wrap/io_trimesh/import.h>
|
||||||
#include <wrap/io_trimesh/import_ply.h>
|
|
||||||
#include <wrap/io_trimesh/import_stl.h>
|
|
||||||
#include <wrap/io_trimesh/export_ply.h>
|
#include <wrap/io_trimesh/export_ply.h>
|
||||||
|
|
||||||
|
|
||||||
|
@ -82,11 +82,11 @@ void Usage()
|
||||||
" -e disable edge sampling\n"\
|
" -e disable edge sampling\n"\
|
||||||
" -f disable face sampling\n"\
|
" -f disable face sampling\n"\
|
||||||
" -u ignore unreferred vertices\n"\
|
" -u ignore unreferred vertices\n"\
|
||||||
" -Sx set the face sampling mode\n"\
|
" -sx set the face sampling mode\n"\
|
||||||
" where x can be:\n"\
|
" where x can be:\n"\
|
||||||
" -S0 montecarlo sampling\n"\
|
" -s0 montecarlo sampling\n"\
|
||||||
" -S1 subdivision sampling\n"\
|
" -s1 subdivision sampling\n"\
|
||||||
" -S2 similar triangles sampling (Default)\n"\
|
" -s2 similar triangles sampling (Default)\n"\
|
||||||
" -n# set the required number of samples (overrides -A)\n"\
|
" -n# set the required number of samples (overrides -A)\n"\
|
||||||
" -a# set the required number of samples per area unit (overrides -N)\n"\
|
" -a# set the required number of samples per area unit (overrides -N)\n"\
|
||||||
" -c save a mesh with error as per-vertex colour and quality\n"\
|
" -c save a mesh with error as per-vertex colour and quality\n"\
|
||||||
|
@ -109,46 +109,19 @@ string SaveFileName(const string &filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// simple aux function that returns true if a given file has a given extesnion
|
|
||||||
bool FileExtension(string filename, string extension)
|
|
||||||
{
|
|
||||||
locale loc1 ;
|
|
||||||
use_facet<ctype<char> > ( loc1 ).tolower(&*filename.begin(),&*filename.end());
|
|
||||||
use_facet<ctype<char> > ( loc1 ).tolower(&*extension.begin(),&*extension.end());
|
|
||||||
string end=filename.substr(filename.length()-extension.length(),extension.length());
|
|
||||||
return end==extension;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open Mesh
|
// Open Mesh
|
||||||
void OpenMesh(const char *filename, CMesh &m)
|
void OpenMesh(const char *filename, CMesh &m)
|
||||||
{
|
{
|
||||||
int err;
|
int err = tri::io::Importer<CMesh>::Open(m,filename);
|
||||||
if(FileExtension(filename,"ply"))
|
if(err) {
|
||||||
{
|
printf("Error in reading %s: '%s'\n",filename,tri::io::Importer<CMesh>::ErrorMsg(err));
|
||||||
err = tri::io::ImporterPLY<CMesh>::Open(m,filename);
|
|
||||||
if(err) {
|
|
||||||
printf("Error in reading %s: '%s'\n",filename,tri::io::ImporterPLY<CMesh>::ErrorMsg(err));
|
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
printf("read mesh `%s'\n", filename);
|
printf("read mesh `%s'\n", filename);
|
||||||
}
|
|
||||||
else if(FileExtension(filename,"stl"))
|
|
||||||
{
|
|
||||||
err = tri::io::ImporterSTL<CMesh>::Open(m,filename);
|
|
||||||
if(err) {
|
|
||||||
printf("Error in reading %s: '%s'\n",filename,tri::io::ImporterSTL<CMesh>::ErrorMsg(err));
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
printf("read mesh `%s'\n", filename);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
printf("Unknown file format for mesh '%s'\n",filename);
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
if(CleaningFlag){
|
if(CleaningFlag){
|
||||||
int dup = tri::Clean<CMesh>::RemoveDuplicateVertex(m);
|
int dup = tri::Clean<CMesh>::RemoveDuplicateVertex(m);
|
||||||
int unref = tri::Clean<CMesh>::RemoveUnreferencedVertex(m);
|
int unref = tri::Clean<CMesh>::RemoveUnreferencedVertex(m);
|
||||||
printf("Removed %i duplicate and %i unreferenced vertices from mesh %s\n",dup,unref,filename);
|
printf("Removed %i duplicate and %i unreferenced vertices from mesh %s\n",dup,unref,filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,7 +137,7 @@ int main(int argc, char**argv)
|
||||||
|
|
||||||
// print program info
|
// print program info
|
||||||
printf("-------------------------------\n"
|
printf("-------------------------------\n"
|
||||||
" Metro V.4.01 \n"
|
" Metro V.4.02 \n"
|
||||||
" http://vcg.isti.cnr.it\n"
|
" http://vcg.isti.cnr.it\n"
|
||||||
" release date: "__DATE__"\n"
|
" release date: "__DATE__"\n"
|
||||||
"-------------------------------\n\n");
|
"-------------------------------\n\n");
|
||||||
|
@ -189,9 +162,9 @@ int main(int argc, char**argv)
|
||||||
case 's' :
|
case 's' :
|
||||||
switch(argv[i][2])
|
switch(argv[i][2])
|
||||||
{
|
{
|
||||||
case 0: flags = (flags | SamplingFlags::MONTECARLO_SAMPLING ) & (~ SamplingFlags::NO_SAMPLING );break;
|
case '0': flags = (flags | SamplingFlags::MONTECARLO_SAMPLING ) & (~ SamplingFlags::NO_SAMPLING );break;
|
||||||
case 1: flags = (flags | SamplingFlags::SUBDIVISION_SAMPLING ) & (~ SamplingFlags::NO_SAMPLING );break;
|
case '1': flags = (flags | SamplingFlags::SUBDIVISION_SAMPLING ) & (~ SamplingFlags::NO_SAMPLING );break;
|
||||||
case 2: flags = (flags | SamplingFlags::SIMILAR_SAMPLING ) & (~ SamplingFlags::NO_SAMPLING );break;
|
case '2': flags = (flags | SamplingFlags::SIMILAR_SAMPLING ) & (~ SamplingFlags::NO_SAMPLING );break;
|
||||||
default : printf(MSG_ERR_INVALID_OPTION, argv[i]);
|
default : printf(MSG_ERR_INVALID_OPTION, argv[i]);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
@ -210,9 +183,9 @@ int main(int argc, char**argv)
|
||||||
// load input meshes.
|
// load input meshes.
|
||||||
OpenMesh(argv[1],S1);
|
OpenMesh(argv[1],S1);
|
||||||
OpenMesh(argv[2],S2);
|
OpenMesh(argv[2],S2);
|
||||||
|
|
||||||
string S1NewName=SaveFileName(argv[1]);
|
string S1NewName=SaveFileName(argv[1]);
|
||||||
string S2NewName=SaveFileName(argv[2]);
|
string S2NewName=SaveFileName(argv[2]);
|
||||||
|
|
||||||
|
|
||||||
if(!NumberOfSamples && !SamplesPerAreaUnit)
|
if(!NumberOfSamples && !SamplesPerAreaUnit)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +240,7 @@ int main(int argc, char**argv)
|
||||||
printf("target # samples : %u\ntarget # samples/area : %f\n", n_samples_target, n_samples_per_area_unit);
|
printf("target # samples : %u\ntarget # samples/area : %f\n", n_samples_target, n_samples_per_area_unit);
|
||||||
ForwardSampling.Hausdorff();
|
ForwardSampling.Hausdorff();
|
||||||
dist1_max = ForwardSampling.GetDistMax();
|
dist1_max = ForwardSampling.GetDistMax();
|
||||||
printf("\ndistances:\n max : %f (%f with respect to bounding box diagonal)\n", (float)dist1_max, (float)dist1_max/bbox.Diag());
|
printf("\ndistances:\n max : %f (%f wrt bounding box diagonal)\n", (float)dist1_max, (float)dist1_max/bbox.Diag());
|
||||||
printf(" mean : %f\n", ForwardSampling.GetDistMean());
|
printf(" mean : %f\n", ForwardSampling.GetDistMean());
|
||||||
printf(" RMS : %f\n", ForwardSampling.GetDistRMS());
|
printf(" RMS : %f\n", ForwardSampling.GetDistRMS());
|
||||||
printf("# vertex samples %9d\n", ForwardSampling.GetNVertexSamples());
|
printf("# vertex samples %9d\n", ForwardSampling.GetNVertexSamples());
|
||||||
|
@ -292,7 +265,7 @@ int main(int argc, char**argv)
|
||||||
printf("target # samples : %u\ntarget # samples/area : %f\n", n_samples_target, n_samples_per_area_unit);
|
printf("target # samples : %u\ntarget # samples/area : %f\n", n_samples_target, n_samples_per_area_unit);
|
||||||
BackwardSampling.Hausdorff();
|
BackwardSampling.Hausdorff();
|
||||||
dist2_max = BackwardSampling.GetDistMax();
|
dist2_max = BackwardSampling.GetDistMax();
|
||||||
printf("\ndistances:\n max : %f (%f with respect to bounding box diagonal)\n", (float)dist1_max, (float)dist1_max/bbox.Diag());
|
printf("\ndistances:\n max : %f (%f wrt bounding box diagonal)\n", (float)dist2_max, (float)dist2_max/bbox.Diag());
|
||||||
printf(" mean : %f\n", BackwardSampling.GetDistMean());
|
printf(" mean : %f\n", BackwardSampling.GetDistMean());
|
||||||
printf(" RMS : %f\n", BackwardSampling.GetDistRMS());
|
printf(" RMS : %f\n", BackwardSampling.GetDistRMS());
|
||||||
printf("# vertex samples %9d\n", BackwardSampling.GetNVertexSamples());
|
printf("# vertex samples %9d\n", BackwardSampling.GetNVertexSamples());
|
||||||
|
@ -306,7 +279,7 @@ int main(int argc, char**argv)
|
||||||
int n_total_sample=ForwardSampling.GetNSamples()+BackwardSampling.GetNSamples();
|
int n_total_sample=ForwardSampling.GetNSamples()+BackwardSampling.GetNSamples();
|
||||||
double mesh_dist_max = max(dist1_max , dist2_max);
|
double mesh_dist_max = max(dist1_max , dist2_max);
|
||||||
|
|
||||||
printf("\nHausdorff distance: %f (%f with respect to bounding box diagonal)\n",(float)mesh_dist_max,(float)mesh_dist_max/bbox.Diag());
|
printf("\nHausdorff distance: %f (%f wrt bounding box diagonal)\n",(float)mesh_dist_max,(float)mesh_dist_max/bbox.Diag());
|
||||||
printf(" Computation time : %d ms\n",(int)(1000.0*elapsed_time/CLOCKS_PER_SEC));
|
printf(" Computation time : %d ms\n",(int)(1000.0*elapsed_time/CLOCKS_PER_SEC));
|
||||||
printf(" # samples/second : %f\n\n", (float)n_total_sample/((float)elapsed_time/CLOCKS_PER_SEC));
|
printf(" # samples/second : %f\n\n", (float)n_total_sample/((float)elapsed_time/CLOCKS_PER_SEC));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue