BUGFIX: One has to choose the lexicographically smallest/largest vertex

This commit is contained in:
Andreas Fabri 2011-08-25 14:42:57 +00:00
parent a5b09f4197
commit a4927e5d6a
1 changed files with 13 additions and 10 deletions

View File

@ -123,12 +123,12 @@ Two_vertices_parameterizer_3<Adaptor>::parameterize_border(Adaptor& mesh)
return Parameterizer_traits_3<Adaptor>::ERROR_BORDER_TOO_SHORT; return Parameterizer_traits_3<Adaptor>::ERROR_BORDER_TOO_SHORT;
// Get mesh's bounding box // Get mesh's bounding box
double xmin = 1e30 ; double xmin = (std::numeric_limits<double>::max)() ;
double ymin = 1e30 ; double ymin = (std::numeric_limits<double>::max)() ;
double zmin = 1e30 ; double zmin = (std::numeric_limits<double>::max)() ;
double xmax = -1e30 ; double xmax = (std::numeric_limits<double>::min)() ;
double ymax = -1e30 ; double ymax = (std::numeric_limits<double>::min)() ;
double zmax = -1e30 ; double zmax = (std::numeric_limits<double>::min)() ;
for (it = mesh.mesh_vertices_begin(); it != mesh.mesh_vertices_end(); it++) for (it = mesh.mesh_vertices_begin(); it != mesh.mesh_vertices_end(); it++)
{ {
Point_3 position = mesh.get_vertex_position(it); Point_3 position = mesh.get_vertex_position(it);
@ -220,9 +220,10 @@ Two_vertices_parameterizer_3<Adaptor>::parameterize_border(Adaptor& mesh)
// Project onto longest bounding box axes, // Project onto longest bounding box axes,
// Set extrema vertices' (u,v) in unit square and mark them as "parameterized" // Set extrema vertices' (u,v) in unit square and mark them as "parameterized"
Vertex_handle vxmin = NULL ; Vertex_handle vxmin = NULL ;
double umin = DBL_MAX ; double umin = (std::numeric_limits<double>::max)() ;
double vmin = (std::numeric_limits<double>::max)(), vmax= (std::numeric_limits<double>::min)();
Vertex_handle vxmax = NULL ; Vertex_handle vxmax = NULL ;
double umax = DBL_MIN ; double umax = (std::numeric_limits<double>::min)() ;
for (it = mesh.mesh_vertices_begin(); it != mesh.mesh_vertices_end(); it++) for (it = mesh.mesh_vertices_begin(); it != mesh.mesh_vertices_end(); it++)
{ {
Point_3 position = mesh.get_vertex_position(it); Point_3 position = mesh.get_vertex_position(it);
@ -240,13 +241,15 @@ Two_vertices_parameterizer_3<Adaptor>::parameterize_border(Adaptor& mesh)
mesh.set_vertex_uv(it, Point_2(u,v)) ; // useful only for vxmin and vxmax mesh.set_vertex_uv(it, Point_2(u,v)) ; // useful only for vxmin and vxmax
if(u < umin) { if(u < umin || (u==umin && v < vmin) ) {
vxmin = it ; vxmin = it ;
umin = u ; umin = u ;
vmin = v ;
} }
if(u > umax) { if(u > umax || (u==umax && v > vmax) ){
vxmax = it ; vxmax = it ;
umax = u ; umax = u ;
vmax = v ;
} }
} }
mesh.set_vertex_parameterized(vxmin, true) ; mesh.set_vertex_parameterized(vxmin, true) ;