void dump_contours (std::ostream &os, const Boundary &a, int flags) { Boundary::contour_iterator cit; Boundary::edge_iterator eit, eit_end; for (cit = a.contours_begin (); cit != a.contours_end (); ++cit) { if (flags & BY_DIRECTION) { if (total_inflection_for_contour (a, cit) < 0) continue; } eit = a.edges_begin (cit); eit_end = a.edges_end (cit); ++eit_end; for (; eit != eit_end; ++eit) { dump_vertex (os, eit->vert0, a); } os << "\n"; // contour sep. (for gnuplot) } os << "\n"; // index sep. (for gnuplot) if (! (flags & BY_DIRECTION)) return; for (cit = a.contours_begin (); cit != a.contours_end (); ++cit) { if (flags & BY_DIRECTION) { if (total_inflection_for_contour (a, cit) > 0) continue; } eit = a.edges_begin (cit); eit_end = a.edges_end (cit); ++eit_end; for (; eit != eit_end; ++eit) { dump_vertex (os, eit->vert0, a); } os << "\n"; // contour sep. (for gnuplot) } os << "\n"; // index sep. (for gnuplot) }
// perform sanity checking on a Boundary. // this is not public code for now. static void assert_boundary (const Boundary &b) { #ifndef NDEBUG Boundary::contour_iterator cit; for (cit = b.contours_begin (); cit != b.contours_end (); ++cit) { Boundary::edge_iterator eit = b.edges_begin (cit), eit_end = b.edges_end (cit); while (eit != eit_end) { Boundary::edge_iterator next_eit = eit; ++next_eit; if (! (normed_diff (b.edge_vertex1 (eit), b.edge_vertex0 (next_eit)) < VERTEX_MERGE_TOLERANCE)) { die ("assert_boundary: contour is not continuous."); } eit = next_eit; } } #endif // NDEBUG }
void assert_complete_boundary (const Boundary &b) { Boundary::contour_iterator cit = b.contours_begin (); for (; cit != b.contours_end (); ++cit) assert (b.contour_is_complete (cit)); }