added -U options (ignore unreferenced vertces)
This commit is contained in:
parent
a1722b063f
commit
d3d955427d
apps/metro
|
@ -30,7 +30,7 @@ bool NumberOfSamples = false;
|
||||||
bool SamplesPerAreaUnit = false;
|
bool SamplesPerAreaUnit = false;
|
||||||
bool SaveErrorDisplacement = false;
|
bool SaveErrorDisplacement = false;
|
||||||
bool SaveErrorAsColour = false;
|
bool SaveErrorAsColour = false;
|
||||||
|
bool IgnoreUnreferred = true;
|
||||||
// -----------------------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,13 +79,13 @@ int main(int argc, char**argv)
|
||||||
printf(MSG_ERR_UNKNOWN_FORMAT, fmt);
|
printf(MSG_ERR_UNKNOWN_FORMAT, fmt);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
if(!strcmp(FILE_EXT_PLY, fmt))
|
if(!strcmp("ply", fmt))
|
||||||
{
|
{
|
||||||
printf("reading the mesh `%s'...", argv[1]);
|
printf("reading the mesh `%s'...", argv[1]);
|
||||||
err = tri::io::ImporterPLY<CMesh>::Open(S1,argv[1]);
|
err = tri::io::ImporterPLY<CMesh>::Open(S1,argv[1]);
|
||||||
}
|
}
|
||||||
/* else
|
/* else
|
||||||
if(!strcmp(FILE_EXT_SMF, fmt))
|
if(!strcmp(file_ext_smf, fmt))
|
||||||
{
|
{
|
||||||
printf("reading the mesh `%s'...", argv[1]);
|
printf("reading the mesh `%s'...", argv[1]);
|
||||||
err = tri::io::ImporterSMF::Open(S1,argv[1]);
|
err = tri::io::ImporterSMF::Open(S1,argv[1]);
|
||||||
|
@ -99,6 +99,7 @@ int main(int argc, char**argv)
|
||||||
{
|
{
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf(MSG_ERR_MESH_LOAD);
|
printf(MSG_ERR_MESH_LOAD);
|
||||||
|
printf(" error number %d",err);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -110,13 +111,13 @@ int main(int argc, char**argv)
|
||||||
printf(MSG_ERR_UNKNOWN_FORMAT, fmt);
|
printf(MSG_ERR_UNKNOWN_FORMAT, fmt);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
if(!strcmp(FILE_EXT_PLY, fmt))
|
if(!strcmp("ply", fmt))
|
||||||
{
|
{
|
||||||
printf("reading the mesh `%s'...", argv[2]);
|
printf("reading the mesh `%s'...", argv[2]);
|
||||||
err = tri::io::ImporterPLY<CMesh>::Open(S2,argv[2]);
|
err = tri::io::ImporterPLY<CMesh>::Open(S2,argv[2]);
|
||||||
}
|
}
|
||||||
/*else
|
/*else
|
||||||
if(!strcmp(FILE_EXT_SMF, fmt))
|
if(!strcmp(file_ext_smf, fmt))
|
||||||
{
|
{
|
||||||
printf("reading the mesh `%s'...", argv[2]);
|
printf("reading the mesh `%s'...", argv[2]);
|
||||||
err = S2.Load_Smf(argv[2]);
|
err = S2.Load_Smf(argv[2]);
|
||||||
|
@ -145,6 +146,7 @@ int main(int argc, char**argv)
|
||||||
strcpy(hist_filename, STR_HIST_FILENAME_DEFAULT);
|
strcpy(hist_filename, STR_HIST_FILENAME_DEFAULT);
|
||||||
break;
|
break;
|
||||||
case CMD_LINE_ARG_VERTEX_SAMPLE : VertexSampleFlag = false; break;
|
case CMD_LINE_ARG_VERTEX_SAMPLE : VertexSampleFlag = false; break;
|
||||||
|
case CMR_LINE_ARG_IGNORE_UNREF : IgnoreUnreferred = true; break;
|
||||||
case CMD_LINE_ARG_EDGE_SAMPLE : EdgeSampleFlag = false; break;
|
case CMD_LINE_ARG_EDGE_SAMPLE : EdgeSampleFlag = false; break;
|
||||||
case CMD_LINE_ARG_FACE_SAMPLE : FaceSampleFlag = false; break;
|
case CMD_LINE_ARG_FACE_SAMPLE : FaceSampleFlag = false; break;
|
||||||
case CMD_LINE_ARG_SAMPLE_TYPE :
|
case CMD_LINE_ARG_SAMPLE_TYPE :
|
||||||
|
@ -188,7 +190,7 @@ int main(int argc, char**argv)
|
||||||
if(!NumberOfSamples && !SamplesPerAreaUnit)
|
if(!NumberOfSamples && !SamplesPerAreaUnit)
|
||||||
{
|
{
|
||||||
NumberOfSamples = true;
|
NumberOfSamples = true;
|
||||||
n_samples_target = NO_SAMPLES_PER_FACE * max(S1.fn,S2.fn);
|
n_samples_target = 10 * max(S1.fn,S2.fn);// take 10 samples per face
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute face information
|
// compute face information
|
||||||
|
@ -203,42 +205,44 @@ int main(int argc, char**argv)
|
||||||
Box3d bbox, tmp_bbox_M1=S1.bbox, tmp_bbox_M2=S2.bbox;
|
Box3d bbox, tmp_bbox_M1=S1.bbox, tmp_bbox_M2=S2.bbox;
|
||||||
bbox.Add(S1.bbox);
|
bbox.Add(S1.bbox);
|
||||||
bbox.Add(S2.bbox);
|
bbox.Add(S2.bbox);
|
||||||
bbox.InflateFix(INFLATE_PERCENTAGE);
|
bbox.InflateFix(0.02);
|
||||||
S1.bbox = bbox;
|
S1.bbox = bbox;
|
||||||
S2.bbox = bbox;
|
S2.bbox = bbox;
|
||||||
|
|
||||||
// set flags.
|
// set flags.
|
||||||
flags = 0;
|
flags = 0;
|
||||||
|
if(IgnoreUnreferred)
|
||||||
|
flags |= SamplingFlags::INCLUDE_UNREFERENCED_VERTICES;
|
||||||
if(ComputeHistFlag)
|
if(ComputeHistFlag)
|
||||||
flags |= FLAG_HIST;
|
flags |= SamplingFlags::HIST;
|
||||||
if(VertexSampleFlag)
|
if(VertexSampleFlag)
|
||||||
flags |= FLAG_VERTEX_SAMPLING;
|
flags |= SamplingFlags::VERTEX_SAMPLING;
|
||||||
if(EdgeSampleFlag)
|
if(EdgeSampleFlag)
|
||||||
flags |= FLAG_EDGE_SAMPLING;
|
flags |= SamplingFlags::EDGE_SAMPLING;
|
||||||
if(FaceSampleFlag)
|
if(FaceSampleFlag)
|
||||||
flags |= FLAG_FACE_SAMPLING;
|
flags |= SamplingFlags::FACE_SAMPLING;
|
||||||
if(MontecarloSamplingFlag)
|
if(MontecarloSamplingFlag)
|
||||||
flags |= FLAG_MONTECARLO_SAMPLING;
|
flags |= SamplingFlags::MONTECARLO_SAMPLING;
|
||||||
if(SubdivisionSamplingFlag)
|
if(SubdivisionSamplingFlag)
|
||||||
flags |= FLAG_SUBDIVISION_SAMPLING;
|
flags |= SamplingFlags::SUBDIVISION_SAMPLING;
|
||||||
if(SimilarTrianglesSamplingFlag)
|
if(SimilarTrianglesSamplingFlag)
|
||||||
flags |= FLAG_SIMILAR_TRIANGLES_SAMPLING;
|
flags |= SamplingFlags::SIMILAR_TRIANGLES_SAMPLING;
|
||||||
flags_fwd = flags;
|
flags_fwd = flags;
|
||||||
flags_back = flags;
|
flags_back = flags;
|
||||||
if(SaveErrorDisplacement)
|
if(SaveErrorDisplacement)
|
||||||
{
|
{
|
||||||
if(S1.vn >= S2.vn)
|
if(S1.vn >= S2.vn)
|
||||||
flags_fwd |= FLAG_SAVE_ERROR_DISPLACEMENT;
|
flags_fwd |= SamplingFlags::SAVE_ERROR_DISPLACEMENT;
|
||||||
else
|
else
|
||||||
flags_back |= FLAG_SAVE_ERROR_DISPLACEMENT;
|
flags_back |= SamplingFlags::SAVE_ERROR_DISPLACEMENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(SaveErrorAsColour)
|
if(SaveErrorAsColour)
|
||||||
{
|
{
|
||||||
if(S1.vn >= S2.vn)
|
if(S1.vn >= S2.vn)
|
||||||
flags_fwd |= FLAG_SAVE_ERROR_AS_COLOUR;
|
flags_fwd |= SamplingFlags::SAVE_ERROR_AS_COLOUR;
|
||||||
else
|
else
|
||||||
flags_back |= FLAG_SAVE_ERROR_AS_COLOUR;
|
flags_back |= SamplingFlags::SAVE_ERROR_AS_COLOUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// initialize time info.
|
// initialize time info.
|
||||||
|
@ -348,28 +352,33 @@ int main(int argc, char**argv)
|
||||||
printf("\nHausdorff distance: %f (%f with respect to bounding box diagonal)\nComputation time : %d ms\n# samples/second : %f\n\n", (float)mesh_dist_max, (float)mesh_dist_max/bbox.Diag(), (int)elapsed_time, (float)n_samples_output/(float)elapsed_time*2000.0F);
|
printf("\nHausdorff distance: %f (%f with respect to bounding box diagonal)\nComputation time : %d ms\n# samples/second : %f\n\n", (float)mesh_dist_max, (float)mesh_dist_max/bbox.Diag(), (int)elapsed_time, (float)n_samples_output/(float)elapsed_time*2000.0F);
|
||||||
|
|
||||||
// save error files.
|
// save error files.
|
||||||
if((flags_fwd & FLAG_SAVE_ERROR_DISPLACEMENT) && (flags_fwd & FLAG_SAVE_ERROR_AS_COLOUR))
|
if((flags_fwd & SamplingFlags::SAVE_ERROR_DISPLACEMENT) && (flags_fwd & SamplingFlags::SAVE_ERROR_AS_COLOUR))
|
||||||
if(!strcmp(new_mesh_filename, new_mesh_filename_2))
|
// if(strcmp(new_mesh_filename, new_mesh_filename_2))
|
||||||
{
|
{
|
||||||
tri::io::ExporterPLY<CMesh>::Save( S1,new_mesh_filename);
|
vcg::tri::io::PlyInfo p;
|
||||||
exit(0);
|
p.mask|=vcg::tri::io::PLYMask::PM_VERTCOLOR|vcg::tri::io::PLYMask::PM_VERTQUALITY;
|
||||||
|
|
||||||
|
tri::io::ExporterPLY<CMesh>::Save( S1,new_mesh_filename,true,p);
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
if((flags_back & FLAG_SAVE_ERROR_DISPLACEMENT) && (flags_back & FLAG_SAVE_ERROR_AS_COLOUR))
|
if((flags_back & SamplingFlags::SAVE_ERROR_DISPLACEMENT) && (flags_back & SamplingFlags::SAVE_ERROR_AS_COLOUR))
|
||||||
if(!strcmp(new_mesh_filename, new_mesh_filename_2))
|
// if(strcmp(new_mesh_filename, new_mesh_filename_2))
|
||||||
{
|
{
|
||||||
tri::io::ExporterPLY<CMesh>::Save( S2,new_mesh_filename_2);
|
vcg::tri::io::PlyInfo p;
|
||||||
exit(0);
|
p.mask|=vcg::tri::io::PLYMask::PM_VERTCOLOR|vcg::tri::io::PLYMask::PM_VERTQUALITY;
|
||||||
|
tri::io::ExporterPLY<CMesh>::Save( S2,new_mesh_filename,true,p);
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if(flags_fwd & FLAG_SAVE_ERROR_DISPLACEMENT)
|
//if(flags_fwd & SamplingFlags::SAVE_ERROR_DISPLACEMENT)
|
||||||
// S1.SavePly(new_mesh_filename, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTCOLOR));
|
// S1.SavePly(new_mesh_filename, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTCOLOR));
|
||||||
//else
|
//else
|
||||||
// if(flags_back & FLAG_SAVE_ERROR_DISPLACEMENT)
|
// if(flags_back & SamplingFlags::SAVE_ERROR_DISPLACEMENT)
|
||||||
// S2.SavePly(new_mesh_filename, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTCOLOR));
|
// S2.SavePly(new_mesh_filename, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTCOLOR));
|
||||||
//if(flags_fwd & FLAG_SAVE_ERROR_AS_COLOUR)
|
//if(flags_fwd & SamplingFlags::SAVE_ERROR_AS_COLOUR)
|
||||||
// S1.SavePly(new_mesh_filename_2, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTQUALITY));
|
// S1.SavePly(new_mesh_filename_2, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTQUALITY));
|
||||||
//else
|
//else
|
||||||
// if(flags_back & FLAG_SAVE_ERROR_AS_COLOUR)
|
// if(flags_back & SamplingFlags::SAVE_ERROR_AS_COLOUR)
|
||||||
// S2.SavePly(new_mesh_filename_2, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTQUALITY));
|
// S2.SavePly(new_mesh_filename_2, CMesh::SM_ALL & (CMesh::SM_ALL ^ CMesh::SM_VERTQUALITY));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue