mirror of https://github.com/CGAL/cgal
changes according to Ralf Osbild:
The optional messages (verbose) were improved in both files: OFF_to_nef_3.h vertex_cycle_to_nef_3.h Correction in OFF_to_nef_3.h: old: V.reserve(NOI); new: V_f.reserve(NOI); Changes in vertex_cycle_to_nef_3.h The meaning of the parameter 'normal' is now less mandatory. Because of this, the structure of the funtion body slightly changed.
This commit is contained in:
parent
3a3ece0364
commit
cd704b9cda
|
|
@ -100,7 +100,7 @@ bool projected_vertex_cycle_to_nef_3 (typename Nef_3::SNC_structure &snc,
|
||||||
if ( v_it == v_last ) break; // while-end
|
if ( v_it == v_last ) break; // while-end
|
||||||
if ( *v_pred_it == *v_it ) continue ; // no self-loops
|
if ( *v_pred_it == *v_it ) continue ; // no self-loops
|
||||||
ctp.insert_constraint (*v_pred_it, *v_it);
|
ctp.insert_constraint (*v_pred_it, *v_it);
|
||||||
if ( ctp.number_of_vertices() != nov ) break; // error
|
if ( ctp.number_of_vertices() != nov ) break; // constraints intersect
|
||||||
}
|
}
|
||||||
if ( v_it == v_last && *v_pred_it != *v_first) // no self-loops
|
if ( v_it == v_last && *v_pred_it != *v_first) // no self-loops
|
||||||
{ ctp.insert_constraint (*v_pred_it, *v_first);
|
{ ctp.insert_constraint (*v_pred_it, *v_first);
|
||||||
|
|
@ -109,14 +109,6 @@ bool projected_vertex_cycle_to_nef_3 (typename Nef_3::SNC_structure &snc,
|
||||||
// assertion
|
// assertion
|
||||||
if ( ctp.number_of_vertices() != nov )
|
if ( ctp.number_of_vertices() != nov )
|
||||||
{ ostr << " -> Vertex cycle is not simple; edges intersect.";
|
{ ostr << " -> Vertex cycle is not simple; edges intersect.";
|
||||||
/* old
|
|
||||||
if (verb)
|
|
||||||
{ std::cerr << "\n" << __FILE__ << ", line " << __LINE__
|
|
||||||
<< ": assertion violation: vertex cycle is not simple!"
|
|
||||||
<< " (edges intersect)"
|
|
||||||
<< std::endl;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
CGAL_assertion (ctp.is_valid());
|
CGAL_assertion (ctp.is_valid());
|
||||||
|
|
@ -229,18 +221,6 @@ bool projected_vertex_cycle_to_nef_3 (typename Nef_3::SNC_structure &snc,
|
||||||
} while (t_vh != t_vh_0)
|
} while (t_vh != t_vh_0)
|
||||||
; // do-while ends
|
; // do-while ends
|
||||||
|
|
||||||
#ifdef CGAL_NEF_VERTEX_CYCLE_INFO
|
|
||||||
{ // test information
|
|
||||||
int count = 0;
|
|
||||||
for (typename CTP::Subconstraint_iterator scit = ctp.subconstraints_begin();
|
|
||||||
scit != ctp.subconstraints_end(); ++scit) ++count;
|
|
||||||
std::cout << "The number of resulting constrained edges is "
|
|
||||||
<< count << "\n"
|
|
||||||
<< "number of vertices= " << ctp.number_of_vertices() << "\n"
|
|
||||||
<< "number of faces= " << ctp.number_of_faces() << "\n";
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -286,13 +266,13 @@ typedef CGAL::Constrained_triangulation_plus_2<YZ_tri> YZ_tri_plus;
|
||||||
std::ostringstream ostr;
|
std::ostringstream ostr;
|
||||||
|
|
||||||
if ( normal == NULL_VECTOR )
|
if ( normal == NULL_VECTOR )
|
||||||
{ // assertion violation
|
{ // report it
|
||||||
// This case can occur if vertex cycle is not simple!
|
ostr << " -> function parameter 'normal' is NULL_VECTOR"
|
||||||
is_nef = false;
|
<< " (this can be a symptom of an error).";
|
||||||
ostr << " -> normal == NULL_VECTOR.";
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{ // direction of projection?
|
if ( normal != NULL_VECTOR )
|
||||||
|
{ // projection depending on normal vector
|
||||||
direc='z';
|
direc='z';
|
||||||
if ( CGAL::abs(normal.x()) > CGAL::abs(normal.y()) )
|
if ( CGAL::abs(normal.x()) > CGAL::abs(normal.y()) )
|
||||||
{ if ( CGAL::abs(normal.x()) > CGAL::abs(normal.z()) ) direc='x';
|
{ if ( CGAL::abs(normal.x()) > CGAL::abs(normal.z()) ) direc='x';
|
||||||
|
|
@ -303,6 +283,7 @@ typedef CGAL::Constrained_triangulation_plus_2<YZ_tri> YZ_tri_plus;
|
||||||
|
|
||||||
// project and triangulate vertices,
|
// project and triangulate vertices,
|
||||||
// convert result to Nef polyhedron
|
// convert result to Nef polyhedron
|
||||||
|
ostr << " Direction of projection is '" << direc << "'.";
|
||||||
if ( direc == 'x' )
|
if ( direc == 'x' )
|
||||||
{ is_nef = projected_vertex_cycle_to_nef_3<YZ_tri_plus,Nef_3> (
|
{ is_nef = projected_vertex_cycle_to_nef_3<YZ_tri_plus,Nef_3> (
|
||||||
snc, v_first, v_last, ostr);
|
snc, v_first, v_last, ostr);
|
||||||
|
|
@ -316,29 +297,33 @@ typedef CGAL::Constrained_triangulation_plus_2<YZ_tri> YZ_tri_plus;
|
||||||
is_nef = projected_vertex_cycle_to_nef_3<XY_tri_plus,Nef_3> (
|
is_nef = projected_vertex_cycle_to_nef_3<XY_tri_plus,Nef_3> (
|
||||||
snc, v_first, v_last, ostr);
|
snc, v_first, v_last, ostr);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if input data is corrupted, try again
|
if ( !is_nef )
|
||||||
if ( !is_nef && direc != 'x' && normal.x() != 0 )
|
{ // if conversion is unsuccessful so far, try another projection
|
||||||
{ is_nef = projected_vertex_cycle_to_nef_3<YZ_tri_plus,Nef_3> (
|
if ( !is_nef && direc != 'x' )
|
||||||
|
{ ostr << " Now, direction of projection is 'x'.";
|
||||||
|
is_nef = projected_vertex_cycle_to_nef_3<YZ_tri_plus,Nef_3> (
|
||||||
snc, v_first, v_last, ostr);
|
snc, v_first, v_last, ostr);
|
||||||
}
|
}
|
||||||
if ( !is_nef && direc != 'y' && normal.y() != 0 )
|
if ( !is_nef && direc != 'y' )
|
||||||
{ is_nef = projected_vertex_cycle_to_nef_3<XZ_tri_plus,Nef_3> (
|
{ ostr << " Now, direction of projection is 'y'.";
|
||||||
|
is_nef = projected_vertex_cycle_to_nef_3<XZ_tri_plus,Nef_3> (
|
||||||
snc, v_first, v_last, ostr);
|
snc, v_first, v_last, ostr);
|
||||||
}
|
}
|
||||||
if ( !is_nef && direc != 'z' && normal.z() != 0 )
|
if ( !is_nef && direc != 'z' )
|
||||||
{ is_nef = projected_vertex_cycle_to_nef_3<XY_tri_plus,Nef_3> (
|
{ ostr << " Now, direction of projection is 'z'.";
|
||||||
|
is_nef = projected_vertex_cycle_to_nef_3<XY_tri_plus,Nef_3> (
|
||||||
snc, v_first, v_last, ostr);
|
snc, v_first, v_last, ostr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// convertion impossible?
|
// no successful conversion?
|
||||||
if ( !is_nef && verb )
|
if ( !is_nef && verb )
|
||||||
{ // TO DO + Fehlermeldungsstring
|
{ std::cerr << "\nConversion from vertex cycle to Nef_polyhedron_3"
|
||||||
std::cerr << "\n" << __FILE__ << ", line " << __LINE__
|
<< " was not successful. Error history:"
|
||||||
<< ": error history:"
|
|
||||||
<< ostr.str().c_str()
|
<< ostr.str().c_str()
|
||||||
<< " -> Empty Nef_polyhedron_3 constructed." << std::endl;
|
<< " Finally, empty Nef_polyhedron_3 was constructed." << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
return is_nef;
|
return is_nef;
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@
|
||||||
#include <CGAL/Nef_polyhedron_3.h>
|
#include <CGAL/Nef_polyhedron_3.h>
|
||||||
|
|
||||||
// --- begin preliminary number type converter -----------------
|
// --- begin preliminary number type converter -----------------
|
||||||
// --- (to be excluded some day?) ------------------------------
|
|
||||||
|
|
||||||
#ifndef NUMBER_TYPE_CONVERTER_NEF_3_H
|
#ifndef NUMBER_TYPE_CONVERTER_NEF_3_H
|
||||||
#define NUMBER_TYPE_CONVERTER_NEF_3_H
|
#define NUMBER_TYPE_CONVERTER_NEF_3_H
|
||||||
|
|
@ -164,7 +163,7 @@ OFF_to_nef_3 (std::istream &i_st, Nef_3 &nef_union, bool verb=false)
|
||||||
Scan_point_set V_f_scan;
|
Scan_point_set V_f_scan;
|
||||||
V_f_scan.reserve(NOI);
|
V_f_scan.reserve(NOI);
|
||||||
Point_set V_f;
|
Point_set V_f;
|
||||||
V.reserve(NOI);
|
V_f.reserve(NOI);
|
||||||
|
|
||||||
Scan_index_it ind_it = f_it->begin();
|
Scan_index_it ind_it = f_it->begin();
|
||||||
for (jdx=0; ind_it != f_it->end(); ++ind_it, ++jdx)
|
for (jdx=0; ind_it != f_it->end(); ++ind_it, ++jdx)
|
||||||
|
|
@ -177,6 +176,7 @@ OFF_to_nef_3 (std::istream &i_st, Nef_3 &nef_union, bool verb=false)
|
||||||
NOI = jdx;
|
NOI = jdx;
|
||||||
|
|
||||||
bool is_nef = false;
|
bool is_nef = false;
|
||||||
|
CGAL_assertion_msg( V_f.size() >= 1 || !verb, "empty vertex cycle");
|
||||||
if ( V_f.size() >= 1 )
|
if ( V_f.size() >= 1 )
|
||||||
{ // compute Newell vector <double>
|
{ // compute Newell vector <double>
|
||||||
Scan_vector normal;
|
Scan_vector normal;
|
||||||
|
|
@ -189,20 +189,12 @@ OFF_to_nef_3 (std::istream &i_st, Nef_3 &nef_union, bool verb=false)
|
||||||
is_nef = true;
|
is_nef = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{ if (verb)
|
|
||||||
{ std::cerr << "\n" << __FILE__ << ", line " << __LINE__
|
|
||||||
<< ": error: -> Empty vertex cycle."
|
|
||||||
<< std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !is_nef )
|
if ( !is_nef )
|
||||||
{ ++discarded_facets;
|
{ ++discarded_facets;
|
||||||
if (verb)
|
if (verb)
|
||||||
{ std::cerr << "(Within context:)"
|
{ std::cerr << "Hence, discard input facet " << (idx+1)
|
||||||
<< " Discard input facet " << (idx+1)
|
<< " (enumerated beginning with 1)."
|
||||||
<< " (numbered from 1)."
|
|
||||||
<< " Check semantics!\n" << std::endl;
|
<< " Check semantics!\n" << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -210,7 +202,7 @@ OFF_to_nef_3 (std::istream &i_st, Nef_3 &nef_union, bool verb=false)
|
||||||
|
|
||||||
#ifdef CGAL_NEF_OFF_TO_NEF_TIMER
|
#ifdef CGAL_NEF_OFF_TO_NEF_TIMER
|
||||||
t_convert.stop();
|
t_convert.stop();
|
||||||
std::cout << "time conversion: " << t_convert.time()<< std::endl;
|
std::cout << "time (conversion): " << t_convert.time()<< std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// union of queue entries
|
// union of queue entries
|
||||||
|
|
@ -230,7 +222,7 @@ OFF_to_nef_3 (std::istream &i_st, Nef_3 &nef_union, bool verb=false)
|
||||||
|
|
||||||
#ifdef CGAL_NEF_OFF_TO_NEF_TIMER
|
#ifdef CGAL_NEF_OFF_TO_NEF_TIMER
|
||||||
t_union.stop();
|
t_union.stop();
|
||||||
std::cout << "time union: " << t_union.time() << "\n" << std::endl;
|
std::cout << "time (union): " << t_union.time() << "\n" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// return values
|
// return values
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue