diff --git a/.github/workflows/build_doc.yml b/.github/workflows/build_doc.yml index 53d20c39f0e..e8282405392 100644 --- a/.github/workflows/build_doc.yml +++ b/.github/workflows/build_doc.yml @@ -65,6 +65,7 @@ jobs: mkdir -p build_doc && cd build_doc && cmake ../Documentation/doc - name: Build and Upload Doc + id: build_and_run if: steps.get_round.outputs.result != 'stop' run: | set -ex @@ -77,7 +78,13 @@ jobs: if [ "$LIST_OF_PKGS" = "" ]; then exit 1 fi - cd build_doc && make -j2 doc && make -j2 doc_with_postprocessing + cd build_doc && make -j2 doc + make -j2 doc_with_postprocessing 2>tmp.log + if [ -s tmp.log ]; then + content=`cat ./build_doc/tmp.log` + echo ::set-output name=DoxygenError::$(cat tmp.log) + exit 1 + fi cd .. git clone https://CGAL:${{ secrets.PUSH_TO_CGAL_GITHUB_IO_TOKEN }}@github.com/CGAL/cgal.github.io.git mkdir -p cgal.github.io/${PR_NUMBER}/$ROUND @@ -99,7 +106,7 @@ jobs: - name: Post address uses: actions/github-script@v3 - if: steps.get_round.outputs.result != 'stop' + if: ${{ success() && steps.get_round.outputs.result != 'stop' }} with: script: | const address = "The documentation is built. It will be available, after a few minutes, here : https://cgal.github.io/${{ steps.get_pr_number.outputs.result }}/${{ steps.get_round.outputs.result }}/Manual/index.html" @@ -109,3 +116,17 @@ jobs: issue_number: ${{ github.event.issue.number }}, body: address }); + + - name: Post error + uses: actions/github-script@v3 + if: ${{ failure() && steps.get_round.outputs.result != 'stop' }} + with: + script: | + const error = "${{steps.build_and_run.outputs.DoxygenError}}" + const msg = "There was an error while building the doc: \n"+error + github.issues.createComment({ + owner: "CGAL", + repo: "cgal", + issue_number: ${{ github.event.issue.number }}, + body: msg + }); diff --git a/AABB_tree/examples/AABB_tree/AABB_cached_bbox_example.cpp b/AABB_tree/examples/AABB_tree/AABB_cached_bbox_example.cpp index dc81b53098d..6b2fc21e603 100644 --- a/AABB_tree/examples/AABB_tree/AABB_cached_bbox_example.cpp +++ b/AABB_tree/examples/AABB_tree/AABB_cached_bbox_example.cpp @@ -27,7 +27,7 @@ void triangle_mesh(const char* fname) typedef CGAL::AABB_tree Tree; TriangleMesh tmesh; - if(!CGAL::read_polygon_mesh(fname, tmesh) || CGAL::is_triangle_mesh(tmesh)) + if(!CGAL::IO::read_polygon_mesh(fname, tmesh) || CGAL::is_triangle_mesh(tmesh)) { std::cerr << "Invalid input." << std::endl; return; diff --git a/AABB_tree/examples/AABB_tree/AABB_ray_shooting_example.cpp b/AABB_tree/examples/AABB_tree/AABB_ray_shooting_example.cpp index 2a8bfbec29b..f1d983eccf1 100644 --- a/AABB_tree/examples/AABB_tree/AABB_ray_shooting_example.cpp +++ b/AABB_tree/examples/AABB_tree/AABB_ray_shooting_example.cpp @@ -47,7 +47,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/tetrahedron.off"; Mesh mesh; - if(!CGAL::read_polygon_mesh(filename, mesh)) + if(!CGAL::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_structured.cpp b/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_structured.cpp index c0aedf6974b..8dda55c4597 100644 --- a/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_structured.cpp +++ b/Advancing_front_surface_reconstruction/examples/Advancing_front_surface_reconstruction/reconstruction_structured.cpp @@ -114,9 +114,9 @@ int main (int argc, char* argv[]) const char* fname = (argc>1) ? argv[1] : "data/cube.pwn"; // Loading point set from a file. - if (!CGAL::read_points(fname, std::back_inserter(points), - CGAL::parameters::point_map(Point_map()). - normal_map(Normal_map()))) + if (!CGAL::IO::read_points(fname, std::back_inserter(points), + CGAL::parameters::point_map(Point_map()). + normal_map(Normal_map()))) { std::cerr << "Error: cannot read file" << std::endl; return EXIT_FAILURE; diff --git a/Algebraic_foundations/examples/Algebraic_foundations/fraction_traits.cpp b/Algebraic_foundations/examples/Algebraic_foundations/fraction_traits.cpp index 0cf448daab4..3d85eed1e86 100644 --- a/Algebraic_foundations/examples/Algebraic_foundations/fraction_traits.cpp +++ b/Algebraic_foundations/examples/Algebraic_foundations/fraction_traits.cpp @@ -17,7 +17,7 @@ int main(){ CGAL::Gmpq fraction(4,5); FT::Decompose()(fraction,numerator,denominator); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); std::cout << "decompose fraction: "<< std::endl; std::cout << "fraction : " << fraction << std::endl; std::cout << "numerator : " << numerator<< std::endl; diff --git a/Algebraic_foundations/examples/Algebraic_foundations/implicit_interoperable_dispatch.cpp b/Algebraic_foundations/examples/Algebraic_foundations/implicit_interoperable_dispatch.cpp index a781e8fc700..0393f435966 100644 --- a/Algebraic_foundations/examples/Algebraic_foundations/implicit_interoperable_dispatch.cpp +++ b/Algebraic_foundations/examples/Algebraic_foundations/implicit_interoperable_dispatch.cpp @@ -31,7 +31,7 @@ binary_func(const A& a , const B& b){ } int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); // Function call for ImplicitInteroperable types std::cout<< binary_func(double(3), int(5)) << std::endl; diff --git a/Algebraic_foundations/include/CGAL/Needs_parens_as_product.h b/Algebraic_foundations/include/CGAL/Needs_parens_as_product.h index a55040176d1..1aa82b277e3 100644 --- a/Algebraic_foundations/include/CGAL/Needs_parens_as_product.h +++ b/Algebraic_foundations/include/CGAL/Needs_parens_as_product.h @@ -56,9 +56,9 @@ public: Output_rep(const T& tt) : t(tt) {} std::ostream& operator () (std::ostream& out) const { if ( needs_parens_as_product(t)) { - return out << "(" << oformat(t) << ")"; + return out << "(" << IO::oformat(t) << ")"; } else { - return out << oformat(t); + return out << IO::oformat(t); } } }; diff --git a/Algebraic_foundations/include/CGAL/number_utils.h b/Algebraic_foundations/include/CGAL/number_utils.h index d29434ad603..5fc8c6e4570 100644 --- a/Algebraic_foundations/include/CGAL/number_utils.h +++ b/Algebraic_foundations/include/CGAL/number_utils.h @@ -20,6 +20,7 @@ #include #include #include +#include namespace CGAL { CGAL_NTS_BEGIN_NAMESPACE @@ -302,19 +303,21 @@ to_interval( const Real_embeddable& x) { } template -NT approximate_sqrt(const NT& nt, CGAL::Null_functor) +typename Coercion_traits::Type +approximate_sqrt(const NT& x, CGAL::Null_functor) { - return NT(sqrt(CGAL::to_double(nt))); + return sqrt(CGAL::to_double(x)); } template -NT approximate_sqrt(const NT& nt, Sqrt sqrt) +typename Sqrt::result_type +approximate_sqrt(const NT& nt, Sqrt sqrt) { return sqrt(nt); } template -NT approximate_sqrt(const NT& nt) +decltype(auto) approximate_sqrt(const NT& nt) { // the initial version of this function was using Algebraic_category // for the dispatch but some ring type (like Gmpz) provides a Sqrt @@ -324,6 +327,36 @@ NT approximate_sqrt(const NT& nt) return approximate_sqrt(nt, Sqrt()); } +template +typename Same_uncertainty_nt::type +compare_quotients(const NT& xnum, const NT& xden, + const NT& ynum, const NT& yden) +{ + // No assumptions on the sign of den are made + + // code assumes that SMALLER == - 1; + CGAL_precondition( SMALLER == static_cast(-1) ); + + int xsign = sign(xnum) * sign(xden) ; + int ysign = sign(ynum) * sign(yden) ; + if (xsign == 0) return static_cast(-ysign); + if (ysign == 0) return static_cast(xsign); + // now (x != 0) && (y != 0) + int diff = xsign - ysign; + if (diff == 0) + { + int msign = sign(xden) * sign(yden); + NT leftop = NT(xnum * yden * msign); + NT rightop = NT(ynum * xden * msign); + return CGAL::compare(leftop, rightop); + } + else + { + return (xsign < ysign) ? SMALLER : LARGER; + } +} + + CGAL_NTS_END_NAMESPACE } //namespace CGAL diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_curve_kernel_2.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_curve_kernel_2.h index cb3f4e68239..b02303fa6af 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_curve_kernel_2.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_curve_kernel_2.h @@ -49,7 +49,7 @@ #include -#include +#include namespace CGAL { @@ -393,8 +393,8 @@ public: Algebraic_curve_kernel_2() : _m_gcd_cache_2(new Gcd_cache_2()) { - _m_curve_cache_2 = boost::shared_ptr(new Curve_cache_2(this)); - _m_curve_pair_cache_2 = boost::shared_ptr (new Curve_pair_cache_2(this)); + _m_curve_cache_2 = std::shared_ptr(new Curve_cache_2(this)); + _m_curve_pair_cache_2 = std::shared_ptr (new Curve_pair_cache_2(this)); // std::cout << "CONSTRUCTION Algebraic_curve_kernel_2 " << std::endl; } @@ -2766,9 +2766,9 @@ public: protected: -mutable boost::shared_ptr _m_curve_cache_2; -mutable boost::shared_ptr _m_curve_pair_cache_2; -mutable boost::shared_ptr _m_gcd_cache_2; +mutable std::shared_ptr _m_curve_cache_2; +mutable std::shared_ptr _m_curve_pair_cache_2; +mutable std::shared_ptr _m_gcd_cache_2; }; // class Algebraic_curve_kernel_2 diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_real_d_1.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_real_d_1.h index 11900ce8bfa..7d2ed6298e2 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_real_d_1.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Algebraic_real_d_1.h @@ -436,8 +436,8 @@ std::ostream& operator << (std::ostream& os, const CGAL::internal::Algebraic_real_d_1& x){ os << "[" << x.polynomial() - << ",[" << oformat(x.low()) - << " , " << oformat(x.high()) << " ]]"; + << ",[" << IO::oformat(x.low()) + << " , " << IO::oformat(x.high()) << " ]]"; return os; } @@ -458,9 +458,9 @@ operator >> (std::istream& is, is >> poly; swallow(is, ',');// read the "," swallow(is, '[');// read the "," - is >> iformat(low); + is >> IO::iformat(low); swallow(is, ',');// read the "," - is >> iformat(high); + is >> IO::iformat(high); swallow(is, ']');// read the "]" swallow(is, ']');// read the "]" x = ALGNUM(poly, low, high); diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_analysis_2.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_analysis_2.h index 34290afa7e2..339fe371068 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_analysis_2.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Curve_analysis_2.h @@ -2417,7 +2417,7 @@ std::ostream& operator<< ( typedef typename Curve::Asymptote_y Asymptote_y; - switch (::CGAL::get_mode(out)) { + switch (::CGAL::IO::get_mode(out)) { case ::CGAL::IO::PRETTY: { out << "--------------- Analysis results ---------------" << std::endl; @@ -2514,7 +2514,7 @@ std::istream& operator>> ( std::istream& is, Curve_analysis_2< AlgebraicKernelWithAnalysis_2, Rep_ >& curve) { - CGAL_precondition(CGAL::is_ascii(is)); + CGAL_precondition(CGAL::IO::is_ascii(is)); typedef AlgebraicKernelWithAnalysis_2 Algebraic_kernel_with_analysis_2; diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Event_line_builder.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Event_line_builder.h index 75ca4b777f1..978fb2a5e88 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Event_line_builder.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Event_line_builder.h @@ -441,7 +441,7 @@ protected: } /* #if CGAL_ACK_DEBUG_FLAG - ::CGAL::set_ascii_mode(CGAL_ACK_DEBUG_PRINT); + ::CGAL::IO::set_ascii_mode(CGAL_ACK_DEBUG_PRINT); CGAL_ACK_DEBUG_PRINT << "Stha: " << (*seq_it) << std::endl; #endif */ diff --git a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Xy_coordinate_2.h b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Xy_coordinate_2.h index 5172dcf80e6..7167c9f8a12 100644 --- a/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Xy_coordinate_2.h +++ b/Algebraic_kernel_d/include/CGAL/Algebraic_kernel_d/Xy_coordinate_2.h @@ -675,7 +675,7 @@ template < class AlgebraicCurveKernel_2, class Rep> std::ostream& operator<< (std::ostream& os, const Xy_coordinate_2& pt) { - switch (::CGAL::get_mode(os)) { + switch (::CGAL::IO::get_mode(os)) { case ::CGAL::IO::PRETTY: { os << "[x-coord: " << CGAL::to_double(pt.x()) << "; curve: " << pt.curve().polynomial_2() << @@ -703,7 +703,7 @@ std::istream& operator >> ( std::istream& is, Xy_coordinate_2< AlgebraicCurveKernel_2, Rep_>& pt) { - CGAL_precondition(CGAL::is_ascii(is)); + CGAL_precondition(CGAL::IO::is_ascii(is)); // this instance's first template argument typedef AlgebraicCurveKernel_2 Algebraic_curve_kernel_2; diff --git a/Algebraic_kernel_d/test/Algebraic_kernel_d/Curve_analysis_2.cpp b/Algebraic_kernel_d/test/Algebraic_kernel_d/Curve_analysis_2.cpp index 0f1667d105e..2f55d2cd933 100644 --- a/Algebraic_kernel_d/test/Algebraic_kernel_d/Curve_analysis_2.cpp +++ b/Algebraic_kernel_d/test/Algebraic_kernel_d/Curve_analysis_2.cpp @@ -162,7 +162,7 @@ template void test_routine() { CGAL_ACK_DEBUG_PRINT << "P[3(0,P[2(0,-2)(2,2)])(1,P[1(1,-1)])(3,P[1(1,-6)])]" << std::endl; #endif f=from_string("P[3(0,P[2(0,-2)(2,2)])(1,P[1(1,-1)])(3,P[1(1,-6)])]"); - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); curve=construct_curve_2(f); assert(curve.number_of_status_lines_with_event()==1); assert(number_of_objects(curve)==2); diff --git a/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_curve_kernel_2.h b/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_curve_kernel_2.h index d9fb58b9663..dca16083212 100644 --- a/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_curve_kernel_2.h +++ b/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_curve_kernel_2.h @@ -92,7 +92,7 @@ void test_algebraic_curve_kernel_2() { Poly_2 polys[ACK_2_n_polys]; - ::CGAL::set_mode(std::cerr, ::CGAL::IO::PRETTY); + ::CGAL::IO::set_mode(std::cerr, ::CGAL::IO::PRETTY); //std::cerr << "constructing curves..\n"; for(int i = 0; i < ACK_2_n_polys; i++) { diff --git a/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_kernel_1.h b/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_kernel_1.h index d087b945a6b..ac9ea88f5e5 100644 --- a/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_kernel_1.h +++ b/Algebraic_kernel_d/test/Algebraic_kernel_d/include/CGAL/_test_algebraic_kernel_1.h @@ -291,7 +291,7 @@ void test_algebraic_kernel_1(const AlgebraicKernel_d_1& ak_1){ assert(compare_1(bound,Algebraic_real_1(2)) == SMALLER ); } - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cerr); // Approximations bool all_right = true; @@ -408,13 +408,13 @@ void test_algebraic_kernel_1(const AlgebraicKernel_d_1& ak_1){ #define CGAL_TEST_ALGEBRAIC_REAL_IO(_f) \ alg1=_f; \ - ss<>CGAL::iformat(alg2); \ - CGAL_assertion(!ss.fail()); \ + ss>>CGAL::IO::iformat(alg2); \ + CGAL_assertion(!ss.fail()); \ ss.clear(); \ assert(alg1==alg2) - // Note: after the reading ss>>CGAL::iformat(alg2) the state of ss can + // Note: after the reading ss>>CGAL::IO::iformat(alg2) the state of ss can // have the eofbit. The C++ norm says if one tries to write to a stream // with eofbit, then the failbit will be set. That is why one must // clear the iostate with ss.clear(). @@ -422,7 +422,7 @@ void test_algebraic_kernel_1(const AlgebraicKernel_d_1& ak_1){ Algebraic_real_1 alg1,alg2; std::stringstream ss; - CGAL::set_ascii_mode(ss); + CGAL::IO::set_ascii_mode(ss); // test construction from int, Coefficient and Bound CGAL_TEST_ALGEBRAIC_REAL_IO(construct_algebraic_real_1(int(2))); diff --git a/Alpha_shapes_3/include/CGAL/internal/Lazy_alpha_nt_3.h b/Alpha_shapes_3/include/CGAL/internal/Lazy_alpha_nt_3.h index c4384e9ccff..536939db210 100644 --- a/Alpha_shapes_3/include/CGAL/internal/Lazy_alpha_nt_3.h +++ b/Alpha_shapes_3/include/CGAL/internal/Lazy_alpha_nt_3.h @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include diff --git a/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_cls_alpha_shape_3.h b/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_cls_alpha_shape_3.h index dc01d1e9392..d71e8aef398 100644 --- a/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_cls_alpha_shape_3.h +++ b/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_cls_alpha_shape_3.h @@ -23,7 +23,7 @@ template bool file_input(std::ifstream& is, std::list& L, int nb=0) { - CGAL::set_ascii_mode(is); + CGAL::IO::set_ascii_mode(is); int n; is >> n; if (nb != 0 && nb <= n) n=nb; diff --git a/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_weighted_alpha_shape_3.h b/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_weighted_alpha_shape_3.h index c8a099743c5..51d677c3774 100644 --- a/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_weighted_alpha_shape_3.h +++ b/Alpha_shapes_3/test/Alpha_shapes_3/include/CGAL/_test_weighted_alpha_shape_3.h @@ -22,7 +22,7 @@ template bool file_input(std::ifstream& is, std::list& L) { - CGAL::set_ascii_mode(is); + CGAL::IO::set_ascii_mode(is); int n; is >> n; std::cout << "Reading " << n << " points" << std::endl; diff --git a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_2_impl.h b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_2_impl.h index cad9b199647..e5988f9f77b 100644 --- a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_2_impl.h +++ b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_2_impl.h @@ -1966,7 +1966,7 @@ Apollonius_graph_2::file_output(std::ostream& os) const CGAL_assertion( n >= 1 ); - if( is_ascii(os) ) { + if( IO::is_ascii(os) ) { os << n << ' ' << m << ' ' << dimension() << std::endl; } else { os << n << m << dimension(); @@ -1980,24 +1980,24 @@ Apollonius_graph_2::file_output(std::ostream& os) const V[infinite_vertex()] = inum++; // finite vertices - if (is_ascii(os)) os << std::endl; + if (IO::is_ascii(os)) os << std::endl; for (Finite_vertices_iterator vit = finite_vertices_begin(); vit != finite_vertices_end(); ++vit) { V[vit] = inum++; os << vit->site(); - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << vit->number_of_hidden_sites(); typename Vertex::Hidden_sites_iterator hit; for (hit = vit->hidden_sites_begin(); hit != vit->hidden_sites_end(); ++hit) { - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << *hit; } // write non-combinatorial info of the vertex // os << *vit ; - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } // vertices of the faces inum = 0; @@ -2007,25 +2007,25 @@ Apollonius_graph_2::file_output(std::ostream& os) const F[fit] = inum++; for(int j = 0; j < dim ; ++j) { os << V[ fit->vertex(j) ]; - if( is_ascii(os) ) { os << ' '; } + if( IO::is_ascii(os) ) { os << ' '; } } // write non-combinatorial info of the face // os << *fit ; - if( is_ascii(os) ) { os << std::endl; } + if( IO::is_ascii(os) ) { os << std::endl; } } - if( is_ascii(os) ) { os << std::endl; } + if( IO::is_ascii(os) ) { os << std::endl; } // neighbor pointers of the faces for( All_faces_iterator it = all_faces_begin(); it != all_faces_end(); ++it) { for(int j = 0; j < dimension()+1; ++j){ os << F[ it->neighbor(j) ]; - if( is_ascii(os) ) { os << ' '; } + if( IO::is_ascii(os) ) { os << ' '; } } - if( is_ascii(os) ) { os << std::endl; } + if( IO::is_ascii(os) ) { os << std::endl; } } - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } diff --git a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h index 2b9e0acf72c..ba13844eb0e 100644 --- a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h +++ b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/Apollonius_graph_hierarchy_2_impl.h @@ -484,7 +484,7 @@ file_output(std::ostream& os) const // write each level of the hierarchy for (unsigned int i = 0; i < ag_hierarchy_2__maxlevel; ++i) { hierarchy[i]->file_output(os); - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } } Vertex_map* V = new Vertex_map[ag_hierarchy_2__maxlevel]; @@ -520,22 +520,22 @@ file_output(std::ostream& os) const } // write up and down pointer info - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } for (unsigned int i = 0; i < ag_hierarchy_2__maxlevel; ++i) { os << i; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << hierarchy[i]->number_of_vertices(); - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } for (Finite_vertices_iterator vit = hierarchy[i]->finite_vertices_begin(); vit != hierarchy[i]->finite_vertices_end(); ++vit) { os << V[i][vit]; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << V_down[i][vit]; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << V_up[i][vit]; - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } } delete[] V; diff --git a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/comparator_profiler.h b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/comparator_profiler.h index 3e3283e55b4..4395c25a54b 100644 --- a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/comparator_profiler.h +++ b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/comparator_profiler.h @@ -19,7 +19,7 @@ #include -#include +#include namespace CGAL { @@ -33,8 +33,8 @@ public: typedef bool bool_; typedef unsigned long long_; #else - typedef CGAL::cpp11::atomic bool_; - typedef CGAL::cpp11::atomic long_; + typedef std::atomic bool_; + typedef std::atomic long_; #endif static bool_ count_cases; diff --git a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/predicate_profiler.h b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/predicate_profiler.h index d543e6a92a1..cf78798b185 100644 --- a/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/predicate_profiler.h +++ b/Apollonius_graph_2/include/CGAL/Apollonius_graph_2/predicate_profiler.h @@ -19,7 +19,7 @@ #include -#include +#include #define AG2_PROFILE_PREDICATES @@ -33,7 +33,7 @@ public: #ifdef CGAL_NO_ATOMIC typedef unsigned long long_; #else - typedef CGAL::cpp11::atomic long_; + typedef std::atomic long_; #endif // high level predicates diff --git a/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/include/misc.h b/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/include/misc.h index 101637c9cba..d24cb75dfcd 100644 --- a/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/include/misc.h +++ b/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/include/misc.h @@ -56,7 +56,7 @@ public: int i = 0; for(InputIterator it = begin;it != end; it++, i++) { std::stringstream curr_item; - ::CGAL::set_pretty_mode(curr_item); + ::CGAL::IO::set_pretty_mode(curr_item); curr_item << i << "th: "; curr_item << (*it); curve_list->insertItem(curr_item.str()); diff --git a/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/misc.cpp b/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/misc.cpp index 2ba998c0c0f..ce1e65f4b03 100644 --- a/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/misc.cpp +++ b/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/misc.cpp @@ -237,7 +237,7 @@ void xAlci_main_window::oc_rasterize_click() oc_activate_layers(); } else { // CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); Poly_int2 f; if(!input_poly(f, oc_input->text().ascii())) diff --git a/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/xalci.cpp b/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/xalci.cpp index 3aa7f377f4b..9d0bd268bde 100644 --- a/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/xalci.cpp +++ b/Arrangement_on_surface_2/archive/demo/Arr_algebraic_segment_traits_2/xalci/xalci.cpp @@ -194,16 +194,16 @@ void xAlci_main_window::oc_analyse_click() Poly_int2 ress = fxx*fy*fy - ((fx*fy*fxy)*Poly_int1(2,0)) + fyy*fx*fx, res1 = f*fx, res2 = f*fy; - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); std::cout << "curv:\n " << ress << "\n\n"; std::cout << "fx:\n " << fx << "\n\n"; std::cout << "fy:\n " << fy << "\n\n"; std::cout << "f*fx:\n " << res1 << "\n\n"; std::cout << "f*fy:\n " << res2 << "\n\n"; - CGAL::set_ascii_mode(std::cout); + CGAL::IO::set_ascii_mode(std::cout); std::cout << "f:\n " << f << "\n\n"; - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); std::cout << "f:\n " << f << "\n\n"; timer.reset(); diff --git a/Arrangement_on_surface_2/benchmark/Arrangement_on_surface_2/arr_bench.cpp b/Arrangement_on_surface_2/benchmark/Arrangement_on_surface_2/arr_bench.cpp index 391544b48e3..ed93820690c 100644 --- a/Arrangement_on_surface_2/benchmark/Arrangement_on_surface_2/arr_bench.cpp +++ b/Arrangement_on_surface_2/benchmark/Arrangement_on_surface_2/arr_bench.cpp @@ -277,11 +277,11 @@ inline std::ostream & operator<<(std::ostream & os, const Arr::Vertex & vertex) inline Window_stream & operator<<(Window_stream & ws, Arr & arr) { Arr::Edge_iterator ei; - ws << CGAL::blue(); + ws << CGAL::IO::blue(); for (ei = arr.edges_begin(); ei != arr.edges_end(); ++ei) ws << (*ei).curve(); Arr::Vertex_iterator vi; - ws << CGAL::red(); + ws << CGAL::IO::red(); for (vi = arr.vertices_begin(); vi != arr.vertices_end(); ++vi) ws << (*vi).point(); return ws; diff --git a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementIO.cpp b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementIO.cpp index 8e1f6bbc972..5a9be364d6f 100644 --- a/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementIO.cpp +++ b/Arrangement_on_surface_2/demo/Arrangement_on_surface_2/ArrangementIO.cpp @@ -31,7 +31,7 @@ struct ArrReader ArrFormatter arrFormatter; auto arr = new Arrangement(); - CGAL::read(*arr, ifs, arrFormatter); + CGAL::IO::read(*arr, ifs, arrFormatter); return arr; } }; @@ -106,7 +106,7 @@ struct ArrWriter using ArrFormatter = CGAL::Arr_with_history_text_formatter; ArrFormatter arrFormatter; - CGAL::write(*arr, ofs, arrFormatter); + CGAL::IO::write(*arr, ofs, arrFormatter); } }; diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_iostream.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_iostream.h index bcdfd59968d..4b18dcd6656 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_iostream.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_iostream.h @@ -1,6 +1,9 @@ namespace CGAL { + +namespace IO { + /*! - \defgroup PkgArrangementOnSurface2Read CGAL::read() + \defgroup PkgArrangementOnSurface2Read CGAL::IO::read() \ingroup PkgArrangementOnSurface2IO Reads a given arrangement from a given input stream @@ -37,7 +40,7 @@ std::istream& read (Arrangement_2& arr, /// @} /*! - \defgroup PkgArrangementOnSurface2Write CGAL::write() + \defgroup PkgArrangementOnSurface2Write CGAL::IO::write() \ingroup PkgArrangementOnSurface2IO Writes a given arrangement into a given output stream @@ -69,6 +72,8 @@ std::ostream& write (const Arrangement_2& arr, /// @} +} // namespace IO + /*! \ingroup PkgArrangementOnSurface2op_left_shift Inserts the arrangement object `arr` into the output stream @@ -93,4 +98,4 @@ template std::istream& operator>>(std::istream& is, Arrangement_2& arr); -} /* end namespace CGAL*/ +} /* end namespace CGAL::IO*/ diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_with_history_iostream.h b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_with_history_iostream.h index 47caa509bcc..084ec73f6bd 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_with_history_iostream.h +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/CGAL/IO/Arr_with_history_iostream.h @@ -1,5 +1,7 @@ namespace CGAL { +namespace IO { + /*! \ingroup PkgArrangementOnSurface2Read @@ -26,6 +28,8 @@ std::ostream& write (const Arrangement_with_history_2& arr, std::ostream& os, WithHistoryFormatter& formatter); +} // namespace IO + /*! \ingroup PkgArrangementOnSurface2op_left_shift Inserts the arrangement-with-history object `arr` into the output diff --git a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt index 9696042adb3..19eda40a9ca 100644 --- a/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt +++ b/Arrangement_on_surface_2/doc/Arrangement_on_surface_2/PackageDescription.txt @@ -203,8 +203,8 @@ implemented as peripheral classes or as free (global) functions. - `CGAL::locate()` - `CGAL::decompose()` - `CGAL::overlay()` -- `CGAL::read()` -- `CGAL::write()` +- `CGAL::IO::read()` +- `CGAL::IO::write()` - `CGAL::remove_curve()` - \link PkgArrangementOnSurface2op_left_shift `CGAL::operator<<` \endlink - \link PkgArrangementOnSurface2op_right_shift `CGAL::operator<<` \endlink diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/algebraic_curves.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/algebraic_curves.cpp index d6680e4e8c1..a7896581e3f 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/algebraic_curves.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/algebraic_curves.cpp @@ -32,7 +32,7 @@ typedef Arr_traits_2::Polynomial_2 Polynomial_2; int main() { // For nice printouts - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); Arr_traits_2 arr_traits; diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/dcel_extension_io.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/dcel_extension_io.cpp index fc89f889611..130d6f62573 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/dcel_extension_io.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/dcel_extension_io.cpp @@ -119,14 +119,14 @@ int main () std::ofstream out_file ("arr_ex_dcel_io.dat"); Formatter formatter; - write (arr, out_file, formatter); + CGAL::IO::write (arr, out_file, formatter); out_file.close(); // Read the arrangement from the file. Arrangement_2 arr2; std::ifstream in_file ("arr_ex_dcel_io.dat"); - read (arr2, in_file, formatter); + CGAL::IO::read (arr2, in_file, formatter); in_file.close(); std::cout << "The arrangement vertices: " << std::endl; diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/isolated_vertices.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/isolated_vertices.cpp index 9568b33952f..b8a53d7d784 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/isolated_vertices.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/isolated_vertices.cpp @@ -27,9 +27,10 @@ int main() arr.insert_at_vertices(s4, v4, v1); // Remove the isolated vertices located in the unbounded face. - Arrangement::Vertex_iterator curr, next = arr.vertices_begin(); - for (curr = next++; curr != arr.vertices_end(); curr = next++) { + Arrangement::Vertex_iterator iter = arr.vertices_begin(); + while (iter != arr.vertices_end()) { // Keep an iterator to the next vertex, as curr might be deleted. + Arrangement::Vertex_iterator curr = iter ++; if (curr->is_isolated() && curr->face() == uf) arr.remove_isolated_vertex(curr); } diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions.cpp index 8b1e47def30..eaef4cd9829 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions.cpp @@ -29,7 +29,7 @@ typedef CGAL::Arrangement_2 Arrangement_2; int main () { - CGAL::set_pretty_mode(std::cout); // for nice printouts. + CGAL::IO::set_pretty_mode(std::cout); // for nice printouts. // create a polynomial representing x .-) Polynomial_1 x = CGAL::shift(Polynomial_1(1),1); diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions_rational_coefficients.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions_rational_coefficients.cpp index 3b9f7e391c2..f45fb97c76f 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions_rational_coefficients.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/rational_functions_rational_coefficients.cpp @@ -31,7 +31,7 @@ typedef CGAL::Arrangement_2 Arrangement_2; int main () { - CGAL::set_pretty_mode(std::cout); // for nice printouts. + CGAL::IO::set_pretty_mode(std::cout); // for nice printouts. // Traits class object Traits_2 traits; diff --git a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/unbounded_rational_functions.cpp b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/unbounded_rational_functions.cpp index 1f30067dd0d..c5cc697f99d 100644 --- a/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/unbounded_rational_functions.cpp +++ b/Arrangement_on_surface_2/examples/Arrangement_on_surface_2/unbounded_rational_functions.cpp @@ -29,7 +29,7 @@ typedef CGAL::Arrangement_2 Arrangement_2; int main () { - CGAL::set_pretty_mode(std::cout); // for nice printouts. + CGAL::IO::set_pretty_mode(std::cout); // for nice printouts. // Traits class object AK1 ak1; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_circle_segment_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_circle_segment_traits_2.h index 8364ffc5cd3..746ef587cac 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_circle_segment_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_circle_segment_traits_2.h @@ -23,12 +23,12 @@ * The header file for the Arr_circle_segment_traits_2 class. */ -#include #include #include #include #include +#include namespace CGAL { @@ -80,7 +80,7 @@ public: #ifdef CGAL_NO_ATOMIC static unsigned int index; #else - static CGAL::cpp11::atomic index; + static std::atomic index; #endif return (++index); } diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_conic_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_conic_traits_2.h index 45c3a903ea7..4b4fea69c74 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_conic_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_conic_traits_2.h @@ -23,8 +23,8 @@ */ #include +#include -#include #include #include #include @@ -108,7 +108,7 @@ public: #ifdef CGAL_NO_ATOMIC static unsigned int index; #else - static CGAL::cpp11::atomic index; + static std::atomic index; #endif return (++index); } diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_counting_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_counting_traits_2.h index 8f07fc7be36..0ae04106cc7 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_counting_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_counting_traits_2.h @@ -26,9 +26,9 @@ #include #include +#include #include -#include #include #include @@ -958,7 +958,7 @@ public: #ifdef CGAL_NO_ATOMIC static size_t counter; #else - static CGAL::cpp11::atomic counter; + static std::atomic counter; #endif if (doit) ++counter; return counter; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_dcel_base.h b/Arrangement_on_surface_2/include/CGAL/Arr_dcel_base.h index 790600b274e..c930af89952 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_dcel_base.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_dcel_base.h @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include #include @@ -91,6 +91,9 @@ public: /*! Destructor. */ virtual ~Arr_vertex_base() {} + void* for_compact_container() const { return static_cast(p_pt); } + void for_compact_container(void* ptr) { p_pt = static_cast(ptr); } + // Access/modification for pointer squatting void* inc() const { return p_inc; } void set_inc(void * inc) const @@ -183,6 +186,9 @@ public: /*! Destructor. */ virtual ~Arr_halfedge_base() {} + void* for_compact_container() const { return static_cast(p_cv); } + void for_compact_container(void* ptr) { p_cv = static_cast(ptr); } + /*! Check if the curve pointer is nullptr. */ bool has_null_curve() const { return (p_cv == nullptr); } @@ -284,7 +290,7 @@ template class Arr_isolated_vertex; * The default arrangement DCEL vertex class. */ template -class Arr_vertex : public V, public In_place_list_base > +class Arr_vertex : public V { public: @@ -351,8 +357,7 @@ public: * The default arrangement DCEL halfedge class. */ template -class Arr_halfedge : public H, - public In_place_list_base > +class Arr_halfedge : public H { public: typedef H Base; @@ -532,7 +537,7 @@ public: */ template class Arr_face : public F, - public In_place_list_base > + public Compact_container_base { public: typedef F Base; @@ -723,7 +728,7 @@ public: * Representation of an outer CCB. */ template -class Arr_outer_ccb : public In_place_list_base > { +class Arr_outer_ccb { public: typedef Arr_outer_ccb Self; typedef Arr_halfedge Halfedge; @@ -744,6 +749,9 @@ public: p_f(other.p_f), iter_is_not_singular(other.iter_is_not_singular) { if (other.iter_is_not_singular) iter = other.iter; } + void* for_compact_container() const { return static_cast(p_f); } + void for_compact_container(void* ptr) { p_f = static_cast(ptr); } + /*! Get a halfedge along the component (const version). */ const Halfedge* halfedge() const { return (*iter); } @@ -788,7 +796,7 @@ public: * Representation of an inner CCB. */ template -class Arr_inner_ccb : public In_place_list_base > +class Arr_inner_ccb : public Compact_container_base { public: typedef Arr_inner_ccb Self; @@ -908,8 +916,7 @@ public: * Representation of an isolated vertex. */ template -class Arr_isolated_vertex : -public In_place_list_base > { +class Arr_isolated_vertex { public: typedef Arr_isolated_vertex Self; typedef Arr_face Face; @@ -929,6 +936,9 @@ public: p_f(other.p_f), iter_is_not_singular(other.iter_is_not_singular) { if (other.iter_is_not_singular) iv_it = other.iv_it; } + void* for_compact_container() const { return static_cast(p_f); } + void for_compact_container(void* ptr) { p_f = static_cast(ptr); } + /*! Get the containing face (const version). */ const Face* face() const { return (p_f); } @@ -979,13 +989,6 @@ public: typedef Inner_ccb Hole; protected: - // The vetices, halfedges and faces are stored in three in-place lists. - typedef In_place_list Vertex_list; - typedef In_place_list Halfedge_list; - typedef In_place_list Face_list; - typedef In_place_list Outer_ccb_list; - typedef In_place_list Inner_ccb_list; - typedef In_place_list Iso_vert_list; typedef std::allocator_traits Allocator_traits; typedef typename Allocator_traits::template rebind_alloc Vertex_allocator; @@ -995,6 +998,13 @@ protected: typedef typename Allocator_traits::template rebind_alloc Inner_ccb_allocator; typedef typename Allocator_traits::template rebind_alloc Iso_vert_allocator; + typedef Compact_container Vertex_list; + typedef Compact_container Halfedge_list; + typedef Compact_container Face_list; + typedef Compact_container Outer_ccb_list; + typedef Compact_container Inner_ccb_list; + typedef Compact_container Iso_vert_list; + public: typedef typename Halfedge_list::size_type Size; typedef typename Halfedge_list::size_type size_type; @@ -1011,13 +1021,6 @@ protected: Inner_ccb_list in_ccbs; // The inner CCBs. Iso_vert_list iso_verts; // The isolated vertices. - Vertex_allocator vertex_alloc; // An allocator for vertices. - Halfedge_allocator halfedge_alloc; // An allocator for halfedges. - Face_allocator face_alloc; // An allocator for faces. - Outer_ccb_allocator out_ccb_alloc; // An allocator for outer CCBs. - Inner_ccb_allocator in_ccb_alloc; // An allocator for inner CCBs. - Iso_vert_allocator iso_vert_alloc; // Allocator for isolated vertices. - public: // Definitions of iterators. typedef typename Vertex_list::iterator Vertex_iterator; @@ -1144,10 +1147,7 @@ public: /*! Create a new vertex. */ Vertex* new_vertex() { - Vertex* v = vertex_alloc.allocate(1); - std::allocator_traits::construct(vertex_alloc,v); - vertices.push_back(*v); - return v; + return &*vertices.emplace(); } /*! Create a new pair of opposite halfedges. */ @@ -1167,37 +1167,25 @@ public: /*! Create a new face. */ Face* new_face() { - Face* f = face_alloc.allocate(1); - std::allocator_traits::construct(face_alloc, f); - faces.push_back (*f); - return(f); + return &*faces.emplace(); } /*! Create a new outer CCB. */ Outer_ccb* new_outer_ccb() { - Outer_ccb* oc = out_ccb_alloc.allocate(1); - std::allocator_traits::construct(out_ccb_alloc, oc); - out_ccbs.push_back(*oc); - return (oc); + return &*out_ccbs.emplace(); } /*! Create a new inner CCB. */ Inner_ccb* new_inner_ccb() { - Inner_ccb* ic = in_ccb_alloc.allocate(1); - std::allocator_traits::construct(in_ccb_alloc, ic); - in_ccbs.push_back(*ic); - return (ic); + return &*in_ccbs.emplace(); } /*! Create a new isolated vertex. */ Isolated_vertex* new_isolated_vertex() { - Isolated_vertex* iv = iso_vert_alloc.allocate(1); - std::allocator_traits::construct(iso_vert_alloc, iv); - iso_verts.push_back(*iv); - return (iv); + return &*iso_verts.emplace(); } //@} @@ -1206,9 +1194,7 @@ public: /*! Delete an existing vertex. */ void delete_vertex(Vertex* v) { - vertices.erase(v); - std::allocator_traits::destroy(vertex_alloc, v); - vertex_alloc.deallocate(v,1); + vertices.erase (vertices.iterator_to(*v)); } /*! Delete an existing pair of opposite halfedges. */ @@ -1222,33 +1208,25 @@ public: /*! Delete an existing face. */ void delete_face(Face* f) { - faces.erase(f); - std::allocator_traits::destroy(face_alloc, f); - face_alloc.deallocate(f, 1); + faces.erase (faces.iterator_to(*f)); } /*! Delete an existing outer CCB. */ void delete_outer_ccb(Outer_ccb* oc) { - out_ccbs.erase(oc); - std::allocator_traits::destroy(out_ccb_alloc, oc); - out_ccb_alloc.deallocate(oc, 1); + out_ccbs.erase (out_ccbs.iterator_to(*oc)); } /*! Delete an existing inner CCB. */ void delete_inner_ccb(Inner_ccb* ic) { - in_ccbs.erase(ic); - std::allocator_traits::destroy(in_ccb_alloc, ic); - in_ccb_alloc.deallocate(ic, 1); + in_ccbs.erase (in_ccbs.iterator_to(*ic)); } /*! Delete an existing isolated vertex. */ void delete_isolated_vertex(Isolated_vertex* iv) { - iso_verts.erase(iv); - std::allocator_traits::destroy(iso_vert_alloc, iv); - iso_vert_alloc.deallocate(iv, 1); + iso_verts.erase (iso_verts.iterator_to(*iv)); } /*! Delete all DCEL features. */ @@ -1507,18 +1485,13 @@ protected: /*! Create a new halfedge. */ Halfedge* _new_halfedge() { - Halfedge* h = halfedge_alloc.allocate(1); - std::allocator_traits::construct(halfedge_alloc, h); - halfedges.push_back(*h); - return (h); + return &*halfedges.emplace(); } /*! Delete an existing halfedge. */ void _delete_halfedge(Halfedge* h) { - halfedges.erase(h); - std::allocator_traits::destroy(halfedge_alloc,h); - halfedge_alloc.deallocate(h, 1); + halfedges.erase (halfedges.iterator_to(*h)); } }; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_enums.h b/Arrangement_on_surface_2/include/CGAL/Arr_enums.h index 9c52c3b5800..a3425cd2fc6 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_enums.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_enums.h @@ -155,7 +155,7 @@ OutputStream& operator<<( OutputStream& os, const Arr_parameter_space& ps) { - switch (::CGAL::get_mode(os)) { + switch (::CGAL::IO::get_mode(os)) { case ::CGAL::IO::PRETTY: switch(ps) { case CGAL::ARR_LEFT_BOUNDARY: @@ -195,7 +195,7 @@ InputStream& operator>>( InputStream& is, Arr_parameter_space& ps) { - CGAL_precondition(CGAL::is_ascii(is)); + CGAL_precondition(CGAL::IO::is_ascii(is)); int i; is >> i; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_X_trapezoid.h b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_X_trapezoid.h index e7202ffe935..eb64e3ce7e0 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_X_trapezoid.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_X_trapezoid.h @@ -23,7 +23,7 @@ #include #include -#include +#include #ifdef CGAL_TD_DEBUG @@ -95,7 +95,7 @@ public: typedef Td_ninetuple, boost::variant, boost::variant >, + std::shared_ptr >, Halfedge_const_handle, unsigned char, Self*, Self*, @@ -230,7 +230,7 @@ public: if (type() == TD_EDGE) { - //ptr()->e2 = (boost::shared_ptr)(new X_monotone_curve_2(top()->curve())); + //ptr()->e2 = (std::shared_ptr)(new X_monotone_curve_2(top()->curve())); set_curve_for_rem_he(top()->curve()); return; } @@ -238,8 +238,8 @@ public: //else if (type() == TD_VERTEX) Curve_end v_ce(left()->curve_end()); - ptr()->e2 = (boost::shared_ptr)(new X_monotone_curve_2(v_ce.cv())); - //CGAL_assertion(boost::get>( &(ptr()->e2)) != nullptr); + ptr()->e2 = (std::shared_ptr)(new X_monotone_curve_2(v_ce.cv())); + //CGAL_assertion(boost::get>( &(ptr()->e2)) != nullptr); ptr()->e1 = (v_ce.ce() == ARR_MIN_END ) ? CGAL_TD_CV_MIN_END : CGAL_TD_CV_MAX_END; @@ -255,7 +255,7 @@ public: { CGAL_precondition (type() == TD_EDGE); - ptr()->e2 = (boost::shared_ptr)(new X_monotone_curve_2(cv)); + ptr()->e2 = (std::shared_ptr)(new X_monotone_curve_2(cv)); } /*! Set the trapezoid's type flag (Trapezoid/Edge/Vertex). */ @@ -537,8 +537,8 @@ public: CGAL_precondition(is_on_boundaries()); CGAL_assertion(boost::get( &(ptr()->e1)) != nullptr); - CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); - X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); + CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); + X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); CGAL_assertion(cv_ptr != nullptr); Arr_curve_end ce = @@ -555,8 +555,8 @@ public: CGAL_precondition(is_on_boundaries()); CGAL_assertion(boost::get( &(ptr()->e1)) != nullptr); - CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); - X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); + CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); + X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); CGAL_assertion(cv_ptr != nullptr); Arr_curve_end ce = @@ -572,8 +572,8 @@ public: CGAL_precondition(type() == TD_VERTEX); CGAL_assertion(boost::get( &(ptr()->e1)) != nullptr); - CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); - X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); + CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); + X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); CGAL_assertion(cv_ptr != nullptr); Arr_curve_end ce = @@ -587,8 +587,8 @@ public: { CGAL_precondition(!is_active() && type() == TD_EDGE); - CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); - X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); + CGAL_assertion(boost::get >(&(ptr()->e2)) != nullptr); + X_monotone_curve_2* cv_ptr = (boost::get >(ptr()->e2)).get(); CGAL_assertion(cv_ptr != nullptr); return *cv_ptr; } diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_edge.h b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_edge.h index 61259f33547..6954193a227 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_edge.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_edge.h @@ -22,7 +22,7 @@ #include #include -#include +#include #ifdef CGAL_TD_DEBUG diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_fictitious_vertex.h b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_fictitious_vertex.h index b75de1b9d97..8f038c6b5e4 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_fictitious_vertex.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_fictitious_vertex.h @@ -22,7 +22,7 @@ #include #include -#include +#include #ifdef CGAL_TD_DEBUG #define CGAL_TD_INLINE diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_vertex.h b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_vertex.h index 3b3e86aa0c6..9439d3825c4 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_vertex.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_active_vertex.h @@ -22,7 +22,7 @@ #include #include -#include +#include #ifdef CGAL_TD_DEBUG diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_inactive_edge.h b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_inactive_edge.h index bb57f7c6d1c..ed5759d6bc0 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_inactive_edge.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Td_inactive_edge.h @@ -22,7 +22,7 @@ #include #include -#include +#include #ifdef CGAL_TD_DEBUG @@ -115,14 +115,14 @@ public: public: //c'tors - Data (boost::shared_ptr& _cv, Dag_node* _p_node) + Data (std::shared_ptr& _cv, Dag_node* _p_node) : cv(_cv), p_node(_p_node) //, lb(_lb),lt(_lt),rb(_rb),rt(_rt) { } ~Data() { } protected: - boost::shared_ptr cv; + std::shared_ptr cv; Dag_node* p_node; }; @@ -148,7 +148,7 @@ public: } /*! Set the x_monotone_curve_2 for removed edge degenerate trapezoid. */ - CGAL_TD_INLINE void set_curve(boost::shared_ptr& cv) + CGAL_TD_INLINE void set_curve(std::shared_ptr& cv) { ptr()->cv = cv; } @@ -159,7 +159,7 @@ public: //@{ /*! Constructor given Vertex & Halfedge handles. */ - Td_inactive_edge (boost::shared_ptr& cv, Dag_node* node = nullptr) + Td_inactive_edge (std::shared_ptr& cv, Dag_node* node = nullptr) { PTR = new Data(cv,node); } diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2.h index e48f1aa5c55..d9ff595e41d 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2.h @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include @@ -1206,7 +1206,7 @@ protected: void deactivate_vertex (Dag_node& vtx_node) const; - void deactivate_edge (boost::shared_ptr& cv, Dag_node& edge_node) const; + void deactivate_edge (std::shared_ptr& cv, Dag_node& edge_node) const; //----------------------------------------------------------------------------- // Description: diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2_impl.h b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2_impl.h index d86c0c869f9..087920e3aec 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2_impl.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_point_location/Trapezoidal_decomposition_2_impl.h @@ -244,7 +244,7 @@ deactivate_vertex(Dag_node& vtx_node) const template void Trapezoidal_decomposition_2:: -deactivate_edge(boost::shared_ptr& cv, +deactivate_edge(std::shared_ptr& cv, Dag_node& edge_node) const { CGAL_precondition(traits->is_active(edge_node.get_data())); @@ -1870,7 +1870,7 @@ void Trapezoidal_decomposition_2::remove(Halfedge_const_handle he) //----------------------------------- //3. remove the trapezoids that represent the removed halfedge - boost::shared_ptr + std::shared_ptr removed_cv_ptr(new X_monotone_curve_2(he->curve())); Base_map_item_iterator last_edge_fragment_it = mid_it; //Base_trapezoid_iterator last_mid = mid_it; diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h index f3a101db437..460bbe432a7 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h @@ -237,7 +237,7 @@ public: std::ostream& print (std::ostream& os) const { std::pair double_p; - switch(::CGAL::get_mode(os)) + switch(::CGAL::IO::get_mode(os)) { case ::CGAL::IO::PRETTY: double_p = this->to_double(); diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_triangulation_point_location.h b/Arrangement_on_surface_2/include/CGAL/Arr_triangulation_point_location.h index 0203f0466bd..e3f5c3565ff 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_triangulation_point_location.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_triangulation_point_location.h @@ -80,7 +80,7 @@ public: typedef Triangulation_vertex_base_with_info_2 Vbb; typedef Triangulation_hierarchy_vertex_base_2 Vb; - //typedef Triangulation_face_base_with_info_2 Fbt; + //typedef Triangulation_face_base_with_info_2 Fbt; typedef Constrained_triangulation_face_base_2 Fb; typedef Triangulation_data_structure_2 TDS; typedef Exact_predicates_tag Itag; diff --git a/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_2_iterators.h b/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_2_iterators.h index e210813d47f..219c445bdc1 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_2_iterators.h +++ b/Arrangement_on_surface_2/include/CGAL/Arrangement_2/Arrangement_2_iterators.h @@ -288,6 +288,12 @@ public: iend (nt) {} + template + I_Filtered_iterator (T* p) : + nt (pointer(p)), + iend (nt) + {} + I_Filtered_iterator (Iterator it, Iterator end) : nt (it), iend (end) @@ -305,6 +311,14 @@ public: ++nt; } + template + I_Filtered_iterator& operator= (const P* p) + { + nt = pointer(p); + iend =nt; + return *this; + } + /*! Access operations. */ Iterator current_iterator() const { @@ -439,6 +453,12 @@ public: iend (it) {} + template + I_Filtered_const_iterator (T* p) : + nt (pointer(p)), + iend (nt) + {} + I_Filtered_const_iterator (Iterator it, Iterator end) : nt (it), iend (end) @@ -465,6 +485,14 @@ public: // ++nt; } + template + I_Filtered_const_iterator& operator= (const P* p) + { + nt = pointer(p); + iend =nt; + return *this; + } + /*! Access operations. */ Iterator current_iterator() const { diff --git a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Arc_2.h b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Arc_2.h index dcdb6dbbc74..cfbbcc23784 100644 --- a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Arc_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Arc_2.h @@ -3164,7 +3164,7 @@ public: */ void write(std::ostream& os) const { - switch (::CGAL::get_mode(os)) { + switch (::CGAL::IO::get_mode(os)) { case ::CGAL::IO::PRETTY: os << "arc@" << this->id() << "[(sup@" << this->curve().id(); if (this->is_vertical()) { @@ -3214,7 +3214,7 @@ public: */ void read(std::istream& is) { - CGAL_precondition(CGAL::is_ascii(is)); + CGAL_precondition(CGAL::IO::is_ascii(is)); Rep rep; @@ -3371,7 +3371,7 @@ std::istream& operator>> ( std::istream& is, Arc_2< CurvedKernelViaAnalysis_2, Rep_ >& arc) { - CGAL_precondition(CGAL::is_ascii(is)); + CGAL_precondition(CGAL::IO::is_ascii(is)); //typedef CurvedKernelViaAnalysis_2 Curved_kernel_via_analysis_2; //typedef Rep_ Rep; diff --git a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Curved_kernel_via_analysis_2_functors.h b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Curved_kernel_via_analysis_2_functors.h index b8dd6eaf6f9..1447bbf1ff4 100644 --- a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Curved_kernel_via_analysis_2_functors.h +++ b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Curved_kernel_via_analysis_2_functors.h @@ -231,7 +231,7 @@ public: // avoid compiler warning (void)arc; - //CGAL::set_pretty_mode(std::cerr); + //CGAL::IO::set_pretty_mode(std::cerr); CERR("Construct_pt_on_arc: " << CGAL::to_double(x) << ", " << arcno << ", " << c.id() << "\narc = " << arc << "\n"); diff --git a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h index 09e245ec4ff..b06c547b182 100644 --- a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/Point_2.h @@ -615,7 +615,7 @@ public: */ void write(std::ostream& os) const { - switch(::CGAL::get_mode(os)) { + switch(::CGAL::IO::get_mode(os)) { case ::CGAL::IO::PRETTY: os << "point@" << this->id() << "("; os << "sup@" << this->curve().id() << "; "; @@ -722,7 +722,7 @@ public: */ void read(std::istream& is) { - CGAL_precondition(CGAL::is_ascii(is)); + CGAL_precondition(CGAL::IO::is_ascii(is)); Rep rep; @@ -823,7 +823,7 @@ std::istream& operator>> ( std::istream& is, Point_2< CurvedKernelViaAnalysis_2, Rep_ >& pt) { - CGAL_precondition(CGAL::is_ascii(is)); + CGAL_precondition(CGAL::IO::is_ascii(is)); //typedef CurvedKernelViaAnalysis_2 Curved_kernel_via_analysis_2; //typedef Rep_ Rep; diff --git a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/gfx/Curve_renderer_2.h b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/gfx/Curve_renderer_2.h index 745381dc630..163bbff54e9 100644 --- a/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/gfx/Curve_renderer_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Curved_kernel_via_analysis_2/gfx/Curve_renderer_2.h @@ -2586,8 +2586,8 @@ inline bool is_isolated_pixel(const Pixel_2& /* pix */) { // DEBUG ONLY #ifdef Gfx_USE_OUT void dump_neighbourhood(const Pixel_2& pix) { - CGAL::set_mode(std::cerr, CGAL::IO::PRETTY); - CGAL::set_mode(std::cout, CGAL::IO::PRETTY); + CGAL::IO::set_mode(std::cerr, CGAL::IO::PRETTY); + CGAL::IO::set_mode(std::cout, CGAL::IO::PRETTY); Stripe box[2]; // 0 - left-right stripe, 1 - bottom-top stripe //NT inv = NT(1) / NT(one << pix.level); diff --git a/Arrangement_on_surface_2/include/CGAL/IO/Arr_iostream.h b/Arrangement_on_surface_2/include/CGAL/IO/Arr_iostream.h index 7e42544af2d..0ca1a6b6bd6 100644 --- a/Arrangement_on_surface_2/include/CGAL/IO/Arr_iostream.h +++ b/Arrangement_on_surface_2/include/CGAL/IO/Arr_iostream.h @@ -29,6 +29,8 @@ namespace CGAL { +namespace IO { + /*! * Write an arrangement to an output stream using a given formatter. * \param arr The arrangement. @@ -51,6 +53,8 @@ std::ostream& return (os); } +} // namespace IO + /*! * Output operator (importer). * \param os The output stream. @@ -72,6 +76,8 @@ std::ostream& return (os); } +namespace IO { + /*! * Read an arrangement from an input stream using a given formatter. * \param arr The arrangement. @@ -94,6 +100,8 @@ std::istream& return (is); } +} // namespace IO + /*! * Output operator (exporter). * \param is The input stream. @@ -115,6 +123,11 @@ std::istream& return (is); } +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::read; +using IO::write; +#endif + } //namespace CGAL #endif diff --git a/Arrangement_on_surface_2/include/CGAL/IO/Arr_text_formatter.h b/Arrangement_on_surface_2/include/CGAL/IO/Arr_text_formatter.h index d9337e2805f..a0096d36b76 100644 --- a/Arrangement_on_surface_2/include/CGAL/IO/Arr_text_formatter.h +++ b/Arrangement_on_surface_2/include/CGAL/IO/Arr_text_formatter.h @@ -120,8 +120,8 @@ public: void write_arrangement_begin() { CGAL_assertion(m_out != nullptr); - m_old_out_mode = get_mode(*m_out); - set_ascii_mode(*m_out); + m_old_out_mode = IO::get_mode(*m_out); + IO::set_ascii_mode(*m_out); _write_comment("BEGIN ARRANGEMENT"); } @@ -277,8 +277,8 @@ public: void read_arrangement_begin() { CGAL_assertion(m_in != nullptr); - m_old_in_mode = get_mode(*m_in); - set_ascii_mode(*m_in); + m_old_in_mode = IO::get_mode(*m_in); + IO::set_ascii_mode(*m_in); _skip_comments(); } diff --git a/Arrangement_on_surface_2/include/CGAL/IO/Arr_with_history_iostream.h b/Arrangement_on_surface_2/include/CGAL/IO/Arr_with_history_iostream.h index d1a37040e91..3c366136072 100644 --- a/Arrangement_on_surface_2/include/CGAL/IO/Arr_with_history_iostream.h +++ b/Arrangement_on_surface_2/include/CGAL/IO/Arr_with_history_iostream.h @@ -30,6 +30,8 @@ namespace CGAL { +namespace IO { + /*! * Write an arrangement with history to an output stream using a given * formatter. @@ -54,6 +56,8 @@ std::ostream& write return (os); } +} // namespace IO + /*! * Output operator (importer). * \param os The output stream. @@ -77,6 +81,8 @@ std::ostream& operator<< return (os); } +namespace IO { + /*! * Read an arrangement with history from an input stream using a given * formatter. @@ -101,6 +107,8 @@ std::istream& read return (is); } +} // namespace IO + /*! * Output operator (exporter). * \param is The input stream. @@ -124,6 +132,11 @@ std::istream& operator>> return (is); } +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::read; +using IO::write; +#endif + } //namespace CGAL #endif diff --git a/Arrangement_on_surface_2/include/CGAL/IO/Fig_stream_Conic_arc_2.h b/Arrangement_on_surface_2/include/CGAL/IO/Fig_stream_Conic_arc_2.h index 5ca5bdecbb8..626087f67bb 100644 --- a/Arrangement_on_surface_2/include/CGAL/IO/Fig_stream_Conic_arc_2.h +++ b/Arrangement_on_surface_2/include/CGAL/IO/Fig_stream_Conic_arc_2.h @@ -18,6 +18,9 @@ #include #include +namespace CGAL { +namespace IO { + /*! * Write an x-monotone conic arc to a FIG stream. */ @@ -97,4 +100,6 @@ void write_conic_arc return; } +}} // namespace CGAL:IO + #endif diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Overlay_test.h b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Overlay_test.h index 6a45618aeb9..d1d1eaa56db 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Overlay_test.h +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/Overlay_test.h @@ -745,7 +745,7 @@ bool Overlay_test::init() // Expected arrangement. Formatter formatter; - CGAL::read(m_arr, p_stream, formatter); + CGAL::IO::read(m_arr, p_stream, formatter); p_stream.close(); @@ -981,13 +981,13 @@ bool Overlay_test::perform() Arrangement arr; Overlay_traits overlay_traits(m_verbose_level); // Formatter formatter; - // CGAL::write(m_arr2, std::cout, formatter); + // CGAL::IO::write(m_arr2, std::cout, formatter); CGAL::overlay(m_arr1, m_arr2, arr, overlay_traits); // Generate the output for debugging purposes // Formatter formatter; - // CGAL::write(arr, std::cout, formatter); + // CGAL::IO::write(arr, std::cout, formatter); // Verify the resulting arrangement: if (!equivalent_arr(arr, m_arr)) { diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_batched_point_location.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_batched_point_location.cpp index 4f335409a64..2162954c316 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_batched_point_location.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_batched_point_location.cpp @@ -87,8 +87,8 @@ bool test(const char* points_filename, const char* xcurves_filename, int main(int argc, char* argv[]) { #if TEST_GEOM_TRAITS == ALGEBRAIC_GEOM_TRAITS - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); #endif size_t verbose_level = 0; diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.cpp index 5b1c849af03..ba4e4738b41 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_construction.cpp @@ -96,8 +96,8 @@ bool test(const char* filename, int verbose_level) int main(int argc, char* argv[]) { #if TEST_GEOM_TRAITS == ALGEBRAIC_GEOM_TRAITS - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); #endif if (argc < 2) { diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_overlay.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_overlay.cpp index f648439034a..34992ea018b 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_overlay.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_overlay.cpp @@ -129,8 +129,8 @@ bool test(const char* filename, int verbose_level) int main(int argc, char* argv[]) { #if TEST_GEOM_TRAITS == ALGEBRAIC_GEOM_TRAITS - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); #endif if (argc < 2) { diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp index 9cc77ec9977..75eacfabdd0 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location.cpp @@ -128,8 +128,8 @@ bool test3(const char* points_filename, const char* xcurves_filename, int main(int argc, char* argv[]) { #if TEST_GEOM_TRAITS == ALGEBRAIC_GEOM_TRAITS - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); #endif if (argc < 4) { diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location_dynamic.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location_dynamic.cpp index 4a1d461f690..d9c13cbbd44 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location_dynamic.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_point_location_dynamic.cpp @@ -91,8 +91,8 @@ bool test1(const char* points_filename, const char* xcurves_filename, int main(int argc, char* argv[]) { #if TEST_GEOM_TRAITS == ALGEBRAIC_GEOM_TRAITS - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); #endif if (argc < 5) { diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits.cpp index b883a6ba0f6..ec26c356b75 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_traits.cpp @@ -73,8 +73,8 @@ int main(int argc, char* argv[]) { #if TEST_GEOM_TRAITS == ALGEBRAIC_GEOM_TRAITS - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); #endif Geom_traits traits; diff --git a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_vertical_decomposition.cpp b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_vertical_decomposition.cpp index 748632219b7..9bd60487f5d 100644 --- a/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_vertical_decomposition.cpp +++ b/Arrangement_on_surface_2/test/Arrangement_on_surface_2/test_vertical_decomposition.cpp @@ -84,8 +84,8 @@ bool test(const char* points_filename, const char* xcurves_filename, int main(int argc, char* argv[]) { #if TEST_GEOM_TRAITS == ALGEBRAIC_GEOM_TRAITS - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); #endif size_t verbose_level = 0; diff --git a/BGL/doc/BGL/PackageDescription.txt b/BGL/doc/BGL/PackageDescription.txt index cf7e059049b..d74834a3c19 100644 --- a/BGL/doc/BGL/PackageDescription.txt +++ b/BGL/doc/BGL/PackageDescription.txt @@ -756,8 +756,8 @@ user might encounter. - `CGAL::alpha_expansion_graphcut()` \cgalCRPSection{I/O Functions} -- `CGAL::read_polygon_mesh()` -- `CGAL::write_polygon_mesh()` +- `CGAL::IO::read_polygon_mesh()` +- `CGAL::IO::write_polygon_mesh()` - \link PkgBGLIoFuncsSTL I/O for STL files \endlink - \link PkgBGLIoFuncsPLY I/O for PLY files \endlink - \link PkgBGLIoFuncsOBJ I/O for OBJ files \endlink diff --git a/BGL/examples/BGL_LCC/copy_lcc.cpp b/BGL/examples/BGL_LCC/copy_lcc.cpp index 65086dfeb7f..4d317edc099 100644 --- a/BGL/examples/BGL_LCC/copy_lcc.cpp +++ b/BGL/examples/BGL_LCC/copy_lcc.cpp @@ -39,7 +39,7 @@ int main(int argc, char* argv[]) Target1 T1; { CGAL::copy_face_graph(S, T1); - CGAL::write_OFF("lcc.off", T1); + CGAL::IO::write_OFF("lcc.off", T1); } S.clear(); diff --git a/BGL/examples/BGL_LCC/distance_lcc.cpp b/BGL/examples/BGL_LCC/distance_lcc.cpp index afc32287a34..73dd211644c 100644 --- a/BGL/examples/BGL_LCC/distance_lcc.cpp +++ b/BGL/examples/BGL_LCC/distance_lcc.cpp @@ -20,7 +20,7 @@ typedef boost::graph_traits::vertex_iterator vertex_iterator; int main(int argc, char** argv) { LCC lcc; - CGAL::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); + CGAL::IO::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); // This is the vector where the distance gets written to std::vector distance(lcc.vertex_attributes().size()); diff --git a/BGL/examples/BGL_LCC/incident_vertices_lcc.cpp b/BGL/examples/BGL_LCC/incident_vertices_lcc.cpp index fdffd6121a5..09cf04839e5 100644 --- a/BGL/examples/BGL_LCC/incident_vertices_lcc.cpp +++ b/BGL/examples/BGL_LCC/incident_vertices_lcc.cpp @@ -51,7 +51,7 @@ OutputIterator adjacent_vertices_V2(const LCC& g, int main(int argc, char** argv) { LCC lcc; - CGAL::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); + CGAL::IO::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); GraphTraits::vertex_iterator vi = vertices(lcc).first; std::list V; diff --git a/BGL/examples/BGL_LCC/normals_lcc.cpp b/BGL/examples/BGL_LCC/normals_lcc.cpp index 7487e1876a0..38e98f63cc6 100644 --- a/BGL/examples/BGL_LCC/normals_lcc.cpp +++ b/BGL/examples/BGL_LCC/normals_lcc.cpp @@ -70,7 +70,7 @@ int main(int argc, char** argv) Face_index_map; LCC lcc; - CGAL::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); + CGAL::IO::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); // Ad hoc property_map to store normals. Face_index_map is used to // map face_descriptors to a contiguous range of indices. See diff --git a/BGL/examples/BGL_LCC/range_lcc.cpp b/BGL/examples/BGL_LCC/range_lcc.cpp index ad261980311..fa9220127ba 100644 --- a/BGL/examples/BGL_LCC/range_lcc.cpp +++ b/BGL/examples/BGL_LCC/range_lcc.cpp @@ -52,7 +52,7 @@ void fct(const LCC& lcc) int main(int argc, char** argv) { LCC lcc; - CGAL::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); + CGAL::IO::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); fct(lcc); return 0; diff --git a/BGL/examples/BGL_LCC/transform_iterator_lcc.cpp b/BGL/examples/BGL_LCC/transform_iterator_lcc.cpp index 12533a4ed0d..299edae306d 100644 --- a/BGL/examples/BGL_LCC/transform_iterator_lcc.cpp +++ b/BGL/examples/BGL_LCC/transform_iterator_lcc.cpp @@ -43,7 +43,7 @@ struct Source { int main(int argc, char** argv) { LCC lcc; - CGAL::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); + CGAL::IO::read_polygon_mesh((argc>1)?argv[1]:"cube.off", lcc); GraphTraits::vertex_descriptor vd = *(vertices(lcc).first); typedef boost::transform_iterator,halfedge_around_target_iterator> adjacent_vertex_iterator; diff --git a/BGL/examples/BGL_OpenMesh/TriMesh.cpp b/BGL/examples/BGL_OpenMesh/TriMesh.cpp index 126ba82744f..df325b56457 100644 --- a/BGL/examples/BGL_OpenMesh/TriMesh.cpp +++ b/BGL/examples/BGL_OpenMesh/TriMesh.cpp @@ -28,13 +28,13 @@ int main(int argc, char** argv ) std::vector V; const char* filename = (argc>1)?argv[1]:"in.off"; const char* outname= (argc>2)?argv[2]:"out.off"; - CGAL::read_polygon_mesh(filename, mesh); + CGAL::IO::read_polygon_mesh(filename, mesh); for(vertex_descriptor vd : vertices(mesh)){ for(halfedge_descriptor hd : CGAL::halfedges_around_target(vd,mesh)){ if(! CGAL::is_border(edge(hd,mesh),mesh)){ CGAL::Euler::flip_edge(hd,mesh); - CGAL::write_polygon_mesh(outname, mesh); + CGAL::IO::write_polygon_mesh(outname, mesh); return 0; } } diff --git a/BGL/examples/BGL_graphcut/face_selection_borders_regularization_example.cpp b/BGL/examples/BGL_graphcut/face_selection_borders_regularization_example.cpp index 9904bfffecc..ab5875e1184 100644 --- a/BGL/examples/BGL_graphcut/face_selection_borders_regularization_example.cpp +++ b/BGL/examples/BGL_graphcut/face_selection_borders_regularization_example.cpp @@ -21,7 +21,7 @@ int main(int argc, char** argv) } Mesh mesh; - CGAL::read_OFF (in, mesh); + CGAL::IO::read_OFF (in, mesh); boost::unordered_map is_selected_map; diff --git a/BGL/examples/BGL_surface_mesh/connected_components.cpp b/BGL/examples/BGL_surface_mesh/connected_components.cpp index e76fe3c31f7..d078cb5e64c 100644 --- a/BGL/examples/BGL_surface_mesh/connected_components.cpp +++ b/BGL/examples/BGL_surface_mesh/connected_components.cpp @@ -17,7 +17,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/prim.off"; Mesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/BGL/examples/BGL_surface_mesh/prim.cpp b/BGL/examples/BGL_surface_mesh/prim.cpp index c98b0b4a582..2e55814270d 100644 --- a/BGL/examples/BGL_surface_mesh/prim.cpp +++ b/BGL/examples/BGL_surface_mesh/prim.cpp @@ -17,7 +17,7 @@ int main(int argc, char* argv[]) const char* filename = (argc>1) ? argv[1] : "data/prim.off"; Mesh P; - if(!CGAL::read_polygon_mesh(filename, P)) + if(!CGAL::IO::read_polygon_mesh(filename, P)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/BGL/examples/BGL_surface_mesh/seam_mesh.cpp b/BGL/examples/BGL_surface_mesh/seam_mesh.cpp index 92e446a0ee7..ab524cabdcc 100644 --- a/BGL/examples/BGL_surface_mesh/seam_mesh.cpp +++ b/BGL/examples/BGL_surface_mesh/seam_mesh.cpp @@ -36,7 +36,7 @@ int main(int argc, char* argv[]) const char* filename = (argc>1) ? argv[1] : "data/cube.off"; Mesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/BGL/examples/BGL_surface_mesh/surface_mesh_dual.cpp b/BGL/examples/BGL_surface_mesh/surface_mesh_dual.cpp index fd5535d0ea7..d278a383cab 100644 --- a/BGL/examples/BGL_surface_mesh/surface_mesh_dual.cpp +++ b/BGL/examples/BGL_surface_mesh/surface_mesh_dual.cpp @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/prim.off"; Mesh primal; - if(!CGAL::read_polygon_mesh(filename, primal)) + if(!CGAL::IO::read_polygon_mesh(filename, primal)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/BGL/examples/BGL_surface_mesh/surface_mesh_partition.cpp b/BGL/examples/BGL_surface_mesh/surface_mesh_partition.cpp index 629fddfb640..1bc03831e72 100644 --- a/BGL/examples/BGL_surface_mesh/surface_mesh_partition.cpp +++ b/BGL/examples/BGL_surface_mesh/surface_mesh_partition.cpp @@ -17,7 +17,7 @@ int main(int argc, char** argv) int number_of_parts = (argc>2) ? atoi(argv[2]) : 8; SM sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -44,7 +44,7 @@ int main(int argc, char** argv) CGAL::copy_face_graph(filtered_sm, part_sm); // Output the mesh extracted from subpart n°0 - CGAL::write_polygon_mesh("sm_part_0.off", part_sm, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("sm_part_0.off", part_sm, CGAL::parameters::stream_precision(17)); // Output all the vertices that are in the part n°0 std::ofstream outxyz("out.xyz"); diff --git a/BGL/examples/BGL_surface_mesh/write_inp.cpp b/BGL/examples/BGL_surface_mesh/write_inp.cpp index 71c86535874..7554bed208d 100644 --- a/BGL/examples/BGL_surface_mesh/write_inp.cpp +++ b/BGL/examples/BGL_surface_mesh/write_inp.cpp @@ -22,7 +22,7 @@ int main() std::ofstream out("out.inp"); out.precision(17); - CGAL::write_INP(out, "out.inp", "S4R", sm); + CGAL::IO::write_INP(out, "out.inp", "S4R", sm); return EXIT_SUCCESS; } diff --git a/BGL/include/CGAL/boost/graph/IO/3MF.h b/BGL/include/CGAL/boost/graph/IO/3MF.h index ebc47bc0e49..664551c9af2 100644 --- a/BGL/include/CGAL/boost/graph/IO/3MF.h +++ b/BGL/include/CGAL/boost/graph/IO/3MF.h @@ -28,6 +28,8 @@ namespace CGAL { +namespace IO { + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Write @@ -58,7 +60,7 @@ bool write_3MF(const std::string& filename, const std::vector& names #ifndef DOXYGEN_RUNNING , typename boost::disable_if< - IO::internal::is_Point_set_or_Range_or_Iterator< + internal::is_Point_set_or_Range_or_Iterator< typename boost::range_value::type> >::type* = nullptr #endif ) @@ -114,7 +116,7 @@ bool write_3MF(const std::string& filename, return write_3MF(filename, all_points, all_triangles, names); } -} // namespace CGAL +} } // namespace CGAL::IO #endif // defined(CGAL_LINKED_WITH_3MF) || defined(DOXYGEN_RUNNING) diff --git a/BGL/include/CGAL/boost/graph/IO/GOCAD.h b/BGL/include/CGAL/boost/graph/IO/GOCAD.h index 966e4f4219d..e3baecc25e3 100644 --- a/BGL/include/CGAL/boost/graph/IO/GOCAD.h +++ b/BGL/include/CGAL/boost/graph/IO/GOCAD.h @@ -76,7 +76,6 @@ public: }; } // namespace internal -} // namespace IO /// \ingroup PkgBGLIoFuncsGOCAD /// @@ -120,14 +119,14 @@ bool read_GOCAD(std::istream& is, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { typedef typename CGAL::GetVertexPointMap::type VPM; typedef typename boost::property_traits::value_type Point; - IO::internal::GOCAD_builder builder(is); + internal::GOCAD_builder builder(is); if(!builder(g, np)) return false; @@ -141,14 +140,14 @@ bool read_GOCAD(std::istream& is, template bool read_GOCAD(std::istream& is, std::pair& name_and_color, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_GOCAD(is, name_and_color, g, parameters::all_default()); } template bool read_GOCAD(std::istream& is, Graph& g, const CGAL_BGL_NP_CLASS& np, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { std::pair dummy; return read_GOCAD(is, dummy, g, np); @@ -156,7 +155,7 @@ bool read_GOCAD(std::istream& is, Graph& g, const CGAL_BGL_NP_CLASS& np, template bool read_GOCAD(std::istream& is, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_GOCAD(is, g, parameters::all_default()); } @@ -207,12 +206,12 @@ bool read_GOCAD(const std::string& fname, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); return read_GOCAD(is, name_and_color, g, np); } @@ -220,14 +219,14 @@ bool read_GOCAD(const std::string& fname, template bool read_GOCAD(const std::string& fname, std::pair& name_and_color, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_GOCAD(fname, name_and_color, g, parameters::all_default()); } template bool read_GOCAD(const std::string& fname, Graph& g, const CGAL_BGL_NP_CLASS& np, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { std::pair dummy; return read_GOCAD(fname, dummy, g, np); @@ -235,7 +234,7 @@ bool read_GOCAD(const std::string& fname, Graph& g, const CGAL_BGL_NP_CLASS& np, template bool read_GOCAD(const std::string& fname, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_GOCAD(fname, g, parameters::all_default()); } @@ -284,7 +283,7 @@ bool write_GOCAD(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { @@ -346,7 +345,7 @@ bool write_GOCAD(std::ostream& os, template bool write_GOCAD(std::ostream& os, const char* name, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_GOCAD(os, name, g, parameters::all_default()); } @@ -391,7 +390,7 @@ bool write_GOCAD(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { @@ -402,7 +401,7 @@ bool write_GOCAD(std::ostream& os, template bool write_GOCAD(std::ostream& os, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_GOCAD(os, g, parameters::all_default()); } @@ -447,12 +446,12 @@ bool write_GOCAD(const std::string& fname, const Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_GOCAD(os, fname.c_str(), g, np); } @@ -461,13 +460,13 @@ bool write_GOCAD(const std::string& fname, template bool write_GOCAD(const std::string& fname, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_GOCAD(fname, g, parameters::all_default()); } /// \endcond -} // namespace CGAL +}} // namespace CGAL::IO #endif // CGAL_BGL_IO_GOCAD_H diff --git a/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_builder.h b/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_builder.h index 3f1d724fae3..b78d97f5af8 100644 --- a/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_builder.h +++ b/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_builder.h @@ -44,7 +44,7 @@ public: typedef typename GetK::Kernel Kernel; typedef typename Kernel::Vector_3 Vector; typedef typename Kernel::Point_2 Texture; - typedef CGAL::Color Color; + typedef CGAL::IO::Color Color; typedef typename CGAL::GetVertexPointMap::type VPM; diff --git a/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_printer.h b/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_printer.h index 5fb75be5363..c78861a855d 100644 --- a/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_printer.h +++ b/BGL/include/CGAL/boost/graph/IO/Generic_facegraph_printer.h @@ -95,7 +95,7 @@ public: typedef typename GetVertexPointMap::const_type VPM; typedef typename boost::property_traits::reference Point_ref; - typedef CGAL::Color Color; + typedef CGAL::IO::Color Color; typedef typename internal_np::Lookup_named_param_def< internal_np::vertex_color_map_t, NamedParameters, @@ -153,7 +153,7 @@ public: if(has_vertex_colors) { - const CGAL::Color& vc = get(vcm, v); + const CGAL::IO::Color& vc = get(vcm, v); m_writer.write_vertex_color(vc.red(), vc.green(), vc.blue()); // @fixme correct? } @@ -182,7 +182,7 @@ public: if(has_face_colors) { - const CGAL::Color& fc = get(fcm, f); + const CGAL::IO::Color& fc = get(fcm, f); m_writer.write_face_color(fc.red(), fc.green(), fc.blue()); } diff --git a/BGL/include/CGAL/boost/graph/IO/INP.h b/BGL/include/CGAL/boost/graph/IO/INP.h index fbc15b04d96..9194174dd9b 100644 --- a/BGL/include/CGAL/boost/graph/IO/INP.h +++ b/BGL/include/CGAL/boost/graph/IO/INP.h @@ -23,6 +23,8 @@ namespace CGAL { +namespace IO { + /// \cond SKIP_IN_MANUAL template @@ -96,8 +98,27 @@ bool write_INP(const std::string& fname, const std::string& type, const Graph& g return write_INP(fname, type, g, parameters::all_default()); } +#ifndef CGAL_NO_DEPRECATED_CODE +template +CGAL_DEPRECATED bool write_inp(std::ostream& os, + const FaceGraph& g, + std::string name, + std::string type, + const NamedParameters& np) +{ + return write_INP(os, name, type, g, np); +} +template +CGAL_DEPRECATED bool write_inp(std::ostream& os, + const FaceGraph& g, + std::string name, + std::string type) +{ + return write_INP(os, name, type, g, parameters::all_default()); +} +#endif /// \endcond -} // namespace CGAL +}} // namespace CGAL::IO #endif // CGAL_BGL_IO_INP_H diff --git a/BGL/include/CGAL/boost/graph/IO/OBJ.h b/BGL/include/CGAL/boost/graph/IO/OBJ.h index 7d733c9f8b4..b97515bb7b6 100644 --- a/BGL/include/CGAL/boost/graph/IO/OBJ.h +++ b/BGL/include/CGAL/boost/graph/IO/OBJ.h @@ -68,7 +68,6 @@ public: }; } // namespace internal -} // namespace IO /*! \ingroup PkgBGLIoFuncsOBJ @@ -115,14 +114,14 @@ bool read_OBJ(std::istream& is, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { typedef typename CGAL::GetVertexPointMap::type VPM; typedef typename boost::property_traits::value_type Point; - IO::internal::OBJ_builder builder(is); + internal::OBJ_builder builder(is); return builder(g, np); } @@ -130,7 +129,7 @@ bool read_OBJ(std::istream& is, template bool read_OBJ(std::istream& is, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_OBJ(is, g, parameters::all_default()); } @@ -182,12 +181,12 @@ bool read_OBJ(const std::string& fname, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); return read_OBJ(is, g, np); } @@ -195,7 +194,7 @@ bool read_OBJ(const std::string& fname, template bool read_OBJ(const std::string& fname, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_OBJ(fname, g, parameters::all_default()); } @@ -245,11 +244,11 @@ bool write_OBJ(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { - IO::internal::Generic_facegraph_printer printer(os); + internal::Generic_facegraph_printer printer(os); return printer(g, np); } @@ -257,7 +256,7 @@ bool write_OBJ(std::ostream& os, template bool write_OBJ(std::ostream& os, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_OBJ(os, g, parameters::all_default()); } @@ -302,12 +301,12 @@ bool write_OBJ(const std::string& fname, const Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_OBJ(os, g, np); } @@ -315,13 +314,13 @@ bool write_OBJ(const std::string& fname, template bool write_OBJ(const std::string& fname, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_OBJ(fname, g, parameters::all_default()); } /// \endcond -} // namespace CGAL +}} // namespace CGAL::IO #endif // CGAL_BGL_IO_OBJ_H diff --git a/BGL/include/CGAL/boost/graph/IO/OFF.h b/BGL/include/CGAL/boost/graph/IO/OFF.h index 57685046e79..e368a1ab92a 100644 --- a/BGL/include/CGAL/boost/graph/IO/OFF.h +++ b/BGL/include/CGAL/boost/graph/IO/OFF.h @@ -78,12 +78,11 @@ bool read_OFF_BGL(std::istream& is, typedef typename CGAL::GetVertexPointMap::type VPM; typedef typename boost::property_traits::value_type Point; - IO::internal::OFF_builder builder(is); + internal::OFF_builder builder(is); return builder(g, np); } } // namespace internal -} // namespace IO /*! \ingroup PkgBGLIoFuncsOFF @@ -127,7 +126,7 @@ bool read_OFF_BGL(std::istream& is, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{vertex colors that may exist in the input will be ignored} \cgalParamNEnd @@ -141,7 +140,7 @@ bool read_OFF_BGL(std::istream& is, \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{face colors that may exist in the input will be ignored} \cgalParamNEnd @@ -162,18 +161,18 @@ bool read_OFF(std::istream& is, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { - return IO::internal::read_OFF_BGL(is, g, np); + return internal::read_OFF_BGL(is, g, np); } /// \cond SKIP_IN_MANUAL template bool read_OFF(std::istream& is, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_OFF(is, g, parameters::all_default()); } @@ -222,7 +221,7 @@ bool read_OFF(std::istream& is, Graph& g, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{vertex colors that may exist in the input will be ignored} \cgalParamNEnd @@ -236,7 +235,7 @@ bool read_OFF(std::istream& is, Graph& g, \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{face colors that may exist in the input will be ignored} \cgalParamNEnd @@ -257,7 +256,7 @@ bool read_OFF(const std::string& fname, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { @@ -269,35 +268,37 @@ bool read_OFF(const std::string& fname, template bool read_OFF(const std::string& fname, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_OFF(fname, g, parameters::all_default()); } /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgBGLIOFctDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::read_OFF()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_OFF()` should be used instead. */ template CGAL_DEPRECATED bool read_off(std::istream& is, Graph& g, const CGAL_BGL_NP_CLASS& np) { - return read_OFF(is, g, np); + return IO::read_OFF(is, g, np); } /*! \ingroup PkgBGLIOFctDeprecated -\deprecated This function is deprecated since \cgal 5.2, `CGAL::read_OFF()` should be used instead. +\deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_OFF()` should be used instead. */ template CGAL_DEPRECATED bool read_off(const char* fname, Graph& g, const CGAL_BGL_NP_CLASS& np) { - return read_OFF(fname, g, np); + return IO::read_OFF(fname, g, np); } template @@ -312,6 +313,12 @@ CGAL_DEPRECATED bool read_off(const char* fname, Graph& g) return read_off(fname, g, parameters::all_default()); } +template +CGAL_DEPRECATED bool read_off(const std::string& fname, Graph& g) +{ + return read_off(fname.c_str(), g, parameters::all_default()); +} + #endif // CGAL_NO_DEPRECATED_CODE //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -326,12 +333,11 @@ bool write_OFF_BGL(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np) { - IO::internal::Generic_facegraph_printer printer(os); + internal::Generic_facegraph_printer printer(os); return printer(g, np); } } // namespace internal -} // namespace IO /*! \ingroup PkgBGLIoFuncsOFF @@ -365,7 +371,7 @@ bool write_OFF_BGL(std::ostream& os, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{no vertex colors in the output} \cgalParamNEnd @@ -379,7 +385,7 @@ bool write_OFF_BGL(std::ostream& os, \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{no face colors in the output} \cgalParamNEnd @@ -400,18 +406,18 @@ bool write_OFF(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { - return IO::internal::write_OFF_BGL(os, g, np); + return internal::write_OFF_BGL(os, g, np); } /// \cond SKIP_IN_MANUAL template bool write_OFF(std::ostream& os, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_OFF(os, g, parameters::all_default()); } @@ -450,7 +456,7 @@ bool write_OFF(std::ostream& os, const Graph& g, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{no vertex colors in the output} \cgalParamNEnd @@ -464,7 +470,7 @@ bool write_OFF(std::ostream& os, const Graph& g, \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{no face colors in the output} \cgalParamNEnd @@ -485,7 +491,7 @@ bool write_OFF(const std::string& fname, const Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { @@ -503,24 +509,26 @@ bool write_OFF(const std::string& fname, template bool write_OFF(const std::string& fname, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_OFF(fname, g, parameters::all_default()); } /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgBGLIOFctDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_OFF()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_OFF()` should be used instead. */ template CGAL_DEPRECATED bool write_off(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np) { - return write_OFF(os, g, np); + return IO::write_OFF(os, g, np); } template @@ -531,12 +539,12 @@ CGAL_DEPRECATED bool write_off(std::ostream& os, const Graph& g) /*! \ingroup PkgBGLIOFctDeprecated -\deprecated This function is deprecated since \cgal 5.2, `CGAL::write_OFF()` should be used instead. +\deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_OFF()` should be used instead. */ template CGAL_DEPRECATED bool write_off(const char* fname, const Graph& g, const CGAL_BGL_NP_CLASS& np) { - return write_OFF(fname, g, np); + return IO::write_OFF(fname, g, np); } template diff --git a/BGL/include/CGAL/boost/graph/IO/PLY.h b/BGL/include/CGAL/boost/graph/IO/PLY.h index c571c07d629..881d3f86b0d 100644 --- a/BGL/include/CGAL/boost/graph/IO/PLY.h +++ b/BGL/include/CGAL/boost/graph/IO/PLY.h @@ -71,12 +71,11 @@ bool read_PLY_BGL(std::istream& is, typedef typename CGAL::GetVertexPointMap::type VPM; typedef typename boost::property_traits::value_type Point; - IO::internal::PLY_builder builder(is); + internal::PLY_builder builder(is); return builder(g, np); } } // namespace internal -} // namespace IO /*! \ingroup PkgBGLIoFuncsPLY @@ -114,14 +113,14 @@ bool read_PLY_BGL(std::istream& is, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{vertex colors that may exist in the input will be ignored} \cgalParamNEnd \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{face colors that may exist in the input will be ignored} \cgalParamNEnd @@ -142,20 +141,20 @@ bool read_PLY(std::istream& is, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { - return IO::internal::read_PLY_BGL(is, g, np); + return internal::read_PLY_BGL(is, g, np); } /// \cond SKIP_IN_MANUAL template bool read_PLY(std::istream& is, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { - return IO::internal::read_PLY_BGL(is, g, parameters::all_default()); + return internal::read_PLY_BGL(is, g, parameters::all_default()); } /// \endcond @@ -200,14 +199,14 @@ bool read_PLY(std::istream& is, Graph& g, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{vertex colors that may exist in the input will be ignored} \cgalParamNEnd \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{face colors that may exist in the input will be ignored} \cgalParamNEnd @@ -228,7 +227,7 @@ bool read_PLY(const std::string& fname, Graph& g, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { @@ -236,14 +235,14 @@ bool read_PLY(const std::string& fname, if(binary) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); - return IO::internal::read_PLY_BGL(is, g, np); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); + return internal::read_PLY_BGL(is, g, np); } else { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); - return IO::internal::read_PLY_BGL(is, g, np); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); + return internal::read_PLY_BGL(is, g, np); } } @@ -251,7 +250,7 @@ bool read_PLY(const std::string& fname, template bool read_PLY(const std::string& fname, Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return read_PLY(fname, g, parameters::all_default()); } @@ -297,14 +296,14 @@ bool read_PLY(const std::string& fname, Graph& g, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{vertex colors that may exist in the input will be ignored} \cgalParamNEnd \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `WritablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{face colors that may exist in the input will be ignored} \cgalParamNEnd @@ -324,7 +323,7 @@ bool write_PLY(std::ostream& os, const std::string& comments, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { @@ -335,7 +334,7 @@ bool write_PLY(std::ostream& os, typedef typename CGAL::GetInitializedVertexIndexMap::const_type VIMap; typedef typename GetVertexPointMap::const_type Vpm; typedef typename boost::property_traits::reference Point_3; - typedef CGAL::Color Color; + typedef CGAL::IO::Color Color; typedef typename internal_np::Lookup_named_param_def< internal_np::vertex_color_map_t, CGAL_BGL_NP_CLASS, @@ -365,7 +364,7 @@ bool write_PLY(std::ostream& os, // Write header os << "ply" << std::endl - << ((get_mode(os) == IO::BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl + << ((get_mode(os) == BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl << "comment Generated by the CGAL library" << std::endl; if(comments != std::string()) @@ -380,7 +379,7 @@ bool write_PLY(std::ostream& os, } os << "element vertex " << vertices(g).size() << std::endl; - IO::internal::output_property_header(os, make_ply_point_writer (CGAL::Identity_property_map())); + internal::output_property_header(os, make_ply_point_writer (CGAL::Identity_property_map())); //if vcm is not default add v:color property if(has_vcolor) { @@ -391,7 +390,7 @@ bool write_PLY(std::ostream& os, } os << "element face " << faces(g).size() << std::endl; - IO::internal::output_property_header( + internal::output_property_header( os, std::make_pair(CGAL::Identity_property_map >(), PLY_property >("vertex_indices"))); //if fcm is not default add f:color property @@ -407,10 +406,10 @@ bool write_PLY(std::ostream& os, for(vertex_descriptor vd : vertices(g)) { Point_3 p = get(vpm, vd); - IO::internal::output_properties(os, &p, make_ply_point_writer (CGAL::Identity_property_map())); + internal::output_properties(os, &p, make_ply_point_writer (CGAL::Identity_property_map())); if(has_vcolor) { - const CGAL::Color& c = get(vcm, vd); + const CGAL::IO::Color& c = get(vcm, vd); if(get_mode(os) == CGAL::IO::ASCII) os << c << std::endl; else @@ -425,12 +424,12 @@ bool write_PLY(std::ostream& os, for(halfedge_descriptor hd : halfedges_around_face(halfedge(fd, g), g)) polygon.push_back(get(vim, target(hd,g))); - IO::internal::output_properties(os, &polygon, + internal::output_properties(os, &polygon, std::make_pair(CGAL::Identity_property_map >(), PLY_property >("vertex_indices"))); if(has_fcolor) { - const CGAL::Color& c = get(fcm, fd); + const CGAL::IO::Color& c = get(fcm, fd); if(get_mode(os) == CGAL::IO::ASCII) os << c << std::endl; else @@ -447,21 +446,21 @@ bool write_PLY(std::ostream& os, template bool write_PLY(std::ostream& os, const Graph& g, const std::string& comments, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_PLY(os, g, comments, parameters::all_default()); } template bool write_PLY(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_PLY(os, g, std::string(), np); } template bool write_PLY(std::ostream& os, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_PLY(os, g, std::string(), parameters::all_default()); } @@ -507,14 +506,14 @@ bool write_PLY(std::ostream& os, const Graph& g, \cgalParamNBegin{vertex_color_map} \cgalParamDescription{a property map associating colors to the vertices of `g`} \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{no vertex color in the output} \cgalParamNEnd \cgalParamNBegin{face_color_map} \cgalParamDescription{a property map associating colors to the faces of `g`} \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%face_descriptor` - as key type and `CGAL::Color` as value type} + as key type and `CGAL::IO::Color` as value type} \cgalParamDefault{no face color in the output} \cgalParamNEnd @@ -534,7 +533,7 @@ bool write_PLY(const std::string& fname, const std::string& comments, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::disable_if >::type* = nullptr + , typename boost::disable_if >::type* = nullptr #endif ) { @@ -542,13 +541,13 @@ bool write_PLY(const std::string& fname, if(binary) { std::ofstream os(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_PLY(os, g, comments, np); } else { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_PLY(os, g, comments, np); } @@ -558,27 +557,27 @@ bool write_PLY(const std::string& fname, template bool write_PLY(const std::string& fname, const Graph& g, const std::string comments, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_PLY(fname, g, comments, parameters::all_default()); } template bool write_PLY(const std::string& fname, const Graph& g, const CGAL_BGL_NP_CLASS& np, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_PLY(fname, g, std::string(), np); } template bool write_PLY(const std::string& fname, const Graph& g, - typename boost::disable_if >::type* = nullptr) + typename boost::disable_if >::type* = nullptr) { return write_PLY(fname, g, std::string(), parameters::all_default()); } /// \endcond -} // namespace CGAL +} } // namespace CGAL::IO #endif // CGAL_BGL_IO_PLY_H diff --git a/BGL/include/CGAL/boost/graph/IO/STL.h b/BGL/include/CGAL/boost/graph/IO/STL.h index 78bd1fcb588..7bce5d9734b 100644 --- a/BGL/include/CGAL/boost/graph/IO/STL.h +++ b/BGL/include/CGAL/boost/graph/IO/STL.h @@ -63,7 +63,6 @@ public: }; } // namespace internal -} // namespace IO /*! \ingroup PkgBGLIoFuncsSTL @@ -113,7 +112,7 @@ bool read_STL(std::istream& is, typedef typename boost::property_traits::value_type Point; if(!is.good()) return false; - IO::internal::STL_builder builder(is); + internal::STL_builder builder(is); return builder(g, np); } @@ -173,7 +172,7 @@ bool read_STL(const std::string& fname, if(binary) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); if(read_STL(is, g, np)) { return true; @@ -181,7 +180,7 @@ bool read_STL(const std::string& fname, g.clear(); } std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); typedef typename CGAL::GetVertexPointMap::type VPM; VPM vpm = choose_parameter(get_parameter(np, internal_np::vertex_point), @@ -264,7 +263,7 @@ bool write_STL(std::ostream& os, set_stream_precision_from_NP(os, np); - if(get_mode(os) == IO::BINARY) + if(get_mode(os) == BINARY) { os << "FileType: Binary "; const boost::uint32_t N32 = static_cast(faces(g).size()); @@ -364,13 +363,13 @@ bool write_STL(const std::string& fname, const Graph& g, const CGAL_BGL_NP_CLASS if(binary) { std::ofstream os(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_STL(os, g, np); } else { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_STL(os, g, np); } @@ -385,6 +384,6 @@ bool write_STL(const std::string& fname, const Graph& g) { return write_STL(fnam /// \endcond -} // namespace CGAL +}} // namespace CGAL::IO #endif // CGAL_BGL_IO_STL_H diff --git a/BGL/include/CGAL/boost/graph/IO/VTK.h b/BGL/include/CGAL/boost/graph/IO/VTK.h index 894b3598b09..fa3446ad28f 100644 --- a/BGL/include/CGAL/boost/graph/IO/VTK.h +++ b/BGL/include/CGAL/boost/graph/IO/VTK.h @@ -113,7 +113,6 @@ bool vtkPointSet_to_polygon_mesh(vtkPointSet* poly_data, } } // namespace internal -} // namespace IO /*! * \ingroup PkgBGLIoFuncsVTP @@ -160,13 +159,13 @@ bool read_VTP(const std::string& fname, } test.close(); vtkSmartPointer data; - vtkSmartPointer obs = - vtkSmartPointer::New(); + vtkSmartPointer obs = + vtkSmartPointer::New(); - data = vtkPolyData::SafeDownCast(IO::internal::read_vtk_file(fname, obs)->GetOutput()); + data = vtkPolyData::SafeDownCast(internal::read_vtk_file(fname, obs)->GetOutput()); if (obs->GetError()) return false; - return IO::internal::vtkPointSet_to_polygon_mesh(data, g, np); + return internal::vtkPointSet_to_polygon_mesh(data, g, np); } /// \cond SKIP_IN_MANUAL @@ -180,7 +179,6 @@ bool read_VTP(const std::string& fname, Graph& g) { return read_VTP(fname, g, pa //////////////////////////////////////////////////////////////////////////////////////////////////// // Write -namespace IO { namespace internal { // writes the polys appended data at the end of the .vtp file @@ -381,7 +379,6 @@ void write_polys_points(std::ostream& os, } } // namespace internal -} // namespace IO /*! \ingroup PkgBGLIoFuncsVTP * @@ -465,16 +462,16 @@ bool write_VTP(std::ostream& os, std::size_t offset = 0; const bool binary = choose_parameter(get_parameter(np, internal_np::use_binary_mode), true); - IO::internal::write_points_tag(os, g, binary, offset, np); - IO::internal::write_polys_tag(os, g, binary, offset, np); + internal::write_points_tag(os, g, binary, offset, np); + internal::write_polys_tag(os, g, binary, offset, np); os << " \n" << " \n"; if(binary) { os << "\n_"; - IO::internal::write_polys_points(os, g, np); - IO::internal::write_polys(os, g, np); + internal::write_polys_points(os, g, np); + internal::write_polys(os, g, np); } os << "" << std::endl; @@ -534,7 +531,7 @@ bool write_VTP(const std::string& fname, const Graph& g, const CGAL_BGL_NP_CLASS std::ofstream os; if(binary){ os.open(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); } else os.open(fname); @@ -551,17 +548,19 @@ bool write_VTP(const std::string& fname, const Graph& g) { return write_VTP(fnam /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgBGLIOFctDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_VTP()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_VTP()` should be used instead. */ template CGAL_DEPRECATED bool write_vtp(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np) { - return write_VTP(os, g, np); + return IO::write_VTP(os, g, np); } template diff --git a/BGL/include/CGAL/boost/graph/IO/WRL.h b/BGL/include/CGAL/boost/graph/IO/WRL.h index dc8186862c7..db2c263b1ad 100644 --- a/BGL/include/CGAL/boost/graph/IO/WRL.h +++ b/BGL/include/CGAL/boost/graph/IO/WRL.h @@ -30,6 +30,8 @@ namespace CGAL { +namespace IO { + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Write @@ -71,7 +73,7 @@ bool write_WRL(std::ostream& os, const CGAL_BGL_NP_CLASS& np) { CGAL::VRML_2_ostream vos(os); - IO::internal::Generic_facegraph_printer printer(vos); + internal::Generic_facegraph_printer printer(vos); return printer(g, np); } @@ -118,17 +120,19 @@ bool write_WRL(std::ostream& os, const Graph& g) { return write_WRL(os, g, param template bool write_WRL(const std::string& fname, const Graph& g) { return write_WRL(fname, g, parameters::all_default()); } +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgBGLIOFctDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_WRL()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_WRL()` should be used instead. */ template CGAL_DEPRECATED bool write_wrl(std::ostream& os, const Graph& g, const CGAL_BGL_NP_CLASS& np) { - return write_WRL(os, g, np); + return IO::write_WRL(os, g, np); } template diff --git a/BGL/include/CGAL/boost/graph/IO/polygon_mesh_io.h b/BGL/include/CGAL/boost/graph/IO/polygon_mesh_io.h index 6fb5cdfec20..bd54d53014e 100644 --- a/BGL/include/CGAL/boost/graph/IO/polygon_mesh_io.h +++ b/BGL/include/CGAL/boost/graph/IO/polygon_mesh_io.h @@ -28,6 +28,8 @@ namespace CGAL { +namespace IO { + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Read @@ -121,7 +123,7 @@ bool read_polygon_mesh(std::istream& is, * * \return `true` if reading was successful, `false` otherwise. * - * \sa \link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()`\endlink if the data is not 2-manifold + * \sa \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()`\endlink if the data is not 2-manifold */ template bool read_polygon_mesh(const std::string& fname, @@ -130,7 +132,7 @@ bool read_polygon_mesh(const std::string& fname, { const bool verbose = parameters::choose_parameter(parameters::get_parameter(np, internal_np::verbose), false); - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == std::string()) { if(verbose) @@ -233,7 +235,7 @@ bool write_polygon_mesh(const std::string& fname, { const bool verbose = parameters::choose_parameter(parameters::get_parameter(np, internal_np::verbose), false); - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == std::string()) { if(verbose) @@ -275,6 +277,6 @@ bool write_polygon_mesh(const std::string& fname, Graph& g) /// \endcond -} // namespace CGAL +}} // namespace CGAL::IO #endif // CGAL_BOOST_GRAPH_POLYGON_MESH_IO_H diff --git a/BGL/include/CGAL/boost/graph/selection.h b/BGL/include/CGAL/boost/graph/selection.h index 668bc4707e0..890c0622e68 100644 --- a/BGL/include/CGAL/boost/graph/selection.h +++ b/BGL/include/CGAL/boost/graph/selection.h @@ -1137,8 +1137,8 @@ void expand_face_selection_for_removal(const FaceRange& faces_to_be_deleted, //todo: take non-manifold vertices into account. template -bool is_selection_a_topological_disk(const FaceRange& face_selection, - PolygonMesh& pm) +int euler_characteristic_of_selection(const FaceRange& face_selection, + PolygonMesh& pm) { typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; typedef typename boost::graph_traits::face_descriptor face_descriptor; @@ -1154,8 +1154,18 @@ bool is_selection_a_topological_disk(const FaceRange& face_selection, sel_edges.insert(edge(h,pm)); } } - return (sel_vertices.size() - sel_edges.size() + face_selection.size() == 1); + return static_cast(sel_vertices.size()) + - static_cast(sel_edges.size()) + + static_cast(face_selection.size()); } + +template +bool is_selection_a_topological_disk(const FaceRange& face_selection, + PolygonMesh& pm) +{ + return euler_characteristic_of_selection(face_selection, pm) == 1; +} + } //end of namespace CGAL #endif //CGAL_BOOST_GRAPH_SELECTION_H diff --git a/BGL/include/CGAL/draw_face_graph.h b/BGL/include/CGAL/draw_face_graph.h index 0bc8531ed03..00e22278c7b 100644 --- a/BGL/include/CGAL/draw_face_graph.h +++ b/BGL/include/CGAL/draw_face_graph.h @@ -26,11 +26,11 @@ namespace CGAL struct DefaultColorFunctorFaceGraph { template - CGAL::Color operator()(const Graph&, + CGAL::IO::Color operator()(const Graph&, typename boost::graph_traits::face_descriptor fh) const { if (fh==boost::graph_traits::null_face()) // use to get the mono color - return CGAL::Color(100, 125, 200); // R G B between 0-255 + return CGAL::IO::Color(100, 125, 200); // R G B between 0-255 return get_random_color(CGAL::get_default_random()); } @@ -141,7 +141,7 @@ protected: { if (fh!=boost::graph_traits::null_face()) { - CGAL::Color c=fcolor(sm, fh); + CGAL::IO::Color c=fcolor(sm, fh); face_begin(c); auto hd=halfedge(fh, sm); const auto first_hd = hd; diff --git a/BGL/test/BGL/bench_read_from_stream_vs_add_face_and_add_faces.cpp b/BGL/test/BGL/bench_read_from_stream_vs_add_face_and_add_faces.cpp index cf084977444..bfec2a708f3 100644 --- a/BGL/test/BGL/bench_read_from_stream_vs_add_face_and_add_faces.cpp +++ b/BGL/test/BGL/bench_read_from_stream_vs_add_face_and_add_faces.cpp @@ -31,7 +31,7 @@ int main(int argc, char** argv) Mesh m; const char* filename = (argc>1) ? argv[1] : "data/genus3.off"; - CGAL::read_polygon_mesh(filename, m); + CGAL::IO::read_polygon_mesh(filename, m); std::cout << " is_valid? " << CGAL::is_valid_polygon_mesh(m) << "\n"; std::cout << "Total time: " << timer.time() << std::endl << std::endl; @@ -48,7 +48,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/blobby.off"; std::vector points; std::vector > faces_ids; - CGAL::read_polygon_soup(filename, points, faces_ids); + CGAL::IO::read_polygon_soup(filename, points, faces_ids); std::cout << " Read soup: " << timer.time() << std::endl; std::vector > triangles; @@ -85,7 +85,7 @@ int main(int argc, char** argv) std::vector points; std::vector > faces_ids; - CGAL::read_polygon_soup(filename, points, faces_ids); + CGAL::IO::read_polygon_soup(filename, points, faces_ids); std::cout << " Read soup: " << timer.time() << std::endl; std::vector > triangles; diff --git a/BGL/test/BGL/test_3mf_to_sm.cpp b/BGL/test/BGL/test_3mf_to_sm.cpp index 20d55a4924a..2feaa7e1061 100644 --- a/BGL/test/BGL/test_3mf_to_sm.cpp +++ b/BGL/test/BGL/test_3mf_to_sm.cpp @@ -24,7 +24,7 @@ typedef CGAL::Surface_mesh Mesh; typedef std::vector PointRange; typedef std::vector Polygon; typedef std::vector PolygonRange; -typedef std::vector ColorRange; +typedef std::vector ColorRange; int main(int argc, char** argv) { @@ -38,7 +38,7 @@ int main(int argc, char** argv) std::vector meshes; //testing reading functions. - if(!CGAL::read_3MF(filename, meshes)) + if(!CGAL::IO::read_3MF(filename, meshes)) return 1; for(std::size_t i = 0; i< meshes.size(); ++i) { @@ -86,7 +86,7 @@ int main(int argc, char** argv) triangle.push_back(vertex_id_map[vert]); } triangles.push_back(triangle); - colors.push_back(CGAL::Color(255,0,0,255)); + colors.push_back(CGAL::IO::Color(255,0,0,255)); } all_polygons.push_back(triangles); @@ -113,7 +113,7 @@ int main(int argc, char** argv) triangle.push_back(vertex_id_map[vert]); } triangles.push_back(triangle); - colors.push_back(CGAL::Color(0,0,255,255)); + colors.push_back(CGAL::IO::Color(0,0,255,255)); } all_polygons.push_back(triangles); @@ -125,7 +125,7 @@ int main(int argc, char** argv) meshes[0] = sphere; meshes[1] = tube; - CGAL::write_3MF("meshes.3mf", meshes, names); + CGAL::IO::write_3MF("meshes.3mf", meshes, names); std::cout << "OK." << std::endl; #endif //CGAL_LINKED_WITH_3MF diff --git a/BGL/test/BGL/test_Collapse_edge.cpp b/BGL/test/BGL/test_Collapse_edge.cpp index 28bb61af4b1..69f1c347a5e 100644 --- a/BGL/test/BGL/test_Collapse_edge.cpp +++ b/BGL/test/BGL/test_Collapse_edge.cpp @@ -43,7 +43,7 @@ collapse_edge_test() const std::string fname = "data/flat_hexahedron.off"; Mesh m; - if(!CGAL::read_OFF(fname, m)) + if(!CGAL::IO::read_OFF(fname, m)) std::cout << "Error reading file: " << fname << std::endl; bool m_is_valid = CGAL::is_valid(m); diff --git a/BGL/test/BGL/test_Euler_operations.cpp b/BGL/test/BGL/test_Euler_operations.cpp index 21b8809897d..8d2f9df3b5c 100644 --- a/BGL/test/BGL/test_Euler_operations.cpp +++ b/BGL/test/BGL/test_Euler_operations.cpp @@ -540,7 +540,7 @@ add_faces() std::ifstream in("data/head.off"); std::vector points; std::vector > faces_ids; - CGAL::read_OFF(in, points, faces_ids); + CGAL::IO::read_OFF(in, points, faces_ids); std::vector verts; verts.reserve(points.size()); @@ -561,7 +561,7 @@ add_faces() { std::ifstream in("data/open_cube.off"); T m; - CGAL::read_OFF(in, m); + CGAL::IO::read_OFF(in, m); std::vector verts(vertices(m).begin(), vertices(m).end()); std::list< std::vector > new_faces; new_faces.push_back({verts[1], verts[7], verts[4]}); @@ -574,7 +574,7 @@ add_faces() { std::ifstream in("data/open_cube.off"); T m; - CGAL::read_OFF(in, m); + CGAL::IO::read_OFF(in, m); std::vector verts(vertices(m).begin(), vertices(m).end()); verts.push_back(add_vertex(m)); put(CGAL::vertex_point, m, verts.back(), Kernel::Point_3(50,0,50)); diff --git a/BGL/test/BGL/test_Prefix.h b/BGL/test/BGL/test_Prefix.h index be2f523aaec..10851e57cce 100644 --- a/BGL/test/BGL/test_Prefix.h +++ b/BGL/test/BGL/test_Prefix.h @@ -160,7 +160,7 @@ bool read_a_mesh(OMesh& s, const std::string& str) { template bool read_a_mesh(T& m, const std::string& str) { - return CGAL::read_OFF(str, m); + return CGAL::IO::read_OFF(str, m); } bool read_a_mesh(Polyhedron& p, const std::string& str) diff --git a/BGL/test/BGL/test_bgl_read_write.cpp b/BGL/test/BGL/test_bgl_read_write.cpp index 5be2d9e33e9..0f2ccc5cc1f 100644 --- a/BGL/test/BGL/test_bgl_read_write.cpp +++ b/BGL/test/BGL/test_bgl_read_write.cpp @@ -118,35 +118,35 @@ void test_bgl_OFF(const char* filename) // read with OFF Mesh fg; std::ifstream is(filename); - bool ok = CGAL::read_OFF(is, fg); + bool ok = CGAL::IO::read_OFF(is, fg); assert(ok); assert(num_vertices(fg) != 0 && num_faces(fg) != 0); is.close(); fg.clear(); is.open(filename, std::ios::binary); - ok = CGAL::read_OFF(is, fg); + ok = CGAL::IO::read_OFF(is, fg); assert(ok); assert(num_vertices(fg) != 0 && num_faces(fg) != 0); // write with OFF { std::ofstream os("tmp.off"); - ok = CGAL::write_OFF(os, fg); + ok = CGAL::IO::write_OFF(os, fg); assert(ok); Mesh fg2; - ok = CGAL::read_OFF("tmp.off", fg2); + ok = CGAL::IO::read_OFF("tmp.off", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } // write with PM { - ok = CGAL::write_polygon_mesh("tmp.obj.off", fg); + ok = CGAL::IO::write_polygon_mesh("tmp.obj.off", fg); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.obj.off", fg2); + ok = CGAL::IO::read_polygon_mesh("tmp.obj.off", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } @@ -156,63 +156,63 @@ void test_bgl_OFF(const char* filename) typedef typename K::Point_2 Point_2; typedef typename K::Vector_3 Vector; typedef typename boost::property_map >::type VertexNormalMap; - typedef typename boost::property_map >::type VertexColorMap; + typedef typename boost::property_map >::type VertexColorMap; typedef typename boost::property_map >::type VertexTextureMap; - typedef typename boost::property_map >::type FaceColorMap; + typedef typename boost::property_map >::type FaceColorMap; // COFF { CGAL::clear(fg); - VertexColorMap vcm = get(CGAL::dynamic_vertex_property_t(), fg); - FaceColorMap fcm = get(CGAL::dynamic_face_property_t(), fg); + VertexColorMap vcm = get(CGAL::dynamic_vertex_property_t(), fg); + FaceColorMap fcm = get(CGAL::dynamic_face_property_t(), fg); - ok = CGAL::read_OFF("data/mesh_with_colors.off", fg, CGAL::parameters::vertex_color_map(vcm) - .face_color_map(fcm)); + ok = CGAL::IO::read_OFF("data/mesh_with_colors.off", fg, CGAL::parameters::vertex_color_map(vcm) + .face_color_map(fcm)); assert(ok); assert(num_vertices(fg) == 8 && num_faces(fg) == 4); for(auto v : vertices(fg)) - assert(get(vcm, v) != CGAL::Color()); + assert(get(vcm, v) != CGAL::IO::Color()); for(auto f : faces(fg)) - assert(get(fcm, f) != CGAL::Color()); + assert(get(fcm, f) != CGAL::IO::Color()); // write with OFF { - ok = CGAL::write_OFF("tmp.off", fg, CGAL::parameters::vertex_color_map(vcm) - .face_color_map(fcm)); + ok = CGAL::IO::write_OFF("tmp.off", fg, CGAL::parameters::vertex_color_map(vcm) + .face_color_map(fcm)); assert(ok); Mesh fg2; - VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); + VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); + FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); - ok = CGAL::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_color_map(vcm2) - .face_color_map(fcm2)); + ok = CGAL::IO::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_color_map(vcm2) + .face_color_map(fcm2)); assert(ok); assert(are_equal_meshes(fg, fg2)); for(auto v : vertices(fg2)) - assert(get(vcm2, v) != CGAL::Color()); + assert(get(vcm2, v) != CGAL::IO::Color()); for(auto f : faces(fg2)) - assert(get(fcm2, f) != CGAL::Color()); + assert(get(fcm2, f) != CGAL::IO::Color()); } // write with PM { - ok = CGAL::write_polygon_mesh("tmp.off", fg, CGAL::parameters::vertex_color_map(vcm)); + ok = CGAL::IO::write_polygon_mesh("tmp.off", fg, CGAL::parameters::vertex_color_map(vcm)); assert(ok); Mesh fg2; - VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); + VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - ok = CGAL::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_color_map(vcm2)); + ok = CGAL::IO::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_color_map(vcm2)); assert(ok); assert(are_equal_meshes(fg, fg2)); for(auto v : vertices(fg2)) - assert(get(vcm2, v) != CGAL::Color()); + assert(get(vcm2, v) != CGAL::IO::Color()); } } @@ -221,7 +221,7 @@ void test_bgl_OFF(const char* filename) CGAL::clear(fg); VertexNormalMap vnm = get(CGAL::dynamic_vertex_property_t(), fg); - ok = CGAL::read_OFF("data/mesh_with_normals.off", fg, CGAL::parameters::vertex_normal_map(vnm)); + ok = CGAL::IO::read_OFF("data/mesh_with_normals.off", fg, CGAL::parameters::vertex_normal_map(vnm)); assert(ok); for(auto v : vertices(fg)) @@ -230,13 +230,13 @@ void test_bgl_OFF(const char* filename) // write with OFF { std::ofstream os("tmp.off"); - ok = CGAL::write_OFF("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm)); + ok = CGAL::IO::write_OFF("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm)); assert(ok); Mesh fg2; VertexNormalMap vnm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - ok = CGAL::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2)); + ok = CGAL::IO::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2)); assert(ok); assert(are_equal_meshes(fg, fg2)); @@ -246,13 +246,13 @@ void test_bgl_OFF(const char* filename) // write with PM { - ok = CGAL::write_polygon_mesh("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm)); + ok = CGAL::IO::write_polygon_mesh("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm)); assert(ok); Mesh fg2; VertexNormalMap vnm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - ok = CGAL::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2)); + ok = CGAL::IO::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2)); assert(ok); assert(are_equal_meshes(fg, fg2)); @@ -267,121 +267,121 @@ void test_bgl_OFF(const char* filename) std::ifstream is("data/full.off", std::ios::binary); VertexNormalMap vnm2 = get(CGAL::dynamic_vertex_property_t(), fg); - VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg); + VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg); VertexTextureMap vtm2 = get(CGAL::dynamic_vertex_property_t(), fg); - FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg); + FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg); - ok = CGAL::read_OFF(is, fg, CGAL::parameters::vertex_normal_map(vnm2) - .vertex_color_map(vcm2) - .vertex_texture_map(vtm2) - .face_color_map(fcm2)); + ok = CGAL::IO::read_OFF(is, fg, CGAL::parameters::vertex_normal_map(vnm2) + .vertex_color_map(vcm2) + .vertex_texture_map(vtm2) + .face_color_map(fcm2)); assert(ok); assert(num_vertices(fg) != 0 && num_faces(fg) != 0); for(auto v : vertices(fg)) { assert(get(vnm2, v) != CGAL::NULL_VECTOR); - assert(get(vcm2, v) != CGAL::Color()); + assert(get(vcm2, v) != CGAL::IO::Color()); } for(auto f : faces(fg)) - assert(get(fcm2, f) != CGAL::Color()); + assert(get(fcm2, f) != CGAL::IO::Color()); fg.clear(); is.close(); is.open("data/full.off"); VertexNormalMap vnm = get(CGAL::dynamic_vertex_property_t(), fg); - VertexColorMap vcm = get(CGAL::dynamic_vertex_property_t(), fg); + VertexColorMap vcm = get(CGAL::dynamic_vertex_property_t(), fg); VertexTextureMap vtm = get(CGAL::dynamic_vertex_property_t(), fg); - FaceColorMap fcm = get(CGAL::dynamic_face_property_t(), fg); - ok = CGAL::read_OFF(is, fg, CGAL::parameters::vertex_normal_map(vnm) - .vertex_color_map(vcm) - .vertex_texture_map(vtm) - .face_color_map(fcm)); + FaceColorMap fcm = get(CGAL::dynamic_face_property_t(), fg); + ok = CGAL::IO::read_OFF(is, fg, CGAL::parameters::vertex_normal_map(vnm) + .vertex_color_map(vcm) + .vertex_texture_map(vtm) + .face_color_map(fcm)); assert(ok); assert(num_vertices(fg) != 0 && num_faces(fg) != 0); for(auto v : vertices(fg)) { assert(get(vnm, v) != CGAL::NULL_VECTOR); - assert(get(vcm, v) != CGAL::Color()); + assert(get(vcm, v) != CGAL::IO::Color()); } // write with OFF { std::ofstream os("tmp.off"); - ok = CGAL::write_OFF("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm) - .vertex_color_map(vcm) - .vertex_texture_map(vtm) - .face_color_map(fcm)); + ok = CGAL::IO::write_OFF("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm) + .vertex_color_map(vcm) + .vertex_texture_map(vtm) + .face_color_map(fcm)); assert(ok); Mesh fg2; VertexNormalMap vnm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); + VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); VertexTextureMap vtm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); + FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); - ok = CGAL::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2) - .vertex_color_map(vcm2) - .vertex_texture_map(vtm2) - .face_color_map(fcm2)); + ok = CGAL::IO::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2) + .vertex_color_map(vcm2) + .vertex_texture_map(vtm2) + .face_color_map(fcm2)); assert(ok); assert(are_equal_meshes(fg, fg2)); for(auto v : vertices(fg2)) { assert(get(vnm2, v) != CGAL::NULL_VECTOR); - assert(get(vcm2, v) != CGAL::Color()); + assert(get(vcm2, v) != CGAL::IO::Color()); } for(auto f : faces(fg2)) - assert(get(fcm2, f) != CGAL::Color()); + assert(get(fcm2, f) != CGAL::IO::Color()); } // write with PM { - ok = CGAL::write_polygon_mesh("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm) - .vertex_color_map(vcm) - .vertex_texture_map(vtm) - .face_color_map(fcm)); + ok = CGAL::IO::write_polygon_mesh("tmp.off", fg, CGAL::parameters::vertex_normal_map(vnm) + .vertex_color_map(vcm) + .vertex_texture_map(vtm) + .face_color_map(fcm)); assert(ok); Mesh fg2; VertexNormalMap vnm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); + VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); VertexTextureMap vtm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); + FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); - ok = CGAL::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2) - .vertex_color_map(vcm2) - .vertex_texture_map(vtm2) - .face_color_map(fcm2)); + ok = CGAL::IO::read_polygon_mesh("tmp.off", fg2, CGAL::parameters::vertex_normal_map(vnm2) + .vertex_color_map(vcm2) + .vertex_texture_map(vtm2) + .face_color_map(fcm2)); assert(ok); assert(are_equal_meshes(fg, fg2)); for(auto v : vertices(fg2)) { assert(get(vnm2, v) != CGAL::NULL_VECTOR); - assert(get(vcm2, v) != CGAL::Color()); + assert(get(vcm2, v) != CGAL::IO::Color()); } for(auto f : faces(fg2)) - assert(get(fcm2, f) != CGAL::Color()); + assert(get(fcm2, f) != CGAL::IO::Color()); } } //@todo test multi objects in a single file // test wrong inputs std::cerr << " ########### Error text is expected to follow." << std::endl; - ok = CGAL::read_OFF("data/mesh_that_doesnt_exist.off", fg); + ok = CGAL::IO::read_OFF("data/mesh_that_doesnt_exist.off", fg); assert(!ok); - ok = CGAL::read_OFF("data/invalid_cut.off", fg); // cut in half + ok = CGAL::IO::read_OFF("data/invalid_cut.off", fg); // cut in half assert(!ok); - ok = CGAL::read_OFF("data/invalid_nv.off", fg); // wrong number of points + ok = CGAL::IO::read_OFF("data/invalid_nv.off", fg); // wrong number of points assert(!ok); - ok = CGAL::read_OFF("data/sphere.obj", fg); + ok = CGAL::IO::read_OFF("data/sphere.obj", fg); assert(!ok); - ok = CGAL::read_OFF("data/pig.stl", fg); + ok = CGAL::IO::read_OFF("data/pig.stl", fg); assert(!ok); std::cerr << " ########### No more error text from here." << std::endl; } @@ -394,72 +394,72 @@ void test_bgl_OBJ(const std::string filename) Mesh fg; std::ifstream is(filename); - bool ok = CGAL::read_OBJ(is, fg, CGAL::parameters::verbose(true)); + bool ok = CGAL::IO::read_OBJ(is, fg, CGAL::parameters::verbose(true)); assert(ok); assert(filename != "data/sphere.obj" || (num_vertices(fg) == 272 && num_faces(fg) == 540)); // write with OBJ { std::ofstream os("tmp.obj"); - ok = CGAL::write_OBJ(os, fg); + ok = CGAL::IO::write_OBJ(os, fg); assert(ok); Mesh fg2; - ok = CGAL::read_OBJ("tmp.obj", fg2); + ok = CGAL::IO::read_OBJ("tmp.obj", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } // write with PM { - ok = CGAL::write_polygon_mesh("tmp.obj", fg); + ok = CGAL::IO::write_polygon_mesh("tmp.obj", fg); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.obj", fg2); + ok = CGAL::IO::read_polygon_mesh("tmp.obj", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } // Test NPs CGAL::clear(fg); - ok = CGAL::read_OBJ("data/sphere.obj", fg); + ok = CGAL::IO::read_OBJ("data/sphere.obj", fg); assert(ok); assert(num_vertices(fg) == 272 && num_faces(fg) == 540); // write with OBJ { std::ofstream os("tmp.obj"); - ok = CGAL::write_OBJ("tmp.obj", fg); + ok = CGAL::IO::write_OBJ("tmp.obj", fg); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.obj", fg2); + ok = CGAL::IO::read_polygon_mesh("tmp.obj", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } // write with PM { - ok = CGAL::write_polygon_mesh("tmp.obj", fg); + ok = CGAL::IO::write_polygon_mesh("tmp.obj", fg); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.obj", fg2); + ok = CGAL::IO::read_polygon_mesh("tmp.obj", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } // test wrong inputs std::cerr << " ########### Error text is expected to follow." << std::endl; - ok = CGAL::read_OBJ("data/mesh_that_doesnt_exist.obj", fg); + ok = CGAL::IO::read_OBJ("data/mesh_that_doesnt_exist.obj", fg); assert(!ok); - ok = CGAL::read_OBJ("data/invalid_cut.obj", fg); // invalid vertex ids + ok = CGAL::IO::read_OBJ("data/invalid_cut.obj", fg); // invalid vertex ids assert(!ok); - ok = CGAL::read_OBJ("data/genus3.off", fg); // wrong extension + ok = CGAL::IO::read_OBJ("data/genus3.off", fg); // wrong extension assert(!ok); - ok = CGAL::read_OBJ("data/pig.stl", fg); + ok = CGAL::IO::read_OBJ("data/pig.stl", fg); assert(!ok); std::cerr << " ########### No more error text from here." << std::endl; } @@ -472,7 +472,7 @@ void test_bgl_PLY(const std::string filename, Mesh fg; std::ifstream is(filename); - bool ok = CGAL::read_PLY(is, fg, CGAL::parameters::use_binary_mode(false)); + bool ok = CGAL::IO::read_PLY(is, fg, CGAL::parameters::use_binary_mode(false)); is.close(); assert(ok); assert(filename != "data/colored_tetra.ply" || (num_vertices(fg) == 4 && num_faces(fg) == 4)); @@ -480,7 +480,7 @@ void test_bgl_PLY(const std::string filename, { fg.clear(); is.open(filename, std::ios::binary); - bool ok = CGAL::read_PLY(is, fg, CGAL::parameters::use_binary_mode(false)); + bool ok = CGAL::IO::read_PLY(is, fg, CGAL::parameters::use_binary_mode(false)); is.close(); assert(ok); assert(filename != "data/colored_tetra.ply" || (num_vertices(fg) == 4 && num_faces(fg) == 4)); @@ -492,120 +492,120 @@ void test_bgl_PLY(const std::string filename, if(binary) { os.open("tmp.ply", std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); } else { os.open("tmp.ply"); } - ok = CGAL::write_PLY(os, fg); + ok = CGAL::IO::write_PLY(os, fg); assert(ok); - ok = CGAL::write_PLY(os, fg, "test"); + ok = CGAL::IO::write_PLY(os, fg, "test"); assert(ok); Mesh fg2; - ok = CGAL::read_PLY("tmp.ply", fg2); + ok = CGAL::IO::read_PLY("tmp.ply", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } // test NPs - typedef typename boost::property_map >::type VertexColorMap; - typedef typename boost::property_map >::type FaceColorMap; + typedef typename boost::property_map >::type VertexColorMap; + typedef typename boost::property_map >::type FaceColorMap; CGAL::clear(fg); - VertexColorMap vcm = get(CGAL::dynamic_vertex_property_t(), fg); - FaceColorMap fcm = get(CGAL::dynamic_face_property_t(), fg); + VertexColorMap vcm = get(CGAL::dynamic_vertex_property_t(), fg); + FaceColorMap fcm = get(CGAL::dynamic_face_property_t(), fg); std::ifstream is_c("data/colored_tetra.ply"); // ASCII - ok = CGAL::read_PLY(is_c, fg, CGAL::parameters::vertex_color_map(vcm) - .face_color_map(fcm)); + ok = CGAL::IO::read_PLY(is_c, fg, CGAL::parameters::vertex_color_map(vcm) + .face_color_map(fcm)); assert(ok); assert(num_vertices(fg) == 4 && num_faces(fg) == 4); for(auto v : vertices(fg)) { - assert(get(vcm, v) != CGAL::Color()); + assert(get(vcm, v) != CGAL::IO::Color()); } for(auto f : faces(fg)) - assert(get(fcm, f) != CGAL::Color()); + assert(get(fcm, f) != CGAL::IO::Color()); // write with PLY { - ok = CGAL::write_PLY("tmp.ply", fg, CGAL::parameters::vertex_color_map(vcm) - .face_color_map(fcm) - .use_binary_mode(binary)); + ok = CGAL::IO::write_PLY("tmp.ply", fg, CGAL::parameters::vertex_color_map(vcm) + .face_color_map(fcm) + .use_binary_mode(binary)); assert(ok); Mesh fg2; - VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); + VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); + FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); std::ifstream is_rpm; if(binary) { is_rpm.open("tmp.ply", std::ios::binary); - CGAL::set_mode(is_rpm, CGAL::IO::BINARY); + CGAL::IO::set_mode(is_rpm, CGAL::IO::BINARY); } else { is_rpm.open("tmp.ply"); } - ok = CGAL::read_PLY(is_rpm, fg2, CGAL::parameters::vertex_color_map(vcm2) - .face_color_map(fcm2)); + ok = CGAL::IO::read_PLY(is_rpm, fg2, CGAL::parameters::vertex_color_map(vcm2) + .face_color_map(fcm2)); assert(ok); assert(are_equal_meshes(fg, fg2)); // @tmp // for(auto v : vertices(fg2)) -// assert(get(vcm2, v) != CGAL::Color()); +// assert(get(vcm2, v) != CGAL::IO::Color()); // for(auto f : faces(fg2)) -// assert(get(fcm2, f) != CGAL::Color()); +// assert(get(fcm2, f) != CGAL::IO::Color()); } // write with PM { - ok = CGAL::write_polygon_mesh("tmp.ply", fg, CGAL::parameters::vertex_color_map(vcm) - .face_color_map(fcm) - .use_binary_mode(binary)); + ok = CGAL::IO::write_polygon_mesh("tmp.ply", fg, CGAL::parameters::vertex_color_map(vcm) + .face_color_map(fcm) + .use_binary_mode(binary)); assert(ok); Mesh fg2; - VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); + VertexColorMap vcm2 = get(CGAL::dynamic_vertex_property_t(), fg2); + FaceColorMap fcm2 = get(CGAL::dynamic_face_property_t(), fg2); - ok = CGAL::read_polygon_mesh("tmp.ply", fg2, CGAL::parameters::vertex_color_map(vcm2) - .face_color_map(fcm2) - .use_binary_mode(binary)); + ok = CGAL::IO::read_polygon_mesh("tmp.ply", fg2, CGAL::parameters::vertex_color_map(vcm2) + .face_color_map(fcm2) + .use_binary_mode(binary)); assert(ok); assert(are_equal_meshes(fg, fg2)); // @tmp // for(auto v : vertices(fg2)) -// assert(get(vcm2, v) != CGAL::Color()); +// assert(get(vcm2, v) != CGAL::IO::Color()); // for(auto f : faces(fg2)) -// assert(get(fcm2, f) != CGAL::Color()); +// assert(get(fcm2, f) != CGAL::IO::Color()); } // test wrong inputs std::cerr << " ########### Error text is expected to follow." << std::endl; - ok = CGAL::read_PLY("data/mesh_that_doesnt_exist.ply", fg); + ok = CGAL::IO::read_PLY("data/mesh_that_doesnt_exist.ply", fg); assert(!ok); - ok = CGAL::read_PLY("data/invalid_cut.ply", fg); // cut in half + ok = CGAL::IO::read_PLY("data/invalid_cut.ply", fg); // cut in half assert(!ok); - ok = CGAL::read_PLY("data/invalid_nv.ply", fg); // broken formatting + ok = CGAL::IO::read_PLY("data/invalid_nv.ply", fg); // broken formatting assert(!ok); - ok = CGAL::read_PLY("data/binary_cut.ply", fg); // broken binary + ok = CGAL::IO::read_PLY("data/binary_cut.ply", fg); // broken binary assert(!ok); - ok = CGAL::read_PLY("data/cube.off", fg); + ok = CGAL::IO::read_PLY("data/cube.off", fg); assert(!ok); - ok = CGAL::read_PLY("data/pig.stl", fg); + ok = CGAL::IO::read_PLY("data/pig.stl", fg); assert(!ok); std::cerr << " ########### No more error text from here." << std::endl; } @@ -635,18 +635,18 @@ void test_bgl_STL(const std::string filename) { Mesh fg; - bool ok = CGAL::read_STL(filename, fg); + bool ok = CGAL::IO::read_STL(filename, fg); assert(ok); - ok = CGAL::write_STL("tmp.stl", fg); + ok = CGAL::IO::write_STL("tmp.stl", fg); assert(ok); // write with ASCII in binary mode { - ok = CGAL::write_polygon_mesh("ascii.stl", fg, CGAL::parameters::use_binary_mode(false)); + ok = CGAL::IO::write_polygon_mesh("ascii.stl", fg, CGAL::parameters::use_binary_mode(false)); assert(ok); std::ifstream test_ascii("ascii.stl", std::ios::binary); Mesh fg2; - ok = CGAL::read_STL(test_ascii, fg2, CGAL::parameters::use_binary_mode(false)); + ok = CGAL::IO::read_STL(test_ascii, fg2, CGAL::parameters::use_binary_mode(false)); test_ascii.close(); assert(ok); assert(num_vertices(fg) == num_vertices(fg2) && num_faces(fg) == num_faces(fg2)); @@ -658,8 +658,8 @@ void test_bgl_STL(const std::string filename) Custom_VPM cvpm(cpoints); std::ifstream is(filename, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); - ok = CGAL::read_STL(is, fg, CGAL::parameters::vertex_point_map(cvpm)); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); + ok = CGAL::IO::read_STL(is, fg, CGAL::parameters::vertex_point_map(cvpm)); assert(ok); assert(filename != "data/pig.stl" || (num_vertices(fg) == 8642 && num_faces(fg) == 16848)); assert(filename != "data/pig.stl" || cpoints.size() == 8642); @@ -667,36 +667,36 @@ void test_bgl_STL(const std::string filename) // write with STL { std::ofstream os("tmp.stl"); - ok = CGAL::write_STL(os, fg, CGAL::parameters::vertex_point_map(cvpm)); + ok = CGAL::IO::write_STL(os, fg, CGAL::parameters::vertex_point_map(cvpm)); assert(ok); Mesh fg2; - ok = CGAL::read_STL("tmp.stl", fg2, CGAL::parameters::vertex_point_map(cvpm)); + ok = CGAL::IO::read_STL("tmp.stl", fg2, CGAL::parameters::vertex_point_map(cvpm)); assert(ok); assert(num_vertices(fg) == num_vertices(fg2) && num_faces(fg) == num_faces(fg2)); } // write with PM { - ok = CGAL::write_polygon_mesh("tmp.stl", fg, CGAL::parameters::vertex_point_map(cvpm)); + ok = CGAL::IO::write_polygon_mesh("tmp.stl", fg, CGAL::parameters::vertex_point_map(cvpm)); assert(ok); cpoints.clear(); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.stl", fg2, CGAL::parameters::vertex_point_map(cvpm)); + ok = CGAL::IO::read_polygon_mesh("tmp.stl", fg2, CGAL::parameters::vertex_point_map(cvpm)); assert(ok); assert(num_vertices(fg) == num_vertices(fg2) && num_faces(fg) == num_faces(fg2)); } std::cerr << " ########### Error text is expected to follow." << std::endl; - ok = CGAL::read_STL("data/mesh_that_doesnt_exist.stl", fg); + ok = CGAL::IO::read_STL("data/mesh_that_doesnt_exist.stl", fg); assert(!ok); - ok = CGAL::read_STL("data/invalid_cut.stl", fg); // cut in half + ok = CGAL::IO::read_STL("data/invalid_cut.stl", fg); // cut in half assert(!ok); - ok = CGAL::read_STL("data/invalid_header.stl", fg); // missing solid + ok = CGAL::IO::read_STL("data/invalid_header.stl", fg); // missing solid assert(!ok); - ok = CGAL::read_STL("data/sphere.obj", fg); + ok = CGAL::IO::read_STL("data/sphere.obj", fg); assert(!ok); - ok = CGAL::read_STL("data/full.off", fg); + ok = CGAL::IO::read_STL("data/full.off", fg); assert(!ok); std::cerr << " ########### No more error text from here." << std::endl; } @@ -706,7 +706,7 @@ void test_bgl_GOCAD(const char* filename) { Mesh fg; std::ifstream is(filename); - bool ok = CGAL::read_GOCAD(is, fg); + bool ok = CGAL::IO::read_GOCAD(is, fg); assert(ok); assert(num_vertices(fg) != 0 && num_faces(fg) != 0); @@ -714,19 +714,19 @@ void test_bgl_GOCAD(const char* filename) fg.clear(); CGAL::clear(fg); std::pair name_and_color; - ok = CGAL::read_GOCAD(is, name_and_color, fg); + ok = CGAL::IO::read_GOCAD(is, name_and_color, fg); assert(ok); assert(num_vertices(fg) != 0 && num_faces(fg) != 0); // write with GOCAD { std::ofstream os("tmp.ts"); - bool ok = CGAL::write_GOCAD(os, "tetrahedron", fg); + bool ok = CGAL::IO::write_GOCAD(os, "tetrahedron", fg); assert(ok); Mesh fg2; std::pair cnn; - ok = CGAL::read_GOCAD("tmp.ts", cnn, fg2); + ok = CGAL::IO::read_GOCAD("tmp.ts", cnn, fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); assert(cnn.first == "tetrahedron"); @@ -734,11 +734,11 @@ void test_bgl_GOCAD(const char* filename) // write with PM { - ok = CGAL::write_polygon_mesh("tmp.ts", fg, CGAL::parameters::stream_precision(10)); + ok = CGAL::IO::write_polygon_mesh("tmp.ts", fg, CGAL::parameters::stream_precision(10)); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.ts", fg2); + ok = CGAL::IO::read_polygon_mesh("tmp.ts", fg2); assert(ok); assert(are_equal_meshes(fg, fg2)); } @@ -749,7 +749,7 @@ void test_bgl_GOCAD(const char* filename) VertexPointMap vpm = get(CGAL::vertex_point, fg); std::ostringstream out; - ok = CGAL::write_GOCAD(out, "tetrahedron", fg, CGAL::parameters::vertex_point_map(vpm)); + ok = CGAL::IO::write_GOCAD(out, "tetrahedron", fg, CGAL::parameters::vertex_point_map(vpm)); assert(ok); { @@ -757,7 +757,7 @@ void test_bgl_GOCAD(const char* filename) VertexPointMap vpm2 = get(CGAL::vertex_point, fg2); std::istringstream is(out.str()); std::pair cnn; - ok = CGAL::read_GOCAD(is, cnn, fg2, CGAL::parameters::vertex_point_map(vpm2)); + ok = CGAL::IO::read_GOCAD(is, cnn, fg2, CGAL::parameters::vertex_point_map(vpm2)); assert(ok); assert(cnn.second.empty()); assert(num_vertices(fg2) == 12491); @@ -765,15 +765,15 @@ void test_bgl_GOCAD(const char* filename) } std::cerr << " ########### Error text is expected to follow." << std::endl; - ok = CGAL::read_GOCAD("data/mesh_that_doesnt_exist.ts", fg); + ok = CGAL::IO::read_GOCAD("data/mesh_that_doesnt_exist.ts", fg); assert(!ok); - ok = CGAL::read_GOCAD("data/invalid_cut.ts", fg); // cut in half + ok = CGAL::IO::read_GOCAD("data/invalid_cut.ts", fg); // cut in half assert(!ok); - ok = CGAL::read_GOCAD("data/invalid_header.ts", fg); // missing header + ok = CGAL::IO::read_GOCAD("data/invalid_header.ts", fg); // missing header assert(!ok); - ok = CGAL::read_GOCAD("data/sphere.obj", fg); + ok = CGAL::IO::read_GOCAD("data/sphere.obj", fg); assert(!ok); - ok = CGAL::read_GOCAD("data/full.off", fg); + ok = CGAL::IO::read_GOCAD("data/full.off", fg); assert(!ok); std::cerr << " ########### No more error text from here." << std::endl; } @@ -785,7 +785,7 @@ void test_bgl_VTP(const char* filename, const bool binary = false) { Mesh fg; - bool ok = CGAL::read_VTP(filename, fg); + bool ok = CGAL::IO::read_VTP(filename, fg); assert(ok); assert(std::string(filename) != "data/bones.vtp" || (num_vertices(fg) == 2154 && num_faces(fg) == 4204)); @@ -795,15 +795,15 @@ void test_bgl_VTP(const char* filename, std::ofstream os; if(binary){ os.open("tmp.vtp", std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); } else os.open("tmp.vtp"); - ok = CGAL::write_VTP(os, fg, CGAL::parameters::use_binary_mode(binary)); + ok = CGAL::IO::write_VTP(os, fg, CGAL::parameters::use_binary_mode(binary)); assert(ok); Mesh fg2; - ok = CGAL::read_VTP("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); + ok = CGAL::IO::read_VTP("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); assert(ok); assert(are_equal_meshes(fg, fg2)); } @@ -811,13 +811,13 @@ void test_bgl_VTP(const char* filename, // write with PM { if(binary) - ok = CGAL::write_polygon_mesh("tmp.vtp", fg); + ok = CGAL::IO::write_polygon_mesh("tmp.vtp", fg); else - ok = CGAL::write_polygon_mesh("tmp.vtp", fg, CGAL::parameters::use_binary_mode(false)); + ok = CGAL::IO::write_polygon_mesh("tmp.vtp", fg, CGAL::parameters::use_binary_mode(false)); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); + ok = CGAL::IO::read_polygon_mesh("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); assert(ok); assert(are_equal_meshes(fg, fg2)); } @@ -828,14 +828,14 @@ void test_bgl_VTP(const char* filename, { CGAL::clear(fg); - ok = CGAL::read_VTP("data/bones.vtp", fg); + ok = CGAL::IO::read_VTP("data/bones.vtp", fg); assert(ok); assert(num_vertices(fg) == 2154 && num_faces(fg) == 4204); Mesh fg2; VertexPointMap vpm2 = get(CGAL::dynamic_vertex_property_t(), fg2); - ok = CGAL::read_VTP("data/bones.vtp", fg2, CGAL::parameters::vertex_point_map(vpm2)); + ok = CGAL::IO::read_VTP("data/bones.vtp", fg2, CGAL::parameters::vertex_point_map(vpm2)); assert(ok); typedef typename CGAL::GetInitializedVertexIndexMap::const_type VIM; VIM vim1 = CGAL::get_initialized_vertex_index_map(fg); @@ -849,18 +849,18 @@ void test_bgl_VTP(const char* filename, if(binary) { os.open("tmp.vtp", std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); } else { os.open("tmp.vtp"); } - ok = CGAL::write_VTP(os, fg, CGAL::parameters::use_binary_mode(binary)); + ok = CGAL::IO::write_VTP(os, fg, CGAL::parameters::use_binary_mode(binary)); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); + ok = CGAL::IO::read_polygon_mesh("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); assert(ok); assert(are_equal_meshes(fg, fg2)); } @@ -868,33 +868,33 @@ void test_bgl_VTP(const char* filename, // write with PM { if(binary) - ok = CGAL::write_polygon_mesh("tmp.vtp", fg); + ok = CGAL::IO::write_polygon_mesh("tmp.vtp", fg); else - ok = CGAL::write_polygon_mesh("tmp.vtp", fg, CGAL::parameters::use_binary_mode(false)); + ok = CGAL::IO::write_polygon_mesh("tmp.vtp", fg, CGAL::parameters::use_binary_mode(false)); assert(ok); Mesh fg2; - ok = CGAL::read_polygon_mesh("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); + ok = CGAL::IO::read_polygon_mesh("tmp.vtp", fg2, CGAL::parameters::use_binary_mode(binary)); assert(ok); assert(are_equal_meshes(fg, fg2)); } // test wrong inputs std::cerr << " ########### Error text is expected to follow." << std::endl; - ok = CGAL::read_VTP("data/mesh_that_doesnt_exist.vtp", fg); + ok = CGAL::IO::read_VTP("data/mesh_that_doesnt_exist.vtp", fg); assert(!ok); - ok = CGAL::read_VTP("data/invalid_cut.vtp", fg); // cut in half + ok = CGAL::IO::read_VTP("data/invalid_cut.vtp", fg); // cut in half assert(!ok); - ok = CGAL::read_VTP("data/invalid_header.vtp", fg); // missing header + ok = CGAL::IO::read_VTP("data/invalid_header.vtp", fg); // missing header assert(!ok); - ok = CGAL::read_VTP("data/wrong_nb_points.vtp", fg); // wrong number of points + ok = CGAL::IO::read_VTP("data/wrong_nb_points.vtp", fg); // wrong number of points assert(!ok); - ok = CGAL::read_VTP("data/sphere.obj", fg); + ok = CGAL::IO::read_VTP("data/sphere.obj", fg); assert(!ok); - ok = CGAL::read_VTP("data/full.off", fg); + ok = CGAL::IO::read_VTP("data/full.off", fg); assert(!ok); - ok = CGAL::read_VTP("corrupted_bin.vtp", fg); + ok = CGAL::IO::read_VTP("corrupted_bin.vtp", fg); assert(!ok); std::cerr << " ########### No more error text from here." << std::endl; } @@ -909,21 +909,21 @@ int main(int argc, char** argv) test_bgl_OFF(off_file); Polyhedron fg; - bool ok = CGAL::read_OFF("data/invalid_header.off", fg); // wrong header (NOFF but no normals) + bool ok = CGAL::IO::read_OFF("data/invalid_header.off", fg); // wrong header (NOFF but no normals) assert(ok); test_bgl_OFF(off_file); SM sm; - ok = CGAL::read_OFF("data/invalid_header.off", sm); // wrong header (NOFF but no normals) + ok = CGAL::IO::read_OFF("data/invalid_header.off", sm); // wrong header (NOFF but no normals) assert(!ok); test_bgl_OFF(off_file); LCC lcc; - ok = CGAL::read_OFF("data/invalid_header.off", lcc); // wrong header (NOFF but no normals) + ok = CGAL::IO::read_OFF("data/invalid_header.off", lcc); // wrong header (NOFF but no normals) assert(!ok); #ifdef CGAL_USE_OPENMESH test_bgl_OFF(off_file); OMesh om; - ok = CGAL::read_OFF("data/invalid_header.off", om); // wrong header (NOFF but no normals) + ok = CGAL::IO::read_OFF("data/invalid_header.off", om); // wrong header (NOFF but no normals) assert(!ok); #endif // OBJ diff --git a/BGL/test/BGL/test_clear.cpp b/BGL/test/BGL/test_clear.cpp index e2ab407fc60..c5387c52160 100644 --- a/BGL/test/BGL/test_clear.cpp +++ b/BGL/test/BGL/test_clear.cpp @@ -7,7 +7,7 @@ void test() { const std::string fname = "data/7_faces_triangle.off"; Mesh m; - if(!CGAL::read_OFF(fname, m)) + if(!CGAL::IO::read_OFF(fname, m)) std::cout << "Error reading file: " << fname << std::endl; assert(CGAL::is_valid_polygon_mesh(m)); diff --git a/BGL/test/BGL/test_deprecated_io.cpp b/BGL/test/BGL/test_deprecated_io.cpp index 5bd037191cc..cd7981d324a 100644 --- a/BGL/test/BGL/test_deprecated_io.cpp +++ b/BGL/test/BGL/test_deprecated_io.cpp @@ -44,7 +44,7 @@ int main() assert(ok); os.close(); - ok = CGAL::read_VTP("tmp.vtp", sm_in); + ok = CGAL::IO::read_VTP("tmp.vtp", sm_in); assert(ok); assert(num_vertices(sm_in) == 3 && num_faces(sm_in) == 1); sm_in.clear(); diff --git a/Boolean_set_operations_2/archive/demo/Boolean_set_operations_2_GraphicsView/boolean_operations_2.cpp b/Boolean_set_operations_2/archive/demo/Boolean_set_operations_2_GraphicsView/boolean_operations_2.cpp index a8dd97b66c9..424dfdbe710 100644 --- a/Boolean_set_operations_2/archive/demo/Boolean_set_operations_2_GraphicsView/boolean_operations_2.cpp +++ b/Boolean_set_operations_2/archive/demo/Boolean_set_operations_2_GraphicsView/boolean_operations_2.cpp @@ -31,7 +31,7 @@ void trace( std::string s ) out << s ; } -#include +#include #include #include @@ -306,7 +306,7 @@ public: class Curve_set { - typedef boost::shared_ptr Rep_ptr ; + typedef std::shared_ptr Rep_ptr ; public: @@ -417,7 +417,7 @@ private: QPen mPen ; QBrush mBrush ; - boost::shared_ptr mRep ; + std::shared_ptr mRep ; } ; diff --git a/Boolean_set_operations_2/include/CGAL/General_polygon_2.h b/Boolean_set_operations_2/include/CGAL/General_polygon_2.h index fd6badf0c40..7d1cbdea7a8 100644 --- a/Boolean_set_operations_2/include/CGAL/General_polygon_2.h +++ b/Boolean_set_operations_2/include/CGAL/General_polygon_2.h @@ -187,7 +187,7 @@ std::ostream { typename General_polygon_2::Curve_const_iterator i; - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << p.size() << ' '; for (i = p.curves_begin(); i != p.curves_end(); ++i) { diff --git a/Bounding_volumes/examples/Min_circle_2/min_circle_homogeneous_2.cpp b/Bounding_volumes/examples/Min_circle_2/min_circle_homogeneous_2.cpp index aac519412db..238887de2e4 100644 --- a/Bounding_volumes/examples/Min_circle_2/min_circle_homogeneous_2.cpp +++ b/Bounding_volumes/examples/Min_circle_2/min_circle_homogeneous_2.cpp @@ -26,7 +26,7 @@ main( int, char**) Min_circle mc1( P, P+n, false); // very slow Min_circle mc2( P, P+n, true); // fast - CGAL::set_pretty_mode( std::cout); + CGAL::IO::set_pretty_mode( std::cout); std::cout << mc2; return 0; diff --git a/Bounding_volumes/examples/Min_ellipse_2/min_ellipse_2.cpp b/Bounding_volumes/examples/Min_ellipse_2/min_ellipse_2.cpp index f4571ad6a8c..a5f5935e5b4 100644 --- a/Bounding_volumes/examples/Min_ellipse_2/min_ellipse_2.cpp +++ b/Bounding_volumes/examples/Min_ellipse_2/min_ellipse_2.cpp @@ -39,7 +39,7 @@ main( int, char**) assert(me2.number_of_support_points()==2); // prettyprinting - CGAL::set_pretty_mode( std::cout); + CGAL::IO::set_pretty_mode( std::cout); std::cout << me2; // in general, the ellipse is not explicitly representable diff --git a/Bounding_volumes/examples/Min_sphere_d/min_sphere_homogeneous_3.cpp b/Bounding_volumes/examples/Min_sphere_d/min_sphere_homogeneous_3.cpp index 191109c0566..a0ec7ad1e17 100644 --- a/Bounding_volumes/examples/Min_sphere_d/min_sphere_homogeneous_3.cpp +++ b/Bounding_volumes/examples/Min_sphere_d/min_sphere_homogeneous_3.cpp @@ -25,7 +25,7 @@ main () Min_sphere ms (P, P+n); // smallest enclosing sphere - CGAL::set_pretty_mode (std::cout); + CGAL::IO::set_pretty_mode (std::cout); std::cout << ms; // output the sphere return 0; diff --git a/Bounding_volumes/examples/Rectangular_p_center_2/rectangular_p_center_2.cpp b/Bounding_volumes/examples/Rectangular_p_center_2/rectangular_p_center_2.cpp index 920df52e0e3..e4602fe923f 100644 --- a/Bounding_volumes/examples/Rectangular_p_center_2/rectangular_p_center_2.cpp +++ b/Bounding_volumes/examples/Rectangular_p_center_2/rectangular_p_center_2.cpp @@ -21,7 +21,7 @@ int main() int n = 10; int p = 2; OIterator cout_ip(std::cout); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); Cont points; std::copy_n(Generator(1), n, std::back_inserter(points)); diff --git a/Bounding_volumes/include/CGAL/Min_annulus_d.h b/Bounding_volumes/include/CGAL/Min_annulus_d.h index 0be72c1b427..4f8e1d3a784 100644 --- a/Bounding_volumes/include/CGAL/Min_annulus_d.h +++ b/Bounding_volumes/include/CGAL/Min_annulus_d.h @@ -781,7 +781,7 @@ operator << ( std::ostream& os, typedef typename Traits_::ET ET; typedef ostream_iterator Et_it; - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: os << "CGAL::Min_annulus_d( |P| = " @@ -830,7 +830,7 @@ operator << ( std::ostream& os, default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } return( os); @@ -843,7 +843,7 @@ operator >> ( std::istream& is, CGAL::Min_annulus_d& min_annulus) { using namespace std; - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: cerr << endl; diff --git a/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterC2.h b/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterC2.h index a75c21f1624..3f28aef6732 100644 --- a/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterC2.h +++ b/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterC2.h @@ -273,7 +273,7 @@ std::ostream& operator << ( std::ostream& os, const CGAL::_Min_circle_2_adapterC2__Circle& c) { - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: os << "CGAL::Min_circle_2_adapterC2::Circle( " @@ -294,7 +294,7 @@ operator << ( std::ostream& os, default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } return( os); @@ -305,7 +305,7 @@ std::istream& operator >> ( std::istream& is, CGAL::_Min_circle_2_adapterC2__Circle& c) { - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: std::cerr << std::endl; diff --git a/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterH2.h b/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterH2.h index 166a5948eb5..74afdd668d6 100644 --- a/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterH2.h +++ b/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_adapterH2.h @@ -307,7 +307,7 @@ std::ostream& operator << ( std::ostream& os, const CGAL::_Min_circle_2_adapterH2__Circle& c) { - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: os << "CGAL::Min_circle_2_adapterH2::Circle( " @@ -333,7 +333,7 @@ operator << ( std::ostream& os, default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } return( os); @@ -344,7 +344,7 @@ std::istream& operator >> ( std::istream& is, CGAL::_Min_circle_2_adapterH2__Circle& c) { - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: std::cerr << std::endl; diff --git a/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_impl.h b/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_impl.h index dc79b1f8812..f0a8cc7f072 100644 --- a/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_impl.h +++ b/Bounding_volumes/include/CGAL/Min_circle_2/Min_circle_2_impl.h @@ -28,7 +28,7 @@ operator << ( std::ostream& os, typedef typename Min_circle_2::Point Point; typedef ostream_iterator Os_it; - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: os << endl; @@ -61,7 +61,7 @@ operator << ( std::ostream& os, default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } return( os); @@ -73,7 +73,7 @@ operator >> ( std::istream& is, CGAL::Min_circle_2& min_circle) { using namespace std; - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: cerr << endl; diff --git a/Bounding_volumes/include/CGAL/Min_circle_2/Optimisation_circle_2_impl.h b/Bounding_volumes/include/CGAL/Min_circle_2/Optimisation_circle_2_impl.h index 7257afbb604..55057c6ac37 100644 --- a/Bounding_volumes/include/CGAL/Min_circle_2/Optimisation_circle_2_impl.h +++ b/Bounding_volumes/include/CGAL/Min_circle_2/Optimisation_circle_2_impl.h @@ -24,7 +24,7 @@ template < class K_ > std::ostream& operator << ( std::ostream& os, const CGAL::Optimisation_circle_2& c) { - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: os << "CGAL::Optimisation_circle_2( " @@ -43,7 +43,7 @@ operator << ( std::ostream& os, const CGAL::Optimisation_circle_2& c) default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } return( os); @@ -56,7 +56,7 @@ operator >> ( std::istream& is, CGAL::Optimisation_circle_2& c) typedef typename CGAL::Optimisation_circle_2::Point Point; typedef typename CGAL::Optimisation_circle_2::Distance Distance; - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: std::cerr << std::endl; @@ -80,7 +80,7 @@ operator >> ( std::istream& is, CGAL::Optimisation_circle_2& c) default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( is) invalid!"); + "CGAL::IO::get_mode( is) invalid!"); break; } return( is); diff --git a/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterC2.h b/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterC2.h index 6e70f09f978..b50c7e45fed 100644 --- a/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterC2.h +++ b/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterC2.h @@ -329,7 +329,7 @@ operator << ( std::ostream& os, const char* sep = empty; const char* tail = empty; - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: head = pretty_head; sep = pretty_sep; @@ -342,7 +342,7 @@ operator << ( std::ostream& os, break; default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } os << head << e.n_boundary_points; @@ -374,7 +374,7 @@ std::istream& operator >> ( std::istream& is, CGAL::_Min_ellipse_2_adapterC2__Ellipse& e) { - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: std::cerr << std::endl; diff --git a/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterH2.h b/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterH2.h index 9af39820a21..23454106cfc 100644 --- a/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterH2.h +++ b/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_adapterH2.h @@ -337,7 +337,7 @@ operator << ( std::ostream& os, const char* sep = empty; const char* tail = empty; - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: head = pretty_head; sep = pretty_sep; @@ -350,7 +350,7 @@ operator << ( std::ostream& os, break; default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } os << head << e.n_boundary_points; @@ -382,7 +382,7 @@ std::istream& operator >> ( std::istream& is, CGAL::_Min_ellipse_2_adapterH2__Ellipse& e) { - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: std::cerr << std::endl; diff --git a/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_impl.h b/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_impl.h index 527a1240659..e28a847f1c5 100644 --- a/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_impl.h +++ b/Bounding_volumes/include/CGAL/Min_ellipse_2/Min_ellipse_2_impl.h @@ -28,7 +28,7 @@ operator << ( std::ostream& os, typedef typename Min_ellipse_2::Point Point; typedef ostream_iterator Os_it; - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: os << endl; @@ -61,7 +61,7 @@ operator << ( std::ostream& os, default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } return( os); @@ -73,7 +73,7 @@ operator >> ( std::istream& is, CGAL::Min_ellipse_2& min_ellipse) { using namespace std; - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: cerr << endl; diff --git a/Bounding_volumes/include/CGAL/Min_ellipse_2/Optimisation_ellipse_2_impl.h b/Bounding_volumes/include/CGAL/Min_ellipse_2/Optimisation_ellipse_2_impl.h index a2e3f211396..47b42ef90d8 100644 --- a/Bounding_volumes/include/CGAL/Min_ellipse_2/Optimisation_ellipse_2_impl.h +++ b/Bounding_volumes/include/CGAL/Min_ellipse_2/Optimisation_ellipse_2_impl.h @@ -31,7 +31,7 @@ operator << ( std::ostream& os, const CGAL::Optimisation_ellipse_2& e) const char* sep = empty; const char* tail = empty; - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: head = pretty_head; sep = pretty_sep; @@ -44,7 +44,7 @@ operator << ( std::ostream& os, const CGAL::Optimisation_ellipse_2& e) break; default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } os << head << e.n_boundary_points; @@ -75,7 +75,7 @@ template < class K_ > std::istream& operator >> ( std::istream& is, CGAL::Optimisation_ellipse_2& e) { - switch ( CGAL::get_mode( is)) { + switch ( CGAL::IO::get_mode( is)) { case CGAL::IO::PRETTY: std::cerr << std::endl; @@ -107,7 +107,7 @@ operator >> ( std::istream& is, CGAL::Optimisation_ellipse_2& e) default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( is) invalid!"); + "CGAL::IO::get_mode( is) invalid!"); break; } return( is); diff --git a/Bounding_volumes/include/CGAL/Min_sphere_d/Min_sphere_d_impl.h b/Bounding_volumes/include/CGAL/Min_sphere_d/Min_sphere_d_impl.h index 1c2422c9c1f..684d1fb7e0b 100644 --- a/Bounding_volumes/include/CGAL/Min_sphere_d/Min_sphere_d_impl.h +++ b/Bounding_volumes/include/CGAL/Min_sphere_d/Min_sphere_d_impl.h @@ -25,7 +25,7 @@ operator << ( std::ostream& os, const Min_sphere_d& min_sphere) { typedef typename Min_sphere_d::Point Point; - switch ( get_mode( os)) { + switch ( IO::get_mode( os)) { case IO::PRETTY: os << std::endl; @@ -63,7 +63,7 @@ operator << ( std::ostream& os, const Min_sphere_d& min_sphere) default: CGAL_optimisation_assertion_msg - ( false, "get_mode( os) invalid!"); + ( false, "IO::get_mode( os) invalid!"); break; } return( os); @@ -73,7 +73,7 @@ template < class Traits > std::istream& operator >> ( std::istream& is, Min_sphere_d& min_sphere) { - switch ( get_mode( is)) { + switch ( IO::get_mode( is)) { case IO::PRETTY: std::cerr << std::endl; diff --git a/Bounding_volumes/include/CGAL/Min_sphere_of_spheres_d/Min_sphere_of_spheres_d_impl.h b/Bounding_volumes/include/CGAL/Min_sphere_of_spheres_d/Min_sphere_of_spheres_d_impl.h index 1a9263fd081..c4f37b4ddca 100644 --- a/Bounding_volumes/include/CGAL/Min_sphere_of_spheres_d/Min_sphere_of_spheres_d_impl.h +++ b/Bounding_volumes/include/CGAL/Min_sphere_of_spheres_d/Min_sphere_of_spheres_d_impl.h @@ -30,6 +30,8 @@ namespace CGAL_MINIBALL_NAMESPACE { +namespace Bounding_volumes { + template inline bool compare(const FT& a,const FT& b, const FT& ap,const FT& bp) { @@ -56,6 +58,8 @@ namespace CGAL_MINIBALL_NAMESPACE { } } +} // namespace Bounding_volumes + template void Min_sphere_of_spheres_d::update(LP_algorithm) { using namespace Min_sphere_of_spheres_d_impl; @@ -168,7 +172,7 @@ namespace CGAL_MINIBALL_NAMESPACE { t.center_cartesian_begin(*l[k]),FT(0),std::plus(), Subtract_and_square()); - if (compare(max,maxp,t.radius(*l[k]),dist)) { + if (Bounding_volumes::compare(max,maxp,t.radius(*l[k]),dist)) { max = t.radius(*l[k]); maxp = dist; i = k; @@ -203,7 +207,7 @@ namespace CGAL_MINIBALL_NAMESPACE { Subtract_and_square_to_double()); const double r = CGAL_MINIBALL_NTS to_double(t.radius(*l[k])); - if (compare(max,maxp,r,dist)) { + if (Bounding_volumes::compare(max,maxp,r,dist)) { max = r; maxp = dist; i = k; diff --git a/Bounding_volumes/test/Bounding_volumes/min_sphere_test.cpp b/Bounding_volumes/test/Bounding_volumes/min_sphere_test.cpp index e53793cf9f4..82b71269443 100644 --- a/Bounding_volumes/test/Bounding_volumes/min_sphere_test.cpp +++ b/Bounding_volumes/test/Bounding_volumes/min_sphere_test.cpp @@ -228,11 +228,11 @@ int main () std::ostringstream ost; // output string - set_ascii_mode (ost); + IO::set_ascii_mode (ost); ost << msC << msH << std::endl; // write spheres std::istringstream ist (ost.str().c_str()); // input string - set_ascii_mode (ist); + IO::set_ascii_mode (ist); ist >> msC >> msH; // read spheres assert(centerC == msC.center()); diff --git a/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_C.cpp b/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_C.cpp index 8e0a95aaad8..c009a3524a7 100644 --- a/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_C.cpp +++ b/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_C.cpp @@ -54,7 +54,7 @@ void compute(ForwardIterator f, ForwardIterator l) int main() { - CGAL::set_pretty_mode(cout); + CGAL::IO::set_pretty_mode(cout); // build a random convex 20-gon p { diff --git a/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_H.cpp b/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_H.cpp index 5acc7f9d93a..f92a59f752f 100644 --- a/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_H.cpp +++ b/Bounding_volumes/test/Bounding_volumes/minimum_enclosing_quadrilateral_2_test_H.cpp @@ -35,7 +35,7 @@ typedef CGAL::Random_points_in_square_2 Point_generator; int main() { - CGAL::set_pretty_mode(cout); + CGAL::IO::set_pretty_mode(cout); // build a random convex 20-gon p Polygon_2 p; diff --git a/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random1_test.cpp b/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random1_test.cpp index c39235bcf30..94ee1718336 100644 --- a/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random1_test.cpp +++ b/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random1_test.cpp @@ -135,7 +135,7 @@ int main(int argc, char* argv[]) { #ifndef CGAL_PCENTER_NO_OUTPUT - CGAL::set_pretty_mode(cerr); + CGAL::IO::set_pretty_mode(cerr); #endif // CGAL_PCENTER_NO_OUTPUT int number_of_points; diff --git a/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random2_test.cpp b/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random2_test.cpp index ff205e038ae..cd9378c9c79 100644 --- a/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random2_test.cpp +++ b/Bounding_volumes/test/Bounding_volumes/rectangular_p_center_2_random2_test.cpp @@ -137,7 +137,7 @@ int main(int argc, char* argv[]) { #ifndef CGAL_PCENTER_NO_OUTPUT - CGAL::set_pretty_mode(cerr); + CGAL::IO::set_pretty_mode(cerr); #endif // CGAL_PCENTER_NO_OUTPUT int number_of_points; diff --git a/Bounding_volumes/test/Bounding_volumes/test_Min_annulus_d.h b/Bounding_volumes/test/Bounding_volumes/test_Min_annulus_d.h index 0e32b0be687..a1b3c9e88e0 100644 --- a/Bounding_volumes/test/Bounding_volumes/test_Min_annulus_d.h +++ b/Bounding_volumes/test/Bounding_volumes/test_Min_annulus_d.h @@ -53,7 +53,7 @@ test_Min_annulus_d( ForwardIterator first, ForwardIterator last, CGAL::Verbose_ostream verr ( verbose >= 0); CGAL::Verbose_ostream verr0( verbose == 0); CGAL::Verbose_ostream verrX( verbose > 0); - CGAL::set_pretty_mode( verr.out()); + CGAL::IO::set_pretty_mode( verr.out()); bool is_valid_verbose = ( verbose > 0); diff --git a/Bounding_volumes/test/Bounding_volumes/test_Min_circle.cpp b/Bounding_volumes/test/Bounding_volumes/test_Min_circle.cpp index 4412a7a546f..01ce8cc429a 100644 --- a/Bounding_volumes/test/Bounding_volumes/test_Min_circle.cpp +++ b/Bounding_volumes/test/Bounding_volumes/test_Min_circle.cpp @@ -219,26 +219,26 @@ cover_Min_circle_2( bool verbose, const Traits&, const RT&) { verr << endl << " writing `test_Min_circle_2.ascii'..."; ofstream os( "test_Min_circle_2.ascii"); - CGAL::set_ascii_mode( os); + CGAL::IO::set_ascii_mode( os); os << mc; } { verr << endl << " writing `test_Min_circle_2.pretty'..."; ofstream os( "test_Min_circle_2.pretty"); - CGAL::set_pretty_mode( os); + CGAL::IO::set_pretty_mode( os); os << mc; } { verr << endl << " writing `test_Min_circle_2.binary'..."; ofstream os( "test_Min_circle_2.binary"); - CGAL::set_binary_mode( os); + CGAL::IO::set_binary_mode( os); os << mc; } { verr << endl << " reading `test_Min_circle_2.ascii'..."; Min_circle mc_in; ifstream is( "test_Min_circle_2.ascii"); - CGAL::set_ascii_mode( is); + CGAL::IO::set_ascii_mode( is); is >> mc_in; bool is_valid = mc_in.is_valid( verbose); assert( is_valid); diff --git a/Bounding_volumes/test/Bounding_volumes/test_Min_ellipse_2.cpp b/Bounding_volumes/test/Bounding_volumes/test_Min_ellipse_2.cpp index edfc855f158..535aa4674b1 100644 --- a/Bounding_volumes/test/Bounding_volumes/test_Min_ellipse_2.cpp +++ b/Bounding_volumes/test/Bounding_volumes/test_Min_ellipse_2.cpp @@ -412,26 +412,26 @@ cover_Min_ellipse_2( bool verbose, const Traits&, const RT&) { verr << endl << " writing `test_Min_ellipse_2.ascii'..."; ofstream os( "test_Min_ellipse_2.ascii"); - CGAL::set_ascii_mode( os); + CGAL::IO::set_ascii_mode( os); os << me; } { verr << endl << " writing `test_Min_ellipse_2.pretty'..."; ofstream os( "test_Min_ellipse_2.pretty"); - CGAL::set_pretty_mode( os); + CGAL::IO::set_pretty_mode( os); os << me; } { verr << endl << " writing `test_Min_ellipse_2.binary'..."; ofstream os( "test_Min_ellipse_2.binary"); - CGAL::set_binary_mode( os); + CGAL::IO::set_binary_mode( os); os << me; } { verr << endl << " reading `test_Min_ellipse_2.ascii'..."; Min_ellipse me_in; ifstream is( "test_Min_ellipse_2.ascii"); - CGAL::set_ascii_mode( is); + CGAL::IO::set_ascii_mode( is); is >> me_in; bool is_valid = me_in.is_valid( verbose); assert( is_valid); diff --git a/Box_intersection_d/include/CGAL/Box_intersection_d/Box_d.h b/Box_intersection_d/include/CGAL/Box_intersection_d/Box_d.h index a6326ed6cae..ddadb14852e 100644 --- a/Box_intersection_d/include/CGAL/Box_intersection_d/Box_d.h +++ b/Box_intersection_d/include/CGAL/Box_intersection_d/Box_d.h @@ -21,10 +21,10 @@ #include #include #include -#include #include #include +#include namespace CGAL { @@ -38,7 +38,7 @@ struct Unique_numbers { #ifdef CGAL_NO_ATOMIC static std::size_t n = 0; #else - static CGAL::cpp11::atomic n; // initialized to 0 + static std::atomic n; // initialized to 0 #endif i = n++; } diff --git a/CGAL_Core/include/CGAL/CORE/CoreDefs.h b/CGAL_Core/include/CGAL/CORE/CoreDefs.h index efeb46378cb..57c3da34645 100644 --- a/CGAL_Core/include/CGAL/CORE/CoreDefs.h +++ b/CGAL_Core/include/CGAL/CORE/CoreDefs.h @@ -29,9 +29,10 @@ #define _CORE_COREDEFS_H_ #include -#include #include +#include + #ifdef CGAL_HEADER_ONLY #define CGAL_GLOBAL_STATE_VAR(TYPE, NAME, VALUE) \ @@ -75,7 +76,7 @@ namespace CORE { #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(bool, AbortFlag, true) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, AbortFlag, true) +CGAL_GLOBAL_STATE_VAR(std::atomic, AbortFlag, true) #endif /// Invalid Flag -- initiallly value is non-negative @@ -86,7 +87,7 @@ CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, AbortFlag, true) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(int, InvalidFlag, 0) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, InvalidFlag, 0) +CGAL_GLOBAL_STATE_VAR(std::atomic, InvalidFlag, 0) #endif /// Escape Precision in bits @@ -102,7 +103,7 @@ CGAL_GLOBAL_STATE_VAR(long, EscapePrecFlag, 0) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(bool, EscapePrecWarning, true) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, EscapePrecWarning, true) +CGAL_GLOBAL_STATE_VAR(std::atomic, EscapePrecWarning, true) #endif // These following two values determine the precision of computing @@ -124,7 +125,7 @@ CGAL_GLOBAL_STATE_VAR(extLong, defAbsPrec, CORE_posInfty) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(long, defBigFloatOutputDigits, 10) #else - CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, defBigFloatOutputDigits, 10) + CGAL_GLOBAL_STATE_VAR(std::atomic, defBigFloatOutputDigits, 10) #endif /// default input precision in digits for converting a string to a Real or Expr @@ -138,7 +139,7 @@ CGAL_GLOBAL_STATE_VAR(extLong, defInputDigits, CORE_posInfty) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(long, defOutputDigits, 10) // == get_static_defBigFloatOutputDigits() #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, defOutputDigits, 10) // == get_static_defBigFloatOutputDigits() +CGAL_GLOBAL_STATE_VAR(std::atomic, defOutputDigits, 10) // == get_static_defBigFloatOutputDigits() #endif /// default input precision in digits for converting a string to a BigFloat @@ -146,7 +147,7 @@ CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, defOutputDigits, 10) // == get_ #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(long, defBigFloatInputDigits, 16) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, defBigFloatInputDigits, 16) +CGAL_GLOBAL_STATE_VAR(std::atomic, defBigFloatInputDigits, 16) #endif inline @@ -169,7 +170,7 @@ CGAL_GLOBAL_STATE_VAR(extLong, defBFsqrtAbsPrec, 54) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(bool, fpFilterFlag, true) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, fpFilterFlag, true) +CGAL_GLOBAL_STATE_VAR(std::atomic, fpFilterFlag, true) #endif @@ -177,7 +178,7 @@ CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, fpFilterFlag, true) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(bool, incrementalEvalFlag, true) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, incrementalEvalFlag, true) +CGAL_GLOBAL_STATE_VAR(std::atomic, incrementalEvalFlag, true) #endif @@ -185,7 +186,7 @@ CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, incrementalEvalFlag, true) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(bool, progressiveEvalFlag, true) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, progressiveEvalFlag, true) +CGAL_GLOBAL_STATE_VAR(std::atomic, progressiveEvalFlag, true) #endif @@ -193,14 +194,14 @@ CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, progressiveEvalFlag, true) #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(bool, rationalReduceFlag, false) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, rationalReduceFlag, false) +CGAL_GLOBAL_STATE_VAR(std::atomic, rationalReduceFlag, false) #endif /// default initial (bit) precision for AddSub Progressive Evaluation #ifdef CGAL_NO_ATOMIC CGAL_GLOBAL_STATE_VAR(long, defInitialProgressivePrec, 64) #else -CGAL_GLOBAL_STATE_VAR(CGAL::cpp11::atomic, defInitialProgressivePrec, 64) +CGAL_GLOBAL_STATE_VAR(std::atomic, defInitialProgressivePrec, 64) #endif ////////////////////////////////////////////////////////////// diff --git a/CGAL_Core/include/CGAL/CORE/CoreDefs_impl.h b/CGAL_Core/include/CGAL/CORE/CoreDefs_impl.h index b7436178b0a..d28326496f3 100644 --- a/CGAL_Core/include/CGAL/CORE/CoreDefs_impl.h +++ b/CGAL_Core/include/CGAL/CORE/CoreDefs_impl.h @@ -24,6 +24,8 @@ #include "CGAL/CORE/CoreDefs.h" +#include + namespace CORE { // Default Values @@ -50,7 +52,7 @@ int IOErrorFlag = 0; #ifdef CGAL_NO_ATOMIC bool AbortFlag = true; #else -CGAL::cpp11::atomic AbortFlag(true); +std::atomic AbortFlag(true); #endif /** @@ -61,7 +63,7 @@ CGAL::cpp11::atomic AbortFlag(true); #ifdef CGAL_NO_ATOMIC int InvalidFlag = 0; #else -CGAL::cpp11::atomic InvalidFlag(0); +std::atomic InvalidFlag(0); #endif /* ************************************************************ @@ -97,7 +99,7 @@ long EscapePrecFlag = 0; #ifdef CGAL_NO_ATOMIC bool EscapePrecWarning = true; #else -CGAL::cpp11::atomic EscapePrecWarning(true); +std::atomic EscapePrecWarning(true); #endif /** The Composite Precision [defAbsPrec, defRelPrec] @@ -117,7 +119,7 @@ extLong defRelPrec = 60; #ifdef CGAL_NO_ATOMIC long defBigFloatOutputDigits = 10; #else -CGAL::cpp11::atomic defBigFloatOutputDigits(10); +std::atomic defBigFloatOutputDigits(10); #endif /** NORMALLY, we like to make this equal to defBigFloatOutputDigits @@ -125,7 +127,7 @@ CGAL::cpp11::atomic defBigFloatOutputDigits(10); #ifdef CGAL_NO_ATOMIC long defOutputDigits = 10; #else -CGAL::cpp11::atomic defOutputDigits(10); // == defBigFloatOutputDigits; +std::atomic defOutputDigits(10); // == defBigFloatOutputDigits; #endif /** String Input Precision */ @@ -142,7 +144,7 @@ extLong defInputDigits = CORE_posInfty; #ifdef CGAL_NO_ATOMIC long defBigFloatInputDigits = 16; #else -CGAL::cpp11::atomic defBigFloatInputDigits(16); +std::atomic defBigFloatInputDigits(16); #endif /* ************************************************************ @@ -154,7 +156,7 @@ CGAL::cpp11::atomic defBigFloatInputDigits(16); #ifdef CGAL_NO_ATOMIC bool fpFilterFlag = true; #else -CGAL::cpp11::atomic fpFilterFlag(true); +std::atomic fpFilterFlag(true); #endif /** IncrementaL evaluation flag @@ -163,7 +165,7 @@ CGAL::cpp11::atomic fpFilterFlag(true); #ifdef CGAL_NO_ATOMIC bool incrementalEvalFlag = true; #else -CGAL::cpp11::atomic incrementalEvalFlag(true); +std::atomic incrementalEvalFlag(true); #endif /** Progressive evaluation flag @@ -171,7 +173,7 @@ CGAL::cpp11::atomic incrementalEvalFlag(true); #ifdef CGAL_NO_ATOMIC bool progressiveEvalFlag = true; #else -CGAL::cpp11::atomic progressiveEvalFlag(true); +std::atomic progressiveEvalFlag(true); #endif /** Initial progressive evaluation precision @@ -179,7 +181,7 @@ CGAL::cpp11::atomic progressiveEvalFlag(true); #ifdef CGAL_NO_ATOMIC long defInitialProgressivePrec = 64; #else -CGAL::cpp11::atomic defInitialProgressivePrec(64); +std::atomic defInitialProgressivePrec(64); #endif /** RATIONAL REDUCTION FLAG @@ -187,7 +189,7 @@ CGAL::cpp11::atomic defInitialProgressivePrec(64); #ifdef CGAL_NO_ATOMIC bool rationalReduceFlag = false; #else -CGAL::cpp11::atomic rationalReduceFlag(false); +std::atomic rationalReduceFlag(false); #endif #endif // CGAL_HEADER_ONLY diff --git a/CGAL_ImageIO/include/CGAL/IO/read_vtk_image_data.h b/CGAL_ImageIO/include/CGAL/IO/read_vtk_image_data.h new file mode 100644 index 00000000000..ccce66f3ca6 --- /dev/null +++ b/CGAL_ImageIO/include/CGAL/IO/read_vtk_image_data.h @@ -0,0 +1,108 @@ +// Copyright (c) 2005-2008 INRIA Sophia-Antipolis (France). +// 2008 GeometryFactory +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Laurent Rineau, Pierre Alliez + +#ifndef CGAL_IO_READ_VTK_IMAGE_DATA_H +#define CGAL_IO_READ_VTK_IMAGE_DATA_H + +#include +#include + +namespace CGAL { + +namespace { + +struct VTK_to_ImageIO_type_mapper { + WORD_KIND wordKind; + SIGN sign; + unsigned int wdim; +}; + +static const VTK_to_ImageIO_type_mapper VTK_to_ImageIO_type[VTK_ID_TYPE] = + { { WK_UNKNOWN, SGN_UNKNOWN, 0}, // 0=VTK_VOID + { WK_UNKNOWN, SGN_UNKNOWN, 0}, // 1=VTK_BIT + { WK_FIXED, SGN_SIGNED, 1}, // 2=VTK_CHAR + { WK_FIXED, SGN_UNSIGNED, 1}, // 3=VTK_UNSIGNED_CHAR + { WK_FIXED, SGN_SIGNED, 2}, // 4=VTK_SHORT + { WK_FIXED, SGN_UNSIGNED, 2}, // 5=VTK_UNSIGNED_SHORT + { WK_FIXED, SGN_SIGNED, 4}, // 6=VTK_INT + { WK_FIXED, SGN_UNSIGNED, 4}, // 7=VTK_UNSIGNED_INT + { WK_FIXED, SGN_SIGNED, 8}, // 8=VTK_LONG + { WK_FIXED, SGN_UNSIGNED, 8}, // 9=VTK_UNSIGNED_LONG + { WK_FLOAT, SGN_SIGNED, 4}, // 10=VTK_FLOAT + { WK_FIXED, SGN_SIGNED, 8} // 11=VTK_DOUBLE + }; + +} //end anonymous namespace + +namespace IO { + +inline +Image_3 +read_vtk_image_data(vtkImageData* vtk_image, Image_3::Own owning = Image_3::OWN_THE_DATA) +{ + if(!vtk_image) + return Image_3(); + + _image* image = ::_initImage(); + const int* dims = vtk_image->GetDimensions(); + const double* spacing = vtk_image->GetSpacing(); + const double* offset = vtk_image->GetOrigin(); + image->vectMode = VM_SCALAR; + image->xdim = dims[0]; + image->ydim = dims[1]; + image->zdim = dims[2]; + image->vdim = 1; + image->vx = (spacing[0] == 0) ? 1 : spacing[0]; + image->vy = (spacing[1] == 0) ? 1 : spacing[1]; + image->vz = (spacing[2] == 0) ? 1 : spacing[2]; + image->tx = static_cast(offset[0]); + image->ty = static_cast(offset[1]); + image->tz = static_cast(offset[2]); + image->endianness = ::_getEndianness(); + int vtk_type = vtk_image->GetScalarType(); + if(vtk_type == VTK_SIGNED_CHAR) vtk_type = VTK_CHAR; + if(vtk_type < 0 || vtk_type > VTK_DOUBLE) + vtk_type = VTK_DOUBLE; + const VTK_to_ImageIO_type_mapper& imageio_type = + VTK_to_ImageIO_type[vtk_type]; + image->wdim = imageio_type.wdim; + image->wordKind = imageio_type.wordKind; + image->sign = imageio_type.sign; + if (!vtk_image->GetPointData() || !vtk_image->GetPointData()->GetScalars()) { + ::_freeImage(image); + return Image_3(); + } + CGAL_assertion(vtk_image->GetPointData()->GetScalars()->GetNumberOfTuples() == dims[0]*dims[1]*dims[2]); + if(owning == Image_3::OWN_THE_DATA) { + image->data = ::ImageIO_alloc(dims[0]*dims[1]*dims[2]*image->wdim); + // std::cerr << "GetNumberOfTuples()=" << vtk_image->GetPointData()->GetScalars()->GetNumberOfTuples() + // << "\nimage->size()=" << dims[0]*dims[1]*dims[2] + // << "\nwdim=" << image->wdim << '\n'; + vtk_image->GetPointData()->GetScalars()->ExportToVoidPointer(image->data); + } else { + image->data = vtk_image->GetPointData()->GetScalars()->GetVoidPointer(0); + } + + return Image_3(image, owning); +} + +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::read_vtk_image_data; +#endif + +} // namespace CGAL + + +#endif // CGAL_IO_READ_VTK_IMAGE_DATA_H diff --git a/CGAL_ImageIO/include/CGAL/Image_3.h b/CGAL_ImageIO/include/CGAL/Image_3.h index 4197574199e..8ede8eefec5 100644 --- a/CGAL_ImageIO/include/CGAL/Image_3.h +++ b/CGAL_ImageIO/include/CGAL/Image_3.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include @@ -81,7 +81,7 @@ class CGAL_IMAGEIO_EXPORT Image_3 public: enum Own { OWN_THE_DATA, DO_NOT_OWN_THE_DATA }; - typedef boost::shared_ptr<_image> Image_shared_ptr; + typedef std::shared_ptr<_image> Image_shared_ptr; typedef Image_shared_ptr Pointer; protected: diff --git a/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h b/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h index 527b7ba973e..78f6586325f 100644 --- a/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h +++ b/CGAL_ImageIO/include/CGAL/read_vtk_image_data.h @@ -14,87 +14,12 @@ #ifndef CGAL_READ_VTK_IMAGE_DATA_H #define CGAL_READ_VTK_IMAGE_DATA_H -#include -#include - -namespace CGAL { - -namespace { - -struct VTK_to_ImageIO_type_mapper { - WORD_KIND wordKind; - SIGN sign; - unsigned int wdim; -}; - -static const VTK_to_ImageIO_type_mapper VTK_to_ImageIO_type[VTK_ID_TYPE] = - { { WK_UNKNOWN, SGN_UNKNOWN, 0}, // 0=VTK_VOID - { WK_UNKNOWN, SGN_UNKNOWN, 0}, // 1=VTK_BIT - { WK_FIXED, SGN_SIGNED, 1}, // 2=VTK_CHAR - { WK_FIXED, SGN_UNSIGNED, 1}, // 3=VTK_UNSIGNED_CHAR - { WK_FIXED, SGN_SIGNED, 2}, // 4=VTK_SHORT - { WK_FIXED, SGN_UNSIGNED, 2}, // 5=VTK_UNSIGNED_SHORT - { WK_FIXED, SGN_SIGNED, 4}, // 6=VTK_INT - { WK_FIXED, SGN_UNSIGNED, 4}, // 7=VTK_UNSIGNED_INT - { WK_FIXED, SGN_SIGNED, 8}, // 8=VTK_LONG - { WK_FIXED, SGN_UNSIGNED, 8}, // 9=VTK_UNSIGNED_LONG - { WK_FLOAT, SGN_SIGNED, 4}, // 10=VTK_FLOAT - { WK_FIXED, SGN_SIGNED, 8} // 11=VTK_DOUBLE - }; - -} //end anonymous namespace - -inline -Image_3 -read_vtk_image_data(vtkImageData* vtk_image, Image_3::Own owning = Image_3::OWN_THE_DATA) -{ - if(!vtk_image) - return Image_3(); - - _image* image = ::_initImage(); - const int* dims = vtk_image->GetDimensions(); - const double* spacing = vtk_image->GetSpacing(); - const double* offset = vtk_image->GetOrigin(); - image->vectMode = VM_SCALAR; - image->xdim = dims[0]; - image->ydim = dims[1]; - image->zdim = dims[2]; - image->vdim = 1; - image->vx = (spacing[0] == 0) ? 1 : spacing[0]; - image->vy = (spacing[1] == 0) ? 1 : spacing[1]; - image->vz = (spacing[2] == 0) ? 1 : spacing[2]; - image->tx = static_cast(offset[0]); - image->ty = static_cast(offset[1]); - image->tz = static_cast(offset[2]); - image->endianness = ::_getEndianness(); - int vtk_type = vtk_image->GetScalarType(); - if(vtk_type == VTK_SIGNED_CHAR) vtk_type = VTK_CHAR; - if(vtk_type < 0 || vtk_type > VTK_DOUBLE) - vtk_type = VTK_DOUBLE; - const VTK_to_ImageIO_type_mapper& imageio_type = - VTK_to_ImageIO_type[vtk_type]; - image->wdim = imageio_type.wdim; - image->wordKind = imageio_type.wordKind; - image->sign = imageio_type.sign; - if (!vtk_image->GetPointData() || !vtk_image->GetPointData()->GetScalars()) { - ::_freeImage(image); - return Image_3(); - } - CGAL_assertion(vtk_image->GetPointData()->GetScalars()->GetNumberOfTuples() == dims[0]*dims[1]*dims[2]); - if(owning == Image_3::OWN_THE_DATA) { - image->data = ::ImageIO_alloc(dims[0]*dims[1]*dims[2]*image->wdim); - // std::cerr << "GetNumberOfTuples()=" << vtk_image->GetPointData()->GetScalars()->GetNumberOfTuples() - // << "\nimage->size()=" << dims[0]*dims[1]*dims[2] - // << "\nwdim=" << image->wdim << '\n'; - vtk_image->GetPointData()->GetScalars()->ExportToVoidPointer(image->data); - } else { - image->data = vtk_image->GetPointData()->GetScalars()->GetVoidPointer(0); - } - - return Image_3(image, owning); -} - -} // namespace CGAL +#ifndef CGAL_NO_DEPRECATED_CODE +#include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_REPLACEMENT_HEADER "" +#include +#endif #endif // CGAL_READ_VTK_IMAGE_DATA_H diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_2.h b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_2.h index bb646e29e66..16395549ab3 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_2.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_2.h @@ -165,6 +165,11 @@ public: bool is_even() const { return this->Ptr()->is_even(); } bool is_odd() const { return ! (this->Ptr()->is_even()); } + bool is_translation() const { return this->Ptr()->is_translation(); } + bool is_scaling() const { return this->Ptr()->is_scaling(); } + bool is_reflection() const { return this->Ptr()->is_reflection(); } + bool is_rotation() const { return this->Ptr()->is_rotation(); } + FT cartesian(int i, int j) const { return this->Ptr()->cartesian(i,j); } FT homogeneous(int i, int j) const { return cartesian(i,j); } FT m(int i, int j) const { return cartesian(i,j); } diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_3.h b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_3.h index 7a04f837092..d696e1917a3 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_3.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_3.h @@ -143,14 +143,7 @@ public: Plane_3 transform(const Plane_3& p) const - { - if (is_even()) - return Plane_3(transform(p.point()), - transpose().inverse().transform(p.orthogonal_direction())); - else - return Plane_3(transform(p.point()), - - transpose().inverse().transform(p.orthogonal_direction())); - } + { return this->Ptr()->transform(p); } Plane_3 operator()(const Plane_3& p) const @@ -161,6 +154,10 @@ public: bool is_even() const { return this->Ptr()->is_even(); } bool is_odd() const { return ! (this->Ptr()->is_even()); } + bool is_translation() const { return this->Ptr()->is_translation(); } + bool is_scaling() const { return this->Ptr()->is_scaling(); } + + FT cartesian(int i, int j) const { return this->Ptr()->cartesian(i,j); } FT homogeneous(int i, int j) const { return cartesian(i,j); } FT m(int i, int j) const { return cartesian(i,j); } diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_2.h b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_2.h index 4737742e568..afce7dc25ed 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_2.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_2.h @@ -60,6 +60,11 @@ public: virtual Aff_transformation_2 inverse() const = 0; virtual bool is_even() const = 0; + virtual bool is_translation() const { return false; } + virtual bool is_scaling() const { return false; } + virtual bool is_rotation() const { return false; } + virtual bool is_reflection() const { return false; } + virtual FT cartesian(int i, int j) const = 0; virtual std::ostream &print(std::ostream &os) const = 0; }; diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_3.h b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_3.h index 406cb7accca..2e441e194d3 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_3.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Aff_transformation_rep_3.h @@ -31,6 +31,7 @@ public: typedef typename R::Point_3 Point_3; typedef typename R::Vector_3 Vector_3; typedef typename R::Direction_3 Direction_3; + typedef typename R::Plane_3 Plane_3; typedef typename R::Aff_transformation_3 Aff_transformation_3; virtual ~Aff_transformation_rep_baseC3(){} @@ -38,6 +39,7 @@ public: virtual Point_3 transform(const Point_3 &p) const = 0; virtual Vector_3 transform(const Vector_3 &v) const = 0; virtual Direction_3 transform(const Direction_3 &d) const = 0; + virtual Plane_3 transform(const Plane_3& p) const = 0; virtual Aff_transformation_3 operator*( const Aff_transformation_rep_baseC3 &t) const = 0; @@ -54,6 +56,9 @@ public: virtual Aff_transformation_3 inverse() const = 0; virtual Aff_transformation_3 transpose() const = 0; virtual bool is_even() const = 0; + + virtual bool is_translation() const { return false; } + virtual bool is_scaling() const { return false; } virtual FT cartesian(int i, int j) const = 0; virtual std::ostream &print(std::ostream &os) const = 0; }; @@ -75,6 +80,7 @@ public: typedef typename Transformation_base_3::Point_3 Point_3; typedef typename Transformation_base_3::Vector_3 Vector_3; typedef typename Transformation_base_3::Direction_3 Direction_3; + typedef typename Transformation_base_3::Plane_3 Plane_3; typedef typename Transformation_base_3:: Aff_transformation_3 Aff_transformation_3; @@ -127,6 +133,17 @@ public: t31 * v.x() + t32 * v.y() + t33 * v.z()); } + virtual Plane_3 transform(const Plane_3& p) const + { + if (is_even()) + return Plane_3(transform(p.point()), + transpose().inverse().transform(p.orthogonal_direction())); + else + return Plane_3(transform(p.point()), + - transpose().inverse().transform(p.orthogonal_direction())); + } + + // Note that Aff_transformation is not defined yet, // so the following 6 functions have to be implemented // outside class body @@ -144,6 +161,7 @@ public: t31, t32, t33) == POSITIVE; } + virtual FT cartesian(int i, int j) const { switch (i) diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Reflection_rep_2.h b/Cartesian_kernel/include/CGAL/Cartesian/Reflection_rep_2.h index b534706373e..7a89746ffba 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Reflection_rep_2.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Reflection_rep_2.h @@ -147,6 +147,11 @@ typedef typename CGAL::Line_2 Line_2; return true; } + virtual bool is_reflection() const + { + return true; + } + FT cartesian(int i, int j) const { switch (i) diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Rotation_rep_2.h b/Cartesian_kernel/include/CGAL/Cartesian/Rotation_rep_2.h index 092ff614195..2ea097c733b 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Rotation_rep_2.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Rotation_rep_2.h @@ -139,11 +139,17 @@ public: -sinus_*t.t21 + cosinus_*t.t22, t.t23); } + bool is_even() const { return true; } + bool is_rotation() const + { + return true; + } + FT cartesian(int i, int j) const { switch (i) diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_2.h b/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_2.h index dc0b74f5905..166fa4e1a53 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_2.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_2.h @@ -120,6 +120,11 @@ public: return true; } + bool is_scaling() const + { + return true; + } + FT cartesian(int i, int j) const { if (i!=j) return FT(0); diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_3.h b/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_3.h index 061f1806a9e..a6b26320a8e 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_3.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Scaling_rep_3.h @@ -34,6 +34,7 @@ public: typedef typename Transformation_base_3::Point_3 Point_3; typedef typename Transformation_base_3::Vector_3 Vector_3; typedef typename Transformation_base_3::Direction_3 Direction_3; + typedef typename Transformation_base_3::Plane_3 Plane_3; typedef typename Transformation_base_3::Aff_transformation_3 Aff_transformation_3; @@ -59,6 +60,12 @@ public: return d; } + virtual Plane_3 transform(const Plane_3 &p) const + { + // direction ( which is (p.a(), p.b(), p.c())) does not change + return Plane_3(p.a(),p.b(),p.c(), p.d()*scalefactor_); + } + virtual Aff_transformation_3 operator*(const Transformation_base_3 &t) const { return t.compose(*this); @@ -121,6 +128,11 @@ public: return true; } + virtual bool is_scaling() const + { + return true; + } + virtual FT cartesian(int i, int j) const { if (i!=j) return FT(0); diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_2.h b/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_2.h index 55e3b14fbc1..84b88ba46c5 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_2.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_2.h @@ -121,7 +121,12 @@ public: return Aff_transformation_2(TRANSLATION, - translationvector_); } - bool is_even() const + bool is_even() const + { + return true; + } + + virtual bool is_translation() const { return true; } diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_3.h b/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_3.h index 6377c1a3d8a..28a1d4ef811 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_3.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Translation_rep_3.h @@ -34,6 +34,7 @@ public: typedef typename Transformation_base_3::Point_3 Point_3; typedef typename Transformation_base_3::Vector_3 Vector_3; typedef typename Transformation_base_3::Direction_3 Direction_3; + typedef typename Transformation_base_3::Plane_3 Plane_3; typedef typename Transformation_base_3::Aff_transformation_3 Aff_transformation_3; @@ -56,6 +57,15 @@ public: return d; } + virtual Plane_3 transform(const Plane_3 &p) const + { + // direction ( which is (p.a(), p.b(), p.c())) does not change + return Plane_3(p.a(), + p.b(), + p.c(), + p.d() - ( p.a()*translationvector_.x() + p.b()*translationvector_.y() + p.c()*translationvector_.z())); + } + virtual Aff_transformation_3 operator*(const Transformation_base_3 &t) const { return t.compose(*this); @@ -125,6 +135,11 @@ public: return true; } + virtual bool is_translation() const + { + return true; + } + virtual FT cartesian(int i, int j) const { if (j==i) return FT(1); diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_2.h b/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_2.h index db5e9f1b98e..3e584ea9830 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_2.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_2.h @@ -79,7 +79,7 @@ template < class R_ > std::ostream & operator<<(std::ostream &os, const Weighted_pointC2 &p) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.point() << " " << p.weight(); @@ -100,7 +100,7 @@ operator>>(std::istream &is, Weighted_pointC2 &wp) typename Weighted_pointC2::Point_2 p; is >> p; if(!is) return is; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> w; else read(is, w); diff --git a/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_3.h b/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_3.h index 295686a3ac8..c1309fde4d8 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_3.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/Weighted_point_3.h @@ -79,7 +79,7 @@ template < class R_ > std::ostream & operator<<(std::ostream &os, const Weighted_pointC3 &p) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.point() << " " << p.weight(); @@ -100,7 +100,7 @@ operator>>(std::istream &is, Weighted_pointC3 &wp) typename Weighted_pointC3::Point_3 p; is >> p; if(!is) return is; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> w; else read(is, w); diff --git a/Cartesian_kernel/include/CGAL/Cartesian/function_objects.h b/Cartesian_kernel/include/CGAL/Cartesian/function_objects.h index a7bae3d6e2f..7bc920bd961 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/function_objects.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/function_objects.h @@ -253,18 +253,18 @@ namespace CartesianKernelFunctors { result_type operator()( const Tetrahedron_3& t, const Point_3& p) const { - FT alpha, beta, gamma; + FT alpha, beta, gamma, denom; Cartesian_internal::solve(t.vertex(1)-t.vertex(0), t.vertex(2)-t.vertex(0), t.vertex(3)-t.vertex(0), - p - t.vertex(0), alpha, beta, gamma); + p - t.vertex(0), alpha, beta, gamma, denom); if ( (alpha < 0) || (beta < 0) || (gamma < 0) - || (alpha + beta + gamma > 1) ) + || (alpha + beta + gamma > denom) ) return ON_UNBOUNDED_SIDE; if ( (alpha == 0) || (beta == 0) || (gamma == 0) - || (alpha+beta+gamma == 1) ) + || (alpha+beta+gamma == denom) ) return ON_BOUNDARY; return ON_BOUNDED_SIDE; @@ -3860,10 +3860,10 @@ namespace CartesianKernelFunctors { v1 = t.vertex(1)-o, v2 = t.vertex(2)-o; - FT alpha, beta, gamma; - Cartesian_internal::solve(v0, v1, v2, p-o, alpha, beta, gamma); + FT alpha, beta, gamma, denum; + Cartesian_internal::solve(v0, v1, v2, p-o, alpha, beta, gamma, denum); return (alpha >= FT(0)) && (beta >= FT(0)) && (gamma >= FT(0)) - && ((alpha+beta+gamma == FT(1))); + && ((alpha+beta+gamma == denum)); } result_type diff --git a/Cartesian_kernel/include/CGAL/Cartesian/solve_3.h b/Cartesian_kernel/include/CGAL/Cartesian/solve_3.h index 2c9137f1596..b6ec10bb023 100644 --- a/Cartesian_kernel/include/CGAL/Cartesian/solve_3.h +++ b/Cartesian_kernel/include/CGAL/Cartesian/solve_3.h @@ -24,6 +24,20 @@ namespace CGAL { namespace Cartesian_internal { +template +void solve (const VectorC3 &v0, + const VectorC3 &v1, + const VectorC3 &v2, + const VectorC3 &d, + typename R::FT &alpha, typename R::FT &beta, typename R::FT &gamma, typename R::FT &denom) +{ + CGAL::solve(v0.x(), v0.y(), v0.z(), + v1.x(), v1.y(), v1.z(), + v2.x(), v2.y(), v2.z(), + d.x(), d.y(), d.z(), + alpha, beta, gamma, denom); +} + template void solve (const VectorC3 &v0, const VectorC3 &v1, @@ -32,10 +46,10 @@ void solve (const VectorC3 &v0, typename R::FT &alpha, typename R::FT &beta, typename R::FT &gamma) { CGAL::solve(v0.x(), v0.y(), v0.z(), - v1.x(), v1.y(), v1.z(), - v2.x(), v2.y(), v2.z(), - d.x(), d.y(), d.z(), - alpha, beta, gamma); + v1.x(), v1.y(), v1.z(), + v2.x(), v2.y(), v2.z(), + d.x(), d.y(), d.z(), + alpha, beta, gamma); } } // namespace Cartesian_internal diff --git a/Circular_kernel_2/include/CGAL/IO/Dxf_reader.h b/Circular_kernel_2/include/CGAL/IO/Dxf_reader.h index e72a21197dc..bf00857272b 100644 --- a/Circular_kernel_2/include/CGAL/IO/Dxf_reader.h +++ b/Circular_kernel_2/include/CGAL/IO/Dxf_reader.h @@ -120,13 +120,13 @@ private: is >> n; CGAL_assertion(n == 10); - is >> iformat(cx); + is >> IO::iformat(cx); is >> n; CGAL_assertion(n == 20); - is >> iformat(cy); + is >> IO::iformat(cy); is >> n; CGAL_assertion(n == 40); - is >> iformat(r); + is >> IO::iformat(r); FT sqr_ft(r*r); circ = typename K::Construct_circle_2()(Point_2(cx,cy), sqr_ft); } @@ -144,13 +144,13 @@ private: is >> n; CGAL_assertion(n == 10); - is >> iformat(cx); + is >> IO::iformat(cx); is >> n; CGAL_assertion(n == 20); - is >> iformat(cy); + is >> IO::iformat(cy); is >> n; CGAL_assertion(n == 40); - is >> iformat(r); + is >> IO::iformat(r); center = typename K::Construct_point_2()(cx,cy); rft = FT(r); // intentionally not squared @@ -181,10 +181,10 @@ read_polygon(std::istream& is, Polygon& poly) CGAL_assertion(n == 0); is >> n; CGAL_assertion(n == 10); - is >> iformat(x); + is >> IO::iformat(x); is >> n; CGAL_assertion(n == 20); - is >> iformat(y); + is >> IO::iformat(y); is >> n; len = 0; if(n == 42){ diff --git a/Circular_kernel_2/include/CGAL/IO/Dxf_reader_doubles.h b/Circular_kernel_2/include/CGAL/IO/Dxf_reader_doubles.h index df8895e6b33..4da1adc4c96 100644 --- a/Circular_kernel_2/include/CGAL/IO/Dxf_reader_doubles.h +++ b/Circular_kernel_2/include/CGAL/IO/Dxf_reader_doubles.h @@ -124,13 +124,13 @@ private: is >> n; CGAL_assertion(n == 10); - is >> iformat(cx); + is >> IO::iformat(cx); is >> n; CGAL_assertion(n == 20); - is >> iformat(cy); + is >> IO::iformat(cy); is >> n; CGAL_assertion(n == 40); - is >> iformat(r); + is >> IO::iformat(r); FT sqr_ft(r*r); circ = CGAL::make_array(cx,cy,sqr_ft); } @@ -160,10 +160,10 @@ read_polygon(std::istream& is, Polygon& poly) CGAL_assertion(n == 0); is >> n; CGAL_assertion(n == 10); - is >> iformat(x); + is >> IO::iformat(x); is >> n; CGAL_assertion(n == 20); - is >> iformat(y); + is >> IO::iformat(y); is >> n; len = 0; if(n == 42){ diff --git a/Classification/examples/Classification/example_classification.cpp b/Classification/examples/Classification/example_classification.cpp index 4ccad1912eb..7c1424a9fd1 100644 --- a/Classification/examples/Classification/example_classification.cpp +++ b/Classification/examples/Classification/example_classification.cpp @@ -52,9 +52,9 @@ int main (int argc, char** argv) std::cerr << "Reading input" << std::endl; std::vector pts; - if (!(CGAL::read_points(filename, std::back_inserter(pts), - // the PLY reader expects a binary file by default - CGAL::parameters::use_binary_mode(false)))) + if (!(CGAL::IO::read_points(filename, std::back_inserter(pts), + // the PLY reader expects a binary file by default + CGAL::parameters::use_binary_mode(false)))) { std::cerr << "Error: cannot read " << filename << std::endl; return EXIT_FAILURE; @@ -107,10 +107,10 @@ int main (int argc, char** argv) Label_handle ground = labels.add ("ground"); // Init name and color - Label_handle vegetation = labels.add ("vegetation", CGAL::Color(0,255,0)); + Label_handle vegetation = labels.add ("vegetation", CGAL::IO::Color(0,255,0)); // Init name, Color and standard index (here, ASPRS building index) - Label_handle roof = labels.add ("roof", CGAL::Color (255, 0, 0), 6); + Label_handle roof = labels.add ("roof", CGAL::IO::Color (255, 0, 0), 6); //! [Labels] /////////////////////////////////////////////////////////////////// @@ -211,7 +211,7 @@ int main (int argc, char** argv) std::ofstream f ("classification.ply"); - CGAL::write_PLY_with_properties + CGAL::IO::write_PLY_with_properties (f, CGAL::make_range (boost::counting_iterator(0), boost::counting_iterator(pts.size())), CGAL::make_ply_point_writer (CGAL::make_property_map(pts)), diff --git a/Classification/examples/Classification/example_cluster_classification.cpp b/Classification/examples/Classification/example_cluster_classification.cpp index ea11160b881..b044324fc0e 100644 --- a/Classification/examples/Classification/example_cluster_classification.cpp +++ b/Classification/examples/Classification/example_cluster_classification.cpp @@ -58,9 +58,9 @@ int main (int argc, char** argv) std::cerr << "Reading input" << std::endl; Point_set pts; - if(!(CGAL::read_point_set(filename, pts, - // the PLY reader expects a binary file by default - CGAL::parameters::use_binary_mode(true)))) + if(!(CGAL::IO::read_point_set(filename, pts, + // the PLY reader expects a binary file by default + CGAL::parameters::use_binary_mode(true)))) { std::cerr << "Error: cannot read " << filename << std::endl; return EXIT_FAILURE; diff --git a/Classification/examples/Classification/example_ethz_random_forest.cpp b/Classification/examples/Classification/example_ethz_random_forest.cpp index b0333f58ec4..cfb33d8c2b4 100644 --- a/Classification/examples/Classification/example_ethz_random_forest.cpp +++ b/Classification/examples/Classification/example_ethz_random_forest.cpp @@ -129,7 +129,7 @@ int main (int argc, char** argv) label_map[i] = label_indices[i]; // update label map with computed classification Label_handle label = labels[label_indices[i]]; - const CGAL::Color& color = label->color(); + const CGAL::IO::Color& color = label->color(); red[i] = color.red(); green[i] = color.green(); blue[i] = color.blue(); diff --git a/Classification/examples/Classification/example_feature.cpp b/Classification/examples/Classification/example_feature.cpp index f20ec6661b9..3c39407d41a 100644 --- a/Classification/examples/Classification/example_feature.cpp +++ b/Classification/examples/Classification/example_feature.cpp @@ -70,9 +70,9 @@ int main (int argc, char** argv) std::vector pts; std::cerr << "Reading input" << std::endl; - if (!(CGAL::read_points(filename, std::back_inserter(pts), - // the PLY reader expects a binary file by default - CGAL::parameters::use_binary_mode(false)))) + if (!(CGAL::IO::read_points(filename, std::back_inserter(pts), + // the PLY reader expects a binary file by default + CGAL::parameters::use_binary_mode(false)))) { std::cerr << "Error: cannot read " << filename << std::endl; return EXIT_FAILURE; diff --git a/Classification/examples/Classification/example_mesh_classification.cpp b/Classification/examples/Classification/example_mesh_classification.cpp index 226bd23ad72..104236d5495 100644 --- a/Classification/examples/Classification/example_mesh_classification.cpp +++ b/Classification/examples/Classification/example_mesh_classification.cpp @@ -40,9 +40,9 @@ int main (int argc, char** argv) filename_config = argv[2]; Mesh mesh; - if(!CGAL::read_polygon_mesh(filename, mesh, - // the PLY reader expects a binary file by default - CGAL::parameters::use_binary_mode(false))) + if(!CGAL::IO::read_polygon_mesh(filename, mesh, + // the PLY reader expects a binary file by default + CGAL::parameters::use_binary_mode(false))) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Classification/examples/Classification/example_opencv_random_forest.cpp b/Classification/examples/Classification/example_opencv_random_forest.cpp index 52a6bbaa379..2a73d846685 100644 --- a/Classification/examples/Classification/example_opencv_random_forest.cpp +++ b/Classification/examples/Classification/example_opencv_random_forest.cpp @@ -121,7 +121,7 @@ int main (int argc, char** argv) label_map[i] = label_indices[i]; // update label map with computed classification Label_handle label = labels[label_indices[i]]; - const CGAL::Color& color = label->color(); + const CGAL::IO::Color& color = label->color(); red[i] = color.red(); green[i] = color.green(); blue[i] = color.blue(); diff --git a/Classification/examples/Classification/gis_tutorial_example.cpp b/Classification/examples/Classification/gis_tutorial_example.cpp index 996ec59ea9e..fe90c423415 100644 --- a/Classification/examples/Classification/gis_tutorial_example.cpp +++ b/Classification/examples/Classification/gis_tutorial_example.cpp @@ -217,8 +217,8 @@ int main (int argc, char** argv) Mesh dsm_mesh; CGAL::copy_face_graph (dsm, dsm_mesh); std::ofstream dsm_ofile ("dsm.ply", std::ios_base::binary); - CGAL::set_binary_mode (dsm_ofile); - CGAL::write_PLY (dsm_ofile, dsm_mesh); + CGAL::IO::set_binary_mode (dsm_ofile); + CGAL::IO::write_PLY (dsm_ofile, dsm_mesh); dsm_ofile.close(); //! [Save DSM] @@ -300,8 +300,8 @@ int main (int argc, char** argv) Mesh tin_colored_mesh; - Mesh::Property_map - color_map = tin_colored_mesh.add_property_map("f:color").first; + Mesh::Property_map + color_map = tin_colored_mesh.add_property_map("f:color").first; CGAL::copy_face_graph (tin_with_info, tin_colored_mesh, CGAL::parameters::face_to_face_output_iterator @@ -310,20 +310,20 @@ int main (int argc, char** argv) { // Color unassigned faces gray if (ff.first->info() < 0) - color_map[ff.second] = CGAL::Color(128, 128, 128); + color_map[ff.second] = CGAL::IO::Color(128, 128, 128); else { // Random color seeded by the component ID CGAL::Random r (ff.first->info()); - color_map[ff.second] = CGAL::Color (r.get_int(64, 192), + color_map[ff.second] = CGAL::IO::Color (r.get_int(64, 192), r.get_int(64, 192), r.get_int(64, 192)); } }))); std::ofstream tin_colored_ofile ("colored_tin.ply", std::ios_base::binary); - CGAL::set_binary_mode (tin_colored_ofile); - CGAL::write_PLY (tin_colored_ofile, tin_colored_mesh); + CGAL::IO::set_binary_mode (tin_colored_ofile); + CGAL::IO::write_PLY (tin_colored_ofile, tin_colored_mesh); tin_colored_ofile.close(); //! [Save TIN with info] @@ -415,8 +415,8 @@ int main (int argc, char** argv) // Save original DTM std::ofstream dtm_ofile ("dtm.ply", std::ios_base::binary); - CGAL::set_binary_mode (dtm_ofile); - CGAL::write_PLY (dtm_ofile, dtm_mesh); + CGAL::IO::set_binary_mode (dtm_ofile); + CGAL::IO::write_PLY (dtm_ofile, dtm_mesh); dtm_ofile.close(); std::cerr << face_selection.size() << " face(s) are selected for removal" << std::endl; @@ -439,8 +439,8 @@ int main (int argc, char** argv) // Save filtered DTM std::ofstream dtm_holes_ofile ("dtm_with_holes.ply", std::ios_base::binary); - CGAL::set_binary_mode (dtm_holes_ofile); - CGAL::write_PLY (dtm_holes_ofile, dtm_mesh); + CGAL::IO::set_binary_mode (dtm_holes_ofile); + CGAL::IO::write_PLY (dtm_holes_ofile, dtm_mesh); dtm_holes_ofile.close(); // Get all holes @@ -477,8 +477,8 @@ int main (int argc, char** argv) // Save DTM with holes filled std::ofstream dtm_filled_ofile ("dtm_filled.ply", std::ios_base::binary); - CGAL::set_binary_mode (dtm_filled_ofile); - CGAL::write_PLY (dtm_filled_ofile, dtm_mesh); + CGAL::IO::set_binary_mode (dtm_filled_ofile); + CGAL::IO::write_PLY (dtm_filled_ofile, dtm_mesh); dtm_filled_ofile.close(); //! [Hole filling] @@ -490,8 +490,8 @@ int main (int argc, char** argv) CGAL::Polygon_mesh_processing::isotropic_remeshing (faces(dtm_mesh), spacing, dtm_mesh); std::ofstream dtm_remeshed_ofile ("dtm_remeshed.ply", std::ios_base::binary); - CGAL::set_binary_mode (dtm_remeshed_ofile); - CGAL::write_PLY (dtm_remeshed_ofile, dtm_mesh); + CGAL::IO::set_binary_mode (dtm_remeshed_ofile); + CGAL::IO::write_PLY (dtm_remeshed_ofile, dtm_mesh); dtm_remeshed_ofile.close(); //! [Remeshing] @@ -642,7 +642,7 @@ int main (int argc, char** argv) // Output to WKT file std::ofstream contour_ofile ("contour.wkt"); contour_ofile.precision(18); - CGAL::write_multi_linestring_WKT (contour_ofile, polylines); + CGAL::IO::write_multi_linestring_WKT (contour_ofile, polylines); contour_ofile.close(); //! [Contouring split] @@ -680,7 +680,7 @@ int main (int argc, char** argv) // Output to WKT file std::ofstream simplified_ofile ("simplified.wkt"); simplified_ofile.precision(18); - CGAL::write_multi_linestring_WKT (simplified_ofile, polylines); + CGAL::IO::write_multi_linestring_WKT (simplified_ofile, polylines); simplified_ofile.close(); //! [Contouring simplify] @@ -736,7 +736,7 @@ int main (int argc, char** argv) // Save the classified point set std::ofstream classified_ofile ("classified.ply"); - CGAL::set_binary_mode (classified_ofile); + CGAL::IO::set_binary_mode (classified_ofile); classified_ofile << points; classified_ofile.close(); } diff --git a/Classification/include/CGAL/Classification/Feature/Color_channel.h b/Classification/include/CGAL/Classification/Feature/Color_channel.h index b0296d191bb..2ca3825491a 100644 --- a/Classification/include/CGAL/Classification/Feature/Color_channel.h +++ b/Classification/include/CGAL/Classification/Feature/Color_channel.h @@ -56,7 +56,7 @@ namespace Feature { `ColorMap`. \tparam ColorMap model of `ReadablePropertyMap` whose key type is the value type of the iterator of `PointRange` and value type - is `CGAL::Color`. + is `CGAL::IO::Color`. */ template class Color_channel : public Feature_base diff --git a/Classification/include/CGAL/Classification/Label.h b/Classification/include/CGAL/Classification/Label.h index 6a21b630768..7801942afcb 100644 --- a/Classification/include/CGAL/Classification/Label.h +++ b/Classification/include/CGAL/Classification/Label.h @@ -15,6 +15,7 @@ #include #include +#include #include namespace CGAL { @@ -39,7 +40,7 @@ private: std::string m_name; std::size_t m_index; std::size_t m_standard_index; - CGAL::Color m_color; + CGAL::IO::Color m_color; friend Label_set; @@ -48,7 +49,7 @@ public: /// \cond SKIP_IN_MANUAL // Undocumented: Labels should be created by the set Label (std::string name, std::size_t index, std::size_t standard_index, - const CGAL::Color& color) + const CGAL::IO::Color& color) : m_name (name), m_index (index), m_standard_index (standard_index) , m_color (color) { } @@ -84,7 +85,7 @@ public: attribute embedded in a data set which _can_ be used (see `Color_channel`). */ - const CGAL::Color& color() const { return m_color; } + const CGAL::IO::Color& color() const { return m_color; } /// @} @@ -93,7 +94,7 @@ public: void set_name (const std::string& name) { m_name = name; } void set_standard_index(std::size_t idx) { m_standard_index = idx; } - void set_color (const Color& color) { m_color = color; } + void set_color (const IO::Color& color) { m_color = color; } /// @} }; diff --git a/Classification/include/CGAL/Classification/Label_set.h b/Classification/include/CGAL/Classification/Label_set.h index d95902b9258..8af0f5e935b 100644 --- a/Classification/include/CGAL/Classification/Label_set.h +++ b/Classification/include/CGAL/Classification/Label_set.h @@ -86,7 +86,7 @@ public: \return a handle to the newly added label. */ Label_handle add (const char* name, - CGAL::Color color, + CGAL::IO::Color color, std::size_t standard_index = -1) { Label_handle out = std::make_shared @@ -135,70 +135,70 @@ public: */ Label_handle add (const char* name) { - static std::unordered_map > init_map; + static std::unordered_map > init_map; if (init_map.empty()) { init_map.insert (std::make_pair ("unassigned", - std::make_pair (2, CGAL::Color (0, 0, 0)))); + std::make_pair (2, CGAL::IO::Color (0, 0, 0)))); init_map.insert (std::make_pair ("ground", - std::make_pair (2, CGAL::Color (186, 189, 182)))); + std::make_pair (2, CGAL::IO::Color (186, 189, 182)))); init_map.insert (std::make_pair ("low_vegetation", - std::make_pair (3, CGAL::Color (78, 154, 6)))); + std::make_pair (3, CGAL::IO::Color (78, 154, 6)))); init_map.insert (std::make_pair ("medium_vegetation", - std::make_pair (4, CGAL::Color (138, 226, 52)))); + std::make_pair (4, CGAL::IO::Color (138, 226, 52)))); init_map.insert (std::make_pair ("high_vegetation", - std::make_pair (5, CGAL::Color (204, 255, 201)))); + std::make_pair (5, CGAL::IO::Color (204, 255, 201)))); init_map.insert (std::make_pair ("building", - std::make_pair (6, CGAL::Color (245, 121, 0)))); + std::make_pair (6, CGAL::IO::Color (245, 121, 0)))); init_map.insert (std::make_pair ("noise", - std::make_pair (7, CGAL::Color (128, 0, 0)))); + std::make_pair (7, CGAL::IO::Color (128, 0, 0)))); init_map.insert (std::make_pair ("reserved", - std::make_pair (8, CGAL::Color (233, 185, 110)))); + std::make_pair (8, CGAL::IO::Color (233, 185, 110)))); init_map.insert (std::make_pair ("water", - std::make_pair (9, CGAL::Color (114, 159, 207)))); + std::make_pair (9, CGAL::IO::Color (114, 159, 207)))); init_map.insert (std::make_pair ("rail", - std::make_pair (10, CGAL::Color (136, 46, 25)))); + std::make_pair (10, CGAL::IO::Color (136, 46, 25)))); init_map.insert (std::make_pair ("road_surface", - std::make_pair (11, CGAL::Color (56, 56, 56)))); + std::make_pair (11, CGAL::IO::Color (56, 56, 56)))); init_map.insert (std::make_pair ("reserved_2", - std::make_pair (12, CGAL::Color (193, 138, 51)))); + std::make_pair (12, CGAL::IO::Color (193, 138, 51)))); init_map.insert (std::make_pair ("wire_guard", - std::make_pair (13, CGAL::Color (37, 61, 136)))); + std::make_pair (13, CGAL::IO::Color (37, 61, 136)))); init_map.insert (std::make_pair ("wire_conductor", - std::make_pair (14, CGAL::Color (173, 127, 168)))); + std::make_pair (14, CGAL::IO::Color (173, 127, 168)))); init_map.insert (std::make_pair ("wire_conduct", - std::make_pair (14, CGAL::Color (173, 127, 168)))); + std::make_pair (14, CGAL::IO::Color (173, 127, 168)))); init_map.insert (std::make_pair ("transmission_tower", - std::make_pair (15, CGAL::Color (136, 138, 133)))); + std::make_pair (15, CGAL::IO::Color (136, 138, 133)))); init_map.insert (std::make_pair ("trans_tower", - std::make_pair (15, CGAL::Color (136, 138, 133)))); + std::make_pair (15, CGAL::IO::Color (136, 138, 133)))); init_map.insert (std::make_pair ("wire_connect", - std::make_pair (16, CGAL::Color (145, 64, 236)))); + std::make_pair (16, CGAL::IO::Color (145, 64, 236)))); init_map.insert (std::make_pair ("bridge_deck", - std::make_pair (17, CGAL::Color (213, 93, 93)))); + std::make_pair (17, CGAL::IO::Color (213, 93, 93)))); init_map.insert (std::make_pair ("high_noise", - std::make_pair (18, CGAL::Color (255, 0, 0)))); + std::make_pair (18, CGAL::IO::Color (255, 0, 0)))); // Undocumented additions init_map.insert (std::make_pair ("low_veget", - std::make_pair (3, CGAL::Color (78, 154, 6)))); + std::make_pair (3, CGAL::IO::Color (78, 154, 6)))); init_map.insert (std::make_pair ("medium_veget", - std::make_pair (4, CGAL::Color (138, 226, 52)))); + std::make_pair (4, CGAL::IO::Color (138, 226, 52)))); init_map.insert (std::make_pair ("vegetation", - std::make_pair (4, CGAL::Color (138, 226, 52)))); + std::make_pair (4, CGAL::IO::Color (138, 226, 52)))); init_map.insert (std::make_pair ("high_veget", - std::make_pair (5, CGAL::Color (204, 255, 201)))); + std::make_pair (5, CGAL::IO::Color (204, 255, 201)))); init_map.insert (std::make_pair ("roof", - std::make_pair (6, CGAL::Color (245, 121, 0)))); + std::make_pair (6, CGAL::IO::Color (245, 121, 0)))); init_map.insert (std::make_pair ("facade", - std::make_pair (-1, CGAL::Color (77, 131, 186)))); + std::make_pair (-1, CGAL::IO::Color (77, 131, 186)))); } std::string sname (name); auto found = init_map.find (sname); if (found == init_map.end()) return add (name, - CGAL::Color ((unsigned char)(m_random.get_int(64, 192)), + CGAL::IO::Color ((unsigned char)(m_random.get_int(64, 192)), (unsigned char)(m_random.get_int(64, 192)), (unsigned char)(m_random.get_int(64, 192)))); diff --git a/Classification/include/CGAL/Classification/Point_set_feature_generator.h b/Classification/include/CGAL/Classification/Point_set_feature_generator.h index 8a1ebcd4e21..81b94516e4f 100644 --- a/Classification/include/CGAL/Classification/Point_set_feature_generator.h +++ b/Classification/include/CGAL/Classification/Point_set_feature_generator.h @@ -355,7 +355,7 @@ public: \tparam ColorMap model of `ReadablePropertyMap` whose key type is the value type of the iterator of `PointRange` and value type is - `CGAL::Color`. + `CGAL::IO::Color`. \param features the feature set where the features are instantiated. \param color_map property map to access the colors of the input points (if any). diff --git a/Classification/test/Classification/test_classification_point_set.cpp b/Classification/test/Classification/test_classification_point_set.cpp index 9bd20262c1f..0a1dc9cee79 100644 --- a/Classification/test/Classification/test_classification_point_set.cpp +++ b/Classification/test/Classification/test_classification_point_set.cpp @@ -37,7 +37,7 @@ typedef Classification::Point_set_feature_generator Size_t_map; -typedef Point_set::Property_map Color_map; +typedef Point_set::Property_map Color_map; @@ -55,7 +55,7 @@ int main (int, char**) normal_map = pts.normal_map(); boost::tie (echo_map, map_added) = pts.add_property_map ("echo"); assert (map_added); - boost::tie (color_map, map_added) = pts.add_property_map ("color"); + boost::tie (color_map, map_added) = pts.add_property_map ("color"); assert (map_added); for (std::size_t i = 0; i < 1000; ++ i) @@ -68,7 +68,7 @@ int main (int, char**) CGAL::get_default_random().get_double(), CGAL::get_default_random().get_double())); echo_map[*it] = std::size_t(CGAL::get_default_random().get_int(0, 4)); - color_map[*it] = CGAL::Color ((unsigned char)(CGAL::get_default_random().get_int(0, 255)), + color_map[*it] = CGAL::IO::Color ((unsigned char)(CGAL::get_default_random().get_int(0, 255)), (unsigned char)(CGAL::get_default_random().get_int(0, 255)), (unsigned char)(CGAL::get_default_random().get_int(0, 255))); } diff --git a/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h b/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h index b0f2943c707..78d14522eb9 100644 --- a/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h +++ b/Combinatorial_map/include/CGAL/Combinatorial_map_iterators_base.h @@ -389,7 +389,7 @@ namespace CGAL { {} /// Destructor. - ~CMap_non_basic_iterator() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + ~CMap_non_basic_iterator() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_destructor_assertion( this->mmark_number!=Map::INVALID_MARK ); if (this->mmap->get_number_of_times_mark_reserved diff --git a/Convex_hull_2/examples/Convex_hull_2/ch_from_cin_to_cout.cpp b/Convex_hull_2/examples/Convex_hull_2/ch_from_cin_to_cout.cpp index cb3d04d28da..957e316d045 100644 --- a/Convex_hull_2/examples/Convex_hull_2/ch_from_cin_to_cout.cpp +++ b/Convex_hull_2/examples/Convex_hull_2/ch_from_cin_to_cout.cpp @@ -6,8 +6,8 @@ typedef K::Point_2 Point_2; int main() { - CGAL::set_ascii_mode(std::cin); - CGAL::set_ascii_mode(std::cout); + CGAL::IO::set_ascii_mode(std::cin); + CGAL::IO::set_ascii_mode(std::cout); std::istream_iterator< Point_2 > in_start( std::cin ); std::istream_iterator< Point_2 > in_end; std::ostream_iterator< Point_2 > out( std::cout, "\n" ); diff --git a/Convex_hull_2/examples/Convex_hull_2/ch_graham_anderson.cpp b/Convex_hull_2/examples/Convex_hull_2/ch_graham_anderson.cpp index 019ede1ed24..68fb6ca8109 100644 --- a/Convex_hull_2/examples/Convex_hull_2/ch_graham_anderson.cpp +++ b/Convex_hull_2/examples/Convex_hull_2/ch_graham_anderson.cpp @@ -37,8 +37,8 @@ ch_graham_anderson( InputIterator first, InputIterator beyond, int main() { - CGAL::set_ascii_mode(std::cin); - CGAL::set_ascii_mode(std::cout); + CGAL::IO::set_ascii_mode(std::cin); + CGAL::IO::set_ascii_mode(std::cout); std::istream_iterator< Point_2 > in_start( std::cin ); std::istream_iterator< Point_2 > in_end; std::ostream_iterator< Point_2 > out( std::cout, "\n" ); diff --git a/Convex_hull_2/examples/Convex_hull_2/ch_timing.cpp b/Convex_hull_2/examples/Convex_hull_2/ch_timing.cpp index 591fd7213c5..c75adf6ac67 100644 --- a/Convex_hull_2/examples/Convex_hull_2/ch_timing.cpp +++ b/Convex_hull_2/examples/Convex_hull_2/ch_timing.cpp @@ -24,7 +24,7 @@ int main( int argc, char* argv[] ) } std::ifstream F( (argc >= 2) ? argv[1] : "files/CD500"); - CGAL::set_ascii_mode( F ); + CGAL::IO::set_ascii_mode( F ); std::istream_iterator< Point_2> in_start( F ); std::istream_iterator< Point_2> in_end; diff --git a/Convex_hull_3/examples/Convex_hull_3/extreme_indices_3.cpp b/Convex_hull_3/examples/Convex_hull_3/extreme_indices_3.cpp index 4a65e65dace..b6c016c77ac 100644 --- a/Convex_hull_3/examples/Convex_hull_3/extreme_indices_3.cpp +++ b/Convex_hull_3/examples/Convex_hull_3/extreme_indices_3.cpp @@ -16,7 +16,7 @@ int main(int argc, char* argv[]) const char* filename = (argc>1) ? argv[1] : "data/star.off"; std::vector points; - if(!CGAL::read_points(filename, std::back_inserter(points))) + if(!CGAL::IO::read_points(filename, std::back_inserter(points))) { std::cerr<< "Cannot open input file." <1) ? argv[1] : "data/star.off"; Mesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr<< "Cannot open input file." <1) ? argv[1] : "data/star.off"; Surface_mesh poly; - if(!CGAL::read_polygon_mesh(filename, poly)) + if(!CGAL::IO::read_polygon_mesh(filename, poly)) { std::cerr<< "Cannot open input file." <2)?argv[2]:"out.off", sm); + CGAL::IO::write_polygon_mesh((argc>2)?argv[2]:"out.off", sm); return 0; } diff --git a/Convex_hull_3/test/Convex_hull_3/test_ch_3_ambiguity.cpp b/Convex_hull_3/test/Convex_hull_3/test_ch_3_ambiguity.cpp index 393945ed5e4..0cfa1503d9c 100644 --- a/Convex_hull_3/test/Convex_hull_3/test_ch_3_ambiguity.cpp +++ b/Convex_hull_3/test/Convex_hull_3/test_ch_3_ambiguity.cpp @@ -15,7 +15,7 @@ int main(int argc, char* argv[]) const char* filename = (argc>1)? argv[1] : "data/cross.off"; Surface_mesh poly; - if(!CGAL::read_polygon_mesh(filename, poly)) + if(!CGAL::IO::read_polygon_mesh(filename, poly)) { std::cerr<<"Could not find a correct input file."< Kernel; diff --git a/Convex_hull_d/test/Convex_hull_d/delaunay_d-test.cpp b/Convex_hull_d/test/Convex_hull_d/delaunay_d-test.cpp index 5815e5affc5..1dc96b23f93 100644 --- a/Convex_hull_d/test/Convex_hull_d/delaunay_d-test.cpp +++ b/Convex_hull_d/test/Convex_hull_d/delaunay_d-test.cpp @@ -28,7 +28,7 @@ typedef double FT; int main() { - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); CGAL_KD_SETDTHREAD(193); CGAL_TEST_START; { diff --git a/Convex_hull_d/test/Convex_hull_d/include/CGAL/test_macros.h b/Convex_hull_d/test/Convex_hull_d/include/CGAL/test_macros.h index 7ba8334b2f1..369323eab84 100644 --- a/Convex_hull_d/test/Convex_hull_d/include/CGAL/test_macros.h +++ b/Convex_hull_d/test/Convex_hull_d/include/CGAL/test_macros.h @@ -14,7 +14,7 @@ else {} #define CGAL_IO_TEST(datao,datai,iomode) { \ std::stringstream S; \ - CGAL::set_mode(S,iomode); \ + CGAL::IO::set_mode(S,iomode); \ S << datao; \ if ( iomode != CGAL::IO::BINARY) \ S << '\n'; \ diff --git a/Documentation/doc/Documentation/Developer_manual/Chapter_checks.txt b/Documentation/doc/Documentation/Developer_manual/Chapter_checks.txt index 52083c63a03..1a6fb78e4cb 100644 --- a/Documentation/doc/Documentation/Developer_manual/Chapter_checks.txt +++ b/Documentation/doc/Documentation/Developer_manual/Chapter_checks.txt @@ -243,8 +243,7 @@ and \cgalCite{cgal:a-esgc-98} (also available at https://www.boost.org/community/exception_safety.html). Any destructor which might throw an exception, including a destructor which uses the `CGAL_destructor_assertion` macro, should be marked with the -`CGAL_NOEXCEPT(false)` macro. This macro provides future compatibility with -C++11 and above, which provides the `noexcept` keyword. +`noexcept(!CGAL_ASSERTIONS_ENABLED)`. \section secchecks_req_and_rec Requirements and recommendations diff --git a/Documentation/doc/resources/1.8.20/header_package.html b/Documentation/doc/resources/1.8.20/header_package.html index 8bd4b964ccb..007d84e7b10 100644 --- a/Documentation/doc/resources/1.8.20/header_package.html +++ b/Documentation/doc/resources/1.8.20/header_package.html @@ -12,6 +12,7 @@ + @@ -41,7 +42,6 @@ MathJax.Hub.Config({ }); $mathjax - $extrastylesheet diff --git a/Documentation/doc/scripts/process_doc.sh b/Documentation/doc/scripts/process_doc.sh index 0b9d2e2be89..a447df9cae9 100644 --- a/Documentation/doc/scripts/process_doc.sh +++ b/Documentation/doc/scripts/process_doc.sh @@ -18,20 +18,37 @@ PUBLISH_DIR="$3" DOXYGEN_1=$($PATH_TO_1_8_4 --version) DOXYGEN_2=$($PATH_TO_1_8_13 --version) +DO_COMPARE=TRUE +PATH_TO_SCRIPTS=${PWD} ####################################### ## download and build doxygen_master ## -####################################### + ####################################### echo "downloading and building master" git clone https://github.com/doxygen/doxygen.git doxygen_master 1> /dev/null -cd doxygen_master -git pull https://github.com/lrineau/doxygen.git 1> /dev/null -MASTER_DESCRIBE=$(git describe --tags) -mkdir -p build -cd build -cmake .. 1> /dev/null -make -j$NB_CORES 1> /dev/null -cd ../.. #scripts +if [ $? -ne 0 ]; then + echo " clone of doxygen failed" + DO_COMPARE=FALSE +else + cd doxygen_master + git pull https://github.com/lrineau/doxygen.git 1> /dev/null +fi +if [ $? -ne 0 ] || [ "$DO_COMPARE" = "FALSE" ]; then + echo " pull of doxygen failed" + DO_COMPARE=FALSE +else + MASTER_DESCRIBE=$(git describe --tags) + mkdir -p build + cd build + cmake .. 1> /dev/null +fi +if [ $? -ne 0 ] || [ "$DO_COMPARE" = "FALSE" ]; then + echo " cmake of doxygen failed" + DO_COMPARE=FALSE +else + make -j$NB_CORES 1> /dev/null +fi +cd $PATH_TO_SCRIPTS #scripts PATH_TO_MASTER="$PWD/doxygen_master/build/bin/doxygen" echo "done." @@ -40,17 +57,34 @@ bash -$- test_doxygen_versions.sh $PATH_TO_1_8_4 $PATH_TO_1_8_13 $PWD/doc_1_8_4 mv diff.txt diff1.txt echo "comparing versions 1.8.4 and master" -bash -$- test_doxygen_versions.sh $PATH_TO_1_8_4 $PATH_TO_MASTER $PWD/doc_1_8_4 $PWD/doc_master $PUBLISH_DIR -mv diff.txt diff2.txt - +if [ "$DO_COMPARE" = "TRUE" ]; then + bash -$- test_doxygen_versions.sh $PATH_TO_1_8_4 $PATH_TO_MASTER $PWD/doc_1_8_4 $PWD/doc_master $PUBLISH_DIR +fi +if [ $? -ne 0 ] || [ "$DO_COMPARE" = "FALSE" ]; then + DO_COMPARE=FALSE + echo " test_doxygen_versions with master failed" + mv build_doc/build_logs doc_master/ +else + mv diff.txt diff2.txt +fi #update overview CGAL_NAME=$(cat cgal_version) -python ${PWD}/testsuite.py --output-dir1 $PWD/doc_1_8_4/doc_output/ --output-dir2 $PWD/doc_1_8_13/doc_output/ --doc-log-dir1 $PWD/doc_1_8_4/doc_log/ \ - --doc-log-dir2 $PWD/doc_1_8_13/doc_log/ --doc-log-dir-master $PWD/doc_master/doc_log/ \ - --publish $PUBLISH_DIR --diff1 $PWD/diff1.txt --diff2 $PWD/diff2.txt --master-dir $PWD/doc_master/doc_output/ \ - --cgal-version "$CGAL_NAME" --do-copy-results --version-to-keep 10 --doxygen-version1 "$DOXYGEN_1" --doxygen-version2 "$DOXYGEN_2" --master-describe "$MASTER_DESCRIBE" - +if [ "$DO_COMPARE" = "TRUE" ]; then + python ${PWD}/testsuite.py --output-dir1 $PWD/doc_1_8_4/doc_output/ --output-dir2 $PWD/doc_1_8_13/doc_output/ --doc-log-dir1 $PWD/doc_1_8_4/doc_log/ \ + --doc-log-dir2 $PWD/doc_1_8_13/doc_log/ --doc-log-dir-master $PWD/doc_master/doc_log/ \ + --publish $PUBLISH_DIR --diff1 $PWD/diff1.txt --diff2 $PWD/diff2.txt --master-dir $PWD/doc_master/doc_output/ \ + --cgal-version "$CGAL_NAME" --do-copy-results --version-to-keep 10 --doxygen-version1 "$DOXYGEN_1" --doxygen-version2 "$DOXYGEN_2" --master-describe "$MASTER_DESCRIBE" +else + echo "NO MASTER" + python ${PWD}/testsuite.py --output-dir1 $PWD/doc_1_8_4/doc_output/ --output-dir2 $PWD/doc_1_8_13/doc_output/ --doc-log-dir1 $PWD/doc_1_8_4/doc_log/ \ + --doc-log-dir2 $PWD/doc_1_8_13/doc_log/ --doc-log-dir-master $PWD/doc_master/ \ + --publish $PUBLISH_DIR --diff1 $PWD/diff1.txt \ + --cgal-version "$CGAL_NAME" --do-copy-results --version-to-keep 10 --doxygen-version1 "$DOXYGEN_1" --doxygen-version2 "$DOXYGEN_2" +fi #clean-up -rm -rf ./doc_1_8_4 ./doc_1_8_13 ./doc_master ./doxygen_master -rm ./diff1.txt ./diff2.txt ./cgal_version +rm -rf ./doc_1_8_4 ./doc_1_8_13 ./doc_master #./doxygen_master +rm ./diff1.txt ./cgal_version +if [ -f ./diff2.txt ]; then + rm ./diff2.txt +fi diff --git a/Documentation/doc/scripts/test_doxygen_versions.sh b/Documentation/doc/scripts/test_doxygen_versions.sh index e65e0546140..f8c3ec31ab9 100644 --- a/Documentation/doc/scripts/test_doxygen_versions.sh +++ b/Documentation/doc/scripts/test_doxygen_versions.sh @@ -58,8 +58,8 @@ if [ "$HAS_REF" -ne "1" ]; then echo "Building reference documentation..." mkdir -p ./build_doc cd ./build_doc - cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_GENERATE_XML=ON -DDOXYGEN_EXECUTABLE="$PATH_TO_1" ../.. 1> /dev/null - make -j$NB_CORES doc &> /dev/null + cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_GENERATE_XML=ON -DDOXYGEN_EXECUTABLE="$PATH_TO_1" ../.. 1>> ./build_logs + make -j$NB_CORES doc &>> ./build_logs echo "done." cd ../ #scripts echo "Creating text files for diff...." @@ -78,8 +78,8 @@ fi echo "Building second documentation..." mkdir -p build_doc cd ./build_doc -cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_GENERATE_XML=ON -DDOXYGEN_EXECUTABLE="$PATH_TO_2" ../.. 1> /dev/null -make -j$NB_CORES doc &> /dev/null +cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_GENERATE_XML=ON -DDOXYGEN_EXECUTABLE="$PATH_TO_2" ../.. 1>> ./build_logs +make -j$NB_CORES doc &>> ./build_logs echo "done." cd ../ #scripts DOXYGEN_1=$($PATH_TO_1 --version) @@ -94,7 +94,7 @@ echo "done." #add post-processing cd ./build_doc echo "Adding postprocessing..." -make -j$NB_CORES doc_with_postprocessing &> /dev/null +make -j$NB_CORES doc_with_postprocessing &>> ./build_logs echo "done." cd .. #scripts mv ./build_doc/* $BUILD_DIR_2 @@ -108,16 +108,16 @@ if [ "$HAS_REF" -ne "1" ]; then ####################################################################################################################### rm -rf ./doc_dir cd $BUILD_DIR_1 - cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_DOC_CREATE_LOGS="true" -DDOXYGEN_EXECUTABLE="$PATH_TO_1" ../.. 1> /dev/null + cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_DOC_CREATE_LOGS="true" -DDOXYGEN_EXECUTABLE="$PATH_TO_1" ../.. 1>> ./build_logs echo "Building reference documentation with postprocessing..." - make -j$NB_CORES doc &> /dev/null - make -j$NB_CORES doc &> /dev/null - make -j$NB_CORES doc_with_postprocessing &> /dev/null + make -j$NB_CORES doc &>> ./build_logs + make -j$NB_CORES doc &>> ./build_logs + make -j$NB_CORES doc_with_postprocessing &>> ./build_logs echo "done." if [ $IS_RELEASE = 0 ]; then cd $ROOT mkdir -p ./build && cd ./build - cmake -DWITH_CGAL_Core=false -DWITH_CGAL_ImageIO=false -DWITH_CGAL_Qt5=false .. 1> /dev/null + cmake -DWITH_CGAL_Core=false -DWITH_CGAL_ImageIO=false -DWITH_CGAL_Qt5=false .. 1>> ./build_logs CGAL_NAME="$(cat $PWD/VERSION)" cd $ROOT rm -rf ./build @@ -132,11 +132,11 @@ else rm -rf ./first_doc_ref fi cd $BUILD_DIR_2 - cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_DOC_CREATE_LOGS="true" -DDOXYGEN_EXECUTABLE="$PATH_TO_2" ../.. 1> /dev/null + cmake -DCGAL_DOC_MATHJAX_LOCATION:STRING=../../MathJax -DCGAL_DOC_RELEASE=ON -DCGAL_DOC_CREATE_LOGS="true" -DDOXYGEN_EXECUTABLE="$PATH_TO_2" ../.. 1>> ./build_logs echo "Building reference documentation with postprocessing..." - make -j$NB_CORES doc &> /dev/null - make -j$NB_CORES doc &> /dev/null - make -j$NB_CORES doc_with_postprocessing &> /dev/null + make -j$NB_CORES doc &>> ./build_logs + make -j$NB_CORES doc &>> ./build_logs + make -j$NB_CORES doc_with_postprocessing &>> ./build_logs echo "done." cd .. #scripts #get VERSION's content diff --git a/Documentation/doc/scripts/testsuite.py b/Documentation/doc/scripts/testsuite.py index 255191e61c4..3d3dbc28c50 100755 --- a/Documentation/doc/scripts/testsuite.py +++ b/Documentation/doc/scripts/testsuite.py @@ -7,11 +7,14 @@ # $URL$ # $Id$ # SPDX-License-Identifier: GPL-3.0-or-later -# -# +# +# # Author(s) : Philipp Moeller -import argparse +#NOTE : if args.diff2 is not given, then it is considered that something went +# wrong during the build of doxygen_master or the generation of the doc. + +import argparse import shutil import sys import subprocess @@ -98,7 +101,9 @@ body {color: black; background-color: #C0C0D0; font-family: sans-serif;} suffix = '' if args.master_describe: suffix=args.master_describe - link_master="\n
Documentation built with the master version of Doxygen {_suffix} (buggy), so that we see progress/regression of doxygen development as far as CGAL is concerned.\n".format(_suffix=suffix) + link_master="\n
Documentation built with the master version of Doxygen {_suffix} (buggy), so that we see progress/regression of doxygen development as far as CGAL is concerned.\n".format(_suffix=suffix) + else: + link_master="\n


/!\\ Documentation with the master version of Doxygen FAILED /!\\

\n" d = pq(page_header+link1+" "+link2+" "+link_master+page_footer) else: d = pq(page_header+page_footer) @@ -129,18 +134,22 @@ body {color: black; background-color: #C0C0D0; font-family: sans-serif;} basename=os.path.basename(log) result = [(basename, pretty_name, res)] results2.extend(result) + if args.doc_log_dir_master: + os.chdir(args.doc_log_dir_master) + if(args.diff2): + logs=sorted(glob.glob('./*.log')) - os.chdir(args.doc_log_dir_master) - logs=sorted(glob.glob('./*.log')) - - for log in logs: - res=count_errors_and_warnings(log) - err_war_sum_master=tuple(map(operator.add, err_war_sum_master, res)) - basename=os.path.basename(log) - pretty_name=basename[0:-4] - result = [(basename, pretty_name, res)] - results_master.extend(result) - + for log in logs: + res=count_errors_and_warnings(log) + err_war_sum_master=tuple(map(operator.add, err_war_sum_master, res)) + basename=os.path.basename(log) + pretty_name=basename[0:-4] + result = [(basename, pretty_name, res)] + results_master.extend(result) + else: + for index in range(0, len(results1)): + result = [('./build_logs', './build_logs', (0,1))] + results_master.extend(result) for index in range(0, len(results1)-1): status='class="package-good"' no_errors = True @@ -276,13 +285,16 @@ body {color: black; background-color: #C0C0D0; font-family: sans-serif;} diff1='Diff between {test_version} and {master_version}.'.format( log_path=version_string, test_version=args.doxygen_version1, master_version=args.doxygen_version2) - with open(diff_file2, 'r') as myfile: - diff2=myfile.read() - if not diff2: - diff2='none' + if args.diff2: + with open(diff_file2, 'r') as myfile: + diff2=myfile.read() + if not diff2: + diff2='none' + else: + diff2='Diff between {test_version} and {master_version}.'.format( + log_path=version_string, test_version=args.doxygen_version1, master_version=args.master_describe) else: - diff2='Diff between {test_version} and {master_version}.'.format( - log_path=version_string, test_version=args.doxygen_version1, master_version=args.master_describe) + diff2='

Documentation with the master version of Doxygen FAILED

' d=pq(filename=publish_dir + 'index.html',parser="html") revs=d('#revisions tr') @@ -319,10 +331,12 @@ body {color: black; background-color: #C0C0D0; font-family: sans-serif;} shutil.copytree(args.doc_log_dir1, log_target+'/logs1/') shutil.copyfile(args.doc_log_dir1+'/index.html', log_target+'/index.html') shutil.copytree(args.doc_log_dir2, log_target+'/logs2/') - shutil.copytree(args.doc_log_dir_master, log_target+'/logs_master/') + if args.doc_log_dir_master: + shutil.copytree(args.doc_log_dir_master, log_target+'/logs_master/') #copy diff shutil.copyfile(diff_file1, log_target+'/diff1.txt') - shutil.copyfile(diff_file2, log_target+'/diff2.txt') + if args.diff2: + shutil.copyfile(diff_file2, log_target+'/diff2.txt') try: #copy documentation if args.do_copy_results: diff --git a/Filtered_kernel/include/CGAL/internal/Static_filters/Do_intersect_3.h b/Filtered_kernel/include/CGAL/internal/Static_filters/Do_intersect_3.h index 8f755a05965..8a5c95b6785 100644 --- a/Filtered_kernel/include/CGAL/internal/Static_filters/Do_intersect_3.h +++ b/Filtered_kernel/include/CGAL/internal/Static_filters/Do_intersect_3.h @@ -78,6 +78,13 @@ public: return Intersections::internal::do_intersect(t,s, SFK()); } + result_type + operator()(const Triangle_3 &t0, const Triangle_3& t1) const + { + return Intersections::internal::do_intersect(t0,t1, SFK()); + } + + result_type operator()(const Bbox_3& b, const Segment_3 &s) const { diff --git a/Generator/include/CGAL/internal/Generic_random_point_generator.h b/Generator/include/CGAL/internal/Generic_random_point_generator.h index 76c52dd55cb..a161df1da76 100644 --- a/Generator/include/CGAL/internal/Generic_random_point_generator.h +++ b/Generator/include/CGAL/internal/Generic_random_point_generator.h @@ -18,7 +18,6 @@ #include #include #include -#include #include diff --git a/Generator/test/Generator/rcs_test.cpp b/Generator/test/Generator/rcs_test.cpp index b541bbe742d..89ea1bc8a64 100644 --- a/Generator/test/Generator/rcs_test.cpp +++ b/Generator/test/Generator/rcs_test.cpp @@ -37,7 +37,7 @@ using std::back_inserter; using CGAL::Simple_cartesian; using CGAL::Creator_uniform_2; using CGAL::Random_points_in_square_2; -using CGAL::set_pretty_mode; +using CGAL::IO::set_pretty_mode; using CGAL::random_convex_set_2; diff --git a/Geomview/TODO b/Geomview/TODO index 76063554941..6b19b556a92 100644 --- a/Geomview/TODO +++ b/Geomview/TODO @@ -32,7 +32,7 @@ Color: - See how we can mix the Color output with the raw mode. Currently it's not clear to me. Check how to do transparency with Geomview ? - (passing the one from CGAL::Color) + (passing the one from CGAL::IO::Color) Demo : ------ diff --git a/Geomview/demo/Geomview/gv_terrain.cpp b/Geomview/demo/Geomview/gv_terrain.cpp index bed8f15171a..7506d6fcc44 100644 --- a/Geomview/demo/Geomview/gv_terrain.cpp +++ b/Geomview/demo/Geomview/gv_terrain.cpp @@ -39,7 +39,7 @@ int main() CGAL::Geomview_stream gv(CGAL::Bbox_3(-100, -100, -100, 600, 600, 600)); gv.set_line_width(4); // gv.set_trace(true); - gv.set_bg_color(CGAL::Color(0, 200, 200)); + gv.set_bg_color(CGAL::IO::Color(0, 200, 200)); // gv.clear(); Delaunay D; @@ -57,13 +57,13 @@ int main() // use different colors, and put a few sleeps/clear. - gv << CGAL::blue(); + gv << CGAL::IO::blue(); std::cout << "Drawing 2D Delaunay triangulation in wired mode.\n"; gv.set_wired(true); gv << D; #if 1 // It's too slow ! Needs to use OFF for that. - gv << CGAL::red(); + gv << CGAL::IO::red(); std::cout << "Drawing its Voronoi diagram.\n"; gv.set_wired(true); D.draw_dual(gv); diff --git a/Geomview/demo/Geomview/kernel.cpp b/Geomview/demo/Geomview/kernel.cpp index 8461d9a7997..3b623dd1e5b 100644 --- a/Geomview/demo/Geomview/kernel.cpp +++ b/Geomview/demo/Geomview/kernel.cpp @@ -41,7 +41,7 @@ int main() gv.clear(); // remove the pickplane. gv << K::Point_2 (200, 100); - gv << CGAL::blue(); + gv << CGAL::IO::blue(); gv << K::Point_3 (200, 100, 100); gv << CGAL::red(); gv << K::Segment_2 (K::Point_2(200, 100), diff --git a/Geomview/include/CGAL/IO/Geomview_stream_impl.h b/Geomview/include/CGAL/IO/Geomview_stream_impl.h index 08a558043a7..216371cd715 100644 --- a/Geomview/include/CGAL/IO/Geomview_stream_impl.h +++ b/Geomview/include/CGAL/IO/Geomview_stream_impl.h @@ -197,7 +197,7 @@ Geomview_stream::pickplane(const Bbox_3 &bbox) // close the text bracket << "}) (pickable pickplane no)"; - set_ascii_mode(bin_bak); + IO::set_ascii_mode(bin_bak); } CGAL_INLINE_FUNCTION diff --git a/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp b/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp index 374e297f3cc..33b37b40a91 100644 --- a/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp +++ b/GraphicsView/demo/Alpha_shapes_2/Alpha_shapes_2.cpp @@ -275,7 +275,7 @@ MainWindow::open(QString fileName) if(fileName.endsWith(".wkt",Qt::CaseInsensitive)) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) - CGAL::read_multi_point_WKT(ifs, points); + CGAL::IO::read_multi_point_WKT(ifs, points); #endif } else diff --git a/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp b/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp index 8292f28262d..c7dd490fe03 100644 --- a/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp +++ b/GraphicsView/demo/Apollonius_graph_2/Apollonius_graph_2.cpp @@ -243,7 +243,7 @@ MainWindow::open(QString fileName) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) std::vector point_3_s; - CGAL::read_multi_point_WKT(ifs, point_3_s); + CGAL::IO::read_multi_point_WKT(ifs, point_3_s); for(const K::Point_3& point_3 : point_3_s) { points.push_back(Apollonius_site_2(K::Point_2(point_3.x(), point_3.y()), point_3.z())); @@ -289,7 +289,7 @@ MainWindow::on_actionSavePoints_triggered() vit->point().y(), vit->weight())); } - CGAL::write_multi_point_WKT(ofs, points); + CGAL::IO::write_multi_point_WKT(ofs, points); #endif } else diff --git a/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp b/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp index 12928ca9897..5347a0eb263 100644 --- a/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp +++ b/GraphicsView/demo/Bounding_volumes/Bounding_volumes.cpp @@ -498,7 +498,7 @@ MainWindow::open(QString fileName) if(fileName.endsWith(".wkt", Qt::CaseInsensitive)) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) - CGAL::read_multi_point_WKT(ifs, points); + CGAL::IO::read_multi_point_WKT(ifs, points); for(K::Point_2 p : points) { mc.insert(p); @@ -547,7 +547,7 @@ MainWindow::on_actionSavePoints_triggered() for(Min_circle::Point_iterator pit = mc.points_begin(); pit != mc.points_end(); ++pit) out_pts.push_back(*pit); - CGAL::write_multi_point_WKT(ofs, out_pts); + CGAL::IO::write_multi_point_WKT(ofs, out_pts); #endif } else diff --git a/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp b/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp index b54014b9f0b..78a92469a02 100644 --- a/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp +++ b/GraphicsView/demo/Circular_kernel_2/Circular_kernel_2.cpp @@ -241,7 +241,7 @@ MainWindow::open(QString fileName) do { std::vector multi_points; - CGAL::read_multi_point_WKT(ifs, multi_points); + CGAL::IO::read_multi_point_WKT(ifs, multi_points); if(multi_points.size() == 2) { Line_arc_2 la(Segment_2(multi_points[0], diff --git a/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp b/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp index c240f8c62a3..4a8334ea142 100644 --- a/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp +++ b/GraphicsView/demo/L1_Voronoi_diagram_2/L1_voronoi_diagram_2.cpp @@ -296,7 +296,7 @@ MainWindow::open(QString fileName) if(fileName.endsWith(".wkt", Qt::CaseInsensitive)) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) - CGAL::read_multi_point_WKT(ifs, m_sites); + CGAL::IO::read_multi_point_WKT(ifs, m_sites); #endif } else @@ -330,7 +330,7 @@ MainWindow::on_actionSavePoints_triggered() std::ofstream ofs(qPrintable(fileName)); if(fileName.endsWith(".wkt", Qt::CaseInsensitive)){ #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) - CGAL::write_multi_point_WKT(ofs, m_sites); + CGAL::IO::write_multi_point_WKT(ofs, m_sites); #endif }else for(Points::iterator it = m_sites.begin(); diff --git a/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp b/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp index e956d72a171..26f21da2b2f 100644 --- a/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Periodic_2_triangulation_2/Periodic_2_Delaunay_triangulation_2.cpp @@ -377,7 +377,7 @@ MainWindow::open(QString fileName) if(fileName.endsWith(".wkt", Qt::CaseInsensitive)) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) - CGAL::read_multi_point_WKT(ifs, points); + CGAL::IO::read_multi_point_WKT(ifs, points); #endif } else @@ -423,7 +423,7 @@ MainWindow::on_actionSavePoints_triggered() { points.push_back(vit->point()); } - CGAL::write_multi_point_WKT(ofs, points); + CGAL::IO::write_multi_point_WKT(ofs, points); #endif } else diff --git a/GraphicsView/demo/Polygon/Polygon_2.cpp b/GraphicsView/demo/Polygon/Polygon_2.cpp index 98d66af08c5..1e7486d2d6b 100644 --- a/GraphicsView/demo/Polygon/Polygon_2.cpp +++ b/GraphicsView/demo/Polygon/Polygon_2.cpp @@ -253,7 +253,7 @@ MainWindow::open(QString fileName) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) CGAL::Polygon_with_holes_2 P; - CGAL::read_polygon_WKT(ifs, P); + CGAL::IO::read_polygon_WKT(ifs, P); poly = Polygon2(P.outer_boundary().begin(), P.outer_boundary().end()); #endif @@ -288,7 +288,7 @@ MainWindow::on_actionSavePolygon_triggered() CGAL::Polygon_2 P(poly.begin(), poly.end()); CGAL::Polygon_with_holes_2 Pwh(P); - CGAL::write_polygon_WKT(ofs, Pwh); + CGAL::IO::write_polygon_WKT(ofs, Pwh); #endif } else diff --git a/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp b/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp index ac6d7af1f48..6f3ca72391e 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp +++ b/GraphicsView/demo/Segment_Delaunay_graph_2/Segment_voronoi_2.cpp @@ -357,7 +357,7 @@ MainWindow::loadWKTConstraints(QString std::ifstream ifs(qPrintable(fileName)); do{ std::vector polygons; - CGAL::read_multi_polygon_WKT(ifs, polygons); + CGAL::IO::read_multi_polygon_WKT(ifs, polygons); for(const Polygon& poly : polygons) { if(poly.outer_boundary().is_empty()) @@ -387,7 +387,7 @@ MainWindow::loadWKTConstraints(QString SVD::Vertex_handle vqold; do{ std::vector linestrings; - CGAL::read_multi_linestring_WKT(ifs, linestrings); + CGAL::IO::read_multi_linestring_WKT(ifs, linestrings); for(const LineString& ls : linestrings) { bool first_pass=true; diff --git a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp index ae4f72bc55e..623c4b96095 100644 --- a/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp +++ b/GraphicsView/demo/Segment_Delaunay_graph_Linf_2/Segment_voronoi_linf_2.cpp @@ -400,7 +400,7 @@ MainWindow::loadWKT(QString do { std::vector mpts; - CGAL::read_multi_point_WKT(ifs, mpts); + CGAL::IO::read_multi_point_WKT(ifs, mpts); for(const K::Point_2& p : mpts) svd.insert(p); }while(ifs.good() && !ifs.eof()); @@ -411,7 +411,7 @@ MainWindow::loadWKT(QString { typedef std::vector LineString; std::vector mls; - CGAL::read_multi_linestring_WKT(ifs, mls); + CGAL::IO::read_multi_linestring_WKT(ifs, mls); for(const LineString& ls : mls) { if(ls.empty()) @@ -449,7 +449,7 @@ MainWindow::loadWKT(QString { typedef CGAL::Polygon_with_holes_2 Polygon; std::vector mps; - CGAL::read_multi_polygon_WKT(ifs, mps); + CGAL::IO::read_multi_polygon_WKT(ifs, mps); for(const Polygon& poly : mps) { if(poly.outer_boundary().is_empty()) diff --git a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp index 0225624b96e..d051c31e6f1 100644 --- a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp +++ b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp @@ -272,7 +272,7 @@ MainWindow::open(QString fileName) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) std::vector > mls; - CGAL::read_multi_linestring_WKT(ifs, mls); + CGAL::IO::read_multi_linestring_WKT(ifs, mls); for(const std::vector& ls : mls) { if(ls.size() > 2) @@ -322,7 +322,7 @@ MainWindow::on_actionSaveSegments_triggered() ls[1] = seg.target(); mls.push_back(ls); } - CGAL::write_multi_linestring_WKT(ofs, mls); + CGAL::IO::write_multi_linestring_WKT(ofs, mls); #endif } else diff --git a/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp b/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp index 1af26ec7514..bcbdfbf939b 100644 --- a/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp +++ b/GraphicsView/demo/Spatial_searching_2/Spatial_searching_2.cpp @@ -272,7 +272,7 @@ MainWindow::open(QString fileName) if(fileName.endsWith(".wkt", Qt::CaseInsensitive)) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) - CGAL::read_multi_point_WKT(ifs, points); + CGAL::IO::read_multi_point_WKT(ifs, points); #endif } else{ diff --git a/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp b/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp index b0e1fb852ec..c52054572e6 100644 --- a/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp +++ b/GraphicsView/demo/Stream_lines_2/Stream_lines_2.cpp @@ -200,7 +200,7 @@ MainWindow::open(QString fileName) do { std::vector ps; - CGAL::read_multi_point_WKT(ifs, ps); + CGAL::IO::read_multi_point_WKT(ifs, ps); if(size == -1) size = static_cast(ps.size()); else if(ps.size() > 0 && size != static_cast(ps.size())) @@ -266,7 +266,7 @@ MainWindow::on_actionSavePoints_triggered() mp[i].push_back(Point_2(regular_grid->get_field(j,i).x(), regular_grid->get_field(j,i).y())); } - CGAL::write_multi_point_WKT(ofs, mp[i]); + CGAL::IO::write_multi_point_WKT(ofs, mp[i]); } ofs.close(); } diff --git a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp index 60dd77c388d..a827b567f5b 100644 --- a/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Constrained_Delaunay_triangulation_2.cpp @@ -24,7 +24,7 @@ #include #include #include -#include +#include #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) #include #endif @@ -571,7 +571,7 @@ MainWindow::loadWKT(QString typedef CGAL::Polygon_with_holes_2 Polygon; typedef CGAL::Point_2 Point; std::vector mps; - CGAL::read_multi_polygon_WKT(ifs, mps); + CGAL::IO::read_multi_polygon_WKT(ifs, mps); for(const Polygon& p : mps) { if(p.outer_boundary().is_empty()) @@ -603,7 +603,7 @@ MainWindow::loadWKT(QString { typedef std::vector LineString; std::vector mls; - CGAL::read_multi_linestring_WKT(ifs, mls); + CGAL::IO::read_multi_linestring_WKT(ifs, mls); for(const LineString& ls : mls) { if(ls.empty()) @@ -641,7 +641,7 @@ MainWindow::loadWKT(QString do { std::vector mpts; - CGAL::read_multi_point_WKT(ifs, mpts); + CGAL::IO::read_multi_point_WKT(ifs, mpts); for(const K::Point_2& p : mpts) { cdt.insert(p); @@ -669,7 +669,7 @@ void MainWindow::loadPolyConstraints(QString fileName) { std::ifstream ifs(qPrintable(fileName)); - read_triangle_poly_file(cdt,ifs); + CGAL::IO::read_triangle_poly_file(cdt,ifs); discoverComponents(cdt, m_seeds); Q_EMIT( changed()); actionRecenter->trigger(); @@ -788,7 +788,7 @@ MainWindow::saveConstraints(QString fileName) output << cdt; else if (output) { - CGAL::write_vtu(output, cdt); + CGAL::IO::write_VTU(output, cdt); } } diff --git a/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp index 9d810c04398..1bed7aeef2c 100644 --- a/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Delaunay_triangulation_2.cpp @@ -344,7 +344,7 @@ MainWindow::open(QString fileName) if(fileName.endsWith(".wkt", Qt::CaseInsensitive)) { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) - CGAL::read_multi_point_WKT(ifs, points); + CGAL::IO::read_multi_point_WKT(ifs, points); #endif } else @@ -388,7 +388,7 @@ MainWindow::on_actionSavePoints_triggered() { points.push_back(vit->point()); } - CGAL::write_multi_point_WKT(ofs, points); + CGAL::IO::write_multi_point_WKT(ofs, points); #endif } else diff --git a/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp b/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp index 483a8ab3d27..c4a18a1e715 100644 --- a/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp +++ b/GraphicsView/demo/Triangulation_2/Regular_triangulation_2.cpp @@ -260,7 +260,7 @@ MainWindow::on_actionLoadPoints_triggered() { #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) std::vector points_3; - CGAL::read_multi_point_WKT(ifs, points_3); + CGAL::IO::read_multi_point_WKT(ifs, points_3); for(const K::Point_3& p : points_3) { points.push_back(Weighted_point_2(K::Point_2(p.x(), p.y()), p.z())); @@ -308,7 +308,7 @@ MainWindow::on_actionSavePoints_triggered() vit->point().y(), vit->point().weight())); } - CGAL::write_multi_point_WKT(ofs, points_3); + CGAL::IO::write_multi_point_WKT(ofs, points_3); #endif } else diff --git a/GraphicsView/include/CGAL/Buffer_for_vao.h b/GraphicsView/include/CGAL/Buffer_for_vao.h index 2be331a35f5..e0af44f8e89 100644 --- a/GraphicsView/include/CGAL/Buffer_for_vao.h +++ b/GraphicsView/include/CGAL/Buffer_for_vao.h @@ -244,7 +244,7 @@ public: // 1.2) Add a point, with color. template - void add_point(const KPoint& kp, const CGAL::Color& c) + void add_point(const KPoint& kp, const CGAL::IO::Color& c) { add_point(kp); add_color(c); @@ -268,7 +268,7 @@ public: // 2.2) Add a segment, with color. template - void add_segment(const KPoint& kp1, const KPoint& kp2, const CGAL::Color& c) + void add_segment(const KPoint& kp1, const KPoint& kp2, const CGAL::IO::Color& c) { add_segment(kp1, kp2); add_color(c); @@ -294,7 +294,7 @@ public: //3.2) Add a ray segment, with color template void add_ray_segment(const KPoint& kp1, const KVector& kp2, - const CGAL::Color& c) + const CGAL::IO::Color& c) { add_point(kp1); add_point_infinity(kp2); @@ -313,7 +313,7 @@ public: // 4.1) Add a line, with color template void add_line_segment(const KPoint& kp1, const KPoint& kp2, - const CGAL::Color& c) + const CGAL::IO::Color& c) { add_point_infinity(kp1); add_point_infinity(kp2); @@ -330,7 +330,7 @@ public: { face_begin_internal(false, false); } // 3.2) Add a face, with a color, without normal. - void face_begin(const CGAL::Color& c) + void face_begin(const CGAL::IO::Color& c) { m_color_of_face=c; face_begin_internal(true, false); @@ -346,7 +346,7 @@ public: // 3.3) Add a face, with a color and with a normal. template - void face_begin(const CGAL::Color& c, const KNormal& kv) + void face_begin(const CGAL::IO::Color& c, const KNormal& kv) { m_color_of_face=c; m_normal_of_face=get_local_vector(kv); @@ -477,7 +477,7 @@ public: } ///adds `acolor` RGB components to `buffer` - static void add_color_in_buffer(const CGAL::Color& acolor, std::vector& buffer) + static void add_color_in_buffer(const CGAL::IO::Color& acolor, std::vector& buffer) { buffer.push_back((float)acolor.red()/(float)255); buffer.push_back((float)acolor.green()/(float)255); @@ -837,7 +837,7 @@ protected: return is_facet_convex(m_points_of_face, N); } - void add_color(const CGAL::Color& acolor) + void add_color(const CGAL::IO::Color& acolor) { if (m_color_buffer!=nullptr) { add_color_in_buffer(acolor, *m_color_buffer); } @@ -917,7 +917,7 @@ protected: std::vector m_points_of_face; std::vector m_vertex_normals_for_face; std::vector m_indices_of_points_of_face; - CGAL::Color m_color_of_face; + CGAL::IO::Color m_color_of_face; Local_vector m_normal_of_face; }; diff --git a/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h b/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h index c2c05f90c53..0d44fbc3356 100644 --- a/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h +++ b/GraphicsView/include/CGAL/Qt/Basic_viewer_qt.h @@ -56,12 +56,12 @@ namespace CGAL { //------------------------------------------------------------------------------ -inline CGAL::Color get_random_color(CGAL::Random& random) +inline CGAL::IO::Color get_random_color(CGAL::Random& random) { - CGAL::Color res; + CGAL::IO::Color res; do { - res=CGAL::Color(random.get_int(0,256), + res=CGAL::IO::Color(random.get_int(0,256), random.get_int(0,256), random.get_int(0,256)); } @@ -318,7 +318,7 @@ public: { m_buffer_for_mono_points.add_point(p); } template - void add_point(const KPoint& p, const CGAL::Color& acolor) + void add_point(const KPoint& p, const CGAL::IO::Color& acolor) { m_buffer_for_colored_points.add_point(p, acolor); } template @@ -327,7 +327,7 @@ public: template void add_segment(const KPoint& p1, const KPoint& p2, - const CGAL::Color& acolor) + const CGAL::IO::Color& acolor) { m_buffer_for_colored_segments.add_segment(p1, p2, acolor); } template @@ -359,7 +359,7 @@ public: } template - void add_ray(const KPoint &p, const KVector &v, const CGAL::Color &acolor) + void add_ray(const KPoint &p, const KVector &v, const CGAL::IO::Color &acolor) { double bigNumber = 1e30; m_buffer_for_colored_rays.add_ray_segment(p, (p + (bigNumber)*v), acolor); @@ -374,7 +374,7 @@ public: } template - void add_line(const KPoint &p, const KVector &v, const CGAL::Color &acolor) + void add_line(const KPoint &p, const KVector &v, const CGAL::IO::Color &acolor) { double bigNumber = 1e30; m_buffer_for_colored_lines.add_line_segment((p - (bigNumber)*v), @@ -412,7 +412,7 @@ public: { m_buffer_for_mono_faces.face_begin(); } } - void face_begin(const CGAL::Color& acolor) + void face_begin(const CGAL::IO::Color& acolor) { if (is_a_face_started()) { @@ -1702,11 +1702,11 @@ protected: double m_size_rays; double m_size_lines; - CGAL::Color m_vertices_mono_color; - CGAL::Color m_edges_mono_color; - CGAL::Color m_rays_mono_color; - CGAL::Color m_lines_mono_color; - CGAL::Color m_faces_mono_color; + CGAL::IO::Color m_vertices_mono_color; + CGAL::IO::Color m_edges_mono_color; + CGAL::IO::Color m_rays_mono_color; + CGAL::IO::Color m_lines_mono_color; + CGAL::IO::Color m_faces_mono_color; QVector4D m_ambient_color; bool m_are_buffers_initialized; diff --git a/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphGraphicsItem.h b/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphGraphicsItem.h index 730d7d7983f..c63945a3adc 100644 --- a/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphGraphicsItem.h +++ b/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphGraphicsItem.h @@ -164,9 +164,9 @@ SegmentDelaunayGraphGraphicsItem::drawAll(QPainter *painter, const QStyleOpti vit != t->finite_vertices_end(); ++vit) { typename T::Site_2 s = vit->site(); if ( s.is_input() ) { - //*widget << CGAL::red(); + //*widget << CGAL::IO::red(); } else { - //*widget << CGAL::yellow(); + //*widget << CGAL::IO::yellow(); } if ( s.is_point() ) { QPointF point = matrix.map(convert(s.point())); diff --git a/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphLinfGraphicsItem.h b/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphLinfGraphicsItem.h index 41a373b584c..a0a83fb7504 100644 --- a/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphLinfGraphicsItem.h +++ b/GraphicsView/include/CGAL/Qt/SegmentDelaunayGraphLinfGraphicsItem.h @@ -199,7 +199,7 @@ SegmentDelaunayGraphLinfGraphicsItem::drawAll(QPainter *painter, const QStyle vit != t->finite_vertices_end(); ++vit) { typename T::Site_2 s = vit->site(); if ( s.is_input() ) { - //*widget << CGAL::red(); + //*widget << CGAL::IO::red(); } else { //*widget << CGAL::yellow(); } diff --git a/HalfedgeDS/doc/HalfedgeDS/CGAL/HalfedgeDS_items_2.h b/HalfedgeDS/doc/HalfedgeDS/CGAL/HalfedgeDS_items_2.h index e2b1cf49d3a..39b806a2412 100644 --- a/HalfedgeDS/doc/HalfedgeDS/CGAL/HalfedgeDS_items_2.h +++ b/HalfedgeDS/doc/HalfedgeDS/CGAL/HalfedgeDS_items_2.h @@ -56,9 +56,9 @@ library. // A face type with a color member variable. template struct My_face : public CGAL::HalfedgeDS_face_base { -CGAL::Color color; +CGAL::IO::Color color; My_face() {} -My_face( CGAL::Color c) : color(c) {} +My_face( CGAL::IO::Color c) : color(c) {} }; // An items type using my face. diff --git a/HalfedgeDS/examples/HalfedgeDS/hds_prog_color.cpp b/HalfedgeDS/examples/HalfedgeDS/hds_prog_color.cpp index 6b294fefe5c..adcfdc0c5fe 100644 --- a/HalfedgeDS/examples/HalfedgeDS/hds_prog_color.cpp +++ b/HalfedgeDS/examples/HalfedgeDS/hds_prog_color.cpp @@ -5,9 +5,9 @@ // A face type with a color member variable. template struct My_face : public CGAL::HalfedgeDS_face_base { - CGAL::Color color; + CGAL::IO::Color color; My_face() {} - My_face( CGAL::Color c) : color(c) {} + My_face( CGAL::IO::Color c) : color(c) {} }; // An items type using my face. @@ -28,8 +28,8 @@ typedef HDS::Face_handle Face_handle; int main() { HDS hds; - Face_handle f = hds.faces_push_back( Face( CGAL::red())); - f->color = CGAL::blue(); - CGAL_assertion( f->color == CGAL::blue()); + Face_handle f = hds.faces_push_back( Face( CGAL::IO::red())); + f->color = CGAL::IO::blue(); + CGAL_assertion( f->color == CGAL::IO::blue()); return 0; } diff --git a/HalfedgeDS/include/CGAL/HalfedgeDS_iterator.h b/HalfedgeDS/include/CGAL/HalfedgeDS_iterator.h index 23d1a135eea..b2bcac25a33 100644 --- a/HalfedgeDS/include/CGAL/HalfedgeDS_iterator.h +++ b/HalfedgeDS/include/CGAL/HalfedgeDS_iterator.h @@ -181,7 +181,7 @@ public: // CREATION // -------- - _HalfedgeDS_facet_circ() : It(0) {} + _HalfedgeDS_facet_circ() : It(nullptr) {} //_HalfedgeDS_facet_circ( pointer p) : It(p) {} _HalfedgeDS_facet_circ( It i) : It(i) {} @@ -200,7 +200,7 @@ public: bool operator!=( const Self& i) const { return !(*this == i); } Self& operator++() { - this->nt = (*this->nt).next(); + this->nt = typename It::Iterator((*this->nt).next()); return *this; } Self operator++(int) { @@ -213,7 +213,7 @@ public: // --------------------------------- Self& operator--() { - this->nt = (*this->nt).prev(); + this->nt = typename It::Iterator((*this->nt).prev()); return *this; } Self operator--(int) { @@ -241,7 +241,7 @@ public: // CREATION // -------- - _HalfedgeDS_facet_const_circ() : It(0) {} + _HalfedgeDS_facet_const_circ() : It(nullptr) {} _HalfedgeDS_facet_const_circ( pointer p) : It(p) {} _HalfedgeDS_facet_const_circ( It i) : It(i) {} @@ -266,7 +266,7 @@ public: bool operator!=( const It& i) const { return !(*this == i); } Self& operator++() { - this->nt = (*this->nt).next(); + this->nt = typename It::Iterator((*this->nt).next()); return *this; } Self operator++(int) { @@ -279,7 +279,7 @@ public: // --------------------------------- Self& operator--() { - this->nt = (*this->nt).prev(); + this->nt = typename It::Iterator((*this->nt).prev()); return *this; } Self operator--(int) { @@ -306,7 +306,7 @@ public: // CREATION // -------- - _HalfedgeDS_vertex_circ() : It(0) {} + _HalfedgeDS_vertex_circ() : It(nullptr) {} //_HalfedgeDS_vertex_circ( pointer p) : It(p) {} _HalfedgeDS_vertex_circ( It i) : It(i) {} @@ -321,11 +321,12 @@ public: return It::operator==( It(nullptr)); } bool operator!=( std::nullptr_t p) const { return !(*this == p); } + bool operator==( const It& i) const { return It::operator==(i); } bool operator==( const Self& i) const { return It::operator==(i); } bool operator!=( const Self& i) const { return !(*this == i); } Self& operator++() { - this->nt = (*this->nt).next()->opposite(); + this->nt = typename It::Iterator((*this->nt).next()->opposite()); return *this; } Self operator++(int) { @@ -338,7 +339,7 @@ public: // --------------------------------- Self& operator--() { - this->nt = (*this->nt).opposite()->prev(); + this->nt = typename It::Iterator((*this->nt).opposite()->prev()); return *this; } Self operator--(int) { @@ -366,7 +367,7 @@ public: // CREATION // -------- - _HalfedgeDS_vertex_const_circ() : It(0) {} + _HalfedgeDS_vertex_const_circ() : It(nullptr) {} _HalfedgeDS_vertex_const_circ( pointer p) : It(p) {} _HalfedgeDS_vertex_const_circ( It i) : It(i) {} @@ -389,7 +390,7 @@ public: bool operator!=( const Self& i) const { return !(*this == i); } Self& operator++() { - this->nt = (*this->nt).next()->opposite(); + this->nt = typename It::Iterator((*this->nt).next()->opposite()); return *this; } Self operator++(int) { @@ -402,7 +403,7 @@ public: // --------------------------------- Self& operator--() { - this->nt = (*this->nt).opposite()->prev(); + this->nt = typename It::Iterator((*this->nt).opposite()->prev()); return *this; } Self operator--(int) { diff --git a/Hash_map/test/Hash_map/include/CGAL/test_macros.h b/Hash_map/test/Hash_map/include/CGAL/test_macros.h index 7ba8334b2f1..369323eab84 100644 --- a/Hash_map/test/Hash_map/include/CGAL/test_macros.h +++ b/Hash_map/test/Hash_map/include/CGAL/test_macros.h @@ -14,7 +14,7 @@ else {} #define CGAL_IO_TEST(datao,datai,iomode) { \ std::stringstream S; \ - CGAL::set_mode(S,iomode); \ + CGAL::IO::set_mode(S,iomode); \ S << datao; \ if ( iomode != CGAL::IO::BINARY) \ S << '\n'; \ diff --git a/Heat_method_3/examples/Heat_method_3/heat_method.cpp b/Heat_method_3/examples/Heat_method_3/heat_method.cpp index dbe02789fdd..430b8c196fa 100644 --- a/Heat_method_3/examples/Heat_method_3/heat_method.cpp +++ b/Heat_method_3/examples/Heat_method_3/heat_method.cpp @@ -17,7 +17,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "./data/elephant.off"; Triangle_mesh tm; - if(!CGAL::read_polygon_mesh(filename, tm) || + if(!CGAL::IO::read_polygon_mesh(filename, tm) || CGAL::is_empty(tm) || !CGAL::is_triangle_mesh(tm)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh.cpp b/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh.cpp index 88e12912805..c056b80da4f 100644 --- a/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh.cpp +++ b/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh.cpp @@ -19,7 +19,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "./data/sphere.off"; Triangle_mesh tm; - if(!CGAL::read_polygon_mesh(filename, tm) || + if(!CGAL::IO::read_polygon_mesh(filename, tm) || CGAL::is_empty(tm) || !CGAL::is_triangle_mesh(tm)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh_direct.cpp b/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh_direct.cpp index 21213768184..ac3e0d4a152 100644 --- a/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh_direct.cpp +++ b/Heat_method_3/examples/Heat_method_3/heat_method_surface_mesh_direct.cpp @@ -21,7 +21,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "./data/elephant.off"; Triangle_mesh tm; - if(!CGAL::read_polygon_mesh(filename, tm) || + if(!CGAL::IO::read_polygon_mesh(filename, tm) || CGAL::is_empty(tm) || !CGAL::is_triangle_mesh(tm)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH2.h b/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH2.h index 3a42574fa9d..a97ca83abf5 100644 --- a/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH2.h +++ b/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH2.h @@ -58,6 +58,11 @@ class Aff_transformation_rep_baseH2 : public Ref_counted_virtual general_form() const = 0; virtual bool is_even() const = 0; + virtual bool is_translation() const { return false; } + virtual bool is_scaling() const { return false; } + virtual bool is_reflection() const { return false; } + virtual bool is_rotation() const { return false; } + virtual RT homogeneous(int i, int j) const = 0; virtual FT cartesian(int i, int j) const = 0; }; @@ -247,6 +252,10 @@ class Translation_repH2 : public Aff_transformation_rep_baseH2 is_even() const { return true; } + virtual bool + is_translation() const + { return true; } + virtual Aff_transformation_repH2 general_form() const { @@ -321,6 +330,11 @@ class Rotation_repH2 : public Aff_transformation_rep_baseH2 { return true; } + + virtual bool + is_rotation() const + { return true; } + virtual Aff_transformation_repH2 general_form() const { @@ -392,6 +406,10 @@ class Scaling_repH2 : public Aff_transformation_rep_baseH2 is_even() const { return true; } + virtual bool + is_scaling() const + { return true; } + virtual Aff_transformation_repH2 general_form() const { @@ -456,6 +474,10 @@ class Reflection_repH2 : public Aff_transformation_rep_baseH2 is_even() const { return false; } + virtual bool + is_reflection() const + { return true; } + virtual Aff_transformation_repH2 general_form() const { @@ -576,6 +598,11 @@ public: bool is_even() const; bool is_odd() const; + bool is_translation() const; + bool is_scaling() const; + bool is_rotation() const; + bool is_reflection() const; + // Access functions for matrix form FT cartesian(int i, int j) const; RT homogeneous(int i, int j) const; @@ -739,6 +766,30 @@ Aff_transformationH2:: is_odd() const { return ! is_even(); } +template < class R > +bool +Aff_transformationH2:: +is_translation() const +{ return this->Ptr()->is_translation(); } + +template < class R > +bool +Aff_transformationH2:: +is_scaling() const +{ return this->Ptr()->is_scaling(); } + +template < class R > +bool +Aff_transformationH2:: +is_rotation() const +{ return this->Ptr()->is_rotation(); } + +template < class R > +bool +Aff_transformationH2:: +is_reflection() const +{ return this->Ptr()->is_reflection(); } + template < class R > inline typename Aff_transformationH2::FT diff --git a/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH3.h b/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH3.h index b67c4f024a3..f269496d79d 100644 --- a/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH3.h +++ b/Homogeneous_kernel/include/CGAL/Homogeneous/Aff_transformationH3.h @@ -82,11 +82,21 @@ public: virtual bool is_even() const = 0; + virtual bool + is_translation() const { return false; } + + virtual bool + is_scaling() const { return false; } + virtual RT homogeneous(int i, int j) const = 0; virtual FT cartesian(int i, int j) const = 0; + + // this function has a default here as it is only used for "pure" scaling and translation + // and not for the other types (Identity and general case) + virtual Aff_transformation_3 compose(const Aff_transformation_rep_baseH3*) const { return Aff_transformation_3(); } }; template < class R_ > @@ -221,6 +231,128 @@ public: { return (i==j) ? FT(1) : FT(0); } }; +template < class R > +class Scaling_repH3 : public Aff_transformation_rep_baseH3 +{ + public: + typedef typename R::RT RT; + typedef typename R::FT FT; + typedef typename R::Point_3 Point_3; + typedef typename R::Vector_3 Vector_3; + typedef typename R::Direction_3 Direction_3; + typedef typename R::Plane_3 Plane_3; + typedef typename R::Aff_transformation_3 Aff_transformation_3; + typedef Aff_transformation_rep_baseH3 Base; + typedef Scaling_repH3 Self; + + Scaling_repH3() + {} + + Scaling_repH3(const RT& scaling_numerator, + const RT& scaling_denominator) : + _sf_num(scaling_numerator), _sf_den(scaling_denominator) + { + if ( scaling_denominator < RT(0) ) + { + _sf_num = - _sf_num; + _sf_den = - _sf_den; + }; + } + + virtual ~Scaling_repH3() + {} + + virtual Point_3 + transform(const Point_3 & p) const + { + return Point_3( p.hx() * _sf_num, + p.hy() * _sf_num, + p.hz() * _sf_num, + p.hw() * _sf_den ); + } + virtual Vector_3 + transform(const Vector_3 & v) const + { + return Vector_3( v.hx() * _sf_num, + v.hy() * _sf_num, + v.hz() * _sf_num, + v.hw() * _sf_den ); + } + + virtual Direction_3 + transform(const Direction_3 & d) const + { return d; } + + virtual Plane_3 + transform(const Plane_3 & p) const + { + return Plane_3(p.a()*_sf_den, p.b()*_sf_den, p.c()*_sf_den, p.d()*_sf_num); + } + + virtual Aff_transformation_3 + inverse() const + { return Aff_transformation_3(SCALING, _sf_den, _sf_num); } + + virtual Aff_transformation_3 + transpose() const + { return Aff_transformation_3(SCALING, _sf_num, _sf_den); } + + virtual bool + is_even() const + { return true; } + + virtual bool + is_scaling() const + { return true; } + + virtual Aff_transformation_repH3 + general_form() const + { + return + Aff_transformation_repH3(_sf_num, RT(0) , RT(0) ,RT(0) , + RT(0) , _sf_num, RT(0) ,RT(0) , + RT(0) , RT(0) , _sf_num,RT(0) , + _sf_den ); + } + + Aff_transformation_3 compose(const Base* aff) const + { + const Self* sr = dynamic_cast(aff); + return Aff_transformation_3(SCALING, _sf_num * sr->_sf_num, _sf_den * sr->_sf_den); + } + + virtual RT homogeneous(int i, int j) const; + virtual FT cartesian(int i, int j) const; + + + private: + RT _sf_num; + RT _sf_den; +}; + + +template < class R > +typename Scaling_repH3::RT +Scaling_repH3:: +homogeneous(int i, int j) const +{ + if(i!=j) return RT(0); + if (i==3) return _sf_den; + return _sf_num; +} + +template +typename Scaling_repH3::FT +Scaling_repH3:: +cartesian(int i, int j) const +{ + if(i!=j) return FT(0); + if (i==3) return FT(1); + return FT(_sf_num) / FT(_sf_den); +} + + + template < class R_ > class Translation_repH3 : public Aff_transformation_rep_baseH3 { @@ -231,6 +363,8 @@ class Translation_repH3 : public Aff_transformation_rep_baseH3 typedef typename R_::Direction_3 Direction_3; typedef typename R_::Plane_3 Plane_3; typedef typename R_::Aff_transformation_3 Aff_transformation_3; + typedef Aff_transformation_rep_baseH3 Base; + typedef Translation_repH3 Self; public: typedef R_ R; @@ -264,12 +398,21 @@ public: virtual bool is_even() const; + virtual bool + is_translation() const; + virtual RT homogeneous(int i, int j) const ; virtual FT cartesian(int i, int j) const ; + Aff_transformation_3 compose(const Base* aff) const + { + const Self* sr = dynamic_cast(aff); + return Aff_transformation_3(TRANSLATION, tv + sr->tv); + } + friend class Aff_transformationH3; private: @@ -340,6 +483,12 @@ public: bool is_odd() const; + bool + is_scaling() const; + + bool + is_translation() const; + FT cartesian(int i, int j) const { return this->Ptr()->cartesian(i,j); } @@ -539,6 +688,7 @@ Aff_transformation_repH3::is_even() const t20, t21, t22 ) ) == POSITIVE ); } + template < class R > CGAL_KERNEL_LARGE_INLINE typename Aff_transformation_repH3::RT @@ -693,6 +843,12 @@ bool Translation_repH3::is_even() const { return true; } +template < class R > +inline +bool +Translation_repH3::is_translation() const +{ return true; } + template < class R > CGAL_KERNEL_LARGE_INLINE typename Translation_repH3::RT @@ -800,11 +956,7 @@ CGAL_KERNEL_INLINE Aff_transformationH3:: Aff_transformationH3(const Scaling&, const RT& num, const RT& den) { - const RT RT0(0); - initialize_with(Aff_transformation_repH3(num, RT0, RT0, RT0, - RT0, num, RT0, RT0, - RT0, RT0, num, RT0, - den )); + initialize_with(Scaling_repH3(num, den )); } template < class R > @@ -890,15 +1042,35 @@ bool Aff_transformationH3::is_odd() const { return ( ! (this->Ptr()->is_even() )); } + +template < class R > +inline +bool +Aff_transformationH3::is_scaling() const +{ return this->Ptr()->is_scaling(); } + +template < class R > +inline +bool +Aff_transformationH3::is_translation() const +{ return this->Ptr()->is_translation(); } + template < class R > CGAL_KERNEL_INLINE Aff_transformationH3 operator*(const Aff_transformationH3& left_argument, const Aff_transformationH3& right_argument ) { - return _general_transformation_composition( - left_argument.Ptr() ->general_form(), - right_argument.Ptr()->general_form() ); + if(left_argument.is_scaling() && right_argument.is_scaling()){ + return left_argument.Ptr()->compose(right_argument.Ptr()); + } + + if(left_argument.is_translation() && right_argument.is_translation()){ + return left_argument.Ptr()->compose(right_argument.Ptr()); + } + + return _general_transformation_composition(left_argument.Ptr() ->general_form(), + right_argument.Ptr()->general_form() ); } template < class R > diff --git a/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_2.h b/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_2.h index 9cc5691df9c..1b422904b90 100644 --- a/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_2.h +++ b/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_2.h @@ -79,7 +79,7 @@ template < class R_ > std::ostream & operator<<(std::ostream &os, const Weighted_pointH2 &p) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.point() << " " << p.weight(); @@ -100,7 +100,7 @@ operator>>(std::istream &is, Weighted_pointH2 &wp) typename Weighted_pointH2::Point_2 p; is >> p; if(!is) return is; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> w; else read(is, w); diff --git a/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_3.h b/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_3.h index 6d9c5bf6e4b..6c32feaf000 100644 --- a/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_3.h +++ b/Homogeneous_kernel/include/CGAL/Homogeneous/Weighted_point_3.h @@ -79,7 +79,7 @@ template < class R_ > std::ostream & operator<<(std::ostream &os, const Weighted_pointH3 &p) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.point() << " " << p.weight(); @@ -100,7 +100,7 @@ operator>>(std::istream &is, Weighted_pointH3 &wp) typename Weighted_pointH3::Point_3 p; is >> p; if(!is) return is; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> w; else read(is, w); diff --git a/Hyperbolic_triangulation_2/examples/Hyperbolic_triangulation_2/ht2_example_color.cpp b/Hyperbolic_triangulation_2/examples/Hyperbolic_triangulation_2/ht2_example_color.cpp index 59c1bec4a73..6108168f301 100644 --- a/Hyperbolic_triangulation_2/examples/Hyperbolic_triangulation_2/ht2_example_color.cpp +++ b/Hyperbolic_triangulation_2/examples/Hyperbolic_triangulation_2/ht2_example_color.cpp @@ -12,7 +12,7 @@ typedef CGAL::Hyperbolic_Delaunay_triangulation_CK_traits_2<> Gt; typedef CGAL::Hyperbolic_triangulation_face_base_2 Hyperbolic_face_base; -typedef CGAL::Triangulation_face_base_with_info_2 Face_base_with_info; typedef CGAL::Triangulation_vertex_base_2 Vertex_base; typedef CGAL::Triangulation_data_structure_2has_vertex(vo)) { - fit->info() = CGAL::red(); + fit->info() = CGAL::IO::red(); origin_faces++; } } @@ -57,7 +57,7 @@ int main(int argc, char** argv) int red_faces = 0; for(fit = dt.hyperbolic_faces_begin(); fit != dt.hyperbolic_faces_end(); ++fit) { - if(fit->info() == CGAL::red()) + if(fit->info() == CGAL::IO::red()) { red_faces++; } diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index a957cb408c7..dd07172543d 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -7,8 +7,7 @@ Release date: December 2021 ### [Polygon Mesh Processing](https://doc.cgal.org/5.4/Manual/packages.html#PkgPolygonMeshProcessing) -- Added the function `CGAL::Polygon_mesh_processing::match_faces()` that given two polygon meshes identifies faces present in only one of the two meshes as well as faces present in both. - +- Added the function `CGAL::Polygon_mesh_processing::match_faces()`, which, given two polygon meshes, identifies their common faces as well as as faces present in only either of them. [Release 5.3](https://github.com/CGAL/cgal/releases/tag/v5.3) ----------- @@ -34,6 +33,10 @@ Release date: June 2021 A comprehensive list of the supported file formats is available in the Stream_support package [here](https://doc.cgal.org/5.3/Stream_support/index.html#IOstreamSupportedFormats); inversely, the following [page](https://doc.cgal.org/5.3/Stream_support/IOStreamSupportedFileFormats.html) can be used to find out which CGAL data structures can be used given a specific file format. +### [2D and 3D Linear Geometry Kernel](https://doc.cgal.org/5.3/Manual/packages.html#PkgKernel23) + +- Added functions to the classes `Aff_transformation_2` and `Aff_transformation_3`, which enable to determine if they internally have a specialized representation. + ### [Quadtrees, Octrees, and Orthtrees](https://doc.cgal.org/5.3/Manual/packages.html#PkgOrthree) (new package) - This package implements a tree data structure in which each node @@ -464,7 +467,7 @@ Release date: November 2019 - LLVM Clang version 8.0 or later (on Linux or MacOS), and - Apple Clang compiler versions 7.0.2 and 10.0.1 (on MacOS). - Since CGAL 4.9, CGAL can be used as a header-only library, with - dependencies. Since CGAL 5.0, that is now the default, unless + dependencies. Since CGAL 5.0, that is now the default, unless specified differently in the (optional) CMake configuration. - The section "Getting Started with CGAL" of the documentation has been updated and reorganized. @@ -610,7 +613,7 @@ Release date: November 2019 - Added a function to convert a Nef_polyhedron_3 to a polygon soup: [`CGAL::convert_nef_polyhedron_to_polygon_soup()`](https://doc.cgal.org/5.0/Nef_3/group__PkgNef3IOFunctions.html#ga28a9eb4da0cd6153f0c16f7f9eaf6665) ### [IO Streams](https://doc.cgal.org/5.0/Manual/packages.html#PkgStreamSupport) -- **Breaking change:** The API of [`CGAL::Color`](https://doc.cgal.org/5.0/Stream_support/classCGAL_1_1Color.html) has been cleaned up. +- **Breaking change:** The API of [`CGAL::IO::Color`](https://doc.cgal.org/5.0/Stream_support/classCGAL_1_1Color.html) has been cleaned up. - Added new functions to support some parts of the WKT file format: * [`CGAL::read_WKT()`](https://doc.cgal.org/5.0/Stream_support/group__PkgStreamSupportRef.html#gad2872abfe6fcf17d705d38567fdd6248) * [`CGAL::read_point_WKT()`](https://doc.cgal.org/5.0/Stream_support/group__PkgStreamSupportRef.html#gadbd2705b183e467507abd2f167446eba) @@ -2304,14 +2307,14 @@ Release date: October 2014 - Changes in the set of supported platforms: - The Microsoft Windows Visual C++ compiler 2008 (VC9) is no longer supported since CGAL-4.5. -- Since CGAL version 4.0, Eigen was the recommended third-party +- Since CGAL version 4.0, Eigen was the recommended third-party library to use with *Planar Parameterization of Triangulated Surface Meshes*, *Surface Reconstruction from Point Sets*, *Approximation of Ridges and Umbilics on Triangulated Surface Meshes*, and *Estimation of Local Differential Properties of Point-Sampled Surfaces* - packages. From CGAL version 4.5, Taucs, Blas and Lapack are no + packages. From CGAL version 4.5, Taucs, Blas and Lapack are no longer supported. -- CGAL is now compatible with the new CMake version 3.0. +- CGAL is now compatible with the new CMake version 3.0. ### Triangulated Surface Mesh Deformation (new package) @@ -2450,7 +2453,7 @@ Release date: April 2014 - Additional supported platforms: - The Apple Clang compiler version 5.0 is now supported on - OS X Mavericks. + OS X Mavericks. - The Microsoft Windows Visual C++ compiler 2013 (VC12) is now supported. @@ -2588,7 +2591,7 @@ Release date: October 2013 transparent to the user thanks to the implicit constructor added to `CGAL::Object`. However, it is recommended to upgrade your code. The previous behavior can be restored by defining the macro - `CGAL_INTERSECTION_VERSION` to 1. + `CGAL_INTERSECTION_VERSION` to 1. #### 2D Arrangements @@ -2849,7 +2852,7 @@ Release date: October 2012 - Additional supported platforms: - The Apple Clang compiler versions 3.1 and 3.2 are now supported - on Mac OS X. + on Mac OS X. - Improved configuration for essential and optional external third party software - Added more general script to create CMakeLists.txt files: diff --git a/Installation/cmake/modules/FindTBB.cmake b/Installation/cmake/modules/FindTBB.cmake index 23caa1cbf9a..2a0af128346 100644 --- a/Installation/cmake/modules/FindTBB.cmake +++ b/Installation/cmake/modules/FindTBB.cmake @@ -189,6 +189,11 @@ endmacro() # Now to actually find TBB # +#start with CONFIG Mode +find_package(TBB QUIET NO_MODULE) +if(TBB_FOUND) + return() +endif()#TBB_FOUND # Get path, convert backslashes as ${ENV_${var}} getenv_path(TBB_ROOT) diff --git a/Installation/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_fwd.h b/Installation/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_fwd.h index d0202553abc..6d644faa1ec 100644 --- a/Installation/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_fwd.h +++ b/Installation/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_fwd.h @@ -13,6 +13,8 @@ /// \file Mesh_complex_3_in_triangulation_3_fwd.h /// Forward declarations of the Mesh_3 package. +#include + #ifndef DOXYGEN_RUNNING namespace CGAL { diff --git a/Installation/include/CGAL/atomic.h b/Installation/include/CGAL/atomic.h index 5c92b46fd2a..da0a5c1c0a2 100644 --- a/Installation/include/CGAL/atomic.h +++ b/Installation/include/CGAL/atomic.h @@ -10,6 +10,9 @@ #ifndef CGAL_ATOMIC_H #define CGAL_ATOMIC_H +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_REPLACEMENT_HEADER "" + #include #ifdef CGAL_HAS_THREADS diff --git a/Installation/include/CGAL/config.h b/Installation/include/CGAL/config.h index 76d6fd9366c..037042875aa 100644 --- a/Installation/include/CGAL/config.h +++ b/Installation/include/CGAL/config.h @@ -623,6 +623,9 @@ using std::max; # include # include # include +# include +# include +# include // namespace CGAL { // @@ -641,6 +644,16 @@ namespace CGAL { using std::is_enum; using std::unordered_set; using std::unordered_map; + using std::atomic; + using std::memory_order_relaxed; + using std::memory_order_consume; + using std::memory_order_acquire; + using std::memory_order_release; + using std::memory_order_acq_rel; + using std::memory_order_seq_cst; + using std::atomic_thread_fence; + using std::thread; + } // namespace cpp0x = cpp11; @@ -652,15 +665,17 @@ namespace CGAL { // Typedef for the type of nullptr. typedef const void * Nullptr_t; // Anticipate C++0x's std::nullptr_t - +namespace cpp11{ +#if CGAL_CXX20 || __cpp_lib_is_invocable>=201703L + template class result_of; + template + class result_of : public std::invoke_result { }; +#else + using std::result_of; +#endif +}//namespace cpp11 } //namespace CGAL -//Support for c++11 noexcept -#if BOOST_VERSION > 104600 && !defined(BOOST_NO_CXX11_NOEXCEPT) && !defined(BOOST_NO_NOEXCEPT) -#define CGAL_NOEXCEPT(x) noexcept(x) -#else -#define CGAL_NOEXCEPT(x) -#endif // The fallthrough attribute // See for clang: @@ -684,12 +699,6 @@ typedef const void * Nullptr_t; // Anticipate C++0x's std::nullptr_t #define CGAL_CFG_BOOST_VARIANT_SWAP_BUG 1 #endif -#ifndef CGAL_NO_ASSERTIONS -# define CGAL_NO_ASSERTIONS_BOOL false -#else -# define CGAL_NO_ASSERTIONS_BOOL true -#endif - #if defined( __INTEL_COMPILER) #define CGAL_ADDITIONAL_VARIANT_FOR_ICL ,int #else diff --git a/Installation/test/Installation/test_gmp_mpfr_dll.cpp b/Installation/test/Installation/test_gmp_mpfr_dll.cpp index 89f7684d370..3f407098996 100644 --- a/Installation/test/Installation/test_gmp_mpfr_dll.cpp +++ b/Installation/test/Installation/test_gmp_mpfr_dll.cpp @@ -7,6 +7,8 @@ int main() { #define GMP_SONAME "libgmp-10" #define MPFR_SONAME "libmpfr-4" +#define GMP_SONAME_BACKUP "gmp" +#define MPFR_SONAME_BACKUP "mpfr-6" #define GMP_MAJOR 5 #define MPFR_MAJOR 3 @@ -44,7 +46,7 @@ bool get_version_info(const LPCTSTR name, { delete[] versionInfo; std::cerr << name << " has no VersionInfo!\n"; - return false; + return true; } // we have version information UINT len = 0; @@ -63,7 +65,9 @@ int main() { std::cout << "Hello MPFR version " << mpfr_get_version() << std::endl; int major, minor, patch, build; if(!get_version_info(GMP_SONAME, major, minor, patch, build)) { - return 1; + if(!get_version_info(GMP_SONAME_BACKUP, major, minor, patch, build)) { + return 1; + } } std::cout << "GMP version " @@ -71,16 +75,16 @@ int main() { << minor << "." << patch << "." << build << "\n"; - assert(major==GMP_MAJOR); major = 0; if(!get_version_info(MPFR_SONAME, major, minor, patch, build)) { - return 1; + if(!get_version_info(MPFR_SONAME_BACKUP, major, minor, patch, build)) { + return 1; + } } std::cout << "MPFR version " << major << "." << minor << "." << patch << "." << build << "\n"; - assert(major==MPFR_MAJOR); } #endif diff --git a/Interpolation/demo/Interpolation/interpolation_2_demo.cpp b/Interpolation/demo/Interpolation/interpolation_2_demo.cpp index 13b8a7331b7..9fd09814a58 100644 --- a/Interpolation/demo/Interpolation/interpolation_2_demo.cpp +++ b/Interpolation/demo/Interpolation/interpolation_2_demo.cpp @@ -270,7 +270,7 @@ int main(int , char** ) //viewer CGAL::Geomview_stream gv(CGAL::Bbox_3(0,0,0, 2, 2, 2)); - gv.set_bg_color(CGAL::Color(0, 200, 200)); + gv.set_bg_color(CGAL::IO::Color(0, 200, 200)); gv.clear(); gv.set_line_width(2); @@ -278,14 +278,14 @@ int main(int , char** ) std::cout << "The data points are displayed in blue in the geomview" << " application." << std::endl; - gv << CGAL::blue(); + gv << CGAL::IO::blue(); visu_points(gv,sample_3); //show the gradients if(method>0){ std::cout << "The function gradients are displayed by red lines " <<" in the geomview application." << std::endl; - gv < #include #include - +#include #include namespace CGAL { @@ -239,7 +239,7 @@ intersection_point(const typename K::Plane_3 &plane1, const FT den = minor_0*m22 - minor_1*m12 + minor_2*m02; // determinant of M - if(den == FT(0)){ + if(is_zero(den)){ return boost::none; } @@ -379,7 +379,7 @@ intersection(const typename K::Line_3 &l1, const Vector_3 v3v2 = cross_product(v3,v2); const Vector_3 v1v2 = cross_product(v1,v2); const FT sl = v1v2.squared_length(); - if(certainly(sl == FT(0))) + if(certainly(is_zero(sl))) return intersection_return(); const FT t = ((v3v2.x()*v1v2.x()) + (v3v2.y()*v1v2.y()) + (v3v2.z()*v1v2.z())) / sl; @@ -523,6 +523,7 @@ do_intersect(const typename K::Segment_3 &s1, return false; } + template typename Intersection_traits::result_type intersection(const typename K::Line_3 &l, @@ -853,9 +854,9 @@ do_intersect(const typename K::Plane_3 &p, typedef typename K::FT FT; const FT d2 = CGAL::square(p.a()*s.center().x() + p.b()*s.center().y() + - p.c()*s.center().z() + p.d()) / - (square(p.a()) + square(p.b()) + square(p.c())); - return d2 <= s.squared_radius(); + p.c()*s.center().z() + p.d()); + + return d2 <= s.squared_radius() * (square(p.a()) + square(p.b()) + square(p.c())); } template @@ -967,20 +968,15 @@ template bool do_intersect(const typename K::Plane_3 &plane, const typename K::Ray_3 &ray, - const K& k) + const K& ) { - typedef typename K::Point_3 Point_3; + typename K::Oriented_side_3 oriented_side_3; - typename Intersection_traits - ::result_type - line_intersection = internal::intersection(plane, ray.supporting_line(), k); - - if(!line_intersection) - return false; - if(const Point_3 *isp = intersect_get(line_intersection)) - return ray.collinear_has_on(*isp); - - return true; + Oriented_side os = oriented_side_3(plane,ray.source()); + if(os == ON_ORIENTED_BOUNDARY){ + return true; + } + return sign(ray.to_vector()* plane.orthogonal_vector()) * os == -1; } @@ -1642,38 +1638,171 @@ template inline bool do_intersect(const Plane_3& plane1, const Plane_3& plane2, const R&) { - return bool(intersection(plane1, plane2)); + typedef typename R::RT RT; + const RT &a = plane1.a(); + const RT &b = plane1.b(); + const RT &c = plane1.c(); + const RT &d = plane1.d(); + const RT &p = plane2.a(); + const RT &q = plane2.b(); + const RT &r = plane2.c(); + const RT &s = plane2.d(); + + RT det = a*q-p*b; + if (det != 0) { + return true; + } + det = a*r-p*c; + if (det != 0) { + return true; + } + det = b*r-c*q; + if (det != 0) { + return true; + } +// degenerate case + if (a!=0 || p!=0) { + return (a*s == p*d); + } + if (b!=0 || q!=0) { + return (b*s == q*d); + } + if (c!=0 || r!=0) { + return (c*s == r*d); + } + return true; } template inline bool do_intersect(const Plane_3 &plane1, const Plane_3 &plane2, - const Plane_3 &plane3, const R& r) + const Plane_3 &plane3, const R&) { - return bool(intersection(plane1, plane2, plane3, r)); + typedef typename R::RT RT; + + if(! is_zero(determinant(plane1.a(), plane1.b(), plane1.c(), + plane2.a(), plane2.b(), plane2.c(), + plane3.a(), plane3.b(), plane3.c()))){ + return true; + } + + int pcount = 0; + bool b12, b13,b23; + if((b12 = parallel(plane1,plane2))) pcount++; + if((b13 = parallel(plane1,plane3))) pcount++; + if((b23 = parallel(plane2,plane3))) pcount++; + + if(pcount == 3){ + return (( (plane1 == plane2) || (plane1 == plane2.opposite())) && ( (plane1 == plane3) || (plane1 == plane3.opposite()))); + } + + if(pcount == 1){ + if(b12 && ((plane1 == plane2)||(plane1 == plane2.opposite() ))) return true; + if(b13 && ((plane1 == plane3)||(plane1 == plane3.opposite() ))) return true; + if(b23 && ((plane2 == plane3)||(plane2 == plane3.opposite() ))) return true; + } + + int rd = rank_34(plane1.a(), plane1.b(), plane1.c(), plane1.d(), + plane2.a(), plane2.b(), plane2.c(), plane2.d(), + plane3.a(), plane3.b(), plane3.c(), plane3.d()); + + return rd == 2; } template inline bool -do_intersect(const Iso_cuboid_3 &i, const Iso_cuboid_3 &j, const R&) +do_intersect(const Iso_cuboid_3 &icub1, const Iso_cuboid_3 &icub2, const R&) { - return bool(CGAL::intersection(i, j)); + typedef typename R::Point_3 Point_3; + + Point_3 min_points[2]; + Point_3 max_points[2]; + min_points[0] = (icub1.min)(); + min_points[1] = (icub2.min)(); + max_points[0] = (icub1.max)(); + max_points[1] = (icub2.max)(); + const int DIM = 3; + int min_idx[DIM]; + int max_idx[DIM]; + Point_3 newmin; + Point_3 newmax; + for (int dim = 0; dim < DIM; ++dim) { + min_idx[dim] = + min_points[0].cartesian(dim) >= min_points[1].cartesian(dim) ? 0 : 1; + max_idx[dim] = + max_points[0].cartesian(dim) <= max_points[1].cartesian(dim) ? 0 : 1; + if (min_idx[dim] != max_idx[dim] + && max_points[max_idx[dim]].cartesian(dim) + < min_points[min_idx[dim]].cartesian(dim)) + return false; + } + return true; + } template inline bool -do_intersect(const Line_3 &l, const Iso_cuboid_3 &j, const R&) +do_intersect(const Line_3 &line, const Iso_cuboid_3 &box, const R&) { - return bool(CGAL::intersection(l, j)); + typedef typename R::Point_3 Point_3; + typedef typename R::Vector_3 Vector_3; + typedef typename R::FT FT; + bool all_values = true; + FT _min = 0, _max = 0; // initialization to stop compiler warning + FT _denum; + Point_3 const & _ref_point=line.point(); + Vector_3 const & _dir=line.direction().vector(); + Point_3 const & _iso_min=(box.min)(); + Point_3 const & _iso_max=(box.max)(); + for (int i=0; i< _ref_point.dimension(); i++) { + if (_dir.homogeneous(i) == 0) { + if (_ref_point.cartesian(i) < _iso_min.cartesian(i)) { + return false; + } + if (_ref_point.cartesian(i) > _iso_max.cartesian(i)) { + return false; + } + } else { + FT newmin, newmax; + FT newdenum = _dir.cartesian(i); + if (_dir.homogeneous(i) > 0) { + newmin = (_iso_min.cartesian(i) - _ref_point.cartesian(i)); + newmax = (_iso_max.cartesian(i) - _ref_point.cartesian(i)); + } else { + newmin = (_iso_max.cartesian(i) - _ref_point.cartesian(i)); + newmax = (_iso_min.cartesian(i) - _ref_point.cartesian(i)); + } + if (all_values) { + _min = newmin; + _max = newmax; + _denum = newdenum; + } else { + + if (compare_quotients(newmin, newdenum, _min, _denum) == LARGER) + _min = newmin; + if (compare_quotients(newmax, newdenum, _max, _denum) == LARGER) + _max = newmax; + if (compare_quotients(_max, _denum, _min, _denum) == SMALLER) { + return false; + } + _denum = newdenum; + + } + all_values = false; + } + } + CGAL_kernel_assertion(!all_values); + return true; } + template inline bool -do_intersect(const Iso_cuboid_3 &j, const Line_3 &l, const R&) +do_intersect(const Iso_cuboid_3 &j, const Line_3 &l, const R& r) { - return bool(CGAL::intersection(l, j)); + return do_intersect(l, j, r); } } // namespace internal } // namespace Intersections diff --git a/Intersections_3/test/Intersections_3/bbox_other_do_intersect_test.cpp b/Intersections_3/test/Intersections_3/bbox_other_do_intersect_test.cpp index cbb17fc2f35..29debe09068 100644 --- a/Intersections_3/test/Intersections_3/bbox_other_do_intersect_test.cpp +++ b/Intersections_3/test/Intersections_3/bbox_other_do_intersect_test.cpp @@ -243,7 +243,7 @@ bool test_case(const FT& px, const FT& py, const FT& pz, { if(!exactness_issue || exact_k) { b = false; - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cerr); std::cerr.precision(17); std::cerr << "Wrong result for do_intersect(" << Bbox_3(bxmin, bymin, bzmin, diff --git a/Intersections_3/test/Intersections_3/test_intersections_3.cpp b/Intersections_3/test/Intersections_3/test_intersections_3.cpp index f93026b3d11..b8953c92b8b 100644 --- a/Intersections_3/test/Intersections_3/test_intersections_3.cpp +++ b/Intersections_3/test/Intersections_3/test_intersections_3.cpp @@ -1,5 +1,8 @@ // 3D intersection tests. +// We want to check that no division is performed for interface macro Do_intersect_3_RT +#define CGAL_NO_MPZF_DIVISION_OPERATOR + #include #include #include @@ -542,7 +545,7 @@ struct Test { if(b != b_tree) { std::stringstream err_msg; err_msg.precision(17); - CGAL::set_pretty_mode(err_msg); + CGAL::IO::set_pretty_mode(err_msg); err_msg << "do_intersect(\n" << " " << unit_bbox << "\n,\n" << " " << tr diff --git a/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp b/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp index 0945986b171..2f39fdad0f2 100644 --- a/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp +++ b/Jet_fitting_3/examples/Jet_fitting_3/Mesh_estimation.cpp @@ -198,7 +198,7 @@ std::cerr << "res4openGL_fname" << res4openGL_fname << std::endl; verbose_fname = w_if_name + ".verb.txt"; out_verbose.open(verbose_fname.c_str(), std::ios::out); assert(out_verbose.good()); - CGAL::set_pretty_mode(out_verbose); + CGAL::IO::set_pretty_mode(out_verbose); } unsigned int nb_vertices_considered = 0;//count vertices for verbose diff --git a/Jet_fitting_3/examples/Jet_fitting_3/Single_estimation.cpp b/Jet_fitting_3/examples/Jet_fitting_3/Single_estimation.cpp index 2b8d10999ec..cd4a53291fd 100644 --- a/Jet_fitting_3/examples/Jet_fitting_3/Single_estimation.cpp +++ b/Jet_fitting_3/examples/Jet_fitting_3/Single_estimation.cpp @@ -52,7 +52,7 @@ int main(int argc, char *argv[]) monge_form = monge_fit(in_points.begin(), in_points.end(), d_fitting, d_monge); //OUTPUT on std::cout - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); std::cout << "vertex : " << in_points[0] << std::endl << "number of points used : " << in_points.size() << std::endl << monge_form; diff --git a/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_2.h b/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_2.h index fef888b81d2..0300279b5ee 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_2.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_2.h @@ -273,6 +273,26 @@ returns `true`, if the transformation is reflecting. */ bool is_odd() const; +/*! +returns `true`, if the object was constructed using the tag `CGAL::Scaling`, or is the result of the composition of only such scaling transformation objects. +*/ +bool is_scaling() const; + +/*! +returns `true`, if the object was constructed using the tag `CGAL::Translation`, or is the result of the composition of only such translation transformation objects. +*/ +bool is_translation() const; + +/*! +returns `true`, if the object was constructed using the tag `CGAL::Rotation`, or is the result of the composition of only such rotation transformation objects. +*/ +bool is_rotation() const; + +/*! +returns `true`, if the object was constructed using the tag `CGAL::Reflection`, or is the result of the composition of only such reflection transformation objects. +*/ +bool is_reflection() const; + /// @} /// \name Matrix Entry Access diff --git a/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_3.h b/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_3.h index 7d3889def8c..cfb2c924cb8 100644 --- a/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_3.h +++ b/Kernel_23/doc/Kernel_23/CGAL/Aff_transformation_3.h @@ -199,6 +199,17 @@ returns `true`, if the transformation is reflecting. */ bool is_odd() const; +/*! +returns `true`, if the object was constructed using the tag `CGAL::Scaling`, or is the result of the composition of only such scaling transformation objects. +*/ +bool is_scaling() const; + +/*! +returns `true`, if the object was constructed using the tag `CGAL::Translation`, or is the result of the composition of only such translation transformation objects. +*/ +bool is_translation() const; + + /// @} /// \name Matrix Entry Access diff --git a/Kernel_23/examples/Kernel_23/MyPointC2_iostream.h b/Kernel_23/examples/Kernel_23/MyPointC2_iostream.h index 9e0365ebd15..76473c6264c 100644 --- a/Kernel_23/examples/Kernel_23/MyPointC2_iostream.h +++ b/Kernel_23/examples/Kernel_23/MyPointC2_iostream.h @@ -4,7 +4,7 @@ std::ostream & operator<<(std::ostream &os, const MyPointC2 &p) { - switch(CGAL::get_mode(os)) { + switch(CGAL::IO::get_mode(os)) { case CGAL::IO::ASCII : return os << p.x() << ' ' << p.y() << ' ' << p.color(); case CGAL::IO::BINARY : @@ -24,7 +24,7 @@ operator>>(std::istream &is, MyPointC2 &p) { double x, y; int c; - switch(CGAL::get_mode(is)) { + switch(CGAL::IO::get_mode(is)) { case CGAL::IO::ASCII : is >> x >> y >> c; break; diff --git a/Kernel_23/examples/Kernel_23/MySegmentC2.h b/Kernel_23/examples/Kernel_23/MySegmentC2.h index bca24c85bc9..903cb5a5b89 100644 --- a/Kernel_23/examples/Kernel_23/MySegmentC2.h +++ b/Kernel_23/examples/Kernel_23/MySegmentC2.h @@ -224,7 +224,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const MySegmentC2 &s) { - switch(CGAL::get_mode(os)) { + switch(CGAL::IO::get_mode(os)) { case CGAL::IO::ASCII : return os << s.source() << ' ' << s.target(); case CGAL::IO::BINARY : diff --git a/Kernel_23/include/CGAL/Bbox_2.h b/Kernel_23/include/CGAL/Bbox_2.h index cb84444425a..e3e118f9240 100644 --- a/Kernel_23/include/CGAL/Bbox_2.h +++ b/Kernel_23/include/CGAL/Bbox_2.h @@ -176,7 +176,7 @@ inline std::ostream& operator<<(std::ostream &os, const Bbox_2 &b) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << b.xmin() << ' ' << b.ymin() << ' ' << b.xmax() << ' ' << b.ymax(); @@ -205,9 +205,9 @@ operator>>(std::istream &is, Bbox_2 &b) double xmax = 0; double ymax = 0; - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(xmin) >> iformat(ymin) >> iformat(xmax) >> iformat(ymax); + is >> IO::iformat(xmin) >> IO::iformat(ymin) >> IO::iformat(xmax) >> IO::iformat(ymax); break; case IO::BINARY : read(is, xmin); diff --git a/Kernel_23/include/CGAL/Bbox_3.h b/Kernel_23/include/CGAL/Bbox_3.h index 2f5b6e49425..a013e041291 100644 --- a/Kernel_23/include/CGAL/Bbox_3.h +++ b/Kernel_23/include/CGAL/Bbox_3.h @@ -205,7 +205,7 @@ inline std::ostream& operator<<(std::ostream &os, const Bbox_3& b) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << b.xmin() << ' ' << b.ymin() << ' ' << b.zmin() @@ -241,11 +241,11 @@ operator>>(std::istream &is, Bbox_3& b) double ymax = 0; double zmax = 0; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(xmin) >> iformat(ymin) >> iformat(zmin) - >> iformat(xmax) >> iformat(ymax) >> iformat(zmax); + is >> IO::iformat(xmin) >> IO::iformat(ymin) >> IO::iformat(zmin) + >> IO::iformat(xmax) >> IO::iformat(ymax) >> IO::iformat(zmax); break; case IO::BINARY : read(is, xmin); diff --git a/Kernel_23/include/CGAL/Circle_2.h b/Kernel_23/include/CGAL/Circle_2.h index a1cc8092654..a94c4f2f598 100644 --- a/Kernel_23/include/CGAL/Circle_2.h +++ b/Kernel_23/include/CGAL/Circle_2.h @@ -221,7 +221,7 @@ template std::ostream& insert(std::ostream& os, const Circle_2& c) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << c.center() << ' ' << c.squared_radius() << ' ' << static_cast(c.orientation()); @@ -264,9 +264,9 @@ extract(std::istream& is, Circle_2& c) typename R::Point_2 center; typename R::FT squared_radius(0); int o=0; - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> center >> iformat(squared_radius) >> o; + is >> center >> IO::iformat(squared_radius) >> o; break; case IO::BINARY : is >> center; diff --git a/Kernel_23/include/CGAL/Direction_2.h b/Kernel_23/include/CGAL/Direction_2.h index 37f1196d794..9d512db64de 100644 --- a/Kernel_23/include/CGAL/Direction_2.h +++ b/Kernel_23/include/CGAL/Direction_2.h @@ -180,7 +180,7 @@ std::ostream& insert(std::ostream& os, const Direction_2& d, const Cartesian_tag&) { typename R::Vector_2 v = d.to_vector(); - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << v.x() << ' ' << v.y(); case IO::BINARY : @@ -196,7 +196,7 @@ template std::ostream& insert(std::ostream& os, const Direction_2& d, const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << d.dx() << ' ' << d.dy(); @@ -223,9 +223,9 @@ std::istream& extract(std::istream& is, Direction_2& d, const Cartesian_tag&) { typename R::FT x(0), y(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y); + is >> IO::iformat(x) >> IO::iformat(y); break; case IO::BINARY : read(is, x); @@ -247,10 +247,10 @@ std::istream& extract(std::istream& is, Direction_2& d, const Homogeneous_tag&) { typename R::RT x, y; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y); + is >> IO::iformat(x) >> IO::iformat(y); break; case IO::BINARY : read(is, x); diff --git a/Kernel_23/include/CGAL/Direction_3.h b/Kernel_23/include/CGAL/Direction_3.h index 77be97c63be..aedb284da3f 100644 --- a/Kernel_23/include/CGAL/Direction_3.h +++ b/Kernel_23/include/CGAL/Direction_3.h @@ -133,7 +133,7 @@ std::ostream& insert(std::ostream& os, const Direction_3& d, const Cartesian_tag&) { typename R::Vector_3 v = d.to_vector(); - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << v.x() << ' ' << v.y() << ' ' << v.z(); case IO::BINARY : @@ -151,7 +151,7 @@ template std::ostream& insert(std::ostream& os, const Direction_3& d, const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << d.dx() << ' ' << d.dy() << ' ' << d.dz(); @@ -180,9 +180,9 @@ std::istream& extract(std::istream& is, Direction_3& d, const Cartesian_tag&) { typename R::FT x(0), y(0), z(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y) >> iformat(z); + is >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(z); break; case IO::BINARY : read(is, x); @@ -205,10 +205,10 @@ std::istream& extract(std::istream& is, Direction_3& d, const Homogeneous_tag&) { typename R::RT x, y, z; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y) >> iformat(z); + is >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(z); break; case IO::BINARY : read(is, x); diff --git a/Kernel_23/include/CGAL/Iso_cuboid_3.h b/Kernel_23/include/CGAL/Iso_cuboid_3.h index 9c241a184ec..6a004ca5ce1 100644 --- a/Kernel_23/include/CGAL/Iso_cuboid_3.h +++ b/Kernel_23/include/CGAL/Iso_cuboid_3.h @@ -231,7 +231,7 @@ template < class R > std::ostream & operator<<(std::ostream& os, const Iso_cuboid_3& r) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << (r.min)() << ' ' << (r.max)(); case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Iso_rectangle_2.h b/Kernel_23/include/CGAL/Iso_rectangle_2.h index 10041882ce5..5929236e1a1 100644 --- a/Kernel_23/include/CGAL/Iso_rectangle_2.h +++ b/Kernel_23/include/CGAL/Iso_rectangle_2.h @@ -222,7 +222,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Iso_rectangle_2 &r) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << (r.min)() << ' ' << (r.max)(); case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Kernel/interface_macros.h b/Kernel_23/include/CGAL/Kernel/interface_macros.h index 668749ff3d5..8604fd1e20c 100644 --- a/Kernel_23/include/CGAL/Kernel/interface_macros.h +++ b/Kernel_23/include/CGAL/Kernel/interface_macros.h @@ -496,8 +496,8 @@ CGAL_Kernel_pred(Counterclockwise_in_between_2, counterclockwise_in_between_2_object) CGAL_Kernel_pred(Do_intersect_2, do_intersect_2_object) -CGAL_Kernel_pred(Do_intersect_3, - do_intersect_3_object) +CGAL_Kernel_pred_RT(Do_intersect_3, + do_intersect_3_object) CGAL_Kernel_pred(Equal_xy_3, equal_xy_3_object) CGAL_Kernel_pred(Equal_x_2, diff --git a/Kernel_23/include/CGAL/Kernel/solve.h b/Kernel_23/include/CGAL/Kernel/solve.h index f4866259898..7b915836523 100644 --- a/Kernel_23/include/CGAL/Kernel/solve.h +++ b/Kernel_23/include/CGAL/Kernel/solve.h @@ -58,6 +58,37 @@ void solve (const FT &a1, const FT &a2, const FT &a3, } +template +void solve (const FT &a1, const FT &a2, const FT &a3, + const FT &b1, const FT &b2, const FT &b3, + const FT &c1, const FT &c2, const FT &c3, + const FT &d1, const FT &d2, const FT &d3, + FT &x, FT &y, FT &z, FT& denom) +{ + FT ab23 = a3*b2 - a2*b3; + FT ab13 = a3*b1 - a1*b3; + FT ab12 = a2*b1 - a1*b2; + + denom = ab23*c1 - ab13*c2 + ab12*c3; + + FT cd23 = c3*d2 - c2*d3; + FT cd13 = c3*d1 - c1*d3; + FT cd12 = c2*d1 - c1*d2; + + x = (b3*cd12 - b2*cd13 + b1*cd23); + + y = (a2*cd13 - cd12*a3 - cd23*a1); + + z = (ab23*d1 + ab12*d3 - ab13*d2); + if(denom < 0){ + denom = -denom; + x = -x; + y = -y; + z = -z; + } +} + + // this is for a parabola c1, c2, c3 are equal to 1 template void solve_quadratic (const FT &a1, const FT &a2, const FT &a3, diff --git a/Kernel_23/include/CGAL/Line_2.h b/Kernel_23/include/CGAL/Line_2.h index 79b4dcbc9f8..605193d46c7 100644 --- a/Kernel_23/include/CGAL/Line_2.h +++ b/Kernel_23/include/CGAL/Line_2.h @@ -240,7 +240,7 @@ template std::ostream& insert(std::ostream& os, const Line_2& l) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << l.a() << ' ' << l.b() << ' ' << l.c(); case IO::BINARY : @@ -267,9 +267,9 @@ std::istream& extract(std::istream& is, Line_2& l) { typename R::RT a(0), b(0), c(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(a) >> iformat(b) >> iformat(c); + is >> IO::iformat(a) >> IO::iformat(b) >> IO::iformat(c); break; case IO::BINARY : read(is, a); diff --git a/Kernel_23/include/CGAL/Line_3.h b/Kernel_23/include/CGAL/Line_3.h index ef303c87d34..c17c39eb8d4 100644 --- a/Kernel_23/include/CGAL/Line_3.h +++ b/Kernel_23/include/CGAL/Line_3.h @@ -138,7 +138,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Line_3 &l) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << l.point(0) << ' ' << l.point(1); case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Plane_3.h b/Kernel_23/include/CGAL/Plane_3.h index 659cde8d50b..058c96b919e 100644 --- a/Kernel_23/include/CGAL/Plane_3.h +++ b/Kernel_23/include/CGAL/Plane_3.h @@ -228,7 +228,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Plane_3 &p) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.a() << ' ' << p.b() << ' ' << p.c() << ' ' << p.d(); case IO::BINARY : @@ -249,9 +249,9 @@ std::istream & operator>>(std::istream &is, Plane_3 &p) { typename R::RT a(0), b(0), c(0), d(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(a) >> iformat(b) >> iformat(c) >> iformat(d); + is >> IO::iformat(a) >> IO::iformat(b) >> IO::iformat(c) >> IO::iformat(d); break; case IO::BINARY : read(is, a); diff --git a/Kernel_23/include/CGAL/Point_2.h b/Kernel_23/include/CGAL/Point_2.h index 1d4403354b7..297817303ee 100644 --- a/Kernel_23/include/CGAL/Point_2.h +++ b/Kernel_23/include/CGAL/Point_2.h @@ -190,7 +190,7 @@ template std::ostream& insert(std::ostream& os, const Point_2& p,const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.x() << ' ' << p.y(); case IO::BINARY : @@ -206,7 +206,7 @@ template std::ostream& insert(std::ostream& os, const Point_2& p,const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.hx() << ' ' << p.hy() << ' ' << p.hw(); @@ -235,9 +235,9 @@ std::istream& extract(std::istream& is, Point_2& p, const Cartesian_tag&) { typename R::FT x(0), y(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y); + is >> IO::iformat(x) >> IO::iformat(y); break; case IO::BINARY : read(is, x); @@ -260,7 +260,7 @@ std::istream& extract(std::istream& is, Point_2& p, const Homogeneous_tag&) { typename R::RT hx, hy, hw; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : is >> hx >> hy >> hw; diff --git a/Kernel_23/include/CGAL/Point_3.h b/Kernel_23/include/CGAL/Point_3.h index a8487afeb38..77858d83689 100644 --- a/Kernel_23/include/CGAL/Point_3.h +++ b/Kernel_23/include/CGAL/Point_3.h @@ -216,7 +216,7 @@ template std::ostream& insert(std::ostream& os, const Point_3& p,const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.x() << ' ' << p.y() << ' ' << p.z(); case IO::BINARY : @@ -234,7 +234,7 @@ template std::ostream& insert(std::ostream& os, const Point_3& p,const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.hx() << ' ' << p.hy() << ' ' << p.hz() << ' ' << p.hw(); @@ -265,9 +265,9 @@ std::istream& extract(std::istream& is, Point_3& p, const Cartesian_tag&) { typename R::FT x(0), y(0), z(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y) >> iformat(z); + is >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(z); break; case IO::BINARY : read(is, x); @@ -291,7 +291,7 @@ std::istream& extract(std::istream& is, Point_3& p, const Homogeneous_tag&) { typename R::RT hx, hy, hz, hw; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : is >> hx >> hy >> hz >> hw; diff --git a/Kernel_23/include/CGAL/Ray_2.h b/Kernel_23/include/CGAL/Ray_2.h index 732ea145918..161b11fc01e 100644 --- a/Kernel_23/include/CGAL/Ray_2.h +++ b/Kernel_23/include/CGAL/Ray_2.h @@ -198,7 +198,7 @@ template std::ostream& insert(std::ostream& os, const Ray_2& r, const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << r.source() << ' ' << r.second_point(); case IO::BINARY : @@ -212,7 +212,7 @@ template std::ostream& insert(std::ostream& os, const Ray_2& r, const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << r.source() << ' ' << r.second_point(); diff --git a/Kernel_23/include/CGAL/Ray_3.h b/Kernel_23/include/CGAL/Ray_3.h index 6854f30a46f..fe0c2e056e5 100644 --- a/Kernel_23/include/CGAL/Ray_3.h +++ b/Kernel_23/include/CGAL/Ray_3.h @@ -166,7 +166,7 @@ template std::ostream& insert(std::ostream& os, const Ray_3& r, const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << r.start() << ' ' << r.direction(); case IO::BINARY : @@ -180,7 +180,7 @@ template std::ostream& insert(std::ostream& os, const Ray_3& r, const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << r.start() << ' ' << r.direction(); diff --git a/Kernel_23/include/CGAL/Segment_2.h b/Kernel_23/include/CGAL/Segment_2.h index 8143beeb5c0..72773d62789 100644 --- a/Kernel_23/include/CGAL/Segment_2.h +++ b/Kernel_23/include/CGAL/Segment_2.h @@ -242,7 +242,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Segment_2 &s) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << s.source() << ' ' << s.target(); case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Segment_3.h b/Kernel_23/include/CGAL/Segment_3.h index fa0e4e7569d..1274e3d7868 100644 --- a/Kernel_23/include/CGAL/Segment_3.h +++ b/Kernel_23/include/CGAL/Segment_3.h @@ -173,7 +173,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Segment_3 &s) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << s.source() << ' ' << s.target(); case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Sphere_3.h b/Kernel_23/include/CGAL/Sphere_3.h index 246801a068e..59f3d142cd1 100644 --- a/Kernel_23/include/CGAL/Sphere_3.h +++ b/Kernel_23/include/CGAL/Sphere_3.h @@ -208,7 +208,7 @@ template std::ostream& insert(std::ostream& os, const Sphere_3& c,const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << c.center() << ' ' << c.squared_radius() << ' ' << static_cast(c.orientation()); @@ -240,7 +240,7 @@ template std::ostream& insert(std::ostream& os, const Sphere_3& c, const Homogeneous_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << c.center() << ' ' << c.squared_radius() << ' ' << static_cast(c.orientation()); @@ -283,7 +283,7 @@ extract(std::istream& is, Sphere_3& c, const Cartesian_tag&) typename R::Point_3 center; typename R::FT squared_radius(0); int o=0; - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : is >> center >> squared_radius >> o; break; @@ -311,7 +311,7 @@ extract(std::istream& is, Sphere_3& c, const Homogeneous_tag&) typename R::Point_3 center; typename R::FT squared_radius; int o=0; - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : is >> center >> squared_radius >> o; break; diff --git a/Kernel_23/include/CGAL/Tetrahedron_3.h b/Kernel_23/include/CGAL/Tetrahedron_3.h index 634e73434da..edbe34c85ce 100644 --- a/Kernel_23/include/CGAL/Tetrahedron_3.h +++ b/Kernel_23/include/CGAL/Tetrahedron_3.h @@ -147,7 +147,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Tetrahedron_3 &t) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << t[0] << ' ' << t[1] << ' ' << t[2] << ' ' << t[3]; case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Triangle_2.h b/Kernel_23/include/CGAL/Triangle_2.h index 5cc5aa97cad..2b7d6b5a0aa 100644 --- a/Kernel_23/include/CGAL/Triangle_2.h +++ b/Kernel_23/include/CGAL/Triangle_2.h @@ -175,7 +175,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Triangle_2 &t) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << t[0] << ' ' << t[1] << ' ' << t[2]; case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Triangle_3.h b/Kernel_23/include/CGAL/Triangle_3.h index 7999ca64f82..a1e2348e165 100644 --- a/Kernel_23/include/CGAL/Triangle_3.h +++ b/Kernel_23/include/CGAL/Triangle_3.h @@ -117,7 +117,7 @@ template < class R > std::ostream & operator<<(std::ostream &os, const Triangle_3 &t) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << t[0] << ' ' << t[1] << ' ' << t[2]; case IO::BINARY : diff --git a/Kernel_23/include/CGAL/Vector_2.h b/Kernel_23/include/CGAL/Vector_2.h index 8c08dfd29d5..bc8e6a72a03 100644 --- a/Kernel_23/include/CGAL/Vector_2.h +++ b/Kernel_23/include/CGAL/Vector_2.h @@ -290,7 +290,7 @@ template std::ostream& insert(std::ostream& os, const Vector_2& v, const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << v.x() << ' ' << v.y(); case IO::BINARY : @@ -306,7 +306,7 @@ template std::ostream& insert(std::ostream& os, const Vector_2& v, const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << v.hx() << ' ' << v.hy() << ' ' << v.hw(); @@ -336,9 +336,9 @@ std::istream& extract(std::istream& is, Vector_2& v, const Cartesian_tag&) { typename R::FT x(0), y(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y); + is >> IO::iformat(x) >> IO::iformat(y); break; case IO::BINARY : read(is, x); @@ -361,7 +361,7 @@ std::istream& extract(std::istream& is, Vector_2& v, const Homogeneous_tag&) { typename R::RT hx, hy, hw; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : is >> hx >> hy >> hw; diff --git a/Kernel_23/include/CGAL/Vector_3.h b/Kernel_23/include/CGAL/Vector_3.h index 681e3ec7ceb..75e071c0a7c 100644 --- a/Kernel_23/include/CGAL/Vector_3.h +++ b/Kernel_23/include/CGAL/Vector_3.h @@ -267,7 +267,7 @@ template std::ostream& insert(std::ostream& os, const Vector_3& v, const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << v.x() << ' ' << v.y() << ' ' << v.z(); case IO::BINARY : @@ -285,7 +285,7 @@ template std::ostream& insert(std::ostream& os, const Vector_3& v, const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << v.hx() << ' ' << v.hy() << ' ' << v.hz() << ' ' << v.hw(); @@ -316,9 +316,9 @@ std::istream& extract(std::istream& is, Vector_3& v, const Cartesian_tag&) { typename R::FT x(0), y(0), z(0); - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y) >> iformat(z); + is >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(z); break; case IO::BINARY : read(is, x); @@ -341,7 +341,7 @@ std::istream& extract(std::istream& is, Vector_3& v, const Homogeneous_tag&) { typename R::RT hx, hy, hz, hw; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : is >> hx >> hy >> hz >> hw; diff --git a/Kernel_23/include/CGAL/Weighted_point_2.h b/Kernel_23/include/CGAL/Weighted_point_2.h index 68742e47973..006fbe8cbc0 100644 --- a/Kernel_23/include/CGAL/Weighted_point_2.h +++ b/Kernel_23/include/CGAL/Weighted_point_2.h @@ -236,7 +236,7 @@ template std::ostream& insert(std::ostream& os, const Weighted_point_2& p,const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.point() << ' ' << p.weight(); case IO::BINARY : @@ -253,7 +253,7 @@ template std::ostream& insert(std::ostream& os, const Weighted_point_2& p,const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.point() << ' ' << p.weight(); @@ -283,9 +283,9 @@ std::istream& extract(std::istream& is, Weighted_point_2& p, const Cartesian_tag&) { typename R::FT x, y, weight; - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y) >> iformat(weight); + is >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(weight); break; case IO::BINARY : read(is, x); @@ -309,7 +309,7 @@ extract(std::istream& is, Weighted_point_2& p, const Homogeneous_tag&) { typename R::RT hx, hy, hw; typename R::FT weight; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : is >> hx >> hy >> hw >> weight; diff --git a/Kernel_23/include/CGAL/Weighted_point_3.h b/Kernel_23/include/CGAL/Weighted_point_3.h index 37aa35f5f4b..25e2eeaa62e 100644 --- a/Kernel_23/include/CGAL/Weighted_point_3.h +++ b/Kernel_23/include/CGAL/Weighted_point_3.h @@ -251,7 +251,7 @@ template std::ostream& insert(std::ostream& os, const Weighted_point_3& p,const Cartesian_tag&) { - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.point() << ' ' << p.weight(); case IO::BINARY : @@ -270,7 +270,7 @@ template std::ostream& insert(std::ostream& os, const Weighted_point_3& p,const Homogeneous_tag&) { - switch(get_mode(os)) + switch(IO::get_mode(os)) { case IO::ASCII : return os << p.hx() << ' ' << p.hy() << ' ' << p.hz() << ' ' << p.hw() << ' ' << p.weight(); @@ -303,9 +303,9 @@ std::istream& extract(std::istream& is, Weighted_point_3& p, const Cartesian_tag&) { typename R::FT x, y, z, weight; - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case IO::ASCII : - is >> iformat(x) >> iformat(y) >> iformat(z) >> iformat(weight); + is >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(z) >> IO::iformat(weight); break; case IO::BINARY : read(is, x); @@ -330,7 +330,7 @@ extract(std::istream& is, Weighted_point_3& p, const Homogeneous_tag&) { typename R::RT hx, hy, hz, hw; typename R::FT weight; - switch(get_mode(is)) + switch(IO::get_mode(is)) { case IO::ASCII : is >> hx >> hy >> hz >> hw >> weight; diff --git a/Kernel_23/include/CGAL/rank.h b/Kernel_23/include/CGAL/rank.h new file mode 100644 index 00000000000..2951e92c562 --- /dev/null +++ b/Kernel_23/include/CGAL/rank.h @@ -0,0 +1,164 @@ +// Copyright (c) 2021 +// GeometryFactory (France), +// +// This file is part of CGAL (www.cgal.org) +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Sebastien Loriot + +#ifndef CGAL_RANK_H +#define CGAL_RANK_H + +namespace CGAL { + +template +int rank_11(const RT& a0) +{ + return a0!=0 ? 1 : 0; +} + +template +int rank_21(const RT& a0, const RT& a1) +{ + return (a0!=0 || a1 !=0) ? 1 : 0; +} + +template +int rank_12(const RT& a0, const RT& a1) +{ + return (a0!=0 || a1 !=0) ? 1 : 0; +} + +template +int rank_31(const RT& a0, const RT& a1, const RT& a2) +{ + return (a0!=0 || a1 !=0 || a2 !=0) ? 1 : 0; +} + +template +int rank_32(const RT& a0, const RT& b0, + const RT& a1, const RT& b1, + const RT& a2, const RT& b2) +{ + if (a0==0) + { + if (a1==0) + { + if (a2==0) + { + return rank_31(b0,b1,b2); + } + else + { + return 1 + rank_21(b0, b1); + } + } + else + { + return 1 + rank_21(b0, a1*b2-a2*b1); + } + } + else + { + return 1 + rank_21(a0*b1-a1*b0, a0*b2-a2*b0); + } +} + +template +int rank_22(const RT& a0, const RT& b0, + const RT& a1, const RT& b1) +{ + if (a0==0) + { + if (a1==0) + { + return rank_21(b0,b1); + } + else + return 1 + rank_11(b0); + } + return 1 + rank_11(a0*b1-a1*b0); +} + +template +int rank_33(const RT& a0, const RT& b0, const RT& c0, + const RT& a1, const RT& b1, const RT& c1, + const RT& a2, const RT& b2, const RT& c2) +{ + if (a0==0) + { + if (a1==0) + { + if (a2==0) + { + return rank_32(b0, c0, b1, c1, b2, c2); + } + else + { + return 1 + rank_22(b0, c0, b1, c1); + } + } + else + return 1 + rank_22(b0, c0, a1*b2-a2*b1, a1*c2-a2*c1); + } + else + { + return 1 + rank_22(a0*b1-a1*b0, a0*c1-a1*c0, a0*b2-a2*b0, a0*c2-a2*c0); + } +} + + +template +int rank_23(const RT& a0, const RT& b0, const RT& c0, + const RT& a1, const RT& b1, const RT& c1) +{ + if (a0==0) + { + if (a1==0) + { + return rank_22(b0, c0, b1, c1); + } + else + return 1 + rank_12(b0,c0); + } + else + { + return 1 + rank_12(a0*b1-a1*b0,a0*c1-a1*c0); + } +} + + +template +int rank_34(const RT& a0, const RT& b0, const RT& c0, const RT& d0, + const RT& a1, const RT& b1, const RT& c1, const RT& d1, + const RT& a2, const RT& b2, const RT& c2, const RT& d2) +{ + if (a0==0) + { + if (a1==0) + { + if (a2==0) + { + return rank_33(b0, c0, d0, b1, c1, d1, b2, c2, d2); + } + else + { + return 1 + rank_23(b0, c0, d0, b1, c1, d1); + } + } + else + return 1 + rank_23(b0, c0, d0,a1*b2-a2*b1, a1*c2-a2*c1, a1*d2 - a2*d1); + } + else + { + return 1 + rank_23(a0*b1-a1*b0, a0*c1-a1*c0, a0*d1-a1*d0, a0*b2-a2*b0, a0*c2-a2*c0, a0*d2-a2*d0); + } +} + +} // namespace CGAL + +#endif // CGAL_RANK_H diff --git a/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_2.h b/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_2.h index 31f104419fb..ccdde6d298c 100644 --- a/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_2.h +++ b/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_2.h @@ -135,7 +135,9 @@ _test_cls_aff_transformation_2(const R& ) CGAL::Aff_transformation_2 rot3( CGAL::ROTATION, RT(3),RT(4),RT(5)); - + CGAL::Aff_transformation_2 refle(CGAL::REFLECTION, CGAL::Line_2( + CGAL::Point_2(1,3), + CGAL::Point_2(2,1))); CGAL::Aff_transformation_2 a[14]; @@ -295,6 +297,34 @@ _test_cls_aff_transformation_2(const R& ) assert( rot3.is_even() ); assert( xrefl.is_odd() ); + // translation + assert( translate.is_translation() ); + assert( ! scale11.is_translation() ); + assert( ! gtrans.is_translation() ); + assert( ! rot90.is_translation() ); + assert( ! refle.is_translation() ); + + // scaling + assert( scale11.is_scaling() ); + assert( ! translate.is_scaling() ); + assert( ! gscale.is_scaling() ); + assert( ! rot90.is_scaling() ); + assert( ! refle.is_scaling() ); + + // reflection + assert( ! scale11.is_reflection() ); + assert( ! translate.is_reflection() ); + assert( ! gscale.is_reflection() ); + assert( ! rot90.is_reflection() ); + assert( refle.is_reflection() ); + + // rotation + assert( ! scale11.is_rotation() ); + assert( ! translate.is_rotation() ); + assert( ! gscale.is_rotation() ); + assert( rot90.is_rotation() ); + assert( !refle.is_rotation() ); + // rotation assert( d0.transform( rot90 ) == d1 ); assert( d1.transform( rot90.inverse() ) == d0 ); diff --git a/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_3.h b/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_3.h index c10c07d1b1c..3c0db87e36f 100644 --- a/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_3.h +++ b/Kernel_23/test/Kernel_23/include/CGAL/_test_cls_aff_transformation_3.h @@ -151,6 +151,16 @@ _test_cls_aff_transformation_3(const R& ) assert( ident.is_even() ); assert( xrefl.is_odd() ); + // translation + assert( translate.is_translation() ); + assert( ! scale11.is_translation() ); + assert( ! gtrans.is_translation() ); + + // scaling + assert( scale11.is_scaling() ); + assert( ! translate.is_scaling() ); + assert( ! gscale.is_scaling() ); + CGAL::Aff_transformation_3 a[11]; std::cout << '.'; @@ -261,7 +271,7 @@ _test_cls_aff_transformation_3(const R& ) assert( vec.transform(translate) == vec.transform(gtrans) ); assert( dir.transform(translate) == dir.transform(gtrans) ); assert( pnt.transform(translate) == pnt.transform(gtrans) ); - assert( pla.transform(translate) == pla.transform(gtrans) ); + assert( pla.transform(translate) == pla.transform(gtrans) || nonexact ); // xrefl tdir = d0.transform(xrefl); diff --git a/Kernel_23/test/Kernel_23/rank.cpp b/Kernel_23/test/Kernel_23/rank.cpp new file mode 100644 index 00000000000..5856d9e86ab --- /dev/null +++ b/Kernel_23/test/Kernel_23/rank.cpp @@ -0,0 +1,115 @@ +#include +#include +#include + +typedef int FT; + + +void test_rank_33(FT a0, FT b0, FT c0, + FT a1, FT b1, FT c1, + FT a2, FT b2, FT c2, + int expected) +{ + std::cout << "testing:\n" + << "\t " << a0 << "\t" << b0 << "\t" << c0 << "\n" + << "\t " << a1 << "\t" << b1 << "\t" << c1 << "\n" + << "\t " << a2 << "\t" << b2 << "\t" << c2 << "\n"; + + assert(CGAL::rank_33(a0,b0,c0,a1,b1,c1,a2,b2,c2)==expected); + assert(CGAL::rank_33(a0,b0,c0,a2,b2,c2,a1,b1,c1)==expected); + assert(CGAL::rank_33(a1,b1,c1,a0,b0,c0,a2,b2,c2)==expected); + assert(CGAL::rank_33(a1,b1,c1,a2,b2,c2,a0,b0,c0)==expected); + assert(CGAL::rank_33(a2,b2,c2,a0,b0,c0,a1,b1,c1)==expected); + assert(CGAL::rank_33(a2,b2,c2,a1,b1,c1,a0,b0,c0)==expected); +} + +void test_rank_34(FT a0, FT b0, FT c0, FT d0, + FT a1, FT b1, FT c1, FT d1, + FT a2, FT b2, FT c2, FT d2, + int expected) +{ + std::cout << "testing:\n" + << "\t " << a0 << "\t" << b0 << "\t" << c0 << "\t" << d0 << "\n" + << "\t " << a1 << "\t" << b1 << "\t" << c1 << "\t" << d1 << "\n" + << "\t " << a2 << "\t" << b2 << "\t" << c2 << "\t" << d2 << "\n"; + + assert(CGAL::rank_34(a0,b0,c0,d0,a1,b1,c1,d1,a2,b2,c2,d2)==expected); + assert(CGAL::rank_34(a0,b0,c0,d0,a2,b2,c2,d2,a1,b1,c1,d1)==expected); + assert(CGAL::rank_34(a1,b1,c1,d1,a0,b0,c0,d0,a2,b2,c2,d2)==expected); + assert(CGAL::rank_34(a1,b1,c1,d1,a2,b2,c2,d2,a0,b0,c0,d0)==expected); + assert(CGAL::rank_34(a2,b2,c2,d2,a0,b0,c0,d0,a1,b1,c1,d1)==expected); + assert(CGAL::rank_34(a2,b2,c2,d2,a1,b1,c1,d1,a0,b0,c0,d0)==expected); +} + + + +int main() +{ + test_rank_33(1,0,0, + 0,1,0, + 0,0,1, 3); + test_rank_33(1,0,0, + 0,1,0, + 1,0,1, 3); + test_rank_33(1,0,0, + 1,1,1, + 1,0,1, 3); + test_rank_33(1,0,0, + 1,1,1, + 1,0,1, 3); + test_rank_33(1,0,0, + 1,1,0, + 1,5,0, 2); + test_rank_33(0,0,0, + 0,0,0, + 0,0,0, 0); + test_rank_33(1,2,3, + 1,2,3, + 1,2,3, 1); + test_rank_33(1,2,3, + 2,4,6, + 4,8,12, 1); + test_rank_33(1,2,3, + 2,4,6, + 4,8,11, 2); + test_rank_33(1,0,1, + 1,0,1, + 1,0,1, 1); + test_rank_33(1,1,1, + 1,0,1, + 1,0,1, 2); + + test_rank_33(0,1,1, + 0,0,1, + 0,0,1, 2); + + test_rank_34(1,0,0,0, + 0,1,0,0, + 0,0,1,0, 3); + + test_rank_34(1,0,0,0, + 0,1,0,0, + 1,1,0,0, 2); + + test_rank_34(1,0,0,0, + 0,1,0,0, + 1,1,0,1, 3); + + test_rank_34(0,1,0,0, + 0,0,1,0, + 0,1,1,0, 2); + + test_rank_34(0,1,0,0, + 0,0,1,0, + 0,1,1,1, 3); + + test_rank_34(1,0,0,0, + 0,0,1,0, + 1,0,1,0, 2); + + test_rank_34(1,0,0,0, + 0,0,1,0, + 1,0,1,1, 3); + + return 0; +} diff --git a/Kernel_d/include/CGAL/Kernel_d/Matrix__.h b/Kernel_d/include/CGAL/Kernel_d/Matrix__.h index 5ecbfcc10b7..779137a2ccc 100644 --- a/Kernel_d/include/CGAL/Kernel_d/Matrix__.h +++ b/Kernel_d/include/CGAL/Kernel_d/Matrix__.h @@ -746,7 +746,7 @@ std::ostream& operator<<(std::ostream& os, const Matrix_& M) int d = M.row_dimension(); int k = M.column_dimension(); - switch (get_mode(os)) { + switch (IO::get_mode(os)) { case CGAL::IO::BINARY: CGAL::write( os, d); CGAL::write( os, k); @@ -790,7 +790,7 @@ std::istream& operator>>(std::istream& is, Matrix_& M) x_d2,0 ... x_d2,d1-1 */ int cdim, rdim, i; - switch(get_mode(is)) { + switch(IO::get_mode(is)) { case CGAL::IO::BINARY : CGAL::read(is,rdim); CGAL::read(is,cdim); diff --git a/Kernel_d/include/CGAL/Kernel_d/Pair_d.h b/Kernel_d/include/CGAL/Kernel_d/Pair_d.h index a5cbbd2482f..6f9c435e07a 100644 --- a/Kernel_d/include/CGAL/Kernel_d/Pair_d.h +++ b/Kernel_d/include/CGAL/Kernel_d/Pair_d.h @@ -61,7 +61,7 @@ Direction_d direction() const void read(std::istream& is) { - switch( get_mode(is) ) { + switch( IO::get_mode(is) ) { case CGAL::IO::ASCII : is >> _p[0] >> _p[1]; break; case CGAL::IO::BINARY : @@ -73,7 +73,7 @@ void read(std::istream& is) void print(std::ostream& os, const char* _name) const { - switch( get_mode(os) ) { + switch( IO::get_mode(os) ) { case CGAL::IO::ASCII : os << _p[0] << " " << _p[1]; break; case CGAL::IO::BINARY : diff --git a/Kernel_d/include/CGAL/Kernel_d/Tuple_d.h b/Kernel_d/include/CGAL/Kernel_d/Tuple_d.h index 30539b5512d..9468a19db47 100644 --- a/Kernel_d/include/CGAL/Kernel_d/Tuple_d.h +++ b/Kernel_d/include/CGAL/Kernel_d/Tuple_d.h @@ -212,7 +212,7 @@ Comparison_result operator()( template void Tuple_d::print(std::ostream& os, const char* l) const { int i; - switch( get_mode(os) ) { + switch( IO::get_mode(os) ) { case CGAL::IO::ASCII : os << size() << " "; for (i = 0; i < size(); ++i) @@ -235,7 +235,7 @@ void Tuple_d::print(std::ostream& os, const char* l) const template void Tuple_d::read(std::istream& is) { int i = 0, d; - switch( get_mode(is) ) { + switch( IO::get_mode(is) ) { case CGAL::IO::ASCII : is >> d; v = Vector(d); while (i < d && is >> v[i] ) ++i; diff --git a/Kernel_d/include/CGAL/Kernel_d/Vector__.h b/Kernel_d/include/CGAL/Kernel_d/Vector__.h index 94a49f3f264..efeb82ad8e1 100644 --- a/Kernel_d/include/CGAL/Kernel_d/Vector__.h +++ b/Kernel_d/include/CGAL/Kernel_d/Vector__.h @@ -405,7 +405,7 @@ std::ostream& operator<<(std::ostream& os, const Vector_& v) /*{\Xbinopfunc writes |\Mvar| componentwise to the output stream $O$.}*/ { /* syntax: d x_0 x_1 ... x_d-1 */ int d = v.dimension(); - switch (get_mode(os)) { + switch (IO::get_mode(os)) { case CGAL::IO::BINARY: CGAL::write( os, d); for ( int i = 0; i < d; ++i) @@ -434,7 +434,7 @@ std::istream& operator>>(std::istream& is, Vector_& v) /*{\Xbinopfunc reads |\Mvar| componentwise from the input stream $I$.}*/ { /* syntax: d x_0 x_1 ... x_d-1 */ int d; - switch (get_mode(is)) { + switch (IO::get_mode(is)) { case CGAL::IO::ASCII : case CGAL::IO::BINARY : is >> d; diff --git a/Kernel_d/test/Kernel_d/Linear_algebra-test.cpp b/Kernel_d/test/Kernel_d/Linear_algebra-test.cpp index 543de175b53..cc12532746e 100644 --- a/Kernel_d/test/Kernel_d/Linear_algebra-test.cpp +++ b/Kernel_d/test/Kernel_d/Linear_algebra-test.cpp @@ -30,7 +30,7 @@ typedef double FT; int main(int argc, char* argv[]) { CGAL_KD_SETDTHREAD(151); - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); CGAL_TEST_START; { typedef RT NT; diff --git a/Kernel_d/test/Kernel_d/include/CGAL/test_macros.h b/Kernel_d/test/Kernel_d/include/CGAL/test_macros.h index 53dbe3cc356..94eee89202d 100644 --- a/Kernel_d/test/Kernel_d/include/CGAL/test_macros.h +++ b/Kernel_d/test/Kernel_d/include/CGAL/test_macros.h @@ -13,7 +13,7 @@ else #define CGAL_IO_TEST(datao,datai,iomode) { \ std::stringstream S; \ - CGAL::set_mode(S,iomode); \ + CGAL::IO::set_mode(S,iomode); \ S << datao; \ if ( iomode != CGAL::IO::BINARY) \ S << '\n'; \ diff --git a/Kernel_d/test/Kernel_d/interface-test.cpp b/Kernel_d/test/Kernel_d/interface-test.cpp index 17f962823c8..1429ac6ac76 100644 --- a/Kernel_d/test/Kernel_d/interface-test.cpp +++ b/Kernel_d/test/Kernel_d/interface-test.cpp @@ -24,7 +24,7 @@ typedef double FT_; int main() { CGAL_KD_SETDTHREAD(2); - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); CGAL_TEST_START; { // Homogeneous Kernel typedef CGAL::Homogeneous_d Kernel; diff --git a/Kernel_d/test/Kernel_d/intersection-test.cpp b/Kernel_d/test/Kernel_d/intersection-test.cpp index 2735aa0fc72..3f22d193653 100644 --- a/Kernel_d/test/Kernel_d/intersection-test.cpp +++ b/Kernel_d/test/Kernel_d/intersection-test.cpp @@ -29,7 +29,7 @@ typedef CGAL::Quotient FT; #endif int main() -{ CGAL::set_pretty_mode ( std::cerr ); +{ CGAL::IO::set_pretty_mode ( std::cerr ); CGAL_TEST_START; { typedef CGAL::Homogeneous_d Kernel; diff --git a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp index a7107bfb3ab..2e7a347c8d2 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp +++ b/Linear_cell_complex/demo/Linear_cell_complex/MainWindow.cpp @@ -1823,7 +1823,7 @@ void MainWindow::onMengerInc() LCC::Attribute_handle<3>::type ah = (scene.lcc)->create_attribute<3>(); scene.lcc->set_attribute<3>(mengerVolumes[i], ah); scene.lcc->info<3>(mengerVolumes[i]).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); @@ -1925,11 +1925,11 @@ void MainWindow::split_vol_in_three(Dart_handle dh, bool removecenter) if (scene.lcc->are_attributes_automatically_managed()) { scene.lcc->info<3>(f1).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); scene.lcc->info<3>(f2).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); @@ -1979,11 +1979,11 @@ void MainWindow::split_vol_in_nine(Dart_handle dh, bool removecenter) if (scene.lcc->are_attributes_automatically_managed()) { scene.lcc->info<3>(f1).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); scene.lcc->info<3>(f2).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); @@ -2039,11 +2039,11 @@ void MainWindow::split_vol_in_twentyseven(Dart_handle dh) if (scene.lcc->are_attributes_automatically_managed()) { scene.lcc->info<3>(f1).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); scene.lcc->info<3>(f2).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); update_volume_list_add(scene.lcc->attribute<3>(dh)); @@ -3177,7 +3177,7 @@ void MainWindow::onSierpinskiTriangleInc() LCC::Attribute_handle<3>::type ah = (scene.lcc)->create_attribute<3>(); scene.lcc->set_attribute<3>(sierpinskiTriangleSurfaces[i], ah); scene.lcc->info<3>(sierpinskiTriangleSurfaces[i]).color()= - (CGAL::Color(myrandom.get_int(0,256), + (CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))); diff --git a/Linear_cell_complex/demo/Linear_cell_complex/Viewer.h b/Linear_cell_complex/demo/Linear_cell_complex/Viewer.h index 6137e328faf..18e66603ef4 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/Viewer.h +++ b/Linear_cell_complex/demo/Linear_cell_complex/Viewer.h @@ -77,13 +77,13 @@ struct MyDrawingFunctorLCC /// @return the color of the volume containing dh /// used only if colored_volume(alcc, dh) and !colored_face(alcc, dh) template - CGAL::Color volume_color(const LCC& alcc, + CGAL::IO::Color volume_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const { return alcc.template info<3>(dh).color(); } /// @return the color of the face containing dh /// used only if colored_face(alcc, dh) template - CGAL::Color face_color(const LCC& alcc, + CGAL::IO::Color face_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const { CGAL::Random random((unsigned int)(alcc.darts().index(dh))); @@ -92,15 +92,15 @@ struct MyDrawingFunctorLCC /// @return the color of the edge containing dh /// used only if colored_edge(alcc, dh) template - CGAL::Color edge_color(const LCC&, + CGAL::IO::Color edge_color(const LCC&, typename LCC::Dart_const_handle) const - { return CGAL::Color(0, 0, 0); } + { return CGAL::IO::Color(0, 0, 0); } /// @return the color of the vertex containing dh /// used only if colored_vertex(alcc, dh) template - CGAL::Color vertex_color(const LCC&, + CGAL::IO::Color vertex_color(const LCC&, typename LCC::Dart_const_handle) const - { return CGAL::Color(0, 0, 0); } + { return CGAL::IO::Color(0, 0, 0); } }; diff --git a/Linear_cell_complex/demo/Linear_cell_complex/typedefs.h b/Linear_cell_complex/demo/Linear_cell_complex/typedefs.h index 17924ecca8d..459c745f1b9 100644 --- a/Linear_cell_complex/demo/Linear_cell_complex/typedefs.h +++ b/Linear_cell_complex/demo/Linear_cell_complex/typedefs.h @@ -51,15 +51,15 @@ class Volume_info friend void CGAL::write_cmap_attribute_node(boost::property_tree::ptree & node, const Volume_info& arg); public: - Volume_info() : m_color(CGAL::Color(myrandom.get_int(0,256), + Volume_info() : m_color(CGAL::IO::Color(myrandom.get_int(0,256), myrandom.get_int(0,256), myrandom.get_int(0,256))), m_status( LCC_DEMO_VISIBLE | LCC_DEMO_FILLED ) {} - CGAL::Color& color() + CGAL::IO::Color& color() { return m_color; } - const CGAL::Color& color() const + const CGAL::IO::Color& color() const { return m_color; } std::string color_name() const @@ -97,7 +97,7 @@ public: { set_filled(!is_filled()); } private: - CGAL::Color m_color; + CGAL::IO::Color m_color; char m_status; }; @@ -120,7 +120,7 @@ inline void read_cmap_attribute_node char r = v.second.get("color-r"); char g = v.second.get("color-g"); char b = v.second.get("color-b"); - val.m_color = CGAL::Color(r,g,b); + val.m_color = CGAL::IO::Color(r,g,b); } catch(const std::exception & ) {} diff --git a/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h index 6b7b97eb3c1..cbc75458f95 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h +++ b/Linear_cell_complex/examples/Linear_cell_complex/basic_viewer.h @@ -286,7 +286,7 @@ public: { bb=bb+p.bbox(); } } - void add_color(const CGAL::Color& acolor, std::vector& color_vector) + void add_color(const CGAL::IO::Color& acolor, std::vector& color_vector) { color_vector.push_back((double)color_of_face.red()/(double)255); color_vector.push_back((double)color_of_face.green()/(double)255); @@ -303,7 +303,7 @@ public: void add_mono_point(const Local_point& p) { add_point(p, arrays[POS_MONO_POINTS]); } - void add_colored_point(const Local_point& p, const CGAL::Color& acolor) + void add_colored_point(const Local_point& p, const CGAL::IO::Color& acolor) { add_point(p, arrays[POS_COLORED_POINTS]); add_color(acolor, arrays[COLOR_POINTS]); @@ -316,7 +316,7 @@ public: } void add_colored_segment(const Local_point& p1, const Local_point& p2, - const CGAL::Color& acolor) + const CGAL::IO::Color& acolor) { add_point(p1, arrays[POS_COLORED_SEGMENTS]); add_point(p2, arrays[POS_COLORED_SEGMENTS]); @@ -341,7 +341,7 @@ public: } /// Start a new face, with a given color. - void colored_face_begin(const CGAL::Color& acolor) + void colored_face_begin(const CGAL::IO::Color& acolor) { color_of_face=acolor; m_started_face_is_colored=true; @@ -1132,9 +1132,9 @@ private: double m_size_points; double m_size_edges; - CGAL::Color m_vertices_mono_color; - CGAL::Color m_edges_mono_color; - CGAL::Color m_faces_mono_color; + CGAL::IO::Color m_vertices_mono_color; + CGAL::IO::Color m_edges_mono_color; + CGAL::IO::Color m_faces_mono_color; QVector4D m_ambient_color; bool m_are_buffers_initialized; @@ -1184,7 +1184,7 @@ private: bool m_started_face_is_colored; std::vector points_of_face; std::vector vertex_normals_for_face; - CGAL::Color color_of_face; + CGAL::IO::Color color_of_face; }; #endif // CGAL_BASIC_VIEWER_H diff --git a/Linear_cell_complex/examples/Linear_cell_complex/gmap_linear_cell_complex_3.cpp b/Linear_cell_complex/examples/Linear_cell_complex/gmap_linear_cell_complex_3.cpp index 7e4d6771338..fbb3f60d826 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/gmap_linear_cell_complex_3.cpp +++ b/Linear_cell_complex/examples/Linear_cell_complex/gmap_linear_cell_complex_3.cpp @@ -49,7 +49,7 @@ int main() // Display all the vertices of the lcc by iterating on the // Vertex_attribute container. - CGAL::set_ascii_mode(std::cout); + CGAL::IO::set_ascii_mode(std::cout); std::cout<<"Vertices: "; for (LCC_3::Vertex_attribute_const_range::iterator v=lcc.vertex_attributes().begin(), diff --git a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3.cpp b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3.cpp index 9704f6fed30..929390f6b0a 100644 --- a/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3.cpp +++ b/Linear_cell_complex/examples/Linear_cell_complex/linear_cell_complex_3.cpp @@ -48,7 +48,7 @@ int main() // Display all the vertices of the lcc by iterating on the // Vertex_attribute container. - CGAL::set_ascii_mode(std::cout); + CGAL::IO::set_ascii_mode(std::cout); std::cout<<"Vertices: "; for (LCC_3::Vertex_attribute_const_range::iterator v=lcc.vertex_attributes().begin(), diff --git a/Linear_cell_complex/include/CGAL/Linear_cell_complex_constructors.h b/Linear_cell_complex/include/CGAL/Linear_cell_complex_constructors.h index 40aab7abdd3..9ec501d454b 100644 --- a/Linear_cell_complex/include/CGAL/Linear_cell_complex_constructors.h +++ b/Linear_cell_complex/include/CGAL/Linear_cell_complex_constructors.h @@ -156,7 +156,7 @@ namespace CGAL { } FT x, y; - ais >> iformat(x) >> iformat(y); + ais >> IO::iformat(x) >> IO::iformat(y); vertices.push_back(Point{x, y}); --numVertices; } @@ -249,6 +249,9 @@ namespace CGAL { { std::size_t index; scanner.scan_facet_vertex_index(index, j+1, i); + if(! in){ + return false; + } B.add_vertex_to_facet(index); } B.end_facet(); @@ -302,8 +305,8 @@ namespace CGAL { } File_header_OFF header(false); - header.set_binary(is_binary(out)); - header.set_no_comments(!is_pretty(out)); + header.set_binary(IO::is_binary(out)); + header.set_no_comments(!IO::is_pretty(out)); File_writer_OFF writer( header); writer.header().set_polyhedral_surface(true); writer.header().set_halfedges(alcc.number_of_darts()); diff --git a/Linear_cell_complex/include/CGAL/draw_linear_cell_complex.h b/Linear_cell_complex/include/CGAL/draw_linear_cell_complex.h index 49383d6f5eb..5e1a46e52c7 100644 --- a/Linear_cell_complex/include/CGAL/draw_linear_cell_complex.h +++ b/Linear_cell_complex/include/CGAL/draw_linear_cell_complex.h @@ -84,7 +84,7 @@ struct DefaultDrawingFunctorLCC /// @return the color of the volume containing dh /// used only if colored_volume(alcc, dh) and !colored_face(alcc, dh) template - CGAL::Color volume_color(const LCC& alcc, + CGAL::IO::Color volume_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const { CGAL::Random random((unsigned int)(alcc.darts().index(dh))); @@ -93,7 +93,7 @@ struct DefaultDrawingFunctorLCC /// @return the color of the face containing dh /// used only if colored_face(alcc, dh) template - CGAL::Color face_color(const LCC& alcc, + CGAL::IO::Color face_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const { CGAL::Random random((unsigned int)(alcc.darts().index(dh))); @@ -102,7 +102,7 @@ struct DefaultDrawingFunctorLCC /// @return the color of the edge containing dh /// used only if colored_edge(alcc, dh) template - CGAL::Color edge_color(const LCC& alcc, + CGAL::IO::Color edge_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const { CGAL::Random random((unsigned int)(alcc.darts().index(dh))); @@ -111,7 +111,7 @@ struct DefaultDrawingFunctorLCC /// @return the color of the vertex containing dh /// used only if colored_vertex(alcc, dh) template - CGAL::Color vertex_color(const LCC& alcc, + CGAL::IO::Color vertex_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const { CGAL::Random random((unsigned int)(alcc.darts().index(dh))); @@ -213,17 +213,17 @@ protected: if (m_random_face_color) { CGAL::Random random((unsigned int)(lcc->darts().index(dh))); - CGAL::Color c=get_random_color(random); + CGAL::IO::Color c=get_random_color(random); face_begin(c); } else if (m_drawing_functor.colored_face(*lcc, dh)) { - CGAL::Color c=m_drawing_functor.face_color(*lcc, dh); + CGAL::IO::Color c=m_drawing_functor.face_color(*lcc, dh); face_begin(c); } else if (m_drawing_functor.colored_volume(*lcc, voldh)) { - CGAL::Color c=m_drawing_functor.volume_color(*lcc, voldh); + CGAL::IO::Color c=m_drawing_functor.volume_color(*lcc, voldh); face_begin(c); } else diff --git a/Maintenance/public_release/scripts/precompiled_demos_zips b/Maintenance/public_release/scripts/precompiled_demos_zips index e733ac3b64d..71b765bc076 100755 --- a/Maintenance/public_release/scripts/precompiled_demos_zips +++ b/Maintenance/public_release/scripts/precompiled_demos_zips @@ -11,41 +11,41 @@ rm -rf Interpolation_Demo rm -rf Triangulation_3_Geomview_demos_Demo # CGAL<=3.7 -pushd AABB_tree_Demo; zip ../AABB_demo.zip * ; popd -pushd Alpha_shapes_3_Demo; zip ../alpha_shape_3.zip * ; popd -pushd Bounding_volumes_Demo; zip ../bounding_volumes_2.zip * ; popd -pushd Circular_kernel_2_Demo; zip ../circular_kernel.zip * ; popd -pushd Periodic_3_triangulation_3_Demo; zip ../periodic_3_triangulation_3.zip *; popd -pushd Periodic_Lloyd_3_Demo; zip ../periodic_3_lloyd.zip *; popd -pushd Polyhedron_Demo; zip -r ../polyhedron_3.zip * ; popd -pushd Segment_Delaunay_graph_2_Demo; zip ../segment_voronoi_diagram_2.zip *; popd -pushd Surface_mesher_Demo; zip ../surface_mesher.zip *; popd -pushd Triangulation_2_Demo; - zip ../regular_triangulation_2.zip Regular_triangulation_2.exe - zip ../constrained_delaunay_triangulation_2.zip Constrained_Delaunay_triangulation_2.exe - zip ../delaunay_triangulation_2.zip Delaunay_triangulation_2.exe +pushd AABB_tree_Demo_with_dlls; zip ../AABB_demo.zip * ; popd +pushd Alpha_shapes_3_Demo_with_dlls; zip ../alpha_shape_3.zip * ; popd +pushd Bounding_volumes_Demo_with_dlls; zip ../bounding_volumes_2.zip * ; popd +pushd Circular_kernel_2_Demo_with_dlls; zip ../circular_kernel.zip * ; popd +pushd Periodic_3_triangulation_3_Demo_with_dlls; zip ../periodic_3_triangulation_3.zip *; popd +pushd Periodic_Lloyd_3_Demo_with_dlls; zip ../periodic_3_lloyd.zip *; popd +pushd Polyhedron_Demo_with_dlls; zip -r ../polyhedron_3.zip * ; popd +pushd Segment_Delaunay_graph_2_Demo_with_dlls; zip ../segment_voronoi_diagram_2.zip *; popd +pushd Surface_mesher_Demo_with_dlls; zip ../surface_mesher.zip *; popd +pushd Triangulation_2_Demo_with_dlls; + zip ../regular_triangulation_2.zip Regular_triangulation_2.exe *.dll platforms; + zip ../constrained_delaunay_triangulation_2.zip Constrained_Delaunay_triangulation_2.exe *.dll platforms; + zip ../delaunay_triangulation_2.zip Delaunay_triangulation_2.exe *.dll platforms; popd # CGAL-3.8 -pushd Largest_empty_rect_2_Demo; zip ../largest_empty_rect_2.zip *; popd -pushd Apollonius_graph_2_Demo; zip ../apollonius_graph_2.zip *; popd -pushd Stream_lines_2_Demo; zip ../streamlines.zip *; popd -pushd Triangulation_3_Demo; zip ../triangulation_3.zip *; popd -#pushd Circular_kernel_3_Demo; zip ../triangulation_3.zip *; popd -pushd Alpha_shapes_2_Demo; zip ../alpha_shapes_2.zip *; popd -pushd Generator_Demo; zip ../generator.zip *; popd -pushd L1_Voronoi_diagram_2_Demo; zip ../l1_voronoi_diagram_2.zip *; popd -pushd Snap_rounding_2_Demo; zip ../snap_rounding_2.zip *; popd -pushd Spatial_searching_2_Demo; zip ../spatial_searching.zip *; popd +pushd Largest_empty_rect_2_Demo_with_dlls; zip ../largest_empty_rect_2.zip *; popd +pushd Apollonius_graph_2_Demo_with_dlls; zip ../apollonius_graph_2.zip *; popd +pushd Stream_lines_2_Demo_with_dlls; zip ../streamlines.zip *; popd +pushd Triangulation_3_Demo_with_dlls; zip ../triangulation_3.zip *; popd +#pushd Circular_kernel_3_Demo_with_dlls; zip ../triangulation_3.zip *; popd +pushd Alpha_shapes_2_Demo_with_dlls; zip ../alpha_shapes_2.zip *; popd +pushd Generator_Demo_with_dlls; zip ../generator.zip *; popd +pushd L1_Voronoi_diagram_2_Demo_with_dlls; zip ../l1_voronoi_diagram_2.zip *; popd +pushd Snap_rounding_2_Demo_with_dlls; zip ../snap_rounding_2.zip *; popd +pushd Spatial_searching_2_Demo_with_dlls; zip ../spatial_searching.zip *; popd # CGAL-4.0 -pushd Linear_cell_complex_Demo; zip ../linear_cell_complex_3.zip *; popd +pushd Linear_cell_complex_Demo_with_dlls; zip ../linear_cell_complex_3.zip *; popd # CGAL-4.2 but was forgot -> published with 4.3 -pushd Arrangement_on_surface_2_Demo; zip ../arrangements_2.zip *; popd +pushd Arrangement_on_surface_2_Demo_with_dlls; zip ../arrangements_2.zip *; popd # CGAL-4.5 -pushd Periodic_2_triangulation_2_Demo; zip ../Periodic_2_Delaunay_triangulation_2.zip *; +pushd Periodic_2_triangulation_2_Demo_with_dlls; zip ../Periodic_2_Delaunay_triangulation_2.zip *; popd # probably an error, in CGAL-4.5: rm -rf Surface_mesh_deformation_Demo @@ -54,18 +54,18 @@ rm -rf Surface_mesh_deformation_Demo rm -rf Circular_kernel_3_Demo # CGAL-4.6 -pushd Polyline_simplification_2_Demo; zip ../polyline_simplification_2.zip *; popd +pushd Polyline_simplification_2_Demo_with_dlls; zip ../polyline_simplification_2.zip *; popd # CGAL-4.7 -pushd Segment_Delaunay_graph_Linf_2_Demo; zip ../segment_voronoi_diagram_2.zip *; popd +pushd Segment_Delaunay_graph_Linf_2_Demo_with_dlls; zip ../segment_voronoi_diagram_2.zip *; popd # CGAL-4.8 -pushd Optimal_transportation_reconstruction_2_Demo; zip ../otr2.zip *; popd +pushd Optimal_transportation_reconstruction_2_Demo_with_dlls; zip ../otr2.zip *; popd #missing demos -pushd Polygon_Demo; zip ../polygon.zip *; popd -pushd Principal_component_analysis_Demo; zip ../pca.zip *; popd -pushd Hyperbolic_triangulation_2_Demo; zip ../Hyperbolic_Delaunay_triangulation_2.zip *; popd -pushd Periodic_4_hyperbolic_triangulation_2_Demo; zip ../Periodic_4_hyperbolic_Delaunay_triangulation_2.zip *; popd +pushd Polygon_Demo_with_dlls; zip ../polygon.zip *; popd +pushd Principal_component_analysis_Demo_with_dlls; zip ../pca.zip *; popd +pushd Hyperbolic_triangulation_2_Demo_with_dlls; zip ../Hyperbolic_Delaunay_triangulation_2.zip *; popd +pushd Periodic_4_hyperbolic_triangulation_2_Demo_with_dlls; zip ../Periodic_4_hyperbolic_Delaunay_triangulation_2.zip *; popd # check echo CHECK now. The following lines should be empty. diff --git a/Mesh_2/demo/Mesh_2/conform.cpp b/Mesh_2/demo/Mesh_2/conform.cpp index a27d4d5549c..894185d02fb 100644 --- a/Mesh_2/demo/Mesh_2/conform.cpp +++ b/Mesh_2/demo/Mesh_2/conform.cpp @@ -86,7 +86,7 @@ int main(int argc, char** argv) if(input) { Tr t; - CGAL::read_triangle_poly_file(t, input); + CGAL::IO::read_triangle_poly_file(t, input); if(delaunay) { if(verbose) @@ -103,12 +103,12 @@ int main(int argc, char** argv) if(argc==arg_count+1) { if(terminal_output) - CGAL::write_triangle_poly_file(t, std::cout); + CGAL::IO::write_triangle_poly_file(t, std::cout); } else { std::ofstream output(argv[arg_count+1]); - CGAL::write_triangle_poly_file(t, output); + CGAL::IO::write_triangle_poly_file(t, output); } if(terminal_output) diff --git a/Mesh_2/demo/Mesh_2/mesh.cpp b/Mesh_2/demo/Mesh_2/mesh.cpp index 504eb065411..303420ca7f4 100644 --- a/Mesh_2/demo/Mesh_2/mesh.cpp +++ b/Mesh_2/demo/Mesh_2/mesh.cpp @@ -93,18 +93,18 @@ int main(int argc, char** argv) std::ifstream input(argv[arg_count]); if(input) { - CGAL::read_triangle_poly_file(t, input); + CGAL::IO::read_triangle_poly_file(t, input); CGAL::refine_Delaunay_mesh_2(t, criteria); if(argc==arg_count+1) { if(terminal_output) - CGAL::write_triangle_poly_file(t, std::cout); + CGAL::IO::write_triangle_poly_file(t, std::cout); } else { std::ofstream output(argv[arg_count+1]); - CGAL::write_triangle_poly_file(t, output); + CGAL::IO::write_triangle_poly_file(t, output); } if(terminal_output) std::cerr diff --git a/Mesh_2/doc/Mesh_2/CGAL/IO/write_vtu.h b/Mesh_2/doc/Mesh_2/CGAL/IO/write_VTU.h similarity index 89% rename from Mesh_2/doc/Mesh_2/CGAL/IO/write_vtu.h rename to Mesh_2/doc/Mesh_2/CGAL/IO/write_VTU.h index 146cb6bb785..c750c1f80a8 100644 --- a/Mesh_2/doc/Mesh_2/CGAL/IO/write_vtu.h +++ b/Mesh_2/doc/Mesh_2/CGAL/IO/write_VTU.h @@ -1,4 +1,5 @@ namespace CGAL{ +namespace IO { //!\ingroup PkgMesh2IO //! \brief writes the faces of a domain and its constrained edges embedded in //! a 2D constrained Delaunay triangulation using the `PolyData` XML format. @@ -9,11 +10,11 @@ namespace CGAL{ //! //! \param os the stream used for writing. //! \param tr the triangulated domain to be written. -//! \param mode decides if the data should be written in binary (`IO::BINARY`) -//! or in ASCII (`IO::ASCII`). +//! \param mode decides if the data should be written in binary (`BINARY`) +//! or in ASCII (`ASCII`). //! template -void write_vtu(std::ostream& os, +void write_VTU(std::ostream& os, const CDT& tr, IO::Mode mode = IO::BINARY); -} +} } diff --git a/Mesh_2/doc/Mesh_2/Mesh_2.txt b/Mesh_2/doc/Mesh_2/Mesh_2.txt index fef716532ff..9e96c31499d 100644 --- a/Mesh_2/doc/Mesh_2/Mesh_2.txt +++ b/Mesh_2/doc/Mesh_2/Mesh_2.txt @@ -328,7 +328,7 @@ in the Reference Manual. \section secMesh_2_IO Input/Output -It is possible to export the result of a meshing in VTU, using the function `write_vtu()`. +It is possible to export the result of a meshing in VTU, using the function `CGAL::IO::write_VTU()`. For more information about this format, see \ref IOStreamVTK. */ } /* namespace CGAL */ diff --git a/Mesh_2/doc/Mesh_2/PackageDescription.txt b/Mesh_2/doc/Mesh_2/PackageDescription.txt index 2c39e083c2a..458e3bf6b05 100644 --- a/Mesh_2/doc/Mesh_2/PackageDescription.txt +++ b/Mesh_2/doc/Mesh_2/PackageDescription.txt @@ -64,7 +64,7 @@ The package can handle intersecting input constraints and set no restriction on - `CGAL::lloyd_optimize_mesh_2` \cgalCRPSection{I/O Functions} -- `CGAL::write_vtu()` +- `CGAL::IO::write_VTU()` \cgalCRPSection{Enumerations} - `CGAL::Mesh_optimization_return_code` diff --git a/Mesh_2/include/CGAL/IO/File_poly.h b/Mesh_2/include/CGAL/IO/File_poly.h index 79b2f7ee359..9f3002c32f0 100644 --- a/Mesh_2/include/CGAL/IO/File_poly.h +++ b/Mesh_2/include/CGAL/IO/File_poly.h @@ -18,13 +18,7 @@ namespace CGAL { -template -inline -void -read_triangle_poly_file(CDT& t, std::istream &f) -{ - read_triangle_poly_file(t, f, Emptyset_iterator()); -} +namespace IO { //the function that reads a Shewchuk Triangle .poly file template @@ -80,6 +74,14 @@ read_triangle_poly_file(CDT& t, std::istream &f, } } +template +inline +void +read_triangle_poly_file(CDT& t, std::istream &f) +{ + read_triangle_poly_file(t, f, Emptyset_iterator()); +} + //the function that write a Shewchuk Triangle .poly file template void @@ -156,6 +158,13 @@ write_triangle_poly_file(const CDT& t, std::ostream &f) write_triangle_poly_file(t, f, l.begin(), l.end()); } +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::read_triangle_poly_file; +using IO::write_triangle_poly_file; +#endif + } // end namespace CGAL #endif // CGAL_FILE_POLY_H diff --git a/Mesh_2/include/CGAL/IO/write_vtu.h b/Mesh_2/include/CGAL/IO/write_VTU.h similarity index 89% rename from Mesh_2/include/CGAL/IO/write_vtu.h rename to Mesh_2/include/CGAL/IO/write_VTU.h index fe7a3f85b5b..de6a0a313bd 100644 --- a/Mesh_2/include/CGAL/IO/write_vtu.h +++ b/Mesh_2/include/CGAL/IO/write_VTU.h @@ -12,8 +12,8 @@ // // Author(s) : Laurent RINEAU, Stephane Tayeb, Maxime Gimeno -#ifndef CGAL_WRITE_VTU_H -#define CGAL_WRITE_VTU_H +#ifndef CGAL_IO_WRITE_VTU_H +#define CGAL_IO_WRITE_VTU_H #include @@ -68,7 +68,7 @@ write_cells_tag_2(std::ostream& os, tr.constrained_edges_end())) * sizeof(std::size_t); } else { - os << "\">\n"; + os << ">\n"; for(typename CDT::Finite_faces_iterator fit = tr.finite_faces_begin(), end = tr.finite_faces_end(); @@ -81,6 +81,17 @@ write_cells_tag_2(std::ostream& os, os << V[fit->vertex(1)] << " "; } } + for(typename CDT::Constrained_edges_iterator + cei = tr.constrained_edges_begin(), + end = tr.constrained_edges_end(); + cei != end; ++cei) + { + for(int i=0; i<3; ++i) + { + if(i != cei->second) + os << V[cei->first->vertex(i)] << " "; + } + } os << " \n"; } @@ -96,7 +107,7 @@ write_cells_tag_2(std::ostream& os, // 1 offset (size_t) per cell + length of the encoded data (size_t) } else { - os << "\">\n"; + os << ">\n"; std::size_t cells_offset = 0; for(typename CDT::Finite_faces_iterator fit = tr.finite_faces_begin() ; @@ -109,6 +120,13 @@ write_cells_tag_2(std::ostream& os, os << cells_offset << " "; } } + for(std::size_t i = 0, end = std::distance(tr.constrained_edges_begin(), + tr.constrained_edges_end()); + i < end; ++i) + { + cells_offset += 2; + os << cells_offset << " "; + } os << " \n"; } @@ -125,7 +143,7 @@ write_cells_tag_2(std::ostream& os, // 1 unsigned char per cell + length of the encoded data (size_t) } else { - os << "\">\n"; + os << ">\n"; for(typename CDT::Finite_faces_iterator fit = tr.finite_faces_begin() ; fit != tr.finite_faces_end() ; @@ -136,6 +154,12 @@ write_cells_tag_2(std::ostream& os, os << "5 "; } } + for(std::size_t i = 0, end = std::distance(tr.constrained_edges_begin(), + tr.constrained_edges_end()); + i < end; ++i) + { + os << "3 "; + } os << " \n"; } os << " \n"; @@ -301,10 +325,10 @@ write_attributes_2(std::ostream& os, } template -void write_vtu_with_attributes(std::ostream& os, +void write_VTU_with_attributes(std::ostream& os, const CDT& tr, std::vector*> >& attributes, - IO::Mode mode = IO::BINARY) + Mode mode = BINARY) { typedef typename CDT::Vertex_handle Vertex_handle; std::map V; @@ -336,7 +360,7 @@ void write_vtu_with_attributes(std::ostream& os, os << " \n"; std::size_t offset = 0; - const bool binary = (mode == IO::BINARY); + const bool binary = (mode == BINARY); write_cdt_points_tag(os,tr,V,binary,offset); write_cells_tag_2(os,tr,number_of_triangles, V,binary,offset); if(attributes.empty()) @@ -361,16 +385,27 @@ void write_vtu_with_attributes(std::ostream& os, } } // namespace internal -} // namespace CGAL +template +void write_VTU(std::ostream& os, + const CDT& tr, + Mode mode = BINARY) +{ + std::vector*> > dummy_atts; + internal::write_VTU_with_attributes(os, tr, dummy_atts, mode); +} + +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE template void write_vtu(std::ostream& os, const CDT& tr, IO::Mode mode = IO::BINARY) { - std::vector*> > dummy_atts; - IO::internal::write_vtu_with_attributes(os, tr, dummy_atts, mode); + IO::write_VTU(os, tr, mode); } +#endif } //end CGAL -#endif // CGAL_WRITE_VTU_H +#endif // CGAL_IO_WRITE_VTU_H diff --git a/Mesh_2/test/Mesh_2/test_conforming.cpp b/Mesh_2/test/Mesh_2/test_conforming.cpp index ece577c247f..bfd56abd7f0 100644 --- a/Mesh_2/test/Mesh_2/test_conforming.cpp +++ b/Mesh_2/test/Mesh_2/test_conforming.cpp @@ -38,7 +38,7 @@ struct Tester { std::cout << "Reading fish.poly...\n"; std::ifstream poly_file("fish.poly"); - CGAL::read_triangle_poly_file(cdt, poly_file); + CGAL::IO::read_triangle_poly_file(cdt, poly_file); const size_type number_of_vertices_poly = cdt.number_of_vertices(); const size_type number_of_constrained_edges_poly = diff --git a/Mesh_2/test/Mesh_2/test_lloyd.cpp b/Mesh_2/test/Mesh_2/test_lloyd.cpp index 8543f1978b9..a07c417cc06 100644 --- a/Mesh_2/test/Mesh_2/test_lloyd.cpp +++ b/Mesh_2/test/Mesh_2/test_lloyd.cpp @@ -39,7 +39,7 @@ struct Lloyd_tester std::cerr << "Reading fish-and-rectangle.poly..."; std::ifstream poly_file("fish-and-rectangle.poly"); - CGAL::read_triangle_poly_file(cdt, poly_file, std::back_inserter(seeds)); + CGAL::IO::read_triangle_poly_file(cdt, poly_file, std::back_inserter(seeds)); CGAL_assertion( cdt.is_valid() ); std::cerr << " done.\nNumber of vertices: " << cdt.number_of_vertices() diff --git a/Mesh_2/test/Mesh_2/test_meshing.cpp b/Mesh_2/test/Mesh_2/test_meshing.cpp index fc7b34e9a00..76c1eb8fa46 100644 --- a/Mesh_2/test/Mesh_2/test_meshing.cpp +++ b/Mesh_2/test/Mesh_2/test_meshing.cpp @@ -59,7 +59,7 @@ struct Tester2 { std::cerr << "Reading fish-and-rectangle.poly..."; std::ifstream poly_file("fish-and-rectangle.poly"); - CGAL::read_triangle_poly_file(cdt, poly_file, std::back_inserter(seeds)); + CGAL::IO::read_triangle_poly_file(cdt, poly_file, std::back_inserter(seeds)); assert(cdt.is_valid()); const size_type inititial_number_of_vertices = cdt.number_of_vertices(); std::cerr << " done.\nNumber of vertices: " << cdt.number_of_vertices() diff --git a/Mesh_3/archive/applications/Distribution_displayer.h b/Mesh_3/archive/applications/Distribution_displayer.h index 7b790b5aa7c..492de63cc2d 100644 --- a/Mesh_3/archive/applications/Distribution_displayer.h +++ b/Mesh_3/archive/applications/Distribution_displayer.h @@ -6,11 +6,11 @@ struct Distribution_displayer { virtual void fill_rectangle(double x1, double y1, double x2, double y2, - CGAL::Color c) = 0; + CGAL::IO::Color c) = 0; virtual void segment(double x1, double y1, double x2, double y2, - CGAL::Color c) = 0; + CGAL::IO::Color c) = 0; virtual ~Distribution_displayer() {}; }; diff --git a/Mesh_3/archive/applications/Gd_displayer.cpp b/Mesh_3/archive/applications/Gd_displayer.cpp index 529ef5efa7d..8b395cd438e 100644 --- a/Mesh_3/archive/applications/Gd_displayer.cpp +++ b/Mesh_3/archive/applications/Gd_displayer.cpp @@ -20,7 +20,7 @@ Gd_displayer::~Gd_displayer() void Gd_displayer::fill_rectangle(double x1, double y1, double x2, double y2, - CGAL::Color c) + CGAL::IO::Color c) { gdImageFilledRectangle(im, x_pixel(x1), y_pixel(y2), @@ -30,7 +30,7 @@ void Gd_displayer::fill_rectangle(double x1, double y1, void Gd_displayer::segment(double x1, double y1, double x2, double y2, - CGAL::Color c) + CGAL::IO::Color c) { gdImageLine(im, x_pixel(x1), y_pixel(y1), diff --git a/Mesh_3/archive/applications/Gd_displayer.h b/Mesh_3/archive/applications/Gd_displayer.h index bad8700844e..9df1f7c047a 100644 --- a/Mesh_3/archive/applications/Gd_displayer.h +++ b/Mesh_3/archive/applications/Gd_displayer.h @@ -21,11 +21,11 @@ struct Gd_displayer : public Distribution_displayer //@{ void fill_rectangle(double x1, double y1, double x2, double y2, - CGAL::Color c); + CGAL::IO::Color c); void segment(double x1, double y1, double x2, double y2, - CGAL::Color c); + CGAL::IO::Color c); //@} /** \name FUNCTIONS SPECIFIC TO Gd_displayer */ @@ -73,7 +73,7 @@ struct Gd_displayer : public Distribution_displayer /** Returns the index of the color c in the image palette. */ inline - int gd_color(CGAL::Color c) + int gd_color(CGAL::IO::Color c) { int i = gdImageColorExact(im, c.red(), diff --git a/Mesh_3/archive/applications/Qt_widget_displayer.cpp b/Mesh_3/archive/applications/Qt_widget_displayer.cpp index 1526edfe798..2662f5f78df 100644 --- a/Mesh_3/archive/applications/Qt_widget_displayer.cpp +++ b/Mesh_3/archive/applications/Qt_widget_displayer.cpp @@ -14,7 +14,7 @@ Qt_widget_displayer::Qt_widget_displayer(CGAL::Qt_widget* w) : widget(w) {} void Qt_widget_displayer::fill_rectangle(double x1, double y1, double x2, double y2, - CGAL::Color color) + CGAL::IO::Color color) { *widget << CGAL::FillColor(color) << color @@ -23,7 +23,7 @@ void Qt_widget_displayer::fill_rectangle(double x1, double y1, void Qt_widget_displayer::segment(double x1, double y1, double x2, double y2, - CGAL::Color color) + CGAL::IO::Color color) { *widget << color << Segment_2(Point_2(x1, y1), Point_2(x2, y2)); diff --git a/Mesh_3/archive/applications/Qt_widget_displayer.h b/Mesh_3/archive/applications/Qt_widget_displayer.h index 3f5224c8887..02d08f0e980 100644 --- a/Mesh_3/archive/applications/Qt_widget_displayer.h +++ b/Mesh_3/archive/applications/Qt_widget_displayer.h @@ -10,11 +10,11 @@ struct Qt_widget_displayer : public Distribution_displayer void fill_rectangle(double x1, double y1, double x2, double y2, - CGAL::Color c); + CGAL::IO::Color c); void segment(double x1, double y1, double x2, double y2, - CGAL::Color c); + CGAL::IO::Color c); private: CGAL::Qt_widget* widget; }; diff --git a/Mesh_3/archive/applications/cgal_to_medit.cpp b/Mesh_3/archive/applications/cgal_to_medit.cpp index 932c2c89850..e69f729004e 100644 --- a/Mesh_3/archive/applications/cgal_to_medit.cpp +++ b/Mesh_3/archive/applications/cgal_to_medit.cpp @@ -39,7 +39,7 @@ int main(int , char** argv) // &std::cout) ) // debug to cout { std::cout << " Writing " << argv[2] << std::endl; - CGAL::output_to_medit(ofs, c2t3); + CGAL::IO::output_to_medit(ofs, c2t3); return EXIT_SUCCESS; } else diff --git a/Mesh_3/archive/applications/display_distribution.cpp b/Mesh_3/archive/applications/display_distribution.cpp index c989ce8952c..28188b9c9d7 100644 --- a/Mesh_3/archive/applications/display_distribution.cpp +++ b/Mesh_3/archive/applications/display_distribution.cpp @@ -165,8 +165,8 @@ void output_distribution_to_png(std::vector& elements, widget->show(); widget->lock(); - *widget << CGAL::FillColor(CGAL::Color(200, 200, 200)) - << CGAL::Color(200, 200, 200) + *widget << CGAL::FillColor(CGAL::IO::Color(200, 200, 200)) + << CGAL::IO::Color(200, 200, 200) << Rectangle_2(Point_2(0, 0), Point_2(1,1)); if( number_of_classes == 0 ) return; @@ -189,7 +189,7 @@ void output_distribution_to_png(std::vector& elements, Point_2((k+1)*width, height)); } else - *widget << CGAL::red() << Segment_2(Point_2(k*width, 0), + *widget << CGAL::IO::red() << Segment_2(Point_2(k*width, 0), Point_2((k+1)*width, 0)); widget->unlock(); diff --git a/Mesh_3/archive/applications/distribution.cpp b/Mesh_3/archive/applications/distribution.cpp index d45a3fbce70..97e1b6c33c5 100644 --- a/Mesh_3/archive/applications/distribution.cpp +++ b/Mesh_3/archive/applications/distribution.cpp @@ -27,7 +27,7 @@ void display_distribution(Distribution_displayer* display, if( number_of_classes == 0 ) return; const double width = 1.0 / number_of_classes; - display->fill_rectangle(0., 0., 1., 1., CGAL::Color(200, 200, 200)); + display->fill_rectangle(0., 0., 1., 1., CGAL::IO::Color(200, 200, 200)); for(int k = 0; k < number_of_classes; ++k) if(distribution[k]>0) { @@ -39,5 +39,5 @@ void display_distribution(Distribution_displayer* display, else display->segment(k * width, 0., (k+1) * width, 0., - CGAL::red()); + CGAL::IO::red()); } diff --git a/Mesh_3/archive/applications/lanteri_process_results.cpp b/Mesh_3/archive/applications/lanteri_process_results.cpp index 44302fdec30..d433adc1ebb 100644 --- a/Mesh_3/archive/applications/lanteri_process_results.cpp +++ b/Mesh_3/archive/applications/lanteri_process_results.cpp @@ -99,7 +99,7 @@ bool process_aux_2(const std::vector& qualities, displays[i]->segment(x_position_of_length_bound, 0.0, x_position_of_length_bound, -0.05, - CGAL::blue()); + CGAL::IO::blue()); } *out_stream << "saving " << filename.c_str() << "...\n"; diff --git a/Mesh_3/archive/applications/mesh_implicit_domains.cpp b/Mesh_3/archive/applications/mesh_implicit_domains.cpp index 1f85de4129f..2a5a623dadd 100644 --- a/Mesh_3/archive/applications/mesh_implicit_domains.cpp +++ b/Mesh_3/archive/applications/mesh_implicit_domains.cpp @@ -240,7 +240,7 @@ int main(int argc, char* argv[]) // Output std::ofstream medit_file("out.mesh"); - CGAL::output_to_medit(medit_file, c3t3, !vm.count("no_label_rebind"), vm.count("show_patches")); + CGAL::IO::output_to_medit(medit_file, c3t3, !vm.count("no_label_rebind"), vm.count("show_patches")); return 0; } diff --git a/Mesh_3/archive/applications/mesher_tester.h b/Mesh_3/archive/applications/mesher_tester.h index c27cd811dbd..cc8107179fe 100644 --- a/Mesh_3/archive/applications/mesher_tester.h +++ b/Mesh_3/archive/applications/mesher_tester.h @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include "thread_queue.h" @@ -51,7 +51,7 @@ template struct Optimizer; template struct Mesher { - Mesher(const boost::shared_ptr >& pdomain_builder, + Mesher(const std::shared_ptr >& pdomain_builder, const int mesh_nb, const std::string& filename, const std::string& output, @@ -95,7 +95,7 @@ struct Mesher timer.start(); // we keep c3t3 between lines - boost::shared_ptr pc3t3_save (new C3T3()); + std::shared_ptr pc3t3_save (new C3T3()); // Generate Mesh file_out << "Generate mesh..."; @@ -183,7 +183,7 @@ private: } private: - boost::shared_ptr > pdomain_builder_; + std::shared_ptr > pdomain_builder_; int mesh_nb_; std::string filename_; std::string output_prefix_; @@ -196,8 +196,8 @@ private: template struct Optimizer { - Optimizer(const boost::shared_ptr& pc3t3, - const boost::shared_ptr >& pdomain_builder, + Optimizer(const std::shared_ptr& pc3t3, + const std::shared_ptr >& pdomain_builder, const int mesh_nb, const std::string& output, const std::string& command_line) @@ -339,8 +339,8 @@ private: private: - boost::shared_ptr pc3t3_; - boost::shared_ptr > pdomain_builder_; + std::shared_ptr pc3t3_; + std::shared_ptr > pdomain_builder_; std::string mesh_nb_; std::string output_prefix_; std::string command_line_; @@ -571,7 +571,7 @@ void mesh(const std::string& data, const std::string& output_dir, const int nb_t //Load the domain std::stringstream cout_loc; cout_loc << "+ [" << filename << "] Create domain..."; - boost::shared_ptr > pdomain_builder(new Domain_builder(it->path().string())); + std::shared_ptr > pdomain_builder(new Domain_builder(it->path().string())); cout_loc << "done (" << timer.time() << "s)\n"; std::cout << cout_loc.str(); diff --git a/Mesh_3/archive/applications/output_distribution_to_stdout.cpp b/Mesh_3/archive/applications/output_distribution_to_stdout.cpp index 1742f1191a9..2b18f4488f2 100644 --- a/Mesh_3/archive/applications/output_distribution_to_stdout.cpp +++ b/Mesh_3/archive/applications/output_distribution_to_stdout.cpp @@ -171,8 +171,8 @@ void parse_argv(int argc, char** argv, int extra_args = 0) // widget->show(); // // // widget->lock(); -//// *widget << CGAL::FillColor(CGAL::Color(200, 200, 200)) -//// << CGAL::Color(200, 200, 200) +//// *widget << CGAL::FillColor(CGAL::IO::Color(200, 200, 200)) +//// << CGAL::IO::Color(200, 200, 200) //// << Rectangle_2(Point_2(0, 0), Point_2(1,1)); //// // if( number_of_classes == 0 ) return; @@ -195,7 +195,7 @@ void parse_argv(int argc, char** argv, int extra_args = 0) //// Point_2((k+1)*width, height)); // } // else -//// *widget << CGAL::red() << Segment_2(Point_2(k*width, 0), +//// *widget << CGAL::IO::red() << Segment_2(Point_2(k*width, 0), //// Point_2((k+1)*width, 0)); // // // widget->unlock(); diff --git a/Mesh_3/archive/applications/slivers_exuder.cpp b/Mesh_3/archive/applications/slivers_exuder.cpp index 1d02cef1932..a3d13d27e0c 100644 --- a/Mesh_3/archive/applications/slivers_exuder.cpp +++ b/Mesh_3/archive/applications/slivers_exuder.cpp @@ -69,7 +69,7 @@ int main(int argc, char** argv) timer.stop(); std::cout << " Pumping done. CPU time: " << timer.time() << std::endl; - CGAL::set_binary_mode(ofs); + CGAL::IO::set_binary_mode(ofs); std::cout << " Writing " << argv[2] << std::endl; CGAL::Mesh_3::output_mesh(ofs, c2t3); ofs.close(); diff --git a/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_edge_tolerance_region.cpp b/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_edge_tolerance_region.cpp index 36ccb42983a..771051e4ba3 100644 --- a/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_edge_tolerance_region.cpp +++ b/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_edge_tolerance_region.cpp @@ -60,7 +60,7 @@ int main(int argc, char*argv[]) // Output std::ofstream medit_file("out.mesh"); - CGAL::output_to_medit(medit_file, c3t3); + CGAL::IO::output_to_medit(medit_file, c3t3); return 0; } diff --git a/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_implicit_function.cpp b/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_implicit_function.cpp index 6f4fc2a96e0..0b9fdcefb01 100644 --- a/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_implicit_function.cpp +++ b/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_implicit_function.cpp @@ -59,7 +59,7 @@ int main(int argc, char*argv[]) // Output std::ofstream medit_file("out.mesh"); - CGAL::output_to_medit(medit_file, c3t3); + CGAL::IO::output_to_medit(medit_file, c3t3); return 0; } diff --git a/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_surface_tolerance_region.cpp b/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_surface_tolerance_region.cpp index 8f6ff483511..c13fd3615ec 100644 --- a/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_surface_tolerance_region.cpp +++ b/Mesh_3/archive/examples/Mesh_3/mesh_polyhedral_surface_tolerance_region.cpp @@ -58,7 +58,7 @@ int main(int argc, char*argv[]) // Output std::ofstream medit_file("out.mesh"); - CGAL::output_to_medit(medit_file, c3t3); + CGAL::IO::output_to_medit(medit_file, c3t3); return 0; } diff --git a/Mesh_3/benchmark/Mesh_3/StdAfx.h b/Mesh_3/benchmark/Mesh_3/StdAfx.h index ac0f9e1b5b2..7f3c5f93ca7 100644 --- a/Mesh_3/benchmark/Mesh_3/StdAfx.h +++ b/Mesh_3/benchmark/Mesh_3/StdAfx.h @@ -131,7 +131,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/Mesh_3/doc/Mesh_3/CGAL/IO/File_avizo.h b/Mesh_3/doc/Mesh_3/CGAL/IO/File_avizo.h index 94c1c3684a6..f4f679a9eb5 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/IO/File_avizo.h +++ b/Mesh_3/doc/Mesh_3/CGAL/IO/File_avizo.h @@ -1,4 +1,5 @@ namespace CGAL{ +namespace IO { /** * \ingroup PkgMesh3IOFunctions * @brief outputs mesh to avizo format @@ -10,4 +11,4 @@ template void output_to_avizo(std::ostream& os, const C3T3& c3t3); -} +}} diff --git a/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h b/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h index 62bb1476d86..bdbb7e0d01e 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h +++ b/Mesh_3/doc/Mesh_3/CGAL/IO/File_medit.h @@ -1,5 +1,5 @@ namespace CGAL { - +namespace IO { /// \ingroup PkgMesh3IOFunctions /// /// \brief outputs a mesh complex to the medit (`.mesh`) file format. @@ -18,4 +18,4 @@ void output_to_medit(std::ostream& os, bool rebind = false, bool show_patches = false); -} // end namespace CGAL +}} // end namespace CGAL::IO diff --git a/Mesh_3/doc/Mesh_3/CGAL/IO/File_tetgen.h b/Mesh_3/doc/Mesh_3/CGAL/IO/File_tetgen.h index b142b41f0c7..8294618586b 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/IO/File_tetgen.h +++ b/Mesh_3/doc/Mesh_3/CGAL/IO/File_tetgen.h @@ -1,4 +1,5 @@ namespace CGAL{ +namespace IO { /** * \ingroup PkgMesh3IOFunctions * @brief outputs a mesh complex to tetgen format @@ -16,4 +17,4 @@ output_to_tetgen(std::string filename, const C3T3& c3t3, bool rebind = false, bool show_patches = false); -} +} } diff --git a/Mesh_3/doc/Mesh_3/CGAL/IO/output_to_vtu.h b/Mesh_3/doc/Mesh_3/CGAL/IO/output_to_vtu.h index 70a64f586c7..e1d9d87e4a9 100644 --- a/Mesh_3/doc/Mesh_3/CGAL/IO/output_to_vtu.h +++ b/Mesh_3/doc/Mesh_3/CGAL/IO/output_to_vtu.h @@ -1,4 +1,5 @@ namespace CGAL{ +namespace IO { //! \ingroup PkgMesh3IOFunctions //! //! \brief writes a tetrahedron mesh using the `UnstructuredGrid` XML format. @@ -13,5 +14,5 @@ namespace CGAL{ template void output_to_vtu(std::ostream& os, const C3T3& c3t3, - IO::Mode mode = IO::BINARY); -} + IO::Mode mode = BINARY); +} } diff --git a/Mesh_3/doc/Mesh_3/Mesh_3.txt b/Mesh_3/doc/Mesh_3/Mesh_3.txt index 364ef99de87..97d84bfb778 100644 --- a/Mesh_3/doc/Mesh_3/Mesh_3.txt +++ b/Mesh_3/doc/Mesh_3/Mesh_3.txt @@ -549,10 +549,10 @@ for more details. \section Mesh_3_section_io Input/Output Several file formats are supported for writing a mesh: - - \ref IOStreamVTK, using `CGAL::output_to_vtu()` - - \ref IOStreamAvizo, using `CGAL::output_to_avizo()` - - \ref IOStreamMedit, using `CGAL::output_to_medit()` - - \ref IOStreamTetgen, using `CGAL::output_to_tetgen()` + - \ref IOStreamVTK, using `CGAL::IO::output_to_vtu()` + - \ref IOStreamAvizo, using `CGAL::IO::output_to_avizo()` + - \ref IOStreamMedit, using `CGAL::IO::output_to_medit()` + - \ref IOStreamTetgen, using `CGAL::IO::output_to_tetgen()` \section Mesh_3_section_examples Examples diff --git a/Mesh_3/doc/Mesh_3/PackageDescription.txt b/Mesh_3/doc/Mesh_3/PackageDescription.txt index 9d9edbfd5ac..f7a09d8f473 100644 --- a/Mesh_3/doc/Mesh_3/PackageDescription.txt +++ b/Mesh_3/doc/Mesh_3/PackageDescription.txt @@ -138,7 +138,7 @@ and their associated classes: - `CGAL::Mesh_facet_topology` \cgalCRPSection{Input/Output Functions} -- `CGAL::output_to_medit()` -- `CGAL::output_to_vtu()` +- `CGAL::IO::output_to_medit()` +- `CGAL::IO::output_to_vtu()` */ diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_gray_vtk_image.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_gray_vtk_image.cpp index 4d2012dfa5b..4083c4c5aca 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_gray_vtk_image.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_gray_vtk_image.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include @@ -73,7 +73,7 @@ int main(int argc, char* argv[]) vtkImageData* vtk_image = smoother->GetOutput(); vtk_image->Print(std::cerr); - CGAL::Image_3 image = CGAL::read_vtk_image_data(vtk_image); + CGAL::Image_3 image = CGAL::IO::read_vtk_image_data(vtk_image); if(image.image() == 0){ std::cerr << "could not create a CGAL::Image_3 from the vtk image\n"; return 0; diff --git a/Mesh_3/examples/Mesh_3/mesh_cubes_intersection.cpp b/Mesh_3/examples/Mesh_3/mesh_cubes_intersection.cpp index b25b4f127b7..12216cc2cbd 100644 --- a/Mesh_3/examples/Mesh_3/mesh_cubes_intersection.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_cubes_intersection.cpp @@ -91,7 +91,7 @@ int main() // Output std::ofstream medit_file("out_cubes_intersection.mesh"); - CGAL::output_to_medit(medit_file, c3t3); + CGAL::IO::output_to_medit(medit_file, c3t3); return 0; } diff --git a/Mesh_3/examples/Mesh_3/mesh_cubes_intersection_with_features.cpp b/Mesh_3/examples/Mesh_3/mesh_cubes_intersection_with_features.cpp index 6b67c567c5d..61d2d78d993 100644 --- a/Mesh_3/examples/Mesh_3/mesh_cubes_intersection_with_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_cubes_intersection_with_features.cpp @@ -178,7 +178,7 @@ int main() // Output std::ofstream medit_file("out_cubes_intersection_with_features.mesh"); - CGAL::output_to_medit(medit_file, c3t3); + CGAL::IO::output_to_medit(medit_file, c3t3); return 0; } diff --git a/Mesh_3/examples/Mesh_3/mesh_implicit_domains.cpp b/Mesh_3/examples/Mesh_3/mesh_implicit_domains.cpp index efb5ea0f743..d8790c25fd3 100644 --- a/Mesh_3/examples/Mesh_3/mesh_implicit_domains.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_implicit_domains.cpp @@ -67,7 +67,7 @@ int main() // Output std::ofstream medit_file("out.mesh"); - CGAL::output_to_medit(medit_file, c3t3); + CGAL::IO::output_to_medit(medit_file, c3t3); return 0; } diff --git a/Mesh_3/examples/Mesh_3/mesh_implicit_domains_2.cpp b/Mesh_3/examples/Mesh_3/mesh_implicit_domains_2.cpp index 4401a1ab468..6d50993bbdd 100644 --- a/Mesh_3/examples/Mesh_3/mesh_implicit_domains_2.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_implicit_domains_2.cpp @@ -69,7 +69,7 @@ int main() // Output std::ofstream medit_file("out.mesh"); - CGAL::output_to_medit(medit_file, c3t3); + CGAL::IO::output_to_medit(medit_file, c3t3); return 0; } diff --git a/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features.cpp b/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features.cpp index 1f79004ce4b..ce185877344 100644 --- a/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features.cpp @@ -64,7 +64,7 @@ int main(int argc, char*argv[]) // Output std::ofstream file("out.vtu"); - CGAL::output_to_vtu(file, c3t3); + CGAL::IO::output_to_vtu(file, c3t3); // Could be replaced by: // c3t3.output_to_medit(file); diff --git a/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features_sm.cpp b/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features_sm.cpp index ab357f2ca0c..33b95fafea6 100644 --- a/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features_sm.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_polyhedral_domain_with_features_sm.cpp @@ -65,7 +65,7 @@ int main(int argc, char*argv[]) // Output std::ofstream file("out-sm.vtu"); - CGAL::output_to_vtu(file, c3t3, CGAL::IO::ASCII); + CGAL::IO::output_to_vtu(file, c3t3, CGAL::IO::ASCII); // Could be replaced by: // c3t3.output_to_medit(file); diff --git a/Mesh_3/include/CGAL/Compact_mesh_cell_base_3.h b/Mesh_3/include/CGAL/Compact_mesh_cell_base_3.h index 13fd9f70083..765c2a373c9 100644 --- a/Mesh_3/include/CGAL/Compact_mesh_cell_base_3.h +++ b/Mesh_3/include/CGAL/Compact_mesh_cell_base_3.h @@ -669,7 +669,7 @@ public: friend std::istream& operator>>(std::istream &is, Compact_mesh_cell_3 &c) { Subdomain_index index; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> index; else read(is, index); @@ -678,8 +678,8 @@ public: for(int i = 0; i < 4; ++i) { Surface_patch_index i2; - if(is_ascii(is)) - is >> iformat(i2); + if(IO::is_ascii(is)) + is >> IO::iformat(i2); else { read(is, i2); @@ -693,14 +693,14 @@ public: friend std::ostream& operator<<(std::ostream &os, const Compact_mesh_cell_3 &c) { - if(is_ascii(os)) + if(IO::is_ascii(os)) os << c.subdomain_index(); else write(os, c.subdomain_index()); for(int i = 0; i < 4; ++i) { - if(is_ascii(os)) - os << ' ' << oformat(c.surface_patch_index(i)); + if(IO::is_ascii(os)) + os << ' ' << IO::oformat(c.surface_patch_index(i)); else write(os, c.surface_patch_index(i)); } diff --git a/Mesh_3/include/CGAL/IO/Complex_3_in_triangulation_3_to_vtk.h b/Mesh_3/include/CGAL/IO/Complex_3_in_triangulation_3_to_vtk.h index 2d101a4ea92..1586f5ac4f7 100644 --- a/Mesh_3/include/CGAL/IO/Complex_3_in_triangulation_3_to_vtk.h +++ b/Mesh_3/include/CGAL/IO/Complex_3_in_triangulation_3_to_vtk.h @@ -26,6 +26,8 @@ namespace CGAL { +namespace IO { + //if export_complex is false, there must be no far point. template vtkUnstructuredGrid* @@ -121,6 +123,12 @@ output_c3t3_to_vtk_unstructured_grid(const C3T3& c3t3, return grid; } +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::output_c3t3_to_vtk_unstructured_grid; +#endif + } // end namespace CGAL #endif // CGAL_COMPLEX_3_IN_TRIANGULATION_3_TO_VTK diff --git a/Mesh_3/include/CGAL/IO/File_avizo.h b/Mesh_3/include/CGAL/IO/File_avizo.h index 704200b069b..f2b31d68d6c 100644 --- a/Mesh_3/include/CGAL/IO/File_avizo.h +++ b/Mesh_3/include/CGAL/IO/File_avizo.h @@ -24,9 +24,14 @@ namespace CGAL { -namespace Mesh_3 { - +namespace IO { +/** + * @brief outputs mesh to avizo format + * @param os the stream + * @param c3t3 the mesh + * \see \ref IOStreamAvizo + */ template void output_to_avizo(std::ostream& os, @@ -137,24 +142,11 @@ output_to_avizo(std::ostream& os, } // end output_to_avizo(...) -} // end namespace Mesh_3 +} // end namespace IO - - - -/** - * @brief outputs mesh to avizo format - * @param os the stream - * @param c3t3 the mesh - * \see \ref IOStreamAvizo - */ -template -void -output_to_avizo(std::ostream& os, - const C3T3& c3t3) -{ - Mesh_3::output_to_avizo(os,c3t3); -} +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::output_to_avizo; +#endif } // end namespace CGAL diff --git a/Mesh_3/include/CGAL/IO/File_binary_mesh_3.h b/Mesh_3/include/CGAL/IO/File_binary_mesh_3.h index 52ac49d057b..a2a87ee45ca 100644 --- a/Mesh_3/include/CGAL/IO/File_binary_mesh_3.h +++ b/Mesh_3/include/CGAL/IO/File_binary_mesh_3.h @@ -23,7 +23,7 @@ namespace CGAL { -namespace Mesh_3 { +namespace IO { template bool @@ -35,9 +35,9 @@ save_binary_file(std::ostream& os, if(binary) os << "binary "; os << "CGAL c3t3 " << CGAL::Get_io_signature()() << "\n"; if(binary) { - CGAL::set_binary_mode(os); + CGAL::IO::set_binary_mode(os); } else { - CGAL::set_ascii_mode(os); + CGAL::IO::set_ascii_mode(os); os.precision(std::numeric_limits::digits10+2); } return !!(os << c3t3); @@ -71,13 +71,21 @@ bool load_binary_file(std::istream& is, C3T3& c3t3) return false; } } - if(binary) CGAL::set_binary_mode(is); + if(binary) CGAL::IO::set_binary_mode(is); is >> c3t3; return !!is; // call operator!() twice, because operator bool() is C++11 } -} // end namespace Mesh_3 +} // end namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +namespace Mesh_3 { +using IO::save_binary_file; +using IO::load_binary_file; +} +#endif + } // end namespace CGAL #endif // CGAL_IO_FILE_BINARY_MESH_3_H diff --git a/Mesh_3/include/CGAL/IO/File_maya.h b/Mesh_3/include/CGAL/IO/File_maya.h index c482186b386..4546132bb95 100644 --- a/Mesh_3/include/CGAL/IO/File_maya.h +++ b/Mesh_3/include/CGAL/IO/File_maya.h @@ -25,6 +25,7 @@ #include namespace CGAL { +namespace IO { template void output_to_maya(std::ostream& os, @@ -310,6 +311,12 @@ output_to_maya(std::ostream& os, #endif } // end output_to_maya(...) +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::output_to_maya; +#endif + } // end namespace CGAL #endif // CGAL_IO_FILE_MAYA_H diff --git a/Mesh_3/include/CGAL/IO/File_medit.h b/Mesh_3/include/CGAL/IO/File_medit.h index bac7e7b2560..95585dc1b82 100644 --- a/Mesh_3/include/CGAL/IO/File_medit.h +++ b/Mesh_3/include/CGAL/IO/File_medit.h @@ -862,6 +862,8 @@ output_to_medit(std::ostream& os, } // end namespace Mesh_3 +namespace IO { + /** * @brief outputs mesh to medit format * @param os the stream @@ -912,6 +914,12 @@ bool read_MEDIT(std::istream& in, T3& t3) return CGAL::build_triangulation_from_file(in, t3); } +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::output_to_medit; +#endif + } // end namespace CGAL #endif // CGAL_IO_FILE_MEDIT_H diff --git a/Mesh_3/include/CGAL/IO/File_tetgen.h b/Mesh_3/include/CGAL/IO/File_tetgen.h index 0eca7bdb760..03fad2e7998 100644 --- a/Mesh_3/include/CGAL/IO/File_tetgen.h +++ b/Mesh_3/include/CGAL/IO/File_tetgen.h @@ -187,8 +187,7 @@ output_to_tetgen(std::string filename, } // end namespace Mesh_3 - - +namespace IO { template void @@ -213,6 +212,12 @@ output_to_tetgen(std::string filename, } } +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::output_to_tetgen; +#endif + } // end namespace CGAL #endif // CGAL_IO_FILE_TETGEN_H diff --git a/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h b/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h index d69f445716f..95b6d7eeddf 100644 --- a/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h +++ b/Mesh_3/include/CGAL/IO/facets_in_complex_3_to_triangle_mesh.h @@ -11,175 +11,17 @@ // Author(s) : Maxime Gimeno, // Mael Rouxel-Labbé -#ifndef CGAL_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H -#define CGAL_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H +#ifndef CGAL_IO_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H +#define CGAL_IO_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H #include -#include -#include -#include -#include -#include +#ifndef CGAL_NO_DEPRECATED_CODE +#include -#include -#include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_REPLACEMENT_HEADER "" +#include +#endif -#include -#include -#include -#include - -namespace CGAL { - -namespace Mesh_3 { - -namespace internal { - -template -void resize(Polygon& p, std::size_t size) -{ - p.resize(size); -} - -template -void resize(std::array&, std::size_t CGAL_assertion_code(size)) -{ - CGAL_assertion(size == N); -} - -template -void facets_in_complex_3_to_triangle_soup(const C3T3& c3t3, - const typename C3T3::Subdomain_index sd_index, - PointContainer& points, - FaceContainer& faces, - const bool normals_point_outside_of_the_subdomain = true, - const bool export_all_facets = false) -{ - typedef typename PointContainer::value_type Point_3; - typedef typename FaceContainer::value_type Face; - - typedef typename C3T3::Triangulation Tr; - - typedef typename Tr::Vertex_handle Vertex_handle; - typedef typename Tr::Cell_handle Cell_handle; - typedef typename Tr::Weighted_point Weighted_point; - - typedef typename C3T3::Facets_in_complex_iterator Ficit; - - typedef CGAL::Hash_handles_with_or_without_timestamps Hash_fct; - typedef boost::unordered_map VHmap; - - typedef typename C3T3::size_type size_type; - - size_type nf = c3t3.number_of_facets_in_complex(); - faces.reserve(faces.size() + nf); - points.reserve(points.size() + nf/2); // approximating Euler - - VHmap vh_to_ids; - std::size_t inum = 0; - - for(Ficit fit = c3t3.facets_in_complex_begin(), - end = c3t3.facets_in_complex_end(); fit != end; ++fit) - { - Cell_handle c = fit->first; - int s = fit->second; - Face f; - resize(f, 3); - - typename C3T3::Subdomain_index cell_sdi = c3t3.subdomain_index(c); - typename C3T3::Subdomain_index opp_sdi = c3t3.subdomain_index(c->neighbor(s)); - - if(!export_all_facets && cell_sdi != sd_index && opp_sdi != sd_index) - continue; - - for(std::size_t i=1; i<4; ++i) - { - typename VHmap::iterator map_entry; - bool is_new; - Vertex_handle v = c->vertex((s+i)&3); - CGAL_assertion(v != Vertex_handle() && !c3t3.triangulation().is_infinite(v)); - - boost::tie(map_entry, is_new) = vh_to_ids.insert(std::make_pair(v, inum)); - if(is_new) - { - const Weighted_point& p = c3t3.triangulation().point(c, (s+i)&3); - const Point_3 bp = Point_3(CGAL::to_double(p.x()), - CGAL::to_double(p.y()), - CGAL::to_double(p.z())); - points.push_back(bp); - ++inum; - } - - f[i-1] = map_entry->second; - } - - if(export_all_facets) - { - if((cell_sdi > opp_sdi) == (s%2 == 1)) - std::swap(f[0], f[1]); - } - else - { - if(((cell_sdi == sd_index) == (s%2 == 1)) == normals_point_outside_of_the_subdomain) - std::swap(f[0], f[1]); - } - - faces.push_back(f); - } -} - -template -void facets_in_complex_3_to_triangle_soup(const C3T3& c3t3, - PointContainer& points, - FaceContainer& faces) -{ - typedef typename C3T3::Subdomain_index Subdomain_index; - Subdomain_index useless = Subdomain_index(); - facets_in_complex_3_to_triangle_soup(c3t3, useless, points, faces, - true/*point outward*/, true /*extract all facets*/); -} - -} // end namespace internal - -} // end namespace Mesh_3 - -//! \ingroup PkgMesh3Functions -//! -//! \brief builds a `TriangleMesh` from the surface facets, with a consistent orientation -//! at the interface of two subdomains. -//! -//! This function exports the surface as a `TriangleMesh` and appends it to `graph`, using -//! `orient_polygon_soup()`. -//! -//! @tparam C3T3 a model of `MeshComplexWithFeatures_3InTriangulation_3`. -//! @tparam TriangleMesh a model of `MutableFaceGraph` with an internal point property map. -//! The point type should be compatible with the one used in `C3T3`. -//! -//! @param c3t3 an instance of `C3T3`. -//! @param graph an instance of `TriangleMesh`. -template -void facets_in_complex_3_to_triangle_mesh(const C3T3& c3t3, TriangleMesh& graph) -{ - namespace PMP = CGAL::Polygon_mesh_processing; - - typedef typename boost::property_map::type VertexPointMap; - typedef typename boost::property_traits::value_type Point_3; - - typedef std::array Face; - - std::vector faces; - std::vector points; - - Mesh_3::internal::facets_in_complex_3_to_triangle_soup(c3t3, points, faces); - - if(!PMP::is_polygon_soup_a_polygon_mesh(faces)) - PMP::orient_polygon_soup(points, faces); - CGAL_postcondition(PMP::is_polygon_soup_a_polygon_mesh(faces)); - - PMP::polygon_soup_to_polygon_mesh(points, faces, graph); -} - -} // namespace CGAL - -#endif // CGAL_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H +#endif // CGAL_IO_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H diff --git a/Mesh_3/include/CGAL/IO/output_to_vtu.h b/Mesh_3/include/CGAL/IO/output_to_vtu.h index 65a96d013d7..d553ddfdfed 100644 --- a/Mesh_3/include/CGAL/IO/output_to_vtu.h +++ b/Mesh_3/include/CGAL/IO/output_to_vtu.h @@ -136,9 +136,9 @@ write_cells(std::ostream& os, connectivity_table.push_back(V[cit->vertex(i)]); } - IO::internal::write_vector(os,connectivity_table); - IO::internal::write_vector(os,offsets); - IO::internal::write_vector(os,cell_type); + internal::write_vector(os,connectivity_table); + internal::write_vector(os,offsets); + internal::write_vector(os,cell_type); } @@ -214,7 +214,7 @@ write_c3t3_points(std::ostream& os, coordinates.push_back(vit->point()[1]); coordinates.push_back(dim == 3 ? vit->point()[2] : 0.0); } - IO::internal::write_vector(os,coordinates); + internal::write_vector(os,coordinates); } // writes the attribute tags before binary data is appended @@ -264,7 +264,7 @@ void write_attributes(std::ostream& os, const std::vector& att) { - IO::internal::write_vector(os,att); + internal::write_vector(os,att); } enum VTU_ATTRIBUTE_TYPE{ @@ -279,7 +279,7 @@ template void output_to_vtu_with_attributes(std::ostream& os, const C3T3& c3t3, std::vector >&attributes, - IO::Mode mode = IO::BINARY) + Mode mode = BINARY) { //CGAL_assertion(attributes.size() == attribute_types.size()); typedef typename C3T3::Triangulation Tr; @@ -308,7 +308,7 @@ void output_to_vtu_with_attributes(std::ostream& os, << "\" NumberOfCells=\"" << c3t3.number_of_cells() << "\">\n"; std::size_t offset = 0; - const bool binary = (mode == IO::BINARY); + const bool binary = (mode == BINARY); write_c3t3_points_tag(os,tr,number_of_vertices,V,binary,offset); write_cells_tag(os,c3t3,V,binary,offset); // fills V if the mode is ASCII os << " \n"; @@ -350,13 +350,12 @@ void output_to_vtu_with_attributes(std::ostream& os, } } // namespace internal -} // namespace IO //public API template void output_to_vtu(std::ostream& os, const C3T3& c3t3, - IO::Mode mode = IO::BINARY) + Mode mode = BINARY) { typedef typename C3T3::Cells_in_complex_iterator Cell_iterator; std::vector mids; @@ -368,12 +367,18 @@ void output_to_vtu(std::ostream& os, mids.push_back(v); } - std::vector > atts; - IO::internal::Vtu_attributes v = &mids; + std::vector > atts; + internal::Vtu_attributes v = &mids; atts.push_back(std::make_pair("MeshDomain", v)); - IO::internal::output_to_vtu_with_attributes(os, c3t3, atts, mode); + internal::output_to_vtu_with_attributes(os, c3t3, atts, mode); } +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::output_to_vtu; +#endif + } // namespace CGAL #endif // CGAL_VTK_IO_H diff --git a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h index 0dceef7f282..6a755990d5e 100644 --- a/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Labeled_mesh_domain_3.h @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include @@ -148,7 +148,7 @@ protected: typedef typename Geom_traits::Sphere_3 Sphere_3; typedef typename Geom_traits::Iso_cuboid_3 Iso_cuboid_3; typedef typename Geom_traits::FT FT; - typedef boost::shared_ptr CGAL_Random_share_ptr_t; + typedef std::shared_ptr CGAL_Random_share_ptr_t; /// Returns squared error bound from \c bbox and \c error FT squared_error_bound(const Iso_cuboid_3& bbox, const FT& error) const { diff --git a/Mesh_3/include/CGAL/Mesh_3/Dump_c3t3.h b/Mesh_3/include/CGAL/Mesh_3/Dump_c3t3.h index 147d4ac59f4..5a798e665e0 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Dump_c3t3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Dump_c3t3.h @@ -45,7 +45,7 @@ struct Dump_c3t3 { std::clog<<"======dump c3t3===== to: " << prefix << std::endl; std::ofstream medit_file((prefix+".mesh").c_str()); medit_file.precision(17); - CGAL::output_to_medit(medit_file, c3t3, false /*rebind*/, true /*show_patches*/); + CGAL::IO::output_to_medit(medit_file, c3t3, false /*rebind*/, true /*show_patches*/); medit_file.close(); std::string bin_filename = prefix; @@ -55,7 +55,7 @@ struct Dump_c3t3 { std::string signature = CGAL::Get_io_signature()(); CGAL_assertion(signature != std::string()); bin_file << "binary CGAL c3t3 " << signature << "\n"; - CGAL::set_binary_mode(bin_file); + CGAL::IO::set_binary_mode(bin_file); bin_file << c3t3; } }; // end struct template Dump_c3t3 diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h b/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h index 618d8c51b8b..c12dac28be1 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesh_complex_3_in_triangulation_3_base.h @@ -462,7 +462,7 @@ public: bool show_patches = false) const { // Call global function - CGAL::output_to_medit(os,*this,rebind,show_patches); + CGAL::IO::output_to_medit(os,*this,rebind,show_patches); } /// Outputs the mesh to maya @@ -470,7 +470,7 @@ public: bool surfaceOnly = true) const { // Call global function - CGAL::output_to_maya(os,*this,surfaceOnly); + CGAL::IO::output_to_maya(os,*this,surfaceOnly); } //------------------------------------------------------- diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesh_surface_cell_base_3.h b/Mesh_3/include/CGAL/Mesh_3/Mesh_surface_cell_base_3.h index 90a0e1ec909..3e5437c8244 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesh_surface_cell_base_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesh_surface_cell_base_3.h @@ -283,7 +283,7 @@ operator>>(std::istream &is, Mesh_surface_cell_base_3 &c) is >> static_cast(c); for(int i = 0; i < 4; ++i) { - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> index; else { @@ -303,8 +303,8 @@ operator<<(std::ostream &os, os << static_cast(c); for(int i = 0; i < 4; ++i) { - if(is_ascii(os)) - os << ' ' << oformat(c.surface_patch_index(i)); + if(IO::is_ascii(os)) + os << ' ' << IO::oformat(c.surface_patch_index(i)); else write(os, c.surface_patch_index(i)); } diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesher_3.h b/Mesh_3/include/CGAL/Mesh_3/Mesher_3.h index 0d81d7a8455..de889e42acf 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesher_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesher_3.h @@ -45,7 +45,6 @@ #include #include #include -#include #ifdef CGAL_MESH_3_USE_OLD_SURFACE_RESTRICTED_DELAUNAY_UPDATE #include @@ -65,6 +64,7 @@ #include #include #include +#include namespace CGAL { namespace Mesh_3 { @@ -222,7 +222,7 @@ public: std::size_t maximal_number_of_vertices = 0, Mesh_error_code* error_code = 0 #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr = 0 + , std::atomic* stop_ptr = 0 #endif ); @@ -294,7 +294,7 @@ private: #ifndef CGAL_NO_ATOMIC /// Pointer to the atomic Boolean that can stop the process - CGAL::cpp11::atomic* const stop_ptr; + std::atomic* const stop_ptr; #endif #ifdef CGAL_LINKED_WITH_TBB @@ -318,7 +318,7 @@ private: bool forced_stop() const { #ifndef CGAL_NO_ATOMIC if(stop_ptr != 0 && - stop_ptr->load(CGAL::cpp11::memory_order_acquire) == true) + stop_ptr->load(std::memory_order_acquire) == true) { if(error_code_ != 0) *error_code_ = CGAL_MESH_3_STOPPED; return true; @@ -353,7 +353,7 @@ Mesher_3::Mesher_3(C3T3& c3t3, std::size_t maximal_number_of_vertices, Mesh_error_code* error_code #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ) : Base(c3t3.bbox(), diff --git a/Mesh_3/include/CGAL/Mesh_3/Mesher_level.h b/Mesh_3/include/CGAL/Mesh_3/Mesher_level.h index b0b7c00229c..b0c7e357c96 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Mesher_level.h +++ b/Mesh_3/include/CGAL/Mesh_3/Mesher_level.h @@ -23,7 +23,6 @@ #include #endif -#include #include #ifdef CGAL_CONCURRENT_MESH_3_PROFILING @@ -37,7 +36,7 @@ # include #endif -#include +#include namespace CGAL { namespace Mesh_3 { @@ -677,7 +676,7 @@ public: void set_lock_ds(Lock_data_structure *) {} void set_worksharing_ds(WorksharingDataStructureType *) {} #ifndef CGAL_NO_ATOMIC - void set_stop_pointer(CGAL::cpp11::atomic*) {} + void set_stop_pointer(std::atomic*) {} #endif protected: @@ -1147,7 +1146,7 @@ public: } #ifndef CGAL_NO_ATOMIC - void set_stop_pointer(CGAL::cpp11::atomic* stop_ptr) + void set_stop_pointer(std::atomic* stop_ptr) { m_stop_ptr = stop_ptr; } @@ -1156,7 +1155,7 @@ public: bool forced_stop() const { #ifndef CGAL_NO_ATOMIC if(m_stop_ptr != 0 && - m_stop_ptr->load(CGAL::cpp11::memory_order_acquire) == true) + m_stop_ptr->load(std::memory_order_acquire) == true) { CGAL_assertion(m_task_group != 0); m_task_group->cancel(); @@ -1177,7 +1176,7 @@ protected: tbb::task_group *m_task_group; #ifndef CGAL_NO_ATOMIC - CGAL::cpp11::atomic* m_stop_ptr; + std::atomic* m_stop_ptr; #endif private: diff --git a/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h b/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h index ab9a4844e5f..36a48742614 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h +++ b/Mesh_3/include/CGAL/Mesh_3/Protect_edges_sizing_field.h @@ -46,7 +46,6 @@ #include #include #include -#include #include @@ -70,6 +69,7 @@ #include #include #include +#include namespace CGAL { namespace Mesh_3 { @@ -102,7 +102,7 @@ void debug_dump_c3t3(const std::string filename, const C3t3& c3t3) std::ofstream out(filename.c_str(), std::ios_base::out|std::ios_base::binary); out << "binary CGAL c3t3 " << CGAL::Get_io_signature()() << "\n"; - CGAL::set_binary_mode(out); + CGAL::IO::set_binary_mode(out); out << c3t3; } @@ -143,7 +143,7 @@ public: std::size_t maximal_number_of_vertices = 0, Mesh_error_code* error_code = 0 #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr = 0 + , std::atomic* stop_ptr = 0 #endif ); @@ -156,7 +156,7 @@ public: bool forced_stop() const { #ifndef CGAL_NO_ATOMIC if(stop_ptr_ != 0 && - stop_ptr_->load(CGAL::cpp11::memory_order_acquire) == true) + stop_ptr_->load(std::memory_order_acquire) == true) { if(error_code_ != 0) *error_code_ = CGAL_MESH_3_STOPPED; return true; @@ -469,7 +469,7 @@ private: Mesh_error_code* const error_code_; #ifndef CGAL_NO_ATOMIC /// Pointer to the atomic Boolean that can stop the process - CGAL::cpp11::atomic* const stop_ptr_; + std::atomic* const stop_ptr_; #endif }; @@ -481,7 +481,7 @@ Protect_edges_sizing_field(C3T3& c3t3, const MD& domain, std::size_t maximal_number_of_vertices, Mesh_error_code* error_code #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ) : c3t3_(c3t3) @@ -578,7 +578,7 @@ insert_corners() Index p_index = domain_.index_from_corner_index(cit->first); #if CGAL_MESH_3_PROTECTION_DEBUG & 1 - std::cerr << "** treat corner #" << CGAL::oformat(p_index) << std::endl; + std::cerr << "** treat corner #" << CGAL::IO::oformat(p_index) << std::endl; #endif // Get weight (the ball radius is given by the 'query_size' function) @@ -679,7 +679,7 @@ insert_point(const Bare_point& p, const Weight& w, int dim, const Index& index, std::cerr << " ERROR dim=" << dim << " index="; } - std::cerr << CGAL::oformat(index) << std::endl; + std::cerr << CGAL::IO::oformat(index) << std::endl; if(v == Vertex_handle()) std::cerr << " HIDDEN!\n"; std::cerr << "The weight was " << w << std::endl; @@ -708,7 +708,7 @@ smart_insert_point(const Bare_point& p, Weight w, int dim, const Index& index, std::cerr << "smart_insert_point( (" << p << "), w=" << w << ", dim=" << dim - << ", index=" << CGAL::oformat(index) << ")\n"; + << ", index=" << CGAL::IO::oformat(index) << ")\n"; #endif const Tr& tr = c3t3_.triangulation(); @@ -1337,7 +1337,7 @@ refine_balls() std::ostringstream oss; oss << "dump_protecting_balls_" << refine_balls_iteration_nb << ".cgal"; std::ofstream outfile(oss.str().c_str(), std::ios_base::binary | std::ios_base::out); - CGAL::Mesh_3::save_binary_file(outfile, c3t3_, true); + CGAL::IO::save_binary_file(outfile, c3t3_, true); outfile.close(); #endif //CGAL_MESH_3_DUMP_FEATURES_PROTECTION_ITERATIONS @@ -1498,7 +1498,7 @@ change_ball_size(const Vertex_handle& v, const FT squared_size, const bool speci #if CGAL_MESH_3_PROTECTION_DEBUG & 1 std::cerr << "change_ball_size(v=" << disp_vert(v) << " dim=" << c3t3_.in_dimension(v) - << " index=" << CGAL::oformat(c3t3_.index(v)) + << " index=" << CGAL::IO::oformat(c3t3_.index(v)) << " ,\n" << " (squared) size=" << w << ", special_ball=" << std::boolalpha << special_ball << std::endl; @@ -1636,7 +1636,7 @@ check_and_fix_vertex_along_edge(const Vertex_handle& v, ErasedVeOutIt out) std::cerr << "check_and_fix_vertex_along_edge(" << disp_vert(v) << " dim=" << get_dimension(v) - << " index=" << CGAL::oformat(c3t3_.index(v)) + << " index=" << CGAL::IO::oformat(c3t3_.index(v)) << " special=" << std::boolalpha << is_special(v) << ")\n"; #endif @@ -1906,7 +1906,7 @@ repopulate(InputIterator begin, InputIterator last, std::cerr << "repopulate(begin=" << disp_vert(*begin) << "\n" << " last=" << disp_vert(*last) << "\n" << " distance(begin, last)=" << std::distance(begin, last) << ",\n" - << " index=" << CGAL::oformat(index) << ",\n" + << " index=" << CGAL::IO::oformat(index) << ",\n" << " orientation=" << orientation << ")\n"; #endif CGAL_assertion( std::distance(begin,last) >= 0 ); @@ -1946,7 +1946,7 @@ repopulate(InputIterator begin, InputIterator last, default: std::cerr << " ERROR dim=" << get_dimension(*current) << " index="; } - std::cerr << CGAL::oformat(c3t3_.index(*current)) << std::endl; + std::cerr << CGAL::IO::oformat(c3t3_.index(*current)) << std::endl; #endif // CGAL_MESH_3_PROTECTION_DEBUG *out++ = *current; c3t3_.triangulation().remove(*current); @@ -1971,7 +1971,7 @@ analyze_and_repopulate(InputIterator begin, InputIterator last, std::cerr << "analyze_and_repopulate(begin=" << disp_vert(*begin) << "\n" << " last=" << disp_vert(*last) << "\n" << " distance(begin, last)=" << std::distance(begin, last) << ",\n" - << " index=" << CGAL::oformat(index) << ",\n" + << " index=" << CGAL::IO::oformat(index) << ",\n" << " orientation=" << orientation << ")\n"; #endif CGAL_assertion( std::distance(begin,last) >= 0 ); diff --git a/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h b/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h index 7392d5667a9..f3d1e0ba7fa 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h +++ b/Mesh_3/include/CGAL/Mesh_3/Refine_cells_3.h @@ -26,7 +26,6 @@ #include #include #endif -#include #include #include @@ -41,7 +40,7 @@ #include #include #include - +#include namespace CGAL { @@ -319,7 +318,7 @@ public: C3T3& c3t3, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ); // For parallel @@ -332,7 +331,7 @@ public: WorksharingDataStructureType *worksharing_ds, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ); @@ -372,7 +371,7 @@ public: { #ifndef CGAL_NO_ATOMIC if(m_stop_ptr != 0 && - m_stop_ptr->load(CGAL::cpp11::memory_order_acquire) == true) + m_stop_ptr->load(std::memory_order_acquire) == true) { return true; } @@ -573,7 +572,7 @@ private: #ifndef CGAL_NO_ATOMIC /// Pointer to the atomic Boolean that can stop the process - CGAL::cpp11::atomic* const m_stop_ptr; + std::atomic* const m_stop_ptr; #endif private: // Disabled copy constructor @@ -595,7 +594,7 @@ Refine_cells_3(Tr& triangulation, C3T3& c3t3, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ) : Mesher_level* stop_ptr + , std::atomic* stop_ptr #endif ) : Mesher_level #include -#include #include #include @@ -51,6 +50,7 @@ #include #include #include +#include namespace CGAL { @@ -255,7 +255,7 @@ public: const Criteria& criteria, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ) : r_tr_(tr) @@ -275,7 +275,7 @@ public: { #ifndef CGAL_NO_ATOMIC if(m_stop_ptr != 0 && - m_stop_ptr->load(CGAL::cpp11::memory_order_acquire) == true) + m_stop_ptr->load(std::memory_order_acquire) == true) { return true; } @@ -615,7 +615,7 @@ protected: std::size_t m_maximal_number_of_vertices_; #ifndef CGAL_NO_ATOMIC /// Pointer to the atomic Boolean that can stop the process - CGAL::cpp11::atomic* const m_stop_ptr; + std::atomic* const m_stop_ptr; #endif }; // end class template Refine_facets_3_base @@ -783,7 +783,7 @@ public: int mesh_topology, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ); // For parallel @@ -796,7 +796,7 @@ public: WorksharingDataStructureType *worksharing_ds, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ); @@ -916,7 +916,7 @@ Refine_facets_3(Tr& triangulation, int mesh_topology, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ) : Rf_base(triangulation, c3t3, oracle, criteria, mesh_topology, @@ -945,7 +945,7 @@ Refine_facets_3(Tr& triangulation, WorksharingDataStructureType *worksharing_ds, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ) : Rf_base(triangulation, c3t3, oracle, criteria, maximal_number_of_vertices diff --git a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h index 3038ce6383f..17b04cc4239 100644 --- a/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h +++ b/Mesh_3/include/CGAL/Mesh_3/Refine_facets_manifold_base.h @@ -19,7 +19,6 @@ #include -#include #include #include @@ -31,6 +30,7 @@ #include #include +#include namespace CGAL { @@ -308,7 +308,7 @@ public: int mesh_topology, std::size_t maximal_number_of_vertices #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* stop_ptr + , std::atomic* stop_ptr #endif ) : Base(triangulation, @@ -446,7 +446,7 @@ public: #ifndef CGAL_NO_ATOMIC if(this->m_stop_ptr != 0 && - this->m_stop_ptr->load(CGAL::cpp11::memory_order_acquire) == true) + this->m_stop_ptr->load(std::memory_order_acquire) == true) { return true; } diff --git a/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_experimental.h b/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_experimental.h index a0e2524dbb6..a2553333dc1 100644 --- a/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_experimental.h +++ b/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_experimental.h @@ -29,7 +29,7 @@ #include #include -#include +#include #include #include @@ -93,7 +93,7 @@ private: private: //only one of these aabb_trees is needed const Tree* m_ptree; - boost::shared_ptr m_own_ptree; + std::shared_ptr m_own_ptree; const MeshDomain& m_domain; Parameters m_params; @@ -104,7 +104,7 @@ private: #ifdef CGAL_MESH_3_EXPERIMENTAL_USE_PATCHES_IDS //help to accelerate aabb_tree queries in m_ptree - boost::shared_ptr m_kd_tree; + std::shared_ptr m_kd_tree; Facet_patch_id_map m_facet_patch_id_map; const Patches_ids_map& patches_ids_map; diff --git a/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_polyhedron.h b/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_polyhedron.h index c60ce33db5c..df2c3e0bd46 100644 --- a/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_polyhedron.h +++ b/Mesh_3/include/CGAL/Mesh_3/experimental/Lipschitz_sizing_polyhedron.h @@ -26,7 +26,7 @@ #include #include -#include +#include #include #include @@ -66,7 +66,7 @@ public: private: const Tree* m_ptree; - boost::shared_ptr m_own_ptree; + std::shared_ptr m_own_ptree; const MeshDomain& m_domain; Parameters m_params; diff --git a/Mesh_3/include/CGAL/Mesh_3/experimental/Sizing_field_with_aabb_tree.h b/Mesh_3/include/CGAL/Mesh_3/experimental/Sizing_field_with_aabb_tree.h index 300d63900d3..0dcff62901b 100644 --- a/Mesh_3/include/CGAL/Mesh_3/experimental/Sizing_field_with_aabb_tree.h +++ b/Mesh_3/include/CGAL/Mesh_3/experimental/Sizing_field_with_aabb_tree.h @@ -174,7 +174,7 @@ struct Sizing_field_with_aabb_tree #ifdef CGAL_MESH_3_PROTECTION_HIGH_VERBOSITY if(dim <= 1) { std::cerr << "Sizing(" << p << ", dim=" << dim - << ", index=#" << CGAL::oformat(id) << "): "; + << ", index=#" << CGAL::IO::oformat(id) << "): "; } #endif // CGAL_MESH_3_PROTECTION_HIGH_VERBOSITY double result = d_; @@ -258,12 +258,12 @@ struct Sizing_field_with_aabb_tree "Ids are { ") % group(setprecision(17),result) % group(setprecision(17),p) - % CGAL::oformat(get(facet_patch_id_map, + % CGAL::IO::oformat(get(facet_patch_id_map, projection_traits.closest_point_and_primitive().second)) % group(setprecision(17), projection_traits.closest_point_and_primitive().first); for(Patch_index i : ids) { - s << CGAL::oformat(i) << " "; + s << CGAL::IO::oformat(i) << " "; } s << "}\n"; std::cerr << s.str(); @@ -327,10 +327,10 @@ struct Sizing_field_with_aabb_tree "Closest face id: %4%\n" "Ids are { ") % result % p % curve_id - % CGAL::oformat(get(facet_patch_id_map, + % CGAL::IO::oformat(get(facet_patch_id_map, projection_traits.closest_point_and_primitive().second)); for(Patch_index i : ids) { - s << CGAL::oformat(i) << " "; + s << CGAL::IO::oformat(i) << " "; } s << "}\n"; std::cerr << s.str(); @@ -346,10 +346,10 @@ struct Sizing_field_with_aabb_tree "Closest face id: %4%\n" "Ids are { ") % result % p % curve_id - % CGAL::oformat(get(facet_patch_id_map, + % CGAL::IO::oformat(get(facet_patch_id_map, projection_traits.closest_point_and_primitive().second)); for(Patch_index i : ids) { - s << CGAL::oformat(i) << " "; + s << CGAL::IO::oformat(i) << " "; } s << "}\n"; CGAL_assertion_msg(result <=0, s.str().c_str()); @@ -364,7 +364,7 @@ struct Sizing_field_with_aabb_tree % result % p % curve_id % projection_traits.closest_point_and_primitive().second->patch_id(); for(Patch_index i : ids) { - s << CGAL::oformat(i) << " "; + s << CGAL::IO::oformat(i) << " "; } s << "}\n"; std::cerr << "ERROR at " << __FILE__ << " line " << __LINE__ << " :\n" diff --git a/Mesh_3/include/CGAL/Mesh_cell_base_3.h b/Mesh_3/include/CGAL/Mesh_cell_base_3.h index 2babd0cc5db..b944bdad4ac 100644 --- a/Mesh_3/include/CGAL/Mesh_cell_base_3.h +++ b/Mesh_3/include/CGAL/Mesh_cell_base_3.h @@ -248,7 +248,7 @@ operator>>(std::istream &is, Mesh_cell_base_3 &c) { typename Mesh_cell_base_3::Subdomain_index index; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> index; else read(is, index); @@ -263,7 +263,7 @@ std::ostream& operator<<(std::ostream &os, const Mesh_cell_base_3 &c) { - if(is_ascii(os)) + if(IO::is_ascii(os)) os << c.subdomain_index(); else write(os, c.subdomain_index()); diff --git a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h index 165df38676d..e72a0b7ec36 100644 --- a/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h +++ b/Mesh_3/include/CGAL/Mesh_domain_with_polyline_features_3.h @@ -40,8 +40,7 @@ #include #include #include -#include -#include +#include namespace CGAL { @@ -859,7 +858,7 @@ public: typedef CGAL::AABB_tree Curves_AABB_tree; private: - mutable boost::shared_ptr curves_aabb_tree_ptr_; + mutable std::shared_ptr curves_aabb_tree_ptr_; mutable bool curves_aabb_tree_is_built; public: @@ -884,7 +883,7 @@ public: if(curves_aabb_tree_ptr_) { curves_aabb_tree_ptr_->clear(); } else { - curves_aabb_tree_ptr_ = boost::make_shared(); + curves_aabb_tree_ptr_ = std::make_shared(); } for(typename Edges::const_iterator edges_it = edges_.begin(), diff --git a/Mesh_3/include/CGAL/Mesh_vertex_base_3.h b/Mesh_3/include/CGAL/Mesh_vertex_base_3.h index ecb1f9464c5..91f0ab6f07e 100644 --- a/Mesh_3/include/CGAL/Mesh_vertex_base_3.h +++ b/Mesh_3/include/CGAL/Mesh_vertex_base_3.h @@ -28,6 +28,7 @@ #include #include #include +#include namespace CGAL { @@ -65,6 +66,13 @@ template <> class Mesh_vertex_base_3_base { public: + Mesh_vertex_base_3_base() + {} + + Mesh_vertex_base_3_base( const Mesh_vertex_base_3_base& c) + { + m_erase_counter.store(c.erase_counter()); + } // Erase counter (cf. Compact_container) unsigned int erase_counter() const @@ -81,7 +89,7 @@ public: } protected: - typedef tbb::atomic Erase_counter_type; + typedef std::atomic Erase_counter_type; Erase_counter_type m_erase_counter; }; @@ -248,7 +256,7 @@ public: { is >> static_cast(v); int dimension; - if(is_ascii(is)) { + if(IO::is_ascii(is)) { is >> dimension; } else { @@ -267,7 +275,7 @@ public: friend std::ostream& operator<<(std::ostream &os, const Mesh_vertex_3& v) { os << static_cast(v); - if(is_ascii(os)) { + if(IO::is_ascii(os)) { os << " " << v.in_dimension() << " "; } else { diff --git a/Mesh_3/include/CGAL/facets_in_complex_3_to_triangle_mesh.h b/Mesh_3/include/CGAL/facets_in_complex_3_to_triangle_mesh.h new file mode 100644 index 00000000000..d69f445716f --- /dev/null +++ b/Mesh_3/include/CGAL/facets_in_complex_3_to_triangle_mesh.h @@ -0,0 +1,185 @@ +// Copyright (c) 2009-2017 GeometryFactory (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Maxime Gimeno, +// Mael Rouxel-Labbé + +#ifndef CGAL_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H +#define CGAL_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H + +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +namespace CGAL { + +namespace Mesh_3 { + +namespace internal { + +template +void resize(Polygon& p, std::size_t size) +{ + p.resize(size); +} + +template +void resize(std::array&, std::size_t CGAL_assertion_code(size)) +{ + CGAL_assertion(size == N); +} + +template +void facets_in_complex_3_to_triangle_soup(const C3T3& c3t3, + const typename C3T3::Subdomain_index sd_index, + PointContainer& points, + FaceContainer& faces, + const bool normals_point_outside_of_the_subdomain = true, + const bool export_all_facets = false) +{ + typedef typename PointContainer::value_type Point_3; + typedef typename FaceContainer::value_type Face; + + typedef typename C3T3::Triangulation Tr; + + typedef typename Tr::Vertex_handle Vertex_handle; + typedef typename Tr::Cell_handle Cell_handle; + typedef typename Tr::Weighted_point Weighted_point; + + typedef typename C3T3::Facets_in_complex_iterator Ficit; + + typedef CGAL::Hash_handles_with_or_without_timestamps Hash_fct; + typedef boost::unordered_map VHmap; + + typedef typename C3T3::size_type size_type; + + size_type nf = c3t3.number_of_facets_in_complex(); + faces.reserve(faces.size() + nf); + points.reserve(points.size() + nf/2); // approximating Euler + + VHmap vh_to_ids; + std::size_t inum = 0; + + for(Ficit fit = c3t3.facets_in_complex_begin(), + end = c3t3.facets_in_complex_end(); fit != end; ++fit) + { + Cell_handle c = fit->first; + int s = fit->second; + Face f; + resize(f, 3); + + typename C3T3::Subdomain_index cell_sdi = c3t3.subdomain_index(c); + typename C3T3::Subdomain_index opp_sdi = c3t3.subdomain_index(c->neighbor(s)); + + if(!export_all_facets && cell_sdi != sd_index && opp_sdi != sd_index) + continue; + + for(std::size_t i=1; i<4; ++i) + { + typename VHmap::iterator map_entry; + bool is_new; + Vertex_handle v = c->vertex((s+i)&3); + CGAL_assertion(v != Vertex_handle() && !c3t3.triangulation().is_infinite(v)); + + boost::tie(map_entry, is_new) = vh_to_ids.insert(std::make_pair(v, inum)); + if(is_new) + { + const Weighted_point& p = c3t3.triangulation().point(c, (s+i)&3); + const Point_3 bp = Point_3(CGAL::to_double(p.x()), + CGAL::to_double(p.y()), + CGAL::to_double(p.z())); + points.push_back(bp); + ++inum; + } + + f[i-1] = map_entry->second; + } + + if(export_all_facets) + { + if((cell_sdi > opp_sdi) == (s%2 == 1)) + std::swap(f[0], f[1]); + } + else + { + if(((cell_sdi == sd_index) == (s%2 == 1)) == normals_point_outside_of_the_subdomain) + std::swap(f[0], f[1]); + } + + faces.push_back(f); + } +} + +template +void facets_in_complex_3_to_triangle_soup(const C3T3& c3t3, + PointContainer& points, + FaceContainer& faces) +{ + typedef typename C3T3::Subdomain_index Subdomain_index; + Subdomain_index useless = Subdomain_index(); + facets_in_complex_3_to_triangle_soup(c3t3, useless, points, faces, + true/*point outward*/, true /*extract all facets*/); +} + +} // end namespace internal + +} // end namespace Mesh_3 + +//! \ingroup PkgMesh3Functions +//! +//! \brief builds a `TriangleMesh` from the surface facets, with a consistent orientation +//! at the interface of two subdomains. +//! +//! This function exports the surface as a `TriangleMesh` and appends it to `graph`, using +//! `orient_polygon_soup()`. +//! +//! @tparam C3T3 a model of `MeshComplexWithFeatures_3InTriangulation_3`. +//! @tparam TriangleMesh a model of `MutableFaceGraph` with an internal point property map. +//! The point type should be compatible with the one used in `C3T3`. +//! +//! @param c3t3 an instance of `C3T3`. +//! @param graph an instance of `TriangleMesh`. +template +void facets_in_complex_3_to_triangle_mesh(const C3T3& c3t3, TriangleMesh& graph) +{ + namespace PMP = CGAL::Polygon_mesh_processing; + + typedef typename boost::property_map::type VertexPointMap; + typedef typename boost::property_traits::value_type Point_3; + + typedef std::array Face; + + std::vector faces; + std::vector points; + + Mesh_3::internal::facets_in_complex_3_to_triangle_soup(c3t3, points, faces); + + if(!PMP::is_polygon_soup_a_polygon_mesh(faces)) + PMP::orient_polygon_soup(points, faces); + CGAL_postcondition(PMP::is_polygon_soup_a_polygon_mesh(faces)); + + PMP::polygon_soup_to_polygon_mesh(points, faces, graph); +} + +} // namespace CGAL + +#endif // CGAL_FACETS_IN_COMPLEX_3_TO_TRIANGLE_MESH_H diff --git a/Mesh_3/include/CGAL/internal/Mesh_3/Boundary_of_subdomain_of_complex_3_in_triangulation_3_to_off.h b/Mesh_3/include/CGAL/internal/Mesh_3/Boundary_of_subdomain_of_complex_3_in_triangulation_3_to_off.h index b08974e545e..93f5b70d430 100644 --- a/Mesh_3/include/CGAL/internal/Mesh_3/Boundary_of_subdomain_of_complex_3_in_triangulation_3_to_off.h +++ b/Mesh_3/include/CGAL/internal/Mesh_3/Boundary_of_subdomain_of_complex_3_in_triangulation_3_to_off.h @@ -14,7 +14,7 @@ #include -#include +#include namespace CGAL { diff --git a/Mesh_3/include/CGAL/internal/Mesh_3/Handle_IO_for_pair_of_int.h b/Mesh_3/include/CGAL/internal/Mesh_3/Handle_IO_for_pair_of_int.h index 7def0a39e9b..b8b9c0c6182 100644 --- a/Mesh_3/include/CGAL/internal/Mesh_3/Handle_IO_for_pair_of_int.h +++ b/Mesh_3/include/CGAL/internal/Mesh_3/Handle_IO_for_pair_of_int.h @@ -41,7 +41,7 @@ public: Output_rep( const T& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::ostream& operator()( std::ostream& out) const { - if(is_ascii(out)) { + if(IO::is_ascii(out)) { out << t.first << " " << t.second; } else { CGAL::write(out, t.first); @@ -62,7 +62,7 @@ public: Output_rep(const Variant& v) : v(v) {} std::ostream& operator()( std::ostream& out) const { if(v.which() == 1) { - out << oformat(boost::get >(v)); + out << IO::oformat(boost::get >(v)); } else { out << boost::get(v); } @@ -79,7 +79,7 @@ public: Input_rep( T& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::istream& operator()( std::istream& in) const { - if(is_ascii(in)) { + if(IO::is_ascii(in)) { in >> t.first >> t.second; } else { CGAL::read(in, t.first); diff --git a/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h b/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h index fdb84a6c82b..a4b05a9cc61 100644 --- a/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h +++ b/Mesh_3/include/CGAL/internal/Mesh_3/indices_management.h @@ -163,13 +163,13 @@ struct Read_mesh_domain_index { switch(dimension) { case 0: typename MT::Corner_index ci; - if(is_ascii(is)) is >> ci; + if(IO::is_ascii(is)) is >> ci; else CGAL::read(is, ci); return ci; break; case 1: typename MT::Curve_index si; - if(is_ascii(is)) is >> si; + if(IO::is_ascii(is)) is >> si; else CGAL::read(is, si); return si; break; @@ -195,13 +195,13 @@ struct Write_mesh_domain_index { switch(dimension) { case 0: { const Ci& ci = get_index(index); - if(is_ascii(os)) os << oformat(ci); + if(IO::is_ascii(os)) os << IO::oformat(ci); else CGAL::write(os, ci); } break; case 1: { const Si& si = get_index(index); - if(is_ascii(os)) os << oformat(si); + if(IO::is_ascii(os)) os << IO::oformat(si); else CGAL::write(os, si); } break; @@ -223,14 +223,14 @@ struct Read_mesh_domain_index { switch(dimension) { case 2: { typename MT::Surface_patch_index spi; - if(is_ascii(is)) is >> iformat(spi); + if(IO::is_ascii(is)) is >> IO::iformat(spi); else CGAL::read(is, spi); return spi; } break; default: {// 3 typename MT::Subdomain_index di; - if(is_ascii(is)) is >> iformat(di); + if(IO::is_ascii(is)) is >> IO::iformat(di); else CGAL::read(is, di); return di; } @@ -254,13 +254,13 @@ struct Write_mesh_domain_index { switch(dimension) { case 2: { const Spi& spi = get_index(index); - if(is_ascii(os)) os << oformat(spi); + if(IO::is_ascii(os)) os << IO::oformat(spi); else CGAL::write(os, spi); } break; default: {// 3 const Di& di = get_index(index); - if(is_ascii(os)) os << oformat(di); + if(IO::is_ascii(os)) os << IO::oformat(di); else CGAL::write(os, di); } break; @@ -272,12 +272,12 @@ struct Write_mesh_domain_index { template struct Read_write_index { void operator()(std::ostream& os, int, Index index) const { - if(is_ascii(os)) os << oformat(index); + if(IO::is_ascii(os)) os << IO::oformat(index); else CGAL::write(os, index); } Index operator()(std::istream& is, int) const { Index index; - if(is_ascii(is)) is >> iformat(index); + if(IO::is_ascii(is)) is >> IO::iformat(index); else CGAL::read(is, index); return index; } @@ -287,7 +287,7 @@ struct Variant_write_visitor { std::ostream& os; template void operator()(T v) const { - if(is_ascii(os)) os << CGAL::oformat(v); + if(IO::is_ascii(os)) os << CGAL::IO::oformat(v); else CGAL::write(os, v); } }; @@ -299,7 +299,7 @@ struct Variant_read_visitor { template void operator()(T) const { T v; - if(is_ascii(is)) is >> CGAL::iformat(v); + if(IO::is_ascii(is)) is >> CGAL::IO::iformat(v); else CGAL::read(is, v); variant = v; } diff --git a/Mesh_3/include/CGAL/make_mesh_3.h b/Mesh_3/include/CGAL/make_mesh_3.h index 6bc7be6c596..a75e120da69 100644 --- a/Mesh_3/include/CGAL/make_mesh_3.h +++ b/Mesh_3/include/CGAL/make_mesh_3.h @@ -32,6 +32,8 @@ #include #include +#include + namespace CGAL { namespace parameters { @@ -192,7 +194,7 @@ void init_c3t3_with_features(C3T3& c3t3, std::size_t maximal_number_of_vertices = 0, Mesh_error_code* pointer_to_error_code = 0 #ifndef CGAL_NO_ATOMIC - , CGAL::cpp11::atomic* pointer_to_stop = 0 + , std::atomic* pointer_to_stop = 0 #endif ) { diff --git a/Mesh_3/include/CGAL/refine_mesh_3.h b/Mesh_3/include/CGAL/refine_mesh_3.h index bba8c6c199e..acbf847b26b 100644 --- a/Mesh_3/include/CGAL/refine_mesh_3.h +++ b/Mesh_3/include/CGAL/refine_mesh_3.h @@ -28,10 +28,11 @@ #include #include #include -#include #include +#include + namespace CGAL { namespace details { @@ -196,7 +197,7 @@ struct Manifold_options { // Various Mesh_3 option struct Mesh_3_options { #ifndef CGAL_NO_ATOMIC - typedef CGAL::cpp11::atomic* Pointer_to_stop_atomic_boolean_t; + typedef std::atomic* Pointer_to_stop_atomic_boolean_t; #else typedef bool* Pointer_to_stop_atomic_boolean_t; #endif diff --git a/Mesh_3/test/Mesh_3/test_c3t3.cpp b/Mesh_3/test/Mesh_3/test_c3t3.cpp index 7e4828a460d..ffbc80d090a 100644 --- a/Mesh_3/test/Mesh_3/test_c3t3.cpp +++ b/Mesh_3/test/Mesh_3/test_c3t3.cpp @@ -393,8 +393,8 @@ struct Tester assert ( c3t3.surface_patch_index(*patch_fit_bis) == surface_patch_index_bis ); std::ofstream out_medit("test-medit.mesh"); - CGAL::output_to_medit(out_medit, c3t3); - CGAL::output_to_tetgen("test-tetgen", c3t3); + CGAL::IO::output_to_medit(out_medit, c3t3); + CGAL::IO::output_to_tetgen("test-tetgen", c3t3); } }; diff --git a/Mesh_3/test/Mesh_3/test_c3t3_into_facegraph.cpp b/Mesh_3/test/Mesh_3/test_c3t3_into_facegraph.cpp index 6df89caf971..9a953580e1b 100644 --- a/Mesh_3/test/Mesh_3/test_c3t3_into_facegraph.cpp +++ b/Mesh_3/test/Mesh_3/test_c3t3_into_facegraph.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include #include diff --git a/Mesh_3/test/Mesh_3/test_c3t3_io.cpp b/Mesh_3/test/Mesh_3/test_c3t3_io.cpp index 03f8e8e0a2d..5e75b344e14 100644 --- a/Mesh_3/test/Mesh_3/test_c3t3_io.cpp +++ b/Mesh_3/test/Mesh_3/test_c3t3_io.cpp @@ -85,7 +85,7 @@ public: Output_rep( const T& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::ostream& operator()( std::ostream& out) const { - if(is_ascii(out)) { + if(IO::is_ascii(out)) { out << (int)t; } else { CGAL::write(out, (int)t); @@ -104,7 +104,7 @@ public: //! perform the output, calls \c operator\<\< by default. std::istream& operator()( std::istream& in) const { int i; - if(is_ascii(in)) { + if(IO::is_ascii(in)) { in >> i; } else { CGAL::read(in, i); @@ -119,11 +119,11 @@ public: namespace std { std::ostream& operator<<(std::ostream& out, MD_heterogeneous_types::Subdomain_index index) { - return out << CGAL::oformat(index); + return out << CGAL::IO::oformat(index); } std::istream& operator>>(std::istream& in, MD_heterogeneous_types::Subdomain_index& index) { - return in >> CGAL::iformat(index); + return in >> CGAL::IO::iformat(index); } } // end namespace std @@ -153,7 +153,7 @@ public: Output_rep( const T& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::ostream& operator()( std::ostream& out) const { - if(is_ascii(out)) { + if(IO::is_ascii(out)) { out << t.first << " " << t.second; } else { CGAL::write(out, t.first); @@ -172,7 +172,7 @@ public: Input_rep( T& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::istream& operator()( std::istream& in) const { - if(is_ascii(in)) { + if(IO::is_ascii(in)) { in >> t.first >> t.second; } else { CGAL::read(in, t.first); @@ -187,11 +187,11 @@ public: namespace std { std::ostream& operator<<(std::ostream& out, MD_heterogeneous_types::Surface_patch_index index) { - return out << CGAL::oformat(index); + return out << CGAL::IO::oformat(index); } std::istream& operator>>(std::istream& in, MD_heterogeneous_types::Surface_patch_index& index) { - return in >> CGAL::iformat(index); + return in >> CGAL::IO::iformat(index); } } // end namespace std @@ -332,7 +332,7 @@ struct Test_c3t3_io { std::cout << "IO format: " << CGAL::Get_io_signature()() << std::endl; std::stringstream stream(mode); if(binary) { - CGAL::set_binary_mode(stream); + CGAL::IO::set_binary_mode(stream); } stream << c3t3; if(!binary) { @@ -367,9 +367,9 @@ struct Test_c3t3_io { ( binary ? (std::ios_base::in | std::ios_base::binary) : std::ios_base::in)); - CGAL::Mesh_3::save_binary_file(ss, c3t3, binary); + CGAL::IO::save_binary_file(ss, c3t3, binary); assert(ss); - CGAL::Mesh_3::load_binary_file(ss, c3t3_bis); + CGAL::IO::load_binary_file(ss, c3t3_bis); assert(ss); } if(!check_equality(c3t3, c3t3_bis)) return false; @@ -392,7 +392,7 @@ struct Test_c3t3_io { std::ofstream output(filename.c_str(), binary ? (std::ios_base::out | std::ios_base::binary) : std::ios_base::out); - CGAL::Mesh_3::save_binary_file(output, c3t3_bis, binary); + CGAL::IO::save_binary_file(output, c3t3_bis, binary); } c3t3_bis.clear(); @@ -401,7 +401,7 @@ struct Test_c3t3_io { binary ? (std::ios_base::in | std::ios_base::binary) : std::ios_base::in); assert(input); - CGAL::Mesh_3::load_binary_file(input, c3t3_bis); + CGAL::IO::load_binary_file(input, c3t3_bis); assert(input); } if(!check_equality(c3t3, c3t3_bis)) return false; diff --git a/Mesh_3/test/Mesh_3/test_mesh_cell_base_3.cpp b/Mesh_3/test/Mesh_3/test_mesh_cell_base_3.cpp index 0e433bb0922..2a4bc5a5748 100644 --- a/Mesh_3/test/Mesh_3/test_mesh_cell_base_3.cpp +++ b/Mesh_3/test/Mesh_3/test_mesh_cell_base_3.cpp @@ -1,6 +1,6 @@ #include -#include +#include #include #include diff --git a/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp b/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp index d40f3563053..7ca31d4cfe4 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_determinism.cpp @@ -9,7 +9,7 @@ #include #include #include -#include +#include #include #include diff --git a/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp b/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp index abb96ddf620..58cb2f6153c 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_polyhedron_with_features.cpp @@ -90,16 +90,16 @@ struct Polyhedron_with_features_tester : public Tester Polyhedral_tag()); //, 1099, 1099, 1158, 1158, 4902, 4902); std::ofstream out_medit("test-medit.mesh"); - CGAL::output_to_medit(out_medit, c3t3); - CGAL::output_to_tetgen("test-tetgen", c3t3); + CGAL::IO::output_to_medit(out_medit, c3t3); + CGAL::IO::output_to_tetgen("test-tetgen", c3t3); std::ofstream out_binary("test-binary.mesh.cgal", std::ios_base::out|std::ios_base::binary); - CGAL::Mesh_3::save_binary_file(out_binary, c3t3); + CGAL::IO::save_binary_file(out_binary, c3t3); out_binary.close(); C3t3 c3t3_bis; std::ifstream in_binary("test-binary.mesh.cgal", std::ios_base::in|std::ios_base::binary); - CGAL::Mesh_3::load_binary_file(in_binary, c3t3_bis); + CGAL::IO::load_binary_file(in_binary, c3t3_bis); assert(c3t3_bis.triangulation() == c3t3.triangulation()); } diff --git a/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp b/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp index c82df518002..a8ad7dfc6a9 100644 --- a/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp +++ b/Mesh_3/test/Mesh_3/test_meshing_polylines_only.cpp @@ -93,7 +93,7 @@ int main(int argc, char** argv) std::ofstream medit_file("out-mesh-polylines.mesh"); c3t3.output_to_medit(medit_file); std::ofstream binary_file("out-mesh-polylines.binary.cgal", std::ios::binary|std::ios::out); - save_binary_file(binary_file, c3t3); + CGAL::IO::save_binary_file(binary_file, c3t3); std::cout << "Number of vertices in c3t3: " << c3t3.triangulation().number_of_vertices() << std::endl; assert(c3t3.triangulation().number_of_vertices() > 900); diff --git a/Modular_arithmetic/examples/Modular_arithmetic/modular_filter.cpp b/Modular_arithmetic/examples/Modular_arithmetic/modular_filter.cpp index 52920116692..4d6f223fc32 100644 --- a/Modular_arithmetic/examples/Modular_arithmetic/modular_filter.cpp +++ b/Modular_arithmetic/examples/Modular_arithmetic/modular_filter.cpp @@ -67,7 +67,7 @@ Polynomial modular_filtered_gcd(const Polynomial& p1, const Polynomial& p2){ } int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Gmpz NT; typedef CGAL::Polynomial Poly; diff --git a/Nef_2/examples/Nef_2/nef_2_exploration.cpp b/Nef_2/examples/Nef_2/nef_2_exploration.cpp index 011b2887dbd..3895ce9ba78 100644 --- a/Nef_2/examples/Nef_2/nef_2_exploration.cpp +++ b/Nef_2/examples/Nef_2/nef_2_exploration.cpp @@ -76,7 +76,7 @@ void explore(std::string s, const Nef_polyhedron& poly) int main() { - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); Nef_polyhedron N0(Nef_polyhedron::COMPLETE); explore("complete", N0); diff --git a/Nef_2/include/CGAL/Filtered_extended_homogeneous.h b/Nef_2/include/CGAL/Filtered_extended_homogeneous.h index 31f67e9e45d..f1d2ae85290 100644 --- a/Nef_2/include/CGAL/Filtered_extended_homogeneous.h +++ b/Nef_2/include/CGAL/Filtered_extended_homogeneous.h @@ -144,7 +144,7 @@ inline double to_double(const SPolynomial& p) template std::ostream& operator<<(std::ostream& os, const SPolynomial& p) { - switch( get_mode(os) ) { + switch( IO::get_mode(os) ) { case CGAL::IO::ASCII : os << p.m() << " " << p.n(); break; case CGAL::IO::BINARY : @@ -158,7 +158,7 @@ std::ostream& operator<<(std::ostream& os, const SPolynomial& p) template std::istream& operator>>(std::istream& is, SPolynomial& p) { RT m,n; - switch( get_mode(is) ){ + switch( IO::get_mode(is) ){ case CGAL::IO::ASCII : is >> m >> n; p = SPolynomial(m,n); break; case CGAL::IO::BINARY : @@ -309,7 +309,7 @@ CheckPoint checkrep() const template std::ostream& operator<<(std::ostream& os, const Extended_point& p) -{ switch( get_mode(os) ) { +{ switch( IO::get_mode(os) ) { case CGAL::IO::ASCII : os << p.hx() << " " << p.hy() << " " << p.hw(); break; case CGAL::IO::BINARY : @@ -327,7 +327,7 @@ std::ostream& operator<<(std::ostream& os, const Extended_point& p) template std::istream& operator>>(std::istream& is, Extended_point& p) { SPolynomial x,y; RT w; - switch( get_mode(is) ){ + switch( IO::get_mode(is) ){ case CGAL::IO::ASCII : is >> x >> y >> w; break; case CGAL::IO::BINARY : diff --git a/Nef_2/include/CGAL/Nef_2/PM_checker.h b/Nef_2/include/CGAL/Nef_2/PM_checker.h index ab2c590a361..a971ee5b946 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_checker.h +++ b/Nef_2/include/CGAL/Nef_2/PM_checker.h @@ -124,7 +124,7 @@ check_order_preserving_embedding(Vertex_const_handle v) const { if ( is_isolated(v) ) return; std::ostringstream error_status; - CGAL::set_pretty_mode ( error_status ); + CGAL::IO::set_pretty_mode ( error_status ); Halfedge_const_handle ef = first_out_edge(v) ,e=ef,en,enn; error_status << "check_order_preserving_embedding\n"; error_status << "vertex " << PV(v) << std::endl; @@ -251,7 +251,7 @@ check_is_triangulation() const CGAL::Unique_hash_map< Halfedge_const_iterator, bool> on_boundary(false); Halfedge_around_face_const_circulator hit(eb), hend(hit); std::ostringstream error_status; - CGAL::set_pretty_mode ( error_status ); + CGAL::IO::set_pretty_mode ( error_status ); error_status << "check_is_triangulation\n"; error_status << "on boundary:\n"; CGAL_For_all(hit,hend) { diff --git a/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h b/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h index ab08adba6cc..8ccfb77c1b6 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h +++ b/Nef_2/include/CGAL/Nef_2/PM_const_decorator.h @@ -398,7 +398,7 @@ void check_integrity_and_topological_planarity(bool faces=true) const; template std::string PV(VH v) -{ std::ostringstream os; CGAL::set_pretty_mode(os); +{ std::ostringstream os; CGAL::IO::set_pretty_mode(os); if (v != VH()) os << v->point(); else os << "nil"; return os.str(); diff --git a/Nef_2/include/CGAL/Nef_2/PM_io_parser.h b/Nef_2/include/CGAL/Nef_2/PM_io_parser.h index 39b99b37d7c..2ad7ebf2739 100644 --- a/Nef_2/include/CGAL/Nef_2/PM_io_parser.h +++ b/Nef_2/include/CGAL/Nef_2/PM_io_parser.h @@ -117,8 +117,8 @@ to output |H| to |os|.}*/ vn(Base::number_of_vertices()), en(Base::number_of_halfedges()), fn(Base::number_of_faces()) -{ verbose = (get_mode(out) != CGAL::IO::ASCII && - get_mode(out) != CGAL::IO::BINARY); +{ verbose = (IO::get_mode(out) != CGAL::IO::ASCII && + IO::get_mode(out) != CGAL::IO::BINARY); } @@ -130,8 +130,8 @@ PM_io_parser(std::ostream& os, const PMDEC& D) vn(Base::number_of_vertices()), en(Base::number_of_halfedges()), fn(Base::number_of_faces()) -{ verbose = (get_mode(out) != CGAL::IO::ASCII && - get_mode(out) != CGAL::IO::BINARY); +{ verbose = (IO::get_mode(out) != CGAL::IO::ASCII && + IO::get_mode(out) != CGAL::IO::BINARY); } diff --git a/Nef_2/include/CGAL/Nef_2/Polynomial.h b/Nef_2/include/CGAL/Nef_2/Polynomial.h index d2a146f6392..30c5963b4ad 100644 --- a/Nef_2/include/CGAL/Nef_2/Polynomial.h +++ b/Nef_2/include/CGAL/Nef_2/Polynomial.h @@ -1737,7 +1737,7 @@ template std::ostream& operator << (std::ostream& os, const Polynomial& p) { int i; - switch( get_mode(os) ) + switch( IO::get_mode(os) ) { case CGAL::IO::ASCII : os << p.degree() << ' '; @@ -1773,7 +1773,7 @@ std::istream& operator >> (std::istream& is, Polynomial& p) { char ch; NT c; bool pretty = false; - switch( get_mode(is) ) { + switch( IO::get_mode(is) ) { case CGAL::IO::ASCII : case CGAL::IO::PRETTY : is >> ch; diff --git a/Nef_2/test/Nef_2/EPoint-test.cpp b/Nef_2/test/Nef_2/EPoint-test.cpp index 2e2302a1f2f..4b83f8dce08 100644 --- a/Nef_2/test/Nef_2/EPoint-test.cpp +++ b/Nef_2/test/Nef_2/EPoint-test.cpp @@ -39,7 +39,7 @@ int main() typedef EDec::Standard_RT RT; EDec D; - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); Point ps1(0,0), ps2(1,1), ps3(1,0), ps4(0,1), ps5(1,1,2); EDec::Point_type t1,t2,t3; EP eps1 = D.construct_point(ps1); @@ -149,7 +149,7 @@ int main() typedef EDec::Standard_RT RT; EDec D; - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); Point ps1(0,0), ps2(1,1), ps3(1,0), ps4(0,1), ps5(1,1,2); EDec::Point_type t1,t2,t3; EP eps1 = D.construct_point(ps1); @@ -256,7 +256,7 @@ int main() typedef EDec::Standard_RT RT; EDec D; - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); Point ps1(0,0), ps2(1,1), ps3(1,0), ps4(0,1), ps5(1,1,2); EDec::Point_type t1,t2,t3; EP eps1 = D.construct_point(ps1); diff --git a/Nef_2/test/Nef_2/Nef_polyhedron_2-test.cpp b/Nef_2/test/Nef_2/Nef_polyhedron_2-test.cpp index 77819fd3f5b..e925809395e 100644 --- a/Nef_2/test/Nef_2/Nef_polyhedron_2-test.cpp +++ b/Nef_2/test/Nef_2/Nef_polyhedron_2-test.cpp @@ -16,7 +16,7 @@ int main() #endif CGAL_NEF_SETDTHREAD(911); // 911 - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); std::cerr << "using " << CGAL::pointlocationversion << std::endl; std::cerr << "using " << CGAL::sweepversion << std::endl; CGAL_TEST_START; diff --git a/Nef_2/test/Nef_2/Polynomial-test.cpp b/Nef_2/test/Nef_2/Polynomial-test.cpp index 45370b1402e..38fa46c51ae 100644 --- a/Nef_2/test/Nef_2/Polynomial-test.cpp +++ b/Nef_2/test/Nef_2/Polynomial-test.cpp @@ -25,7 +25,7 @@ using namespace CGAL; int main() { - //CGAL_NEF_SETDTHREAD(3); CGAL::set_pretty_mode ( std::cerr ); + //CGAL_NEF_SETDTHREAD(3); CGAL::IO::set_pretty_mode ( std::cerr ); CGAL_TEST_START; { PRT(Integer,Integer); diff --git a/Nef_2/test/Nef_2/include/CGAL/test_macros.h b/Nef_2/test/Nef_2/include/CGAL/test_macros.h index 9193a65a90a..d1bb6ab1c33 100644 --- a/Nef_2/test/Nef_2/include/CGAL/test_macros.h +++ b/Nef_2/test/Nef_2/include/CGAL/test_macros.h @@ -14,7 +14,7 @@ std::cerr<<"ERROR: ("<<__LINE__ <<") test "<<#b<<" failed."<mark() ? ct : cf; + CGAL::IO::Color c = v->mark() ? ct : cf; glPointSize(10); glColor3ub(c.red(), c.green(), c.blue()); glBegin(GL_POINTS); @@ -291,9 +291,9 @@ namespace OGL { void draw(Edge_iterator e) const { CGAL_NEF_TRACEN("drawing edge "<<*e); Double_point p = e->source(), q = e->target(); - CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), + CGAL::IO::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish - CGAL::Color c = e->mark() ? ct : cf; + CGAL::IO::Color c = e->mark() ? ct : cf; glLineWidth(5); glColor3ub(c.red(),c.green(),c.blue()); glBegin(GL_LINE_STRIP); @@ -317,9 +317,9 @@ namespace OGL { GLU_TESS_WINDING_POSITIVE); DFacet::Coord_const_iterator cit; - CGAL::Color cf(CGAL_NEF3_MARKED_FACET_COLOR), + CGAL::IO::Color cf(CGAL_NEF3_MARKED_FACET_COLOR), ct(CGAL_NEF3_UNMARKED_FACET_COLOR); // more blue-ish - CGAL::Color c = (f->mark() ? ct : cf); + CGAL::IO::Color c = (f->mark() ? ct : cf); glColor3ub(c.red(),c.green(),c.blue()); gluTessBeginPolygon(tess_,f->normal()); CGAL_NEF_TRACEN(" "); diff --git a/Nef_3/doc/Nef_3/Nef_3.txt b/Nef_3/doc/Nef_3/Nef_3.txt index b4fee9d321a..636630cd569 100644 --- a/Nef_3/doc/Nef_3/Nef_3.txt +++ b/Nef_3/doc/Nef_3/Nef_3.txt @@ -579,4 +579,3 @@ the `Object_handle` can represent a `Vertex_const_handle`, a */ } /* namespace CGAL */ - diff --git a/Nef_3/examples/Nef_3/transformation.cpp b/Nef_3/examples/Nef_3/transformation.cpp index 74d1108888f..0e79e62e832 100644 --- a/Nef_3/examples/Nef_3/transformation.cpp +++ b/Nef_3/examples/Nef_3/transformation.cpp @@ -4,11 +4,7 @@ #include -//instead of -//typedef CGAL::Extended_homogeneous Kernel; -// workaround for VC++ -struct Kernel : public CGAL::Extended_homogeneous {}; - +typedef CGAL::Extended_homogeneous Kernel; typedef CGAL::Nef_polyhedron_3 Nef_polyhedron; typedef Nef_polyhedron::Plane_3 Plane_3; typedef Nef_polyhedron::Vector_3 Vector_3; @@ -22,10 +18,7 @@ int main() { 0,0,-1, 0,1,0, 1); - Aff_transformation_3 scale(3,0,0, - 0,3,0, - 0,0,3, - 2); + Aff_transformation_3 scale(CGAL::SCALING, 3, 2); N.transform(transl); CGAL_assertion(N == Nef_polyhedron(Plane_3(0,1,0,-7))); diff --git a/Nef_3/include/CGAL/Nef_3/Halfedge.h b/Nef_3/include/CGAL/Nef_3/Halfedge.h index 21506e7db3b..b0c21962585 100644 --- a/Nef_3/include/CGAL/Nef_3/Halfedge.h +++ b/Nef_3/include/CGAL/Nef_3/Halfedge.h @@ -144,7 +144,7 @@ class Halfedge_base public: std::string debug() const { std::stringstream os; - set_pretty_mode(os); + CGAL::IO::set_pretty_mode(os); os<<"sv [ "< #include #include +#include #ifdef CGAL_NEF3_TRIANGULATE_FACETS #include @@ -288,31 +289,33 @@ typedef Smaller_than< Vertex_handle, int> Smaller_; -class Node { + class Node { friend class K3_tree; public: - Node( Node* p, Node* l, Node* r, Plane_3 pl, const Object_list& O) : + typedef Node* Node_handle; + + Node( Node_handle p, Node_handle l, Node_handle r, Plane_3 pl, const Object_list& O) : parent_node(p), left_node(l), right_node(r), splitting_plane(pl), object_list(O) { - if(l == 0) + if(l == nullptr) point_on_plane = Point_3(); else point_on_plane = pl.point(); } bool is_leaf() const { - CGAL_assertion( (left_node != 0 && right_node != 0) || - (left_node == 0 && right_node == 0)); - return (left_node == 0 && right_node == 0); + CGAL_assertion( (left_node != nullptr && right_node != nullptr) || + (left_node == nullptr && right_node == nullptr)); + return (left_node == nullptr && right_node == nullptr); } - const Node* parent() const { return parent_node; } - const Node* left() const { return left_node; } - const Node* right() const { return right_node; } + Node_handle parent() const { return parent_node; } + Node_handle left() const { return left_node; } + Node_handle right() const { return right_node; } const Plane_3& plane() const { return splitting_plane; } const Object_list& objects() const { return object_list; } void transform(const Aff_transformation_3& t) { - if(left_node != 0) { - CGAL_assertion(right_node != 0); + if(left_node != nullptr) { + CGAL_assertion(right_node != nullptr); left_node->transform(t); right_node->transform(t); splitting_plane = splitting_plane.transform(t); @@ -332,9 +335,9 @@ public: std::size_t bytes() { // bytes used for the Kd-tree std::size_t s = sizeof(Node); - if(left_node != 0) + if(left_node != nullptr) s += left_node->bytes(); - if(right_node != 0) + if(right_node != nullptr) s += right_node->bytes(); typename Object_list::iterator o; for(o = object_list.begin(); o != object_list.end(); ++o) @@ -371,16 +374,16 @@ public: } } - if(left_node != 0) + if(left_node != nullptr) s += left_node->leafs(mask, lower_limit); - if(right_node != 0) + if(right_node != nullptr) s += right_node->leafs(mask, lower_limit); return s; } template void add_facet(Halffacet_handle f, Depth depth) { - if(left_node == 0) { + if(left_node == nullptr) { object_list.push_back(make_object(f)); return; } @@ -395,7 +398,7 @@ public: template void add_edge(Halfedge_handle e, Depth depth) { - if(left_node == 0) { + if(left_node == nullptr) { object_list.push_back(make_object(e)); return; } @@ -410,7 +413,7 @@ public: template void add_vertex(Vertex_handle v, Depth depth) { - if(left_node == 0) { + if(left_node == nullptr) { object_list.push_back(make_object(v)); return; } @@ -425,8 +428,8 @@ public: friend std::ostream& operator<< - (std::ostream& os, const Node* node) { - CGAL_assertion( node != 0); + (std::ostream& os, const Node_handle node) { + CGAL_assertion( node != nullptr); if( node->is_leaf()) os << node->objects().size(); else { @@ -441,8 +444,8 @@ friend std::ostream& operator<< return os; } - -~Node() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + /* +~Node() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_NEF_TRACEN("~Node: deleting node..."); CGAL_destructor_assertion_catch( @@ -452,16 +455,21 @@ friend std::ostream& operator<< } ); } - + */ private: - Node* parent_node; - Node* left_node; - Node* right_node; + + + + Node_handle parent_node; + Node_handle left_node; + Node_handle right_node; Plane_3 splitting_plane; Point_3 point_on_plane; Object_list object_list; }; + typedef boost::container::deque Node_range; + typedef Node* Node_handle; public: @@ -471,7 +479,7 @@ public: class Iterator; protected: Traits traits; - Node *root_node; + Node_handle root_node; Segment_3 segment; bool initialized; public: @@ -498,32 +506,32 @@ public: { friend class K3_tree; typedef Iterator Self; - typedef std::pair< const Node*, Segment_3> Candidate; + typedef std::pair< const Node_handle, Segment_3> Candidate; protected: std::list S; - const Node* node; + Node_handle node; Traits traits; CGAL_assertion_code( Segment_3 prev_segment;) CGAL_assertion_code( bool first_segment;) public: - Iterator() : node(0) {} - Iterator( const Node* root, const Segment_3& s) { + Iterator() : node() {} + Iterator( const Node_handle root, const Segment_3& s) { CGAL_assertion_code( first_segment = true); S.push_front( Candidate( root, s)); ++(*this); // place the interator in the first intersected cell } Iterator( const Self& i) : S(i.S), node(i.node) {} const Object_list& operator*() const { - CGAL_assertion( node != 0); + CGAL_assertion( node != nullptr); return node->objects(); } Self& operator++() { if( S.empty()) - node = 0; // end of the iterator + node = nullptr; // end of the iterator else { while( !S.empty()) { - const Node* n = S.front().first; + Node_handle n = S.front().first; Segment_3 s = S.front().second; S.pop_front(); if( n->is_leaf()) { @@ -575,13 +583,13 @@ else { return !(*this == i); } private: - const Node* get_node() const { - CGAL_assertion( node != 0); + Node_handle get_node() const { + CGAL_assertion( node != nullptr); return node; } inline -const Node* get_child_by_side( const Node* node, Oriented_side side) { +Node_handle get_child_by_side( const Node_handle node, Oriented_side side) { CGAL_assertion( node != nullptr); CGAL_assertion( side != ON_ORIENTED_BOUNDARY); if( side == ON_NEGATIVE_SIDE) { @@ -651,7 +659,7 @@ class Objects_around_box { public: class Iterator; protected: - Node *root_node; + Node_handle root_node; Bounding_box_3 box; bool initialized; @@ -680,16 +688,16 @@ class Objects_around_box { friend class K3_tree; typedef Iterator Self; - typedef std::pair< const Node*, Bounding_box_3> Candidate; + typedef std::pair< const Node_handle, Bounding_box_3> Candidate; protected: std::list S; - const Node* node; + const Node_handle node; public: - Iterator() : node(0) {} + Iterator() : node(nullptr) {} - Iterator( const Node* root, const Bounding_box_3& s) { + Iterator( const Node_handle root, const Bounding_box_3& s) { S.push_front( Candidate( root, s)); ++(*this); // place the interator in the first intersected cell } @@ -697,17 +705,17 @@ class Objects_around_box { Iterator( const Self& i) : S(i.S), node(i.node) {} const Object_list& operator*() const { - CGAL_assertion( node != 0); + CGAL_assertion( node != nullptr); return node->objects(); } Self& operator++() { if(S.empty()) - node = 0; // end of the iterator + node = nullptr; // end of the iterator else { while( !S.empty()) { - const Node* n = S.front().first; + const Node_handle n = S.front().first; Bounding_box_3 b = S.front().second; S.pop_front(); if( n->is_leaf()) { @@ -742,13 +750,13 @@ class Objects_around_box { } private: - const Node* get_node() const { - CGAL_assertion( node != 0); + Node_handle get_node() const { + CGAL_assertion( node != nullptr); return node; } inline - const Node* get_child_by_side( const Node* node, Oriented_side side) { + Node_handle get_child_by_side( const Node_handle node, Oriented_side side) { CGAL_assertion( node != nullptr); CGAL_assertion( side != ON_ORIENTED_BOUNDARY); if( side == ON_NEGATIVE_SIDE) { @@ -765,7 +773,11 @@ private: bool reference_counted; #endif Traits traits; - Node* root; + + + Node_handle root; + boost::container::deque nodes; + int max_depth; Bounding_box_3 bounding_box; public: @@ -951,8 +963,8 @@ typename Object_list::difference_type n_vertices = std::distance(objects.begin() public: BBox_updater() {} - void pre_visit(const Node*) {} - void post_visit(const Node* n) { + void pre_visit(const Node_handle) {} + void post_visit(const Node_handle n) { typename Object_list::const_iterator o; for( o = n->objects().begin(); o != n->objects().end(); ++o) { @@ -969,9 +981,9 @@ typename Object_list::difference_type n_vertices = std::distance(objects.begin() }; template - void visit_k3tree(const Node* current, Visitor& V) const { + void visit_k3tree(const Node_handle current, Visitor& V) const { V.pre_visit(current); - if(current->left() != 0) { + if(current->left() != nullptr) { visit_k3tree(current->left(), V); visit_k3tree(current->right(), V); } @@ -982,9 +994,10 @@ typename Object_list::difference_type n_vertices = std::distance(objects.begin() size_t leafs(int mask = 255, int lower_limit=0) { return root->leafs(mask, lower_limit);} void transform(const Aff_transformation_3& t) { - // TODO: Bounding box must be updated/transformed, too - if(root != 0) - root->transform(t); + if(root == nullptr){ + return; + } + root->transform(t); BBox_updater bbup; visit_k3tree(root, bbup); @@ -996,7 +1009,7 @@ typename Object_list::difference_type n_vertices = std::distance(objects.begin() template friend std::ostream& operator<< (std::ostream& os, const K3_tree& k3_tree) { - os << (const Node*)k3_tree.root; // no default conversion to const Node*? + os << (const Node_handle)k3_tree.root; // no default conversion to const Node_handle? return os; } #endif @@ -1060,11 +1073,11 @@ bool update( Unique_hash_map& V, return update( root, V, E, F); } -bool update( Node* node, +bool update( Node_handle node, Unique_hash_map& V, Unique_hash_map& E, Unique_hash_map& F) { - CGAL_assertion( node != 0); + CGAL_assertion( node != nullptr); if( node->is_leaf()) { bool updated = false; Object_list* O = &node->object_list; @@ -1105,26 +1118,28 @@ bool update( Node* node, CGAL_NEF_TRACEN("k3_tree::update(): right node updated? "< -Node* build_kdtree(Object_list& O, Object_iterator v_end, - Depth depth, Node* parent=0, int non_efective_splits=0) { +Node_handle build_kdtree(Object_list& O, Object_iterator v_end, + Depth depth, Node_handle parent=nullptr, int non_efective_splits=0) { CGAL_precondition( depth >= 0); CGAL_NEF_TRACEN( "build_kdtree: "< max_depth) - return new Node( parent, 0, 0, Plane_3(), O); + nodes.push_back(Node( parent, nullptr, nullptr, Plane_3(), O)); + return &(nodes.back()); } else { CGAL_NEF_TRACEN("Sizes " << O1.size() << ", " << O2.size() << ", " << O.size()); CGAL_assertion( O1.size() <= O.size() && O2.size() <= O.size()); @@ -1179,9 +1195,11 @@ Node* build_kdtree(Object_list& O, Object_iterator v_end, non_efective_splits = 0; if( non_efective_splits > 2) { CGAL_NEF_TRACEN("build_kdtree: non efective splits reached maximum"); - return new Node( parent, 0, 0, Plane_3(), O); + nodes.push_back(Node( parent, nullptr, nullptr, Plane_3(), O)); + return &(nodes.back()); } - Node *node = new Node( parent, 0, 0, partition_plane, Object_list()); + nodes.push_back(Node( parent, nullptr, nullptr, partition_plane, Object_list())); + Node_handle node = &(nodes.back()); node->left_node = build_kdtree( O1, O1.begin()+v_end1, depth + 1, node, non_efective_splits); node->right_node = build_kdtree( O2, O2.begin()+v_end2, depth + 1, node, non_efective_splits); return node; @@ -1258,8 +1276,8 @@ Plane_3 construct_splitting_plane(Object_iterator start, Object_iterator end, return Plane_3(); } -const Node *locate_cell_containing( const Point_3& p, const Node* node) const { - CGAL_precondition( node != 0); +Node_handle locate_cell_containing( const Point_3& p, const Node_handle node) const { + CGAL_precondition( node != nullptr); if( node->is_leaf()) return node; else { @@ -1273,13 +1291,13 @@ const Node *locate_cell_containing( const Point_3& p, const Node* node) const { } } -const Object_list& locate( const Point_3& p, const Node* node) const { - CGAL_precondition( node != 0); +const Object_list& locate( const Point_3& p, const Node_handle node) const { + CGAL_precondition( node != nullptr); return locate_cell_containing( p, node)->objects(); } -bool is_point_on_cell( const Point_3& p, const Node* target, const Node* current) const { - CGAL_precondition( target != 0 && current != 0); +bool is_point_on_cell( const Point_3& p, const Node_handle target, const Node_handle current) const { + CGAL_precondition( target != nullptr && current != nullptr); if( current->is_leaf()) return (current == target); Oriented_side side = current->plane().oriented_side(p); diff --git a/Nef_3/include/CGAL/Nef_3/OGL_helper.h b/Nef_3/include/CGAL/Nef_3/OGL_helper.h index 608500b1ba4..c6aa2d82b91 100644 --- a/Nef_3/include/CGAL/Nef_3/OGL_helper.h +++ b/Nef_3/include/CGAL/Nef_3/OGL_helper.h @@ -340,9 +340,9 @@ namespace OGL { void draw(Vertex_iterator v) const { // CGAL_NEF_TRACEN("drawing vertex "<<*v); - CGAL::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR), + CGAL::IO::Color cf(CGAL_NEF3_MARKED_VERTEX_COLOR), ct(CGAL_NEF3_UNMARKED_VERTEX_COLOR); // more blue-ish - CGAL::Color c = v->mark() ? ct : cf; + CGAL::IO::Color c = v->mark() ? ct : cf; glPointSize(10); glColor3ub(c.red(), c.green(), c.blue()); glBegin(GL_POINTS); @@ -357,9 +357,9 @@ namespace OGL { void draw(Edge_iterator e) const { // CGAL_NEF_TRACEN("drawing edge "<<*e); Double_point p = e->source(), q = e->target(); - CGAL::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), + CGAL::IO::Color cf(CGAL_NEF3_MARKED_EDGE_COLOR), ct(CGAL_NEF3_UNMARKED_EDGE_COLOR); // more blue-ish - CGAL::Color c = e->mark() ? ct : cf; + CGAL::IO::Color c = e->mark() ? ct : cf; glLineWidth(5); glColor3ub(c.red(),c.green(),c.blue()); glBegin(GL_LINE_STRIP); @@ -383,9 +383,9 @@ namespace OGL { GLU_TESS_WINDING_POSITIVE); DFacet::Coord_const_iterator cit; - CGAL::Color cf(CGAL_NEF3_MARKED_FACET_COLOR), + CGAL::IO::Color cf(CGAL_NEF3_MARKED_FACET_COLOR), ct(CGAL_NEF3_UNMARKED_FACET_COLOR); // more blue-ish - CGAL::Color c = (f->mark() ? ct : cf); + CGAL::IO::Color c = (f->mark() ? ct : cf); glColor3ub(c.red(),c.green(),c.blue()); gluTessBeginPolygon(tess_,f->normal()); // CGAL_NEF_TRACEN(" "); diff --git a/Nef_3/include/CGAL/Nef_3/Pluecker_line_3.h b/Nef_3/include/CGAL/Nef_3/Pluecker_line_3.h index 2b48b76bbee..ab1f4bf4a14 100644 --- a/Nef_3/include/CGAL/Nef_3/Pluecker_line_3.h +++ b/Nef_3/include/CGAL/Nef_3/Pluecker_line_3.h @@ -316,7 +316,7 @@ on their Pluecker coefficient tuples.}*/ template std::ostream& operator<<(std::ostream& os, const Pluecker_line_3& l) { - switch( get_mode(os) ) { + switch( IO::get_mode(os) ) { case CGAL::IO::ASCII : for (unsigned i=0; i<6; ++i) os << l[i] << " "; return os; diff --git a/Nef_3/include/CGAL/Nef_3/SHalfedge.h b/Nef_3/include/CGAL/Nef_3/SHalfedge.h index ddf5b382b1d..31694604135 100644 --- a/Nef_3/include/CGAL/Nef_3/SHalfedge.h +++ b/Nef_3/include/CGAL/Nef_3/SHalfedge.h @@ -216,7 +216,7 @@ class SHalfedge_base { std::string debug() const { std::stringstream os; - set_pretty_mode(os); + CGAL::IO::set_pretty_mode(os); os <<"e[ "<debug()<<", " <source_->debug() #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO diff --git a/Nef_3/include/CGAL/Nef_3/SHalfloop.h b/Nef_3/include/CGAL/Nef_3/SHalfloop.h index e6cc98bf944..59c449c150f 100644 --- a/Nef_3/include/CGAL/Nef_3/SHalfloop.h +++ b/Nef_3/include/CGAL/Nef_3/SHalfloop.h @@ -102,7 +102,7 @@ class SHalfloop_base { public: std::string debug() const { std::stringstream os; - set_pretty_mode(os); + CGAL::IO::set_pretty_mode(os); os<<"sl [ "< #include -#define CGAL_NEF3_LGREY CGAL::Color(170,170,200) -#define CGAL_NEF3_DGREY CGAL::Color(30,30,50) +#define CGAL_NEF3_LGREY CGAL::IO::Color(170,170,200) +#define CGAL_NEF3_DGREY CGAL::IO::Color(30,30,50) namespace CGAL { diff --git a/Nef_3/include/CGAL/Nef_3/SNC_SM_visualizor.h b/Nef_3/include/CGAL/Nef_3/SNC_SM_visualizor.h index ec1b81c1014..e06f5b8e92f 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_SM_visualizor.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_SM_visualizor.h @@ -24,8 +24,8 @@ #include #include -#define CGAL_NEF_LGREY CGAL::Color(170,170,200) -#define CGAL_NEF_DGREY CGAL::Color(30,30,50) +#define CGAL_NEF_LGREY CGAL::IO::Color(170,170,200) +#define CGAL_NEF_DGREY CGAL::IO::Color(30,30,50) namespace CGAL { diff --git a/Nef_3/include/CGAL/Nef_3/SNC_constructor.h b/Nef_3/include/CGAL/Nef_3/SNC_constructor.h index e5bf90033ff..23041cff316 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_constructor.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_constructor.h @@ -831,7 +831,7 @@ public: ec->circle()); Sphere_point sp(intersection(c, seg.sphere_circle())); CGAL_NEF_TRACEN(seg <<" has_on " << sp); - if(!seg.has_on(sp)) + if(!seg.has_on_after_intersection(sp)) sp = sp.antipode(); sv = D.new_svertex(sp); CGAL_NEF_TRACEN("new svertex 3 " << normalized(sp)); @@ -2063,7 +2063,7 @@ class SNC_constructor ec->circle()); Sphere_point sp(intersection(c, seg.sphere_circle())); CGAL_NEF_TRACEN(seg <<" has_on " << sp); - if(!seg.has_on(sp)) + if(!seg.has_on_after_intersection(sp)) sp = sp.antipode(); sv = D.new_svertex(sp); CGAL_NEF_TRACEN("new svertex 3 " << normalized(sp)); diff --git a/Nef_3/include/CGAL/Nef_3/SNC_decorator.h b/Nef_3/include/CGAL/Nef_3/SNC_decorator.h index ba0a8c09bd1..181479d575d 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_decorator.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_decorator.h @@ -176,7 +176,7 @@ class SNC_decorator : public SNC_const_decorator { } std::string debug(SHalfedge_handle e) const - { std::stringstream os; set_pretty_mode(os); + { std::stringstream os; CGAL::IO::set_pretty_mode(os); os << "sedge-use " << e->source()->source()->point() << e->twin()->source()->twin()->source()->point() <<'\0'; return os.str(); diff --git a/Nef_3/include/CGAL/Nef_3/SNC_indexed_items.h b/Nef_3/include/CGAL/Nef_3/SNC_indexed_items.h index 2bee2a582e5..80fb7487800 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_indexed_items.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_indexed_items.h @@ -15,9 +15,6 @@ #include - -#include - #include #include #include @@ -26,6 +23,8 @@ #include #include +#include + #undef CGAL_NEF_DEBUG #define CGAL_NEF_DEBUG 83 #include @@ -42,7 +41,7 @@ class Index_generator { #ifdef CGAL_NO_ATOMIC static int unique; #else - static CGAL::cpp11::atomic unique; + static std::atomic unique; #endif return unique++; } diff --git a/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h b/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h index 7968f56902b..c0ddcc5ff22 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_io_parser.h @@ -1112,8 +1112,8 @@ SNC_io_parser::SNC_io_parser(std::ostream& os, SNC_structure& W, sln(W.number_of_shalfloops()), sfn(W.number_of_sfaces()) { - verbose = (get_mode(out) != CGAL::IO::ASCII && - get_mode(out) != CGAL::IO::BINARY); + verbose = (IO::get_mode(out) != CGAL::IO::ASCII && + IO::get_mode(out) != CGAL::IO::BINARY); sorted = sort; reduce = reduce_; reduce = reduce && this->is_extended_kernel() && this->is_bounded(); diff --git a/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h b/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h index 74dd49f210d..10fdcd01a9b 100644 --- a/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h +++ b/Nef_3/include/CGAL/Nef_3/SNC_point_locator.h @@ -126,7 +126,7 @@ public: virtual void add_vertex(Vertex_handle) {} - virtual ~SNC_point_locator() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + virtual ~SNC_point_locator() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_NEF_CLOG(""); CGAL_NEF_CLOG("construction_time: "< -#include +#include #include -#include -#include -#include - -#undef CGAL_NEF_DEBUG -#define CGAL_NEF_DEBUG 17 -#include +#include +#include +#include namespace CGAL { -template -Point_2 point_3_get_x_y_point_2(const Point_3& p, const Homogeneous_tag&) { - return( Point_2(p.hx(), p.hy(), p.hw()) ); -} - -template -Point_2 point_3_get_y_z_point_2(const Point_3& p, const Homogeneous_tag&) { - return( Point_2(p.hy(), p.hz(), p.hw()) ); -} - -template -Point_2 point_3_get_z_x_point_2(const Point_3& p, const Homogeneous_tag&) { - return( Point_2(p.hz(), p.hx(), p.hw()) ); -} - -template -Point_2 point_3_get_x_y_point_2(const Point_3& p, const Cartesian_tag&) { - return( Point_2(p.x(), p.y()) ); -} - -template -Point_2 point_3_get_y_z_point_2(const Point_3& p, const Cartesian_tag&) { - return( Point_2(p.y(), p.z()) ); -} - -template -Point_2 point_3_get_z_x_point_2(const Point_3& p, const Cartesian_tag&) { - return( Point_2(p.z(), p.x()) ); -} - -template -Point_2 point_3_get_x_y_point_2(const Point_3& p) { - return point_3_get_x_y_point_2(p,typename R::Kernel_tag()); -} - -template -Point_2 point_3_get_y_z_point_2(const Point_3& p) { - return point_3_get_y_z_point_2(p,typename R::Kernel_tag()); -} - -template -Point_2 point_3_get_z_x_point_2(const Point_3& p) { - return point_3_get_z_x_point_2(p,typename R::Kernel_tag()); -} - template Bounded_side bounded_side_3(IteratorForward first, IteratorForward last, const Point_3& point, - typename R::Plane_3 plane = typename R::Plane_3(0,0,0,0)) { - typedef typename R::Point_2 Point_2; - typedef typename R::Point_3 Point_3; - typedef typename R::Plane_3 Plane_3; + const Plane_3& plane) +{ + typedef typename CGAL::Projection_traits_yz_3 YZ; + typedef typename CGAL::Projection_traits_xz_3 XZ; + typedef typename CGAL::Projection_traits_xy_3 XY; - if(plane == Plane_3(0,0,0,0)) { - // TO TEST: code never tested - IteratorForward p(first); - Point_3 p0(*(p++)); - CGAL_assertion(p != last); - Point_3 p1(*(p++)); - CGAL_assertion(p != last); - Point_3 p2(*(p++)); - plane = Plane_3(p0, p1, p2); - - /* since we just need to project the points to a non-perpendicular plane - we don't need to care about the plane orientation */ - } + CGAL_assertion(!plane.is_degenerate()); typename R::Non_zero_dimension_3 non_zero_dimension_3; int dir = non_zero_dimension_3(plane.orthogonal_vector()); - - CGAL_assertion(!plane.is_degenerate()); - Point_2 (*t)(const Point_3&); - - if(dir == 0){ - t = &point_3_get_y_z_point_2< Point_2, Point_3, R>; - }else if(dir == 1){ - t = &point_3_get_z_x_point_2< Point_2, Point_3, R>; - }else{ - t = &point_3_get_x_y_point_2< Point_2, Point_3, R>; + if(dir == 0) { + return bounded_side_2(first, last, point, YZ()); + } else if(dir == 1) { + return bounded_side_2(first, last, point, XZ()); + } else { + return bounded_side_2(first, last, point, XY()); } - - std::vector< Point_2> points; - CGAL_NEF_TRACEN("facet:"); - for( ; first != last; ++first ) { - CGAL_NEF_TRACEN(t(*first)<<" "<<*first); - points.push_back( t(*first)); - } - Bounded_side side = bounded_side_2( points.begin(), points.end(), t(point)); - return side; } } //namespace CGAL diff --git a/Nef_3/include/CGAL/Nef_polyhedron_3.h b/Nef_3/include/CGAL/Nef_polyhedron_3.h index 8a2e1e16520..c1a0791152f 100644 --- a/Nef_3/include/CGAL/Nef_polyhedron_3.h +++ b/Nef_3/include/CGAL/Nef_polyhedron_3.h @@ -1710,6 +1710,8 @@ protected: bool ninety = is_90degree_rotation(aff); bool scale = is_scaling(aff); + bool translate = aff.is_translation(); + Vertex_iterator vi; CGAL_forall_vertices( vi, snc()) { @@ -1726,8 +1728,10 @@ protected: vertex_list.push_back(vi); } else { vi->point() = vi->point().transform( aff); - SM_decorator sdeco(&*vi); - sdeco.transform( linear); + if(! translate){ + SM_decorator sdeco(&*vi); + sdeco.transform( linear); + } } } diff --git a/Nef_3/include/CGAL/draw_nef_3.h b/Nef_3/include/CGAL/draw_nef_3.h index bcdb6c61ae3..8a1f4a74931 100644 --- a/Nef_3/include/CGAL/draw_nef_3.h +++ b/Nef_3/include/CGAL/draw_nef_3.h @@ -30,11 +30,11 @@ namespace CGAL { struct DefaultColorFunctorNefPolyhedron { template - static CGAL::Color run(const NefPolyhedron&, + static CGAL::IO::Color run(const NefPolyhedron&, typename NefPolyhedron::Halffacet_const_handle fh) { if (fh == nullptr) // use to get the mono color - return CGAL::Color(100, 125, 200); // R G B between 0-255 + return CGAL::IO::Color(100, 125, 200); // R G B between 0-255 CGAL::Random random((unsigned int)(std::size_t)(&(*fh))); return get_random_color(random); @@ -111,7 +111,7 @@ protected: return; } - CGAL::Color c = viewer.run_color(f); + CGAL::IO::Color c = viewer.run_color(f); viewer.face_begin(c); SHalfedge_around_facet_const_circulator hc_start(se); @@ -171,7 +171,7 @@ protected: negate_all_normals(); } - CGAL::Color run_color(Halffacet_const_handle fh) + CGAL::IO::Color run_color(Halffacet_const_handle fh) { return m_fcolor.run(nef, fh); } diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_checker.h b/Nef_S2/include/CGAL/Nef_S2/SM_checker.h index c5311e9a445..dd659105e70 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_checker.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_checker.h @@ -108,7 +108,7 @@ void SM_checker:: check_order_preserving_embedding(Vertex_const_handle v) const { std::ostrstream error_status; - CGAL::set_pretty_mode ( error_status ); + CGAL::IO::set_pretty_mode ( error_status ); Halfedge_const_handle ef = first_out_edge(v) ,e=ef,en,enn; error_status << "check_order_preserving_embedding\n"; error_status << "vertex " << PV(v) << endl; @@ -219,7 +219,7 @@ check_is_triangulation() const CGAL::Hash_map< Halfedge_const_iterator, bool> on_boundary(false); Halfedge_around_face_const_circulator hit(eb), hend(hit); std::ostrstream error_status; - CGAL::set_pretty_mode ( error_status ); + CGAL::IO::set_pretty_mode ( error_status ); error_status << "check_is_triangulation\n"; error_status << "on boundary:\n"; CGAL_For_all(hit,hend) { diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_io_parser.h b/Nef_S2/include/CGAL/Nef_S2/SM_io_parser.h index d58126bac9c..7c09b4eaf0c 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_io_parser.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_io_parser.h @@ -152,8 +152,8 @@ SM_io_parser(std::ostream& iout, const Base& D) en(this->number_of_shalfedges()), ln(this->number_of_shalfloops()), fn(this->number_of_sfaces()) -{ verbose = (get_mode(out) != CGAL::IO::ASCII && - get_mode(out) != CGAL::IO::BINARY); +{ verbose = (IO::get_mode(out) != CGAL::IO::ASCII && + IO::get_mode(out) != CGAL::IO::BINARY); } diff --git a/Nef_S2/include/CGAL/Nef_S2/SM_items.h b/Nef_S2/include/CGAL/Nef_S2/SM_items.h index f779f23273f..d1141a21311 100644 --- a/Nef_S2/include/CGAL/Nef_S2/SM_items.h +++ b/Nef_S2/include/CGAL/Nef_S2/SM_items.h @@ -109,7 +109,7 @@ public: public: std::string debug() const - { std::ostringstream os; set_pretty_mode(os); + { std::ostringstream os; CGAL::IO::set_pretty_mode(os); os<<"V"<debug()<<", " <source_->debug()<< #ifdef CGAL_I_DO_WANT_TO_USE_GENINFO @@ -289,7 +289,7 @@ public: const GenPtr& info() const { return info_; } std::string debug() const - { std::ostringstream os; set_pretty_mode(os); + { std::ostringstream os; CGAL::IO::set_pretty_mode(os); os<<"l"< #include -#define CGAL_NEF_LGREY CGAL::Color(170,170,200) -#define CGAL_NEF_DGREY CGAL::Color(30,30,50) +#define CGAL_NEF_LGREY CGAL::IO::Color(170,170,200) +#define CGAL_NEF_DGREY CGAL::IO::Color(30,30,50) namespace CGAL { template diff --git a/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h b/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h index 505fe604fa5..db3a99f3ad9 100644 --- a/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h +++ b/Nef_S2/include/CGAL/Nef_S2/Sphere_geometry_OGL.h @@ -33,8 +33,8 @@ #define CGAL_NEF_DEBUG 151 #include -#define CGAL_NEF_LGREY CGAL::Color(170,170,200) -#define CGAL_NEF_DGREY CGAL::Color(30,30,50) +#define CGAL_NEF_LGREY CGAL::IO::Color(170,170,200) +#define CGAL_NEF_DGREY CGAL::IO::Color(30,30,50) namespace CGAL { namespace OGL { @@ -240,12 +240,12 @@ template class Sphere_point : public VPoint, public Gen_object { typedef R_ R; CGAL::Sphere_point p_; - CGAL::Color c_; + CGAL::IO::Color c_; unsigned w_; public: Sphere_point() {} Sphere_point(const CGAL::Sphere_point& p, - CGAL::Color c = CGAL::black(), unsigned w = 10) : + CGAL::IO::Color c = CGAL::black(), unsigned w = 10) : VPoint(Approximator::approximate(p)), p_(p), c_(c), w_(w) {} Sphere_point(const Sphere_point& p) : VPoint(p), Gen_object() { p_ = p.p_; c_ = p.c_; w_ = p.w_; } @@ -283,12 +283,12 @@ template class Sphere_segment : public VSegment, public Gen_object { typedef R_ R; CGAL::Sphere_segment s_; - CGAL::Color c_; + CGAL::IO::Color c_; unsigned w_; public: Sphere_segment() {} Sphere_segment(const CGAL::Sphere_segment& s, - CGAL::Color c = CGAL::black(), unsigned w = 2) + CGAL::IO::Color c = CGAL::black(), unsigned w = 2) : VSegment(Approximator::approximate(s)), s_(s), c_(c), w_(w) {} Sphere_segment(const Sphere_segment& s) : VSegment(s), Gen_object() { s_ = s.s_; c_ = s.c_; w_ = s.w_; } @@ -336,12 +336,12 @@ template class Sphere_circle : public VSegment, public Gen_object { typedef R_ R; CGAL::Sphere_circle s_; - CGAL::Color c_; + CGAL::IO::Color c_; unsigned w_; public: Sphere_circle() {} Sphere_circle(const CGAL::Sphere_circle& s, - CGAL::Color c = CGAL::black(), unsigned w = 2) + CGAL::IO::Color c = CGAL::black(), unsigned w = 2) : VSegment(Approximator::approximate(s)), s_(s), c_(c), w_(w) {} Sphere_circle(const Sphere_circle& s) : VSegment(s), Gen_object() { s_ = s.s_; c_ = s.c_; w_ = s.w_; } @@ -382,12 +382,12 @@ template class Sphere_triangle : public VTriangle, public Gen_object { typedef R_ R; CGAL::Sphere_triangle t_; - CGAL::Color c_; + CGAL::IO::Color c_; public: Sphere_triangle() {} Sphere_triangle(const CGAL::Sphere_triangle& t, - CGAL::Color c = CGAL::Color(100,100,120)) + CGAL::IO::Color c = CGAL::IO::Color(100,100,120)) : VTriangle(Approximator::approximate(t)), t_(t), c_(c) {} Sphere_triangle(const Sphere_triangle& t) : VTriangle(t), Gen_object() @@ -530,27 +530,27 @@ Unit_sphere& operator=(const Unit_sphere& S) template void push_back(const CGAL::Sphere_point& p, - CGAL::Color c = CGAL::yellow(), unsigned w = 5) + CGAL::IO::Color c = CGAL::IO::yellow(), unsigned w = 5) { objects_.push_back(new Sphere_point(p,c,w)); } template void push_back(const CGAL::Sphere_segment& s, - CGAL::Color c = CGAL::black(), unsigned w = 1) + CGAL::IO::Color c = CGAL::IO::black(), unsigned w = 1) { objects_.push_back(new Sphere_segment(s,c,w)); } template void push_back(const CGAL::Sphere_circle& s, - CGAL::Color c = CGAL::black(), unsigned w = 1) + CGAL::IO::Color c = CGAL::IO::black(), unsigned w = 1) { objects_.push_back(new Sphere_circle(s,c,w)); } template void push_back(const CGAL::Sphere_triangle& t, - CGAL::Color c = CGAL::white()) + CGAL::IO::Color c = CGAL::IO::white()) { triangles_.push_back(new Sphere_triangle(t,c)); } template void push_back_triangle_edge(const CGAL::Sphere_segment& s, - CGAL::Color c = CGAL::blue(), unsigned w = 1) + CGAL::IO::Color c = CGAL::IO::blue(), unsigned w = 1) { triangle_edges_.push_back(new Sphere_segment(s,c,w)); } void set_style(int style) { diff --git a/Nef_S2/include/CGAL/Nef_S2/Sphere_map.h b/Nef_S2/include/CGAL/Nef_S2/Sphere_map.h index 0ee5d431292..9e2982fd347 100644 --- a/Nef_S2/include/CGAL/Nef_S2/Sphere_map.h +++ b/Nef_S2/include/CGAL/Nef_S2/Sphere_map.h @@ -229,7 +229,7 @@ public: Sphere_map(bool = false) : boundary_item_(boost::none), svertices_(), sedges_(), sfaces_(), shalfloop_() {} - ~Sphere_map() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + ~Sphere_map() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_destructor_assertion_catch( clear(); diff --git a/Nef_S2/include/CGAL/Nef_S2/Sphere_segment.h b/Nef_S2/include/CGAL/Nef_S2/Sphere_segment.h index d9404603373..2db237e33dc 100644 --- a/Nef_S2/include/CGAL/Nef_S2/Sphere_segment.h +++ b/Nef_S2/include/CGAL/Nef_S2/Sphere_segment.h @@ -177,7 +177,7 @@ void split_halfcircle(Sphere_segment& s1, Plane_3 h(Point_3(0,0,0),(target()-CGAL::ORIGIN)); Sphere_point p = CGAL::intersection(sphere_circle(),Sphere_circle(h)); - if ( !has_on(p) ) p = p.antipode(); + if ( !has_on_after_intersection(p) ) p = p.antipode(); s1 = Sphere_segment(this->ptr()->ps_,p,this->ptr()->c_); s2 = Sphere_segment(p,this->ptr()->pt_,this->ptr()->c_); } diff --git a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h index 59613249388..7cc81e3800d 100644 --- a/Nef_S2/include/CGAL/Nef_polyhedron_S2.h +++ b/Nef_S2/include/CGAL/Nef_polyhedron_S2.h @@ -73,7 +73,7 @@ class Nef_polyhedron_S2_rep { public: Nef_polyhedron_S2_rep() : sm_() {} Nef_polyhedron_S2_rep(const Self&) : sm_() {} - ~Nef_polyhedron_S2_rep() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + ~Nef_polyhedron_S2_rep() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_destructor_assertion_catch( sm_.clear(); diff --git a/Nef_S2/test/Nef_S2/Nef_polyhedron_S2-test.cpp b/Nef_S2/test/Nef_S2/Nef_polyhedron_S2-test.cpp index 55c2823abf6..e429bab74f2 100644 --- a/Nef_S2/test/Nef_S2/Nef_polyhedron_S2-test.cpp +++ b/Nef_S2/test/Nef_S2/Nef_polyhedron_S2-test.cpp @@ -23,7 +23,7 @@ typedef Nef_polyhedron::Object_handle Object_handle; int main(int, char**) { - CGAL::set_pretty_mode ( std::cerr ); + CGAL::IO::set_pretty_mode ( std::cerr ); CGAL_NEF_SETDTHREAD(911); std::cerr << CGAL::sweepversion << std::endl; diff --git a/Nef_S2/test/Nef_S2/Sphere_geometry-test.cpp b/Nef_S2/test/Nef_S2/Sphere_geometry-test.cpp index ea48998ac63..bda03d3f6b4 100644 --- a/Nef_S2/test/Nef_S2/Sphere_geometry-test.cpp +++ b/Nef_S2/test/Nef_S2/Sphere_geometry-test.cpp @@ -21,7 +21,7 @@ typedef CGAL::Plane_3 Plane; int main() { CGAL_TEST_START; - CGAL::set_pretty_mode ( std::cout ); + CGAL::IO::set_pretty_mode ( std::cout ); SPoint p(0,0,1), q(1,1,0), r(1,-1,0), s(1,1,1); SSegment s1(p,q), s2(p,r,false), s3(SPoint(0,-1,0),SPoint(-1,0,0)); SCircle c0, c1(p,q), c2(1,1,1), c3(Plane(1,1,1,0)); diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Point_d.h b/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Point_d.h index f21a7f6b4ba..63dd30f2369 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Point_d.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Point_d.h @@ -141,7 +141,7 @@ public: { auto b = p.cartesian_begin(); auto e = p.cartesian_end(); - if(is_ascii(os)) + if(IO::is_ascii(os)) { os << p.dimension(); for(; b != e; ++b){ @@ -162,7 +162,7 @@ public: friend std::istream& operator>>(std::istream &is, Point_d & p) { int dim; - if( is_ascii(is) ) + if( IO::is_ascii(is) ) is >> dim; else { @@ -171,10 +171,10 @@ public: if(!is) return is; std::vector coords(dim); - if(is_ascii(is)) + if(IO::is_ascii(is)) { for(int i=0;i> iformat(coords[i]); + is >> IO::iformat(coords[i]); } else { diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Vector_d.h b/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Vector_d.h index de13385758d..3c45a5eecb0 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Vector_d.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Vector_d.h @@ -134,7 +134,7 @@ public: { auto b = v.cartesian_begin(); auto e = v.cartesian_end(); - if(is_ascii(os)) + if(IO::is_ascii(os)) { os << v.dimension(); for(; b != e; ++b){ @@ -155,7 +155,7 @@ public: friend std::istream & operator>>(std::istream &is, Vector_d & v) { int dim; - if( is_ascii(is) ) + if( IO::is_ascii(is) ) is >> dim; else { @@ -164,10 +164,10 @@ public: if(!is) return is; std::vector coords(dim); - if(is_ascii(is)) + if(IO::is_ascii(is)) { for(int i=0;i> iformat(coords[i]); + is >> IO::iformat(coords[i]); } else { diff --git a/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Weighted_point_d.h b/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Weighted_point_d.h index ba88c4e0db7..c3020b65f7c 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Weighted_point_d.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/Wrapper/Weighted_point_d.h @@ -92,7 +92,7 @@ public: template std::ostream& operator<<(std::ostream& os, const Weighted_point_d& p) { - if(is_ascii(os)) + if(IO::is_ascii(os)) { return os << p.point() << ' ' << p.weight(); } @@ -111,9 +111,9 @@ std::istream& operator>>(std::istream& is, Weighted_point_d& p) typedef typename Get_type::type Point_; typedef typename Get_functor >::type CWP; Point_ q; FT_ w; - if(is_ascii(is)) + if(IO::is_ascii(is)) { - if(is >> q >> iformat(w)) p=CWP()(q,w); + if(is >> q >> IO::iformat(w)) p=CWP()(q,w); } else { diff --git a/NewKernel_d/include/CGAL/NewKernel_d/utils.h b/NewKernel_d/include/CGAL/NewKernel_d/utils.h index 3a925b3d8d6..1204e1fe669 100644 --- a/NewKernel_d/include/CGAL/NewKernel_d/utils.h +++ b/NewKernel_d/include/CGAL/NewKernel_d/utils.h @@ -94,25 +94,6 @@ struct Has_type_different_from enum { value=true }; }; - // like std::multiplies but allows mixing types - // in C++11 in doesn't need to be a template - template < class Ret > - struct multiplies { - template - decltype(auto) operator()(A&&a,B&&b)const - { - return std::forward(a)*std::forward(b); - } - }; - template < class Ret > - struct division { - template - decltype(auto) operator()(A&&a,B&&b)const - { - return std::forward(a)/std::forward(b); - } - }; - using std::decay; template struct Type_copy_ref { typedef U type; }; diff --git a/Number_types/include/CGAL/CORE_BigRat.h b/Number_types/include/CGAL/CORE_BigRat.h index 871f209e42e..0f51dac5663 100644 --- a/Number_types/include/CGAL/CORE_BigRat.h +++ b/Number_types/include/CGAL/CORE_BigRat.h @@ -156,7 +156,7 @@ public: Output_rep( const ::CORE::BigRat& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::ostream& operator()( std::ostream& out) const { - switch (get_mode(out)) { + switch (IO::get_mode(out)) { case IO::PRETTY:{ if(CGAL_CORE_DENOMINATOR(t) == ::CORE::BigRat(1)) return out < needs_parens_as_product; if (needs_parens_as_product(t)) - return out <<"("<< oformat(t) <<")"; + return out <<"("<< IO::oformat(t) <<")"; else - return out << oformat(t); + return out << IO::oformat(t); } }; diff --git a/Number_types/include/CGAL/Counted_number.h b/Number_types/include/CGAL/Counted_number.h index 68fe0409671..bb3dc060f0e 100644 --- a/Number_types/include/CGAL/Counted_number.h +++ b/Number_types/include/CGAL/Counted_number.h @@ -19,9 +19,9 @@ #define CGAL_COUNTED_NUMBER_H #include -#include #include // for Root_of_selector #include +#include namespace CGAL { @@ -30,7 +30,7 @@ class Counted_number { #ifdef CGAL_NO_ATOMIC static unsigned long #else - static CGAL::cpp11::atomic + static std::atomic #endif s_neg_count, s_add_count, s_sub_count, s_mul_count, s_div_count, @@ -280,64 +280,64 @@ template< class NT > unsigned long Counted_number::s_mod_count = 0; #else template -CGAL::cpp11::atomic Counted_number::s_neg_count; +std::atomic Counted_number::s_neg_count; template -CGAL::cpp11::atomic Counted_number::s_add_count; +std::atomic Counted_number::s_add_count; template -CGAL::cpp11::atomic Counted_number::s_sub_count; +std::atomic Counted_number::s_sub_count; template -CGAL::cpp11::atomic Counted_number::s_mul_count; +std::atomic Counted_number::s_mul_count; template -CGAL::cpp11::atomic Counted_number::s_div_count; +std::atomic Counted_number::s_div_count; template -CGAL::cpp11::atomic Counted_number::s_eq_count; +std::atomic Counted_number::s_eq_count; template -CGAL::cpp11::atomic Counted_number::s_comp_count; +std::atomic Counted_number::s_comp_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_simplify_count; +std::atomic Counted_number::s_simplify_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_unit_part_count; +std::atomic Counted_number::s_unit_part_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_is_zero_count; +std::atomic Counted_number::s_is_zero_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_is_one_count; +std::atomic Counted_number::s_is_one_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_square_count; +std::atomic Counted_number::s_square_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_integral_division_count; +std::atomic Counted_number::s_integral_division_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_is_square_count; +std::atomic Counted_number::s_is_square_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_sqrt_count; +std::atomic Counted_number::s_sqrt_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_kth_root_count; +std::atomic Counted_number::s_kth_root_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_root_of_count; +std::atomic Counted_number::s_root_of_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_gcd_count; +std::atomic Counted_number::s_gcd_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_div_mod_count; +std::atomic Counted_number::s_div_mod_count; template< class NT > -CGAL::cpp11::atomic Counted_number::s_mod_count; +std::atomic Counted_number::s_mod_count; #endif @@ -490,14 +490,14 @@ void Counted_number::report(std::ostream &os) template std::ostream& operator<<(std::ostream &os, Counted_number const &n) { - return os << ::CGAL::oformat( n.rep() )<< std::endl; + return os << ::CGAL::IO::oformat( n.rep() )<< std::endl; } template std::istream& operator>>(std::istream &is, Counted_number &n) { NT num; - is >> ::CGAL::iformat(num); + is >> ::CGAL::IO::iformat(num); if (is) n = Counted_number(num); return is; } diff --git a/Number_types/include/CGAL/GMP/Gmpfr_type.h b/Number_types/include/CGAL/GMP/Gmpfr_type.h index 4d2931fb8d2..33d7108b159 100644 --- a/Number_types/include/CGAL/GMP/Gmpfr_type.h +++ b/Number_types/include/CGAL/GMP/Gmpfr_type.h @@ -1167,7 +1167,7 @@ std::ostream& operator<<(std::ostream& os,const Gmpfr &a){ if(a.is_inf()) return os<<(a<0?"-inf":"+inf"); // The rest of the function was written by George Tzoumas. - if (!is_pretty(os)) { + if (!IO::is_pretty(os)) { std::pair ie=a.to_integer_exp(); os << ie.first << 'e' << ie.second; return os; diff --git a/Number_types/include/CGAL/Interval_nt.h b/Number_types/include/CGAL/Interval_nt.h index 690f1cc4c74..b981657d0fb 100644 --- a/Number_types/include/CGAL/Interval_nt.h +++ b/Number_types/include/CGAL/Interval_nt.h @@ -438,9 +438,9 @@ private: if(c == '['){ // read original output from operator << double inf,sup; CGAL_SWALLOW(is, '[');// read the "[" - is >> iformat(inf); + is >> IO::iformat(inf); CGAL_SWALLOW(is, ';');// read the ";" - is >> iformat(sup); + is >> IO::iformat(sup); CGAL_SWALLOW(is, ']');// read the "]" I = Interval_nt(inf,sup); }else{ //read double (backward compatibility) diff --git a/Number_types/include/CGAL/Mpzf.h b/Number_types/include/CGAL/Mpzf.h index 6e482232df0..60034bb3896 100644 --- a/Number_types/include/CGAL/Mpzf.h +++ b/Number_types/include/CGAL/Mpzf.h @@ -10,6 +10,10 @@ // // Author(s) : Marc Glisse +#ifndef CGAL_NO_MPZF_DIVISION_OPERATOR +#define CGAL_MPZF_DIVISION_OPERATOR 1 +#endif + #ifndef CGAL_MPZF_H #define CGAL_MPZF_H #include @@ -774,7 +778,11 @@ struct Mpzf { return res; } +#ifndef CGAL_MPZF_DIVISION_OPERATOR + friend Mpzf division(Mpzf const&a, Mpzf const&b){ +#else // CGAL_MPZF_DIVISION_OPERATOR friend Mpzf operator/(Mpzf const&a, Mpzf const&b){ +#endif // CGAL_MPZF_DIVISION_OPERATOR // FIXME: Untested int asize=std::abs(a.size); int bsize=std::abs(b.size); @@ -909,7 +917,9 @@ struct Mpzf { Mpzf& operator+=(Mpzf const&x){ *this=*this+x; return *this; } Mpzf& operator-=(Mpzf const&x){ *this=*this-x; return *this; } Mpzf& operator*=(Mpzf const&x){ *this=*this*x; return *this; } +#ifdef CGAL_MPZF_DIVISION_OPERATOR Mpzf& operator/=(Mpzf const&x){ *this=*this/x; return *this; } +#endif // not CGAL_MPZF_DIVISION_OPERATOR bool is_canonical () const { if (size == 0) return true; @@ -1096,7 +1106,11 @@ std::istream& operator>> (std::istream& is, Mpzf& a) Type operator()( const Type& x, const Type& y ) const { +#ifdef CGAL_MPZF_DIVISION_OPERATOR return x / y; +#else // not CGAL_MPZF_DIVISION_OPERATOR + return division(x, y); +#endif // not CGAL_MPZF_DIVISION_OPERATOR } }; diff --git a/Number_types/include/CGAL/Sqrt_extension/io.h b/Number_types/include/CGAL/Sqrt_extension/io.h index 6a7b593691f..37ac7f7b0f9 100644 --- a/Number_types/include/CGAL/Sqrt_extension/io.h +++ b/Number_types/include/CGAL/Sqrt_extension/io.h @@ -38,15 +38,15 @@ input_ascii(std::istream& is , Sqrt_extension& result){ swallow(is, 'X'); swallow(is, 'T'); swallow(is, '['); - is >> iformat(a0); + is >> IO::iformat(a0); do is.get(c); while (isspace(c)); if (c != ',') CGAL_error_msg( "input error: , expected" ); - is >> iformat(a1); + is >> IO::iformat(a1); do is.get(c); while (isspace(c)); if (c != ',') CGAL_error_msg( "input error: , expected" ); - is >> iformat(root); + is >> IO::iformat(root); do is.get(c); while (isspace(c)); if (c != ']') CGAL_error_msg( "input error: ] expected" ); @@ -61,13 +61,13 @@ input_ascii(std::istream& is , Sqrt_extension& result){ template void output_maple(std::ostream& os, const Sqrt_extension& x){ - CGAL::IO::Mode o_mode=::CGAL::get_mode(os); - ::CGAL::set_mode(os,CGAL::IO::PRETTY); + CGAL::IO::Mode o_mode=::CGAL::IO::get_mode(os); + ::CGAL::IO::set_mode(os,CGAL::IO::PRETTY); if ( x.a0() != NT(0)){ if ( x.a1() != NT(0)){ os << x.a0() - << "+" << CGAL::oformat(x.a1(),CGAL::Parens_as_product_tag()) + << "+" << CGAL::IO::oformat(x.a1(),CGAL::Parens_as_product_tag()) << "*sqrt(" << x.root() << ")"; }else{ os << x.a0(); @@ -75,13 +75,13 @@ output_maple(std::ostream& os, const Sqrt_extension& x) } else{ if (x.a1() != NT(0)){ - os << CGAL::oformat(x.a1(),CGAL::Parens_as_product_tag()) + os << CGAL::IO::oformat(x.a1(),CGAL::Parens_as_product_tag()) << "*sqrt(" << x.root() << ")"; }else{ os << 0; } } - ::CGAL::set_mode(os,o_mode); + ::CGAL::IO::set_mode(os,o_mode); return; } @@ -133,7 +133,7 @@ public: template std::ostream& operator << (std::ostream& os, const Sqrt_extension& ext){ - switch(CGAL::get_mode(os)) { + switch(CGAL::IO::get_mode(os)) { case CGAL::IO::PRETTY: output_maple(os,ext); break; default: @@ -151,7 +151,7 @@ std::ostream& operator << (std::ostream& os, */ template std::istream& operator >> (std::istream& is, Sqrt_extension& ext) { - CGAL_precondition(!CGAL::is_pretty(is)); + CGAL_precondition(!CGAL::IO::is_pretty(is)); input_ascii(is,ext); return is; } diff --git a/Number_types/include/CGAL/leda_rational.h b/Number_types/include/CGAL/leda_rational.h index e520781c132..6b0da89b525 100644 --- a/Number_types/include/CGAL/leda_rational.h +++ b/Number_types/include/CGAL/leda_rational.h @@ -180,7 +180,7 @@ public: Output_rep( const leda_rational& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::ostream& operator()( std::ostream& out) const { - switch (get_mode(out)) { + switch (IO::get_mode(out)) { case IO::PRETTY:{ if(t.denominator() == leda_integer(1)) return out < needs_parens_as_product; if (needs_parens_as_product(t)) - return out <<"("<< oformat(t) <<")"; + return out <<"("<< IO::oformat(t) <<")"; else - return out << oformat(t); + return out << IO::oformat(t); } }; diff --git a/Number_types/include/CGAL/leda_real.h b/Number_types/include/CGAL/leda_real.h index b05fa068e30..2dd4c458762 100644 --- a/Number_types/include/CGAL/leda_real.h +++ b/Number_types/include/CGAL/leda_real.h @@ -197,8 +197,8 @@ public: Output_rep( const ::leda::real& tt) : t(tt) {} //! perform the output, calls \c operator\<\< by default. std::ostream& operator()( std::ostream& out) const { - if (t<0) out << "(" << ::CGAL::oformat(t)<<")"; - else out << ::CGAL::oformat(t); + if (t<0) out << "(" << ::CGAL::IO::oformat(t)<<")"; + else out << ::CGAL::IO::oformat(t); return out; } }; diff --git a/Number_types/include/CGAL/mpq_class.h b/Number_types/include/CGAL/mpq_class.h index 6250ea95e3a..76611b93cf9 100644 --- a/Number_types/include/CGAL/mpq_class.h +++ b/Number_types/include/CGAL/mpq_class.h @@ -40,7 +40,6 @@ namespace CGAL { - // AST for mpq_class template<> class Algebraic_structure_traits< mpq_class > diff --git a/Number_types/test/Number_types/CORE_BigInt.cpp b/Number_types/test/Number_types/CORE_BigInt.cpp index 98b9dc4e3b1..8cfe816f043 100644 --- a/Number_types/test/Number_types/CORE_BigInt.cpp +++ b/Number_types/test/Number_types/CORE_BigInt.cpp @@ -14,35 +14,35 @@ void test_io(){ // MODE ASCII { std::stringstream ss; - CGAL::set_ascii_mode(ss); - ss << CGAL::oformat(NT(1)); + CGAL::IO::set_ascii_mode(ss); + ss << CGAL::IO::oformat(NT(1)); assert( ss.str() == "1"); }{ std::stringstream ss; - CGAL::set_ascii_mode(ss); - ss << CGAL::oformat(NT(0)); + CGAL::IO::set_ascii_mode(ss); + ss << CGAL::IO::oformat(NT(0)); assert( ss.str() == "0"); }{ std::stringstream ss; - CGAL::set_ascii_mode(ss); - ss << CGAL::oformat(NT(-1)); + CGAL::IO::set_ascii_mode(ss); + ss << CGAL::IO::oformat(NT(-1)); assert( ss.str() == "-1"); } //MODE PRETTY { std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << CGAL::oformat(NT(1), CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(NT(1), CGAL::Parens_as_product_tag()); assert( ss.str() == "1"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << CGAL::oformat(NT(0),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(NT(0),CGAL::Parens_as_product_tag()); assert( ss.str() == "0"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << CGAL::oformat(NT(-1), CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(NT(-1), CGAL::Parens_as_product_tag()); assert( ss.str() == "(-1)"); } } diff --git a/Number_types/test/Number_types/CORE_BigRat.cpp b/Number_types/test/Number_types/CORE_BigRat.cpp index e6ea9bdfd1b..60124ec0277 100644 --- a/Number_types/test/Number_types/CORE_BigRat.cpp +++ b/Number_types/test/Number_types/CORE_BigRat.cpp @@ -17,36 +17,36 @@ void test_io(){ // MODE ASCII { std::stringstream ss; - CGAL::set_ascii_mode(ss); - ss << CGAL::oformat(NT(1)); + CGAL::IO::set_ascii_mode(ss); + ss << CGAL::IO::oformat(NT(1)); //std::cout << ss.str()<(); CGAL::test_real_embeddable(); - // assert(CGAL::approximate_sqrt(NT(4)) == NT(2)); + assert(CGAL::approximate_sqrt(NT(4)) == NT(2)); } return 0; diff --git a/Number_types/test/Number_types/Sqrt_extension.h b/Number_types/test/Number_types/Sqrt_extension.h index 5491ab24d56..a1b3da61423 100644 --- a/Number_types/test/Number_types/Sqrt_extension.h +++ b/Number_types/test/Number_types/Sqrt_extension.h @@ -189,95 +189,95 @@ void sqrt_ext_pretty_output_test(){ // TEST without Parens_as_product_tag { std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(-1,0,2); assert( ss.str()=="-1"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(0,0,2); assert( ss.str() == "0"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(1,0,2); assert( ss.str() == "1"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(1,2,2); assert( ss.str() == "1+2*sqrt(2)"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(1,-2,2); assert( ss.str() == "1+(-2)*sqrt(2)"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(-1,2,2); assert( ss.str() == "-1+2*sqrt(2)"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(-1,-2,2); assert( ss.str() == "-1+(-2)*sqrt(2)"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(0,2,2); assert( ss.str()=="2*sqrt(2)"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); + CGAL::IO::set_pretty_mode(ss); ss << EXT1(0,-2,2); assert( ss.str()=="(-2)*sqrt(2)"); } // TEST with Parens_as_product_tag { std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(-1,0,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(-1,0,2),CGAL::Parens_as_product_tag()); assert( ss.str()=="(-1)"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(0,0,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(0,0,2),CGAL::Parens_as_product_tag()); assert( ss.str() == "0"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(1,0,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(1,0,2),CGAL::Parens_as_product_tag()); assert( ss.str() == "1"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(1,2,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(1,2,2),CGAL::Parens_as_product_tag()); assert( ss.str() == "(1+2*sqrt(2))"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(1,-2,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(1,-2,2),CGAL::Parens_as_product_tag()); assert( ss.str() == "(1+(-2)*sqrt(2))"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(-1,2,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(-1,2,2),CGAL::Parens_as_product_tag()); assert( ss.str() == "(-1+2*sqrt(2))"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(-1,-2,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(-1,-2,2),CGAL::Parens_as_product_tag()); assert( ss.str() == "(-1+(-2)*sqrt(2))"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(0,2,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(0,2,2),CGAL::Parens_as_product_tag()); assert( ss.str()=="2*sqrt(2)"); }{ std::stringstream ss; - CGAL::set_pretty_mode(ss); - ss << oformat(EXT1(0,-2,2),CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(ss); + ss << CGAL::IO::oformat(EXT1(0,-2,2),CGAL::Parens_as_product_tag()); assert( ss.str()=="(-2)*sqrt(2)"); } } diff --git a/Number_types/test/Number_types/include/CGAL/_test_io.h b/Number_types/test/Number_types/include/CGAL/_test_io.h index 8fd4e4024e0..12bbcf8a3b0 100644 --- a/Number_types/test/Number_types/include/CGAL/_test_io.h +++ b/Number_types/test/Number_types/include/CGAL/_test_io.h @@ -29,8 +29,8 @@ void test_io(_CT x){ NT a(x); std::stringstream ss; - ss<>CGAL::iformat(a); + ss<>CGAL::IO::iformat(a); assert(a==NT(x)); } @@ -44,8 +44,8 @@ void test_io(){ NT a; std::stringstream ss; - ss<>CGAL::iformat(a); + ss<>CGAL::IO::iformat(a); assert(a==NT()); } @@ -58,8 +58,8 @@ void test_interval_io(_CT x){ NT a(x),b(x); std::stringstream ss; - ss<>CGAL::iformat(a); + ss<>CGAL::IO::iformat(a); assert(a.inf()==b.inf()); assert(a.sup()==b.sup()); } diff --git a/Number_types/test/Number_types/include/CGAL/_test_utilities.h b/Number_types/test/Number_types/include/CGAL/_test_utilities.h index 49a0d8e5224..a53184e65c5 100644 --- a/Number_types/test/Number_types/include/CGAL/_test_utilities.h +++ b/Number_types/test/Number_types/include/CGAL/_test_utilities.h @@ -366,6 +366,10 @@ test_utilities(const NT& x) if (!test_gcd(x,typename AST::Algebraic_category())) return false; if (!test_sqrt(x,typename AST::Sqrt())) return false; + // approximate_sqrt + std::cout << " approximate_sqrt()" << std::endl; + if(NT(CGAL::approximate_sqrt(one)) != one) return false; + return true; } diff --git a/Number_types/test/Number_types/ioformat.cpp b/Number_types/test/Number_types/ioformat.cpp index a483d2f5971..e2d0bf7cda9 100644 --- a/Number_types/test/Number_types/ioformat.cpp +++ b/Number_types/test/Number_types/ioformat.cpp @@ -51,10 +51,10 @@ void test_it(const char* N, int value) NT tmp2(0), tmp1 = static_cast(value); std::ostringstream os; - os << ::CGAL::oformat(tmp1); + os << ::CGAL::IO::oformat(tmp1); std::cout << os.str() << std::endl; std::istringstream is(os.str()); - is >> ::CGAL::iformat(tmp2); + is >> ::CGAL::IO::iformat(tmp2); assert( tmp1 == tmp2 ); } diff --git a/Number_types/test/Number_types/mpq_class.cpp b/Number_types/test/Number_types/mpq_class.cpp index 03d4aaa3d4b..ca215c874c6 100644 --- a/Number_types/test/Number_types/mpq_class.cpp +++ b/Number_types/test/Number_types/mpq_class.cpp @@ -33,7 +33,7 @@ int main() { { mpq_class q; std::istringstream in("12.34"); - in >> CGAL::iformat(q); + in >> CGAL::IO::iformat(q); assert(in); assert(q.get_num() == 617); assert(q.get_den() == 50); diff --git a/Number_types/test/Number_types/utilities.cpp b/Number_types/test/Number_types/utilities.cpp index b4e3e22c81f..f8028bf59d6 100644 --- a/Number_types/test/Number_types/utilities.cpp +++ b/Number_types/test/Number_types/utilities.cpp @@ -1,10 +1,5 @@ #include -// TODO: solve conflict of CORE with GMPXX -#ifdef CGAL_USE_CORE -#undef CGAL_USE_GMPXX -#endif - #include #include #include @@ -77,7 +72,7 @@ int main() TESTIT(long double, "long double") // CGAL number types - //TESTIT(CGAL::MP_Float, "MP_Float") + //TESTIT(CGAL::MP_Float, "MP_Float") // CGAL::div(MP_Float, MP_Float) does not implement _integer_ division TESTIT(CGAL::Quotient, "Quotient") TESTIT(QMPF, "Quotient") TESTIT(CGAL::Lazy_exact_nt, "Lazy_exact_nt >") @@ -129,7 +124,7 @@ int main() // TEST Sqrt_extension #ifdef CGAL_USE_GMP typedef CGAL::Sqrt_extension Ext_int; - TESTIT(Ext_int , "CGAL::Sqrt_extension"); + TESTIT(Ext_int , "CGAL::Sqrt_extension"); typedef CGAL::Sqrt_extension Ext_int_int; TESTIT(Ext_int_int , "CGAL::Sqrt_extension"); typedef CGAL::Sqrt_extension Ext_rat_int; diff --git a/Optimal_bounding_box/benchmark/Optimal_bounding_box/bench_obb.cpp b/Optimal_bounding_box/benchmark/Optimal_bounding_box/bench_obb.cpp index 247cf6435ff..69496827890 100644 --- a/Optimal_bounding_box/benchmark/Optimal_bounding_box/bench_obb.cpp +++ b/Optimal_bounding_box/benchmark/Optimal_bounding_box/bench_obb.cpp @@ -29,7 +29,7 @@ void bench_finding_obb(const std::string filename, std::vector points; std::vector > unused_faces; - CGAL::read_polygon_soup(filename, points, unused_faces); + CGAL::IO::read_polygon_soup(filename, points, unused_faces); std::vector ch_points; std::array obb_points1; diff --git a/Optimal_bounding_box/examples/Optimal_bounding_box/obb_example.cpp b/Optimal_bounding_box/examples/Optimal_bounding_box/obb_example.cpp index 4b786a85ee4..82ef633a101 100644 --- a/Optimal_bounding_box/examples/Optimal_bounding_box/obb_example.cpp +++ b/Optimal_bounding_box/examples/Optimal_bounding_box/obb_example.cpp @@ -23,7 +23,7 @@ int main(int argc, char** argv) const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; Surface_mesh sm; - if(!PMP::read_polygon_mesh(filename, sm) || sm.is_empty()) + if(!PMP::IO::read_polygon_mesh(filename, sm) || sm.is_empty()) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Optimal_bounding_box/examples/Optimal_bounding_box/obb_with_point_maps_example.cpp b/Optimal_bounding_box/examples/Optimal_bounding_box/obb_with_point_maps_example.cpp index dd20c5e2095..81ee1fcc328 100644 --- a/Optimal_bounding_box/examples/Optimal_bounding_box/obb_with_point_maps_example.cpp +++ b/Optimal_bounding_box/examples/Optimal_bounding_box/obb_with_point_maps_example.cpp @@ -24,7 +24,7 @@ int main(int argc, char** argv) const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; Surface_mesh sm; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, sm) || sm.is_empty()) + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, sm) || sm.is_empty()) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Optimal_bounding_box/examples/Optimal_bounding_box/rotated_aabb_tree_example.cpp b/Optimal_bounding_box/examples/Optimal_bounding_box/rotated_aabb_tree_example.cpp index 176ca6ff53b..53957ff0b03 100644 --- a/Optimal_bounding_box/examples/Optimal_bounding_box/rotated_aabb_tree_example.cpp +++ b/Optimal_bounding_box/examples/Optimal_bounding_box/rotated_aabb_tree_example.cpp @@ -36,7 +36,7 @@ int main(int argc, char** argv) const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; Surface_mesh sm; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, sm) || sm.is_empty()) + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, sm) || sm.is_empty()) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Periodic_2_triangulation_2.txt b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Periodic_2_triangulation_2.txt index 93c54224799..f33b9862f3c 100644 --- a/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Periodic_2_triangulation_2.txt +++ b/Periodic_2_triangulation_2/doc/Periodic_2_triangulation_2/Periodic_2_triangulation_2.txt @@ -309,7 +309,7 @@ the `TriangulationDataStructure_2` (e.g. a `Vertex_handle` or `Face_handle`), he can use the `Triangulation_vertex_base_with_info_2` class to add his own information easily in the vertices. The example below shows how to -add a `CGAL::Color` this way. +add a `CGAL::IO::Color` this way. \cgalExample{Periodic_2_triangulation_2/p2t2_colored_vertices.cpp} diff --git a/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/p2t2_colored_vertices.cpp b/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/p2t2_colored_vertices.cpp index aeed55bfdd3..fdf8a5ac45f 100644 --- a/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/p2t2_colored_vertices.cpp +++ b/Periodic_2_triangulation_2/examples/Periodic_2_triangulation_2/p2t2_colored_vertices.cpp @@ -9,7 +9,7 @@ typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Periodic_2_Delaunay_triangulation_traits_2 GT; typedef CGAL::Periodic_2_triangulation_vertex_base_2 Vb; -typedef CGAL::Triangulation_vertex_base_with_info_2 VbInfo; +typedef CGAL::Triangulation_vertex_base_with_info_2 VbInfo; typedef CGAL::Periodic_2_triangulation_face_base_2 Fb; @@ -32,7 +32,7 @@ int main() PDT::Vertex_iterator vit; for (vit = T.vertices_begin(); vit != T.vertices_end(); ++vit) if (T.degree(vit) == 6) - vit->info() = CGAL::red(); + vit->info() = CGAL::IO::red(); return 0; } diff --git a/Periodic_2_triangulation_2/include/CGAL/Periodic_2_offset_2.h b/Periodic_2_triangulation_2/include/CGAL/Periodic_2_offset_2.h index c97034bb790..574fd1d31ec 100644 --- a/Periodic_2_triangulation_2/include/CGAL/Periodic_2_offset_2.h +++ b/Periodic_2_triangulation_2/include/CGAL/Periodic_2_offset_2.h @@ -146,7 +146,7 @@ inline typename K::Point_2 operator+(const typename K::Point_2 &p, const Periodi inline std::ostream &operator<<(std::ostream &os, const Periodic_2_offset_2 &off) { - if (is_ascii(os)) + if (IO::is_ascii(os)) os << off.x() << " " << off.y(); else { @@ -161,7 +161,7 @@ inline std::istream &operator>>(std::istream &is, Periodic_2_offset_2 &off) { int x = 0, y = 0; - if (is_ascii(is)) + if (IO::is_ascii(is)) is >> x >> y; else { diff --git a/Periodic_2_triangulation_2/include/CGAL/Periodic_2_triangulation_2.h b/Periodic_2_triangulation_2/include/CGAL/Periodic_2_triangulation_2.h index ef8a5d063f9..542fcb98d3d 100644 --- a/Periodic_2_triangulation_2/include/CGAL/Periodic_2_triangulation_2.h +++ b/Periodic_2_triangulation_2/include/CGAL/Periodic_2_triangulation_2.h @@ -4145,7 +4145,7 @@ Periodic_2_triangulation_2::save(std::ostream& os) const size_type n = number_of_vertices(); - if (is_ascii(os)) + if (IO::is_ascii(os)) os << domain() << std::endl << cover[0] << " " << cover[1] << std::endl << n*cover[0]*cover[1] << std::endl; @@ -4172,7 +4172,7 @@ Periodic_2_triangulation_2::save(std::ostream& os) const { V[it] = i++; os << it->point(); - if (is_ascii(os)) + if (IO::is_ascii(os)) os << std::endl; } } @@ -4185,7 +4185,7 @@ Periodic_2_triangulation_2::save(std::ostream& os) const vit = _virtual_vertices.find(it); if (vit != _virtual_vertices.end()) continue; V[it] = i++; - if (is_ascii(os)) + if (IO::is_ascii(os)) os << it->point() << std::endl << Offset(0, 0) << std::endl; else @@ -4199,7 +4199,7 @@ Periodic_2_triangulation_2::save(std::ostream& os) const vvit = _virtual_vertices.find(vv[j]); CGAL_triangulation_assertion(vvit != _virtual_vertices.end()); V[vv[j]] = i++; - if (is_ascii(os)) + if (IO::is_ascii(os)) os << vv[j]->point() << std::endl << vvit->second.second << std::endl; else os << vv[j]->point() << vvit->second.second; @@ -4213,7 +4213,7 @@ Periodic_2_triangulation_2::save(std::ostream& os) const // asks the tds for the combinatorial information // vertices of the faces size_type m = _tds.number_of_faces(); - if (is_ascii(os)) os << std::endl << m << std::endl; + if (IO::is_ascii(os)) os << std::endl << m << std::endl; else write(os, m); std::cout << "save, #Faces: " << m << std::endl; @@ -4223,13 +4223,13 @@ Periodic_2_triangulation_2::save(std::ostream& os) const F[ib] = inum++; for(int j = 0; j < 3 ; ++j) { - if(is_ascii(os)) os << V[ib->vertex(j)] << " "; + if(IO::is_ascii(os)) os << V[ib->vertex(j)] << " "; else write(os, V[ib->vertex(j)]); } os << *ib ; - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; } - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; std::cout << "save, face check: " << inum << " == " << m << std::endl; CGAL_assertion(m == (size_type)inum); @@ -4241,10 +4241,10 @@ Periodic_2_triangulation_2::save(std::ostream& os) const for(int j = 0; j < 3; ++j) { CGAL_assertion(F.is_defined(it->neighbor(j))); - if(is_ascii(os)) os << F[it->neighbor(j)] << " "; + if(IO::is_ascii(os)) os << F[it->neighbor(j)] << " "; else write(os, F[it->neighbor(j)]); } - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; } // write offsets @@ -4255,7 +4255,7 @@ Periodic_2_triangulation_2::save(std::ostream& os) const Face_handle ch(it); for (int j = 0; j < 3; j++) { - if(is_ascii(os)) + if(IO::is_ascii(os)) { os << ch->offset(j); if ( j == 3 ) @@ -4276,7 +4276,7 @@ Periodic_2_triangulation_2::save(std::ostream& os) const for(Face_iterator it = faces_begin(); it != faces_end(); ++it) { os << *it; // other information - if(is_ascii(os)) + if(IO::is_ascii(os)) os << std::endl; } } @@ -4307,7 +4307,7 @@ Periodic_2_triangulation_2::load(std::istream& is) int cx = 0, cy = 0; size_type n = 0; - if (is_ascii(is)) + if (IO::is_ascii(is)) { is >> domain; is >> cx >> cy >> n; @@ -4372,7 +4372,7 @@ Periodic_2_triangulation_2::load(std::istream& is) // Creation of the faces std::size_t index; size_type m; - if (is_ascii(is)) is >> m; + if (IO::is_ascii(is)) is >> m; else read(is, m); std::vector F(m); std::cout << "load, #Faces: " << m << std::endl; @@ -4382,7 +4382,7 @@ Periodic_2_triangulation_2::load(std::istream& is) F[i] = _tds.create_face() ; for(int j = 0; j < 3 ; ++j) { - if (is_ascii(is)) is >> index; + if (IO::is_ascii(is)) is >> index; else read(is, index); CGAL_assertion(index < V.size()); F[i]->set_vertex(j, V[index]); @@ -4401,7 +4401,7 @@ Periodic_2_triangulation_2::load(std::istream& is) { for(int j = 0; j < 3; ++j) { - if (is_ascii(is)) is >> index; + if (IO::is_ascii(is)) is >> index; else read(is, index); if (index >= F.size()) { std::cout << __FILE__ << ", " << __FUNCTION__ << ", l:" << __LINE__ << " f=" @@ -4419,7 +4419,7 @@ Periodic_2_triangulation_2::load(std::istream& is) int off[3] = {0, 0, 0}; for (std::size_t j = 0 ; j < m; j++) { - if (is_ascii(is)) + if (IO::is_ascii(is)) is >> off[0] >> off[1] >> off[2]; else { diff --git a/Periodic_2_triangulation_2/include/CGAL/draw_periodic_2_triangulation_2.h b/Periodic_2_triangulation_2/include/CGAL/draw_periodic_2_triangulation_2.h index e4859ea033f..fe0a13cf13a 100644 --- a/Periodic_2_triangulation_2/include/CGAL/draw_periodic_2_triangulation_2.h +++ b/Periodic_2_triangulation_2/include/CGAL/draw_periodic_2_triangulation_2.h @@ -26,11 +26,11 @@ namespace CGAL { // Default color functor; user can change it to have its own face color struct DefaultColorFunctorP2T2 { template - static CGAL::Color run(const P2T2 &, + static CGAL::IO::Color run(const P2T2 &, const typename P2T2::Periodic_triangle_iterator /*ti*/) { //CGAL::Random random((unsigned int)(std::size_t)(&*ti)); //return get_random_color(random); - return CGAL::Color(73, 250, 117); + return CGAL::IO::Color(73, 250, 117); } }; @@ -107,7 +107,7 @@ protected: // Construct the triangle in 9-sheeted covering space and add to viewer Triangle t(p2t2.triangle(*ti)); - CGAL::Color c=m_fcolor.run(p2t2, ti); + CGAL::IO::Color c=m_fcolor.run(p2t2, ti); face_begin(c); add_point_in_face(t[0]); add_point_in_face(t[1]); @@ -116,9 +116,9 @@ protected: // Display the edges of the faces as segments with a // light gray color for better visualization - add_segment(t[0], t[1], CGAL::Color(207, 213, 211)); - add_segment(t[1], t[2], CGAL::Color(207, 213, 211)); - add_segment(t[2], t[0], CGAL::Color(207, 213, 211)); + add_segment(t[0], t[1], CGAL::IO::Color(207, 213, 211)); + add_segment(t[1], t[2], CGAL::IO::Color(207, 213, 211)); + add_segment(t[2], t[0], CGAL::IO::Color(207, 213, 211)); } void compute_domain() @@ -135,10 +135,10 @@ protected: Kernel::Point_2 p3(orig_domain.xmax(), orig_domain.ymin()); Kernel::Point_2 p4((orig_domain.max)()); - add_segment(p1 + shift, p2 + shift, CGAL::Color(96, 104, 252)); - add_segment(p1 + shift, p3 + shift, CGAL::Color(96, 104, 252)); - add_segment(p2 + shift, p4 + shift, CGAL::Color(96, 104, 252)); - add_segment(p3 + shift, p4 + shift, CGAL::Color(96, 104, 252)); + add_segment(p1 + shift, p2 + shift, CGAL::IO::Color(96, 104, 252)); + add_segment(p1 + shift, p3 + shift, CGAL::IO::Color(96, 104, 252)); + add_segment(p2 + shift, p4 + shift, CGAL::IO::Color(96, 104, 252)); + add_segment(p3 + shift, p4 + shift, CGAL::IO::Color(96, 104, 252)); } } } diff --git a/Periodic_2_triangulation_2/test/Periodic_2_triangulation_2/include/interface_test.h b/Periodic_2_triangulation_2/test/Periodic_2_triangulation_2/include/interface_test.h index 4975d0456b6..30cae39bae1 100644 --- a/Periodic_2_triangulation_2/test/Periodic_2_triangulation_2/include/interface_test.h +++ b/Periodic_2_triangulation_2/test/Periodic_2_triangulation_2/include/interface_test.h @@ -496,7 +496,7 @@ void test_io(T &pt1, bool ex) T pt1r; ss1 >> pt1r; - assert(CGAL::is_ascii(ss1)); + assert(CGAL::IO::is_ascii(ss1)); if (!ex) { assert(pt1 == pt1r); @@ -508,11 +508,11 @@ void test_io(T &pt1, bool ex) if (!ex) { std::stringstream ss1b; - CGAL::set_binary_mode(ss1b); + CGAL::IO::set_binary_mode(ss1b); ss1b << pt1; ss1b >> pt1r; - assert(CGAL::is_binary(ss1b)); + assert(CGAL::IO::is_binary(ss1b)); assert(pt1 == pt1r); } @@ -521,10 +521,10 @@ void test_io(T &pt1, bool ex) pt1r.clear(); std::stringstream ss1p; - CGAL::set_pretty_mode(ss1p); + CGAL::IO::set_pretty_mode(ss1p); ss1p << pt1; - assert(CGAL::is_pretty(ss1p)); + assert(CGAL::IO::is_pretty(ss1p)); } template diff --git a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt index 8add9262b9b..4de34cd9b43 100644 --- a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt +++ b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/PackageDescription.txt @@ -101,6 +101,6 @@ Many classes and functions used by this package are defined within the package and \ref PkgMesh3Parameters. \cgalCRPSection{Input/Output Functions} -- \link PkgPeriodic3Mesh3IOFunctions `CGAL::output_periodic_mesh_to_medit()` \endlink +- \link PkgPeriodic3Mesh3IOFunctions `CGAL::IO::output_periodic_mesh_to_medit()` \endlink */ diff --git a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt index 1996212d4c9..5d1380e5950 100644 --- a/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt +++ b/Periodic_3_mesh_3/doc/Periodic_3_mesh_3/Periodic_3_mesh_3.txt @@ -416,7 +416,7 @@ This section presents various use cases of the periodic mesh generator. \subsection Periodic_3_mesh_3SubMultipleCopies Visualizing Multiple Copies of a Periodic Mesh Generated meshes can be output to the `.mesh` file format, which can be visualized with the demo -of the package \ref PkgPolyhedron. The function \link PkgPeriodic3Mesh3IOFunctions `CGAL::output_periodic_mesh_to_medit()` \endlink +of the package \ref PkgPolyhedron. The function \link PkgPeriodic3Mesh3IOFunctions `CGAL::IO::output_periodic_mesh_to_medit()` \endlink takes a stream, a mesh complex, and - optionally - the number of periodic copies that should be drawn, making it easier to observe the periodicity of the result. \cgalFigureRef{Periodic_3_mesh_3Periodic_copies} illustrates the different output diff --git a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_multi_domain.cpp b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_multi_domain.cpp index 40ca5720f0c..0b57091170c 100644 --- a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_multi_domain.cpp +++ b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_multi_domain.cpp @@ -89,9 +89,9 @@ int main(int argc, char** argv) // Output std::ofstream medit_file("output_multi_domain.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output, - false /*do not associate different colors to each copy*/, - false /*do not rebind*/, true /*show patches*/); + CGAL::IO::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output, + false /*do not associate different colors to each copy*/, + false /*do not rebind*/, true /*show patches*/); std::cout << "EXIT SUCCESS" << std::endl; return 0; diff --git a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape.cpp b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape.cpp index 2e74bc44c0b..9c39c8758e3 100644 --- a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape.cpp +++ b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape.cpp @@ -67,7 +67,7 @@ int main(int argc, char** argv) C3t3 c3t3 = CGAL::make_periodic_3_mesh_3(domain, criteria); std::ofstream medit_file("output_implicit_shape.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output); + CGAL::IO::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output); std::cout << "EXIT SUCCESS" << std::endl; return 0; diff --git a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_features.cpp b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_features.cpp index 6a0ceed004a..680b0153c95 100644 --- a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_features.cpp +++ b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_features.cpp @@ -111,13 +111,13 @@ int main(int argc, char** argv) C3t3 c3t3 = CGAL::make_periodic_3_mesh_3(domain, criteria, no_features(), no_exude(), no_perturb()); std::ofstream medit_file("output_implicit_shape_without_protection.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output); + CGAL::IO::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output); // Mesh generation WITH feature preservation (and no optimizers) C3t3 c3t3_bis = CGAL::make_periodic_3_mesh_3(domain, criteria, features(), no_exude(), no_perturb()); std::ofstream medit_file_bis("output_implicit_shape_with_protection.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis, number_of_copies_in_output); + CGAL::IO::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis, number_of_copies_in_output); std::cout << "EXIT SUCCESS" << std::endl; return 0; diff --git a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_optimizers.cpp b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_optimizers.cpp index 1bf84816848..3d2c42a4c4e 100644 --- a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_optimizers.cpp +++ b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_optimizers.cpp @@ -76,7 +76,7 @@ int main(int argc, char** argv) exude(sliver_bound=10, time_limit=0)); std::ofstream medit_file("output_implicit_shape_optimized.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file, c3t3); + CGAL::IO::output_periodic_mesh_to_medit(medit_file, c3t3); // Below, the mesh generation and the optimizations are done in several calls C3t3 c3t3_bis = CGAL::make_periodic_3_mesh_3(domain, criteria, @@ -84,7 +84,7 @@ int main(int argc, char** argv) no_perturb(), no_exude()); std::ofstream medit_file_bis("output_implicit_shape_non-optimized.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); + CGAL::IO::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); // Now, call each optimizer with its global function CGAL::odt_optimize_periodic_3_mesh_3(c3t3_bis, domain, convergence=0.03, freeze_bound=0.02, time_limit=30); @@ -93,7 +93,7 @@ int main(int argc, char** argv) CGAL::exude_periodic_3_mesh_3(c3t3_bis, sliver_bound=10, time_limit=0); std::ofstream medit_file_ter("output_implicit_shape_two_steps.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file_ter, c3t3_bis, number_of_copies_in_output); + CGAL::IO::output_periodic_mesh_to_medit(medit_file_ter, c3t3_bis, number_of_copies_in_output); std::cout << "EXIT SUCCESS" << std::endl; return 0; diff --git a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_subdomains.cpp b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_subdomains.cpp index 4d6c01aff53..8de56fad9a7 100644 --- a/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_subdomains.cpp +++ b/Periodic_3_mesh_3/examples/Periodic_3_mesh_3/mesh_implicit_shape_with_subdomains.cpp @@ -78,7 +78,7 @@ int main(int argc, char** argv) // Output std::ofstream medit_file("output_implicit_with_subdomains.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output); + CGAL::IO::output_periodic_mesh_to_medit(medit_file, c3t3, number_of_copies_in_output); std::cout << "EXIT SUCCESS" << std::endl; return 0; diff --git a/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/IO/File_medit.h b/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/IO/File_medit.h index 63c2b6bb934..dda69561ff2 100644 --- a/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/IO/File_medit.h +++ b/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/IO/File_medit.h @@ -330,6 +330,8 @@ void output_to_medit(std::ostream& os, } // namespace Periodic_3_mesh_3 +namespace IO { + /** * \brief outputs a periodic mesh to the .mesh file format, which can be visualized * using medit. By default, 7 copies are used, for a total of 8 instances of the domains. @@ -367,6 +369,12 @@ void output_periodic_mesh_to_medit(std::ostream& os, } } +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::output_periodic_mesh_to_medit; +#endif + } // namespace CGAL #endif // CGAL_PERIODIC_3_MESH_3_IO_FILE_MEDIT_H diff --git a/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h b/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h index 8b0f3b1fb6c..842abf61081 100644 --- a/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h +++ b/Periodic_3_mesh_3/include/CGAL/Periodic_3_mesh_3/Protect_edges_sizing_field.h @@ -756,7 +756,7 @@ get_positions_with_vertex_at_extremity(const Bare_point& known_point, { #if CGAL_MESH_3_PROTECTION_DEBUG & 2 std::cerr << "get_positions_with_vertex_at_extremity()" << std::endl - << "known_point: " << known_point << " on curve " << CGAL::oformat(curve_index) + << "known_point: " << known_point << " on curve " << CGAL::IO::oformat(curve_index) << " orientation: " << orientation << " inverted order ? " << std::boolalpha << inverted_return_order << std::endl; #endif @@ -1391,7 +1391,7 @@ insert_corners() Index p_index = domain_.index_from_corner_index(corner_index); #if CGAL_MESH_3_PROTECTION_DEBUG & 1 - std::cerr << "** treat corner #" << CGAL::oformat(p_index) << std::endl; + std::cerr << "** treat corner #" << CGAL::IO::oformat(p_index) << std::endl; #endif // Get weight (the ball radius is given by the 'query_size' function) @@ -1476,7 +1476,7 @@ insert_point(const Bare_point& p, const Weight& w, int dim, const Index& index, #if CGAL_MESH_3_PROTECTION_DEBUG & 1 std::cerr << "insert_point()" << std::endl; std::cerr << "pos: " << p << " weight: " << w - << " dim: " << dim << " index: " << CGAL::oformat(index) << std::endl; + << " dim: " << dim << " index: " << CGAL::IO::oformat(index) << std::endl; #endif using CGAL::Mesh_3::internal::weight_modifier; @@ -1540,7 +1540,7 @@ insert_point(const Bare_point& p, const Weight& w, int dim, const Index& index, std::cerr << " ERROR dim=" << dim << " index="; } - std::cerr << CGAL::oformat(index) << std::endl; + std::cerr << CGAL::IO::oformat(index) << std::endl; if(v == Vertex_handle()) std::cerr << " HIDDEN!\n"; std::cerr << "The weight was " << w << std::endl; @@ -1569,7 +1569,7 @@ smart_insert_point(const Bare_point& p, Weight w, int dim, const Index& index, std::cerr << "smart_insert_point((" << p << "), w=" << w << ", dim=" << dim - << ", index=" << CGAL::oformat(index) << ")\n"; + << ", index=" << CGAL::IO::oformat(index) << ")\n"; #endif const Tr& tr = c3t3_.triangulation(); @@ -2267,7 +2267,7 @@ refine_balls() std::ostringstream oss; oss << "dump_protecting_balls_" << refine_balls_iteration_nb << ".cgal"; std::ofstream outfile(oss.str().c_str(), std::ios_base::binary | std::ios_base::out); - CGAL::Mesh_3::save_binary_file(outfile, c3t3_, true); + CGAL::IO::save_binary_file(outfile, c3t3_, true); outfile.close(); #endif //CGAL_MESH_3_DUMP_FEATURES_PROTECTION_ITERATIONS @@ -2452,7 +2452,7 @@ change_ball_size(Vertex_handle& v, const FT squared_size, const bool special_bal #if CGAL_MESH_3_PROTECTION_DEBUG & 1 std::cerr << "change_ball_size(v=" << disp_vert(v) << " dim=" << c3t3_.in_dimension(v) - << " index=" << CGAL::oformat(c3t3_.index(v)) + << " index=" << CGAL::IO::oformat(c3t3_.index(v)) << " ,\n" << " (squared) size=" << w << ", special_ball=" << std::boolalpha << special_ball << std::endl; @@ -2622,7 +2622,7 @@ check_and_fix_vertex_along_edge(const Vertex_handle& v, ErasedVeOutIt out) std::cerr << "check_and_fix_vertex_along_edge(" << disp_vert(v) << " dim=" << get_dimension(v) - << " index=" << CGAL::oformat(c3t3_.index(v)) + << " index=" << CGAL::IO::oformat(c3t3_.index(v)) << " special=" << std::boolalpha << is_special(v) << ")\n"; #endif @@ -2930,7 +2930,7 @@ repopulate(InputIterator begin, InputIterator last, std::cerr << "repopulate(begin=" << disp_vert(*begin) << "\n" << " last=" << disp_vert(*last) << "\n" << " distance(begin, last)=" << std::distance(begin, last) << ",\n" - << " curve_index=" << CGAL::oformat(curve_index) << ",\n" + << " curve_index=" << CGAL::IO::oformat(curve_index) << ",\n" << " orientation=" << orientation << ")\n"; #endif CGAL_assertion(std::distance(begin,last) >= 0); @@ -2972,7 +2972,7 @@ repopulate(InputIterator begin, InputIterator last, default: std::cerr << " ERROR dim=" << get_dimension(*current) << " curve_index="; } - std::cerr << CGAL::oformat(c3t3_.index(*current)) << std::endl; + std::cerr << CGAL::IO::oformat(c3t3_.index(*current)) << std::endl; #endif // CGAL_MESH_3_PROTECTION_DEBUG *out++ = *current; remove_from_correspondence_map(*current, curve_index); @@ -2997,7 +2997,7 @@ analyze_and_repopulate(InputIterator begin, InputIterator last, std::cerr << "analyze_and_repopulate(begin=" << disp_vert(*begin) << "\n" << " last=" << disp_vert(*last) << "\n" << " distance(begin, last)=" << std::distance(begin, last) << ",\n" - << " curve_index=" << CGAL::oformat(curve_index) << ",\n" + << " curve_index=" << CGAL::IO::oformat(curve_index) << ",\n" << " orientation=" << orientation << ")\n"; #endif CGAL_assertion(std::distance(begin,last) >= 0); diff --git a/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_bunch.cpp b/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_bunch.cpp index 2609fdfc15a..b39838e6dc7 100644 --- a/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_bunch.cpp +++ b/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_bunch.cpp @@ -244,7 +244,7 @@ int main() // Output std::ofstream medit_file(file_name.c_str()); - CGAL::output_periodic_mesh_to_medit(medit_file, c3t3); + CGAL::IO::output_periodic_mesh_to_medit(medit_file, c3t3); } std::cout << "EXIT SUCCESS" << std::endl; diff --git a/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_with_features.cpp b/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_with_features.cpp index 4025ca277bb..2a297d3f89b 100644 --- a/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_with_features.cpp +++ b/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_implicit_shapes_with_features.cpp @@ -98,7 +98,7 @@ void test_protected_sphere() // Output std::ofstream medit_file_bis("protected_sphere.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); + CGAL::IO::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); } //////////////////////////////////////////////////////////////////////////////// @@ -163,7 +163,7 @@ void test_protected_squary_cylinder() // Output std::ofstream medit_file_bis("squary_cylinder.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); + CGAL::IO::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); } //////////////////////////////////////////////////////////////////////////////// @@ -276,7 +276,7 @@ void test_protected_squary_cylinder_2() // Output std::ofstream medit_file_bis("squary_cylinder_2.mesh"); - CGAL::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); + CGAL::IO::output_periodic_mesh_to_medit(medit_file_bis, c3t3_bis); } //////////////////////////////////////////////////////////////////////////////// diff --git a/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_triply_periodic_minimal_surfaces.cpp b/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_triply_periodic_minimal_surfaces.cpp index 812fde428ba..cab19a02eda 100644 --- a/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_triply_periodic_minimal_surfaces.cpp +++ b/Periodic_3_mesh_3/test/Periodic_3_mesh_3/test_triply_periodic_minimal_surfaces.cpp @@ -305,7 +305,7 @@ int main(int, char**) oss_2 << iter->first << "__" << it->first << "__" << *i << ".mesh"; std::string output_filename = oss_2.str(); std::ofstream medit_file( output_filename.data() ); - CGAL::output_periodic_mesh_to_medit(medit_file, c3t3, *i); + CGAL::IO::output_periodic_mesh_to_medit(medit_file, c3t3, *i); medit_file.close(); std::cout << ", " << *i << "-copy Saved" << std::flush; diff --git a/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/README b/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/README index 3396740a56e..82227c8a755 100644 --- a/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/README +++ b/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/README @@ -13,7 +13,7 @@ class for the triangulation data structure. If the user does not need to add a type in a vertex that depends on the TriangulationDataStructure_3 (e.g. a Vertex_handle or Cell_handle), then he can use the Triangulation_vertex_base_with_info_3 class to add his own information -easily in the vertices. This example shows how to add a CGAL::Color this way. +easily in the vertices. This example shows how to add a CGAL::IO::Color this way. ------------------------------------------------------------------------------- diff --git a/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/colored_vertices.cpp b/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/colored_vertices.cpp index 989b702679a..73afbf028eb 100644 --- a/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/colored_vertices.cpp +++ b/Periodic_3_triangulation_3/examples/Periodic_3_triangulation_3/colored_vertices.cpp @@ -15,7 +15,7 @@ typedef CGAL::Triangulation_vertex_base_3 Vb; typedef CGAL::Periodic_3_triangulation_ds_cell_base_3<> CbDS; typedef CGAL::Triangulation_cell_base_3 Cb; -typedef CGAL::Triangulation_vertex_base_with_info_3 VbInfo; +typedef CGAL::Triangulation_vertex_base_with_info_3 VbInfo; typedef CGAL::Triangulation_data_structure_3 TDS; typedef CGAL::Periodic_3_Delaunay_triangulation_3 P3DT3; @@ -36,7 +36,7 @@ int main(int, char**) P3DT3::Vertex_iterator vit; for (vit = T.vertices_begin(); vit != T.vertices_end(); ++vit) { if (T.degree(vit) == 16) { - vit->info() = CGAL::red(); + vit->info() = CGAL::IO::red(); } } diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_offset_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_offset_3.h index ed1560c74c3..ca7124d8688 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_offset_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_offset_3.h @@ -108,7 +108,7 @@ inline Point_3 operator+(const Point_3 &p, const Periodic_3_offset_3 &off) inline std::ostream &operator<<(std::ostream &os, const Periodic_3_offset_3 &off) { - if (is_ascii(os)) + if (IO::is_ascii(os)) os << off.x() << " " << off.y() << " " << off.z(); else { write(os,off.x()); @@ -121,7 +121,7 @@ inline std::ostream inline std::istream &operator>>(std::istream &is, Periodic_3_offset_3 &off) { int x=0,y=0,z=0; - if (is_ascii(is)) + if (IO::is_ascii(is)) is >> x >> y >> z; else { read(is,x); diff --git a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h index 380e9b70f86..01661657268 100644 --- a/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h +++ b/Periodic_3_triangulation_3/include/CGAL/Periodic_3_triangulation_3.h @@ -22,7 +22,6 @@ #include #include -#include #include #include #include @@ -4023,7 +4022,7 @@ operator>> (std::istream& is, Periodic_3_triangulation_3& tr) int cx=0, cy=0, cz=0; size_type n=0; - if(is_ascii(is)) { + if(IO::is_ascii(is)) { is >> domain; is >> cx >> cy >> cz; is >> n; @@ -4079,7 +4078,7 @@ operator>> (std::istream& is, Periodic_3_triangulation_3& tr) // read offsets int off[4] = {0,0,0,0}; for(std::size_t j=0; j < m; j++) { - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> off[0] >> off[1] >> off[2] >> off[3]; else { read(is,off[0]); @@ -4130,7 +4129,7 @@ operator<< (std::ostream& os,const Periodic_3_triangulation_3& tr) Covering_sheets cover = tr.number_of_sheets(); size_type n = tr.number_of_vertices(); - if(is_ascii(os)) + if(IO::is_ascii(os)) os << domain << std::endl << cover[0] << " " << cover[1] << " " << cover[2] << std::endl << n*cover[0]*cover[1]*cover[2] << std::endl; @@ -4152,7 +4151,7 @@ operator<< (std::ostream& os,const Periodic_3_triangulation_3& tr) for(Vertex_iterator it=tr.vertices_begin(); it!=tr.vertices_end(); ++it) { V[it] = i++; os << it->point(); - if(is_ascii(os)) + if(IO::is_ascii(os)) os << std::endl; } } else { @@ -4164,7 +4163,7 @@ operator<< (std::ostream& os,const Periodic_3_triangulation_3& tr) continue; V[it]=i++; - if(is_ascii(os)) + if(IO::is_ascii(os)) os << it->point() << std::endl << Offset(0,0,0) << std::endl; else os << it->point() << Offset(0,0,0); @@ -4176,7 +4175,7 @@ operator<< (std::ostream& os,const Periodic_3_triangulation_3& tr) vvit = tr.virtual_vertices.find(vv[j]); CGAL_triangulation_assertion(vvit != tr.virtual_vertices.end()); V[vv[j]] = i++; - if(is_ascii(os)) + if(IO::is_ascii(os)) os << vv[j]->point() << std::endl << vvit->second.second << std::endl; else os << vv[j]->point() << vvit->second.second; @@ -4196,7 +4195,7 @@ operator<< (std::ostream& os,const Periodic_3_triangulation_3& tr) //Cell_handle ch = std::find(tr.cells_begin(), tr.cells_end(), i); Cell_handle ch(it); for(int j=0; j<4; j++) { - if(is_ascii(os)) { + if(IO::is_ascii(os)) { os << ch->offset(j); if( j==3 ) os << std::endl; @@ -4214,7 +4213,7 @@ operator<< (std::ostream& os,const Periodic_3_triangulation_3& tr) if(tr.number_of_vertices() != 0) { for(Cell_iterator it=tr.cells_begin(); it != tr.cells_end(); ++it) { os << *it; // other information - if(is_ascii(os)) + if(IO::is_ascii(os)) os << std::endl; } } diff --git a/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_alpha_shape_3.h b/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_alpha_shape_3.h index 06b33577161..d018131f7c7 100644 --- a/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_alpha_shape_3.h +++ b/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_alpha_shape_3.h @@ -19,7 +19,7 @@ template bool file_input(std::ifstream& is, std::list& L, int nb=0) { - CGAL::set_ascii_mode(is); + CGAL::IO::set_ascii_mode(is); int n; is >> n; if(nb != 0 && nb <= n) n=nb; diff --git a/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_triangulation_3.h b/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_triangulation_3.h index 7534db8b4bc..ddac2399a7c 100644 --- a/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_triangulation_3.h +++ b/Periodic_3_triangulation_3/test/Periodic_3_triangulation_3/include/CGAL/_test_cls_periodic_3_triangulation_3.h @@ -647,8 +647,8 @@ _test_cls_periodic_3_triangulation_3(const PeriodicTriangulation &, ss1 >> PT1r; ss3 >> PT3r; - assert(CGAL::is_ascii(ss1)); - assert(CGAL::is_ascii(ss3)); + assert(CGAL::IO::is_ascii(ss1)); + assert(CGAL::IO::is_ascii(ss3)); if (!ex) assert(PT1 == PT1r); if (!ex) assert(PT3 == PT3r); @@ -659,15 +659,15 @@ _test_cls_periodic_3_triangulation_3(const PeriodicTriangulation &, if (!ex) { std::stringstream ss1b; std::stringstream ss3b; - CGAL::set_binary_mode(ss1b); - CGAL::set_binary_mode(ss3b); + CGAL::IO::set_binary_mode(ss1b); + CGAL::IO::set_binary_mode(ss3b); ss1b << PT1; ss3b << PT3; ss1b >> PT1r; ss3b >> PT3r; - assert(CGAL::is_binary(ss1b)); - assert(CGAL::is_binary(ss3b)); + assert(CGAL::IO::is_binary(ss1b)); + assert(CGAL::IO::is_binary(ss3b)); assert(PT1 == PT1r); assert(PT3 == PT3r); @@ -679,12 +679,12 @@ _test_cls_periodic_3_triangulation_3(const PeriodicTriangulation &, PT3r.clear(); std::stringstream ss1p; std::stringstream ss3p; - CGAL::set_pretty_mode(ss1p); - CGAL::set_pretty_mode(ss3p); + CGAL::IO::set_pretty_mode(ss1p); + CGAL::IO::set_pretty_mode(ss3p); ss1p << PT1; ss3p << PT3; - assert(CGAL::is_pretty(ss1p)); - assert(CGAL::is_pretty(ss3p)); + assert(CGAL::IO::is_pretty(ss1p)); + assert(CGAL::IO::is_pretty(ss3p)); } } diff --git a/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Periodic_4_hyperbolic_Delaunay_triangulation_2.h b/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Periodic_4_hyperbolic_Delaunay_triangulation_2.h index 0c74a7a8be4..3b17771004c 100644 --- a/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Periodic_4_hyperbolic_Delaunay_triangulation_2.h +++ b/Periodic_4_hyperbolic_triangulation_2/include/CGAL/Periodic_4_hyperbolic_Delaunay_triangulation_2.h @@ -24,7 +24,6 @@ #include #include -#include #include #include diff --git a/Point_set_3/doc/Point_set_3/PackageDescription.txt b/Point_set_3/doc/Point_set_3/PackageDescription.txt index e8a7fec57d9..966775eda7c 100644 --- a/Point_set_3/doc/Point_set_3/PackageDescription.txt +++ b/Point_set_3/doc/Point_set_3/PackageDescription.txt @@ -82,8 +82,8 @@ These overloads, available after including `CGAL/Point_set_3/IO.h`, allow the user to call point set processing algorithms without having to handle manually property maps and iterators. -- `CGAL::read_point_set()` -- `CGAL::write_point_set()` +- `CGAL::IO::read_point_set()` +- `CGAL::IO::write_point_set()` - \link PkgPointSet3IOLAS I/O for `LAS` files \endlink - \link PkgPointSet3IOOFF I/O for `OFF` files \endlink - \link PkgPointSet3IOPLY I/O for `PLY` files \endlink diff --git a/Point_set_3/examples/Point_set_3/draw_point_set_3.cpp b/Point_set_3/examples/Point_set_3/draw_point_set_3.cpp index 1adcd7245f3..9a0d04904f9 100644 --- a/Point_set_3/examples/Point_set_3/draw_point_set_3.cpp +++ b/Point_set_3/examples/Point_set_3/draw_point_set_3.cpp @@ -16,7 +16,7 @@ int main (int argc, char** argv) const char* filename = argc > 1 ? argv[1] : "data/oni.xyz"; Point_set point_set; - if(!CGAL::read_point_set(filename, point_set)) + if(!CGAL::IO::read_point_set(filename, point_set)) { std::cerr << "Can't read input file " << filename << std::endl; return EXIT_FAILURE; diff --git a/Point_set_3/examples/Point_set_3/point_set_advanced.cpp b/Point_set_3/examples/Point_set_3/point_set_advanced.cpp index 795cc43f9f8..84dec4e5e8f 100644 --- a/Point_set_3/examples/Point_set_3/point_set_advanced.cpp +++ b/Point_set_3/examples/Point_set_3/point_set_advanced.cpp @@ -21,7 +21,7 @@ int main (int argc, char** argv) point_set.add_normal_map(); // Reading input in OFF format - if(!CGAL::read_points(filename, point_set.index_back_inserter(), + if(!CGAL::IO::read_points(filename, point_set.index_back_inserter(), CGAL::parameters::point_map(point_set.point_push_map()) .normal_map(point_set.normal_push_map()))) { diff --git a/Point_set_3/examples/Point_set_3/point_set_read_ply.cpp b/Point_set_3/examples/Point_set_3/point_set_read_ply.cpp index 5a58de114cb..e59c33b4e93 100644 --- a/Point_set_3/examples/Point_set_3/point_set_read_ply.cpp +++ b/Point_set_3/examples/Point_set_3/point_set_read_ply.cpp @@ -19,7 +19,7 @@ int main (int argc, char** argv) Point_set point_set; - if(!CGAL::read_PLY(f, point_set)) // same as `f >> point_set` + if(!CGAL::IO::read_PLY(f, point_set)) // same as `f >> point_set` { std::cerr << "Can't read input file " << std::endl; return EXIT_FAILURE; @@ -45,11 +45,11 @@ int main (int argc, char** argv) if(argc > 2 && strcmp (argv[2], "-b") == 0) // Optional binary output { - CGAL::write_PLY("out.ply", point_set, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_PLY("out.ply", point_set, CGAL::parameters::stream_precision(17)); } else // ASCII output { - CGAL::write_PLY("out.ply", point_set, CGAL::parameters::stream_precision(17) + CGAL::IO::write_PLY("out.ply", point_set, CGAL::parameters::stream_precision(17) .use_binary_mode(false)); } diff --git a/Point_set_3/examples/Point_set_3/point_set_read_xyz.cpp b/Point_set_3/examples/Point_set_3/point_set_read_xyz.cpp index c9ce2d6e757..f5337e3f7fa 100644 --- a/Point_set_3/examples/Point_set_3/point_set_read_xyz.cpp +++ b/Point_set_3/examples/Point_set_3/point_set_read_xyz.cpp @@ -18,7 +18,7 @@ int main (int argc, char** argv) // Reading input Point_set point_set; - if(!CGAL::read_XYZ(fname, point_set)) + if(!CGAL::IO::read_XYZ(fname, point_set)) { std::cerr << "Can't read input file " << std::endl; return EXIT_FAILURE; @@ -36,7 +36,7 @@ int main (int argc, char** argv) } // Writing result in OFF format - if(!CGAL::write_OFF("normalized_normals.off", point_set, CGAL::parameters::stream_precision(17))) + if(!CGAL::IO::write_OFF("normalized_normals.off", point_set, CGAL::parameters::stream_precision(17))) return EXIT_FAILURE; return EXIT_SUCCESS; diff --git a/Point_set_3/include/CGAL/Point_set_3/IO.h b/Point_set_3/include/CGAL/Point_set_3/IO.h index 994c8b0750d..b0da6a026d8 100644 --- a/Point_set_3/include/CGAL/Point_set_3/IO.h +++ b/Point_set_3/include/CGAL/Point_set_3/IO.h @@ -73,19 +73,20 @@ std::istream& operator>>(std::istream& is, is.seekg(0); if(line.find("OFF") == 0 || line.find("NOFF") == 0) - CGAL::read_OFF(is, ps); + CGAL::IO::read_OFF(is, ps); else if(line.find("ply") == 0) - CGAL::read_PLY(is, ps); + CGAL::IO::read_PLY(is, ps); #ifdef CGAL_LINKED_WITH_LASLIB else if(line.find("LASF") == 0) - CGAL::read_LAS(is, ps); + CGAL::IO::read_LAS(is, ps); #endif // LAS else - CGAL::read_XYZ(is, ps); + CGAL::IO::read_XYZ(is, ps); return is; } +namespace IO { /*! \ingroup PkgPointSet3IO @@ -127,7 +128,7 @@ bool read_point_set(const std::string& fname, CGAL::Point_set_3& ps, const CGAL_BGL_NP_CLASS& np) { - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == "xyz" || ext == "pwn") return read_XYZ(fname, ps); @@ -151,6 +152,8 @@ bool read_point_set(const std::string& fname, CGAL::Point_set_3& return read_point_set(fname, ps, parameters::all_default()); } +} // namespace IO + /// \endcond //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -175,10 +178,12 @@ template std::ostream& operator<<(std::ostream& os, const CGAL::Point_set_3& ps) { - write_PLY(os, ps); + IO::write_PLY(os, ps); return os; } +namespace IO { + /*! \ingroup PkgPointSet3IO @@ -223,7 +228,7 @@ bool write_point_set(const std::string& fname, CGAL::Point_set_3& ps, const CGAL_BGL_NP_CLASS& np) { - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == "xyz") return write_XYZ(fname, ps, np); @@ -249,6 +254,8 @@ bool write_point_set(const std::string& fname, CGAL::Point_set_3& /// \endcond +} // namespace IO + } // namespace CGAL #endif // CGAL_POINT_SET_3_IO diff --git a/Point_set_3/include/CGAL/Point_set_3/IO/LAS.h b/Point_set_3/include/CGAL/Point_set_3/IO/LAS.h index 14916e4e89c..b68091e5fbb 100644 --- a/Point_set_3/include/CGAL/Point_set_3/IO/LAS.h +++ b/Point_set_3/include/CGAL/Point_set_3/IO/LAS.h @@ -32,6 +32,8 @@ class Point_set_3; //////////////////////////////////////////////////////////////////////////////////////////////////// // Read +namespace IO { + namespace internal { template @@ -158,23 +160,25 @@ template bool read_LAS(const std::string& fname, CGAL::Point_set_3& point_set) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); return read_LAS(is, point_set); } +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::read_LAS()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::read_LAS()` \endlink should be used instead. */ template CGAL_DEPRECATED bool read_las_point_set(std::istream& is, ///< input stream. CGAL::Point_set_3& point_set) ///< point set { - return read_LAS(is, point_set); + return IO::read_LAS(is, point_set); } #endif // CGAL_NO_DEPRECATED_CODE @@ -183,6 +187,8 @@ CGAL_DEPRECATED bool read_las_point_set(std::istream& is, ///< input stream. //////////////////////////////////////////////////////////////////////////////////////////////////// // Write +namespace IO { + /*! \ingroup PkgPointSet3IOLAS @@ -390,23 +396,25 @@ bool write_LAS(const std::string& fname, CGAL::Point_set_3& point_set) { std::ofstream os(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_LAS(os, point_set); } +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::write_LAS()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::write_LAS()` \endlink should be used instead. */ template CGAL_DEPRECATED bool write_las_point_set(std::ostream& os, ///< output stream. CGAL::Point_set_3& point_set) ///< point set { - return write_LAS(os, point_set); + return IO::write_LAS(os, point_set); } #endif // CGAL_NO_DEPRECATED_CODE diff --git a/Point_set_3/include/CGAL/Point_set_3/IO/OFF.h b/Point_set_3/include/CGAL/Point_set_3/IO/OFF.h index b8882c97fdc..44f0c2fb584 100644 --- a/Point_set_3/include/CGAL/Point_set_3/IO/OFF.h +++ b/Point_set_3/include/CGAL/Point_set_3/IO/OFF.h @@ -37,6 +37,8 @@ class Point_set_3; //////////////////////////////////////////////////////////////////////////////////////////////////// // Read +namespace IO { + /*! \ingroup PkgPointSet3IOOFF @@ -55,9 +57,9 @@ bool read_OFF(std::istream& is, { point_set.add_normal_map(); - bool out = CGAL::read_OFF(is, point_set.index_back_inserter(), - CGAL::parameters::point_map(point_set.point_push_map()) - .normal_map(point_set.normal_push_map())); + bool out = CGAL::IO::read_OFF(is, point_set.index_back_inserter(), + CGAL::parameters::point_map(point_set.point_push_map()) + .normal_map(point_set.normal_push_map())); bool has_normals = false; for(typename CGAL::Point_set_3::const_iterator it=point_set.begin(); it!=point_set.end(); ++it) @@ -94,19 +96,21 @@ bool read_OFF(const std::string& fname, CGAL::Point_set_3& point_ return read_OFF(is, point_set); } +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::read_OFF()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::read_OFF()` \endlink should be used instead. */ template CGAL_DEPRECATED bool read_off_point_set(std::istream& is, ///< input stream. CGAL::Point_set_3& point_set) ///< point set. { - return read_OFF(is, point_set); + return IO::read_OFF(is, point_set); } #endif // CGAL_NO_DEPRECATED_CODE @@ -115,6 +119,8 @@ CGAL_DEPRECATED bool read_off_point_set(std::istream& is, ///< input stream. //////////////////////////////////////////////////////////////////////////////////////////////////// // Write +namespace IO { + /*! \ingroup PkgPointSet3IOOFF @@ -207,19 +213,21 @@ bool write_OFF(const std::string& fname, const CGAL::Point_set_3& /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::write_OFF()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::write_OFF()` \endlink should be used instead. */ template CGAL_DEPRECATED bool write_off_point_set(std::ostream& os, ///< output stream. const CGAL::Point_set_3& point_set) ///< point set { - return write_OFF(os, point_set); + return IO::write_OFF(os, point_set); } #endif // CGAL_NO_DEPRECATED_CODE diff --git a/Point_set_3/include/CGAL/Point_set_3/IO/PLY.h b/Point_set_3/include/CGAL/Point_set_3/IO/PLY.h index 4646ffbd974..fafccda8376 100644 --- a/Point_set_3/include/CGAL/Point_set_3/IO/PLY.h +++ b/Point_set_3/include/CGAL/Point_set_3/IO/PLY.h @@ -97,7 +97,7 @@ public: for(std::size_t j=0; jname(); if(name == "x" || @@ -213,8 +213,6 @@ public: }; } // namespace internal -} // namespace IO - //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -255,8 +253,8 @@ bool read_PLY(std::istream& is, return false; } - IO::internal::PLY_reader reader(true); - IO::internal::Point_set_3_filler filler(point_set); + internal::PLY_reader reader(true); + internal::Point_set_3_filler filler(point_set); if(!(reader.init(is))) { @@ -268,7 +266,7 @@ bool read_PLY(std::istream& is, for(std::size_t i=0; iget(is); if(is.fail()) return false; @@ -351,13 +349,13 @@ bool read_PLY(const std::string& fname, if(binary) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); return read_PLY(is, point_set, comments); } else { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); return read_PLY(is, point_set, comments); } } @@ -386,13 +384,15 @@ bool read_PLY(const std::string& fname, CGAL::Point_set_3& point_ /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::read_PLY()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::read_PLY()` \endlink should be used instead. \brief reads a point set with properties from an input stream in ASCII or Binary PLY format. @@ -412,7 +412,7 @@ CGAL_DEPRECATED bool read_ply_point_set(std::istream& is, ///< input stream. CGAL::Point_set_3& point_set, ///< point set std::string& comments) ///< PLY comments. { - return read_PLY(is, point_set, comments); + return IO::read_PLY(is, point_set, comments); } template @@ -420,7 +420,7 @@ CGAL_DEPRECATED bool read_ply_point_set(std::istream& is, ///< input stream. CGAL::Point_set_3& point_set) ///< point set { std::string dummy; - return read_PLY(is, point_set, dummy); + return IO::read_PLY(is, point_set, dummy); } #endif // CGAL_NO_DEPRECATED_CODE @@ -429,6 +429,8 @@ CGAL_DEPRECATED bool read_ply_point_set(std::istream& is, ///< input stream. //////////////////////////////////////////////////////////////////////////////////////////////////// // Write +namespace IO { + /*! \ingroup PkgPointSet3IOPLY @@ -496,7 +498,7 @@ bool write_PLY(std::ostream& os, set_stream_precision_from_NP(os, np); os << "ply" << std::endl - << ((get_mode(os) == IO::BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl + << ((CGAL::IO::get_mode(os) == CGAL::IO::BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl << "comment Generated by the CGAL library" << std::endl; if(comments != std::string()) @@ -513,7 +515,7 @@ bool write_PLY(std::ostream& os, os << "element vertex " << point_set.number_of_points() << std::endl; std::vector prop = point_set.base().properties(); - std::vector*> printers; + std::vector*> printers; for(std::size_t i=0; i(point_set.point_map())); + printers.push_back(new internal::Property_printer(point_set.point_map())); continue; } if(prop[i] == "normal") @@ -551,7 +553,7 @@ bool write_PLY(std::ostream& os, << "property double ny" << std::endl << "property double nz" << std::endl; } - printers.push_back(new IO::internal::Property_printer(point_set.normal_map())); + printers.push_back(new internal::Property_printer(point_set.normal_map())); continue; } @@ -562,7 +564,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property char " << prop[i] << std::endl; - printers.push_back(new IO::internal::Char_property_printer(pmap)); + printers.push_back(new internal::Char_property_printer(pmap)); continue; } } @@ -572,7 +574,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property uchar " << prop[i] << std::endl; - printers.push_back(new IO::internal::Char_property_printer(pmap)); + printers.push_back(new internal::Char_property_printer(pmap)); continue; } } @@ -582,7 +584,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property short " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -592,7 +594,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property ushort " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -602,7 +604,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property int " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -612,7 +614,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property uint " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -622,7 +624,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property int " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -632,7 +634,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property uint " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -642,7 +644,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property float " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -652,7 +654,7 @@ bool write_PLY(std::ostream& os, if(okay) { os << "property double " << prop[i] << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -665,11 +667,11 @@ bool write_PLY(std::ostream& os, for(std::size_t i=0; iprint(os, *it); - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << " "; } - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << std::endl; } @@ -748,13 +750,13 @@ bool write_PLY(const std::string& fname, if(binary) { std::ofstream os(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, BINARY); return write_PLY(os, point_set, comments, np); } else { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, ASCII); return write_PLY(os, point_set, comments, np); } } @@ -782,20 +784,22 @@ bool write_PLY(const std::string& fname, const CGAL::Point_set_3& /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::write_PLY()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::write_PLY()` \endlink should be used instead. */ template CGAL_DEPRECATED bool write_ply_point_set(std::ostream& os, const CGAL::Point_set_3& point_set, const std::string& comments = std::string()) { - return write_PLY(os, point_set, comments); + return IO::write_PLY(os, point_set, comments); } #endif // CGAL_NO_DEPRECATED_CODE diff --git a/Point_set_3/include/CGAL/Point_set_3/IO/XYZ.h b/Point_set_3/include/CGAL/Point_set_3/IO/XYZ.h index a7b243fc192..33499ce8620 100644 --- a/Point_set_3/include/CGAL/Point_set_3/IO/XYZ.h +++ b/Point_set_3/include/CGAL/Point_set_3/IO/XYZ.h @@ -36,6 +36,8 @@ class Point_set_3; //////////////////////////////////////////////////////////////////////////////////////////////////// // Read +namespace IO { + /*! \ingroup PkgPointSet3IOXYZ @@ -54,9 +56,9 @@ bool read_XYZ(std::istream& is, { point_set.add_normal_map(); - bool out = CGAL::read_XYZ(is, point_set.index_back_inserter(), - CGAL::parameters::point_map(point_set.point_push_map()) - .normal_map(point_set.normal_push_map())); + bool out = CGAL::IO::read_XYZ(is, point_set.index_back_inserter(), + CGAL::parameters::point_map(point_set.point_push_map()) + .normal_map(point_set.normal_push_map())); bool has_normals = false; for(typename CGAL::Point_set_3::const_iterator it=point_set.begin(); it!=point_set.end(); ++it) @@ -93,18 +95,20 @@ bool read_XYZ(const std::string& fname, CGAL::Point_set_3& point_ return read_XYZ(is, point_set); } +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::read_XYZ()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::read_XYZ()` \endlink should be used instead. */ template CGAL_DEPRECATED bool read_xyz_point_set(std::istream& is, CGAL::Point_set_3& point_set) { - return read_XYZ(is, point_set); + return IO::read_XYZ(is, point_set); } #endif // CGAL_NO_DEPRECATED_CODE @@ -113,6 +117,8 @@ CGAL_DEPRECATED bool read_xyz_point_set(std::istream& is, CGAL::Point_set_3& /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgPointSet3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSet3IO `CGAL::write_XYZ()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSet3IO `CGAL::IO::write_XYZ()` \endlink should be used instead. */ template CGAL_DEPRECATED bool write_xyz_point_set(std::ostream& os, const CGAL::Point_set_3& point_set) { - return write_XYZ(os, point_set); + return IO::write_XYZ(os, point_set); } #endif // CGAL_NO_DEPRECATED_CODE diff --git a/Point_set_3/include/CGAL/draw_point_set_3.h b/Point_set_3/include/CGAL/draw_point_set_3.h index 510ba937a0c..54e3c413eb2 100644 --- a/Point_set_3/include/CGAL/draw_point_set_3.h +++ b/Point_set_3/include/CGAL/draw_point_set_3.h @@ -66,7 +66,7 @@ protected: void compute_vertex(const Point& p) { add_point(p); - // We can use add_point(p, c) with c a CGAL::Color to add a colored point + // We can use add_point(p, c) with c a CGAL::IO::Color to add a colored point } void compute_elements() diff --git a/Point_set_3/test/Point_set_3/point_set_test.cpp b/Point_set_3/test/Point_set_3/point_set_test.cpp index 1e03a609caf..1adfaca14a6 100644 --- a/Point_set_3/test/Point_set_3/point_set_test.cpp +++ b/Point_set_3/test/Point_set_3/point_set_test.cpp @@ -36,7 +36,7 @@ int main (int, char**) test (point_set.has_normal_map(), "point set should have normals."); const char* fname ("data/oni.pwn"); - if(!CGAL::read_point_set(fname, point_set)) + if(!CGAL::IO::read_point_set(fname, point_set)) { test (false, "failed to read input point set."); return EXIT_FAILURE; diff --git a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt index 0b57f4220c4..bf0029d6c94 100644 --- a/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt +++ b/Point_set_processing_3/doc/Point_set_processing_3/PackageDescription.txt @@ -81,8 +81,8 @@ format. \cgalCRPSection{I/O (All Formats)} -- `CGAL::read_points()` -- `CGAL::write_points()` +- `CGAL::IO::read_points()` +- `CGAL::IO::write_points()` \cgalCRPSection{I/O (XYZ/OFF Formats)} @@ -91,23 +91,23 @@ format. \cgalCRPSection{I/O (PLY Format)} -- \link PkgPointSetProcessing3IOPly `CGAL::read_PLY()` \endlink -- `CGAL::read_PLY_with_properties()` -- \link PkgPointSetProcessing3IOPly `CGAL::write_PLY()` \endlink -- `CGAL::write_PLY_with_properties()` -- `CGAL::PLY_property` -- `CGAL::make_ply_point_reader()` -- `CGAL::make_ply_point_writer()` -- `CGAL::make_ply_normal_reader()` -- `CGAL::make_ply_normal_writer()` +- \link PkgPointSetProcessing3IOPly `CGAL::IO::read_PLY()` \endlink +- `CGAL::IO::read_PLY_with_properties()` +- \link PkgPointSetProcessing3IOPly `CGAL::IO::write_PLY()` \endlink +- `CGAL::IO::write_PLY_with_properties()` +- `CGAL::IO::PLY_property` +- `CGAL::IO::make_ply_point_reader()` +- `CGAL::IO::make_ply_point_writer()` +- `CGAL::IO::make_ply_normal_reader()` +- `CGAL::IO::make_ply_normal_writer()` \cgalCRPSection{I/O (LAS Format)} -- `CGAL::read_LAS()` -- `CGAL::read_LAS_with_properties()` -- `CGAL::write_LAS()` -- `CGAL::write_LAS_with_properties()` -- `CGAL::make_las_point_reader()` -- `CGAL::make_las_point_writer()` +- `CGAL::IO::read_LAS()` +- `CGAL::IO::read_LAS_with_properties()` +- `CGAL::IO::write_LAS()` +- `CGAL::IO::write_LAS_with_properties()` +- `CGAL::IO::make_las_point_reader()` +- `CGAL::IO::make_las_point_writer()` */ diff --git a/Point_set_processing_3/examples/Point_set_processing_3/average_spacing_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/average_spacing_example.cpp index 7d21a8237af..bb679700a26 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/average_spacing_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/average_spacing_example.cpp @@ -27,8 +27,8 @@ int main(int argc, char*argv[]) // we use a property map that accesses the 1st element of the tuple. std::vector points; - if (!CGAL::read_points(fname, std::back_inserter(points), - CGAL::parameters::point_map(CGAL::Nth_of_tuple_property_map<1, IndexedPointWithColorTuple>()))) + if (!CGAL::IO::read_points(fname, std::back_inserter(points), + CGAL::parameters::point_map(CGAL::Nth_of_tuple_property_map<1, IndexedPointWithColorTuple>()))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/bilateral_smooth_point_set_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/bilateral_smooth_point_set_example.cpp index dc37c7a7eb8..dd4c2cbb390 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/bilateral_smooth_point_set_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/bilateral_smooth_point_set_example.cpp @@ -27,9 +27,9 @@ int main(int argc, char*argv[]) // Reads a point set file in points[] * with normals *. std::vector points; - if(!CGAL::read_points(input_filename, std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()))) + if(!CGAL::IO::read_points(input_filename, std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()))) { std::cerr << "Error: cannot read file " << input_filename << std::endl; return EXIT_FAILURE; @@ -54,10 +54,10 @@ int main(int argc, char*argv[]) } //// Save point set. - if(!CGAL::write_XYZ(output_filename, points, - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()) - .stream_precision(17))) + if(!CGAL::IO::write_XYZ(output_filename, points, + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()) + .stream_precision(17))) return EXIT_FAILURE; return EXIT_SUCCESS; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/clustering_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/clustering_example.cpp index eddf432eddf..6e058e1b1fe 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/clustering_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/clustering_example.cpp @@ -56,7 +56,7 @@ int main (int argc, char** argv) } std::ofstream ofile("out.ply", std::ios_base::binary); - CGAL::set_binary_mode(ofile); + CGAL::IO::set_binary_mode(ofile); ofile << points; return EXIT_SUCCESS; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/edge_aware_upsample_point_set_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/edge_aware_upsample_point_set_example.cpp index 2456b2dc1bc..89247f76650 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/edge_aware_upsample_point_set_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/edge_aware_upsample_point_set_example.cpp @@ -25,10 +25,10 @@ int main(int argc, char* argv[]) // Reads a .xyz point set file in points[], *with normals*. std::vector points; - if(!CGAL::read_points(input_filename, - std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()))) + if(!CGAL::IO::read_points(input_filename, + std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()))) { std::cerr << "Error: cannot read file " << input_filename << std::endl; return EXIT_FAILURE; @@ -52,10 +52,10 @@ int main(int argc, char* argv[]) number_of_output_points(number_of_output_points)); // Saves point set. - if(!CGAL::write_points(output_filename, points, - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()) - .stream_precision(17))) + if(!CGAL::IO::write_points(output_filename, points, + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()) + .stream_precision(17))) return EXIT_FAILURE; return EXIT_SUCCESS; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/edges_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/edges_example.cpp index 24d29c76fbc..3f80772a7d4 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/edges_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/edges_example.cpp @@ -22,9 +22,9 @@ int main (int , char**) { // Reads a polygon mesh file in points[]. std::list points; - if(!CGAL::read_points("data/fandisk.off", - std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()))) + if(!CGAL::IO::read_points("data/fandisk.off", + std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()))) { std::cerr << "Error: cannot read file data/fandisk.off" << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/grid_simplification_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/grid_simplification_example.cpp index ac026943b61..e949000b5ad 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/grid_simplification_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/grid_simplification_example.cpp @@ -16,7 +16,7 @@ int main(int argc, char*argv[]) // Reads a point set file in points[]. std::vector points; - if(!CGAL::read_points(fname, std::back_inserter(points))) + if(!CGAL::IO::read_points(fname, std::back_inserter(points))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/hierarchy_simplification_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/hierarchy_simplification_example.cpp index 8226659a32d..d5e7f2b2d8d 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/hierarchy_simplification_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/hierarchy_simplification_example.cpp @@ -19,7 +19,7 @@ int main(int argc, char*argv[]) // Reads a point set file in points[]. std::vector points; - if(!CGAL::read_points(fname, std::back_inserter(points))) + if(!CGAL::IO::read_points(fname, std::back_inserter(points))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; @@ -41,7 +41,7 @@ int main(int argc, char*argv[]) << task_timer.time() << " seconds, " << (memory>>20) << " Mib allocated." << std::endl; - CGAL::write_points("out.xyz", points, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_points("out.xyz", points, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Point_set_processing_3/examples/Point_set_processing_3/normal_estimation.cpp b/Point_set_processing_3/examples/Point_set_processing_3/normal_estimation.cpp index 3fdb8f53e0f..bd4847a22e4 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/normal_estimation.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/normal_estimation.cpp @@ -244,8 +244,8 @@ int main(int argc, char * argv[]) PointList points; std::cerr << "Open " << input_filename << " for reading..." << std::endl; - if(!CGAL::read_points(input_filename.c_str(), std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()))) + if(!CGAL::IO::read_points(input_filename.c_str(), std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()))) { std::cerr << "Error: cannot read file " << input_filename << std::endl; return EXIT_FAILURE; @@ -290,10 +290,10 @@ int main(int argc, char * argv[]) std::cerr << "Write file " << output_filename << std::endl << std::endl; - if(!CGAL::write_points(output_filename, points, - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()) - .stream_precision(17))) + if(!CGAL::IO::write_points(output_filename, points, + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()) + .stream_precision(17))) { std::cerr << "Error: cannot write file " << output_filename << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/normals_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/normals_example.cpp index 9eb5e9b634a..40dfd2556ea 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/normals_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/normals_example.cpp @@ -27,9 +27,9 @@ int main(int argc, char*argv[]) // Reads a point set file in points[]. std::list points; - if(!CGAL::read_points(fname, - std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()))) + if(!CGAL::IO::read_points(fname, + std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()))) { std::cerr << "Error: cannot read file " << fname<< std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp index 9e6beca4da1..642da49d893 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/orient_scanlines_example.cpp @@ -16,8 +16,8 @@ using Scanline_id_map = CGAL::Nth_of_tuple_property_map<3, Point_with_info>; void dump (const char* filename, const std::vector& points) { std::ofstream ofile (filename, std::ios::binary); - CGAL::set_binary_mode(ofile); - CGAL::write_PLY + CGAL::IO::set_binary_mode(ofile); + CGAL::IO::write_PLY (ofile, points, CGAL::parameters::point_map (Point_map()). normal_map (Normal_map())); @@ -33,13 +33,13 @@ int main (int argc, char** argv) std::cerr << "Reading input file " << fname << std::endl; std::ifstream ifile (fname, std::ios::binary); if (!ifile || - !CGAL::read_LAS_with_properties + !CGAL::IO::read_LAS_with_properties (ifile, std::back_inserter (points), - CGAL::make_las_point_reader (Point_map()), + CGAL::IO::make_las_point_reader (Point_map()), std::make_pair (Scan_angle_map(), - CGAL::LAS_property::Scan_angle()), + CGAL::IO::LAS_property::Scan_angle()), std::make_pair (Scanline_id_map(), - CGAL::LAS_property::Scan_direction_flag()))) + CGAL::IO::LAS_property::Scan_direction_flag()))) { std::cerr << "Can't read " << fname << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/property_map.cpp b/Point_set_processing_3/examples/Point_set_processing_3/property_map.cpp index 56a131c35e3..2b940185cc3 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/property_map.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/property_map.cpp @@ -82,7 +82,7 @@ void orient_normals(Iterator beg, Iterator end, OrientationPMap orient_pmap, Nor int main() { - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); // Here we run it on plain points. No need for a property map { diff --git a/Point_set_processing_3/examples/Point_set_processing_3/random_simplification_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/random_simplification_example.cpp index d6ec4e2904a..fef22b7a078 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/random_simplification_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/random_simplification_example.cpp @@ -18,7 +18,7 @@ int main(int argc, char*argv[]) // Reads a point set file in points[]. std::vector points; - if(!CGAL::read_points(fname, std::back_inserter(points))) + if(!CGAL::IO::read_points(fname, std::back_inserter(points))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; @@ -33,7 +33,7 @@ int main(int argc, char*argv[]) // Saves point set. const std::string output_filename = (argc>2) ? argv[2] : "Three_lady_copy.xyz"; - if(!CGAL::write_points(output_filename, points, CGAL::parameters::stream_precision(17))) + if(!CGAL::IO::write_points(output_filename, points, CGAL::parameters::stream_precision(17))) return EXIT_FAILURE; return EXIT_SUCCESS; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/read_las_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/read_las_example.cpp index 8cf2f1be534..11d266a2d5b 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/read_las_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/read_las_example.cpp @@ -21,14 +21,14 @@ int main(int argc, char*argv[]) // Reads a .las point set file with normal vectors and colors std::ifstream in(fname, std::ios_base::binary); std::vector points; // store points - if(!CGAL::read_LAS_with_properties(in, std::back_inserter (points), - CGAL::make_las_point_reader(CGAL::First_of_pair_property_map()), - std::make_tuple(CGAL::Second_of_pair_property_map(), - CGAL::Construct_array(), - CGAL::LAS_property::R(), - CGAL::LAS_property::G(), - CGAL::LAS_property::B(), - CGAL::LAS_property::I()))) + if(!CGAL::IO::read_LAS_with_properties(in, std::back_inserter (points), + CGAL::IO::make_las_point_reader(CGAL::First_of_pair_property_map()), + std::make_tuple(CGAL::Second_of_pair_property_map(), + CGAL::Construct_array(), + CGAL::IO::LAS_property::R(), + CGAL::IO::LAS_property::G(), + CGAL::IO::LAS_property::B(), + CGAL::IO::LAS_property::I()))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/read_ply_points_with_colors_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/read_ply_points_with_colors_example.cpp index 347ac0aecf4..9d3fad1476d 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/read_ply_points_with_colors_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/read_ply_points_with_colors_example.cpp @@ -28,15 +28,15 @@ int main(int argc, char*argv[]) // Reads a .ply point set file with normal vectors and colors std::vector points; // store points std::ifstream in(fname); - if(!CGAL::read_PLY_with_properties(in, std::back_inserter(points), - CGAL::make_ply_point_reader(Point_map()), - std::make_pair(Intensity_map(), CGAL::PLY_property("intensity")), - std::make_tuple(Color_map(), - CGAL::Construct_array(), - CGAL::PLY_property("red"), - CGAL::PLY_property("green"), - CGAL::PLY_property("blue")), - CGAL::make_ply_normal_reader(Normal_map()))) + if(!CGAL::IO::read_PLY_with_properties(in, std::back_inserter(points), + CGAL::make_ply_point_reader(Point_map()), + std::make_pair(Intensity_map(), CGAL::PLY_property("intensity")), + std::make_tuple(Color_map(), + CGAL::Construct_array(), + CGAL::IO::PLY_property("red"), + CGAL::IO::PLY_property("green"), + CGAL::IO::PLY_property("blue")), + CGAL::IO::make_ply_normal_reader(Normal_map()))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/read_write_xyz_point_set_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/read_write_xyz_point_set_example.cpp index 33e49442e6c..ae628ced81e 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/read_write_xyz_point_set_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/read_write_xyz_point_set_example.cpp @@ -26,10 +26,10 @@ int main(int argc, char*argv[]) // over points and as well as property maps to access each // point position and normal. std::vector points; - if(!CGAL::read_XYZ(fname, - std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()))) + if(!CGAL::IO::read_XYZ(fname, + std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; @@ -38,10 +38,10 @@ int main(int argc, char*argv[]) // Saves point set. // Note: write_XYZ() requires property maps to access each // point position and normal. - if(!CGAL::write_XYZ("oni_copy.xyz", points, - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()) - .stream_precision(17))) + if(!CGAL::IO::write_XYZ("oni_copy.xyz", points, + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()) + .stream_precision(17))) return EXIT_FAILURE; return EXIT_SUCCESS; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp index 983d5b5b811..b14e5527e28 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_OpenGR.cpp @@ -26,17 +26,17 @@ int main(int argc, const char** argv) const char* fname2 = (argc>2) ? argv[2] : "data/hippo2.ply"; std::vector pwns1, pwns2; - if(!CGAL::read_points(fname1, std::back_inserter(pwns1), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(Normal_map()))) + if(!CGAL::IO::read_points(fname1, std::back_inserter(pwns1), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(Normal_map()))) { std::cerr << "Error: cannot read file " << fname1 << std::endl; return EXIT_FAILURE; } - if(!CGAL::read_points(fname2, std::back_inserter(pwns2), - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()))) + if(!CGAL::IO::read_points(fname2, std::back_inserter(pwns2), + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()))) { std::cerr << "Error: cannot read file " << fname2 << std::endl; return EXIT_FAILURE; @@ -64,10 +64,10 @@ int main(int argc, const char** argv) params::point_map(Point_map()) .normal_map(Normal_map())); - if(!CGAL::write_points("pwns2_aligned.ply", pwns2, - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()) - .stream_precision(17))) + if(!CGAL::IO::write_points("pwns2_aligned.ply", pwns2, + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()) + .stream_precision(17))) return EXIT_FAILURE; std::cout << "Registration score: " << score << ".\n" diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp index a26cb3e4dcc..f3988aaf24f 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_opengr_pointmatcher_pipeline.cpp @@ -29,17 +29,17 @@ int main(int argc, const char** argv) const char* fname2 = (argc>2) ? argv[2] : "data/hippo2.ply"; std::vector pwns1, pwns2; - if(!CGAL::read_points(fname1, std::back_inserter(pwns1), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map (Normal_map()))) + if(!CGAL::IO::read_points(fname1, std::back_inserter(pwns1), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map (Normal_map()))) { std::cerr << "Error: cannot read file " << fname1 << std::endl; return EXIT_FAILURE; } - if(!CGAL::read_points(fname2, std::back_inserter(pwns2), - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()))) + if(!CGAL::IO::read_points(fname2, std::back_inserter(pwns2), + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()))) { std::cerr << "Error: cannot read file " << fname2 << std::endl; return EXIT_FAILURE; @@ -64,9 +64,9 @@ int main(int argc, const char** argv) params::point_map(Point_map()).normal_map(Normal_map()), params::point_map(Point_map()).normal_map(Normal_map()).transformation(res)); - if(!CGAL::write_points("pwns2_aligned.ply", pwns2, - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()))) + if(!CGAL::IO::write_points("pwns2_aligned.ply", pwns2, + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()))) { return EXIT_FAILURE; } diff --git a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp index cfbb6463d16..1d78d67f9a1 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/registration_with_pointmatcher.cpp @@ -29,17 +29,17 @@ int main(int argc, const char** argv) const char* fname2 = (argc>2)?argv[2]:"data/hippo2.ply"; std::vector pwns1, pwns2; - if(!CGAL::read_points(fname1, std::back_inserter(pwns1), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(Normal_map()))) + if(!CGAL::IO::read_points(fname1, std::back_inserter(pwns1), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(Normal_map()))) { std::cerr << "Error: cannot read file " << fname1 << std::endl; return EXIT_FAILURE; } - if(!CGAL::read_points(fname2, std::back_inserter(pwns2), - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()))) + if(!CGAL::IO::read_points(fname2, std::back_inserter(pwns2), + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()))) { std::cerr << "Error: cannot read file " << fname2 << std::endl; return EXIT_FAILURE; @@ -139,8 +139,8 @@ int main(int argc, const char** argv) } while (!converged); - if(!CGAL::write_points("pwns2_aligned.ply", pwns2, - CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) + if(!CGAL::IO::write_points("pwns2_aligned.ply", pwns2, + CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) return EXIT_FAILURE; std::cout << "Transformed version of " << fname2 << " written to pwn2_aligned.ply.\n"; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/remove_outliers_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/remove_outliers_example.cpp index 777fb38828e..9ef2280fef9 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/remove_outliers_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/remove_outliers_example.cpp @@ -20,8 +20,8 @@ int main(int argc, char*argv[]) // Reads a point set file in points[]. // The Identity_property_map property map can be omitted here as it is the default value. std::vector points; - if(!CGAL::read_points(fname, std::back_inserter(points), - CGAL::parameters::point_map(CGAL::Identity_property_map()))) + if(!CGAL::IO::read_points(fname, std::back_inserter(points), + CGAL::parameters::point_map(CGAL::Identity_property_map()))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/scale_estimation_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/scale_estimation_example.cpp index 094de32e4aa..da20e6caf5f 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/scale_estimation_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/scale_estimation_example.cpp @@ -27,7 +27,7 @@ int main (int argc, char** argv) // read input std::vector points; - if(!CGAL::read_points(fname, std::back_inserter(points))) + if(!CGAL::IO::read_points(fname, std::back_inserter(points))) { std::cerr << "Error: can't read input file" << std::endl; return EXIT_FAILURE; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/structuring_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/structuring_example.cpp index 11ce92c5aac..d53aa1a27d8 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/structuring_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/structuring_example.cpp @@ -32,9 +32,9 @@ int main (int argc, char** argv) // Loading point set from a file. - if(!CGAL::read_points(filename, std::back_inserter(points), - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()))) + if(!CGAL::IO::read_points(filename, std::back_inserter(points), + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()))) { std::cerr << "Error: cannot read file cube.pwn" << std::endl; return EXIT_FAILURE; @@ -64,10 +64,10 @@ int main (int argc, char** argv) std::cerr << structured_pts.size () << " structured point(s) generated." << std::endl; - CGAL::write_points("out.pwn", structured_pts, - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()) - .stream_precision(17)); + CGAL::IO::write_points("out.pwn", structured_pts, + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()) + .stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Point_set_processing_3/examples/Point_set_processing_3/wlop_simplify_and_regularize_point_set_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/wlop_simplify_and_regularize_point_set_example.cpp index 524c080051b..a4cb0104130 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/wlop_simplify_and_regularize_point_set_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/wlop_simplify_and_regularize_point_set_example.cpp @@ -23,7 +23,7 @@ int main(int argc, char** argv) // Reads a .xyz point set file in points[] std::vector points; - if(!CGAL::read_points(input_filename, std::back_inserter(points))) + if(!CGAL::IO::read_points(input_filename, std::back_inserter(points))) { std::cerr << "Error: cannot read file " << input_filename << std::endl; return EXIT_FAILURE; @@ -40,7 +40,7 @@ int main(int argc, char** argv) CGAL::parameters::select_percentage(retain_percentage). neighbor_radius (neighbor_radius)); - if(!CGAL::write_points(output_filename, output, CGAL::parameters::stream_precision(17))) + if(!CGAL::IO::write_points(output_filename, output, CGAL::parameters::stream_precision(17))) return EXIT_FAILURE; return EXIT_SUCCESS; diff --git a/Point_set_processing_3/examples/Point_set_processing_3/write_ply_points_example.cpp b/Point_set_processing_3/examples/Point_set_processing_3/write_ply_points_example.cpp index 6542eb28ee6..ab9451d1e9d 100644 --- a/Point_set_processing_3/examples/Point_set_processing_3/write_ply_points_example.cpp +++ b/Point_set_processing_3/examples/Point_set_processing_3/write_ply_points_example.cpp @@ -31,7 +31,7 @@ struct Output_rep< ::Color, F > { { } std::ostream& operator() (std::ostream& out) const { - if (is_ascii(out)) + if (IO::is_ascii(out)) out << int(c[0]) << " " << int(c[1]) << " " << int(c[2]) << " " << int(c[3]); else out.write(reinterpret_cast(&c), sizeof(c)); @@ -54,16 +54,16 @@ int main(int, char**) i)); std::ofstream f("out.ply", std::ios::binary); - CGAL::set_binary_mode(f); // The PLY file will be written in the binary format + CGAL::IO::set_binary_mode(f); // The PLY file will be written in the binary format - CGAL::write_PLY_with_properties(f, points, - CGAL::make_ply_point_writer (Point_map()), - std::make_tuple(Color_map(), - CGAL::PLY_property("red"), - CGAL::PLY_property("green"), - CGAL::PLY_property("blue"), - CGAL::PLY_property("alpha")), - std::make_pair(Intensity_map(), CGAL::PLY_property("intensity"))); + CGAL::IO::write_PLY_with_properties(f, points, + CGAL::make_ply_point_writer (Point_map()), + std::make_tuple(Color_map(), + CGAL::IO::PLY_property("red"), + CGAL::IO::PLY_property("green"), + CGAL::IO::PLY_property("blue"), + CGAL::IO::PLY_property("alpha")), + std::make_pair(Intensity_map(), CGAL::IO::PLY_property("intensity"))); return EXIT_SUCCESS; } diff --git a/Point_set_processing_3/include/CGAL/IO/read_las_points.h b/Point_set_processing_3/include/CGAL/IO/read_las_points.h index 1a907e6d002..5e9e127d0f8 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_las_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_las_points.h @@ -64,6 +64,8 @@ namespace CGAL { +namespace IO { + /// \cond SKIP_IN_MANUAL namespace LAS_property { namespace Id { @@ -544,7 +546,7 @@ bool read_LAS(const std::string& filename, const CGAL_BGL_NP_CLASS& np) { std::ifstream is(filename, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); return read_LAS(is, output, np); } @@ -554,7 +556,7 @@ template bool read_LAS(const std::string& fname, OutputIterator output, const CGAL_BGL_NP_CLASS& np) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); return read_LAS::type>(is, output, np); } @@ -572,10 +574,15 @@ bool read_LAS(const std::string& fname, OutputIterator output) /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /// \cond SKIP_IN_MANUAL +using IO::make_las_point_reader; +namespace LAS_property = IO::LAS_property; + template @@ -603,7 +610,7 @@ bool read_las_points(std::istream& is, ///< input stream. /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::read_LAS_with_properties()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_LAS_with_properties()` should be used instead. */ template (properties)...); + return IO::read_LAS_with_properties(is, output, std::forward(properties)...); } /// \cond SKIP_IN_MANUAL @@ -623,7 +630,7 @@ CGAL_DEPRECATED bool read_las_points_with_properties(std::istream& is, OutputIterator output, PropertyHandler&& ... properties) { - return read_LAS_with_properties::type>(is, output, std::forward(properties)...); + return IO::read_LAS_with_properties::type>(is, output, std::forward(properties)...); } /// \endcond @@ -631,7 +638,7 @@ CGAL_DEPRECATED bool read_las_points_with_properties(std::istream& is, /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::read_LAS()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_LAS()` should be used instead. */ template , CGAL_BGL_NP_CLASS>::type point_map = choose_parameter, CGAL_BGL_NP_CLASS>::type>(get_parameter(np, internal_np::point_map)); - return read_LAS(is, output, make_las_point_reader(point_map)); + return IO::read_LAS(is, output, make_las_point_reader(point_map)); } /// \cond SKIP_IN_MANUAL @@ -655,21 +662,21 @@ CGAL_DEPRECATED bool read_las_points(std::istream& is, template CGAL_DEPRECATED bool read_las_points(std::istream& is, OutputIterator output) { - return read_LAS(is, output, CGAL::parameters::all_default()); + return IO::read_LAS(is, output, CGAL::parameters::all_default()); } // variant with default output iterator value type template CGAL_DEPRECATED bool read_las_points(std::istream& is, OutputIterator output, const CGAL_BGL_NP_CLASS& np) { - return read_LAS::type>(is, output, np); + return IO::read_LAS::type>(is, output, np); } // variant with default NP and output iterator value type template CGAL_DEPRECATED bool read_las_points(std::istream& is, OutputIterator output) { - return read_LAS::type>(is, output, CGAL::parameters::all_default()); + return IO::read_LAS::type>(is, output, CGAL::parameters::all_default()); } /// \endcond diff --git a/Point_set_processing_3/include/CGAL/IO/read_off_points.h b/Point_set_processing_3/include/CGAL/IO/read_off_points.h index 5c06ffcefdc..8fee80ba6bf 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_off_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_off_points.h @@ -40,6 +40,8 @@ namespace CGAL { +namespace IO { + /** \ingroup PkgPointSetProcessing3IOOff @@ -166,16 +168,16 @@ bool read_OFF(std::istream& is, // Reads position + normal... double x,y,z; double nx,ny,nz; - if (iss >> iformat(x) >> iformat(y) >> iformat(z)) + if (iss >> IO::iformat(x) >> IO::iformat(y) >> IO::iformat(z)) { //the extra `()` seem to fix a very strange bug. Without them, the put() won't compile. Point point((FT(x)), (FT(y)), (FT(z))); Vector normal = CGAL::NULL_VECTOR; // ... + normal... - if (iss >> iformat(nx)) + if (iss >> IO::iformat(nx)) { // In case we could read one number, we expect that there are two more - if(iss >> iformat(ny) >> iformat(nz)){ + if(iss >> IO::iformat(ny) >> IO::iformat(nz)){ normal = Vector(FT(nx),FT(ny),FT(nz)); } else { std::cerr << "Error line " << lineNumber << " of file" << std::endl; @@ -248,7 +250,7 @@ bool read_OFF(const std::string& fname, ) { std::ifstream is(fname); - return read_OFF(is, output, np); + return read_OFF(is, output, np); } /// \cond SKIP_IN_MANUAL @@ -303,6 +305,8 @@ bool read_OFF(const std::string& fname, OutputIterator output, /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /// \cond SKIP_IN_MANUAL @@ -319,10 +323,10 @@ bool read_off_points_and_normals(std::istream& is, ///< input stream. NormalPMap normal_map, ///< property map: value_type of OutputIterator -> Vector_3. const Kernel& /*kernel*/) ///< geometric traits. { - return read_OFF(is, output, - parameters::point_map(point_map) - .normal_map(normal_map) - .geom_traits(Kernel())); + return IO::read_OFF(is, output, + parameters::point_map(point_map) + .normal_map(normal_map) + .geom_traits(Kernel())); } template Vector_3. const Kernel& kernel) ///< geometric traits. { - return read_OFF::type>(is, output, - parameters::point_map(point_map) - .normal_map(normal_map) - .geom_traits(kernel)); + return IO::read_OFF::type>(is, output, + parameters::point_map(point_map) + .normal_map(normal_map) + .geom_traits(kernel)); } template Point_3. NormalPMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_OFF(is, output, parameters::point_map(point_map) + return IO::read_OFF(is, output, parameters::point_map(point_map) .normal_map(normal_map)); } @@ -365,9 +369,9 @@ bool read_off_points_and_normals(std::istream& is, ///< input stream. PointPMap point_map, ///< property map: value_type of OutputIterator -> Point_3. NormalPMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_OFF::type>(is, output, - parameters::point_map(point_map) - .normal_map(normal_map)); + return IO::read_OFF::type>(is, output, + parameters::point_map(point_map) + .normal_map(normal_map)); } template Vector_3. { - return read_OFF(is, output, parameters::normal_map(normal_map)); + return IO::read_OFF(is, output, parameters::normal_map(normal_map)); } template Vector_3. { - return read_OFF::type>(is, output, parameters::normal_map(normal_map)); + return IO::read_OFF::type>(is, output, parameters::normal_map(normal_map)); } template CGAL_DEPRECATED bool read_off_points(std::istream& is, OutputIterator output) { - return read_OFF(is, output); + return IO::read_OFF(is, output); } // variant with default output iterator value type template CGAL_DEPRECATED bool read_off_points(std::istream& is, OutputIterator output, const CGAL_BGL_NP_CLASS& np) { - return read_OFF(is, output, np); + return IO::read_OFF(is, output, np); } // variant with default NP and output iterator value type template CGAL_DEPRECATED bool read_off_points(std::istream& is, OutputIterator output) { - return read_OFF(is, output, CGAL::parameters::all_default()); + return IO::read_OFF(is, output, CGAL::parameters::all_default()); } /// \endcond diff --git a/Point_set_processing_3/include/CGAL/IO/read_ply_points.h b/Point_set_processing_3/include/CGAL/IO/read_ply_points.h index 6cf449e48e6..53fad444a93 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_ply_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_ply_points.h @@ -43,6 +43,8 @@ namespace CGAL { +namespace IO { + #ifdef DOXYGEN_RUNNING // Document some parts from Stream_support here for convenience /** \ingroup PkgPointSetProcessing3IOPly @@ -148,7 +150,7 @@ bool read_PLY_with_properties(std::istream& is, if(!is) return false; - IO::internal::PLY_reader reader(true); + internal::PLY_reader reader(true); if(!(reader.init(is))) { @@ -158,13 +160,13 @@ bool read_PLY_with_properties(std::istream& is, for(std::size_t i = 0; i < reader.number_of_elements(); ++ i) { - IO::internal::PLY_element& element = reader.element(i); + internal::PLY_element& element = reader.element(i); for(std::size_t j = 0; j < element.number_of_items(); ++ j) { for(std::size_t k = 0; k < element.number_of_properties(); ++ k) { - IO::internal::PLY_read_number* property = element.property(k); + internal::PLY_read_number* property = element.property(k); property->get(is); if(is.fail()) @@ -174,7 +176,7 @@ bool read_PLY_with_properties(std::istream& is, if(element.name() == "vertex" || element.name() == "vertices") { OutputValueType new_element; - IO::internal::process_properties(element, new_element, std::forward(properties)...); + internal::process_properties(element, new_element, std::forward(properties)...); *(output ++) = new_element; } } @@ -338,13 +340,13 @@ bool read_PLY(const std::string& fname, if(binary) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); return read_PLY(is, output, np); } else { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); return read_PLY(is, output, np); } } @@ -398,6 +400,8 @@ bool read_PLY(const std::string& fname, OutputIterator output, /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /// \cond SKIP_IN_MANUAL @@ -412,7 +416,7 @@ bool read_ply_points_and_normals(std::istream& is, ///< input stream. PointMap point_map, ///< property map: value_type of OutputIterator -> Point_3. NormalMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_PLY(is, output, parameters::point_map(point_map) + return IO::read_PLY(is, output, parameters::point_map(point_map) .normal_map(normal_map)); } @@ -425,7 +429,7 @@ bool read_ply_points_and_normals(std::istream& is, ///< input stream. PointMap point_map, ///< property map: value_type of OutputIterator -> Point_3. NormalMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_PLY::type>(is, output, parameters::point_map(point_map) + return IO::read_PLY::type>(is, output, parameters::point_map(point_map) .normal_map(normal_map)); } @@ -437,7 +441,7 @@ bool read_ply_points_and_normals(std::istream& is, ///< input stream. OutputIterator output, ///< output iterator over points. NormalMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_PLY(is, output, parameters::normal_map(normal_map)); + return IO::read_PLY(is, output, parameters::normal_map(normal_map)); } template @@ -446,7 +450,7 @@ bool read_ply_points_and_normals(std::istream& is, ///< input stream. OutputIterator output, ///< output iterator over points. NormalMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_PLY::type>(is, output, parameters::normal_map(normal_map)); + return IO::read_PLY::type>(is, output, parameters::normal_map(normal_map)); } template Point_3. { - return read_PLY(is, output, parameters::point_map(point_map)); + return IO::read_PLY(is, output, parameters::point_map(point_map)); } template Point_3. { - return read_PLY::type>(is, output, parameters::point_map(point_map)); + return IO::read_PLY::type>(is, output, parameters::point_map(point_map)); } /// \endcond @@ -475,25 +479,25 @@ bool read_ply_points(std::istream& is, ///< input stream. /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSetProcessing3IOPly `CGAL::read_PLY_with_properties()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSetProcessing3IOPly `CGAL::IO::read_PLY_with_properties()` \endlink should be used instead. */ template CGAL_DEPRECATED bool read_ply_points_with_properties(std::istream& is, OutputIterator output, PropertyHandler&& ... properties) { - return read_PLY_with_properties(is, output, std::forward(properties)...); + return IO::read_PLY_with_properties(is, output, std::forward(properties)...); } /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSetProcessing3IOPly `CGAL::read_PLY()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSetProcessing3IOPly `CGAL::IO::read_PLY()` \endlink should be used instead. */ template CGAL_DEPRECATED bool read_ply_points(std::istream& is, OutputIterator output, const CGAL_BGL_NP_CLASS& np) { - return read_PLY(is, output, np); + return IO::read_PLY(is, output, np); } /// \cond SKIP_IN_MANUAL @@ -502,14 +506,14 @@ template CGAL_DEPRECATED bool read_ply_points_with_properties(std::istream& is, OutputIterator output, PropertyHandler&& ... properties) { - return read_PLY_with_properties::type>(is, output, std::forward(properties)...); + return IO::read_PLY_with_properties::type>(is, output, std::forward(properties)...); } template CGAL_DEPRECATED bool read_ply_points(std::istream& is, OutputIterator output) { - return read_PLY(is, output, parameters::all_default()); + return IO::read_PLY(is, output, parameters::all_default()); } // variant with default output iterator value type @@ -517,14 +521,14 @@ template CGAL_DEPRECATED bool read_ply_points(std::istream& is, OutputIterator output, const CGAL_BGL_NP_CLASS& np) { - return read_PLY::type>(is, output, np); + return IO::read_PLY::type>(is, output, np); } // variant with default NP and output iterator value type template CGAL_DEPRECATED bool read_ply_points(std::istream& is, OutputIterator output) { - return read_PLY::type>(is, output, parameters::all_default()); + return IO::read_PLY::type>(is, output, parameters::all_default()); } /// \endcond diff --git a/Point_set_processing_3/include/CGAL/IO/read_points.h b/Point_set_processing_3/include/CGAL/IO/read_points.h index 4b4a8eee0f6..b9c31d64f69 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_points.h @@ -28,6 +28,8 @@ namespace CGAL { +namespace IO { + /** \ingroup PkgPointSetProcessing3IO @@ -88,7 +90,7 @@ bool read_points(const std::string& fname, PointOutputIterator output, const NamedParameters& np) { - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == "xyz" || ext == "pwn") return read_XYZ(fname, output, np); @@ -128,6 +130,6 @@ bool read_points(const std::string& fname, OutputIterator output) /// \endcond -} // namespace CGAL +} } // namespace CGAL::IO #endif // CGAL_POINT_SET_PROCESSING_READ_POINTS_H diff --git a/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h b/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h index 00f64422095..a414ddb839a 100644 --- a/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h +++ b/Point_set_processing_3/include/CGAL/IO/read_xyz_points.h @@ -37,6 +37,8 @@ namespace CGAL { +namespace IO { + /** \ingroup PkgPointSetProcessing3IOXyz @@ -228,7 +230,7 @@ bool read_XYZ(const std::string& fname, const CGAL_BGL_NP_CLASS& np) { std::ifstream is(fname); - return read_XYZ(is, output, np); + return read_XYZ(is, output, np); } /// \cond SKIP_IN_MANUAL @@ -275,6 +277,8 @@ bool read_XYZ(const std::string& fname, OutputIterator output) return read_XYZ::type>(fname, output, parameters::all_default()); } +} // namespace IO + /// \endcond #ifndef CGAL_NO_DEPRECATED_CODE @@ -293,10 +297,10 @@ bool read_xyz_points_and_normals(std::istream& is, ///< input stream. NormalPMap normal_map, ///< property map: value_type of OutputIterator -> Vector_3. const Kernel& /*kernel*/) ///< geometric traits. { - return read_XYZ(is, output, - parameters::point_map(point_map) - .normal_map(normal_map) - .geom_traits(Kernel())); + return IO::read_XYZ(is, output, + parameters::point_map(point_map) + .normal_map(normal_map) + .geom_traits(Kernel())); } template Vector_3. const Kernel& kernel) ///< geometric traits. { - return read_XYZ::type>(is, output, - parameters::point_map(point_map) - .normal_map(normal_map) - .geom_traits(kernel)); + return IO::read_XYZ::type>(is, output, + parameters::point_map(point_map) + .normal_map(normal_map) + .geom_traits(kernel)); } template Point_3. NormalPMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_XYZ(is, output, - parameters::point_map(point_map) - .normal_map(normal_map)); + return IO::read_XYZ(is, output, + parameters::point_map(point_map) + .normal_map(normal_map)); } template Point_3. NormalPMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { - return read_XYZ::type>(is, output, - parameters::point_map(point_map) - .normal_map(normal_map)); + return IO::read_XYZ::type>(is, output, + parameters::point_map(point_map) + .normal_map(normal_map)); } template Vector_3. { - return read_XYZ(is, output, parameters::normal_map(normal_map)); + return IO::read_XYZ(is, output, parameters::normal_map(normal_map)); } template Vector_3. { - return read_XYZ::type>(is, output, - parameters::normal_map(normal_map)); + return IO::read_XYZ::type>(is, output, + parameters::normal_map(normal_map)); } template Point_3. const Kernel& kernel) ///< geometric traits. { - return read_XYZ(is, output, - parameters::point_map(point_map) - .geom_traits(kernel)); + return IO::read_XYZ(is, output, + parameters::point_map(point_map) + .geom_traits(kernel)); } template Point_3. const Kernel& kernel) ///< geometric traits. { - return read_XYZ::type>(is, output, - parameters::point_map(point_map) - .geom_traits(kernel)); + return IO::read_XYZ::type>(is, output, + parameters::point_map(point_map) + .geom_traits(kernel)); } template Point_3. { - return read_XYZ(is, output, parameters::point_map(point_map)); + return IO::read_XYZ(is, output, parameters::point_map(point_map)); } template Point_3. { - return read_XYZ::type>(is, output, - parameters::point_map(point_map)); + return IO::read_XYZ::type>(is, output, + parameters::point_map(point_map)); } /// \endcond @@ -423,8 +427,8 @@ bool read_xyz_points(std::istream& is, ///< input stream. /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSetProcessing3IOXyz `CGAL::read_XYZ()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSetProcessing3IOXyz `CGAL::IO::read_XYZ()` \endlink should be used instead. \returns `true` if reading was successful, `false` otherwise. */ @@ -435,7 +439,7 @@ CGAL_DEPRECATED bool read_xyz_points(std::istream& is, OutputIterator output, const CGAL_BGL_NP_CLASS& np) { - return read_XYZ(is, output, np); + return IO::read_XYZ(is, output, np); } /// \cond SKIP_IN_MANUAL @@ -445,7 +449,7 @@ template (is, output, parameters::all_default()); + return IO::read_XYZ(is, output, parameters::all_default()); } template ::type>(is, output, np); + return IO::read_XYZ::type>(is, output, np); } template CGAL_DEPRECATED bool read_xyz_points(std::istream& is, OutputIterator output) { - return read_XYZ::type>(is, output, parameters::all_default()); + return IO::read_XYZ::type>(is, output, parameters::all_default()); } /// \endcond diff --git a/Point_set_processing_3/include/CGAL/IO/write_las_points.h b/Point_set_processing_3/include/CGAL/IO/write_las_points.h index fc54662f2b8..14679ca570a 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_las_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_las_points.h @@ -66,6 +66,8 @@ namespace CGAL { +namespace IO { + /** \ingroup PkgPointSetProcessing3IOLas @@ -286,7 +288,7 @@ bool write_LAS(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -341,12 +343,12 @@ bool write_LAS(const std::string& filename, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { std::ofstream os(filename, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_LAS(os, points, np); } @@ -355,24 +357,28 @@ bool write_LAS(const std::string& filename, // variant with default NP template bool write_LAS(std::ostream& os, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_LAS(os, points, CGAL::Point_set_processing_3::parameters::all_default(points)); } template bool write_LAS(const std::string& filename, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { std::ofstream os(filename, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_LAS(os, points, parameters::all_default()); } /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE +using IO::make_las_point_writer; + /// \cond SKIP_IN_MANUAL template Point_3. { CGAL::Iterator_range points (first, beyond); - return write_LAS(os, points, parameters::point_map(point_map)); + return IO::write_LAS(os, points, parameters::point_map(point_map)); } template @@ -394,7 +400,7 @@ bool write_las_points(std::ostream& os, ///< output stream. ForwardIterator beyond) ///< past-the-end input point. { CGAL::Iterator_range points (first, beyond); - return write_LAS(os, points); + return IO::write_LAS(os, points); } /// \endcond @@ -402,7 +408,7 @@ bool write_las_points(std::ostream& os, ///< output stream. /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_LAS_with_properties()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_LAS_with_properties()` should be used instead. */ template point_property, + IO::LAS_property::X, + IO::LAS_property::Y, + IO::LAS_property::Z> point_property, PropertyHandler&& ... properties) { - return write_LAS_with_properties(os, points, point_property, std::forward(properties)...); + return IO::write_LAS_with_properties(os, points, point_property, std::forward(properties)...); } /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_LAS()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_LAS()` should be used instead. */ template bool write_las_points(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np) { - return write_LAS(os, points, np); + return IO::write_LAS(os, points, np); } #endif //CGAL_NO_DEPRECATED_CODE diff --git a/Point_set_processing_3/include/CGAL/IO/write_off_points.h b/Point_set_processing_3/include/CGAL/IO/write_off_points.h index ab5a9169338..8985e286e39 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_off_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_off_points.h @@ -89,6 +89,8 @@ bool write_OFF_PSP(std::ostream& os, } // namespace internal } // namespace Point_set_processing_3 +namespace IO { + /** \ingroup PkgPointSetProcessing3IOOff @@ -135,7 +137,7 @@ bool write_OFF(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -146,7 +148,7 @@ bool write_OFF(std::ostream& os, template bool write_OFF(std::ostream& os, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_OFF(os, points, parameters::all_default()); } @@ -202,7 +204,7 @@ bool write_OFF(const std::string& filename, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -215,7 +217,7 @@ bool write_OFF(const std::string& filename, template bool write_OFF(const std::string& filename, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { std::ofstream os(filename); return write_OFF(os, points, parameters::all_default()); @@ -223,6 +225,8 @@ bool write_OFF(const std::string& filename, const PointRange& points, /// \endcond +} // IO namespace + #ifndef CGAL_NO_DEPRECATED_CODE /// \cond SKIP_IN_MANUAL @@ -319,13 +323,13 @@ bool write_off_points(std::ostream& os, ///< output stream. /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSetProcessing3IOOff `CGAL::write_OFF()` \endlink should be used instead. + \deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSetProcessing3IOOff `CGAL::IO::write_OFF()` \endlink should be used instead. */ template CGAL_DEPRECATED bool write_off_points(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np) { - return write_OFF(os, points, np); + return IO::write_OFF(os, points, np); } /// \cond SKIP_IN_MANUAL @@ -334,7 +338,7 @@ CGAL_DEPRECATED bool write_off_points(std::ostream& os, const PointRange& points template CGAL_DEPRECATED bool write_off_points(std::ostream& os, const PointRange& points) { - return write_OFF(os, points, parameters::all_default()); + return IO::write_OFF(os, points, parameters::all_default()); } /// \endcond diff --git a/Point_set_processing_3/include/CGAL/IO/write_ply_points.h b/Point_set_processing_3/include/CGAL/IO/write_ply_points.h index 14cf9256949..33c1b8da3b5 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_ply_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_ply_points.h @@ -40,6 +40,8 @@ namespace CGAL { +namespace IO { + #ifdef DOXYGEN_RUNNING // Document some parts from Stream_support here for convenience /** \ingroup PkgPointSetProcessing3IOPly @@ -92,7 +94,7 @@ namespace CGAL { user wants to write a complex object as several %PLY properties. In that case, a specialization of `Output_rep` must be provided for `PropertyMap::value_type` that handles both ASCII - and binary output (see `CGAL::get_mode()`). + and binary output (see `CGAL::IO::get_mode()`). \attention When writing to a binary file, the flag `std::ios::binary` flag must be set during the creation of the `ofstream`. @@ -123,17 +125,17 @@ template (properties)...); + internal::output_property_header (os, std::forward(properties)...); os << "end_header" << std::endl; // Write positions + normals for(typename PointRange::const_iterator it = points.begin(); it != points.end(); it++) - IO::internal::output_properties (os, it, std::forward(properties)...); + internal::output_properties (os, it, std::forward(properties)...); return !os.fail(); } @@ -189,7 +191,7 @@ bool write_PLY(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -226,7 +228,7 @@ bool write_PLY(std::ostream& os, template bool write_PLY(std::ostream& os, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_PLY(os, points, parameters::all_default()); } @@ -288,7 +290,7 @@ bool write_PLY(const std::string& filename, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -296,13 +298,13 @@ bool write_PLY(const std::string& filename, if(binary) { std::ofstream os(filename, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_PLY(os, points, np); } else { std::ofstream os(filename); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_PLY(os, points, np); } } @@ -311,13 +313,15 @@ bool write_PLY(const std::string& filename, template bool write_PLY(const std::string& filename, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_PLY(filename, points, parameters::all_default()); } /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /// \cond SKIP_IN_MANUAL @@ -333,7 +337,7 @@ bool write_ply_points_and_normals(std::ostream& os, ///< output stream. VectorMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { CGAL::Iterator_range points (first, beyond); - return write_PLY(os, points, parameters::point_map(point_map) + return IO::write_PLY(os, points, parameters::point_map(point_map) .normal_map(normal_map)); } @@ -346,7 +350,7 @@ bool write_ply_points_and_normals(std::ostream& os, ///< output stream. VectorMap normal_map) ///< property map: value_type of OutputIterator -> Vector_3. { CGAL::Iterator_range points(first, beyond); - return write_PLY(os, points, parameters::normal_map (normal_map)); + return IO::write_PLY(os, points, parameters::normal_map (normal_map)); } template Point_3. { CGAL::Iterator_range points(first, beyond); - return write_PLY(os, points, parameters::point_map(point_map)); + return IO::write_PLY(os, points, parameters::point_map(point_map)); } template @@ -368,7 +372,7 @@ bool write_ply_points(std::ostream& os, ///< output stream. ForwardIterator beyond) ///< past-the-end input point. { CGAL::Iterator_range points (first, beyond); - return write_PLY(os, points); + return IO::write_PLY(os, points); } /// \endcond @@ -376,8 +380,8 @@ bool write_ply_points(std::ostream& os, ///< output stream. /** \ingroup PkgPointSetProcessing3IODeprecated -\deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSetProcessing3IOPly `CGAL::write_PLY_with_properties()` \endlink should be used instead. +\deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSetProcessing3IOPly `CGAL::IO::write_PLY_with_properties()` \endlink should be used instead. */ template @@ -385,19 +389,19 @@ CGAL_DEPRECATED bool write_ply_points_with_properties(std::ostream& os, ///< out const PointRange& points, ///< input point range. PropertyHandler&& ... properties) ///< parameter pack of property handlers { - return write_PLY_with_properties(os, points, std::forward(properties)...); + return IO::write_PLY_with_properties(os, points, std::forward(properties)...); } /** \ingroup PkgPointSetProcessing3IODeprecated -\deprecated This function is deprecated since \cgal 5.2, - \link PkgPointSetProcessing3IOPly `CGAL::write_PLY()` \endlink should be used instead. +\deprecated This function is deprecated since \cgal 5.3, + \link PkgPointSetProcessing3IOPly `CGAL::IO::write_PLY()` \endlink should be used instead. */ template CGAL_DEPRECATED bool write_ply_points(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np) { - return write_PLY(os, points, np); + return IO::write_PLY(os, points, np); } /// \cond SKIP_IN_MANUAL @@ -405,7 +409,7 @@ CGAL_DEPRECATED bool write_ply_points(std::ostream& os, const PointRange& points template CGAL_DEPRECATED bool write_ply_points(std::ostream& os, const PointRange& points) { - return write_PLY(os, points, parameters::all_default()); + return IO::write_PLY(os, points, parameters::all_default()); } /// \endcond diff --git a/Point_set_processing_3/include/CGAL/IO/write_points.h b/Point_set_processing_3/include/CGAL/IO/write_points.h index e663fbe318f..61d64bfe8b1 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_points.h @@ -33,6 +33,8 @@ namespace CGAL { +namespace IO { + /** \ingroup PkgPointSetProcessing3IO @@ -96,11 +98,11 @@ bool write_points(const std::string& fname, const PointRange& points, const CGAL_BGL_NP_CLASS& np, #ifndef DOXYGEN_RUNNING - typename boost::enable_if >::type* = nullptr + typename boost::enable_if >::type* = nullptr #endif ) { - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == "xyz" || ext == "pwn") return write_XYZ(fname, points, np); @@ -120,13 +122,13 @@ bool write_points(const std::string& fname, template bool write_points(const std::string& fname,const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_points(fname, points, parameters::all_default()); } /// \endcond -} // namespace CGAL +} } // namespace CGAL::IO #endif // CGAL_POINT_SET_PROCESSING_WRITE_POINTS_H diff --git a/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h b/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h index 5ccfa93d943..403f1d25f05 100644 --- a/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h +++ b/Point_set_processing_3/include/CGAL/IO/write_xyz_points.h @@ -86,6 +86,8 @@ bool write_XYZ_PSP(std::ostream& os, } // namespace internal } // Point_set_processing_3 +namespace IO { + /** \ingroup PkgPointSetProcessing3IOXyz @@ -132,7 +134,7 @@ bool write_XYZ(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -143,7 +145,7 @@ bool write_XYZ(std::ostream& os, template bool write_XYZ(std::ostream& os, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_XYZ(os, points, parameters::all_default()); } @@ -196,7 +198,7 @@ bool write_XYZ(const std::string& filename, const PointRange& points, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -208,7 +210,7 @@ bool write_XYZ(const std::string& filename, template bool write_XYZ(const std::string& filename, const PointRange& points, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { std::ofstream os(filename); return write_XYZ(os, points, parameters::all_default()); @@ -216,6 +218,8 @@ bool write_XYZ(const std::string& filename, const PointRange& points, /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /// \cond SKIP_IN_MANUAL @@ -233,10 +237,10 @@ bool write_xyz_points_and_normals(std::ostream& os, ///< output stream. const Kernel& /*kernel*/) ///< geometric traits. { CGAL::Iterator_range points(first, beyond); - return write_XYZ(os, points, - parameters::point_map(point_map) - .normal_map(normal_map) - .geom_traits(Kernel())); + return IO::write_XYZ(os, points, + parameters::point_map(point_map) + .normal_map(normal_map) + .geom_traits(Kernel())); } template Vector_3. { CGAL::Iterator_range points (first, beyond); - return write_XYZ(os, points, - parameters::point_map(point_map) - .normal_map(normal_map)); + return IO::write_XYZ(os, points, + parameters::point_map(point_map) + .normal_map(normal_map)); } template Vector_3. { CGAL::Iterator_range points(first, beyond); - return write_XYZ(os, points, parameters::normal_map(normal_map)); + return IO::write_XYZ(os, points, parameters::normal_map(normal_map)); } template points (first, beyond); - return write_XYZ(os, points, parameters::point_map(point_map) + return IO::write_XYZ(os, points, parameters::point_map(point_map) .geom_traits (kernel)); } @@ -292,7 +296,7 @@ bool write_xyz_points(std::ostream& os, ///< output stream. PointMap point_map) ///< property map: value_type of OutputIterator -> Point_3. { CGAL::Iterator_range points(first, beyond); - return write_XYZ(os, points, parameters::point_map(point_map)); + return IO::write_XYZ(os, points, parameters::point_map(point_map)); } template @@ -302,7 +306,7 @@ bool write_xyz_points(std::ostream& os, ///< output stream. ForwardIterator beyond) ///< past-the-end input point. { CGAL::Iterator_range points (first, beyond); - return write_XYZ(os, points); + return IO::write_XYZ(os, points); } /// \endcond @@ -310,13 +314,13 @@ bool write_xyz_points(std::ostream& os, ///< output stream. /** \ingroup PkgPointSetProcessing3IODeprecated - \deprecated This function is deprecated since \cgal 5.2, + \deprecated This function is deprecated since \cgal 5.3, \link PkgPointSetProcessing3IOXyz `CGAL::write_XYZ()` \endlink should be used instead. */ template CGAL_DEPRECATED bool write_xyz_points(std::ostream& os, const PointRange& points, const CGAL_BGL_NP_CLASS& np) { - return write_XYZ(os, points, np); + return IO::write_XYZ(os, points, np); } /// \cond SKIP_IN_MANUAL @@ -324,7 +328,7 @@ CGAL_DEPRECATED bool write_xyz_points(std::ostream& os, const PointRange& points template CGAL_DEPRECATED bool write_xyz_points(std::ostream& os, const PointRange& points) { - return write_XYZ(os, points, parameters::all_default(points)); + return IO::write_XYZ(os, points, parameters::all_default()); } /// \endcond diff --git a/Point_set_processing_3/include/CGAL/Point_set_processing_3/internal/Callback_wrapper.h b/Point_set_processing_3/include/CGAL/Point_set_processing_3/internal/Callback_wrapper.h index c52826db44b..229eae5897a 100644 --- a/Point_set_processing_3/include/CGAL/Point_set_processing_3/internal/Callback_wrapper.h +++ b/Point_set_processing_3/include/CGAL/Point_set_processing_3/internal/Callback_wrapper.h @@ -13,10 +13,10 @@ #define CGAL_PSP_INTERNAL_CALLBACK_WRAPPER_H #include - +#include +#include #include -#include namespace CGAL { namespace Point_set_processing_3 { @@ -91,11 +91,11 @@ template <> class Callback_wrapper { const std::function& m_callback; - cpp11::atomic* m_advancement; - cpp11::atomic* m_interrupted; + std::atomic* m_advancement; + std::atomic* m_interrupted; std::size_t m_size; bool m_creator; - cpp11::thread* m_thread; + std::thread* m_thread; // assignment operator shouldn't be used (m_callback is const ref) Callback_wrapper& operator= (const Callback_wrapper&) @@ -109,17 +109,17 @@ public: std::size_t advancement = 0, bool interrupted = false) : m_callback (callback) - , m_advancement (new cpp11::atomic()) - , m_interrupted (new cpp11::atomic()) + , m_advancement (new std::atomic()) + , m_interrupted (new std::atomic()) , m_size (size) , m_creator (true) , m_thread (nullptr) { - // cpp11::atomic only has default constructor, initialization done in two steps + // std::atomic only has default constructor, initialization done in two steps *m_advancement = advancement; *m_interrupted = interrupted; if (m_callback) - m_thread = new cpp11::thread (*this); + m_thread = new std::thread (*this); } Callback_wrapper (const Callback_wrapper& other) @@ -150,11 +150,11 @@ public: *m_advancement = advancement; *m_interrupted = interrupted; if (m_callback) - m_thread = new cpp11::thread (*this); + m_thread = new std::thread (*this); } - cpp11::atomic& advancement() { return *m_advancement; } - cpp11::atomic& interrupted() { return *m_interrupted; } + std::atomic& advancement() { return *m_advancement; } + std::atomic& interrupted() { return *m_interrupted; } void join() { if (m_thread != nullptr) @@ -169,7 +169,9 @@ public: *m_interrupted = true; if (*m_interrupted) return; - cpp11::sleep_for (0.00001); + typedef std::chrono::nanoseconds nanoseconds; + nanoseconds ns (nanoseconds::rep (1000000000.0 * 0.00001)); + std::this_thread::sleep_for(ns); } if (m_callback) m_callback (1.); diff --git a/Point_set_processing_3/include/CGAL/cluster_point_set.h b/Point_set_processing_3/include/CGAL/cluster_point_set.h index 08e4d5a573c..a90b983e86e 100644 --- a/Point_set_processing_3/include/CGAL/cluster_point_set.h +++ b/Point_set_processing_3/include/CGAL/cluster_point_set.h @@ -139,6 +139,7 @@ std::size_t cluster_point_set (PointRange& points, // basic geometric types typedef typename PointRange::iterator iterator; typedef typename iterator::value_type value_type; + typedef typename boost::property_traits::value_type Cluster_index_t; typedef typename CGAL::GetPointMap::type PointMap; typedef typename Point_set_processing_3::GetK::Kernel Kernel; typedef typename Point_set_processing_3::GetAdjacencies::type Adjacencies; @@ -175,7 +176,7 @@ std::size_t cluster_point_set (PointRange& points, // Init cluster map with -1 for (const value_type& p : points) - put (cluster_map, p, -1); + put (cluster_map, p, Cluster_index_t(-1)); Neighbor_query neighbor_query (points, point_map); @@ -190,7 +191,7 @@ std::size_t cluster_point_set (PointRange& points, { const value_type& p = *it; - if (int(get (cluster_map, p)) != -1) + if (get (cluster_map, p) != Cluster_index_t(-1)) continue; todo.push (it); @@ -200,10 +201,10 @@ std::size_t cluster_point_set (PointRange& points, iterator current = todo.front(); todo.pop(); - if (int(get (cluster_map, *current)) != -1) + if (get (cluster_map, *current) != Cluster_index_t(-1)) continue; - put (cluster_map, *current, nb_clusters); + put (cluster_map, *current, Cluster_index_t(nb_clusters)); ++ done; if (callback && !callback (callback_factor * (done + 1) / double(size))) @@ -230,7 +231,7 @@ std::size_t cluster_point_set (PointRange& points, done = 0; for (const value_type& p : points) { - std::size_t c0 = get (cluster_map, p); + std::size_t c0 = std::size_t(get (cluster_map, p)); neighbors.clear(); neighbor_query.get_iterators (get (point_map, p), 0, neighbor_radius, @@ -238,7 +239,7 @@ std::size_t cluster_point_set (PointRange& points, for (const iterator& it : neighbors) { - std::size_t c1 = get (cluster_map, *it); + std::size_t c1 = std::size_t(get (cluster_map, *it)); if (c0 < c1) adj.push_back (std::make_pair (c0, c1)); else if (c0 > c1) diff --git a/Point_set_processing_3/test/Point_set_processing_3/analysis_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/analysis_test.cpp index 5745b19fbb3..0912829311c 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/analysis_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/analysis_test.cpp @@ -99,7 +99,7 @@ int main(int argc, char * argv[]) std::cerr << "Open " << argv[i] << " for reading..." << std::endl; // If XYZ file format: - if(CGAL::read_points(argv[i], std::back_inserter(points))) + if(CGAL::IO::read_points(argv[i], std::back_inserter(points))) { std::cerr << "ok (" << points.size() << " points)" << std::endl; } diff --git a/Point_set_processing_3/test/Point_set_processing_3/bilateral_smoothing_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/bilateral_smoothing_test.cpp index 45dad2baa51..479dc82fd93 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/bilateral_smoothing_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/bilateral_smoothing_test.cpp @@ -108,10 +108,10 @@ int main(int argc, char * argv[]) std::cerr << "Opening " << argv[i] << " for reading..." << std::endl; // If XYZ file format: - if(CGAL::read_points(argv[i], - std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()))) + if(CGAL::IO::read_points(argv[i], + std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()))) { std::cerr << "ok (" << points.size() << " points)" << std::endl; } diff --git a/Point_set_processing_3/test/Point_set_processing_3/edge_aware_upsample_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/edge_aware_upsample_test.cpp index c6279fbeb48..efd939f928b 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/edge_aware_upsample_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/edge_aware_upsample_test.cpp @@ -118,10 +118,10 @@ int main(int argc, char * argv[]) std::cerr << "Opening " << argv[i] << " for reading..." << std::endl; // If XYZ file format: - if(CGAL::read_points(argv[i], - std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()))) + if(CGAL::IO::read_points(argv[i], + std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()))) { std::cerr << "ok (" << points.size() << " points)" << std::endl; } diff --git a/Point_set_processing_3/test/Point_set_processing_3/normal_estimation_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/normal_estimation_test.cpp index cd011c9b71f..a2af205fa05 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/normal_estimation_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/normal_estimation_test.cpp @@ -310,10 +310,10 @@ int main(int argc, char * argv[]) { std::ifstream stream(input_filename.c_str()); success = stream && - CGAL::read_OFF(stream, - std::back_inserter(points), - CGAL::parameters::normal_map - (CGAL::make_normal_of_point_with_normal_map(PointList::value_type())) + CGAL::IO::read_OFF(stream, + std::back_inserter(points), + CGAL::parameters::normal_map + (CGAL::make_normal_of_point_with_normal_map(PointList::value_type())) ); } // If XYZ file format @@ -321,9 +321,9 @@ int main(int argc, char * argv[]) extension == ".pwn" || extension == ".PWN") { std::ifstream stream(input_filename.c_str()); - success = stream && CGAL::read_XYZ(stream, - std::back_inserter(points), - CGAL::parameters::normal_map(CGAL::make_normal_of_point_with_normal_map(PointList::value_type()))); + success = stream && CGAL::IO::read_XYZ(stream, + std::back_inserter(points), + CGAL::parameters::normal_map(CGAL::make_normal_of_point_with_normal_map(PointList::value_type()))); } if (success) { diff --git a/Point_set_processing_3/test/Point_set_processing_3/read_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/read_test.cpp index e4dacad400d..1f3217ca8c4 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/read_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/read_test.cpp @@ -17,33 +17,33 @@ typedef std::pair PointVectorPair; bool read(std::string s) { std::vector pv_pairs; - return CGAL::read_points(s, back_inserter(pv_pairs), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map())); + return CGAL::IO::read_points(s, back_inserter(pv_pairs), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map())); } bool read(std::string s, std::vector& pv_pairs) { - return CGAL::read_points(s, back_inserter(pv_pairs), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map())); + return CGAL::IO::read_points(s, back_inserter(pv_pairs), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map())); } bool read_off(std::string s, std::vector& pv_pairs) { - return CGAL::read_OFF(s, back_inserter(pv_pairs), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map())); + return CGAL::IO::read_OFF(s, back_inserter(pv_pairs), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map())); } bool read_ply(std::string s, std::vector& pv_pairs) { - return CGAL::read_PLY(s, back_inserter(pv_pairs), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map())); + return CGAL::IO::read_PLY(s, back_inserter(pv_pairs), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map())); } int main() diff --git a/Point_set_processing_3/test/Point_set_processing_3/read_test_with_different_pmaps.cpp b/Point_set_processing_3/test/Point_set_processing_3/read_test_with_different_pmaps.cpp index 316e832db0d..93585569d14 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/read_test_with_different_pmaps.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/read_test_with_different_pmaps.cpp @@ -77,7 +77,7 @@ bool test_no_deduction_points_and_normals_xyz(const char* file_name) // read with custom output iterator type dummy_counter::counter = 0; std::ifstream input(file_name); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, back_inserter(indices), CGAL::parameters::point_map (points). normal_map (normals). @@ -87,7 +87,7 @@ bool test_no_deduction_points_and_normals_xyz(const char* file_name) input.clear(); input.close(); input.open(file_name); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, back_inserter(pv_pairs), CGAL::parameters::point_map(CGAL::First_of_pair_property_map()). normal_map(CGAL::Second_of_pair_property_map()). @@ -107,7 +107,7 @@ bool test_no_deduction_points_and_normals_off(const char* file_name) // read with custom output iterator type dummy_counter::counter = 0; std::ifstream input(file_name); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, back_inserter(indices), CGAL::parameters::point_map(points). normal_map(normals). @@ -117,7 +117,7 @@ bool test_no_deduction_points_and_normals_off(const char* file_name) input.clear(); input.close(); input.open(file_name); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, back_inserter(pv_pairs), CGAL::parameters::point_map(CGAL::First_of_pair_property_map()). normal_map(CGAL::Second_of_pair_property_map()). @@ -136,7 +136,7 @@ bool test_no_deduction_points_xyz(const char* file_name) // read with custom output iterator type dummy_counter::counter = 0; std::ifstream input(file_name); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, back_inserter(indices), CGAL::parameters::point_map(points_1).geom_traits(Kernel())); @@ -144,7 +144,7 @@ bool test_no_deduction_points_xyz(const char* file_name) input.clear(); input.close(); input.open(file_name); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, back_inserter(points_2), CGAL::parameters::point_map(CGAL::Identity_property_map()). geom_traits(Kernel())); @@ -162,7 +162,7 @@ bool test_no_deduction_points_off(const char* file_name) // read with custom output iterator type dummy_counter::counter = 0; std::ifstream input(file_name); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, back_inserter(indices), CGAL::parameters::point_map(points_1). geom_traits(Kernel())); @@ -171,7 +171,7 @@ bool test_no_deduction_points_off(const char* file_name) input.clear(); input.close(); input.open(file_name); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, back_inserter(points_2), CGAL::parameters::point_map(CGAL::Identity_property_map()). geom_traits(Kernel())); @@ -186,14 +186,14 @@ void compile_test() { std::ifstream input; input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(points)); input.clear(); input.close(); input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(points), CGAL::parameters::point_map(CGAL::Identity_property_map())); @@ -201,7 +201,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(points), CGAL::parameters::point_map(CGAL::Identity_property_map()). @@ -211,21 +211,21 @@ void compile_test() { // this will span all OutputIteratorValueType versions input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(points)); input.clear(); input.close(); //----------------------------------------------------------------------- input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(points)); input.clear(); input.close(); input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(points), CGAL::parameters::point_map(CGAL::Identity_property_map())); @@ -233,7 +233,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(points), CGAL::parameters::point_map(CGAL::Identity_property_map()). @@ -243,14 +243,14 @@ void compile_test() { // this will span all OutputIteratorValueType versions input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(points)); input.clear(); input.close(); //----------------------------------------------------------------------- input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(points), CGAL::parameters::normal_map(boost::dummy_property_map())); @@ -258,7 +258,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(pv_pairs), CGAL::parameters::point_map(CGAL::First_of_pair_property_map()). @@ -267,7 +267,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(pv_pairs), CGAL::parameters::point_map(CGAL::First_of_pair_property_map()). @@ -277,7 +277,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.xyz"); - CGAL::read_XYZ( + CGAL::IO::read_XYZ( input, std::front_inserter(points), CGAL::parameters::normal_map(boost::dummy_property_map())); @@ -285,7 +285,7 @@ void compile_test() { input.close(); //----------------------------------------------------------------------- input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(points), CGAL::parameters::normal_map(boost::dummy_property_map())); @@ -293,7 +293,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(pv_pairs), CGAL::parameters::point_map(CGAL::First_of_pair_property_map()). @@ -302,7 +302,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(pv_pairs), CGAL::parameters::point_map(CGAL::First_of_pair_property_map()). @@ -312,7 +312,7 @@ void compile_test() { input.close(); input.open("data/read_test/simple.off"); - CGAL::read_OFF( + CGAL::IO::read_OFF( input, std::front_inserter(points), CGAL::parameters::normal_map(boost::dummy_property_map())); diff --git a/Point_set_processing_3/test/Point_set_processing_3/remove_outliers_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/remove_outliers_test.cpp index 4f2966d2717..ff8b079ac9e 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/remove_outliers_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/remove_outliers_test.cpp @@ -114,7 +114,7 @@ int main(int argc, char * argv[]) std::cerr << "Open " << argv[i] << " for reading..." << std::endl; // If XYZ file format: - if(CGAL::read_points(argv[i], std::back_inserter(points))) + if(CGAL::IO::read_points(argv[i], std::back_inserter(points))) { std::cerr << "ok (" << points.size() << " points)" << std::endl; } diff --git a/Point_set_processing_3/test/Point_set_processing_3/smoothing_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/smoothing_test.cpp index 30ba51e94ff..0c9f141c13d 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/smoothing_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/smoothing_test.cpp @@ -101,7 +101,7 @@ int main(int argc, char * argv[]) std::cerr << "Open " << argv[i] << " for reading..." << std::endl; // If XYZ file format: - if(CGAL::read_points(argv[i], std::back_inserter(points))) + if(CGAL::IO::read_points(argv[i], std::back_inserter(points))) { std::cerr << "ok (" << points.size() << " points)" << std::endl; } diff --git a/Point_set_processing_3/test/Point_set_processing_3/test_read_write_point_set.cpp b/Point_set_processing_3/test/Point_set_processing_3/test_read_write_point_set.cpp index 9b41a439b14..0dd90f9623d 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/test_read_write_point_set.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/test_read_write_point_set.cpp @@ -86,14 +86,14 @@ bool test_points_with_np(std::string s) points.push_back(std::make_pair(Point_3(0,0,1), Vector_3(0,0,1))); points.push_back(std::make_pair(Point_3(1,1,1), Vector_3(1,1,1))); - bool ok = CGAL::write_points(s, points, - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map())); + bool ok = CGAL::IO::write_points(s, points, + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map())); assert(ok); std::vector pv_pairs; - ok = CGAL::read_points(s, std::back_inserter(pv_pairs), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map())); + ok = CGAL::IO::read_points(s, std::back_inserter(pv_pairs), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map())); assert(ok); assert(pv_pairs[0] == std::make_pair(Point_3(0,0,0), Vector_3(0,0,0))); assert(pv_pairs[1] == std::make_pair(Point_3(1,0,0), Vector_3(1,0,0))); @@ -109,47 +109,47 @@ void test_##TYPE(const std::string& s) { \ std::cout << "Test Point_set_3: " << s << " extension: " << #TYPE << std::endl; \ CGAL::Point_set_3 ps; \ - bool ok = CGAL::read_##TYPE(s, ps); \ + bool ok = CGAL::IO::read_##TYPE(s, ps); \ assert(ok); \ ps.clear(); \ - ok = CGAL::read_##TYPE(s.c_str(), ps); \ + ok = CGAL::IO::read_##TYPE(s.c_str(), ps); \ assert(ok); \ ps.clear(); \ std::ifstream in(s); \ - ok = CGAL::read_##TYPE(in, ps); \ + ok = CGAL::IO::read_##TYPE(in, ps); \ assert(ok); \ const char* ext = type; \ std::string fname = "tmp."; \ fname.append(ext); \ - ok = CGAL::write_##TYPE(fname, ps); \ + ok = CGAL::IO::write_##TYPE(fname, ps); \ assert(ok); \ - ok = CGAL::write_##TYPE(fname, ps, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_##TYPE(fname, ps, CGAL::parameters::stream_precision(10)); \ assert(ok); \ - ok = CGAL::write_##TYPE(fname.c_str(), ps); \ + ok = CGAL::IO::write_##TYPE(fname.c_str(), ps); \ assert(ok); \ - ok = CGAL::write_##TYPE(fname.c_str(), ps, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_##TYPE(fname.c_str(), ps, CGAL::parameters::stream_precision(10)); \ assert(ok); \ std::ofstream out(fname); \ - ok = CGAL::write_##TYPE(out, ps); \ + ok = CGAL::IO::write_##TYPE(out, ps); \ assert(ok); \ std::ofstream out2(fname); \ - ok = CGAL::write_##TYPE(out2, ps, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_##TYPE(out2, ps, CGAL::parameters::stream_precision(10)); \ assert(ok); \ CGAL::Point_set_3 ps2; \ std::ifstream is(fname); \ - ok = CGAL::read_##TYPE(is, ps2); \ + ok = CGAL::IO::read_##TYPE(is, ps2); \ assert(ok); \ assert(ps_are_equal(ps, ps2)); \ - ok = CGAL::write_point_set(fname, ps2); \ + ok = CGAL::IO::write_point_set(fname, ps2); \ assert(ok); \ - ok = CGAL::write_point_set(fname, ps2, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_point_set(fname, ps2, CGAL::parameters::stream_precision(10)); \ assert(ok); \ - ok = CGAL::write_point_set(fname.c_str(), ps2); \ + ok = CGAL::IO::write_point_set(fname.c_str(), ps2); \ assert(ok); \ - ok = CGAL::write_point_set(fname.c_str(), ps2, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_point_set(fname.c_str(), ps2, CGAL::parameters::stream_precision(10)); \ assert(ok); \ ps2.clear(); \ - ok = CGAL::read_point_set(fname, ps2); \ + ok = CGAL::IO::read_point_set(fname, ps2); \ assert(ok); \ assert(ps_are_equal(ps, ps2)); \ } @@ -162,44 +162,44 @@ void test_LAS(const std::string& s) { std::cout << "Test Point_set_3: " << s << " extension: las" < ps; - bool ok = CGAL::read_LAS(s, ps); + bool ok = CGAL::IO::read_LAS(s, ps); assert(ok); ps.clear(); - ok = CGAL::read_LAS(s.c_str(), ps); + ok = CGAL::IO::read_LAS(s.c_str(), ps); assert(ok); ps.clear(); std::ifstream in(s, std::ios::binary); - CGAL::set_mode(in, CGAL::IO::BINARY); - ok = CGAL::read_LAS(in, ps); + CGAL::IO::set_mode(in, CGAL::IO::BINARY); + ok = CGAL::IO::read_LAS(in, ps); assert(ok); const char* ext = "las"; std::string fname = "tmp."; fname.append(ext); - ok = CGAL::write_LAS(fname, ps); + ok = CGAL::IO::write_LAS(fname, ps); assert(ok); - ok = CGAL::write_LAS(fname.c_str(), ps); + ok = CGAL::IO::write_LAS(fname.c_str(), ps); assert(ok); std::ofstream out(fname, std::ios::binary); - CGAL::set_mode(out, CGAL::IO::BINARY); - ok = CGAL::write_LAS(out, ps); + CGAL::IO::set_mode(out, CGAL::IO::BINARY); + ok = CGAL::IO::write_LAS(out, ps); assert(ok); CGAL::Point_set_3 ps2; std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); - ok = CGAL::read_LAS(is, ps2); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); + ok = CGAL::IO::read_LAS(is, ps2); assert(ok); assert(ps_are_equal(ps, ps2)); - ok = CGAL::write_point_set(fname, ps2); + ok = CGAL::IO::write_point_set(fname, ps2); assert(ok); - ok = CGAL::write_point_set(fname, ps2, CGAL::parameters::stream_precision(10)); + ok = CGAL::IO::write_point_set(fname, ps2, CGAL::parameters::stream_precision(10)); assert(ok); - ok = CGAL::write_point_set(fname.c_str(), ps2); + ok = CGAL::IO::write_point_set(fname.c_str(), ps2); assert(ok); - ok = CGAL::write_point_set(fname.c_str(), ps2, CGAL::parameters::stream_precision(10)); + ok = CGAL::IO::write_point_set(fname.c_str(), ps2, CGAL::parameters::stream_precision(10)); assert(ok); ps2.clear(); - ok = CGAL::read_point_set(fname, ps2); + ok = CGAL::IO::read_point_set(fname, ps2); assert(ok); assert(ps_are_equal(ps, ps2)); } @@ -212,41 +212,41 @@ void test_points_##TYPE(const std::string& s) { \ std::cout << "Test points: " << s << " extension: " << #TYPE << std::endl; \ std::vector ps; \ - bool ok = CGAL::read_##TYPE(s, std::back_inserter(ps)); \ + bool ok = CGAL::IO::read_##TYPE(s, std::back_inserter(ps)); \ assert(ok); \ ps.clear(); \ - ok = CGAL::read_##TYPE(s.c_str(), std::back_inserter(ps)); \ + ok = CGAL::IO::read_##TYPE(s.c_str(), std::back_inserter(ps)); \ assert(ok); \ ps.clear(); \ std::ifstream in(s); \ - ok = CGAL::read_##TYPE(in, std::back_inserter(ps)); \ + ok = CGAL::IO::read_##TYPE(in, std::back_inserter(ps)); \ assert(ok); \ const char* ext = type; \ std::string fname = "tmp."; \ fname.append(ext); \ - ok = CGAL::write_##TYPE(fname, ps); \ + ok = CGAL::IO::write_##TYPE(fname, ps); \ assert(ok); \ - ok = CGAL::write_##TYPE(fname, ps, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_##TYPE(fname, ps, CGAL::parameters::stream_precision(10)); \ assert(ok); \ - ok = CGAL::write_##TYPE(fname.c_str(), ps); \ + ok = CGAL::IO::write_##TYPE(fname.c_str(), ps); \ assert(ok); \ - ok = CGAL::write_##TYPE(fname.c_str(), ps, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_##TYPE(fname.c_str(), ps, CGAL::parameters::stream_precision(10)); \ assert(ok); \ std::ofstream out(fname); \ - ok = CGAL::write_##TYPE(out, ps); \ + ok = CGAL::IO::write_##TYPE(out, ps); \ assert(ok); \ std::ofstream out2(fname); \ - ok = CGAL::write_##TYPE(out2, ps, CGAL::parameters::stream_precision(10)); \ + ok = CGAL::IO::write_##TYPE(out2, ps, CGAL::parameters::stream_precision(10)); \ assert(ok); \ std::vector ps2; \ std::ifstream is(fname); \ - ok = CGAL::read_##TYPE(is, std::back_inserter(ps2)); \ + ok = CGAL::IO::read_##TYPE(is, std::back_inserter(ps2)); \ assert(ok); \ assert(points_are_equal(ps, ps2)); \ - ok = CGAL::write_points(fname, ps2); \ + ok = CGAL::IO::write_points(fname, ps2); \ assert(ok); \ ps2.clear(); \ - ok = CGAL::read_points(fname, std::back_inserter(ps2)); \ + ok = CGAL::IO::read_points(fname, std::back_inserter(ps2)); \ assert(ok); \ assert(points_are_equal(ps, ps2)); \ } @@ -259,41 +259,41 @@ void test_points_LAS(const std::string& s) { std::cout << "Test points: " << s << " extension: LAS "<< std::endl; std::vector ps; - bool ok = CGAL::read_LAS(s, std::back_inserter(ps)); + bool ok = CGAL::IO::read_LAS(s, std::back_inserter(ps)); assert(ok); ps.clear(); - ok = CGAL::read_LAS(s.c_str(), std::back_inserter(ps)); + ok = CGAL::IO::read_LAS(s.c_str(), std::back_inserter(ps)); assert(ok); ps.clear(); std::ifstream in(s, std::ios::binary); - ok = CGAL::read_LAS(in, std::back_inserter(ps)); + ok = CGAL::IO::read_LAS(in, std::back_inserter(ps)); assert(ok); const char* ext = "las"; std::string fname = "tmp."; fname.append(ext); - ok = CGAL::write_LAS(fname, ps); + ok = CGAL::IO::write_LAS(fname, ps); assert(ok); - ok = CGAL::write_LAS(fname, ps, CGAL::parameters::stream_precision(10)); + ok = CGAL::IO::write_LAS(fname, ps, CGAL::parameters::stream_precision(10)); assert(ok); - ok = CGAL::write_LAS(fname.c_str(), ps); + ok = CGAL::IO::write_LAS(fname.c_str(), ps); assert(ok); - ok = CGAL::write_LAS(fname.c_str(), ps, CGAL::parameters::stream_precision(10)); + ok = CGAL::IO::write_LAS(fname.c_str(), ps, CGAL::parameters::stream_precision(10)); assert(ok); std::ofstream out(fname, std::ios::binary); - ok = CGAL::write_LAS(out, ps); + ok = CGAL::IO::write_LAS(out, ps); assert(ok); std::ofstream out2(fname, std::ios::binary); - ok = CGAL::write_LAS(out2, ps, CGAL::parameters::stream_precision(10)); + ok = CGAL::IO::write_LAS(out2, ps, CGAL::parameters::stream_precision(10)); assert(ok); std::vector ps2; std::ifstream is(fname, std::ios::binary); - ok = CGAL::read_LAS(is, std::back_inserter(ps2)); + ok = CGAL::IO::read_LAS(is, std::back_inserter(ps2)); assert(ok); assert(points_are_equal(ps, ps2)); - ok = CGAL::write_points(fname, ps2); + ok = CGAL::IO::write_points(fname, ps2); assert(ok); ps2.clear(); - ok = CGAL::read_points(fname, std::back_inserter(ps2)); + ok = CGAL::IO::read_points(fname, std::back_inserter(ps2)); assert(ok); assert(points_are_equal(ps, ps2)); } diff --git a/Point_set_processing_3/test/Point_set_processing_3/vcm_all_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/vcm_all_test.cpp index f746d972b16..d9df3d8e0ff 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/vcm_all_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/vcm_all_test.cpp @@ -33,9 +33,9 @@ std::cout << "=== test_fandisk ===\n"; points.reserve(nb_points); cov.reserve(nb_points); - if(!CGAL::read_points("data/fandisk.off", - std::back_inserter(points), - CGAL::parameters::point_map(pmap))) + if(!CGAL::IO::read_points("data/fandisk.off", + std::back_inserter(points), + CGAL::parameters::point_map(pmap))) { std::cerr << "Error: cannot read file data/fandisk.off" << std::endl; return false; diff --git a/Point_set_processing_3/test/Point_set_processing_3/wlop_simplify_and_regularize_test.cpp b/Point_set_processing_3/test/Point_set_processing_3/wlop_simplify_and_regularize_test.cpp index 5b5611ed0eb..da4ab598335 100644 --- a/Point_set_processing_3/test/Point_set_processing_3/wlop_simplify_and_regularize_test.cpp +++ b/Point_set_processing_3/test/Point_set_processing_3/wlop_simplify_and_regularize_test.cpp @@ -122,7 +122,7 @@ int main(int argc, char * argv[]) std::cerr << "Opening " << argv[i] << " for reading..." << std::endl; // If XYZ file format: - if(CGAL::read_points(argv[i], std::back_inserter(points))) + if(CGAL::IO::read_points(argv[i], std::back_inserter(points))) { std::cerr << "ok (" << points.size() << " points)" << std::endl; } diff --git a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp index fdbf3a92357..b958d1a23d3 100644 --- a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp +++ b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp @@ -187,9 +187,9 @@ int main(int argc, char * argv[]) // Reads the point set file in points[]. // Note: read_points() requires an iterator over points // + property maps to access each point's position and normal. - if (!CGAL::read_points(input_filename.c_str(), std::back_inserter(points), - CGAL::parameters::point_map(CGAL::make_first_of_pair_property_map(Point_with_normal())) - .normal_map(CGAL::make_second_of_pair_property_map(Point_with_normal())))) + if (!CGAL::IO::read_points(input_filename.c_str(), std::back_inserter(points), + CGAL::parameters::point_map(CGAL::make_first_of_pair_property_map(Point_with_normal())) + .normal_map(CGAL::make_second_of_pair_property_map(Point_with_normal())))) { std::cerr << "Error: cannot read input file!" << input_filename << std::endl; return EXIT_FAILURE; diff --git a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp index 5495f15ec8e..da42893dc93 100644 --- a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp +++ b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp @@ -43,7 +43,7 @@ int main(void) // Note: read_points() requires an iterator over points // + property maps to access each point's position and normal. PointList points; - if(!CGAL::read_points("data/kitten.xyz", std::back_inserter(points), + if(!CGAL::IO::read_points("data/kitten.xyz", std::back_inserter(points), CGAL::parameters::point_map(Point_map()) .normal_map (Normal_map()))) { diff --git a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_function.cpp b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_function.cpp index f12f9e2cc6a..ef45d80cdde 100644 --- a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_function.cpp +++ b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_function.cpp @@ -17,9 +17,9 @@ int main(void) { std::vector points; - if(!CGAL::read_points("data/kitten.xyz", std::back_inserter(points), - CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) - .normal_map(CGAL::Second_of_pair_property_map()))) + if(!CGAL::IO::read_points("data/kitten.xyz", std::back_inserter(points), + CGAL::parameters::point_map(CGAL::First_of_pair_property_map()) + .normal_map(CGAL::Second_of_pair_property_map()))) { std::cerr << "Error: cannot read input file!" << std::endl; return EXIT_FAILURE; diff --git a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/tutorial_example.cpp b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/tutorial_example.cpp index a763eb28516..183e8beddfa 100644 --- a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/tutorial_example.cpp +++ b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/tutorial_example.cpp @@ -140,8 +140,8 @@ int main(int argc, char*argv[]) //! [Output poisson] std::ofstream f ("out.ply", std::ios_base::binary); - CGAL::set_binary_mode (f); - CGAL::write_PLY(f, output_mesh); + CGAL::IO::set_binary_mode (f); + CGAL::IO::write_PLY(f, output_mesh); f.close (); //! [Output poisson] diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h index 7fb5c3e68f3..e526d4ac91f 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h @@ -43,7 +43,7 @@ #include #include -#include +#include #include #include #include @@ -274,7 +274,7 @@ private: // operator() is pre-computed on vertices of *m_tr by solving // the Poisson equation Laplacian(f) = divergent(normals field). - boost::shared_ptr m_tr; + std::shared_ptr m_tr; mutable std::shared_ptr > m_bary; mutable std::vector Dual; mutable std::vector Normal; diff --git a/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_and_parallel_mesh_3.cpp b/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_and_parallel_mesh_3.cpp index cd97fccbb99..8de4b572bff 100644 --- a/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_and_parallel_mesh_3.cpp +++ b/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_and_parallel_mesh_3.cpp @@ -39,7 +39,7 @@ int main(int, char**) std::ifstream stream("data/oni.pwn"); if (!stream || - !CGAL::read_XYZ + !CGAL::IO::read_XYZ (stream, std::back_inserter(points), CGAL::parameters:: point_map(Point_map()). diff --git a/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp b/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp index 6bdd6b504c8..760e505dc27 100644 --- a/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp +++ b/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp @@ -138,7 +138,7 @@ int main(int argc, char * argv[]) // Note: read_points() requires an iterator over points // + property maps to access each point's position and normal. // The position property map can be omitted here as we use iterators over Point_3 elements. - if (!CGAL::read_points( + if (!CGAL::IO::read_points( input_filename.c_str(), std::back_inserter(points), CGAL::parameters::normal_map diff --git a/Polygon/examples/Polygon/Example.cpp b/Polygon/examples/Polygon/Example.cpp index 82b384cd296..2801aa03d42 100644 --- a/Polygon/examples/Polygon/Example.cpp +++ b/Polygon/examples/Polygon/Example.cpp @@ -21,7 +21,7 @@ int main() p.push_back(Point(2,2)); p.push_back(Point(0,4)); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); std::cout << "created the polygon p:" << std::endl; std::cout << p << std::endl; std::cout << std::endl; diff --git a/Polygon/include/CGAL/General_polygon_with_holes_2.h b/Polygon/include/CGAL/General_polygon_with_holes_2.h index 9d086d4c485..ade90e4f77d 100644 --- a/Polygon/include/CGAL/General_polygon_with_holes_2.h +++ b/Polygon/include/CGAL/General_polygon_with_holes_2.h @@ -184,7 +184,7 @@ std::ostream { typename General_polygon_with_holes_2::Hole_const_iterator hit; - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << p.outer_boundary() << ' ' << p.number_of_holes()<< ' '; for (hit = p.holes_begin(); hit != p.holes_end(); ++hit) { diff --git a/Polygon/include/CGAL/Polygon_2/Polygon_2_impl.h b/Polygon/include/CGAL/Polygon_2/Polygon_2_impl.h index c519e2e12e1..ce0714af873 100644 --- a/Polygon/include/CGAL/Polygon_2/Polygon_2_impl.h +++ b/Polygon/include/CGAL/Polygon_2/Polygon_2_impl.h @@ -112,7 +112,7 @@ operator<<(std::ostream &os, const Polygon_2& p) { typename Polygon_2::Vertex_const_iterator i; - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << p.size() << ' '; for (i = p.vertices_begin(); i != p.vertices_end(); ++i) { diff --git a/Polygon/include/CGAL/Polygon_with_holes_2.h b/Polygon/include/CGAL/Polygon_with_holes_2.h index 561c64eefa6..d2796b9e8d8 100644 --- a/Polygon/include/CGAL/Polygon_with_holes_2.h +++ b/Polygon/include/CGAL/Polygon_with_holes_2.h @@ -103,7 +103,7 @@ std::ostream& operator<<(std::ostream &os, { typename Polygon_with_holes_2::Hole_const_iterator i; - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << p.outer_boundary() << ' ' << p.number_of_holes()<<' '; for (i = p.holes_begin(); i != p.holes_end(); ++i) { diff --git a/Polygon/include/CGAL/draw_polygon_2.h b/Polygon/include/CGAL/draw_polygon_2.h index 60522c9263d..fc4ad6f6567 100644 --- a/Polygon/include/CGAL/draw_polygon_2.h +++ b/Polygon/include/CGAL/draw_polygon_2.h @@ -74,7 +74,7 @@ protected: Point prev=p2.vertex(p2.size()-1); - CGAL::Color c(75,160,255); + CGAL::IO::Color c(75,160,255); face_begin(c); for (typename P2::Vertex_const_iterator i=p2.vertices_begin(); diff --git a/Polygon/include/CGAL/draw_polygon_with_holes_2.h b/Polygon/include/CGAL/draw_polygon_with_holes_2.h index 0781eb883f7..7b420eea9b6 100644 --- a/Polygon/include/CGAL/draw_polygon_with_holes_2.h +++ b/Polygon/include/CGAL/draw_polygon_with_holes_2.h @@ -91,7 +91,7 @@ protected: if (p2.outer_boundary().is_empty()) return; - CGAL::Color c(75,160,255); + CGAL::IO::Color c(75,160,255); face_begin(c); compute_one_loop_elements(p2.outer_boundary(), false); diff --git a/Polygon/test/Polygon/AlgorithmTest.cpp b/Polygon/test/Polygon/AlgorithmTest.cpp index 481506f1b4b..0d52b61b998 100644 --- a/Polygon/test/Polygon/AlgorithmTest.cpp +++ b/Polygon/test/Polygon/AlgorithmTest.cpp @@ -23,7 +23,7 @@ void test_collinear_point_filtering(const R&, const char* FileName) std::cerr << "Could not open file " << FileName << "!" << endl; std::exit(1); } - CGAL::set_ascii_mode(from); + CGAL::IO::set_ascii_mode(from); std::vector polygon; std::copy(std::istream_iterator(from), std::istream_iterator(), @@ -82,7 +82,7 @@ void test_polygon(const R&, const Point&, const char* FileName) std::cerr << "could not open file " << FileName << "!" << endl; std::exit(1); } - CGAL::set_ascii_mode(from); + CGAL::IO::set_ascii_mode(from); Point point; std::vector polygon; @@ -185,7 +185,7 @@ void test_polygon(const R&, const Point&, const char* FileName) int main() { - CGAL::set_pretty_mode(cout); + CGAL::IO::set_pretty_mode(cout); cout << endl; cout << "--------------------------------------------------------" << endl; diff --git a/Polygon/test/Polygon/PolygonTest.cpp b/Polygon/test/Polygon/PolygonTest.cpp index 77fd6058eed..8b1cebe50ab 100644 --- a/Polygon/test/Polygon/PolygonTest.cpp +++ b/Polygon/test/Polygon/PolygonTest.cpp @@ -91,7 +91,7 @@ void test_iterators(ListPolygon& p, const ListPolygon& q) typedef ListPolygon::Edge_const_circulator EC; typedef ListPolygon::Edge_const_iterator EI; - CGAL::set_ascii_mode(cout); + CGAL::IO::set_ascii_mode(cout); { VC v = p.vertices_circulator(); @@ -165,28 +165,28 @@ void test_stream_operators(ListPolygon& p) { { std::ofstream to("polytest.ascii"); - CGAL::set_ascii_mode(to); + CGAL::IO::set_ascii_mode(to); to << p; to.close(); ListPolygon p_copy; std::ifstream from("polytest.ascii"); - CGAL::set_ascii_mode(from); + CGAL::IO::set_ascii_mode(from); from >> p_copy; assert(p == p_copy); } { std::ofstream to("polytest.pretty"); - CGAL::set_pretty_mode(to); + CGAL::IO::set_pretty_mode(to); to << p; } { std::ofstream to("polytest.binary"); - CGAL::set_binary_mode(to); + CGAL::IO::set_binary_mode(to); to << p; } - CGAL::set_pretty_mode(cout); + CGAL::IO::set_pretty_mode(cout); } //-----------------------------------------------------------------------// diff --git a/Polygon/test/Polygon/SimplicityTest.cpp b/Polygon/test/Polygon/SimplicityTest.cpp index 527450802b7..269392a1615 100644 --- a/Polygon/test/Polygon/SimplicityTest.cpp +++ b/Polygon/test/Polygon/SimplicityTest.cpp @@ -34,7 +34,7 @@ bool TestSimplicity(const char* FileName) int n; // number of points std::vector polygon; - CGAL::set_ascii_mode(from); + CGAL::IO::set_ascii_mode(from); from >> answer >> n; cout << " polygon has " << n << " points" << endl; for (int i=0; i 1) ? argv[1] : "data/eight.off"; Surface_mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp index b8c732a0c1b..72f8b9a0fa0 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/compute_normals_example_Polyhedron.cpp @@ -27,7 +27,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/eight.off"; Polyhedron mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/connected_components_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/connected_components_example.cpp index b0dd145c427..a0c70aad6cb 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/connected_components_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/connected_components_example.cpp @@ -74,7 +74,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/blobby_3cc.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_LCC.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_LCC.cpp index dd9749b2682..c3c74c76457 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_LCC.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_LCC.cpp @@ -20,7 +20,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; LCC mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -38,10 +38,10 @@ int main(int argc, char* argv[]) std::ofstream output("mesh1_refined.off"); output.precision(17); - CGAL::write_OFF(output, mesh1); + CGAL::IO::write_OFF(output, mesh1); output.close(); output.open("mesh2_refined.off"); - CGAL::write_OFF(output, mesh2); + CGAL::IO::write_OFF(output, mesh2); output.close(); return 0; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_SM.cpp index e4660e6fdef..2968f4ccce3 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_SM.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_SM.cpp @@ -18,7 +18,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -34,8 +34,8 @@ int main(int argc, char* argv[]) << num_vertices(mesh1) << " and " << num_vertices(mesh2) << "\n"; - CGAL::write_polygon_mesh("mesh1_refined.off", mesh1, CGAL::parameters::stream_precision(17)); - CGAL::write_polygon_mesh("mesh2_refined.off", mesh2, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("mesh1_refined.off", mesh1, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("mesh2_refined.off", mesh2, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_consecutive_bool_op.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_consecutive_bool_op.cpp index 5c70a466b34..5aa7e826c4d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_consecutive_bool_op.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_consecutive_bool_op.cpp @@ -69,7 +69,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -99,7 +99,7 @@ int main(int argc, char* argv[]) params::vertex_point_map(mesh2_vpm) ) ) { std::cout << "Intersection and union were successfully computed\n"; - CGAL::write_polygon_mesh("inter_union.off", mesh2, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("inter_union.off", mesh2, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_difference_remeshed.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_difference_remeshed.cpp index 54df02b8707..91a926f46b8 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_difference_remeshed.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_difference_remeshed.cpp @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -63,7 +63,7 @@ int main(int argc, char* argv[]) if (valid_difference) { std::cout << "Difference was successfully computed\n"; - CGAL::write_polygon_mesh("difference.off", mesh1, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("difference.off", mesh1, CGAL::parameters::stream_precision(17)); } else { @@ -103,7 +103,7 @@ int main(int argc, char* argv[]) PMP::isotropic_remeshing(selected_faces, 0.02, mesh1, params::edge_is_constrained_map(is_constrained_map)); - CGAL::write_polygon_mesh("difference_remeshed.off", mesh1, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("difference_remeshed.off", mesh1, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union.cpp index be53bb63b82..feb74ddf134 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union.cpp @@ -17,7 +17,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -29,7 +29,7 @@ int main(int argc, char* argv[]) if(valid_union) { std::cout << "Union was successfully computed\n"; - CGAL::write_polygon_mesh("union.off", out, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("union.off", out, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_and_intersection.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_and_intersection.cpp index 2ea59a2ac90..56ded659e4d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_and_intersection.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_and_intersection.cpp @@ -19,7 +19,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -48,7 +48,7 @@ int main(int argc, char* argv[]) if (res[PMP::Corefinement::UNION]) { std::cout << "Union was successfully computed\n"; - CGAL::write_polygon_mesh("union.off", out_union, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("union.off", out_union, CGAL::parameters::stream_precision(17)); } else std::cout << "Union could not be computed\n"; @@ -56,7 +56,7 @@ int main(int argc, char* argv[]) if (res[PMP::Corefinement::INTERSECTION]) { std::cout << "Intersection was successfully computed\n"; - CGAL::write_polygon_mesh("intersection.off", out_intersection, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("intersection.off", out_intersection, CGAL::parameters::stream_precision(17)); } else std::cout << "Intersection could not be computed\n"; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_with_attributes.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_with_attributes.cpp index 787844be103..d40fbe0e903 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_with_attributes.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_mesh_union_with_attributes.cpp @@ -52,7 +52,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -88,7 +88,7 @@ int main(int argc, char* argv[]) if (valid_union) { - CGAL::write_polygon_mesh("union.off", out, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("union.off", out, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_polyhedron_union.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_polyhedron_union.cpp index 71bdd4cd2f7..e8ba71436c1 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_polyhedron_union.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/corefinement_polyhedron_union.cpp @@ -19,7 +19,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/data/blade.off b/Polygon_mesh_processing/examples/Polygon_mesh_processing/data/blade.off new file mode 100644 index 00000000000..1837922eeaf --- /dev/null +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/data/blade.off @@ -0,0 +1,24455 @@ +OFF +8231 16222 0 +1.2725200000000001 12.995900000000001 2.0417200000000002 +2.1514899999999999 14.8637 2.0087600000000001 +1.9427300000000001 12.995900000000001 2.0197400000000001 +2.3492600000000001 14.8637 1.99777 +2.1514899999999999 12.995900000000001 2.0087600000000001 +2.72282 12.995900000000001 1.9758 +3.0524300000000002 12.995900000000001 1.9428300000000001 +3.3380899999999998 14.8637 1.92086 +3.4589500000000002 14.8637 1.90987 +3.3380899999999998 12.995900000000001 1.92086 +3.7555999999999998 12.995900000000001 1.85494 +3.9753400000000001 14.8637 1.7890200000000001 +3.94238 12.995900000000001 1.8109900000000001 +3.9753400000000001 12.995900000000001 1.7890200000000001 +4.0083000000000002 12.995900000000001 1.7560500000000001 +-5.9899199999999997 14.8637 1.77803 +-5.1878700000000002 14.8637 1.9318500000000001 +1.50325 16.7425 2.0417200000000002 +2.72282 14.8637 1.9758 +3.1952600000000002 14.8637 1.9318500000000001 +3.3380899999999998 16.7425 1.92086 +3.4589500000000002 16.7425 1.90987 +3.5688200000000001 14.8637 1.8878999999999999 +3.9973100000000001 16.7425 1.77803 +3.9753400000000001 16.7425 1.7890200000000001 +4.0083000000000002 14.8637 1.7560500000000001 +3.9973100000000001 14.8637 1.7450699999999999 +3.9753400000000001 12.995900000000001 1.72309 +3.8984299999999998 12.995900000000001 1.6901299999999999 +-5.8800499999999998 14.8637 1.6901299999999999 +-5.9679500000000001 16.7425 1.72309 +-5.9899199999999997 16.7425 1.7450699999999999 +-5.93499 16.7425 1.8109900000000001 +-5.8251200000000001 18.610299999999999 1.84395 +-4.1440999999999999 16.7425 2.0087600000000001 +-3.49586 18.610299999999999 2.0417200000000002 +-3.49586 16.7425 2.0417200000000002 +0.54737800000000003 12.995900000000001 2.0636899999999998 +1.04179 14.8637 2.0527000000000002 +1.2725200000000001 16.7425 2.0417200000000002 +2.1514899999999999 18.610299999999999 2.0087600000000001 +2.3492600000000001 16.7425 1.99777 +3.1952600000000002 18.610299999999999 1.9318500000000001 +3.4589500000000002 18.610299999999999 1.90987 +3.9753400000000001 18.610299999999999 1.7890200000000001 +3.9973100000000001 18.610299999999999 1.77803 +3.9973100000000001 18.610299999999999 1.7450699999999999 +3.94238 16.7425 1.71211 +3.9753400000000001 16.7425 1.72309 +3.8325100000000001 16.7425 1.6791400000000001 +3.67869 14.8637 1.64618 +3.7555999999999998 12.995900000000001 1.65717 +-5.9899199999999997 18.610299999999999 1.77803 +-5.9899199999999997 18.610299999999999 1.7450699999999999 +-5.9899199999999997 16.7425 1.77803 +-5.9679500000000001 16.7425 1.7890200000000001 +-5.9679500000000001 18.610299999999999 1.7890200000000001 +-5.5614299999999997 18.610299999999999 1.8878999999999999 +-5.4515599999999997 18.610299999999999 1.90987 +-5.1878700000000002 18.610299999999999 1.9318500000000001 +-3.0234200000000002 20.489100000000001 2.0527000000000002 +-3.2651300000000001 18.610299999999999 2.0417200000000002 +-3.2651300000000001 16.7425 2.0417200000000002 +0.29467500000000002 12.995900000000001 2.0746799999999999 +0.54737800000000003 14.8637 2.0636899999999998 +0.80008000000000001 14.8637 2.0636899999999998 +0.80008000000000001 16.7425 2.0636899999999998 +1.04179 16.7425 2.0527000000000002 +1.9427300000000001 18.610299999999999 2.0197400000000001 +2.3492600000000001 20.489100000000001 1.99777 +3.3380899999999998 18.610299999999999 1.92086 +3.5688200000000001 18.610299999999999 1.8878999999999999 +3.5688200000000001 16.7425 1.8878999999999999 +3.67869 20.489100000000001 1.8769100000000001 +3.7555999999999998 20.489100000000001 1.85494 +3.8325100000000001 18.610299999999999 1.84395 +3.94238 16.7425 1.8109900000000001 +4.0083000000000002 18.610299999999999 1.7560500000000001 +3.9753400000000001 18.610299999999999 1.72309 +3.8325100000000001 20.489100000000001 1.6791400000000001 +3.67869 18.610299999999999 1.64618 +-5.0450400000000002 16.7425 1.9428300000000001 +-5.8800499999999998 16.7425 1.6901299999999999 +-5.8800499999999998 18.610299999999999 1.6901299999999999 +-5.9679500000000001 20.489100000000001 1.72309 +-5.9679500000000001 18.610299999999999 1.72309 +-5.9899199999999997 20.489100000000001 1.7450699999999999 +-5.8251200000000001 20.489100000000001 1.84395 +-5.7482100000000003 18.610299999999999 1.85494 +-5.66031 18.610299999999999 1.8769100000000001 +-5.7482100000000003 20.489100000000001 1.85494 +-5.5614299999999997 20.489100000000001 1.8878999999999999 +-3.0234200000000002 22.3569 2.0527000000000002 +-3.2651300000000001 20.489100000000001 2.0417200000000002 +-3.0234200000000002 16.7425 2.0527000000000002 +-2.7816999999999998 16.7425 2.0636899999999998 +-3.0234200000000002 14.8637 2.0527000000000002 +0.041973099999999999 12.995900000000001 2.0746799999999999 +1.50325 22.3569 2.0417200000000002 +2.1514899999999999 20.489100000000001 2.0087600000000001 +3.1952600000000002 20.489100000000001 1.9318500000000001 +3.4589500000000002 20.489100000000001 1.90987 +3.94238 18.610299999999999 1.8109900000000001 +3.94238 22.3569 1.8109900000000001 +3.9753400000000001 22.3569 1.7890200000000001 +3.9753400000000001 20.489100000000001 1.7890200000000001 +4.0083000000000002 22.3569 1.7560500000000001 +3.9973100000000001 22.3569 1.7450699999999999 +3.94238 22.3569 1.71211 +3.9753400000000001 20.489100000000001 1.72309 +3.8984299999999998 22.3569 1.6901299999999999 +-5.93499 22.3569 1.71211 +-5.9899199999999997 24.224699999999999 1.77803 +-5.9899199999999997 22.3569 1.7450699999999999 +-5.9679500000000001 22.3569 1.7890200000000001 +-5.7482100000000003 24.224699999999999 1.85494 +-5.7482100000000003 22.3569 1.85494 +-5.8251200000000001 22.3569 1.84395 +-5.5614299999999997 22.3569 1.8878999999999999 +-5.4515599999999997 24.224699999999999 1.90987 +-3.9353400000000001 22.3569 2.0197400000000001 +-3.2651300000000001 24.224699999999999 2.0417200000000002 +-3.2651300000000001 22.3569 2.0417200000000002 +-3.0234200000000002 24.224699999999999 2.0527000000000002 +-2.53999 20.489100000000001 2.0636899999999998 +-2.7816999999999998 18.610299999999999 2.0636899999999998 +-2.53999 16.7425 2.0636899999999998 +-2.7816999999999998 14.8637 2.0636899999999998 +0.041973099999999999 14.8637 2.0746799999999999 +0.54737800000000003 16.7425 2.0636899999999998 +0.80008000000000001 20.489100000000001 2.0636899999999998 +0.80008000000000001 18.610299999999999 2.0636899999999998 +1.2725200000000001 24.224699999999999 2.0417200000000002 +1.2725200000000001 22.3569 2.0417200000000002 +2.72282 22.3569 1.9758 +3.1952600000000002 22.3569 1.9318500000000001 +3.4589500000000002 22.3569 1.90987 +3.5688200000000001 20.489100000000001 1.8878999999999999 +3.67869 22.3569 1.8769100000000001 +3.5688200000000001 22.3569 1.8878999999999999 +3.67869 24.224699999999999 1.8769100000000001 +3.9753400000000001 24.224699999999999 1.7890200000000001 +3.9973100000000001 22.3569 1.77803 +3.9973100000000001 24.224699999999999 1.7450699999999999 +3.5688200000000001 18.610299999999999 1.6242099999999999 +3.5688200000000001 16.7425 1.6242099999999999 +3.3380899999999998 18.610299999999999 1.6022400000000001 +3.3380899999999998 16.7425 1.6022400000000001 +3.4589500000000002 12.995900000000001 1.6132200000000001 +3.5688200000000001 12.995900000000001 1.8878999999999999 +-5.4515599999999997 14.8637 1.6132200000000001 +-5.8251200000000001 18.610299999999999 1.6791400000000001 +-5.8800499999999998 20.489100000000001 1.6901299999999999 +-5.9679500000000001 24.224699999999999 1.7890200000000001 +-5.93499 24.224699999999999 1.8109900000000001 +-5.7482100000000003 26.1035 1.85494 +-4.1440999999999999 26.1035 2.0087600000000001 +-3.9353400000000001 24.224699999999999 2.0197400000000001 +-3.2651300000000001 26.1035 2.0417200000000002 +-2.7816999999999998 24.224699999999999 2.0636899999999998 +-2.53999 26.1035 2.0636899999999998 +-2.28728 24.224699999999999 2.0746799999999999 +-2.53999 22.3569 2.0636899999999998 +-2.28728 20.489100000000001 2.0746799999999999 +-2.53999 18.610299999999999 2.0636899999999998 +-2.28728 18.610299999999999 2.0746799999999999 +-2.53999 14.8637 2.0636899999999998 +-0.47442000000000001 12.995900000000001 2.0746799999999999 +0.29467500000000002 16.7425 2.0746799999999999 +0.54737800000000003 18.610299999999999 2.0636899999999998 +0.29467500000000002 18.610299999999999 2.0746799999999999 +0.80008000000000001 22.3569 2.0636899999999998 +3.1952600000000002 26.1035 1.9318500000000001 +3.0524300000000002 26.1035 1.9428300000000001 +3.4589500000000002 24.224699999999999 1.90987 +3.7555999999999998 24.224699999999999 1.85494 +3.9973100000000001 24.224699999999999 1.77803 +4.0083000000000002 26.1035 1.7560500000000001 +4.0083000000000002 24.224699999999999 1.7560500000000001 +3.8984299999999998 26.1035 1.6901299999999999 +3.8984299999999998 24.224699999999999 1.6901299999999999 +3.8325100000000001 24.224699999999999 1.6791400000000001 +3.67869 24.224699999999999 1.64618 +3.5688200000000001 24.224699999999999 1.6242099999999999 +3.5688200000000001 22.3569 1.6242099999999999 +3.3380899999999998 22.3569 1.6022400000000001 +3.1952600000000002 12.995900000000001 1.58026 +-4.1440999999999999 24.224699999999999 2.0087600000000001 +-5.1878700000000002 14.8637 1.58026 +-5.5614299999999997 18.610299999999999 1.6242099999999999 +-5.7482100000000003 20.489100000000001 1.65717 +-5.8251200000000001 20.489100000000001 1.6791400000000001 +-5.8800499999999998 22.3569 1.6901299999999999 +-5.93499 26.1035 1.71211 +-5.9679500000000001 27.971299999999999 1.7890200000000001 +-5.1878700000000002 27.971299999999999 1.9318500000000001 +-3.0234200000000002 26.1035 2.0527000000000002 +-2.7816999999999998 26.1035 2.0636899999999998 +-2.28728 22.3569 2.0746799999999999 +-2.0345800000000001 18.610299999999999 2.0746799999999999 +-2.28728 16.7425 2.0746799999999999 +-2.28728 14.8637 2.0746799999999999 +-0.73810900000000002 12.995900000000001 2.0746799999999999 +-0.47442000000000001 14.8637 2.0746799999999999 +-0.21073 14.8637 2.0746799999999999 +0.041973099999999999 18.610299999999999 2.0746799999999999 +0.29467500000000002 20.489100000000001 2.0746799999999999 +0.54737800000000003 22.3569 2.0636899999999998 +0.80008000000000001 24.224699999999999 2.0636899999999998 +1.04179 24.224699999999999 2.0527000000000002 +2.3492600000000001 26.1035 1.99777 +3.8325100000000001 27.971299999999999 1.84395 +3.9973100000000001 26.1035 1.77803 +3.9973100000000001 27.971299999999999 1.77803 +3.9753400000000001 27.971299999999999 1.72309 +3.94238 27.971299999999999 1.71211 +3.94238 26.1035 1.71211 +3.7555999999999998 26.1035 1.65717 +3.4589500000000002 27.971299999999999 1.6132200000000001 +3.4589500000000002 26.1035 1.6132200000000001 +3.0524300000000002 24.224699999999999 1.5692699999999999 +3.1952600000000002 20.489100000000001 1.58026 +3.1952600000000002 16.7425 1.58026 +3.1952600000000002 18.610299999999999 1.58026 +-5.4515599999999997 18.610299999999999 1.6132200000000001 +-5.66031 20.489100000000001 1.64618 +-5.8251200000000001 22.3569 1.6791400000000001 +-5.9899199999999997 29.850100000000001 1.7450699999999999 +-5.9899199999999997 27.971299999999999 1.77803 +-5.66031 27.971299999999999 1.8769100000000001 +-3.2651300000000001 29.850100000000001 2.0417200000000002 +-3.0234200000000002 29.850100000000001 2.0527000000000002 +-2.7816999999999998 29.850100000000001 2.0636899999999998 +-3.0234200000000002 27.971299999999999 2.0527000000000002 +-2.7816999999999998 27.971299999999999 2.0636899999999998 +-1.7818799999999999 29.850100000000001 2.0746799999999999 +-2.0345800000000001 27.971299999999999 2.0746799999999999 +-1.7818799999999999 26.1035 2.0746799999999999 +-2.0345800000000001 22.3569 2.0746799999999999 +-1.7818799999999999 20.489100000000001 2.0746799999999999 +-0.990811 12.995900000000001 2.0856699999999999 +-0.47442000000000001 16.7425 2.0746799999999999 +-0.21073 16.7425 2.0746799999999999 +0.041973099999999999 20.489100000000001 2.0746799999999999 +0.80008000000000001 26.1035 2.0636899999999998 +1.9427300000000001 29.850100000000001 2.0197400000000001 +1.9427300000000001 27.971299999999999 2.0197400000000001 +3.1952600000000002 24.224699999999999 1.9318500000000001 +3.3380899999999998 27.971299999999999 1.92086 +3.4589500000000002 27.971299999999999 1.90987 +3.4589500000000002 29.850100000000001 1.90987 +3.5688200000000001 27.971299999999999 1.8878999999999999 +3.7555999999999998 29.850100000000001 1.85494 +3.9753400000000001 29.850100000000001 1.7890200000000001 +3.94238 26.1035 1.8109900000000001 +3.9973100000000001 29.850100000000001 1.77803 +3.9753400000000001 27.971299999999999 1.7890200000000001 +3.9973100000000001 29.850100000000001 1.7450699999999999 +3.9973100000000001 27.971299999999999 1.7450699999999999 +3.8984299999999998 29.850100000000001 1.6901299999999999 +3.8984299999999998 27.971299999999999 1.6901299999999999 +3.7555999999999998 29.850100000000001 1.65717 +-5.5614299999999997 22.3569 1.6242099999999999 +-5.8251200000000001 26.1035 1.6791400000000001 +-5.8251200000000001 24.224699999999999 1.6791400000000001 +-5.8800499999999998 26.1035 1.6901299999999999 +-5.7482100000000003 31.7179 1.85494 +-5.8251200000000001 31.7179 1.84395 +-3.9353400000000001 31.7179 2.0197400000000001 +-3.9353400000000001 29.850100000000001 2.0197400000000001 +-3.49586 31.7179 2.0417200000000002 +-3.49586 29.850100000000001 2.0417200000000002 +-3.2651300000000001 31.7179 2.0417200000000002 +-2.53999 31.7179 2.0636899999999998 +-2.7816999999999998 31.7179 2.0636899999999998 +-2.0345800000000001 31.7179 2.0746799999999999 +-2.0345800000000001 29.850100000000001 2.0746799999999999 +-1.7818799999999999 24.224699999999999 2.0746799999999999 +-1.5181899999999999 18.610299999999999 2.0746799999999999 +-1.7818799999999999 18.610299999999999 2.0746799999999999 +-1.5181899999999999 16.7425 2.0746799999999999 +-1.7818799999999999 14.8637 2.0746799999999999 +-1.2544999999999999 12.995900000000001 2.0746799999999999 +-0.73810900000000002 14.8637 2.0746799999999999 +0.29467500000000002 24.224699999999999 2.0746799999999999 +0.80008000000000001 27.971299999999999 2.0636899999999998 +1.50325 31.7179 2.0417200000000002 +2.1514899999999999 29.850100000000001 2.0087600000000001 +3.1952600000000002 29.850100000000001 1.9318500000000001 +4.0083000000000002 29.850100000000001 1.7560500000000001 +3.9973100000000001 31.7179 1.7450699999999999 +3.67869 29.850100000000001 1.64618 +-5.66031 24.224699999999999 1.64618 +-5.7482100000000003 26.1035 1.65717 +-5.8800499999999998 27.971299999999999 1.6901299999999999 +-5.9899199999999997 33.585700000000003 1.7450699999999999 +-5.8251200000000001 33.585700000000003 1.84395 +-2.7816999999999998 33.585700000000003 2.0636899999999998 +-2.53999 33.585700000000003 2.0636899999999998 +-2.28728 33.585700000000003 2.0746799999999999 +-1.5181899999999999 31.7179 2.0746799999999999 +-1.5181899999999999 26.1035 2.0746799999999999 +-1.5181899999999999 24.224699999999999 2.0746799999999999 +-1.5181899999999999 20.489100000000001 2.0746799999999999 +-1.2544999999999999 18.610299999999999 2.0746799999999999 +-1.2544999999999999 20.489100000000001 2.0746799999999999 +-1.2544999999999999 16.7425 2.0746799999999999 +-1.5181899999999999 14.8637 2.0746799999999999 +-1.2544999999999999 14.8637 2.0746799999999999 +-0.990811 14.8637 2.0856699999999999 +-0.990811 16.7425 2.0856699999999999 +-0.47442000000000001 18.610299999999999 2.0746799999999999 +-0.21073 20.489100000000001 2.0746799999999999 +0.29467500000000002 26.1035 2.0746799999999999 +0.54737800000000003 26.1035 2.0636899999999998 +0.54737800000000003 27.971299999999999 2.0636899999999998 +1.2725200000000001 31.7179 2.0417200000000002 +2.1514899999999999 33.585700000000003 2.0087600000000001 +1.9427300000000001 31.7179 2.0197400000000001 +2.8876200000000001 33.585700000000003 1.9648099999999999 +3.8325100000000001 33.585700000000003 1.84395 +3.9973100000000001 33.585700000000003 1.77803 +3.9753400000000001 33.585700000000003 1.7890200000000001 +3.9973100000000001 31.7179 1.77803 +4.0083000000000002 33.585700000000003 1.7560500000000001 +3.8984299999999998 33.585700000000003 1.6901299999999999 +3.94238 31.7179 1.71211 +3.67869 31.7179 1.64618 +3.4589500000000002 31.7179 1.6132200000000001 +2.1514899999999999 22.3569 1.50335 +2.1514899999999999 18.610299999999999 1.50335 +2.1514899999999999 20.489100000000001 1.50335 +-5.3197099999999997 20.489100000000001 1.6022400000000001 +-5.1878700000000002 20.489100000000001 1.58026 +-5.4515599999999997 20.489100000000001 1.6132200000000001 +-4.7154199999999999 16.7425 1.5472999999999999 +-4.5286400000000002 16.7425 1.5253300000000001 +-4.7154199999999999 18.610299999999999 1.5472999999999999 +-5.4515599999999997 24.224699999999999 1.6132200000000001 +-5.5614299999999997 26.1035 1.6242099999999999 +-5.9899199999999997 33.585700000000003 1.77803 +-5.9679500000000001 33.585700000000003 1.7890200000000001 +-5.8800499999999998 35.464500000000001 1.8219799999999999 +-5.8800499999999998 33.585700000000003 1.8219799999999999 +-3.0234200000000002 33.585700000000003 2.0527000000000002 +-2.53999 35.464500000000001 2.0636899999999998 +-2.0345800000000001 35.464500000000001 2.0746799999999999 +-2.0345800000000001 33.585700000000003 2.0746799999999999 +-1.5181899999999999 35.464500000000001 2.0746799999999999 +-1.7818799999999999 35.464500000000001 2.0746799999999999 +-1.2544999999999999 33.585700000000003 2.0746799999999999 +-1.2544999999999999 29.850100000000001 2.0746799999999999 +-1.2544999999999999 27.971299999999999 2.0746799999999999 +-0.73810900000000002 20.489100000000001 2.0746799999999999 +-0.73810900000000002 18.610299999999999 2.0746799999999999 +-0.47442000000000001 20.489100000000001 2.0746799999999999 +-0.21073 24.224699999999999 2.0746799999999999 +0.041973099999999999 24.224699999999999 2.0746799999999999 +0.29467500000000002 27.971299999999999 2.0746799999999999 +0.80008000000000001 31.7179 2.0636899999999998 +0.80008000000000001 29.850100000000001 2.0636899999999998 +1.2725200000000001 33.585700000000003 2.0417200000000002 +2.1514899999999999 35.464500000000001 2.0087600000000001 +2.3492600000000001 33.585700000000003 1.99777 +2.72282 35.464500000000001 1.9758 +2.72282 33.585700000000003 1.9758 +3.5688200000000001 35.464500000000001 1.8878999999999999 +3.67869 33.585700000000003 1.8769100000000001 +3.8325100000000001 35.464500000000001 1.84395 +3.7555999999999998 33.585700000000003 1.85494 +3.94238 31.7179 1.8109900000000001 +3.9753400000000001 35.464500000000001 1.7890200000000001 +4.0083000000000002 35.464500000000001 1.7560500000000001 +3.8325100000000001 33.585700000000003 1.6791400000000001 +3.67869 35.464500000000001 1.64618 +3.4589500000000002 33.585700000000003 1.6132200000000001 +3.1952600000000002 31.7179 1.58026 +2.1514899999999999 26.1035 1.50335 +2.1514899999999999 24.224699999999999 1.50335 +2.3492600000000001 24.224699999999999 1.51434 +2.1514899999999999 16.7425 1.50335 +1.9427300000000001 16.7425 1.50335 +1.04179 14.8637 1.4594 +1.2725200000000001 12.995900000000001 1.4703900000000001 +1.04179 12.995900000000001 1.4594 +0.54737800000000003 12.995900000000001 1.44842 +0.29467500000000002 12.995900000000001 1.44842 +0.041973099999999999 12.995900000000001 1.44842 +-0.21073 12.995900000000001 1.43743 +-0.47442000000000001 12.995900000000001 1.43743 +-0.73810900000000002 12.995900000000001 1.43743 +-5.8251200000000001 27.971299999999999 1.84395 +-1.5181899999999999 33.585700000000003 2.0746799999999999 +3.8984299999999998 14.8637 1.6901299999999999 +-4.3418599999999996 16.7425 1.51434 +-4.1440999999999999 14.8637 1.50335 +-5.0450400000000002 24.224699999999999 1.5692699999999999 +-5.0450400000000002 22.3569 1.5692699999999999 +-5.3197099999999997 24.224699999999999 1.6022400000000001 +-5.1878700000000002 24.224699999999999 1.58026 +-5.4515599999999997 27.971299999999999 1.6132200000000001 +-5.7482100000000003 29.850100000000001 1.65717 +-5.8800499999999998 31.7179 1.6901299999999999 +-5.8800499999999998 29.850100000000001 1.6901299999999999 +-5.93499 33.585700000000003 1.71211 +-5.8800499999999998 33.585700000000003 1.6901299999999999 +-5.8251200000000001 37.332299999999996 1.84395 +-5.8251200000000001 35.464500000000001 1.84395 +-5.5614299999999997 35.464500000000001 1.8878999999999999 +-5.5614299999999997 33.585700000000003 1.8878999999999999 +-5.0450400000000002 37.332299999999996 1.9428300000000001 +-4.1440999999999999 35.464500000000001 2.0087600000000001 +-3.0234200000000002 37.332299999999996 2.0527000000000002 +-2.7816999999999998 35.464500000000001 2.0636899999999998 +-0.990811 35.464500000000001 2.0856699999999999 +-1.2544999999999999 35.464500000000001 2.0746799999999999 +-0.73810900000000002 37.332299999999996 2.0746799999999999 +-0.73810900000000002 26.1035 2.0746799999999999 +-0.990811 24.224699999999999 2.0856699999999999 +-0.990811 22.3569 2.0856699999999999 +-0.990811 20.489100000000001 2.0856699999999999 +-0.47442000000000001 22.3569 2.0746799999999999 +-0.47442000000000001 24.224699999999999 2.0746799999999999 +0.041973099999999999 26.1035 2.0746799999999999 +0.041973099999999999 27.971299999999999 2.0746799999999999 +0.54737800000000003 31.7179 2.0636899999999998 +1.04179 35.464500000000001 2.0527000000000002 +1.2725200000000001 35.464500000000001 2.0417200000000002 +2.3492600000000001 37.332299999999996 1.99777 +2.8876200000000001 37.332299999999996 1.9648099999999999 +2.8876200000000001 35.464500000000001 1.9648099999999999 +3.4589500000000002 37.332299999999996 1.90987 +3.3380899999999998 35.464500000000001 1.92086 +3.94238 35.464500000000001 1.8109900000000001 +3.9973100000000001 37.332299999999996 1.77803 +2.3492600000000001 29.850100000000001 1.51434 +2.3492600000000001 27.971299999999999 1.51434 +1.9427300000000001 24.224699999999999 1.50335 +1.2725200000000001 14.8637 1.4703900000000001 +0.80008000000000001 14.8637 1.4594 +0.54737800000000003 16.7425 1.44842 +0.54737800000000003 14.8637 1.44842 +0.29467500000000002 16.7425 1.44842 +0.041973099999999999 14.8637 1.44842 +-0.21073 14.8637 1.43743 +-0.47442000000000001 14.8637 1.43743 +-0.47442000000000001 16.7425 1.43743 +-0.990811 16.7425 1.43743 +-0.73810900000000002 14.8637 1.43743 +-0.990811 14.8637 1.43743 +-1.5181899999999999 16.7425 1.43743 +-1.2544999999999999 14.8637 1.43743 +-2.0345800000000001 16.7425 1.44842 +-1.7818799999999999 14.8637 1.43743 +-2.0345800000000001 14.8637 1.44842 +-5.5614299999999997 29.850100000000001 1.6242099999999999 +-5.8251200000000001 33.585700000000003 1.6791400000000001 +-5.8251200000000001 31.7179 1.6791400000000001 +-5.9679500000000001 22.3569 1.72309 +-5.9679500000000001 26.1035 1.72309 +-5.9679500000000001 24.224699999999999 1.72309 +-5.9679500000000001 29.850100000000001 1.72309 +-5.9899199999999997 31.7179 1.7450699999999999 +-5.9899199999999997 35.464500000000001 1.7450699999999999 +-5.8251200000000001 39.210999999999999 1.84395 +-5.7482100000000003 37.332299999999996 1.85494 +-5.66031 22.3569 1.8769100000000001 +-5.66031 24.224699999999999 1.8769100000000001 +1.2725200000000001 14.8637 2.0417200000000002 +-5.7482100000000003 27.971299999999999 1.85494 +-5.7482100000000003 29.850100000000001 1.85494 +-5.66031 37.332299999999996 1.8769100000000001 +-5.4515599999999997 37.332299999999996 1.90987 +-5.5614299999999997 37.332299999999996 1.8878999999999999 +-5.1878700000000002 39.210999999999999 1.9318500000000001 +-3.0234200000000002 39.210999999999999 2.0527000000000002 +-3.2651300000000001 37.332299999999996 2.0417200000000002 +3.8984299999999998 16.7425 1.8219799999999999 +-2.7816999999999998 37.332299999999996 2.0636899999999998 +-2.0345800000000001 37.332299999999996 2.0746799999999999 +-1.7818799999999999 37.332299999999996 2.0746799999999999 +-1.7818799999999999 39.210999999999999 2.0746799999999999 +-0.73810900000000002 27.971299999999999 2.0746799999999999 +-0.73810900000000002 24.224699999999999 2.0746799999999999 +-0.73810900000000002 22.3569 2.0746799999999999 +-0.21073 27.971299999999999 2.0746799999999999 +-0.21073 26.1035 2.0746799999999999 +0.29467500000000002 31.7179 2.0746799999999999 +0.29467500000000002 29.850100000000001 2.0746799999999999 +0.80008000000000001 33.585700000000003 2.0636899999999998 +2.1514899999999999 39.210999999999999 2.0087600000000001 +2.1514899999999999 37.332299999999996 2.0087600000000001 +3.1952600000000002 37.332299999999996 1.9318500000000001 +3.4589500000000002 39.210999999999999 1.90987 +3.3380899999999998 37.332299999999996 1.92086 +3.5688200000000001 37.332299999999996 1.8878999999999999 +3.8984299999999998 22.3569 1.8219799999999999 +3.94238 24.224699999999999 1.8109900000000001 +3.94238 27.971299999999999 1.8109900000000001 +3.94238 33.585700000000003 1.8109900000000001 +3.8984299999999998 33.585700000000003 1.8219799999999999 +3.9753400000000001 39.210999999999999 1.7890200000000001 +3.94238 37.332299999999996 1.8109900000000001 +3.9753400000000001 37.332299999999996 1.7890200000000001 +3.9973100000000001 37.332299999999996 1.7450699999999999 +3.8984299999999998 39.210999999999999 1.6901299999999999 +3.8325100000000001 37.332299999999996 1.6791400000000001 +3.3380899999999998 39.210999999999999 1.6022400000000001 +2.1514899999999999 35.464500000000001 1.50335 +2.1514899999999999 33.585700000000003 1.50335 +1.9427300000000001 29.850100000000001 1.50335 +1.04179 16.7425 1.4594 +0.80008000000000001 18.610299999999999 1.4594 +0.80008000000000001 16.7425 1.4594 +-5.9899199999999997 20.489100000000001 1.77803 +0.041973099999999999 16.7425 1.44842 +-0.47442000000000001 18.610299999999999 1.43743 +-1.7818799999999999 16.7425 1.43743 +-2.28728 16.7425 1.44842 +-2.53999 16.7425 1.44842 +-2.28728 14.8637 1.44842 +-1.7818799999999999 27.971299999999999 2.0746799999999999 +-5.0450400000000002 33.585700000000003 1.9428300000000001 +3.4589500000000002 26.1035 1.90987 +-3.49586 24.224699999999999 2.0417200000000002 +-0.21073 22.3569 2.0746799999999999 +-2.53999 24.224699999999999 2.0636899999999998 +-2.7816999999999998 22.3569 2.0636899999999998 +-0.47442000000000001 27.971299999999999 2.0746799999999999 +3.94238 20.489100000000001 1.8109900000000001 +-0.47442000000000001 31.7179 2.0746799999999999 +3.9973100000000001 20.489100000000001 1.7450699999999999 +-5.0450400000000002 29.850100000000001 1.9428300000000001 +-5.4515599999999997 29.850100000000001 1.90987 +-5.1878700000000002 16.7425 1.58026 +3.94238 39.210999999999999 1.8109900000000001 +-3.0234200000000002 31.7179 2.0527000000000002 +2.3492600000000001 16.7425 1.51434 +3.9973100000000001 39.210999999999999 1.77803 +-5.5614299999999997 26.1035 1.8878999999999999 +3.5688200000000001 24.224699999999999 1.8878999999999999 +-1.5181899999999999 14.8637 1.43743 +-5.5614299999999997 16.7425 1.8878999999999999 +2.1514899999999999 31.7179 1.50335 +3.67869 16.7425 1.64618 +3.7555999999999998 16.7425 1.65717 +3.0524300000000002 27.971299999999999 1.9428300000000001 +3.9753400000000001 33.585700000000003 1.72309 +3.4589500000000002 22.3569 1.6132200000000001 +3.4589500000000002 20.489100000000001 1.6132200000000001 +3.1952600000000002 16.7425 1.9318500000000001 +3.7555999999999998 22.3569 1.65717 +-1.5181899999999999 29.850100000000001 2.0746799999999999 +3.8984299999999998 31.7179 1.6901299999999999 +-5.5614299999999997 27.971299999999999 1.6242099999999999 +2.72282 37.332299999999996 1.9758 +-1.5181899999999999 22.3569 2.0746799999999999 +-1.7818799999999999 22.3569 2.0746799999999999 +-5.3197099999999997 18.610299999999999 1.6022400000000001 +2.1514899999999999 31.7179 2.0087600000000001 +3.1952600000000002 14.8637 1.58026 +-0.990811 26.1035 2.0856699999999999 +-1.2544999999999999 26.1035 2.0746799999999999 +2.3492600000000001 12.995900000000001 1.51434 +2.3492600000000001 22.3569 1.51434 +-3.49586 27.971299999999999 2.0417200000000002 +3.7555999999999998 37.332299999999996 1.65717 +3.7555999999999998 35.464500000000001 1.65717 +3.3380899999999998 26.1035 1.92086 +4.0083000000000002 37.332299999999996 1.7560500000000001 +2.1514899999999999 24.224699999999999 2.0087600000000001 +-5.3197099999999997 27.971299999999999 1.6022400000000001 +3.4589500000000002 14.8637 1.6132200000000001 +3.1952600000000002 29.850100000000001 1.58026 +-0.73810900000000002 29.850100000000001 2.0746799999999999 +3.9973100000000001 35.464500000000001 1.77803 +3.8984299999999998 37.332299999999996 1.6901299999999999 +-0.47442000000000001 39.210999999999999 2.0746799999999999 +-0.73810900000000002 39.210999999999999 2.0746799999999999 +3.9753400000000001 31.7179 1.7890200000000001 +3.94238 29.850100000000001 1.8109900000000001 +-5.7482100000000003 14.8637 1.65717 +3.8984299999999998 20.489100000000001 1.6901299999999999 +3.94238 18.610299999999999 1.71211 +-3.0234200000000002 18.610299999999999 2.0527000000000002 +4.0083000000000002 27.971299999999999 1.7560500000000001 +-5.8251200000000001 140.31399999999999 1.6791400000000001 +-5.8800499999999998 142.18199999999999 1.6901299999999999 +-5.8251200000000001 142.18199999999999 1.6791400000000001 +-5.66031 142.18199999999999 1.64618 +-5.3197099999999997 142.18199999999999 1.6022400000000001 +-4.3418599999999996 142.18199999999999 1.51434 +-3.0234200000000002 140.31399999999999 1.4594 +-1.7818799999999999 140.31399999999999 1.43743 +-1.2544999999999999 140.31399999999999 1.43743 +-1.2544999999999999 142.18199999999999 1.43743 +-0.47442000000000001 140.31399999999999 1.43743 +-0.73810900000000002 142.18199999999999 1.43743 +-0.21073 140.31399999999999 1.43743 +-0.47442000000000001 142.18199999999999 1.43743 +0.54737800000000003 140.31399999999999 1.44842 +0.29467500000000002 142.18199999999999 1.44842 +0.80008000000000001 142.18199999999999 1.4594 +2.3492600000000001 140.31399999999999 1.51434 +2.1514899999999999 142.18199999999999 1.50335 +4.0083000000000002 140.31399999999999 1.7560500000000001 +3.9973100000000001 142.18199999999999 1.7450699999999999 +3.9973100000000001 142.18199999999999 1.77803 +-5.8251200000000001 142.18199999999999 1.84395 +-5.9899199999999997 140.31399999999999 1.7450699999999999 +-5.9679500000000001 138.435 1.72309 +-5.8800499999999998 140.31399999999999 1.6901299999999999 +-5.5614299999999997 140.31399999999999 1.6242099999999999 +-5.5614299999999997 138.435 1.6242099999999999 +-5.1878700000000002 142.18199999999999 1.58026 +-5.0450400000000002 138.435 1.5692699999999999 +-3.2651300000000001 140.31399999999999 1.4703900000000001 +-2.7816999999999998 140.31399999999999 1.4594 +-2.28728 140.31399999999999 1.44842 +-0.21073 138.435 1.43743 +0.29467500000000002 138.435 1.44842 +0.29467500000000002 140.31399999999999 1.44842 +0.80008000000000001 138.435 1.4594 +1.9427300000000001 138.435 1.4923599999999999 +1.9427300000000001 140.31399999999999 1.4923599999999999 +2.1514899999999999 140.31399999999999 1.50335 +3.0524300000000002 142.18199999999999 1.5692699999999999 +3.94238 138.435 1.71211 +3.9973100000000001 140.31399999999999 1.7450699999999999 +3.9753400000000001 140.31399999999999 1.7890200000000001 +3.9973100000000001 140.31399999999999 1.77803 +-3.9353400000000001 140.31399999999999 2.0197400000000001 +-5.7482100000000003 140.31399999999999 1.85494 +-5.8800499999999998 136.56700000000001 1.6901299999999999 +-5.8251200000000001 136.56700000000001 1.6791400000000001 +-5.8800499999999998 20.489100000000001 1.8219799999999999 +-5.66031 138.435 1.64618 +-4.7154199999999999 138.435 1.5472999999999999 +-4.5286400000000002 138.435 1.5253300000000001 +-4.3418599999999996 138.435 1.51434 +-2.7816999999999998 138.435 1.4594 +-2.0345800000000001 138.435 1.44842 +-0.990811 136.56700000000001 1.43743 +-0.47442000000000001 136.56700000000001 1.43743 +-0.47442000000000001 138.435 1.43743 +0.29467500000000002 136.56700000000001 1.44842 +1.04179 138.435 1.4594 +1.04179 136.56700000000001 1.4594 +1.7339800000000001 138.435 1.4923599999999999 +2.1514899999999999 138.435 1.50335 +3.3380899999999998 136.56700000000001 1.6022400000000001 +3.3380899999999998 138.435 1.6022400000000001 +3.67869 136.56700000000001 1.64618 +3.9973100000000001 138.435 1.77803 +3.9753400000000001 136.56700000000001 1.7890200000000001 +3.8325100000000001 138.435 1.84395 +3.4589500000000002 138.435 1.89889 +3.4589500000000002 140.31399999999999 1.89889 +2.8876200000000001 140.31399999999999 1.9648099999999999 +2.1514899999999999 140.31399999999999 2.0087600000000001 +1.04179 140.31399999999999 2.0527000000000002 +0.29467500000000002 138.435 2.0636899999999998 +0.54737800000000003 140.31399999999999 2.0636899999999998 +-5.4515599999999997 136.56700000000001 1.90987 +-5.5614299999999997 138.435 1.8878999999999999 +-5.7482100000000003 138.435 1.85494 +-5.7482100000000003 134.69999999999999 1.65717 +-4.5286400000000002 134.69999999999999 1.5253300000000001 +-4.7154199999999999 136.56700000000001 1.5472999999999999 +-3.0234200000000002 134.69999999999999 1.4594 +-2.53999 134.69999999999999 1.44842 +-1.2544999999999999 136.56700000000001 1.43743 +-0.47442000000000001 134.69999999999999 1.43743 +0.041973099999999999 136.56700000000001 1.44842 +0.80008000000000001 136.56700000000001 1.4594 +0.80008000000000001 134.69999999999999 1.4594 +1.9427300000000001 136.56700000000001 1.4923599999999999 +1.9427300000000001 134.69999999999999 1.4923599999999999 +2.1514899999999999 136.56700000000001 1.50335 +2.1514899999999999 134.69999999999999 1.50335 +3.7555999999999998 136.56700000000001 1.65717 +0.54737800000000003 29.850100000000001 2.0636899999999998 +3.8984299999999998 134.69999999999999 1.6901299999999999 +3.9753400000000001 134.69999999999999 1.72309 +3.1952600000000002 138.435 1.9318500000000001 +2.3492600000000001 136.56700000000001 1.99777 +0.80008000000000001 136.56700000000001 2.0636899999999998 +0.80008000000000001 138.435 2.0636899999999998 +-0.21073 138.435 2.0746799999999999 +0.041973099999999999 140.31399999999999 2.0746799999999999 +-3.9353400000000001 138.435 2.0197400000000001 +-4.1440999999999999 136.56700000000001 2.0087600000000001 +-5.1878700000000002 134.69999999999999 1.9318500000000001 +-5.0450400000000002 136.56700000000001 1.9428300000000001 +-5.5614299999999997 134.69999999999999 1.8878999999999999 +-5.66031 134.69999999999999 1.8769100000000001 +-5.9679500000000001 134.69999999999999 1.72309 +-5.9679500000000001 136.56700000000001 1.72309 +-5.8800499999999998 138.435 1.6901299999999999 +-5.93499 136.56700000000001 1.71211 +-5.8800499999999998 134.69999999999999 1.6901299999999999 +-5.5614299999999997 132.821 1.6242099999999999 +-5.66031 134.69999999999999 1.64618 +-5.5614299999999997 136.56700000000001 1.6242099999999999 +-5.3197099999999997 134.69999999999999 1.6022400000000001 +-5.1878700000000002 138.435 1.58026 +-4.7154199999999999 134.69999999999999 1.5472999999999999 +-3.2651300000000001 134.69999999999999 1.4703900000000001 +-2.53999 132.821 1.44842 +-2.7816999999999998 132.821 1.4594 +-2.0345800000000001 132.821 1.44842 +-1.2544999999999999 134.69999999999999 1.43743 +-0.21073 134.69999999999999 1.43743 +0.041973099999999999 134.69999999999999 1.44842 +0.29467500000000002 132.821 1.44842 +0.54737800000000003 134.69999999999999 1.44842 +1.7339800000000001 132.821 1.4923599999999999 +1.7339800000000001 134.69999999999999 1.4923599999999999 +2.3492600000000001 132.821 1.51434 +3.4589500000000002 136.56700000000001 1.6132200000000001 +3.5688200000000001 136.56700000000001 1.6242099999999999 +3.9973100000000001 134.69999999999999 1.7450699999999999 +3.9753400000000001 132.821 1.7890200000000001 +3.94238 134.69999999999999 1.8109900000000001 +3.8325100000000001 134.69999999999999 1.84395 +3.5688200000000001 138.435 1.8878999999999999 +3.67869 140.31399999999999 1.8769100000000001 +2.8876200000000001 136.56700000000001 1.9648099999999999 +1.2725200000000001 134.69999999999999 2.0417200000000002 +0.80008000000000001 134.69999999999999 2.0636899999999998 +0.041973099999999999 136.56700000000001 2.0746799999999999 +-0.21073 134.69999999999999 2.0746799999999999 +-0.21073 136.56700000000001 2.0746799999999999 +-0.21073 140.31399999999999 2.0746799999999999 +-5.4515599999999997 132.821 1.90987 +-5.4515599999999997 134.69999999999999 1.90987 +-5.5614299999999997 132.821 1.8878999999999999 +-5.66031 138.435 1.8769100000000001 +-5.66031 136.56700000000001 1.8769100000000001 +-5.7482100000000003 134.69999999999999 1.85494 +-5.9899199999999997 134.69999999999999 1.77803 +3.4589500000000002 29.850100000000001 1.6132200000000001 +3.5688200000000001 27.971299999999999 1.6242099999999999 +-3.9353400000000001 130.953 1.50335 +-3.0234200000000002 132.821 1.4594 +-2.28728 130.953 1.44842 +-2.28728 132.821 1.44842 +-0.990811 130.953 1.43743 +-0.990811 132.821 1.43743 +0.041973099999999999 130.953 1.44842 +-0.21073 130.953 1.43743 +0.54737800000000003 130.953 1.44842 +0.54737800000000003 132.821 1.44842 +1.04179 132.821 1.4594 +1.9427300000000001 132.821 1.4923599999999999 +3.4589500000000002 130.953 1.6132200000000001 +-2.28728 35.464500000000001 2.0746799999999999 +3.67869 132.821 1.64618 +3.8984299999999998 130.953 1.6901299999999999 +3.4589500000000002 130.953 1.89889 +3.1952600000000002 136.56700000000001 1.9318500000000001 +3.1952600000000002 134.69999999999999 1.9318500000000001 +3.3380899999999998 136.56700000000001 1.92086 +3.3380899999999998 138.435 1.92086 +2.8876200000000001 132.821 1.9648099999999999 +1.04179 132.821 2.0527000000000002 +0.29467500000000002 132.821 2.0636899999999998 +0.54737800000000003 134.69999999999999 2.0636899999999998 +0.041973099999999999 134.69999999999999 2.0746799999999999 +-0.47442000000000001 134.69999999999999 2.0746799999999999 +-0.47442000000000001 138.435 2.0746799999999999 +-3.2651300000000001 138.435 2.0417200000000002 +-5.1878700000000002 130.953 1.9318500000000001 +-5.5614299999999997 130.953 1.8878999999999999 +-5.9899199999999997 130.953 1.7450699999999999 +-5.9899199999999997 132.821 1.77803 +-5.8800499999999998 129.07400000000001 1.6901299999999999 +-5.8251200000000001 130.953 1.6791400000000001 +-4.7154199999999999 129.07400000000001 1.5472999999999999 +-3.9353400000000001 129.07400000000001 1.50335 +-4.1440999999999999 130.953 1.50335 +-3.0234200000000002 130.953 1.4594 +-2.53999 129.07400000000001 1.44842 +-1.7818799999999999 130.953 1.43743 +-0.73810900000000002 129.07400000000001 1.43743 +-0.73810900000000002 130.953 1.43743 +0.041973099999999999 129.07400000000001 1.44842 +0.80008000000000001 129.07400000000001 1.4594 +1.9427300000000001 130.953 1.4923599999999999 +2.1514899999999999 129.07400000000001 1.50335 +3.3380899999999998 129.07400000000001 1.6022400000000001 +3.3380899999999998 130.953 1.6022400000000001 +3.7555999999999998 129.07400000000001 1.65717 +3.8325100000000001 130.953 1.6791400000000001 +3.94238 130.953 1.71211 +3.9973100000000001 129.07400000000001 1.7450699999999999 +3.9753400000000001 129.07400000000001 1.7890200000000001 +3.8984299999999998 130.953 1.8219799999999999 +3.8325100000000001 130.953 1.84395 +3.4589500000000002 129.07400000000001 1.89889 +3.3380899999999998 129.07400000000001 1.92086 +3.4589500000000002 132.821 1.89889 +2.1514899999999999 130.953 2.0087600000000001 +2.1514899999999999 132.821 2.0087600000000001 +1.2725200000000001 130.953 2.0417200000000002 +1.50325 132.821 2.0417200000000002 +0.80008000000000001 132.821 2.0636899999999998 +0.54737800000000003 130.953 2.0636899999999998 +-0.47442000000000001 132.821 2.0746799999999999 +-0.73810900000000002 132.821 2.0746799999999999 +-0.990811 134.69999999999999 2.0746799999999999 +-0.73810900000000002 136.56700000000001 2.0746799999999999 +-2.7816999999999998 140.31399999999999 2.0636899999999998 +-5.66031 130.953 1.8769100000000001 +-5.7482100000000003 132.821 1.85494 +-5.5614299999999997 127.206 1.6242099999999999 +-4.7154199999999999 127.206 1.5472999999999999 +-4.8802300000000001 129.07400000000001 1.55829 +-4.1440999999999999 127.206 1.50335 +-3.0234200000000002 127.206 1.4594 +-2.7816999999999998 127.206 1.4594 +-2.28728 129.07400000000001 1.44842 +-2.0345800000000001 129.07400000000001 1.44842 +-1.2544999999999999 127.206 1.43743 +-0.73810900000000002 127.206 1.43743 +-0.21073 129.07400000000001 1.43743 +0.54737800000000003 127.206 1.44842 +0.54737800000000003 129.07400000000001 1.44842 +0.80008000000000001 127.206 1.4594 +1.04179 129.07400000000001 1.4594 +2.1514899999999999 127.206 1.50335 +2.3492600000000001 129.07400000000001 1.51434 +2.3492600000000001 127.206 1.51434 +3.9753400000000001 129.07400000000001 1.72309 +4.0083000000000002 129.07400000000001 1.7560500000000001 +3.3380899999999998 127.206 1.92086 +3.4589500000000002 127.206 1.89889 +2.72282 130.953 1.9758 +0.80008000000000001 140.31399999999999 1.4594 +1.9427300000000001 130.953 2.0197400000000001 +1.50325 130.953 2.0417200000000002 +0.80008000000000001 130.953 2.0636899999999998 +-0.21073 130.953 2.0746799999999999 +-0.47442000000000001 129.07400000000001 2.0746799999999999 +-3.0234200000000002 138.435 2.0527000000000002 +-5.66031 129.07400000000001 1.8769100000000001 +-5.8251200000000001 127.206 1.84395 +-5.8251200000000001 129.07400000000001 1.84395 +-5.9899199999999997 127.206 1.7450699999999999 +-5.9899199999999997 129.07400000000001 1.77803 +-5.66031 127.206 1.64618 +-3.9353400000000001 125.339 1.50335 +-2.0345800000000001 127.206 1.44842 +-1.2544999999999999 125.339 1.43743 +-0.73810900000000002 125.339 1.43743 +1.04179 127.206 1.4594 +3.7555999999999998 127.206 1.65717 +3.8325100000000001 127.206 1.6791400000000001 +4.0083000000000002 127.206 1.7560500000000001 +3.1952600000000002 127.206 1.9318500000000001 +1.50325 129.07400000000001 2.0417200000000002 +-0.73810900000000002 129.07400000000001 2.0746799999999999 +-1.2544999999999999 127.206 2.0746799999999999 +-1.2544999999999999 129.07400000000001 2.0746799999999999 +-1.5181899999999999 130.953 2.0746799999999999 +-1.2544999999999999 136.56700000000001 2.0746799999999999 +-1.5181899999999999 136.56700000000001 2.0746799999999999 +-1.2544999999999999 138.435 2.0746799999999999 +-2.28728 140.31399999999999 2.0636899999999998 +-2.7816999999999998 136.56700000000001 2.0636899999999998 +-3.2651300000000001 134.69999999999999 2.0417200000000002 +-3.49586 132.821 2.0417200000000002 +-4.1440999999999999 127.206 2.0087600000000001 +-3.9353400000000001 129.07400000000001 2.0197400000000001 +-5.1878700000000002 125.339 1.9318500000000001 +-5.5614299999999997 127.206 1.8878999999999999 +-5.7482100000000003 127.206 1.85494 +-5.8800499999999998 125.339 1.8219799999999999 +-5.9899199999999997 125.339 1.77803 +-5.9899199999999997 127.206 1.77803 +-5.93499 127.206 1.71211 +-5.8800499999999998 125.339 1.6901299999999999 +-5.5614299999999997 125.339 1.6242099999999999 +-5.3197099999999997 125.339 1.6022400000000001 +-5.1878700000000002 129.07400000000001 1.58026 +1.2725200000000001 39.210999999999999 2.0417200000000002 +-4.7154199999999999 125.339 1.5472999999999999 +-4.5286400000000002 125.339 1.5253300000000001 +-4.3418599999999996 125.339 1.51434 +-3.9353400000000001 123.45999999999999 1.50335 +-3.0234200000000002 123.45999999999999 1.4594 +-3.2651300000000001 125.339 1.4703900000000001 +-1.7818799999999999 31.7179 2.0746799999999999 +-0.990811 125.339 1.43743 +-0.47442000000000001 123.45999999999999 1.43743 +-0.47442000000000001 125.339 1.43743 +0.041973099999999999 125.339 1.44842 +0.80008000000000001 123.45999999999999 1.4594 +-5.0450400000000002 134.69999999999999 1.9428300000000001 +2.1514899999999999 123.45999999999999 1.50335 +2.1514899999999999 125.339 1.50335 +3.1952600000000002 127.206 1.58026 +3.0524300000000002 127.206 1.5692699999999999 +3.1952600000000002 123.45999999999999 1.58026 +3.3380899999999998 125.339 1.6022400000000001 +3.8984299999999998 125.339 1.6901299999999999 +3.94238 123.45999999999999 1.71211 +3.9753400000000001 125.339 1.72309 +3.8984299999999998 123.45999999999999 1.8219799999999999 +3.3380899999999998 125.339 1.92086 +3.0524300000000002 125.339 1.9428300000000001 +3.1952600000000002 125.339 1.9318500000000001 +3.1952600000000002 123.45999999999999 1.9318500000000001 +2.3492600000000001 125.339 1.99777 +2.1514899999999999 127.206 2.0087600000000001 +1.50325 125.339 2.0417200000000002 +1.04179 125.339 2.0527000000000002 +0.54737800000000003 125.339 2.0636899999999998 +0.041973099999999999 125.339 2.0746799999999999 +0.041973099999999999 127.206 2.0746799999999999 +-0.47442000000000001 127.206 2.0746799999999999 +-1.5181899999999999 127.206 2.0746799999999999 +-1.7818799999999999 127.206 2.0746799999999999 +-1.5181899999999999 132.821 2.0746799999999999 +-1.7818799999999999 132.821 2.0746799999999999 +-2.53999 138.435 2.0636899999999998 +-3.0234200000000002 134.69999999999999 2.0527000000000002 +-5.1878700000000002 123.45999999999999 1.9318500000000001 +-5.8251200000000001 123.45999999999999 1.84395 +-5.9899199999999997 123.45999999999999 1.7450699999999999 +-5.7482100000000003 121.581 1.65717 +-5.5614299999999997 129.07400000000001 1.6242099999999999 +-5.4515599999999997 127.206 1.6132200000000001 +-5.4515599999999997 123.45999999999999 1.6132200000000001 +-5.5614299999999997 123.45999999999999 1.6242099999999999 +-5.1878700000000002 121.592 1.58026 +-4.7154199999999999 123.45999999999999 1.5472999999999999 +-4.1440999999999999 121.592 1.50335 +-3.2651300000000001 123.45999999999999 1.4703900000000001 +-2.7816999999999998 121.592 1.4594 +-3.0234200000000002 121.592 1.4594 +-1.2544999999999999 123.45999999999999 1.43743 +-0.990811 121.592 1.43743 +-0.990811 123.45999999999999 1.43743 +0.54737800000000003 121.592 1.44842 +0.80008000000000001 121.592 1.4594 +1.2725200000000001 121.592 1.4703900000000001 +3.4589500000000002 123.45999999999999 1.6132200000000001 +3.4589500000000002 129.07400000000001 1.6132200000000001 +3.5688200000000001 127.206 1.6242099999999999 +3.5688200000000001 125.339 1.6242099999999999 +3.4589500000000002 125.339 1.6132200000000001 +3.94238 121.581 1.71211 +3.8984299999999998 123.45999999999999 1.6901299999999999 +3.9973100000000001 121.581 1.7450699999999999 +3.9973100000000001 123.45999999999999 1.7450699999999999 +3.9973100000000001 123.45999999999999 1.77803 +3.8325100000000001 123.45999999999999 1.84395 +3.67869 129.07400000000001 1.8769100000000001 +3.67869 125.339 1.8769100000000001 +3.67869 123.45999999999999 1.8769100000000001 +3.67869 121.581 1.8769100000000001 +3.5688200000000001 121.581 1.8878999999999999 +3.4589500000000002 123.45999999999999 1.90987 +3.5688200000000001 123.45999999999999 1.8878999999999999 +3.1952600000000002 121.581 1.9318500000000001 +2.8876200000000001 123.45999999999999 1.9648099999999999 +2.1514899999999999 125.339 2.0087600000000001 +0.80008000000000001 123.45999999999999 2.0636899999999998 +0.80008000000000001 125.339 2.0636899999999998 +0.29467500000000002 123.45999999999999 2.0636899999999998 +0.29467500000000002 125.339 2.0636899999999998 +-0.47442000000000001 123.45999999999999 2.0746799999999999 +-0.990811 125.339 2.0746799999999999 +-1.5181899999999999 123.45999999999999 2.0746799999999999 +-1.2544999999999999 125.339 2.0746799999999999 +-1.7818799999999999 125.339 2.0746799999999999 +-1.5181899999999999 125.339 2.0746799999999999 +-1.7818799999999999 130.953 2.0746799999999999 +-2.0345800000000001 134.69999999999999 2.0746799999999999 +-1.7818799999999999 138.435 2.0746799999999999 +-1.7818799999999999 136.56700000000001 2.0746799999999999 +-3.2651300000000001 130.953 2.0417200000000002 +-5.0450400000000002 123.45999999999999 1.9428300000000001 +-5.4515599999999997 121.581 1.90987 +-5.8800499999999998 121.581 1.8219799999999999 +-5.4515599999999997 121.581 1.6132200000000001 +-5.5614299999999997 121.581 1.6242099999999999 +-5.1878700000000002 123.45999999999999 1.58026 +-2.28728 121.592 1.44842 +-0.21073 121.592 1.43743 +0.54737800000000003 119.71299999999999 1.44842 +0.29467500000000002 121.592 1.44842 +1.04179 119.71299999999999 1.4594 +2.3492600000000001 121.581 1.51434 +2.1514899999999999 121.581 1.50335 +3.7555999999999998 119.71299999999999 1.65717 +3.8984299999999998 119.71299999999999 1.6901299999999999 +3.8984299999999998 121.581 1.6901299999999999 +3.9753400000000001 121.581 1.72309 +4.0083000000000002 119.71299999999999 1.7560500000000001 +4.0083000000000002 121.581 1.7560500000000001 +3.9973100000000001 119.71299999999999 1.77803 +3.9973100000000001 121.581 1.77803 +3.4589500000000002 119.71299999999999 1.90987 +2.1514899999999999 123.45999999999999 2.0087600000000001 +2.3492600000000001 123.45999999999999 1.99777 +1.50325 123.45999999999999 2.0417200000000002 +0.80008000000000001 121.581 2.0636899999999998 +0.54737800000000003 123.45999999999999 2.0636899999999998 +0.041973099999999999 121.581 2.0746799999999999 +3.8984299999999998 138.435 1.6901299999999999 +0.041973099999999999 123.45999999999999 2.0746799999999999 +-5.9679500000000001 125.339 1.72309 +-5.9679500000000001 127.206 1.72309 +-0.21073 123.45999999999999 2.0746799999999999 +-5.8251200000000001 119.71299999999999 1.6791400000000001 +-0.73810900000000002 123.45999999999999 2.0746799999999999 +-0.990811 121.581 2.0746799999999999 +-1.7818799999999999 123.45999999999999 2.0746799999999999 +-2.28728 123.45999999999999 2.0636899999999998 +-2.0345800000000001 130.953 2.0746799999999999 +-2.0345800000000001 132.821 2.0746799999999999 +-3.49586 127.206 2.0417200000000002 +-5.5614299999999997 121.581 1.8878999999999999 +2.1514899999999999 138.435 2.0087600000000001 +-5.8800499999999998 119.71299999999999 1.6901299999999999 +-5.7482100000000003 117.845 1.65717 +-5.66031 119.71299999999999 1.64618 +-3.2651300000000001 117.845 1.4703900000000001 +-2.53999 119.71299999999999 1.44842 +-1.7818799999999999 117.845 1.43743 +-2.0345800000000001 119.71299999999999 1.44842 +-1.5181899999999999 117.845 1.43743 +-5.93499 14.8637 1.71211 +-1.2544999999999999 117.845 1.43743 +-0.73810900000000002 119.71299999999999 1.43743 +-0.73810900000000002 117.845 1.43743 +-0.73810900000000002 121.592 1.43743 +0.041973099999999999 117.845 1.44842 +-0.21073 117.845 1.43743 +0.041973099999999999 119.71299999999999 1.44842 +0.80008000000000001 119.71299999999999 1.4594 +1.2725200000000001 117.845 1.4703900000000001 +1.04179 117.845 1.4594 +1.9427300000000001 119.71299999999999 1.4923599999999999 +3.7555999999999998 117.845 1.65717 +3.8325100000000001 119.71299999999999 1.6791400000000001 +3.8984299999999998 117.845 1.6901299999999999 +3.94238 119.71299999999999 1.71211 +3.9973100000000001 119.71299999999999 1.7450699999999999 +4.0083000000000002 117.845 1.7560500000000001 +3.0524300000000002 119.71299999999999 1.9428300000000001 +2.3492600000000001 121.581 1.99777 +-0.21073 119.71299999999999 2.0746799999999999 +-0.21073 121.581 2.0746799999999999 +-2.0345800000000001 119.71299999999999 2.0746799999999999 +-2.0345800000000001 121.581 2.0746799999999999 +-2.28728 119.71299999999999 2.0746799999999999 +-2.53999 121.581 2.0636899999999998 +-2.53999 127.206 2.0636899999999998 +-2.28728 129.07400000000001 2.0636899999999998 +-2.53999 130.953 2.0636899999999998 +-2.28728 134.69999999999999 2.0636899999999998 +-2.7816999999999998 129.07400000000001 2.0636899999999998 +-3.0234200000000002 129.07400000000001 2.0527000000000002 +-3.49586 125.339 2.0417200000000002 +-5.0450400000000002 117.845 1.9428300000000001 +-5.8251200000000001 117.845 1.84395 +-5.9899199999999997 117.845 1.7450699999999999 +-5.8251200000000001 115.97799999999999 1.6791400000000001 +-5.66031 117.845 1.64618 +-5.3197099999999997 115.97799999999999 1.6022400000000001 +-3.0234200000000002 115.97799999999999 1.4594 +-3.0234200000000002 117.845 1.4594 +-2.28728 115.97799999999999 1.44842 +-2.53999 117.845 1.44842 +-2.0345800000000001 115.97799999999999 1.44842 +-1.5181899999999999 115.97799999999999 1.43743 +-0.990811 115.97799999999999 1.43743 +-0.73810900000000002 115.97799999999999 1.43743 +-0.990811 117.845 1.43743 +-0.21073 115.97799999999999 1.43743 +-0.47442000000000001 117.845 1.43743 +0.80008000000000001 115.97799999999999 1.4594 +3.67869 117.845 1.64618 +3.8984299999999998 115.97799999999999 1.6901299999999999 +3.8325100000000001 117.845 1.6791400000000001 +3.7555999999999998 117.845 1.85494 +2.1514899999999999 119.71299999999999 2.0087600000000001 +2.1514899999999999 117.845 2.0087600000000001 +1.04179 119.71299999999999 2.0527000000000002 +0.29467500000000002 117.845 2.0636899999999998 +0.54737800000000003 119.71299999999999 2.0636899999999998 +-0.990811 117.845 2.0746799999999999 +-0.73810900000000002 117.845 2.0746799999999999 +-1.2544999999999999 119.71299999999999 2.0746799999999999 +-1.7818799999999999 117.845 2.0746799999999999 +-1.7818799999999999 119.71299999999999 2.0746799999999999 +-2.53999 117.845 2.0636899999999998 +-2.53999 119.71299999999999 2.0636899999999998 +-2.7816999999999998 121.581 2.0636899999999998 +-2.53999 123.45999999999999 2.0636899999999998 +-2.7816999999999998 127.206 2.0636899999999998 +-3.0234200000000002 125.339 2.0527000000000002 +-5.1878700000000002 115.97799999999999 1.9318500000000001 +-5.1878700000000002 117.845 1.9318500000000001 +-5.66031 115.97799999999999 1.8769100000000001 +-5.8800499999999998 115.97799999999999 1.8219799999999999 +-5.9679500000000001 114.099 1.72309 +-5.9899199999999997 114.099 1.7450699999999999 +-5.9679500000000001 121.581 1.72309 +-5.9899199999999997 121.581 1.7450699999999999 +-5.93499 121.581 1.71211 +-5.8800499999999998 117.845 1.6901299999999999 +-5.66031 115.97799999999999 1.64618 +-5.1878700000000002 115.97799999999999 1.58026 +-5.1878700000000002 119.71299999999999 1.58026 +-3.9353400000000001 114.099 1.50335 +-2.28728 37.332299999999996 2.0746799999999999 +-2.53999 114.099 1.44842 +-2.28728 114.099 1.44842 +-1.7818799999999999 115.97799999999999 1.43743 +3.1952600000000002 121.581 1.58026 +3.1952600000000002 114.099 1.58026 +3.4589500000000002 114.099 1.6132200000000001 +3.8325100000000001 115.97799999999999 1.6791400000000001 +3.94238 114.099 1.71211 +3.9973100000000001 115.97799999999999 1.7450699999999999 +4.0083000000000002 114.099 1.7560500000000001 +3.94238 119.71299999999999 1.8109900000000001 +3.8984299999999998 117.845 1.8219799999999999 +3.7555999999999998 114.099 1.85494 +3.3380899999999998 114.099 1.92086 +3.3380899999999998 115.97799999999999 1.92086 +3.1952600000000002 115.97799999999999 1.9318500000000001 +3.1952600000000002 117.845 1.9318500000000001 +3.3380899999999998 123.45999999999999 1.92086 +3.0524300000000002 117.845 1.9428300000000001 +2.1514899999999999 115.97799999999999 2.0087600000000001 +1.9427300000000001 117.845 2.0197400000000001 +0.80008000000000001 115.97799999999999 2.0636899999999998 +-0.21073 115.97799999999999 2.0746799999999999 +-1.2544999999999999 115.97799999999999 2.0746799999999999 +-1.7818799999999999 115.97799999999999 2.0746799999999999 +-2.28728 115.97799999999999 2.0746799999999999 +-2.7816999999999998 117.845 2.0636899999999998 +-3.0234200000000002 121.581 2.0527000000000002 +-3.0234200000000002 123.45999999999999 2.0527000000000002 +-3.2651300000000001 121.581 2.0417200000000002 +-3.49586 121.581 2.0417200000000002 +-5.7482100000000003 114.099 1.85494 +-5.7482100000000003 119.71299999999999 1.85494 +-5.66031 117.845 1.8769100000000001 +-5.8251200000000001 115.97799999999999 1.84395 +-5.7482100000000003 115.97799999999999 1.85494 +-5.8251200000000001 114.099 1.6791400000000001 +-4.1440999999999999 114.099 1.50335 +-3.0234200000000002 114.099 1.4594 +-2.53999 112.22 1.44842 +-1.7818799999999999 114.099 1.43743 +-0.47442000000000001 114.099 1.43743 +-0.21073 114.099 1.43743 +3.8984299999999998 112.22 1.6901299999999999 +3.8325100000000001 114.099 1.6791400000000001 +3.8984299999999998 114.099 1.6901299999999999 +4.0083000000000002 112.22 1.7560500000000001 +3.9973100000000001 114.099 1.7450699999999999 +3.9753400000000001 114.099 1.7890200000000001 +3.9973100000000001 114.099 1.77803 +3.5688200000000001 112.22 1.8878999999999999 +3.4589500000000002 114.099 1.90987 +3.3380899999999998 112.22 1.92086 +3.0524300000000002 112.22 1.9428300000000001 +1.50325 115.97799999999999 2.0417200000000002 +0.29467500000000002 115.97799999999999 2.0636899999999998 +-0.73810900000000002 114.099 2.0746799999999999 +-0.73810900000000002 115.97799999999999 2.0746799999999999 +-0.990811 115.97799999999999 2.0746799999999999 +-1.5181899999999999 115.97799999999999 2.0746799999999999 +-2.0345800000000001 114.099 2.0746799999999999 +-2.0345800000000001 115.97799999999999 2.0746799999999999 +-2.53999 115.97799999999999 2.0636899999999998 +3.8984299999999998 119.71299999999999 1.8219799999999999 +-3.0234200000000002 114.099 2.0527000000000002 +-0.990811 130.953 2.0746799999999999 +-3.0234200000000002 115.97799999999999 2.0527000000000002 +-3.0234200000000002 117.845 2.0527000000000002 +-5.1878700000000002 114.099 1.9318500000000001 +-5.66031 112.22 1.8769100000000001 +-5.5614299999999997 114.099 1.8878999999999999 +-5.8800499999999998 110.363 1.6901299999999999 +-5.7482100000000003 110.363 1.65717 +-4.5286400000000002 110.363 1.5253300000000001 +-3.9353400000000001 110.363 1.50335 +-4.1440999999999999 112.22 1.50335 +-3.0234200000000002 110.363 1.4594 +-3.2651300000000001 112.22 1.4703900000000001 +-3.0234200000000002 112.22 1.4594 +-2.0345800000000001 112.22 1.44842 +-1.7818799999999999 110.363 1.43743 +-1.2544999999999999 112.22 1.43743 +-0.21073 112.22 1.43743 +-0.21073 110.363 1.43743 +0.041973099999999999 112.22 1.44842 +-1.2544999999999999 129.07400000000001 1.43743 +0.29467500000000002 110.363 1.44842 +0.54737800000000003 112.22 1.44842 +0.80008000000000001 112.22 1.4594 +2.1514899999999999 110.363 1.50335 +2.3492600000000001 112.22 1.51434 +2.1514899999999999 112.22 1.50335 +3.8325100000000001 110.363 1.6791400000000001 +3.8325100000000001 112.22 1.6791400000000001 +0.54737800000000003 142.18199999999999 1.44842 +3.9973100000000001 112.22 1.7450699999999999 +3.9753400000000001 138.435 1.7890200000000001 +3.94238 138.435 1.8109900000000001 +3.94238 132.821 1.8109900000000001 +3.9753400000000001 130.953 1.7890200000000001 +3.94238 130.953 1.8109900000000001 +3.94238 129.07400000000001 1.8109900000000001 +3.9753400000000001 119.71299999999999 1.7890200000000001 +3.9753400000000001 121.581 1.7890200000000001 +3.94238 117.845 1.8109900000000001 +3.9753400000000001 112.22 1.7890200000000001 +3.94238 112.22 1.8109900000000001 +3.8325100000000001 110.363 1.84395 +3.1952600000000002 110.363 1.9318500000000001 +2.1514899999999999 110.363 2.0087600000000001 +1.04179 114.099 2.0527000000000002 +0.54737800000000003 112.22 2.0636899999999998 +0.29467500000000002 112.22 2.0636899999999998 +0.29467500000000002 114.099 2.0636899999999998 +-0.21073 112.22 2.0746799999999999 +-1.2544999999999999 112.22 2.0746799999999999 +-1.7818799999999999 114.099 2.0746799999999999 +-1.7818799999999999 112.22 2.0746799999999999 +-2.28728 114.099 2.0746799999999999 +-3.2651300000000001 112.22 2.0417200000000002 +-3.2651300000000001 114.099 2.0417200000000002 +-3.2651300000000001 115.97799999999999 2.0417200000000002 +-5.5614299999999997 110.363 1.8878999999999999 +-5.5614299999999997 112.22 1.8878999999999999 +-5.7482100000000003 110.363 1.85494 +-5.8800499999999998 110.363 1.8219799999999999 +-5.9899199999999997 108.48399999999999 1.7450699999999999 +-5.8251200000000001 110.363 1.6791400000000001 +-5.66031 110.363 1.64618 +-5.3197099999999997 110.363 1.6022400000000001 +-5.0450400000000002 110.363 1.5692699999999999 +-4.7154199999999999 108.48399999999999 1.5472999999999999 +-4.3418599999999996 108.48399999999999 1.51434 +-3.2651300000000001 110.363 1.4703900000000001 +-3.0234200000000002 108.48399999999999 1.4594 +-2.7816999999999998 110.363 1.4594 +-2.53999 108.48399999999999 1.44842 +-2.0345800000000001 110.363 1.44842 +-1.7818799999999999 108.48399999999999 1.43743 +-0.73810900000000002 108.48399999999999 1.43743 +-0.990811 108.48399999999999 1.43743 +-0.47442000000000001 110.363 1.43743 +1.2725200000000001 108.48399999999999 1.4703900000000001 +2.3492600000000001 108.48399999999999 1.51434 +2.1514899999999999 108.48399999999999 1.50335 +3.8325100000000001 108.48399999999999 1.6791400000000001 +4.0083000000000002 110.363 1.7560500000000001 +3.9753400000000001 108.48399999999999 1.7890200000000001 +3.9973100000000001 108.48399999999999 1.77803 +3.8325100000000001 108.48399999999999 1.84395 +3.4589500000000002 110.363 1.90987 +3.3380899999999998 110.363 1.92086 +3.1952600000000002 108.48399999999999 1.9318500000000001 +1.9427300000000001 110.363 2.0197400000000001 +1.2725200000000001 110.363 2.0417200000000002 +1.04179 112.22 2.0527000000000002 +-0.73810900000000002 112.22 2.0746799999999999 +-0.990811 112.22 2.0746799999999999 +-2.28728 112.22 2.0746799999999999 +-3.49586 110.363 2.0417200000000002 +-3.9353400000000001 110.363 2.0197400000000001 +-5.1878700000000002 110.363 1.9318500000000001 +-5.4515599999999997 108.48399999999999 1.90987 +-5.66031 110.363 1.8769100000000001 +-5.9679500000000001 108.48399999999999 1.72309 +-5.7482100000000003 108.48399999999999 1.65717 +-4.5286400000000002 108.48399999999999 1.5253300000000001 +-4.1440999999999999 108.48399999999999 1.50335 +-2.53999 106.60599999999999 1.44842 +-2.28728 108.48399999999999 1.44842 +-1.2544999999999999 108.48399999999999 1.43743 +3.3380899999999998 114.099 1.6022400000000001 +0.29467500000000002 108.48399999999999 1.44842 +0.80008000000000001 106.60599999999999 1.4594 +1.9427300000000001 106.60599999999999 1.50335 +2.3492600000000001 134.69999999999999 1.51434 +3.3380899999999998 106.60599999999999 1.6022400000000001 +3.7555999999999998 108.48399999999999 1.65717 +3.8984299999999998 108.48399999999999 1.6901299999999999 +3.7555999999999998 108.48399999999999 1.85494 +3.4589500000000002 108.48399999999999 1.90987 +2.72282 106.60599999999999 1.9758 +2.1514899999999999 106.60599999999999 2.0087600000000001 +1.9427300000000001 108.48399999999999 2.0197400000000001 +1.2725200000000001 108.48399999999999 2.0417200000000002 +1.04179 110.363 2.0527000000000002 +-0.990811 110.363 2.0746799999999999 +-1.2544999999999999 110.363 2.0746799999999999 +-1.7818799999999999 110.363 2.0746799999999999 +-2.53999 110.363 2.0636899999999998 +-3.2651300000000001 110.363 2.0417200000000002 +-4.1440999999999999 108.48399999999999 2.0087600000000001 +-5.0450400000000002 108.48399999999999 1.9428300000000001 +-5.5614299999999997 108.48399999999999 1.8878999999999999 +-5.7482100000000003 106.60599999999999 1.85494 +-5.9899199999999997 106.60599999999999 1.7450699999999999 +-5.8251200000000001 106.60599999999999 1.6791400000000001 +-5.66031 104.738 1.64618 +-5.1878700000000002 104.738 1.58026 +-4.1440999999999999 104.738 1.50335 +-3.0234200000000002 106.60599999999999 1.4594 +-2.7816999999999998 106.60599999999999 1.4594 +-1.7818799999999999 104.738 1.43743 +-1.2544999999999999 104.738 1.43743 +-0.990811 104.738 1.43743 +-0.73810900000000002 106.60599999999999 1.43743 +-0.47442000000000001 104.738 1.43743 +0.041973099999999999 104.738 1.44842 +0.041973099999999999 106.60599999999999 1.44842 +0.29467500000000002 104.738 1.44842 +2.3492600000000001 106.60599999999999 1.51434 +2.1514899999999999 106.60599999999999 1.50335 +3.4589500000000002 104.738 1.6132200000000001 +3.9973100000000001 127.206 1.7450699999999999 +3.9973100000000001 125.339 1.7450699999999999 +3.8984299999999998 106.60599999999999 1.6901299999999999 +4.0083000000000002 106.60599999999999 1.7560500000000001 +3.9753400000000001 104.738 1.7890200000000001 +3.9973100000000001 104.738 1.77803 +3.8325100000000001 104.738 1.84395 +2.8876200000000001 106.60599999999999 1.9648099999999999 +2.1514899999999999 104.738 2.0087600000000001 +0.80008000000000001 108.48399999999999 2.0636899999999998 +0.54737800000000003 108.48399999999999 2.0636899999999998 +-0.21073 108.48399999999999 2.0746799999999999 +-0.47442000000000001 108.48399999999999 2.0746799999999999 +-0.990811 108.48399999999999 2.0746799999999999 +-1.7818799999999999 108.48399999999999 2.0746799999999999 +-2.7816999999999998 106.60599999999999 2.0636899999999998 +-3.9353400000000001 106.60599999999999 2.0197400000000001 +-4.1440999999999999 106.60599999999999 2.0087600000000001 +-5.1878700000000002 104.738 1.9318500000000001 +-5.5614299999999997 106.60599999999999 1.8878999999999999 +-5.0450400000000002 104.738 1.5692699999999999 +-4.7154199999999999 102.85899999999999 1.5472999999999999 +-4.1440999999999999 102.85899999999999 1.50335 +-2.7816999999999998 104.738 1.4594 +-2.53999 104.738 1.44842 +-1.5181899999999999 104.738 1.43743 +-0.73810900000000002 104.738 1.43743 +-0.21073 102.85899999999999 1.43743 +-0.21073 104.738 1.43743 +0.80008000000000001 104.738 1.4594 +3.94238 102.85899999999999 1.71211 +3.9753400000000001 140.31399999999999 1.72309 +3.94238 136.56700000000001 1.71211 +3.94238 134.69999999999999 1.71211 +3.9753400000000001 132.821 1.72309 +3.94238 132.821 1.71211 +3.94238 125.339 1.71211 +3.9753400000000001 123.45999999999999 1.72309 +3.9753400000000001 119.71299999999999 1.72309 +3.94238 117.845 1.71211 +3.9753400000000001 110.363 1.72309 +3.9753400000000001 108.48399999999999 1.72309 +3.94238 104.738 1.71211 +3.9753400000000001 102.85899999999999 1.72309 +3.9973100000000001 102.85899999999999 1.7450699999999999 +3.8984299999999998 104.738 1.8219799999999999 +3.8984299999999998 102.85899999999999 1.8219799999999999 +3.5688200000000001 104.738 1.8878999999999999 +3.1952600000000002 102.85899999999999 1.9318500000000001 +0.29467500000000002 117.845 1.44842 +2.72282 102.85899999999999 1.9758 +1.9427300000000001 102.85899999999999 2.0197400000000001 +-1.5181899999999999 121.592 1.43743 +0.80008000000000001 102.85899999999999 2.0636899999999998 +1.04179 102.85899999999999 2.0527000000000002 +0.80008000000000001 104.738 2.0636899999999998 +0.80008000000000001 106.60599999999999 2.0636899999999998 +0.54737800000000003 106.60599999999999 2.0636899999999998 +-0.73810900000000002 104.738 2.0746799999999999 +-0.990811 106.60599999999999 2.0746799999999999 +-2.0345800000000001 104.738 2.0746799999999999 +-3.0234200000000002 106.60599999999999 2.0527000000000002 +-2.7816999999999998 129.07400000000001 1.4594 +-5.4515599999999997 102.85899999999999 1.90987 +-5.66031 106.60599999999999 1.8769100000000001 +-5.7482100000000003 104.738 1.85494 +-5.8251200000000001 104.738 1.84395 +-5.9899199999999997 102.85899999999999 1.7450699999999999 +-5.8800499999999998 101.002 1.6901299999999999 +-5.7482100000000003 101.002 1.65717 +-5.1878700000000002 101.002 1.58026 +-5.5614299999999997 129.07400000000001 1.8878999999999999 +-5.4515599999999997 130.953 1.90987 +-2.28728 102.85899999999999 1.44842 +-2.53999 102.85899999999999 1.44842 +-2.0345800000000001 101.002 1.44842 +-2.0345800000000001 102.85899999999999 1.44842 +-1.5181899999999999 101.002 1.43743 +-0.73810900000000002 102.85899999999999 1.43743 +-0.21073 101.002 1.43743 +-0.47442000000000001 102.85899999999999 1.43743 +-1.2544999999999999 37.332299999999996 2.0746799999999999 +-1.5181899999999999 37.332299999999996 2.0746799999999999 +0.80008000000000001 101.002 1.4594 +1.04179 102.85899999999999 1.4594 +2.1514899999999999 101.002 1.50335 +3.67869 101.002 1.64618 +3.67869 102.85899999999999 1.64618 +3.8325100000000001 102.85899999999999 1.6791400000000001 +3.8984299999999998 102.85899999999999 1.6901299999999999 +3.9753400000000001 101.002 1.72309 +3.9753400000000001 101.002 1.7890200000000001 +3.7555999999999998 101.002 1.85494 +3.0524300000000002 102.85899999999999 1.9428300000000001 +2.8876200000000001 102.85899999999999 1.9648099999999999 +4.0083000000000002 108.48399999999999 1.7560500000000001 +2.1514899999999999 102.85899999999999 2.0087600000000001 +-3.2651300000000001 117.845 2.0417200000000002 +-1.2544999999999999 104.738 2.0746799999999999 +-1.7818799999999999 102.85899999999999 2.0746799999999999 +-1.7818799999999999 104.738 2.0746799999999999 +-3.49586 102.85899999999999 2.0417200000000002 +-3.2651300000000001 102.85899999999999 2.0417200000000002 +-5.0450400000000002 102.85899999999999 1.9428300000000001 +-5.7482100000000003 101.002 1.85494 +-5.8251200000000001 101.002 1.84395 +-5.3197099999999997 138.435 1.6022400000000001 +-5.9679500000000001 140.31399999999999 1.7890200000000001 +-5.93499 134.69999999999999 1.8109900000000001 +-5.9679500000000001 129.07400000000001 1.7890200000000001 +-5.9679500000000001 125.339 1.7890200000000001 +-5.93499 121.581 1.8109900000000001 +-5.9679500000000001 121.581 1.7890200000000001 +-5.9679500000000001 117.845 1.7890200000000001 +-5.93499 117.845 1.8109900000000001 +-5.9679500000000001 108.48399999999999 1.7890200000000001 +-5.9679500000000001 110.363 1.7890200000000001 +-5.93499 106.60599999999999 1.8109900000000001 +-5.9679500000000001 106.60599999999999 1.7890200000000001 +-5.8800499999999998 99.123500000000007 1.6901299999999999 +-5.8251200000000001 99.123500000000007 1.6791400000000001 +-5.8251200000000001 101.002 1.6791400000000001 +-4.8802300000000001 101.002 1.55829 +-4.1440999999999999 99.123500000000007 1.50335 +-2.53999 101.002 1.44842 +-2.28728 99.123500000000007 1.44842 +-2.28728 101.002 1.44842 +-0.990811 99.123500000000007 1.43743 +-0.73810900000000002 101.002 1.43743 +0.80008000000000001 99.123500000000007 1.4594 +0.54737800000000003 101.002 1.44842 +3.9973100000000001 101.002 1.7450699999999999 +4.0083000000000002 101.002 1.7560500000000001 +0.54737800000000003 136.56700000000001 1.44842 +3.8325100000000001 101.002 1.84395 +3.1952600000000002 99.123500000000007 1.9318500000000001 +1.9427300000000001 99.123500000000007 2.0197400000000001 +2.1514899999999999 101.002 2.0087600000000001 +0.80008000000000001 99.123500000000007 2.0636899999999998 +1.04179 101.002 2.0527000000000002 +0.54737800000000003 101.002 2.0636899999999998 +0.29467500000000002 101.002 2.0746799999999999 +0.29467500000000002 102.85899999999999 2.0746799999999999 +-0.73810900000000002 102.85899999999999 2.0746799999999999 +-0.990811 102.85899999999999 2.0746799999999999 +-0.990811 101.002 2.0746799999999999 +-2.0345800000000001 102.85899999999999 2.0746799999999999 +-3.0234200000000002 101.002 2.0527000000000002 +-2.7816999999999998 102.85899999999999 2.0636899999999998 +-3.2651300000000001 101.002 2.0417200000000002 +-5.7482100000000003 99.123500000000007 1.85494 +-5.9899199999999997 99.123500000000007 1.7450699999999999 +-5.93499 99.123500000000007 1.71211 +-5.7482100000000003 99.123500000000007 1.65717 +-5.4515599999999997 117.845 1.6132200000000001 +-5.4515599999999997 112.22 1.6132200000000001 +-5.5614299999999997 114.099 1.6242099999999999 +-5.5614299999999997 108.48399999999999 1.6242099999999999 +-5.4515599999999997 101.002 1.6132200000000001 +-2.7816999999999998 99.123500000000007 1.4594 +-2.53999 99.123500000000007 1.44842 +-2.0345800000000001 97.244699999999995 1.44842 +-1.2544999999999999 97.244699999999995 1.43743 +-1.5181899999999999 99.123500000000007 1.43743 +0.041973099999999999 99.123500000000007 1.44842 +0.29467500000000002 99.123500000000007 1.44842 +0.29467500000000002 97.244699999999995 1.44842 +2.3492600000000001 99.123500000000007 1.51434 +3.4589500000000002 119.71299999999999 1.6132200000000001 +3.4589500000000002 117.845 1.6132200000000001 +3.4589500000000002 115.97799999999999 1.6132200000000001 +3.5688200000000001 114.099 1.6242099999999999 +3.4589500000000002 110.363 1.6132200000000001 +3.4589500000000002 106.60599999999999 1.6132200000000001 +-4.5286400000000002 115.97799999999999 1.5253300000000001 +3.5688200000000001 99.123500000000007 1.6242099999999999 +3.8325100000000001 97.244699999999995 1.6791400000000001 +3.9753400000000001 97.244699999999995 1.72309 +4.0083000000000002 99.123500000000007 1.7560500000000001 +3.9973100000000001 97.244699999999995 1.77803 +3.9753400000000001 99.123500000000007 1.7890200000000001 +3.7555999999999998 97.244699999999995 1.85494 +3.5688200000000001 119.71299999999999 1.8878999999999999 +3.5688200000000001 114.099 1.8878999999999999 +3.67869 112.22 1.8769100000000001 +-2.28728 112.22 1.44842 +3.5688200000000001 110.363 1.8878999999999999 +3.5688200000000001 108.48399999999999 1.8878999999999999 +3.67869 104.738 1.8769100000000001 +3.5688200000000001 102.85899999999999 1.8878999999999999 +3.67869 102.85899999999999 1.8769100000000001 +3.5688200000000001 101.002 1.8878999999999999 +3.67869 97.244699999999995 1.8769100000000001 +3.5688200000000001 97.244699999999995 1.8878999999999999 +3.3380899999999998 99.123500000000007 1.92086 +-2.53999 127.206 1.44842 +2.72282 99.123500000000007 1.9758 +2.8876200000000001 99.123500000000007 1.9648099999999999 +2.1514899999999999 99.123500000000007 2.0087600000000001 +0.80008000000000001 97.244699999999995 2.0636899999999998 +1.04179 99.123500000000007 2.0527000000000002 +0.041973099999999999 97.244699999999995 2.0746799999999999 +0.041973099999999999 101.002 2.0746799999999999 +-0.21073 101.002 2.0746799999999999 +-0.73810900000000002 99.123500000000007 2.0746799999999999 +-0.990811 99.123500000000007 2.0746799999999999 +-1.5181899999999999 101.002 2.0746799999999999 +-5.8251200000000001 121.581 1.84395 +-1.7818799999999999 101.002 2.0746799999999999 +-2.0345800000000001 101.002 2.0746799999999999 +-3.2651300000000001 99.123500000000007 2.0417200000000002 +-4.1440999999999999 99.123500000000007 2.0087600000000001 +-5.4515599999999997 99.123500000000007 1.90987 +-5.66031 97.244699999999995 1.8769100000000001 +-0.21073 106.60599999999999 2.0746799999999999 +-5.8800499999999998 97.244699999999995 1.8219799999999999 +-5.66031 97.244699999999995 1.64618 +-5.1878700000000002 97.244699999999995 1.58026 +-5.1878700000000002 95.376900000000006 1.58026 +-2.53999 97.244699999999995 1.44842 +-0.990811 97.244699999999995 1.43743 +-0.73810900000000002 97.244699999999995 1.43743 +0.041973099999999999 95.376900000000006 1.44842 +0.80008000000000001 97.244699999999995 1.4594 +-0.47442000000000001 101.002 2.0746799999999999 +2.3492600000000001 95.376900000000006 1.51434 +3.7555999999999998 95.376900000000006 1.65717 +3.67869 97.244699999999995 1.64618 +3.8984299999999998 97.244699999999995 1.6901299999999999 +3.8984299999999998 95.376900000000006 1.6901299999999999 +3.94238 95.376900000000006 1.71211 +3.9973100000000001 97.244699999999995 1.7450699999999999 +4.0083000000000002 97.244699999999995 1.7560500000000001 +3.8325100000000001 97.244699999999995 1.84395 +3.1952600000000002 95.376900000000006 1.9318500000000001 +2.1514899999999999 95.376900000000006 2.0087600000000001 +2.3492600000000001 97.244699999999995 1.99777 +1.04179 95.376900000000006 2.0527000000000002 +0.29467500000000002 97.244699999999995 2.0746799999999999 +-0.21073 97.244699999999995 2.0746799999999999 +-0.47442000000000001 97.244699999999995 2.0746799999999999 +-1.5181899999999999 99.123500000000007 2.0746799999999999 +-2.53999 99.123500000000007 2.0636899999999998 +-2.28728 99.123500000000007 2.0746799999999999 +-2.7816999999999998 97.244699999999995 2.0636899999999998 +-3.9353400000000001 99.123500000000007 2.0197400000000001 +-5.0450400000000002 95.376900000000006 1.9428300000000001 +-5.9679500000000001 97.244699999999995 1.7890200000000001 +-5.9899199999999997 97.244699999999995 1.77803 +-5.9899199999999997 93.498099999999994 1.7450699999999999 +-5.9679500000000001 97.244699999999995 1.72309 +-5.7482100000000003 95.376900000000006 1.65717 +-5.66031 95.376900000000006 1.64618 +-5.1878700000000002 93.498099999999994 1.58026 +-4.7154199999999999 95.376900000000006 1.5472999999999999 +-3.2651300000000001 93.498099999999994 1.4703900000000001 +-2.0345800000000001 93.498099999999994 1.44842 +-1.7818799999999999 93.498099999999994 1.43743 +-0.21073 93.498099999999994 1.43743 +0.29467500000000002 95.376900000000006 1.44842 +1.04179 95.376900000000006 1.4594 +2.1514899999999999 93.498099999999994 1.50335 +2.3492600000000001 93.498099999999994 1.51434 +3.9973100000000001 93.498099999999994 1.7450699999999999 +3.9753400000000001 93.498099999999994 1.7890200000000001 +3.8984299999999998 95.376900000000006 1.8219799999999999 +3.4589500000000002 95.376900000000006 1.90987 +2.8876200000000001 93.498099999999994 1.9648099999999999 +1.9427300000000001 93.498099999999994 2.0197400000000001 +0.29467500000000002 93.498099999999994 2.0746799999999999 +0.54737800000000003 95.376900000000006 2.0636899999999998 +0.29467500000000002 95.376900000000006 2.0746799999999999 +-0.47442000000000001 95.376900000000006 2.0746799999999999 +-1.5181899999999999 97.244699999999995 2.0746799999999999 +-2.28728 95.376900000000006 2.0746799999999999 +-2.28728 97.244699999999995 2.0746799999999999 +-2.53999 97.244699999999995 2.0636899999999998 +-3.0234200000000002 95.376900000000006 2.0527000000000002 +-3.49586 97.244699999999995 2.0417200000000002 +-3.9353400000000001 97.244699999999995 2.0197400000000001 +-5.1878700000000002 93.498099999999994 1.9318500000000001 +-5.5614299999999997 93.498099999999994 1.8878999999999999 +-5.7482100000000003 93.498099999999994 1.85494 +-5.7482100000000003 95.376900000000006 1.85494 +-5.8251200000000001 95.376900000000006 1.84395 +-5.8251200000000001 91.630300000000005 1.6791400000000001 +-5.5614299999999997 91.630300000000005 1.6242099999999999 +-5.5614299999999997 95.376900000000006 1.6242099999999999 +-5.5614299999999997 93.498099999999994 1.6242099999999999 +-4.3418599999999996 91.630300000000005 1.51434 +-3.9353400000000001 93.498099999999994 1.50335 +-3.0234200000000002 91.630300000000005 1.4594 +-3.0234200000000002 93.498099999999994 1.4594 +-1.5181899999999999 93.498099999999994 1.43743 +-0.47442000000000001 91.630300000000005 1.43743 +-0.47442000000000001 93.498099999999994 1.43743 +0.80008000000000001 91.630300000000005 1.4594 +1.04179 91.630300000000005 1.4594 +1.9427300000000001 93.498099999999994 1.50335 +3.4589500000000002 91.630300000000005 1.6132200000000001 +3.8984299999999998 91.630300000000005 1.6901299999999999 +3.9753400000000001 93.498099999999994 1.72309 +4.0083000000000002 93.498099999999994 1.7560500000000001 +3.9753400000000001 91.630300000000005 1.7890200000000001 +3.9973100000000001 93.498099999999994 1.77803 +3.8325100000000001 93.498099999999994 1.84395 +3.67869 93.498099999999994 1.8769100000000001 +3.5688200000000001 91.630300000000005 1.8878999999999999 +3.4589500000000002 91.630300000000005 1.90987 +3.3380899999999998 91.630300000000005 1.92086 +3.4589500000000002 93.498099999999994 1.90987 +2.1514899999999999 93.498099999999994 2.0087600000000001 +1.50325 93.498099999999994 2.0417200000000002 +1.04179 91.630300000000005 2.0527000000000002 +0.54737800000000003 93.498099999999994 2.0636899999999998 +0.041973099999999999 93.498099999999994 2.0746799999999999 +-0.21073 91.630300000000005 2.0746799999999999 +-0.47442000000000001 93.498099999999994 2.0746799999999999 +-0.21073 93.498099999999994 2.0746799999999999 +-0.990811 91.630300000000005 2.0746799999999999 +-0.73810900000000002 93.498099999999994 2.0746799999999999 +-1.2544999999999999 95.376900000000006 2.0746799999999999 +-1.7818799999999999 93.498099999999994 2.0746799999999999 +-2.28728 93.498099999999994 2.0746799999999999 +-2.0345800000000001 95.376900000000006 2.0746799999999999 +-2.7816999999999998 93.498099999999994 2.0636899999999998 +-3.0234200000000002 93.498099999999994 2.0527000000000002 +-5.4515599999999997 91.630300000000005 1.90987 +-5.8251200000000001 93.498099999999994 1.84395 +-5.9899199999999997 91.630300000000005 1.7450699999999999 +-5.9899199999999997 89.762500000000003 1.7450699999999999 +-5.93499 95.376900000000006 1.71211 +-5.5614299999999997 89.762500000000003 1.6242099999999999 +-5.1878700000000002 89.762500000000003 1.58026 +-5.3197099999999997 91.630300000000005 1.6022400000000001 +-5.0450400000000002 91.630300000000005 1.5692699999999999 +-3.9353400000000001 89.762500000000003 1.50335 +-2.7816999999999998 91.630300000000005 1.4594 +-2.53999 89.762500000000003 1.44842 +-2.0345800000000001 91.630300000000005 1.44842 +-2.0345800000000001 89.762500000000003 1.44842 +-1.2544999999999999 91.630300000000005 1.43743 +-0.73810900000000002 89.762500000000003 1.43743 +0.54737800000000003 91.630300000000005 1.44842 +2.1514899999999999 89.762500000000003 1.50335 +3.1952600000000002 89.762500000000003 1.58026 +3.0524300000000002 95.376900000000006 1.5692699999999999 +3.0524300000000002 91.630300000000005 1.5692699999999999 +3.3380899999999998 89.762500000000003 1.6022400000000001 +3.5688200000000001 89.762500000000003 1.6242099999999999 +3.5688200000000001 91.630300000000005 1.6242099999999999 +3.9973100000000001 91.630300000000005 1.7450699999999999 +3.9973100000000001 91.630300000000005 1.77803 +1.2725200000000001 102.85899999999999 2.0417200000000002 +3.67869 91.630300000000005 1.8769100000000001 +3.4589500000000002 89.762500000000003 1.90987 +3.1952600000000002 93.498099999999994 1.9318500000000001 +3.1952600000000002 91.630300000000005 1.9318500000000001 +2.72282 91.630300000000005 1.9758 +2.8876200000000001 91.630300000000005 1.9648099999999999 +1.2725200000000001 91.630300000000005 2.0417200000000002 +0.54737800000000003 91.630300000000005 2.0636899999999998 +0.041973099999999999 91.630300000000005 2.0746799999999999 +-0.47442000000000001 89.762500000000003 2.0746799999999999 +-3.49586 136.56700000000001 2.0417200000000002 +-0.73810900000000002 91.630300000000005 2.0746799999999999 +-0.990811 89.762500000000003 2.0746799999999999 +-1.7818799999999999 91.630300000000005 2.0746799999999999 +-2.53999 91.630300000000005 2.0636899999999998 +-2.28728 91.630300000000005 2.0746799999999999 +-3.9353400000000001 93.498099999999994 2.0197400000000001 +-5.0450400000000002 91.630300000000005 1.9428300000000001 +-5.66031 89.762500000000003 1.8769100000000001 +-5.7482100000000003 89.762500000000003 1.85494 +-5.8251200000000001 91.630300000000005 1.84395 +-5.9679500000000001 93.498099999999994 1.7890200000000001 +-5.9899199999999997 89.762500000000003 1.77803 +-5.9899199999999997 95.376900000000006 1.7450699999999999 +0.54737800000000003 20.489100000000001 2.0636899999999998 +-5.9679500000000001 87.883700000000005 1.72309 +-5.8800499999999998 89.762500000000003 1.6901299999999999 +-5.7482100000000003 87.883700000000005 1.65717 +-5.4515599999999997 87.883700000000005 1.6132200000000001 +-4.7154199999999999 87.883700000000005 1.5472999999999999 +-3.0234200000000002 87.883700000000005 1.4594 +-1.7818799999999999 87.883700000000005 1.43743 +-1.7818799999999999 89.762500000000003 1.43743 +-1.5181899999999999 87.883700000000005 1.43743 +-0.47442000000000001 87.883700000000005 1.43743 +0.041973099999999999 87.883700000000005 1.44842 +-0.21073 89.762500000000003 1.43743 +0.041973099999999999 89.762500000000003 1.44842 +-5.7482100000000003 114.099 1.65717 +0.54737800000000003 89.762500000000003 1.44842 +0.80008000000000001 87.883700000000005 1.4594 +1.04179 89.762500000000003 1.4594 +0.80008000000000001 89.762500000000003 1.4594 +1.9427300000000001 89.762500000000003 1.50335 +2.3492600000000001 89.762500000000003 1.51434 +3.4589500000000002 87.883700000000005 1.6132200000000001 +3.7555999999999998 89.762500000000003 1.65717 +3.94238 87.883700000000005 1.71211 +3.9973100000000001 87.883700000000005 1.7450699999999999 +4.0083000000000002 87.883700000000005 1.7560500000000001 +3.9973100000000001 89.762500000000003 1.77803 +3.9753400000000001 89.762500000000003 1.7890200000000001 +3.94238 91.630300000000005 1.8109900000000001 +3.8984299999999998 89.762500000000003 1.8219799999999999 +3.8984299999999998 91.630300000000005 1.8219799999999999 +3.1952600000000002 89.762500000000003 1.9318500000000001 +1.50325 87.883700000000005 2.0417200000000002 +0.29467500000000002 89.762500000000003 2.0746799999999999 +0.041973099999999999 87.883700000000005 2.0746799999999999 +0.041973099999999999 89.762500000000003 2.0746799999999999 +-0.47442000000000001 87.883700000000005 2.0746799999999999 +-1.2544999999999999 89.762500000000003 2.0746799999999999 +-1.5181899999999999 89.762500000000003 2.0746799999999999 +-3.0234200000000002 91.630300000000005 2.0527000000000002 +-5.1878700000000002 87.883700000000005 1.9318500000000001 +-5.66031 93.498099999999994 1.8769100000000001 +-5.7482100000000003 91.630300000000005 1.85494 +-5.7482100000000003 87.883700000000005 1.85494 +-5.8251200000000001 89.762500000000003 1.84395 +-5.8800499999999998 87.883700000000005 1.8219799999999999 +-4.1440999999999999 87.883700000000005 1.50335 +-3.2651300000000001 87.883700000000005 1.4703900000000001 +-2.7816999999999998 86.015900000000002 1.4594 +-2.28728 87.883700000000005 1.44842 +-1.2544999999999999 87.883700000000005 1.43743 +-0.73810900000000002 87.883700000000005 1.43743 +0.29467500000000002 87.883700000000005 1.44842 +0.80008000000000001 86.015900000000002 1.4594 +2.1514899999999999 87.883700000000005 1.50335 +1.9427300000000001 87.883700000000005 1.50335 +2.3492600000000001 87.883700000000005 1.51434 +3.0524300000000002 87.883700000000005 1.5692699999999999 +3.7555999999999998 102.85899999999999 1.85494 +-5.8800499999999998 108.48399999999999 1.6901299999999999 +3.3380899999999998 87.883700000000005 1.6022400000000001 +3.4589500000000002 86.015900000000002 1.6132200000000001 +3.67869 87.883700000000005 1.64618 +3.8984299999999998 87.883700000000005 1.6901299999999999 +3.67869 87.883700000000005 1.8769100000000001 +3.3380899999999998 87.883700000000005 1.92086 +2.1514899999999999 87.883700000000005 2.0087600000000001 +1.2725200000000001 86.015900000000002 2.0417200000000002 +0.80008000000000001 87.883700000000005 2.0636899999999998 +0.29467500000000002 87.883700000000005 2.0746799999999999 +-0.21073 86.015900000000002 2.0746799999999999 +-0.47442000000000001 86.015900000000002 2.0746799999999999 +-0.73810900000000002 87.883700000000005 2.0746799999999999 +-0.990811 87.883700000000005 2.0746799999999999 +-1.2544999999999999 87.883700000000005 2.0746799999999999 +-1.2544999999999999 86.015900000000002 2.0746799999999999 +-1.5181899999999999 86.015900000000002 2.0746799999999999 +-1.7818799999999999 87.883700000000005 2.0746799999999999 +-1.5181899999999999 87.883700000000005 2.0746799999999999 +-2.28728 89.762500000000003 2.0746799999999999 +-2.53999 87.883700000000005 2.0636899999999998 +-2.7816999999999998 89.762500000000003 2.0636899999999998 +-3.0234200000000002 87.883700000000005 2.0527000000000002 +-5.0450400000000002 87.883700000000005 1.9428300000000001 +-5.4515599999999997 86.015900000000002 1.90987 +-5.5614299999999997 86.015900000000002 1.8878999999999999 +-5.5614299999999997 87.883700000000005 1.8878999999999999 +-5.8800499999999998 86.015900000000002 1.8219799999999999 +-5.9679500000000001 87.883700000000005 1.7890200000000001 +-5.9679500000000001 89.762500000000003 1.7890200000000001 +-4.7154199999999999 86.015900000000002 1.5472999999999999 +2.1514899999999999 26.1035 2.0087600000000001 +1.9427300000000001 26.1035 2.0197400000000001 +-4.5286400000000002 84.148099999999999 1.5253300000000001 +3.67869 101.002 1.8769100000000001 +-4.3418599999999996 84.148099999999999 1.51434 +-4.3418599999999996 86.015900000000002 1.51434 +-4.1440999999999999 84.148099999999999 1.50335 +-2.53999 86.015900000000002 1.44842 +-2.28728 84.148099999999999 1.44842 +-2.28728 86.015900000000002 1.44842 +3.7555999999999998 132.821 1.65717 +-1.2544999999999999 86.015900000000002 1.43743 +-0.73810900000000002 84.148099999999999 1.43743 +-0.21073 84.148099999999999 1.43743 +-1.2544999999999999 110.363 1.43743 +0.29467500000000002 86.015900000000002 1.44842 +0.80008000000000001 84.148099999999999 1.4594 +1.9427300000000001 86.015900000000002 1.50335 +3.3380899999999998 84.148099999999999 1.6022400000000001 +3.9753400000000001 84.148099999999999 1.7890200000000001 +3.9753400000000001 86.015900000000002 1.7890200000000001 +3.9973100000000001 86.015900000000002 1.77803 +3.3380899999999998 84.148099999999999 1.92086 +2.1514899999999999 86.015900000000002 2.0087600000000001 +1.9427300000000001 84.148099999999999 2.0197400000000001 +1.04179 84.148099999999999 2.0527000000000002 +1.04179 86.015900000000002 2.0527000000000002 +0.041973099999999999 84.148099999999999 2.0746799999999999 +-0.73810900000000002 86.015900000000002 2.0746799999999999 +-0.990811 86.015900000000002 2.0746799999999999 +-1.7818799999999999 84.148099999999999 2.0746799999999999 +-5.8251200000000001 97.244699999999995 1.6791400000000001 +-1.7818799999999999 86.015900000000002 2.0746799999999999 +-2.28728 86.015900000000002 2.0746799999999999 +-3.2651300000000001 86.015900000000002 2.0417200000000002 +-5.5614299999999997 84.148099999999999 1.8878999999999999 +-5.66031 84.148099999999999 1.8769100000000001 +-5.1878700000000002 82.269300000000001 1.58026 +-5.1878700000000002 84.148099999999999 1.58026 +-5.1878700000000002 86.015900000000002 1.58026 +-0.47442000000000001 117.845 2.0746799999999999 +-2.53999 84.148099999999999 1.44842 +-2.28728 82.269300000000001 1.44842 +-2.0345800000000001 82.269300000000001 1.44842 +-1.5181899999999999 82.269300000000001 1.43743 +-1.7818799999999999 84.148099999999999 1.43743 +-0.990811 82.269300000000001 1.43743 +-0.47442000000000001 82.269300000000001 1.43743 +-0.47442000000000001 84.148099999999999 1.43743 +0.29467500000000002 82.269300000000001 1.44842 +0.80008000000000001 82.269300000000001 1.4594 +2.1514899999999999 84.148099999999999 1.50335 +3.1952600000000002 82.269300000000001 1.58026 +3.0524300000000002 84.148099999999999 1.5692699999999999 +3.1952600000000002 84.148099999999999 1.58026 +3.5688200000000001 84.148099999999999 1.6242099999999999 +3.7555999999999998 84.148099999999999 1.65717 +3.67869 84.148099999999999 1.64618 +3.8984299999999998 82.269300000000001 1.6901299999999999 +4.0083000000000002 82.269300000000001 1.7560500000000001 +4.0083000000000002 84.148099999999999 1.7560500000000001 +3.5688200000000001 26.1035 1.8878999999999999 +3.9973100000000001 82.269300000000001 1.77803 +3.9973100000000001 84.148099999999999 1.77803 +-1.7818799999999999 121.592 1.43743 +3.94238 87.883700000000005 1.8109900000000001 +3.8984299999999998 82.269300000000001 1.8219799999999999 +3.3380899999999998 82.269300000000001 1.92086 +3.4589500000000002 84.148099999999999 1.90987 +3.3380899999999998 86.015900000000002 1.92086 +3.1952600000000002 86.015900000000002 1.9318500000000001 +2.72282 84.148099999999999 1.9758 +2.1514899999999999 82.269300000000001 2.0087600000000001 +0.54737800000000003 84.148099999999999 2.0636899999999998 +0.041973099999999999 82.269300000000001 2.0746799999999999 +0.29467500000000002 84.148099999999999 2.0746799999999999 +3.9973100000000001 110.363 1.7450699999999999 +-0.21073 84.148099999999999 2.0746799999999999 +-0.47442000000000001 84.148099999999999 2.0746799999999999 +-0.990811 82.269300000000001 2.0746799999999999 +-1.7818799999999999 82.269300000000001 2.0746799999999999 +-2.0345800000000001 84.148099999999999 2.0746799999999999 +-2.7816999999999998 86.015900000000002 2.0636899999999998 +-3.0234200000000002 86.015900000000002 2.0527000000000002 +-3.49586 84.148099999999999 2.0417200000000002 +-3.49586 86.015900000000002 2.0417200000000002 +-5.5614299999999997 82.269300000000001 1.8878999999999999 +-5.4515599999999997 84.148099999999999 1.90987 +-5.7482100000000003 86.015900000000002 1.85494 +-5.66031 86.015900000000002 1.8769100000000001 +-5.8800499999999998 80.401499999999999 1.6901299999999999 +-5.93499 82.269300000000001 1.71211 +-5.5614299999999997 82.269300000000001 1.6242099999999999 +-5.5614299999999997 80.401499999999999 1.6242099999999999 +-5.4515599999999997 80.401499999999999 1.6132200000000001 +-5.0450400000000002 80.401499999999999 1.5692699999999999 +-5.8800499999999998 24.224699999999999 1.6901299999999999 +-4.7154199999999999 80.401499999999999 1.5472999999999999 +-3.0234200000000002 80.401499999999999 1.4594 +-2.7816999999999998 80.401499999999999 1.4594 +-2.28728 80.401499999999999 1.44842 +-1.7818799999999999 80.401499999999999 1.43743 +-1.7818799999999999 82.269300000000001 1.43743 +-0.47442000000000001 80.401499999999999 1.43743 +-0.21073 80.401499999999999 1.43743 +0.041973099999999999 80.401499999999999 1.44842 +-0.21073 82.269300000000001 1.43743 +0.041973099999999999 82.269300000000001 1.44842 +0.54737800000000003 82.269300000000001 1.44842 +0.80008000000000001 80.401499999999999 1.4594 +3.4589500000000002 80.401499999999999 1.6132200000000001 +3.4589500000000002 82.269300000000001 1.6132200000000001 +3.8325100000000001 80.401499999999999 1.6791400000000001 +3.8325100000000001 82.269300000000001 1.6791400000000001 +3.9753400000000001 82.269300000000001 1.72309 +3.9973100000000001 80.401499999999999 1.7450699999999999 +4.0083000000000002 80.401499999999999 1.7560500000000001 +3.7555999999999998 80.401499999999999 1.85494 +2.72282 80.401499999999999 1.9758 +2.8876200000000001 82.269300000000001 1.9648099999999999 +-5.7482100000000003 129.07400000000001 1.85494 +0.54737800000000003 80.401499999999999 2.0636899999999998 +0.54737800000000003 82.269300000000001 2.0636899999999998 +0.29467500000000002 82.269300000000001 2.0746799999999999 +-0.21073 80.401499999999999 2.0746799999999999 +-0.21073 82.269300000000001 2.0746799999999999 +-0.73810900000000002 82.269300000000001 2.0746799999999999 +-1.2544999999999999 80.401499999999999 2.0746799999999999 +-2.28728 82.269300000000001 2.0746799999999999 +-2.53999 80.401499999999999 2.0636899999999998 +-2.7816999999999998 82.269300000000001 2.0636899999999998 +-2.7816999999999998 84.148099999999999 2.0636899999999998 +-3.0234200000000002 84.148099999999999 2.0527000000000002 +3.3380899999999998 130.953 1.92086 +-3.49586 82.269300000000001 2.0417200000000002 +-3.2651300000000001 84.148099999999999 2.0417200000000002 +-5.66031 80.401499999999999 1.8769100000000001 +-5.8800499999999998 80.401499999999999 1.8219799999999999 +-5.93499 86.015900000000002 1.8109900000000001 +-5.9679500000000001 84.148099999999999 1.7890200000000001 +-5.9899199999999997 80.401499999999999 1.77803 +-5.9899199999999997 78.5227 1.7450699999999999 +-5.9679500000000001 80.401499999999999 1.72309 +-5.8800499999999998 78.5227 1.6901299999999999 +-5.8251200000000001 80.401499999999999 1.6791400000000001 +-4.8802300000000001 80.401499999999999 1.55829 +-4.5286400000000002 78.5227 1.5253300000000001 +-3.0234200000000002 78.5227 1.4594 +-2.0345800000000001 80.401499999999999 1.44842 +-0.990811 80.401499999999999 1.43743 +-0.73810900000000002 80.401499999999999 1.43743 +0.29467500000000002 80.401499999999999 1.44842 +2.1514899999999999 78.5227 1.50335 +3.0524300000000002 80.401499999999999 1.5692699999999999 +3.94238 78.5227 1.71211 +3.8984299999999998 80.401499999999999 1.6901299999999999 +3.94238 33.585700000000003 1.71211 +3.9973100000000001 78.5227 1.77803 +3.9973100000000001 80.401499999999999 1.77803 +3.3380899999999998 78.5227 1.92086 +3.1952600000000002 80.401499999999999 1.9318500000000001 +2.3492600000000001 80.401499999999999 1.99777 +1.2725200000000001 80.401499999999999 2.0417200000000002 +1.2725200000000001 78.5227 2.0417200000000002 +1.04179 80.401499999999999 2.0527000000000002 +-0.21073 78.5227 2.0746799999999999 +-0.47442000000000001 80.401499999999999 2.0746799999999999 +-1.2544999999999999 78.5227 2.0746799999999999 +-2.0345800000000001 78.5227 2.0746799999999999 +-2.53999 78.5227 2.0636899999999998 +3.1952600000000002 132.821 1.9318500000000001 +3.1952600000000002 130.953 1.9318500000000001 +-2.28728 80.401499999999999 2.0746799999999999 +3.94238 125.339 1.8109900000000001 +3.94238 127.206 1.8109900000000001 +-2.53999 82.269300000000001 2.0636899999999998 +-3.2651300000000001 80.401499999999999 2.0417200000000002 +-3.0234200000000002 82.269300000000001 2.0527000000000002 +-5.5614299999999997 80.401499999999999 1.8878999999999999 +-5.66031 78.5227 1.8769100000000001 +-5.7482100000000003 82.269300000000001 1.85494 +-5.66031 82.269300000000001 1.8769100000000001 +-5.7482100000000003 80.401499999999999 1.85494 +-5.8251200000000001 78.5227 1.6791400000000001 +-5.8251200000000001 76.654899999999998 1.6791400000000001 +-5.4515599999999997 76.654899999999998 1.6132200000000001 +-4.3418599999999996 78.5227 1.51434 +-3.2651300000000001 78.5227 1.4703900000000001 +-3.0234200000000002 76.654899999999998 1.4594 +-2.7816999999999998 78.5227 1.4594 +-2.28728 78.5227 1.44842 +-1.5181899999999999 76.654899999999998 1.43743 +-4.7154199999999999 121.592 1.5472999999999999 +-0.990811 78.5227 1.43743 +0.041973099999999999 78.5227 1.44842 +0.29467500000000002 78.5227 1.44842 +0.29467500000000002 76.654899999999998 1.44842 +2.1514899999999999 76.654899999999998 1.50335 +2.3492600000000001 76.654899999999998 1.51434 +3.4589500000000002 78.5227 1.6132200000000001 +-1.2544999999999999 134.69999999999999 2.0746799999999999 +3.8984299999999998 78.5227 1.6901299999999999 +3.9973100000000001 101.002 1.77803 +4.0083000000000002 76.654899999999998 1.7560500000000001 +3.9753400000000001 78.5227 1.7890200000000001 +3.4589500000000002 76.654899999999998 1.90987 +3.4589500000000002 78.5227 1.90987 +2.1514899999999999 76.654899999999998 2.0087600000000001 +0.29467500000000002 78.5227 2.0746799999999999 +-0.21073 76.654899999999998 2.0746799999999999 +-1.7818799999999999 76.654899999999998 2.0746799999999999 +-1.7818799999999999 78.5227 2.0746799999999999 +-2.0345800000000001 76.654899999999998 2.0746799999999999 +-2.53999 76.654899999999998 2.0636899999999998 +-3.0234200000000002 78.5227 2.0527000000000002 +-3.0234200000000002 80.401499999999999 2.0527000000000002 +-2.7816999999999998 80.401499999999999 2.0636899999999998 +-5.8800499999999998 76.654899999999998 1.8219799999999999 +-5.8251200000000001 78.5227 1.84395 +-5.93499 80.401499999999999 1.71211 +-5.5614299999999997 74.787099999999995 1.6242099999999999 +-5.0450400000000002 74.787099999999995 1.5692699999999999 +-4.7154199999999999 74.787099999999995 1.5472999999999999 +-2.7816999999999998 74.787099999999995 1.4594 +-0.73810900000000002 33.585700000000003 2.0746799999999999 +-1.7818799999999999 74.787099999999995 1.43743 +-1.5181899999999999 74.787099999999995 1.43743 +-0.990811 76.654899999999998 1.43743 +-0.47442000000000001 74.787099999999995 1.43743 +-0.73810900000000002 76.654899999999998 1.43743 +0.29467500000000002 74.787099999999995 1.44842 +0.041973099999999999 76.654899999999998 1.44842 +-5.3197099999999997 95.376900000000006 1.6022400000000001 +1.04179 74.787099999999995 1.4594 +1.9427300000000001 76.654899999999998 1.50335 +2.1514899999999999 74.787099999999995 1.50335 +3.0524300000000002 74.787099999999995 1.5692699999999999 +3.5688200000000001 74.787099999999995 1.6242099999999999 +3.4589500000000002 76.654899999999998 1.6132200000000001 +3.7555999999999998 74.787099999999995 1.65717 +3.67869 74.787099999999995 1.64618 +3.94238 74.787099999999995 1.71211 +3.9973100000000001 74.787099999999995 1.7450699999999999 +3.9753400000000001 76.654899999999998 1.72309 +4.0083000000000002 74.787099999999995 1.7560500000000001 +3.9973100000000001 76.654899999999998 1.7450699999999999 +3.8325100000000001 76.654899999999998 1.84395 +3.1952600000000002 78.5227 1.9318500000000001 +2.8876200000000001 76.654899999999998 1.9648099999999999 +1.9427300000000001 74.787099999999995 2.0197400000000001 +0.80008000000000001 74.787099999999995 2.0636899999999998 +1.04179 76.654899999999998 2.0527000000000002 +0.54737800000000003 74.787099999999995 2.0636899999999998 +0.29467500000000002 76.654899999999998 2.0746799999999999 +-0.21073 74.787099999999995 2.0746799999999999 +-0.47442000000000001 76.654899999999998 2.0746799999999999 +-0.73810900000000002 76.654899999999998 2.0746799999999999 +-1.2544999999999999 74.787099999999995 2.0746799999999999 +-2.53999 74.787099999999995 2.0636899999999998 +-2.28728 76.654899999999998 2.0746799999999999 +-3.49586 78.5227 2.0417200000000002 +-5.0450400000000002 76.654899999999998 1.9428300000000001 +-5.8251200000000001 74.787099999999995 1.84395 +3.7555999999999998 140.31399999999999 1.85494 +-5.9899199999999997 74.787099999999995 1.7450699999999999 +-5.9679500000000001 74.787099999999995 1.72309 +-5.8800499999999998 72.9084 1.6901299999999999 +-4.5286400000000002 129.07400000000001 1.5253300000000001 +-5.7482100000000003 74.787099999999995 1.65717 +-5.1878700000000002 72.9084 1.58026 +-5.3197099999999997 74.787099999999995 1.6022400000000001 +-4.7154199999999999 72.9084 1.5472999999999999 +-3.2651300000000001 72.9084 1.4703900000000001 +-2.53999 72.9084 1.44842 +-1.7818799999999999 72.9084 1.43743 +-2.0345800000000001 72.9084 1.44842 +-1.2544999999999999 74.787099999999995 1.43743 +-0.990811 74.787099999999995 1.43743 +0.80008000000000001 110.363 1.4594 +0.041973099999999999 74.787099999999995 1.44842 +-5.5614299999999997 97.244699999999995 1.8878999999999999 +0.54737800000000003 74.787099999999995 1.44842 +3.8984299999999998 72.9084 1.6901299999999999 +3.9973100000000001 74.787099999999995 1.77803 +3.9753400000000001 72.9084 1.7890200000000001 +0.80008000000000001 125.339 1.4594 +3.8984299999999998 72.9084 1.8219799999999999 +3.5688200000000001 74.787099999999995 1.8878999999999999 +-2.28728 127.206 1.44842 +3.0524300000000002 74.787099999999995 1.9428300000000001 +3.0524300000000002 72.9084 1.9428300000000001 +1.2725200000000001 74.787099999999995 2.0417200000000002 +1.04179 74.787099999999995 2.0527000000000002 +0.80008000000000001 72.9084 2.0636899999999998 +0.29467500000000002 74.787099999999995 2.0746799999999999 +-0.47442000000000001 74.787099999999995 2.0746799999999999 +-0.990811 127.206 2.0746799999999999 +-5.9899199999999997 142.18199999999999 1.7450699999999999 +-1.7818799999999999 72.9084 2.0746799999999999 +-2.28728 74.787099999999995 2.0746799999999999 +-2.53999 72.9084 2.0636899999999998 +-3.0234200000000002 72.9084 2.0527000000000002 +-4.1440999999999999 74.787099999999995 2.0087600000000001 +-5.9899199999999997 97.244699999999995 1.7450699999999999 +-5.9899199999999997 99.123500000000007 1.77803 +-5.4515599999999997 74.787099999999995 1.90987 +-5.7482100000000003 76.654899999999998 1.85494 +-5.8251200000000001 72.9084 1.6791400000000001 +-5.7482100000000003 71.040599999999998 1.65717 +-5.1878700000000002 71.040599999999998 1.58026 +-5.3197099999999997 72.9084 1.6022400000000001 +-4.8802300000000001 72.9084 1.55829 +-4.5286400000000002 71.040599999999998 1.5253300000000001 +-4.1440999999999999 72.9084 1.50335 +-2.7816999999999998 71.040599999999998 1.4594 +-1.5181899999999999 71.040599999999998 1.43743 +-0.990811 71.040599999999998 1.43743 +-0.990811 72.9084 1.43743 +-0.47442000000000001 72.9084 1.43743 +-0.21073 72.9084 1.43743 +0.29467500000000002 71.040599999999998 1.44842 +0.041973099999999999 71.040599999999998 1.44842 +-5.8800499999999998 99.123500000000007 1.8219799999999999 +0.29467500000000002 72.9084 1.44842 +0.80008000000000001 72.9084 1.4594 +0.54737800000000003 72.9084 1.44842 +1.04179 71.040599999999998 1.4594 +1.9427300000000001 72.9084 1.50335 +2.3492600000000001 71.040599999999998 1.51434 +2.3492600000000001 125.339 1.51434 +3.9973100000000001 71.040599999999998 1.7450699999999999 +4.0083000000000002 71.040599999999998 1.7560500000000001 +3.9973100000000001 72.9084 1.77803 +3.7555999999999998 72.9084 1.85494 +3.4589500000000002 71.040599999999998 1.90987 +3.3380899999999998 74.787099999999995 1.6022400000000001 +2.72282 72.9084 1.9758 +2.72282 71.040599999999998 1.9758 +-5.8251200000000001 123.45999999999999 1.6791400000000001 +2.3492600000000001 72.9084 1.99777 +3.9973100000000001 108.48399999999999 1.7450699999999999 +0.80008000000000001 71.040599999999998 2.0636899999999998 +0.54737800000000003 71.040599999999998 2.0636899999999998 +0.54737800000000003 72.9084 2.0636899999999998 +3.1952600000000002 39.210999999999999 1.9318500000000001 +-0.47442000000000001 71.040599999999998 2.0746799999999999 +-2.7816999999999998 125.339 1.4594 +-0.73810900000000002 71.040599999999998 2.0746799999999999 +-0.990811 71.040599999999998 2.0746799999999999 +-1.2544999999999999 72.9084 2.0746799999999999 +-1.7818799999999999 71.040599999999998 2.0746799999999999 +-2.53999 71.040599999999998 2.0636899999999998 +-2.7816999999999998 72.9084 2.0636899999999998 +-3.2651300000000001 71.040599999999998 2.0417200000000002 +-3.2651300000000001 72.9084 2.0417200000000002 +-3.9353400000000001 74.787099999999995 2.0197400000000001 +-5.1878700000000002 76.654899999999998 1.9318500000000001 +-5.66031 71.040599999999998 1.8769100000000001 +-5.5614299999999997 72.9084 1.8878999999999999 +-5.8251200000000001 72.9084 1.84395 +-5.8251200000000001 71.040599999999998 1.84395 +-5.8800499999999998 72.9084 1.8219799999999999 +-5.9899199999999997 71.040599999999998 1.7450699999999999 +-5.8251200000000001 69.161799999999999 1.6791400000000001 +-5.3197099999999997 69.161799999999999 1.6022400000000001 +-5.3197099999999997 71.040599999999998 1.6022400000000001 +-5.0450400000000002 72.9084 1.5692699999999999 +-3.9353400000000001 69.161799999999999 1.50335 +-3.2651300000000001 69.161799999999999 1.4703900000000001 +-2.28728 69.161799999999999 1.44842 +-1.7818799999999999 69.161799999999999 1.43743 +-1.2544999999999999 71.040599999999998 1.43743 +-0.73810900000000002 71.040599999999998 1.43743 +-0.47442000000000001 71.040599999999998 1.43743 +-0.21073 71.040599999999998 1.43743 +0.041973099999999999 69.161799999999999 1.44842 +0.54737800000000003 71.040599999999998 1.44842 +3.0524300000000002 71.040599999999998 1.5692699999999999 +3.67869 69.161799999999999 1.64618 +3.8325100000000001 69.161799999999999 1.6791400000000001 +4.0083000000000002 69.161799999999999 1.7560500000000001 +3.9753400000000001 69.161799999999999 1.7890200000000001 +3.5688200000000001 71.040599999999998 1.8878999999999999 +3.3380899999999998 69.161799999999999 1.92086 +3.0524300000000002 71.040599999999998 1.9428300000000001 +3.0524300000000002 69.161799999999999 1.9428300000000001 +2.72282 69.161799999999999 1.9758 +2.8876200000000001 71.040599999999998 1.9648099999999999 +2.1514899999999999 71.040599999999998 2.0087600000000001 +1.9427300000000001 69.161799999999999 2.0197400000000001 +1.04179 71.040599999999998 2.0527000000000002 +0.80008000000000001 69.161799999999999 2.0636899999999998 +-0.47442000000000001 69.161799999999999 2.0746799999999999 +-2.0345800000000001 71.040599999999998 2.0746799999999999 +-2.28728 69.161799999999999 2.0746799999999999 +0.29467500000000002 91.630300000000005 1.44842 +-2.28728 71.040599999999998 2.0746799999999999 +-2.53999 69.161799999999999 2.0636899999999998 +3.3380899999999998 20.489100000000001 1.92086 +3.3380899999999998 22.3569 1.92086 +3.4589500000000002 136.56700000000001 1.89889 +-5.5614299999999997 69.161799999999999 1.8878999999999999 +-5.5614299999999997 71.040599999999998 1.8878999999999999 +-5.7482100000000003 72.9084 1.85494 +2.72282 115.97799999999999 1.9758 +2.72282 114.099 1.9758 +-5.9899199999999997 71.040599999999998 1.77803 +-5.93499 69.161799999999999 1.71211 +-5.8251200000000001 67.283000000000001 1.6791400000000001 +-5.8800499999999998 69.161799999999999 1.6901299999999999 +-5.7482100000000003 67.283000000000001 1.65717 +-5.5614299999999997 130.953 1.6242099999999999 +-5.5614299999999997 69.161799999999999 1.6242099999999999 +-5.66031 69.161799999999999 1.64618 +-5.1878700000000002 67.283000000000001 1.58026 +-3.9353400000000001 67.283000000000001 1.50335 +-3.0234200000000002 69.161799999999999 1.4594 +-2.7816999999999998 69.161799999999999 1.4594 +-1.7818799999999999 67.283000000000001 1.43743 +-1.5181899999999999 69.161799999999999 1.43743 +-1.2544999999999999 69.161799999999999 1.43743 +-0.990811 69.161799999999999 1.43743 +-0.73810900000000002 69.161799999999999 1.43743 +-0.47442000000000001 67.283000000000001 1.43743 +-0.21073 69.161799999999999 1.43743 +0.29467500000000002 67.283000000000001 1.44842 +0.29467500000000002 69.161799999999999 1.44842 +0.54737800000000003 67.283000000000001 1.44842 +3.3380899999999998 67.283000000000001 1.6022400000000001 +-3.0234200000000002 95.376900000000006 1.4594 +3.94238 67.283000000000001 1.71211 +4.0083000000000002 67.283000000000001 1.7560500000000001 +3.7555999999999998 69.161799999999999 1.85494 +3.8325100000000001 69.161799999999999 1.84395 +2.3492600000000001 140.31399999999999 1.99777 +3.0524300000000002 67.283000000000001 1.9428300000000001 +3.1952600000000002 69.161799999999999 1.9318500000000001 +2.8876200000000001 69.161799999999999 1.9648099999999999 +0.29467500000000002 69.161799999999999 2.0746799999999999 +-0.21073 69.161799999999999 2.0746799999999999 +-0.73810900000000002 69.161799999999999 2.0746799999999999 +-1.2544999999999999 67.283000000000001 2.0746799999999999 +-1.7818799999999999 67.283000000000001 2.0746799999999999 +-5.4515599999999997 127.206 1.90987 +-5.4515599999999997 129.07400000000001 1.90987 +-1.5181899999999999 69.161799999999999 2.0746799999999999 +-2.0345800000000001 67.283000000000001 2.0746799999999999 +-5.8251200000000001 102.85899999999999 1.6791400000000001 +-2.0345800000000001 69.161799999999999 2.0746799999999999 +-2.53999 67.283000000000001 2.0636899999999998 +-3.2651300000000001 67.283000000000001 2.0417200000000002 +-3.2651300000000001 69.161799999999999 2.0417200000000002 +3.0524300000000002 114.099 1.5692699999999999 +-3.9353400000000001 71.040599999999998 2.0197400000000001 +-5.0450400000000002 67.283000000000001 1.9428300000000001 +-5.66031 67.283000000000001 1.8769100000000001 +-5.8251200000000001 67.283000000000001 1.84395 +-5.8251200000000001 69.161799999999999 1.84395 +-5.0450400000000002 65.426199999999994 1.5692699999999999 +-3.2651300000000001 65.426199999999994 1.4703900000000001 +-3.0234200000000002 67.283000000000001 1.4594 +-2.53999 65.426199999999994 1.44842 +-2.7816999999999998 67.283000000000001 1.4594 +-2.53999 67.283000000000001 1.44842 +-2.28728 65.426199999999994 1.44842 +-2.28728 67.283000000000001 1.44842 +-1.5181899999999999 67.283000000000001 1.43743 +-0.73810900000000002 65.426199999999994 1.43743 +-0.990811 65.426199999999994 1.43743 +-2.7816999999999998 87.883700000000005 1.4594 +-0.21073 67.283000000000001 1.43743 +0.041973099999999999 65.426199999999994 1.44842 +1.9427300000000001 67.283000000000001 1.50335 +2.3492600000000001 65.426199999999994 1.51434 +-5.8251200000000001 86.015900000000002 1.84395 +-5.93499 112.22 1.71211 +3.9973100000000001 65.426199999999994 1.7450699999999999 +3.9753400000000001 67.283000000000001 1.72309 +3.94238 106.60599999999999 1.8109900000000001 +3.9753400000000001 106.60599999999999 1.7890200000000001 +3.94238 102.85899999999999 1.8109900000000001 +3.9753400000000001 102.85899999999999 1.7890200000000001 +3.94238 99.123500000000007 1.8109900000000001 +3.9753400000000001 97.244699999999995 1.7890200000000001 +3.9753400000000001 95.376900000000006 1.7890200000000001 +3.94238 95.376900000000006 1.8109900000000001 +3.94238 93.498099999999994 1.8109900000000001 +3.94238 86.015900000000002 1.8109900000000001 +3.9753400000000001 82.269300000000001 1.7890200000000001 +-2.28728 71.040599999999998 1.44842 +3.9753400000000001 80.401499999999999 1.7890200000000001 +-0.73810900000000002 101.002 2.0746799999999999 +3.9753400000000001 74.787099999999995 1.7890200000000001 +3.94238 74.787099999999995 1.8109900000000001 +3.9753400000000001 71.040599999999998 1.7890200000000001 +3.94238 67.283000000000001 1.8109900000000001 +3.9753400000000001 67.283000000000001 1.7890200000000001 +3.5688200000000001 65.426199999999994 1.8878999999999999 +3.4589500000000002 67.283000000000001 1.90987 +3.1952600000000002 67.283000000000001 1.9318500000000001 +2.1514899999999999 67.283000000000001 2.0087600000000001 +-3.0234200000000002 97.244699999999995 2.0527000000000002 +1.2725200000000001 67.283000000000001 2.0417200000000002 +-3.49586 74.787099999999995 2.0417200000000002 +-3.2651300000000001 74.787099999999995 2.0417200000000002 +0.041973099999999999 67.283000000000001 2.0746799999999999 +-0.21073 65.426199999999994 2.0746799999999999 +-0.21073 67.283000000000001 2.0746799999999999 +-0.990811 65.426199999999994 2.0856699999999999 +-0.990811 67.283000000000001 2.0746799999999999 +-1.5181899999999999 67.283000000000001 2.0746799999999999 +-1.7818799999999999 65.426199999999994 2.0746799999999999 +-2.7816999999999998 67.283000000000001 2.0636899999999998 +-3.2651300000000001 65.426199999999994 2.0417200000000002 +-3.0234200000000002 67.283000000000001 2.0527000000000002 +-3.49586 65.426199999999994 2.0417200000000002 +-4.1440999999999999 65.426199999999994 2.0087600000000001 +-5.5614299999999997 67.283000000000001 1.8878999999999999 +-5.7482100000000003 67.283000000000001 1.85494 +-5.9899199999999997 63.547400000000003 1.7450699999999999 +-5.9679500000000001 65.426199999999994 1.72309 +-5.1878700000000002 63.547400000000003 1.58026 +-5.3197099999999997 65.426199999999994 1.6022400000000001 +-5.0450400000000002 63.547400000000003 1.5692699999999999 +-4.3418599999999996 65.426199999999994 1.51434 +-4.1440999999999999 63.547400000000003 1.50335 +-3.0234200000000002 63.547400000000003 1.4594 +-3.0234200000000002 65.426199999999994 1.4594 +-2.0345800000000001 63.547400000000003 1.44842 +0.041973099999999999 63.547400000000003 1.44842 +0.54737800000000003 63.547400000000003 1.44842 +0.29467500000000002 65.426199999999994 1.44842 +0.80008000000000001 65.426199999999994 1.4594 +1.2725200000000001 63.547400000000003 1.4703900000000001 +2.1514899999999999 63.547400000000003 1.50335 +2.1514899999999999 65.426199999999994 1.50335 +3.0524300000000002 63.547400000000003 1.5692699999999999 +3.3380899999999998 65.426199999999994 1.6022400000000001 +3.9973100000000001 63.547400000000003 1.7450699999999999 +4.0083000000000002 63.547400000000003 1.7560500000000001 +4.0083000000000002 65.426199999999994 1.7560500000000001 +3.9973100000000001 63.547400000000003 1.77803 +3.9973100000000001 65.426199999999994 1.77803 +-4.3418599999999996 89.762500000000003 1.51434 +3.8984299999999998 63.547400000000003 1.8219799999999999 +3.7555999999999998 63.547400000000003 1.85494 +3.4589500000000002 65.426199999999994 1.90987 +3.1952600000000002 65.426199999999994 1.9318500000000001 +3.3380899999999998 65.426199999999994 1.92086 +-5.9679500000000001 29.850100000000001 1.7890200000000001 +3.0524300000000002 65.426199999999994 1.9428300000000001 +3.0524300000000002 63.547400000000003 1.9428300000000001 +2.8876200000000001 65.426199999999994 1.9648099999999999 +1.9427300000000001 65.426199999999994 2.0197400000000001 +0.80008000000000001 65.426199999999994 2.0636899999999998 +-0.21073 63.547400000000003 2.0746799999999999 +-0.47442000000000001 65.426199999999994 2.0746799999999999 +-0.990811 63.547400000000003 2.0856699999999999 +-1.5181899999999999 63.547400000000003 2.0746799999999999 +-1.7818799999999999 63.547400000000003 2.0746799999999999 +-2.0345800000000001 63.547400000000003 2.0746799999999999 +-2.7816999999999998 63.547400000000003 2.0636899999999998 +-2.7816999999999998 65.426199999999994 2.0636899999999998 +-3.0234200000000002 63.547400000000003 2.0527000000000002 +-3.0234200000000002 65.426199999999994 2.0527000000000002 +-3.2651300000000001 63.547400000000003 2.0417200000000002 +-4.1440999999999999 63.547400000000003 2.0087600000000001 +-3.9353400000000001 63.547400000000003 2.0197400000000001 +-5.5614299999999997 63.547400000000003 1.8878999999999999 +-5.8800499999999998 65.426199999999994 1.8219799999999999 +-1.5181899999999999 78.5227 2.0746799999999999 +-5.8251200000000001 63.547400000000003 1.6791400000000001 +-5.3197099999999997 61.668599999999998 1.6022400000000001 +-5.3197099999999997 63.547400000000003 1.6022400000000001 +-4.7154199999999999 61.668599999999998 1.5472999999999999 +-4.7154199999999999 63.547400000000003 1.5472999999999999 +-4.1440999999999999 97.244699999999995 1.50335 +-3.9353400000000001 63.547400000000003 1.50335 +-2.7816999999999998 61.668599999999998 1.4594 +-2.28728 63.547400000000003 1.44842 +-1.7818799999999999 63.547400000000003 1.43743 +-1.5181899999999999 61.668599999999998 1.43743 +-1.5181899999999999 63.547400000000003 1.43743 +-0.47442000000000001 63.547400000000003 1.43743 +0.80008000000000001 61.668599999999998 1.4594 +1.04179 61.668599999999998 1.4594 +0.80008000000000001 63.547400000000003 1.4594 +1.04179 63.547400000000003 1.4594 +1.9427300000000001 61.668599999999998 1.50335 +2.1514899999999999 61.668599999999998 1.50335 +3.3380899999999998 63.547400000000003 1.6022400000000001 +3.94238 61.668599999999998 1.71211 +3.9973100000000001 61.668599999999998 1.7450699999999999 +3.9753400000000001 63.547400000000003 1.72309 +3.9973100000000001 61.668599999999998 1.77803 +3.94238 63.547400000000003 1.8109900000000001 +3.4589500000000002 61.668599999999998 1.90987 +3.3380899999999998 61.668599999999998 1.92086 +3.4589500000000002 63.547400000000003 1.90987 +3.0524300000000002 61.668599999999998 1.9428300000000001 +3.1952600000000002 63.547400000000003 1.9318500000000001 +2.1514899999999999 61.668599999999998 2.0087600000000001 +0.80008000000000001 63.547400000000003 2.0636899999999998 +0.29467500000000002 63.547400000000003 2.0746799999999999 +-0.47442000000000001 63.547400000000003 2.0746799999999999 +-5.7482100000000003 136.56700000000001 1.65717 +-0.73810900000000002 63.547400000000003 2.0746799999999999 +-1.7818799999999999 61.668599999999998 2.0746799999999999 +-1.5181899999999999 61.668599999999998 2.0746799999999999 +-2.28728 63.547400000000003 2.0746799999999999 +-2.53999 63.547400000000003 2.0636899999999998 +-2.53999 61.668599999999998 2.0636899999999998 +-3.2651300000000001 61.668599999999998 2.0417200000000002 +-3.49586 61.668599999999998 2.0417200000000002 +-3.9353400000000001 61.668599999999998 2.0197400000000001 +-5.1878700000000002 61.668599999999998 1.9318500000000001 +-5.0450400000000002 61.668599999999998 1.9428300000000001 +-5.9899199999999997 61.668599999999998 1.77803 +-4.5286400000000002 74.787099999999995 1.5253300000000001 +-5.9899199999999997 61.668599999999998 1.7450699999999999 +-5.8251200000000001 61.668599999999998 1.6791400000000001 +-5.1878700000000002 59.800800000000002 1.58026 +-4.1440999999999999 61.668599999999998 1.50335 +0.29467500000000002 115.97799999999999 1.44842 +-2.0345800000000001 59.800800000000002 1.44842 +-1.7818799999999999 61.668599999999998 1.43743 +-0.73810900000000002 59.800800000000002 1.43743 +-0.73810900000000002 61.668599999999998 1.43743 +-0.21073 59.800800000000002 1.43743 +-0.47442000000000001 61.668599999999998 1.43743 +-2.28728 110.363 2.0746799999999999 +0.041973099999999999 61.668599999999998 1.44842 +0.29467500000000002 59.800800000000002 1.44842 +0.54737800000000003 61.668599999999998 1.44842 +0.80008000000000001 59.800800000000002 1.4594 +3.9973100000000001 112.22 1.77803 +2.3492600000000001 61.668599999999998 1.51434 +-4.1440999999999999 104.738 2.0087600000000001 +3.3380899999999998 59.800800000000002 1.6022400000000001 +3.8984299999999998 59.800800000000002 1.6901299999999999 +3.8984299999999998 61.668599999999998 1.6901299999999999 +4.0083000000000002 61.668599999999998 1.7560500000000001 +3.5688200000000001 59.800800000000002 1.8878999999999999 +3.4589500000000002 59.800800000000002 1.90987 +2.1514899999999999 59.800800000000002 2.0087600000000001 +1.9427300000000001 59.800800000000002 2.0197400000000001 +3.5688200000000001 130.953 1.8878999999999999 +1.50325 59.800800000000002 2.0417200000000002 +0.80008000000000001 59.800800000000002 2.0636899999999998 +1.04179 59.800800000000002 2.0527000000000002 +0.54737800000000003 59.800800000000002 2.0636899999999998 +0.29467500000000002 61.668599999999998 2.0746799999999999 +0.041973099999999999 61.668599999999998 2.0746799999999999 +-0.73810900000000002 59.800800000000002 2.0746799999999999 +-0.990811 59.800800000000002 2.0856699999999999 +-0.990811 61.668599999999998 2.0856699999999999 +-1.2544999999999999 59.800800000000002 2.0746799999999999 +-1.7818799999999999 59.800800000000002 2.0746799999999999 +-2.0345800000000001 61.668599999999998 2.0746799999999999 +-3.0234200000000002 59.800800000000002 2.0527000000000002 +-3.0234200000000002 61.668599999999998 2.0527000000000002 +2.3492600000000001 80.401499999999999 1.51434 +2.1514899999999999 80.401499999999999 1.50335 +-5.8251200000000001 61.668599999999998 1.84395 +-5.9899199999999997 59.800800000000002 1.7450699999999999 +-5.9899199999999997 59.800800000000002 1.77803 +-5.8251200000000001 59.800800000000002 1.6791400000000001 +-5.7482100000000003 57.921999999999997 1.65717 +-5.66031 57.921999999999997 1.64618 +-4.5286400000000002 57.921999999999997 1.5253300000000001 +-3.0234200000000002 57.921999999999997 1.4594 +-2.7816999999999998 59.800800000000002 1.4594 +-2.28728 57.921999999999997 1.44842 +-2.28728 59.800800000000002 1.44842 +-1.5181899999999999 59.800800000000002 1.43743 +-0.990811 57.921999999999997 1.43743 +-0.73810900000000002 57.921999999999997 1.43743 +-0.990811 59.800800000000002 1.43743 +-0.47442000000000001 59.800800000000002 1.43743 +1.9427300000000001 125.339 1.4923599999999999 +0.041973099999999999 57.921999999999997 1.44842 +-0.21073 57.921999999999997 1.43743 +0.54737800000000003 59.800800000000002 1.44842 +1.9427300000000001 59.800800000000002 1.50335 +2.3492600000000001 57.921999999999997 1.51434 +3.8325100000000001 59.800800000000002 1.6791400000000001 +4.0083000000000002 57.921999999999997 1.7560500000000001 +3.94238 59.800800000000002 1.8109900000000001 +3.7555999999999998 57.921999999999997 1.85494 +3.3380899999999998 59.800800000000002 1.92086 +3.3380899999999998 63.547400000000003 1.92086 +3.0524300000000002 57.921999999999997 1.9428300000000001 +2.3492600000000001 59.800800000000002 1.99777 +0.80008000000000001 57.921999999999997 2.0636899999999998 +-3.9353400000000001 91.630300000000005 1.50335 +0.041973099999999999 93.498099999999994 1.44842 +0.041973099999999999 59.800800000000002 2.0746799999999999 +0.29467500000000002 59.800800000000002 2.0746799999999999 +-0.21073 57.921999999999997 2.0746799999999999 +-1.5181899999999999 57.921999999999997 2.0746799999999999 +-1.5181899999999999 59.800800000000002 2.0746799999999999 +-2.0345800000000001 59.800800000000002 2.0746799999999999 +-2.28728 57.921999999999997 2.0746799999999999 +-3.49586 57.921999999999997 2.0417200000000002 +-4.1440999999999999 57.921999999999997 2.0087600000000001 +-5.66031 59.800800000000002 1.8769100000000001 +-5.66031 63.547400000000003 1.8769100000000001 +-5.66031 61.668599999999998 1.8769100000000001 +-5.7482100000000003 59.800800000000002 1.85494 +-5.7482100000000003 123.45999999999999 1.65717 +-5.9899199999999997 57.921999999999997 1.7450699999999999 +-5.93499 63.547400000000003 1.71211 +-5.8251200000000001 57.921999999999997 1.6791400000000001 +-5.5614299999999997 56.065199999999997 1.6242099999999999 +-5.1878700000000002 56.065199999999997 1.58026 +-4.5286400000000002 56.065199999999997 1.5253300000000001 +-4.1440999999999999 56.065199999999997 1.50335 +-2.7816999999999998 57.921999999999997 1.4594 +-2.28728 56.065199999999997 1.44842 +-2.53999 57.921999999999997 1.44842 +-2.0345800000000001 57.921999999999997 1.44842 +3.9973100000000001 35.464500000000001 1.7450699999999999 +-1.5181899999999999 57.921999999999997 1.43743 +-0.47442000000000001 57.921999999999997 1.43743 +0.041973099999999999 56.065199999999997 1.44842 +2.3492600000000001 56.065199999999997 1.51434 +3.4589500000000002 57.921999999999997 1.6132200000000001 +3.8984299999999998 57.921999999999997 1.6901299999999999 +3.9973100000000001 57.921999999999997 1.77803 +3.9753400000000001 63.547400000000003 1.7890200000000001 +3.94238 56.065199999999997 1.8109900000000001 +3.8325100000000001 57.921999999999997 1.84395 +0.29467500000000002 91.630300000000005 2.0746799999999999 +-5.1878700000000002 80.401499999999999 1.9318500000000001 +-5.0450400000000002 80.401499999999999 1.9428300000000001 +3.1952600000000002 56.065199999999997 1.9318500000000001 +2.72282 56.065199999999997 1.9758 +2.1514899999999999 56.065199999999997 2.0087600000000001 +2.3492600000000001 56.065199999999997 1.99777 +0.041973099999999999 56.065199999999997 2.0746799999999999 +0.29467500000000002 57.921999999999997 2.0746799999999999 +-0.21073 56.065199999999997 2.0746799999999999 +0.041973099999999999 57.921999999999997 2.0746799999999999 +-1.2544999999999999 57.921999999999997 2.0746799999999999 +-2.28728 56.065199999999997 2.0746799999999999 +-2.53999 57.921999999999997 2.0636899999999998 +-3.2651300000000001 56.065199999999997 2.0417200000000002 +-3.9353400000000001 57.921999999999997 2.0197400000000001 +-5.0450400000000002 57.921999999999997 1.9428300000000001 +-5.66031 56.065199999999997 1.8769100000000001 +-5.66031 57.921999999999997 1.8769100000000001 +-5.7482100000000003 56.065199999999997 1.85494 +-5.7482100000000003 57.921999999999997 1.85494 +-5.9899199999999997 56.065199999999997 1.7450699999999999 +-5.9899199999999997 54.186399999999999 1.7450699999999999 +-5.8800499999999998 56.065199999999997 1.6901299999999999 +-5.3197099999999997 54.186399999999999 1.6022400000000001 +-5.0450400000000002 54.186399999999999 1.5692699999999999 +-4.3418599999999996 56.065199999999997 1.51434 +-2.7816999999999998 54.186399999999999 1.4594 +-3.0234200000000002 54.186399999999999 1.4594 +-2.0345800000000001 56.065199999999997 1.44842 +-1.7818799999999999 56.065199999999997 1.43743 +-1.2544999999999999 54.186399999999999 1.43743 +-0.73810900000000002 56.065199999999997 1.43743 +-0.47442000000000001 56.065199999999997 1.43743 +0.29467500000000002 56.065199999999997 1.44842 +3.67869 56.065199999999997 1.64618 +3.8984299999999998 54.186399999999999 1.6901299999999999 +3.9753400000000001 54.186399999999999 1.72309 +4.0083000000000002 56.065199999999997 1.7560500000000001 +-0.47442000000000001 115.97799999999999 2.0746799999999999 +3.4589500000000002 54.186399999999999 1.90987 +3.5688200000000001 56.065199999999997 1.8878999999999999 +3.1952600000000002 54.186399999999999 1.9318500000000001 +1.9427300000000001 56.065199999999997 2.0197400000000001 +1.2725200000000001 56.065199999999997 2.0417200000000002 +1.50325 56.065199999999997 2.0417200000000002 +1.04179 56.065199999999997 2.0527000000000002 +0.29467500000000002 54.186399999999999 2.0746799999999999 +0.29467500000000002 56.065199999999997 2.0746799999999999 +-0.21073 54.186399999999999 2.0746799999999999 +-0.47442000000000001 54.186399999999999 2.0746799999999999 +-0.990811 56.065199999999997 2.0856699999999999 +-1.2544999999999999 56.065199999999997 2.0746799999999999 +-1.2544999999999999 54.186399999999999 2.0746799999999999 +-1.5181899999999999 56.065199999999997 2.0746799999999999 +-2.28728 54.186399999999999 2.0746799999999999 +-2.53999 54.186399999999999 2.0636899999999998 +-2.53999 56.065199999999997 2.0636899999999998 +-3.2651300000000001 54.186399999999999 2.0417200000000002 +-4.1440999999999999 54.186399999999999 2.0087600000000001 +-5.1878700000000002 56.065199999999997 1.9318500000000001 +-5.0450400000000002 56.065199999999997 1.9428300000000001 +-5.5614299999999997 54.186399999999999 1.8878999999999999 +-5.8251200000000001 56.065199999999997 1.84395 +-5.8800499999999998 56.065199999999997 1.8219799999999999 +-5.9899199999999997 56.065199999999997 1.77803 +-5.8251200000000001 52.307600000000001 1.6791400000000001 +-5.8251200000000001 54.186399999999999 1.6791400000000001 +-4.3418599999999996 52.307600000000001 1.51434 +-3.0234200000000002 52.307600000000001 1.4594 +-2.53999 54.186399999999999 1.44842 +-1.2544999999999999 52.307600000000001 1.43743 +-0.990811 54.186399999999999 1.43743 +-0.47442000000000001 52.307600000000001 1.43743 +0.041973099999999999 52.307600000000001 1.44842 +-0.21073 54.186399999999999 1.43743 +0.80008000000000001 52.307600000000001 1.4594 +1.04179 52.307600000000001 1.4594 +0.80008000000000001 54.186399999999999 1.4594 +2.3492600000000001 52.307600000000001 1.51434 +3.0524300000000002 54.186399999999999 1.5692699999999999 +3.7555999999999998 52.307600000000001 1.65717 +-5.0450400000000002 129.07400000000001 1.9428300000000001 +3.9973100000000001 54.186399999999999 1.7450699999999999 +3.7555999999999998 52.307600000000001 1.85494 +3.4589500000000002 52.307600000000001 1.90987 +3.3380899999999998 52.307600000000001 1.92086 +2.1514899999999999 54.186399999999999 2.0087600000000001 +0.80008000000000001 52.307600000000001 2.0636899999999998 +0.80008000000000001 54.186399999999999 2.0636899999999998 +-0.73810900000000002 52.307600000000001 2.0746799999999999 +-0.47442000000000001 52.307600000000001 2.0746799999999999 +-0.73810900000000002 54.186399999999999 2.0746799999999999 +-1.5181899999999999 54.186399999999999 2.0746799999999999 +-2.7816999999999998 52.307600000000001 2.0636899999999998 +-3.49586 52.307600000000001 2.0417200000000002 +-3.9353400000000001 54.186399999999999 2.0197400000000001 +-5.0450400000000002 52.307600000000001 1.9428300000000001 +-5.4515599999999997 52.307600000000001 1.90987 +-5.66031 52.307600000000001 1.8769100000000001 +0.041973099999999999 67.283000000000001 1.44842 +-5.8251200000000001 54.186399999999999 1.84395 +-5.7482100000000003 54.186399999999999 1.85494 +-5.8800499999999998 54.186399999999999 1.8219799999999999 +-5.9899199999999997 50.439799999999998 1.7450699999999999 +-5.9899199999999997 52.307600000000001 1.77803 +-5.8800499999999998 50.439799999999998 1.6901299999999999 +-5.8800499999999998 52.307600000000001 1.6901299999999999 +-4.5286400000000002 50.439799999999998 1.5253300000000001 +-4.1440999999999999 52.307600000000001 1.50335 +-2.53999 50.439799999999998 1.44842 +-2.0345800000000001 50.439799999999998 1.44842 +-1.7818799999999999 52.307600000000001 1.43743 +-1.2544999999999999 50.439799999999998 1.43743 +-0.990811 52.307600000000001 1.43743 +-0.21073 50.439799999999998 1.43743 +-0.21073 52.307600000000001 1.43743 +2.1514899999999999 50.439799999999998 1.50335 +3.4589500000000002 52.307600000000001 1.6132200000000001 +3.3380899999999998 52.307600000000001 1.6022400000000001 +3.8325100000000001 65.426199999999994 1.84395 +3.8325100000000001 52.307600000000001 1.6791400000000001 +3.94238 52.307600000000001 1.71211 +3.9973100000000001 50.439799999999998 1.7450699999999999 +3.9973100000000001 52.307600000000001 1.7450699999999999 +3.9753400000000001 50.439799999999998 1.7890200000000001 +3.94238 50.439799999999998 1.8109900000000001 +3.7555999999999998 50.439799999999998 1.85494 +3.0524300000000002 52.307600000000001 1.9428300000000001 +3.0524300000000002 50.439799999999998 1.9428300000000001 +2.8876200000000001 52.307600000000001 1.9648099999999999 +-5.93499 27.971299999999999 1.8109900000000001 +1.9427300000000001 50.439799999999998 2.0197400000000001 +0.54737800000000003 52.307600000000001 2.0636899999999998 +0.29467500000000002 52.307600000000001 2.0746799999999999 +-0.990811 52.307600000000001 2.0856699999999999 +-1.7818799999999999 52.307600000000001 2.0746799999999999 +-1.7818799999999999 50.439799999999998 2.0746799999999999 +-2.53999 52.307600000000001 2.0636899999999998 +-3.0234200000000002 50.439799999999998 2.0527000000000002 +-2.7816999999999998 50.439799999999998 2.0636899999999998 +-3.0234200000000002 52.307600000000001 2.0527000000000002 +-3.2651300000000001 52.307600000000001 2.0417200000000002 +-2.0345800000000001 130.953 1.44842 +3.5688200000000001 125.339 1.8878999999999999 +-5.8251200000000001 50.439799999999998 1.6791400000000001 +-5.7482100000000003 50.439799999999998 1.65717 +-5.7482100000000003 48.572000000000003 1.65717 +-5.4515599999999997 74.787099999999995 1.6132200000000001 +-5.5614299999999997 72.9084 1.6242099999999999 +-5.4515599999999997 72.9084 1.6132200000000001 +-5.5614299999999997 67.283000000000001 1.6242099999999999 +-5.4515599999999997 65.426199999999994 1.6132200000000001 +-5.5614299999999997 63.547400000000003 1.6242099999999999 +-5.5614299999999997 65.426199999999994 1.6242099999999999 +-5.4515599999999997 61.668599999999998 1.6132200000000001 +-5.4515599999999997 59.800800000000002 1.6132200000000001 +-5.5614299999999997 57.921999999999997 1.6242099999999999 +-5.5614299999999997 50.439799999999998 1.6242099999999999 +-5.4515599999999997 50.439799999999998 1.6132200000000001 +-5.1878700000000002 50.439799999999998 1.58026 +-3.0234200000000002 72.9084 1.4594 +-5.1878700000000002 54.186399999999999 1.58026 +-5.1878700000000002 52.307600000000001 1.58026 +0.29467500000000002 65.426199999999994 2.0746799999999999 +-2.7816999999999998 50.439799999999998 1.4594 +-2.28728 48.572000000000003 1.44842 +-5.9899199999999997 140.31399999999999 1.77803 +-2.0345800000000001 48.572000000000003 1.44842 +3.7555999999999998 65.426199999999994 1.65717 +-0.73810900000000002 50.439799999999998 1.43743 +0.80008000000000001 48.572000000000003 1.4594 +2.1514899999999999 48.572000000000003 1.50335 +1.9427300000000001 50.439799999999998 1.50335 +3.1952600000000002 52.307600000000001 1.58026 +3.1952600000000002 50.439799999999998 1.58026 +3.3380899999999998 50.439799999999998 1.6022400000000001 +3.4589500000000002 74.787099999999995 1.6132200000000001 +3.4589500000000002 72.9084 1.6132200000000001 +3.4589500000000002 69.161799999999999 1.6132200000000001 +3.5688200000000001 69.161799999999999 1.6242099999999999 +3.4589500000000002 67.283000000000001 1.6132200000000001 +3.4589500000000002 63.547400000000003 1.6132200000000001 +3.4589500000000002 61.668599999999998 1.6132200000000001 +3.5688200000000001 56.065199999999997 1.6242099999999999 +-0.990811 129.07400000000001 2.0746799999999999 +3.5688200000000001 50.439799999999998 1.6242099999999999 +3.8325100000000001 86.015900000000002 1.6791400000000001 +-5.7482100000000003 52.307600000000001 1.65717 +3.67869 48.572000000000003 1.64618 +3.7555999999999998 50.439799999999998 1.65717 +3.8984299999999998 48.572000000000003 1.6901299999999999 +3.9973100000000001 48.572000000000003 1.7450699999999999 +3.9973100000000001 48.572000000000003 1.77803 +3.9753400000000001 48.572000000000003 1.7890200000000001 +3.5688200000000001 72.9084 1.8878999999999999 +3.5688200000000001 69.161799999999999 1.8878999999999999 +3.67869 69.161799999999999 1.8769100000000001 +3.7555999999999998 129.07400000000001 1.85494 +3.7555999999999998 127.206 1.85494 +3.67869 61.668599999999998 1.8769100000000001 +3.67869 56.065199999999997 1.8769100000000001 +-5.7482100000000003 97.244699999999995 1.85494 +3.5688200000000001 48.572000000000003 1.8878999999999999 +3.5688200000000001 50.439799999999998 1.8878999999999999 +3.3380899999999998 48.572000000000003 1.92086 +3.1952600000000002 52.307600000000001 1.9318500000000001 +3.1952600000000002 50.439799999999998 1.9318500000000001 +2.1514899999999999 48.572000000000003 2.0087600000000001 +1.9427300000000001 48.572000000000003 2.0197400000000001 +2.1514899999999999 50.439799999999998 2.0087600000000001 +1.2725200000000001 48.572000000000003 2.0417200000000002 +1.50325 50.439799999999998 2.0417200000000002 +0.54737800000000003 48.572000000000003 2.0636899999999998 +0.54737800000000003 50.439799999999998 2.0636899999999998 +0.29467500000000002 50.439799999999998 2.0746799999999999 +0.041973099999999999 50.439799999999998 2.0746799999999999 +0.041973099999999999 48.572000000000003 2.0746799999999999 +-0.21073 48.572000000000003 2.0746799999999999 +-0.21073 50.439799999999998 2.0746799999999999 +-0.47442000000000001 48.572000000000003 2.0746799999999999 +-0.73810900000000002 50.439799999999998 2.0746799999999999 +-2.28728 48.572000000000003 2.0746799999999999 +-3.0234200000000002 48.572000000000003 2.0527000000000002 +-5.66031 50.439799999999998 1.8769100000000001 +-5.9679500000000001 134.69999999999999 1.7890200000000001 +-5.9679500000000001 132.821 1.7890200000000001 +3.94238 57.921999999999997 1.8109900000000001 +-5.9679500000000001 127.206 1.7890200000000001 +-5.9899199999999997 123.45999999999999 1.77803 +-5.9679500000000001 123.45999999999999 1.7890200000000001 +-5.9899199999999997 121.581 1.77803 +-5.9899199999999997 117.845 1.77803 +-5.9679500000000001 119.71299999999999 1.7890200000000001 +-5.9679500000000001 115.97799999999999 1.7890200000000001 +-2.53999 142.18199999999999 1.44842 +-5.9899199999999997 108.48399999999999 1.77803 +-5.9899199999999997 102.85899999999999 1.77803 +-5.9679500000000001 101.002 1.7890200000000001 +-5.9679500000000001 99.123500000000007 1.7890200000000001 +-5.9679500000000001 95.376900000000006 1.7890200000000001 +-5.9679500000000001 86.015900000000002 1.7890200000000001 +-5.9679500000000001 78.5227 1.7890200000000001 +-5.9899199999999997 76.654899999999998 1.77803 +-5.9679500000000001 76.654899999999998 1.7890200000000001 +-5.9899199999999997 69.161799999999999 1.77803 +-5.9679500000000001 65.426199999999994 1.7890200000000001 +-5.9679500000000001 63.547400000000003 1.7890200000000001 +-5.9679500000000001 59.800800000000002 1.7890200000000001 +-5.9899199999999997 57.921999999999997 1.77803 +-5.8251200000000001 119.71299999999999 1.84395 +-5.9679500000000001 54.186399999999999 1.7890200000000001 +-5.9899199999999997 48.572000000000003 1.7450699999999999 +-5.93499 50.439799999999998 1.71211 +-4.7154199999999999 101.002 1.5472999999999999 +-5.8251200000000001 48.572000000000003 1.6791400000000001 +-5.8251200000000001 46.693199999999997 1.6791400000000001 +-5.7482100000000003 46.693199999999997 1.65717 +-1.2544999999999999 24.224699999999999 2.0746799999999999 +-5.4515599999999997 46.693199999999997 1.6132200000000001 +-5.5614299999999997 48.572000000000003 1.6242099999999999 +-4.8802300000000001 48.572000000000003 1.55829 +-4.7154199999999999 48.572000000000003 1.5472999999999999 +-4.1440999999999999 46.693199999999997 1.50335 +-3.0234200000000002 48.572000000000003 1.4594 +-0.47442000000000001 46.693199999999997 1.43743 +0.041973099999999999 48.572000000000003 1.44842 +0.54737800000000003 46.693199999999997 1.44842 +1.04179 46.693199999999997 1.4594 +3.4589500000000002 46.693199999999997 1.6132200000000001 +3.4589500000000002 48.572000000000003 1.6132200000000001 +3.5688200000000001 46.693199999999997 1.6242099999999999 +-4.1440999999999999 84.148099999999999 2.0087600000000001 +-3.9353400000000001 86.015900000000002 2.0197400000000001 +3.9973100000000001 46.693199999999997 1.7450699999999999 +3.7555999999999998 48.572000000000003 1.85494 +3.67869 48.572000000000003 1.8769100000000001 +3.5688200000000001 46.693199999999997 1.8878999999999999 +2.3492600000000001 48.572000000000003 1.99777 +1.04179 48.572000000000003 2.0527000000000002 +0.041973099999999999 46.693199999999997 2.0746799999999999 +3.4589500000000002 80.401499999999999 1.90987 +-0.73810900000000002 48.572000000000003 2.0746799999999999 +-1.2544999999999999 46.693199999999997 2.0746799999999999 +-1.2544999999999999 48.572000000000003 2.0746799999999999 +-1.5181899999999999 46.693199999999997 2.0746799999999999 +-0.73810900000000002 119.71299999999999 2.0746799999999999 +-2.7816999999999998 48.572000000000003 2.0636899999999998 +-2.53999 48.572000000000003 2.0636899999999998 +-2.0345800000000001 46.693199999999997 1.44842 +-3.49586 48.572000000000003 2.0417200000000002 +-4.1440999999999999 46.693199999999997 2.0087600000000001 +-3.9353400000000001 48.572000000000003 2.0197400000000001 +-5.5614299999999997 48.572000000000003 1.8878999999999999 +-5.93499 74.787099999999995 1.8109900000000001 +-5.9679500000000001 71.040599999999998 1.7890200000000001 +-5.93499 69.161799999999999 1.8109900000000001 +-5.9679500000000001 67.283000000000001 1.7890200000000001 +-5.93499 65.426199999999994 1.8109900000000001 +-5.93499 61.668599999999998 1.8109900000000001 +-5.9679500000000001 61.668599999999998 1.7890200000000001 +-5.9679500000000001 57.921999999999997 1.7890200000000001 +-5.93499 56.065199999999997 1.8109900000000001 +-5.9679500000000001 56.065199999999997 1.7890200000000001 +-5.9679500000000001 52.307600000000001 1.7890200000000001 +-5.8800499999999998 46.693199999999997 1.6901299999999999 +-5.66031 46.693199999999997 1.64618 +-5.5614299999999997 46.693199999999997 1.6242099999999999 +-4.3418599999999996 44.825400000000002 1.51434 +-3.2651300000000001 44.825400000000002 1.4703900000000001 +-3.0234200000000002 46.693199999999997 1.4594 +-3.2651300000000001 46.693199999999997 1.4703900000000001 +-2.7816999999999998 44.825400000000002 1.4594 +-2.53999 46.693199999999997 1.44842 +-2.28728 44.825400000000002 1.44842 +-2.28728 46.693199999999997 1.44842 +-2.0345800000000001 44.825400000000002 1.44842 +-1.5181899999999999 44.825400000000002 1.43743 +-1.5181899999999999 46.693199999999997 1.43743 +-0.990811 44.825400000000002 1.43743 +-1.2544999999999999 46.693199999999997 1.43743 +0.29467500000000002 44.825400000000002 1.44842 +0.041973099999999999 46.693199999999997 1.44842 +0.54737800000000003 44.825400000000002 1.44842 +0.80008000000000001 46.693199999999997 1.4594 +1.2725200000000001 44.825400000000002 1.4703900000000001 +2.3492600000000001 46.693199999999997 1.51434 +3.3380899999999998 46.693199999999997 1.6022400000000001 +3.4589500000000002 44.825400000000002 1.6132200000000001 +3.67869 44.825400000000002 1.64618 +3.7555999999999998 46.693199999999997 1.65717 +3.94238 44.825400000000002 1.71211 +4.0083000000000002 44.825400000000002 1.7560500000000001 +3.7555999999999998 44.825400000000002 1.85494 +3.67869 44.825400000000002 1.8769100000000001 +3.4589500000000002 46.693199999999997 1.90987 +2.8876200000000001 46.693199999999997 1.9648099999999999 +1.9427300000000001 46.693199999999997 2.0197400000000001 +2.1514899999999999 46.693199999999997 2.0087600000000001 +1.04179 44.825400000000002 2.0527000000000002 +0.80008000000000001 46.693199999999997 2.0636899999999998 +0.041973099999999999 44.825400000000002 2.0746799999999999 +-0.21073 44.825400000000002 2.0746799999999999 +-0.21073 46.693199999999997 2.0746799999999999 +-0.47442000000000001 46.693199999999997 2.0746799999999999 +-0.990811 46.693199999999997 2.0856699999999999 +-1.7818799999999999 46.693199999999997 2.0746799999999999 +-2.0345800000000001 44.825400000000002 2.0746799999999999 +-2.28728 46.693199999999997 2.0746799999999999 +-2.53999 46.693199999999997 2.0636899999999998 +-2.7816999999999998 44.825400000000002 2.0636899999999998 +-2.7816999999999998 46.693199999999997 2.0636899999999998 +-5.5614299999999997 44.825400000000002 1.8878999999999999 +-3.9353400000000001 57.921999999999997 1.50335 +-5.8800499999999998 44.825400000000002 1.8219799999999999 +-5.93499 46.693199999999997 1.71211 +-5.8800499999999998 44.825400000000002 1.6901299999999999 +-5.8251200000000001 42.946599999999997 1.6791400000000001 +-5.8251200000000001 44.825400000000002 1.6791400000000001 +-5.1878700000000002 42.946599999999997 1.58026 +-5.0450400000000002 44.825400000000002 1.5692699999999999 +-2.0345800000000001 99.123500000000007 2.0746799999999999 +-4.1440999999999999 42.946599999999997 1.50335 +3.9973100000000001 71.040599999999998 1.77803 +-3.9353400000000001 44.825400000000002 1.50335 +-3.0234200000000002 42.946599999999997 1.4594 +-3.0234200000000002 44.825400000000002 1.4594 +-2.28728 42.946599999999997 1.44842 +-2.53999 44.825400000000002 1.44842 +-0.990811 42.946599999999997 1.43743 +-0.47442000000000001 44.825400000000002 1.43743 +0.041973099999999999 42.946599999999997 1.44842 +-0.21073 44.825400000000002 1.43743 +0.54737800000000003 42.946599999999997 1.44842 +0.29467500000000002 42.946599999999997 1.44842 +0.80008000000000001 44.825400000000002 1.4594 +1.04179 44.825400000000002 1.4594 +2.1514899999999999 42.946599999999997 1.50335 +2.1514899999999999 44.825400000000002 1.50335 +3.0524300000000002 46.693199999999997 1.5692699999999999 +0.54737800000000003 54.186399999999999 2.0636899999999998 +3.1952600000000002 44.825400000000002 1.58026 +3.1952600000000002 42.946599999999997 1.58026 +3.0524300000000002 44.825400000000002 1.5692699999999999 +3.9973100000000001 42.946599999999997 1.7450699999999999 +3.9973100000000001 44.825400000000002 1.7450699999999999 +4.0083000000000002 42.946599999999997 1.7560500000000001 +3.9973100000000001 44.825400000000002 1.77803 +3.9753400000000001 42.946599999999997 1.7890200000000001 +3.5688200000000001 44.825400000000002 1.8878999999999999 +3.3380899999999998 44.825400000000002 1.92086 +3.1952600000000002 46.693199999999997 1.9318500000000001 +3.3380899999999998 46.693199999999997 1.92086 +3.1952600000000002 42.946599999999997 1.9318500000000001 +3.1952600000000002 44.825400000000002 1.9318500000000001 +2.8876200000000001 44.825400000000002 1.9648099999999999 +2.3492600000000001 44.825400000000002 1.99777 +1.04179 42.946599999999997 2.0527000000000002 +0.29467500000000002 42.946599999999997 2.0746799999999999 +-0.73810900000000002 42.946599999999997 2.0746799999999999 +-0.73810900000000002 44.825400000000002 2.0746799999999999 +-1.2544999999999999 42.946599999999997 2.0746799999999999 +2.3492600000000001 82.269300000000001 1.99777 +-1.7818799999999999 42.946599999999997 2.0746799999999999 +-1.5181899999999999 44.825400000000002 2.0746799999999999 +-1.7818799999999999 44.825400000000002 2.0746799999999999 +-2.53999 44.825400000000002 2.0636899999999998 +-3.0234200000000002 42.946599999999997 2.0527000000000002 +-2.7816999999999998 42.946599999999997 2.0636899999999998 +-3.0234200000000002 44.825400000000002 2.0527000000000002 +-3.49586 42.946599999999997 2.0417200000000002 +-4.1440999999999999 42.946599999999997 2.0087600000000001 +-5.0450400000000002 42.946599999999997 1.9428300000000001 +-5.5614299999999997 42.946599999999997 1.8878999999999999 +-5.8251200000000001 44.825400000000002 1.84395 +-5.9679500000000001 44.825400000000002 1.7890200000000001 +-1.7818799999999999 78.5227 1.43743 +-5.9899199999999997 44.825400000000002 1.77803 +-5.9899199999999997 41.078800000000001 1.7450699999999999 +-5.7482100000000003 42.946599999999997 1.65717 +-5.5614299999999997 41.078800000000001 1.6242099999999999 +-5.0450400000000002 42.946599999999997 1.5692699999999999 +-4.7154199999999999 41.078800000000001 1.5472999999999999 +-4.1440999999999999 41.078800000000001 1.50335 +-4.3418599999999996 42.946599999999997 1.51434 +-3.2651300000000001 42.946599999999997 1.4703900000000001 +-2.53999 42.946599999999997 1.44842 +3.0524300000000002 93.498099999999994 1.9428300000000001 +-1.5181899999999999 42.946599999999997 1.43743 +-0.73810900000000002 89.762500000000003 2.0746799999999999 +-1.2544999999999999 42.946599999999997 1.43743 +-1.2544999999999999 41.078800000000001 1.43743 +-0.73810900000000002 41.078800000000001 1.43743 +-0.47442000000000001 42.946599999999997 1.43743 +0.041973099999999999 41.078800000000001 1.44842 +0.54737800000000003 41.078800000000001 1.44842 +0.80008000000000001 42.946599999999997 1.4594 +-0.73810900000000002 127.206 2.0746799999999999 +3.4589500000000002 41.078800000000001 1.6132200000000001 +3.3380899999999998 42.946599999999997 1.6022400000000001 +3.7555999999999998 41.078800000000001 1.65717 +3.67869 42.946599999999997 1.64618 +3.8984299999999998 41.078800000000001 1.6901299999999999 +3.8325100000000001 42.946599999999997 1.6791400000000001 +3.8984299999999998 42.946599999999997 1.6901299999999999 +3.9973100000000001 42.946599999999997 1.77803 +3.9753400000000001 41.078800000000001 1.7890200000000001 +3.7555999999999998 41.078800000000001 1.85494 +3.4589500000000002 42.946599999999997 1.90987 +-5.9899199999999997 86.015900000000002 1.7450699999999999 +3.3380899999999998 42.946599999999997 1.92086 +3.3380899999999998 41.078800000000001 1.92086 +3.94238 121.581 1.8109900000000001 +2.3492600000000001 42.946599999999997 1.99777 +1.2725200000000001 42.946599999999997 2.0417200000000002 +1.50325 42.946599999999997 2.0417200000000002 +0.80008000000000001 42.946599999999997 2.0636899999999998 +0.29467500000000002 41.078800000000001 2.0746799999999999 +-5.9679500000000001 14.8637 1.72309 +-0.21073 41.078800000000001 2.0746799999999999 +3.5688200000000001 136.56700000000001 1.8878999999999999 +-0.990811 41.078800000000001 2.0856699999999999 +-1.2544999999999999 41.078800000000001 2.0746799999999999 +-1.7818799999999999 41.078800000000001 2.0746799999999999 +-3.2651300000000001 41.078800000000001 2.0417200000000002 +-4.1440999999999999 41.078800000000001 2.0087600000000001 +-5.4515599999999997 41.078800000000001 1.90987 +-5.66031 41.078800000000001 1.8769100000000001 +-5.5614299999999997 41.078800000000001 1.8878999999999999 +-5.7482100000000003 41.078800000000001 1.85494 +-5.8251200000000001 42.946599999999997 1.84395 +-5.5614299999999997 39.210999999999999 1.6242099999999999 +-5.66031 41.078800000000001 1.64618 +-4.3418599999999996 41.078800000000001 1.51434 +-2.28728 39.210999999999999 1.44842 +3.7555999999999998 16.7425 1.85494 +-1.5181899999999999 41.078800000000001 1.43743 +-0.47442000000000001 39.210999999999999 1.43743 +-0.47442000000000001 41.078800000000001 1.43743 +0.29467500000000002 39.210999999999999 1.44842 +2.3492600000000001 142.18199999999999 1.51434 +2.3492600000000001 138.435 1.51434 +2.3492600000000001 136.56700000000001 1.51434 +2.5360399999999998 132.821 1.5253300000000001 +-5.5614299999999997 84.148099999999999 1.6242099999999999 +2.5360399999999998 129.07400000000001 1.5253300000000001 +2.3492600000000001 123.45999999999999 1.51434 +2.3492600000000001 119.71299999999999 1.51434 +2.5360399999999998 112.22 1.5253300000000001 +2.3492600000000001 114.099 1.51434 +2.5360399999999998 110.363 1.5253300000000001 +2.5360399999999998 108.48399999999999 1.5253300000000001 +2.5360399999999998 104.738 1.5253300000000001 +2.3492600000000001 101.002 1.51434 +3.0524300000000002 39.210999999999999 1.5692699999999999 +2.3492600000000001 97.244699999999995 1.51434 +2.5360399999999998 93.498099999999994 1.5253300000000001 +2.5360399999999998 91.630300000000005 1.5253300000000001 +2.3492600000000001 91.630300000000005 1.51434 +2.5360399999999998 86.015900000000002 1.5253300000000001 +2.3492600000000001 74.787099999999995 1.51434 +2.3492600000000001 72.9084 1.51434 +2.5360399999999998 69.161799999999999 1.5253300000000001 +2.5360399999999998 57.921999999999997 1.5253300000000001 +-2.28728 127.206 2.0636899999999998 +2.3492600000000001 54.186399999999999 1.51434 +2.5360399999999998 54.186399999999999 1.5253300000000001 +2.3492600000000001 48.572000000000003 1.51434 +2.5360399999999998 42.946599999999997 1.5253300000000001 +2.3492600000000001 44.825400000000002 1.51434 +2.3492600000000001 41.078800000000001 1.51434 +2.5360399999999998 39.210999999999999 1.5253300000000001 +2.3492600000000001 37.332299999999996 1.51434 +2.5360399999999998 31.7179 1.5253300000000001 +2.5360399999999998 24.224699999999999 1.5253300000000001 +2.3492600000000001 18.610299999999999 1.51434 +2.3492600000000001 14.8637 1.51434 +2.5360399999999998 142.18199999999999 1.5253300000000001 +2.72282 140.31399999999999 1.5472999999999999 +2.5360399999999998 138.435 1.5253300000000001 +-5.8251200000000001 112.22 1.6791400000000001 +2.72282 136.56700000000001 1.5472999999999999 +3.4589500000000002 93.498099999999994 1.6132200000000001 +2.72282 130.953 1.5472999999999999 +2.5360399999999998 130.953 1.5253300000000001 +2.5360399999999998 123.45999999999999 1.5253300000000001 +0.041973099999999999 74.787099999999995 2.0746799999999999 +2.72282 117.845 1.5472999999999999 +2.5360399999999998 114.099 1.5253300000000001 +2.72282 108.48399999999999 1.5472999999999999 +2.5360399999999998 102.85899999999999 1.5253300000000001 +2.72282 102.85899999999999 1.5472999999999999 +2.5360399999999998 99.123500000000007 1.5253300000000001 +-4.1440999999999999 78.5227 2.0087600000000001 +2.5360399999999998 95.376900000000006 1.5253300000000001 +2.72282 93.498099999999994 1.5472999999999999 +2.5360399999999998 89.762500000000003 1.5253300000000001 +2.72282 80.401499999999999 1.5472999999999999 +2.5360399999999998 76.654899999999998 1.5253300000000001 +2.72282 74.787099999999995 1.5472999999999999 +2.5360399999999998 71.040599999999998 1.5253300000000001 +2.5360399999999998 72.9084 1.5253300000000001 +2.72282 69.161799999999999 1.5472999999999999 +-4.1440999999999999 14.8637 2.0087600000000001 +2.5360399999999998 61.668599999999998 1.5253300000000001 +1.9427300000000001 123.45999999999999 1.4923599999999999 +2.5360399999999998 56.065199999999997 1.5253300000000001 +2.5360399999999998 52.307600000000001 1.5253300000000001 +2.72282 42.946599999999997 1.5472999999999999 +2.5360399999999998 41.078800000000001 1.5253300000000001 +2.72282 41.078800000000001 1.5472999999999999 +2.5360399999999998 27.971299999999999 1.5253300000000001 +2.72282 22.3569 1.5472999999999999 +2.72282 18.610299999999999 1.5472999999999999 +2.72282 16.7425 1.5472999999999999 +2.5360399999999998 16.7425 1.5253300000000001 +3.0524300000000002 41.078800000000001 1.5692699999999999 +3.0524300000000002 35.464500000000001 1.5692699999999999 +3.0524300000000002 37.332299999999996 1.5692699999999999 +2.8876200000000001 35.464500000000001 1.55829 +-5.8251200000000001 112.22 1.84395 +3.0524300000000002 31.7179 1.5692699999999999 +3.0524300000000002 33.585700000000003 1.5692699999999999 +3.0524300000000002 29.850100000000001 1.5692699999999999 +2.8876200000000001 31.7179 1.55829 +2.8876200000000001 20.489100000000001 1.55829 +2.8876200000000001 18.610299999999999 1.55829 +3.0524300000000002 18.610299999999999 1.5692699999999999 +3.0524300000000002 14.8637 1.5692699999999999 +2.8876200000000001 14.8637 1.55829 +3.0524300000000002 12.995900000000001 1.5692699999999999 +2.8876200000000001 12.995900000000001 1.55829 +2.72282 14.8637 1.5472999999999999 +2.8876200000000001 22.3569 1.55829 +2.8876200000000001 27.971299999999999 1.55829 +3.0524300000000002 82.269300000000001 1.9428300000000001 +2.72282 31.7179 1.5472999999999999 +2.8876200000000001 33.585700000000003 1.55829 +2.72282 37.332299999999996 1.5472999999999999 +2.8876200000000001 42.946599999999997 1.55829 +2.8876200000000001 44.825400000000002 1.55829 +2.72282 44.825400000000002 1.5472999999999999 +2.72282 48.572000000000003 1.5472999999999999 +2.8876200000000001 50.439799999999998 1.55829 +2.72282 50.439799999999998 1.5472999999999999 +-5.66031 54.186399999999999 1.8769100000000001 +-2.0345800000000001 134.69999999999999 1.44842 +0.29467500000000002 130.953 1.44842 +2.8876200000000001 59.800800000000002 1.55829 +2.72282 61.668599999999998 1.5472999999999999 +-1.7818799999999999 123.45999999999999 1.43743 +-5.1878700000000002 117.845 1.58026 +2.72282 65.426199999999994 1.5472999999999999 +2.72282 67.283000000000001 1.5472999999999999 +-4.7154199999999999 59.800800000000002 1.5472999999999999 +-4.8802300000000001 61.668599999999998 1.55829 +2.8876200000000001 69.161799999999999 1.55829 +2.8876200000000001 67.283000000000001 1.55829 +2.8876200000000001 72.9084 1.55829 +2.72282 76.654899999999998 1.5472999999999999 +2.8876200000000001 78.5227 1.55829 +1.04179 97.244699999999995 1.4594 +2.8876200000000001 82.269300000000001 1.55829 +2.72282 95.376900000000006 1.5472999999999999 +2.72282 97.244699999999995 1.5472999999999999 +2.72282 101.002 1.5472999999999999 +2.72282 106.60599999999999 1.5472999999999999 +2.72282 104.738 1.5472999999999999 +2.8876200000000001 108.48399999999999 1.55829 +2.72282 110.363 1.5472999999999999 +-2.0345800000000001 24.224699999999999 2.0746799999999999 +-5.9679500000000001 130.953 1.7890200000000001 +2.8876200000000001 117.845 1.55829 +2.72282 123.45999999999999 1.5472999999999999 +2.8876200000000001 57.921999999999997 1.55829 +2.8876200000000001 130.953 1.55829 +2.72282 132.821 1.5472999999999999 +2.8876200000000001 134.69999999999999 1.55829 +2.8876200000000001 142.18199999999999 1.55829 +3.0524300000000002 136.56700000000001 1.5692699999999999 +3.0524300000000002 132.821 1.5692699999999999 +3.1952600000000002 134.69999999999999 1.58026 +2.8876200000000001 132.821 1.55829 +3.0524300000000002 129.07400000000001 1.5692699999999999 +2.8876200000000001 129.07400000000001 1.55829 +2.8876200000000001 119.71299999999999 1.55829 +3.0524300000000002 117.845 1.5692699999999999 +2.8876200000000001 110.363 1.55829 +3.0524300000000002 110.363 1.5692699999999999 +3.0524300000000002 101.002 1.5692699999999999 +0.80008000000000001 41.078800000000001 2.0636899999999998 +3.0524300000000002 99.123500000000007 1.5692699999999999 +3.0524300000000002 93.498099999999994 1.5692699999999999 +2.8876200000000001 89.762500000000003 1.55829 +2.8876200000000001 86.015900000000002 1.55829 +3.0524300000000002 76.654899999999998 1.5692699999999999 +-5.1878700000000002 127.206 1.58026 +-5.0450400000000002 125.339 1.5692699999999999 +2.8876200000000001 74.787099999999995 1.55829 +3.0524300000000002 69.161799999999999 1.5692699999999999 +3.0524300000000002 65.426199999999994 1.5692699999999999 +2.8876200000000001 63.547400000000003 1.55829 +3.0524300000000002 57.921999999999997 1.5692699999999999 +2.8876200000000001 52.307600000000001 1.55829 +3.0524300000000002 52.307600000000001 1.5692699999999999 +3.0524300000000002 50.439799999999998 1.5692699999999999 +2.8876200000000001 46.693199999999997 1.55829 +-5.9899199999999997 24.224699999999999 1.7450699999999999 +2.8876200000000001 41.078800000000001 1.55829 +3.1952600000000002 142.18199999999999 1.58026 +3.1952600000000002 138.435 1.58026 +2.1514899999999999 95.376900000000006 1.50335 +3.1952600000000002 136.56700000000001 1.58026 +3.1952600000000002 132.821 1.58026 +3.1952600000000002 129.07400000000001 1.58026 +3.1952600000000002 130.953 1.58026 +3.3380899999999998 127.206 1.6022400000000001 +3.3380899999999998 121.581 1.6022400000000001 +3.1952600000000002 117.845 1.58026 +3.3380899999999998 115.97799999999999 1.6022400000000001 +-4.7154199999999999 69.161799999999999 1.5472999999999999 +3.3380899999999998 112.22 1.6022400000000001 +3.1952600000000002 112.22 1.58026 +-5.93499 20.489100000000001 1.8109900000000001 +-5.9679500000000001 20.489100000000001 1.7890200000000001 +3.3380899999999998 108.48399999999999 1.6022400000000001 +-2.7816999999999998 56.065199999999997 2.0636899999999998 +3.3380899999999998 101.002 1.6022400000000001 +3.1952600000000002 93.498099999999994 1.58026 +3.3380899999999998 93.498099999999994 1.6022400000000001 +3.3380899999999998 91.630300000000005 1.6022400000000001 +3.1952600000000002 91.630300000000005 1.58026 +3.1952600000000002 87.883700000000005 1.58026 +3.3380899999999998 86.015900000000002 1.6022400000000001 +3.1952600000000002 86.015900000000002 1.58026 +3.3380899999999998 78.5227 1.6022400000000001 +3.1952600000000002 76.654899999999998 1.58026 +3.3380899999999998 76.654899999999998 1.6022400000000001 +3.1952600000000002 72.9084 1.58026 +3.3380899999999998 72.9084 1.6022400000000001 +2.1514899999999999 108.48399999999999 2.0087600000000001 +3.1952600000000002 61.668599999999998 1.58026 +-5.5614299999999997 16.7425 1.6242099999999999 +3.0524300000000002 56.065199999999997 1.9428300000000001 +3.3380899999999998 48.572000000000003 1.6022400000000001 +-5.8800499999999998 121.581 1.6901299999999999 +3.1952600000000002 41.078800000000001 1.58026 +3.3380899999999998 41.078800000000001 1.6022400000000001 +3.1952600000000002 37.332299999999996 1.58026 +3.1952600000000002 33.585700000000003 1.58026 +3.1952600000000002 27.971299999999999 1.58026 +3.1952600000000002 26.1035 1.58026 +3.3380899999999998 26.1035 1.6022400000000001 +3.3380899999999998 24.224699999999999 1.6022400000000001 +3.3380899999999998 20.489100000000001 1.6022400000000001 +3.3380899999999998 14.8637 1.6022400000000001 +-4.7154199999999999 42.946599999999997 1.5472999999999999 +3.8984299999999998 101.002 1.6901299999999999 +3.5688200000000001 42.946599999999997 1.6242099999999999 +3.5688200000000001 39.210999999999999 1.6242099999999999 +3.5688200000000001 35.464500000000001 1.6242099999999999 +3.67869 140.31399999999999 1.64618 +3.5688200000000001 130.953 1.6242099999999999 +3.5688200000000001 129.07400000000001 1.6242099999999999 +3.67869 127.206 1.64618 +3.5688200000000001 123.45999999999999 1.6242099999999999 +3.67869 121.581 1.64618 +3.67869 115.97799999999999 1.64618 +3.67869 112.22 1.64618 +3.67869 108.48399999999999 1.64618 +3.5688200000000001 104.738 1.6242099999999999 +3.67869 104.738 1.64618 +3.67869 99.123500000000007 1.64618 +3.5688200000000001 93.498099999999994 1.6242099999999999 +3.5688200000000001 87.883700000000005 1.6242099999999999 +3.5688200000000001 86.015900000000002 1.6242099999999999 +3.67869 82.269300000000001 1.64618 +3.5688200000000001 72.9084 1.6242099999999999 +3.67869 72.9084 1.64618 +3.67869 71.040599999999998 1.64618 +3.5688200000000001 71.040599999999998 1.6242099999999999 +3.5688200000000001 67.283000000000001 1.6242099999999999 +3.67869 63.547400000000003 1.64618 +3.67869 65.426199999999994 1.64618 +3.5688200000000001 63.547400000000003 1.6242099999999999 +3.5688200000000001 61.668599999999998 1.6242099999999999 +3.67869 57.921999999999997 1.64618 +-2.53999 125.339 1.44842 +3.67869 50.439799999999998 1.64618 +2.1514899999999999 22.3569 2.0087600000000001 +3.67869 46.693199999999997 1.64618 +3.5688200000000001 44.825400000000002 1.6242099999999999 +3.5688200000000001 37.332299999999996 1.6242099999999999 +3.67869 33.585700000000003 1.64618 +3.5688200000000001 33.585700000000003 1.6242099999999999 +3.5688200000000001 31.7179 1.6242099999999999 +3.5688200000000001 26.1035 1.6242099999999999 +-1.2544999999999999 99.123500000000007 1.43743 +3.5688200000000001 14.8637 1.6242099999999999 +3.7555999999999998 140.31399999999999 1.65717 +3.8325100000000001 132.821 1.6791400000000001 +3.8325100000000001 134.69999999999999 1.6791400000000001 +3.8325100000000001 125.339 1.6791400000000001 +3.7555999999999998 123.45999999999999 1.65717 +3.7555999999999998 115.97799999999999 1.65717 +3.7555999999999998 112.22 1.65717 +3.7555999999999998 110.363 1.65717 +3.8325100000000001 106.60599999999999 1.6791400000000001 +3.7555999999999998 104.738 1.65717 +3.7555999999999998 91.630300000000005 1.65717 +3.8325100000000001 84.148099999999999 1.6791400000000001 +3.8325100000000001 74.787099999999995 1.6791400000000001 +3.8325100000000001 72.9084 1.6791400000000001 +3.7555999999999998 72.9084 1.65717 +3.7555999999999998 69.161799999999999 1.65717 +3.7555999999999998 71.040599999999998 1.65717 +3.8325100000000001 67.283000000000001 1.6791400000000001 +3.7555999999999998 63.547400000000003 1.65717 +3.7555999999999998 59.800800000000002 1.65717 +3.7555999999999998 61.668599999999998 1.65717 +3.7555999999999998 44.825400000000002 1.65717 +3.8325100000000001 44.825400000000002 1.6791400000000001 +3.7555999999999998 42.946599999999997 1.65717 +3.8325100000000001 41.078800000000001 1.6791400000000001 +3.8325100000000001 31.7179 1.6791400000000001 +3.7555999999999998 31.7179 1.65717 +3.8325100000000001 29.850100000000001 1.6791400000000001 +3.7555999999999998 27.971299999999999 1.65717 +3.7555999999999998 24.224699999999999 1.65717 +3.8325100000000001 22.3569 1.6791400000000001 +3.7555999999999998 20.489100000000001 1.65717 +3.8325100000000001 14.8637 1.6791400000000001 +3.9753400000000001 95.376900000000006 1.72309 +3.9753400000000001 91.630300000000005 1.72309 +3.9753400000000001 89.762500000000003 1.72309 +3.9753400000000001 86.015900000000002 1.72309 +3.94238 86.015900000000002 1.71211 +3.94238 82.269300000000001 1.71211 +3.9753400000000001 80.401499999999999 1.72309 +3.94238 76.654899999999998 1.71211 +3.9753400000000001 74.787099999999995 1.72309 +3.9753400000000001 71.040599999999998 1.72309 +3.9753400000000001 65.426199999999994 1.72309 +3.9753400000000001 59.800800000000002 1.72309 +3.94238 48.572000000000003 1.71211 +3.9753400000000001 46.693199999999997 1.72309 +3.9753400000000001 41.078800000000001 1.72309 +1.9427300000000001 80.401499999999999 1.50335 +1.9427300000000001 82.269300000000001 1.50335 +3.94238 35.464500000000001 1.71211 +3.9753400000000001 31.7179 1.72309 +3.9753400000000001 29.850100000000001 1.72309 +-5.66031 86.015900000000002 1.64618 +3.9753400000000001 22.3569 1.72309 +4.0083000000000002 39.210999999999999 1.7560500000000001 +3.9973100000000001 41.078800000000001 1.7450699999999999 +-0.47442000000000001 127.206 1.43743 +3.9973100000000001 41.078800000000001 1.77803 +-4.1440999999999999 82.269300000000001 1.50335 +3.94238 46.693199999999997 1.8109900000000001 +3.94238 48.572000000000003 1.8109900000000001 +3.1952600000000002 48.572000000000003 1.58026 +3.8984299999999998 46.693199999999997 1.8219799999999999 +3.94238 44.825400000000002 1.8109900000000001 +3.94238 42.946599999999997 1.8109900000000001 +3.8984299999999998 134.69999999999999 1.8219799999999999 +3.8984299999999998 132.821 1.8219799999999999 +4.0083000000000002 72.9084 1.7560500000000001 +3.8984299999999998 125.339 1.8219799999999999 +-1.2544999999999999 97.244699999999995 2.0746799999999999 +3.8984299999999998 121.581 1.8219799999999999 +3.8325100000000001 121.581 1.84395 +3.8325100000000001 119.71299999999999 1.84395 +3.8325100000000001 117.845 1.84395 +3.8325100000000001 115.97799999999999 1.84395 +3.8984299999999998 115.97799999999999 1.8219799999999999 +3.8325100000000001 106.60599999999999 1.84395 +3.8325100000000001 102.85899999999999 1.84395 +3.8325100000000001 99.123500000000007 1.84395 +3.8984299999999998 97.244699999999995 1.8219799999999999 +3.8984299999999998 99.123500000000007 1.8219799999999999 +3.8325100000000001 91.630300000000005 1.84395 +3.3380899999999998 57.921999999999997 1.6022400000000001 +3.8325100000000001 89.762500000000003 1.84395 +-5.4515599999999997 61.668599999999998 1.90987 +3.8984299999999998 86.015900000000002 1.8219799999999999 +3.8984299999999998 80.401499999999999 1.8219799999999999 +3.8984299999999998 67.283000000000001 1.6901299999999999 +3.8325100000000001 78.5227 1.84395 +3.8325100000000001 74.787099999999995 1.84395 +3.8325100000000001 67.283000000000001 1.84395 +3.8984299999999998 56.065199999999997 1.8219799999999999 +3.0524300000000002 72.9084 1.5692699999999999 +3.8325100000000001 52.307600000000001 1.84395 +3.8325100000000001 54.186399999999999 1.84395 +3.8325100000000001 50.439799999999998 1.84395 +3.8984299999999998 44.825400000000002 1.8219799999999999 +3.8325100000000001 41.078800000000001 1.84395 +3.8325100000000001 42.946599999999997 1.84395 +3.8984299999999998 41.078800000000001 1.8219799999999999 +3.8325100000000001 31.7179 1.84395 +3.8984299999999998 29.850100000000001 1.8219799999999999 +3.8325100000000001 24.224699999999999 1.84395 +3.8984299999999998 26.1035 1.8219799999999999 +-5.7482100000000003 136.56700000000001 1.85494 +3.8984299999999998 24.224699999999999 1.8219799999999999 +3.8325100000000001 22.3569 1.84395 +3.8325100000000001 14.8637 1.84395 +3.8325100000000001 16.7425 1.84395 +3.67869 138.435 1.8769100000000001 +3.7555999999999998 138.435 1.85494 +3.67869 136.56700000000001 1.8769100000000001 +3.7555999999999998 130.953 1.85494 +3.7555999999999998 123.45999999999999 1.85494 +3.7555999999999998 121.581 1.85494 +3.67869 119.71299999999999 1.8769100000000001 +3.7555999999999998 112.22 1.85494 +3.67869 110.363 1.8769100000000001 +3.7555999999999998 110.363 1.85494 +3.67869 106.60599999999999 1.8769100000000001 +3.7555999999999998 106.60599999999999 1.85494 +-3.2651300000000001 95.376900000000006 2.0417200000000002 +3.7555999999999998 104.738 1.85494 +3.7555999999999998 99.123500000000007 1.85494 +3.8984299999999998 42.946599999999997 1.8219799999999999 +3.7555999999999998 95.376900000000006 1.85494 +3.7555999999999998 91.630300000000005 1.85494 +2.5360399999999998 67.283000000000001 1.5253300000000001 +-5.5614299999999997 59.800800000000002 1.8878999999999999 +3.67869 84.148099999999999 1.8769100000000001 +3.67869 86.015900000000002 1.8769100000000001 +3.67869 82.269300000000001 1.8769100000000001 +3.7555999999999998 84.148099999999999 1.85494 +3.67869 80.401499999999999 1.8769100000000001 +3.7555999999999998 78.5227 1.85494 +3.67869 76.654899999999998 1.8769100000000001 +3.67869 74.787099999999995 1.8769100000000001 +3.67869 72.9084 1.8769100000000001 +3.7555999999999998 74.787099999999995 1.85494 +3.7555999999999998 71.040599999999998 1.85494 +3.67869 65.426199999999994 1.8769100000000001 +3.67869 50.439799999999998 1.8769100000000001 +3.67869 46.693199999999997 1.8769100000000001 +3.7555999999999998 46.693199999999997 1.85494 +3.67869 42.946599999999997 1.8769100000000001 +2.5360399999999998 20.489100000000001 1.5253300000000001 +3.67869 39.210999999999999 1.8769100000000001 +3.7555999999999998 39.210999999999999 1.85494 +-0.47442000000000001 78.5227 2.0746799999999999 +3.67869 35.464500000000001 1.8769100000000001 +3.7555999999999998 31.7179 1.85494 +3.67869 29.850100000000001 1.8769100000000001 +3.7555999999999998 26.1035 1.85494 +3.7555999999999998 27.971299999999999 1.85494 +3.7555999999999998 22.3569 1.85494 +3.67869 18.610299999999999 1.8769100000000001 +3.67869 14.8637 1.8769100000000001 +3.67869 37.332299999999996 1.8769100000000001 +3.3380899999999998 39.210999999999999 1.92086 +3.4589500000000002 41.078800000000001 1.90987 +3.0524300000000002 39.210999999999999 1.9428300000000001 +3.0524300000000002 140.31399999999999 1.9428300000000001 +3.0524300000000002 136.56700000000001 1.9428300000000001 +3.0524300000000002 127.206 1.9428300000000001 +3.0524300000000002 129.07400000000001 1.9428300000000001 +2.8876200000000001 127.206 1.9648099999999999 +0.29467500000000002 134.69999999999999 1.44842 +3.0524300000000002 121.581 1.9428300000000001 +2.8876200000000001 117.845 1.9648099999999999 +-0.990811 63.547400000000003 1.43743 +3.0524300000000002 104.738 1.9428300000000001 +2.8876200000000001 104.738 1.9648099999999999 +2.8876200000000001 101.002 1.9648099999999999 +0.041973099999999999 110.363 1.44842 +3.0524300000000002 95.376900000000006 1.9428300000000001 +3.0524300000000002 91.630300000000005 1.9428300000000001 +2.8876200000000001 89.762500000000003 1.9648099999999999 +2.8876200000000001 87.883700000000005 1.9648099999999999 +2.8876200000000001 84.148099999999999 1.9648099999999999 +3.0524300000000002 84.148099999999999 1.9428300000000001 +-0.990811 93.498099999999994 1.43743 +3.0524300000000002 80.401499999999999 1.9428300000000001 +3.0524300000000002 76.654899999999998 1.9428300000000001 +2.8876200000000001 67.283000000000001 1.9648099999999999 +2.8876200000000001 63.547400000000003 1.9648099999999999 +2.8876200000000001 59.800800000000002 1.9648099999999999 +2.8876200000000001 57.921999999999997 1.9648099999999999 +3.0524300000000002 54.186399999999999 1.9428300000000001 +2.8876200000000001 50.439799999999998 1.9648099999999999 +3.0524300000000002 46.693199999999997 1.9428300000000001 +3.7555999999999998 119.71299999999999 1.85494 +2.8876200000000001 42.946599999999997 1.9648099999999999 +2.8876200000000001 41.078800000000001 1.9648099999999999 +3.0524300000000002 42.946599999999997 1.9428300000000001 +2.8876200000000001 39.210999999999999 1.9648099999999999 +3.0524300000000002 37.332299999999996 1.9428300000000001 +3.0524300000000002 35.464500000000001 1.9428300000000001 +3.0524300000000002 31.7179 1.9428300000000001 +3.0524300000000002 29.850100000000001 1.9428300000000001 +2.8876200000000001 24.224699999999999 1.9648099999999999 +0.80008000000000001 61.668599999999998 2.0636899999999998 +3.0524300000000002 20.489100000000001 1.9428300000000001 +3.0524300000000002 16.7425 1.9428300000000001 +2.72282 41.078800000000001 1.9758 +2.3492600000000001 39.210999999999999 1.99777 +2.3492600000000001 31.7179 1.99777 +2.5360399999999998 31.7179 1.98678 +2.3492600000000001 29.850100000000001 1.99777 +2.3492600000000001 27.971299999999999 1.99777 +2.3492600000000001 24.224699999999999 1.99777 +2.3492600000000001 22.3569 1.99777 +3.94238 41.078800000000001 1.71211 +2.5360399999999998 20.489100000000001 1.98678 +2.3492600000000001 18.610299999999999 1.99777 +2.5360399999999998 16.7425 1.98678 +2.3492600000000001 12.995900000000001 1.99777 +2.5360399999999998 12.995900000000001 1.98678 +2.72282 16.7425 1.9758 +2.5360399999999998 18.610299999999999 1.98678 +2.5360399999999998 22.3569 1.98678 +2.72282 24.224699999999999 1.9758 +2.5360399999999998 26.1035 1.98678 +2.5360399999999998 24.224699999999999 1.98678 +-5.8251200000000001 97.244699999999995 1.84395 +2.5360399999999998 29.850100000000001 1.98678 +2.72282 31.7179 1.9758 +2.5360399999999998 37.332299999999996 1.98678 +2.72282 39.210999999999999 1.9758 +2.5360399999999998 39.210999999999999 1.98678 +2.72282 42.946599999999997 1.9758 +2.1514899999999999 129.07400000000001 2.0087600000000001 +2.5360399999999998 50.439799999999998 1.98678 +-5.3197099999999997 52.307600000000001 1.6022400000000001 +2.72282 52.307600000000001 1.9758 +2.5360399999999998 56.065199999999997 1.98678 +2.5360399999999998 63.547400000000003 1.98678 +2.72282 74.787099999999995 1.9758 +2.5360399999999998 74.787099999999995 1.98678 +2.72282 78.5227 1.9758 +2.5360399999999998 78.5227 1.98678 +2.72282 82.269300000000001 1.9758 +2.5360399999999998 87.883700000000005 1.98678 +2.72282 89.762500000000003 1.9758 +3.9753400000000001 54.186399999999999 1.7890200000000001 +2.5360399999999998 89.762500000000003 1.98678 +2.72282 97.244699999999995 1.9758 +2.5360399999999998 101.002 1.98678 +2.72282 108.48399999999999 1.9758 +2.5360399999999998 114.099 1.98678 +2.5360399999999998 121.581 1.98678 +2.5360399999999998 127.206 1.98678 +2.72282 138.435 1.9758 +2.5360399999999998 140.31399999999999 1.98678 +2.5360399999999998 130.953 1.98678 +2.3492600000000001 129.07400000000001 1.99777 +2.5360399999999998 129.07400000000001 1.98678 +2.5360399999999998 123.45999999999999 1.98678 +2.5360399999999998 117.845 1.98678 +2.3492600000000001 115.97799999999999 1.99777 +2.5360399999999998 106.60599999999999 1.98678 +2.5360399999999998 102.85899999999999 1.98678 +2.3492600000000001 102.85899999999999 1.99777 +2.3492600000000001 101.002 1.99777 +0.041973099999999999 42.946599999999997 2.0746799999999999 +2.5360399999999998 99.123500000000007 1.98678 +2.3492600000000001 95.376900000000006 1.99777 +2.3492600000000001 91.630300000000005 1.99777 +2.5360399999999998 91.630300000000005 1.98678 +-5.1878700000000002 134.69999999999999 1.58026 +0.54737800000000003 99.123500000000007 2.0636899999999998 +2.3492600000000001 86.015900000000002 1.99777 +2.5360399999999998 86.015900000000002 1.98678 +2.3492600000000001 84.148099999999999 1.99777 +2.3492600000000001 78.5227 1.99777 +2.1514899999999999 52.307600000000001 2.0087600000000001 +2.5360399999999998 72.9084 1.98678 +2.3492600000000001 127.206 1.99777 +2.3492600000000001 69.161799999999999 1.99777 +2.5360399999999998 69.161799999999999 1.98678 +4.0083000000000002 41.078800000000001 1.7560500000000001 +2.3492600000000001 63.547400000000003 1.99777 +2.3492600000000001 54.186399999999999 1.99777 +2.5360399999999998 54.186399999999999 1.98678 +2.3492600000000001 52.307600000000001 1.99777 +2.3492600000000001 50.439799999999998 1.99777 +-0.73810900000000002 99.123500000000007 1.43743 +2.5360399999999998 41.078800000000001 1.98678 +3.5688200000000001 101.002 1.6242099999999999 +3.5688200000000001 102.85899999999999 1.6242099999999999 +2.3492600000000001 41.078800000000001 1.99777 +2.1514899999999999 41.078800000000001 2.0087600000000001 +1.7339800000000001 138.435 2.0307300000000001 +1.9427300000000001 140.31399999999999 2.0197400000000001 +1.9427300000000001 138.435 2.0197400000000001 +1.7339800000000001 136.56700000000001 2.0307300000000001 +1.9427300000000001 136.56700000000001 2.0197400000000001 +1.9427300000000001 132.821 2.0197400000000001 +1.7339800000000001 132.821 2.0307300000000001 +3.3380899999999998 31.7179 1.92086 +1.9427300000000001 127.206 2.0197400000000001 +1.7339800000000001 123.45999999999999 2.0307300000000001 +1.9427300000000001 119.71299999999999 2.0197400000000001 +-1.2544999999999999 57.921999999999997 1.43743 +1.7339800000000001 115.97799999999999 2.0307300000000001 +1.9427300000000001 115.97799999999999 2.0197400000000001 +1.9427300000000001 112.22 2.0197400000000001 +1.7339800000000001 110.363 2.0307300000000001 +1.9427300000000001 104.738 2.0197400000000001 +1.7339800000000001 104.738 2.0307300000000001 +1.7339800000000001 97.244699999999995 2.0307300000000001 +1.7339800000000001 93.498099999999994 2.0307300000000001 +1.7339800000000001 91.630300000000005 2.0307300000000001 +1.9427300000000001 86.015900000000002 2.0197400000000001 +1.7339800000000001 84.148099999999999 2.0307300000000001 +1.9427300000000001 82.269300000000001 2.0197400000000001 +1.9427300000000001 78.5227 2.0197400000000001 +1.9427300000000001 80.401499999999999 2.0197400000000001 +1.7339800000000001 76.654899999999998 2.0307300000000001 +1.9427300000000001 76.654899999999998 2.0197400000000001 +1.7339800000000001 71.040599999999998 2.0307300000000001 +1.7339800000000001 72.9084 2.0307300000000001 +2.8876200000000001 138.435 1.9648099999999999 +1.9427300000000001 71.040599999999998 2.0197400000000001 +1.7339800000000001 67.283000000000001 2.0307300000000001 +1.7339800000000001 65.426199999999994 2.0307300000000001 +1.7339800000000001 63.547400000000003 2.0307300000000001 +1.9427300000000001 61.668599999999998 2.0197400000000001 +1.7339800000000001 54.186399999999999 2.0307300000000001 +1.9427300000000001 52.307600000000001 2.0197400000000001 +1.7339800000000001 52.307600000000001 2.0307300000000001 +-5.9679500000000001 57.921999999999997 1.72309 +-5.9679500000000001 59.800800000000002 1.72309 +1.7339800000000001 50.439799999999998 2.0307300000000001 +1.9427300000000001 44.825400000000002 2.0197400000000001 +1.9427300000000001 42.946599999999997 2.0197400000000001 +1.7339800000000001 37.332299999999996 2.0307300000000001 +1.9427300000000001 39.210999999999999 2.0197400000000001 +1.9427300000000001 37.332299999999996 2.0197400000000001 +1.9427300000000001 35.464500000000001 2.0197400000000001 +1.7339800000000001 33.585700000000003 2.0307300000000001 +1.9427300000000001 33.585700000000003 2.0197400000000001 +1.7339800000000001 27.971299999999999 2.0307300000000001 +1.7339800000000001 24.224699999999999 2.0307300000000001 +1.7339800000000001 12.995900000000001 2.0307300000000001 +1.50325 138.435 2.0417200000000002 +1.7339800000000001 140.31399999999999 2.0307300000000001 +1.50325 136.56700000000001 2.0417200000000002 +1.7339800000000001 125.339 2.0307300000000001 +1.50325 121.581 2.0417200000000002 +1.7339800000000001 119.71299999999999 2.0307300000000001 +1.7339800000000001 114.099 2.0307300000000001 +1.50325 112.22 2.0417200000000002 +1.7339800000000001 112.22 2.0307300000000001 +1.50325 108.48399999999999 2.0417200000000002 +1.50325 106.60599999999999 2.0417200000000002 +1.50325 104.738 2.0417200000000002 +1.50325 102.85899999999999 2.0417200000000002 +1.50325 99.123500000000007 2.0417200000000002 +1.7339800000000001 99.123500000000007 2.0307300000000001 +1.7339800000000001 95.376900000000006 2.0307300000000001 +1.50325 95.376900000000006 2.0417200000000002 +1.50325 91.630300000000005 2.0417200000000002 +1.7339800000000001 86.015900000000002 2.0307300000000001 +1.50325 82.269300000000001 2.0417200000000002 +1.7339800000000001 82.269300000000001 2.0307300000000001 +1.50325 80.401499999999999 2.0417200000000002 +1.50325 74.787099999999995 2.0417200000000002 +1.7339800000000001 69.161799999999999 2.0307300000000001 +1.50325 65.426199999999994 2.0417200000000002 +1.50325 61.668599999999998 2.0417200000000002 +1.7339800000000001 61.668599999999998 2.0307300000000001 +1.7339800000000001 57.921999999999997 2.0307300000000001 +1.7339800000000001 56.065199999999997 2.0307300000000001 +1.50325 48.572000000000003 2.0417200000000002 +1.50325 46.693199999999997 2.0417200000000002 +1.7339800000000001 41.078800000000001 2.0307300000000001 +1.50325 39.210999999999999 2.0417200000000002 +1.50325 29.850100000000001 2.0417200000000002 +1.7339800000000001 29.850100000000001 2.0307300000000001 +1.7339800000000001 26.1035 2.0307300000000001 +3.8325100000000001 50.439799999999998 1.6791400000000001 +1.7339800000000001 20.489100000000001 2.0307300000000001 +1.50325 20.489100000000001 2.0417200000000002 +1.7339800000000001 14.8637 2.0307300000000001 +1.50325 14.8637 2.0417200000000002 +1.50325 41.078800000000001 2.0417200000000002 +0.29467500000000002 39.210999999999999 2.0746799999999999 +-0.21073 39.210999999999999 2.0746799999999999 +-0.21073 74.787099999999995 1.43743 +-0.73810900000000002 41.078800000000001 2.0746799999999999 +-1.5181899999999999 39.210999999999999 2.0746799999999999 +-1.5181899999999999 41.078800000000001 2.0746799999999999 +-2.0345800000000001 39.210999999999999 2.0746799999999999 +-2.0345800000000001 41.078800000000001 2.0746799999999999 +-2.53999 39.210999999999999 2.0636899999999998 +-2.7816999999999998 39.210999999999999 2.0636899999999998 +-2.7816999999999998 41.078800000000001 2.0636899999999998 +-3.49586 39.210999999999999 2.0417200000000002 +2.1514899999999999 52.307600000000001 1.50335 +-3.9353400000000001 37.332299999999996 2.0197400000000001 +-3.9353400000000001 33.585700000000003 2.0197400000000001 +-3.7155999999999998 31.7179 2.0307300000000001 +-3.9353400000000001 27.971299999999999 2.0197400000000001 +-3.7155999999999998 27.971299999999999 2.0307300000000001 +-3.9353400000000001 26.1035 2.0197400000000001 +-3.9353400000000001 20.489100000000001 2.0197400000000001 +-3.9353400000000001 18.610299999999999 2.0197400000000001 +3.7555999999999998 39.210999999999999 1.65717 +3.8325100000000001 39.210999999999999 1.6791400000000001 +-3.9353400000000001 14.8637 2.0197400000000001 +-3.7155999999999998 16.7425 2.0307300000000001 +-3.49586 20.489100000000001 2.0417200000000002 +-3.7155999999999998 22.3569 2.0307300000000001 +-3.49586 22.3569 2.0417200000000002 +-3.49586 26.1035 2.0417200000000002 +-3.7155999999999998 29.850100000000001 2.0307300000000001 +-3.49586 33.585700000000003 2.0417200000000002 +0.041973099999999999 22.3569 2.0746799999999999 +-3.7155999999999998 39.210999999999999 2.0307300000000001 +1.9427300000000001 112.22 1.50335 +-3.49586 41.078800000000001 2.0417200000000002 +-3.7155999999999998 42.946599999999997 2.0307300000000001 +-3.49586 50.439799999999998 2.0417200000000002 +-3.7155999999999998 52.307600000000001 2.0307300000000001 +1.9427300000000001 110.363 1.50335 +-3.49586 54.186399999999999 2.0417200000000002 +-3.7155999999999998 54.186399999999999 2.0307300000000001 +-3.49586 56.065199999999997 2.0417200000000002 +-3.7155999999999998 57.921999999999997 2.0307300000000001 +-3.7155999999999998 63.547400000000003 2.0307300000000001 +-3.49586 72.9084 2.0417200000000002 +-3.7155999999999998 74.787099999999995 2.0307300000000001 +-3.49586 76.654899999999998 2.0417200000000002 +-3.7155999999999998 80.401499999999999 2.0307300000000001 +-3.49586 80.401499999999999 2.0417200000000002 +-3.7155999999999998 82.269300000000001 2.0307300000000001 +3.7555999999999998 18.610299999999999 1.65717 +-3.49586 87.883700000000005 2.0417200000000002 +2.8876200000000001 78.5227 1.9648099999999999 +-3.7155999999999998 97.244699999999995 2.0307300000000001 +-3.7155999999999998 95.376900000000006 2.0307300000000001 +-3.49586 99.123500000000007 2.0417200000000002 +-3.49586 101.002 2.0417200000000002 +-3.7155999999999998 104.738 2.0307300000000001 +-3.7155999999999998 106.60599999999999 2.0307300000000001 +-3.49586 108.48399999999999 2.0417200000000002 +-3.7155999999999998 112.22 2.0307300000000001 +-3.49586 117.845 2.0417200000000002 +-3.49586 115.97799999999999 2.0417200000000002 +-3.7155999999999998 117.845 2.0307300000000001 +-3.49586 119.71299999999999 2.0417200000000002 +-3.7155999999999998 119.71299999999999 2.0307300000000001 +-3.7155999999999998 123.45999999999999 2.0307300000000001 +-3.7155999999999998 127.206 2.0307300000000001 +0.80008000000000001 82.269300000000001 2.0636899999999998 +-3.49586 138.435 2.0417200000000002 +-3.7155999999999998 138.435 2.0307300000000001 +-5.8251200000000001 127.206 1.6791400000000001 +-3.7155999999999998 136.56700000000001 2.0307300000000001 +-3.0234200000000002 119.71299999999999 1.4594 +-3.9353400000000001 136.56700000000001 2.0197400000000001 +-3.9353400000000001 134.69999999999999 2.0197400000000001 +-3.9353400000000001 132.821 2.0197400000000001 +-2.0345800000000001 46.693199999999997 2.0746799999999999 +-3.9353400000000001 125.339 2.0197400000000001 +-5.8800499999999998 130.953 1.6901299999999999 +-3.7155999999999998 121.581 2.0307300000000001 +3.1952600000000002 102.85899999999999 1.58026 +-3.9353400000000001 117.845 2.0197400000000001 +-3.7155999999999998 115.97799999999999 2.0307300000000001 +-3.9353400000000001 115.97799999999999 2.0197400000000001 +-3.7155999999999998 114.099 2.0307300000000001 +-3.7155999999999998 110.363 2.0307300000000001 +-3.9353400000000001 108.48399999999999 2.0197400000000001 +-3.7155999999999998 108.48399999999999 2.0307300000000001 +-3.9353400000000001 102.85899999999999 2.0197400000000001 +-3.9353400000000001 101.002 2.0197400000000001 +-3.7155999999999998 102.85899999999999 2.0307300000000001 +-3.7155999999999998 99.123500000000007 2.0307300000000001 +-3.9353400000000001 95.376900000000006 2.0197400000000001 +-3.9353400000000001 91.630300000000005 2.0197400000000001 +-3.9353400000000001 89.762500000000003 2.0197400000000001 +-3.7155999999999998 87.883700000000005 2.0307300000000001 +-3.7155999999999998 86.015900000000002 2.0307300000000001 +-3.9353400000000001 82.269300000000001 2.0197400000000001 +-3.9353400000000001 76.654899999999998 2.0197400000000001 +-3.9353400000000001 72.9084 2.0197400000000001 +-3.7155999999999998 72.9084 2.0307300000000001 +-3.7155999999999998 69.161799999999999 2.0307300000000001 +-3.9353400000000001 67.283000000000001 2.0197400000000001 +-3.7155999999999998 61.668599999999998 2.0307300000000001 +2.5360399999999998 67.283000000000001 1.98678 +-3.9353400000000001 59.800800000000002 2.0197400000000001 +-3.7155999999999998 59.800800000000002 2.0307300000000001 +-3.7155999999999998 56.065199999999997 2.0307300000000001 +-3.9353400000000001 56.065199999999997 2.0197400000000001 +-3.9353400000000001 46.693199999999997 2.0197400000000001 +-3.7155999999999998 46.693199999999997 2.0307300000000001 +-3.9353400000000001 44.825400000000002 2.0197400000000001 +2.8876200000000001 125.339 1.55829 +-3.9353400000000001 41.078800000000001 2.0197400000000001 +-3.9353400000000001 42.946599999999997 2.0197400000000001 +-3.9353400000000001 39.210999999999999 2.0197400000000001 +-4.3418599999999996 132.821 1.99777 +-4.1440999999999999 95.376900000000006 1.50335 +-0.21073 91.630300000000005 1.43743 +-4.1440999999999999 132.821 2.0087600000000001 +-4.1440999999999999 129.07400000000001 2.0087600000000001 +-4.3418599999999996 129.07400000000001 1.99777 +-4.1440999999999999 125.339 2.0087600000000001 +-4.3418599999999996 121.581 1.99777 +-4.1440999999999999 121.581 2.0087600000000001 +-4.1440999999999999 117.845 2.0087600000000001 +-4.3418599999999996 117.845 1.99777 +-0.990811 74.787099999999995 2.0746799999999999 +-4.3418599999999996 110.363 1.99777 +-4.3418599999999996 104.738 1.99777 +-4.3418599999999996 101.002 1.99777 +-4.1440999999999999 97.244699999999995 2.0087600000000001 +-4.3418599999999996 97.244699999999995 1.99777 +-4.1440999999999999 95.376900000000006 2.0087600000000001 +-4.3418599999999996 93.498099999999994 1.99777 +-4.3418599999999996 87.883700000000005 1.99777 +-4.1440999999999999 87.883700000000005 2.0087600000000001 +-4.1440999999999999 80.401499999999999 2.0087600000000001 +-4.1440999999999999 76.654899999999998 2.0087600000000001 +-4.3418599999999996 74.787099999999995 1.99777 +-4.1440999999999999 72.9084 2.0087600000000001 +4.0083000000000002 50.439799999999998 1.7560500000000001 +-4.3418599999999996 97.244699999999995 1.51434 +-4.3418599999999996 71.040599999999998 1.99777 +-4.3418599999999996 69.161799999999999 1.99777 +-4.3418599999999996 65.426199999999994 1.99777 +-4.3418599999999996 63.547400000000003 1.99777 +-4.1440999999999999 61.668599999999998 2.0087600000000001 +3.5688200000000001 117.845 1.6242099999999999 +-4.1440999999999999 56.065199999999997 2.0087600000000001 +-4.3418599999999996 56.065199999999997 1.99777 +-4.1440999999999999 39.210999999999999 2.0087600000000001 +-4.3418599999999996 37.332299999999996 1.99777 +-4.1440999999999999 37.332299999999996 2.0087600000000001 +-4.3418599999999996 31.7179 1.99777 +-4.1440999999999999 29.850100000000001 2.0087600000000001 +-4.1440999999999999 27.971299999999999 2.0087600000000001 +-5.4515599999999997 42.946599999999997 1.6132200000000001 +-5.5614299999999997 44.825400000000002 1.6242099999999999 +-5.5614299999999997 76.654899999999998 1.8878999999999999 +-4.3418599999999996 22.3569 1.99777 +-4.1440999999999999 18.610299999999999 2.0087600000000001 +-4.5286400000000002 37.332299999999996 1.98678 +-4.7154199999999999 31.7179 1.9758 +-4.7154199999999999 33.585700000000003 1.9758 +-4.5286400000000002 31.7179 1.98678 +-4.7154199999999999 27.971299999999999 1.9758 +-4.7154199999999999 24.224699999999999 1.9758 +-4.5286400000000002 24.224699999999999 1.98678 +-4.5286400000000002 22.3569 1.98678 +-4.7154199999999999 20.489100000000001 1.9758 +-4.5286400000000002 20.489100000000001 1.98678 +2.1514899999999999 14.8637 1.50335 +-4.7154199999999999 16.7425 1.9758 +-4.7154199999999999 14.8637 1.9758 +-4.3418599999999996 24.224699999999999 1.99777 +-4.3418599999999996 26.1035 1.99777 +-1.5181899999999999 130.953 1.43743 +-4.5286400000000002 26.1035 1.98678 +-4.5286400000000002 27.971299999999999 1.98678 +-4.5286400000000002 29.850100000000001 1.98678 +-4.3418599999999996 33.585700000000003 1.99777 +-4.5286400000000002 35.464500000000001 1.98678 +-4.5286400000000002 39.210999999999999 1.98678 +-4.3418599999999996 39.210999999999999 1.99777 +-4.3418599999999996 50.439799999999998 1.99777 +-4.3418599999999996 61.668599999999998 1.99777 +-4.5286400000000002 61.668599999999998 1.98678 +-4.5286400000000002 63.547400000000003 1.98678 +-4.3418599999999996 72.9084 1.99777 +0.29467500000000002 129.07400000000001 1.44842 +-4.3418599999999996 78.5227 1.99777 +-4.3418599999999996 80.401499999999999 1.99777 +-4.3418599999999996 84.148099999999999 1.99777 +-4.5286400000000002 86.015900000000002 1.98678 +-5.5614299999999997 104.738 1.6242099999999999 +-4.3418599999999996 89.762500000000003 1.99777 +-4.5286400000000002 101.002 1.98678 +-4.3418599999999996 106.60599999999999 1.99777 +-4.3418599999999996 108.48399999999999 1.99777 +-4.3418599999999996 112.22 1.99777 +-3.0234200000000002 69.161799999999999 2.0527000000000002 +3.1952600000000002 35.464500000000001 1.9318500000000001 +-4.5286400000000002 117.845 1.98678 +-2.7816999999999998 115.97799999999999 1.4594 +-4.3418599999999996 119.71299999999999 1.99777 +-4.5286400000000002 119.71299999999999 1.98678 +-4.5286400000000002 123.45999999999999 1.98678 +-4.5286400000000002 97.244699999999995 1.5253300000000001 +-4.7154199999999999 97.244699999999995 1.5472999999999999 +-4.5286400000000002 134.69999999999999 1.98678 +-4.3418599999999996 136.56700000000001 1.99777 +-4.5286400000000002 138.435 1.98678 +-4.3418599999999996 140.31399999999999 1.99777 +-4.5286400000000002 140.31399999999999 1.98678 +-4.7154199999999999 134.69999999999999 1.9758 +-4.7154199999999999 132.821 1.9758 +-4.5286400000000002 132.821 1.98678 +-5.9899199999999997 65.426199999999994 1.77803 +-4.5286400000000002 129.07400000000001 1.98678 +-4.5286400000000002 121.581 1.98678 +-4.7154199999999999 115.97799999999999 1.9758 +-4.5286400000000002 114.099 1.98678 +-4.5286400000000002 106.60599999999999 1.98678 +-4.7154199999999999 102.85899999999999 1.9758 +-4.7154199999999999 99.123500000000007 1.9758 +-4.5286400000000002 97.244699999999995 1.98678 +-4.5286400000000002 95.376900000000006 1.98678 +-3.0234200000000002 89.762500000000003 2.0527000000000002 +-4.5286400000000002 89.762500000000003 1.98678 +-4.7154199999999999 87.883700000000005 1.9758 +-4.7154199999999999 84.148099999999999 1.9758 +-5.9899199999999997 39.210999999999999 1.7450699999999999 +-4.5286400000000002 84.148099999999999 1.98678 +-4.7154199999999999 80.401499999999999 1.9758 +-4.7154199999999999 78.5227 1.9758 +-4.5286400000000002 80.401499999999999 1.98678 +-4.5286400000000002 76.654899999999998 1.98678 +0.29467500000000002 57.921999999999997 1.44842 +-4.5286400000000002 74.787099999999995 1.98678 +-4.7154199999999999 72.9084 1.9758 +-4.5286400000000002 67.283000000000001 1.98678 +3.5688200000000001 41.078800000000001 1.6242099999999999 +-4.5286400000000002 65.426199999999994 1.98678 +-4.7154199999999999 61.668599999999998 1.9758 +-4.7154199999999999 59.800800000000002 1.9758 +-4.5286400000000002 56.065199999999997 1.98678 +-1.7818799999999999 99.123500000000007 2.0746799999999999 +-4.7154199999999999 54.186399999999999 1.9758 +-4.7154199999999999 50.439799999999998 1.9758 +-4.7154199999999999 48.572000000000003 1.9758 +-4.5286400000000002 50.439799999999998 1.98678 +2.8876200000000001 114.099 1.55829 +3.7555999999999998 101.002 1.65717 +-4.5286400000000002 48.572000000000003 1.98678 +-4.5286400000000002 42.946599999999997 1.98678 +-4.5286400000000002 41.078800000000001 1.98678 +-4.7154199999999999 140.31399999999999 1.9758 +-4.7154199999999999 138.435 1.9758 +-4.8802300000000001 136.56700000000001 1.9648099999999999 +-4.7154199999999999 136.56700000000001 1.9758 +-4.7154199999999999 127.206 1.9758 +-4.7154199999999999 123.45999999999999 1.9758 +2.5360399999999998 115.97799999999999 1.98678 +-4.8802300000000001 117.845 1.9648099999999999 +-4.7154199999999999 114.099 1.9758 +-4.8802300000000001 112.22 1.9648099999999999 +-4.7154199999999999 112.22 1.9758 +-4.8802300000000001 108.48399999999999 1.9648099999999999 +-4.8802300000000001 106.60599999999999 1.9648099999999999 +-4.7154199999999999 104.738 1.9758 +-4.8802300000000001 102.85899999999999 1.9648099999999999 +-4.7154199999999999 101.002 1.9758 +-4.8802300000000001 97.244699999999995 1.9648099999999999 +-4.7154199999999999 95.376900000000006 1.9758 +-4.8802300000000001 93.498099999999994 1.9648099999999999 +-4.7154199999999999 91.630300000000005 1.9758 +-4.8802300000000001 87.883700000000005 1.9648099999999999 +1.50325 33.585700000000003 2.0417200000000002 +-4.7154199999999999 74.787099999999995 1.9758 +-4.7154199999999999 71.040599999999998 1.9758 +-4.7154199999999999 69.161799999999999 1.9758 +3.67869 93.498099999999994 1.64618 +-4.8802300000000001 65.426199999999994 1.9648099999999999 +-4.8802300000000001 67.283000000000001 1.9648099999999999 +-4.8802300000000001 59.800800000000002 1.9648099999999999 +-4.8802300000000001 56.065199999999997 1.9648099999999999 +-4.7154199999999999 63.547400000000003 1.9758 +-4.8802300000000001 48.572000000000003 1.9648099999999999 +-4.7154199999999999 46.693199999999997 1.9758 +-4.8802300000000001 44.825400000000002 1.9648099999999999 +-1.2544999999999999 48.572000000000003 1.43743 +-1.5181899999999999 48.572000000000003 1.43743 +-4.7154199999999999 44.825400000000002 1.9758 +-4.7154199999999999 41.078800000000001 1.9758 +-4.7154199999999999 39.210999999999999 1.9758 +-4.8802300000000001 37.332299999999996 1.9648099999999999 +-4.7154199999999999 37.332299999999996 1.9758 +-4.7154199999999999 35.464500000000001 1.9758 +-4.8802300000000001 31.7179 1.9648099999999999 +-4.7154199999999999 22.3569 1.9758 +-4.8802300000000001 22.3569 1.9648099999999999 +-4.8802300000000001 16.7425 1.9648099999999999 +-4.8802300000000001 138.435 1.9648099999999999 +-5.0450400000000002 127.206 1.9428300000000001 +-4.8802300000000001 125.339 1.9648099999999999 +-4.8802300000000001 123.45999999999999 1.9648099999999999 +-5.0450400000000002 119.71299999999999 1.9428300000000001 +-5.0450400000000002 115.97799999999999 1.9428300000000001 +-4.8802300000000001 115.97799999999999 1.9648099999999999 +-5.0450400000000002 114.099 1.9428300000000001 +-3.2651300000000001 87.883700000000005 2.0417200000000002 +-5.66031 132.821 1.8769100000000001 +-4.8802300000000001 114.099 1.9648099999999999 +3.9753400000000001 136.56700000000001 1.72309 +-4.8802300000000001 110.363 1.9648099999999999 +2.8876200000000001 39.210999999999999 1.55829 +-5.0450400000000002 106.60599999999999 1.9428300000000001 +-4.8802300000000001 104.738 1.9648099999999999 +-5.0450400000000002 93.498099999999994 1.9428300000000001 +-5.0450400000000002 89.762500000000003 1.9428300000000001 +-4.8802300000000001 89.762500000000003 1.9648099999999999 +-5.0450400000000002 82.269300000000001 1.9428300000000001 +-4.7154199999999999 76.654899999999998 1.9758 +-4.8802300000000001 76.654899999999998 1.9648099999999999 +-4.8802300000000001 78.5227 1.9648099999999999 +-4.8802300000000001 74.787099999999995 1.9648099999999999 +-5.0450400000000002 72.9084 1.9428300000000001 +-4.8802300000000001 71.040599999999998 1.9648099999999999 +-4.8802300000000001 72.9084 1.9648099999999999 +-5.0450400000000002 65.426199999999994 1.9428300000000001 +-5.0450400000000002 63.547400000000003 1.9428300000000001 +-4.8802300000000001 63.547400000000003 1.9648099999999999 +-5.0450400000000002 54.186399999999999 1.9428300000000001 +-5.0450400000000002 50.439799999999998 1.9428300000000001 +-5.66031 52.307600000000001 1.64618 +-4.8802300000000001 50.439799999999998 1.9648099999999999 +-5.0450400000000002 48.572000000000003 1.9428300000000001 +-4.8802300000000001 46.693199999999997 1.9648099999999999 +-4.8802300000000001 42.946599999999997 1.9648099999999999 +-5.0450400000000002 41.078800000000001 1.9428300000000001 +-4.8802300000000001 39.210999999999999 1.9648099999999999 +-5.0450400000000002 39.210999999999999 1.9428300000000001 +-4.8802300000000001 35.464500000000001 1.9648099999999999 +-5.0450400000000002 35.464500000000001 1.9428300000000001 +-3.2651300000000001 46.693199999999997 2.0417200000000002 +-5.0450400000000002 27.971299999999999 1.9428300000000001 +-5.0450400000000002 26.1035 1.9428300000000001 +-5.0450400000000002 20.489100000000001 1.9428300000000001 +-4.8802300000000001 20.489100000000001 1.9648099999999999 +-5.0450400000000002 14.8637 1.9428300000000001 +-5.3197099999999997 39.210999999999999 1.92086 +-5.4515599999999997 35.464500000000001 1.90987 +-5.4515599999999997 31.7179 1.90987 +-5.8251200000000001 95.376900000000006 1.6791400000000001 +-5.8800499999999998 97.244699999999995 1.6901299999999999 +-5.4515599999999997 27.971299999999999 1.90987 +-5.3197099999999997 26.1035 1.92086 +-5.4515599999999997 22.3569 1.90987 +-5.3197099999999997 24.224699999999999 1.92086 +-5.3197099999999997 20.489100000000001 1.92086 +-5.4515599999999997 20.489100000000001 1.90987 +-5.3197099999999997 16.7425 1.92086 +-5.4515599999999997 16.7425 1.90987 +-5.4515599999999997 14.8637 1.90987 +-5.3197099999999997 14.8637 1.92086 +-5.1878700000000002 20.489100000000001 1.9318500000000001 +-5.1878700000000002 29.850100000000001 1.9318500000000001 +-5.1878700000000002 33.585700000000003 1.9318500000000001 +-5.3197099999999997 31.7179 1.92086 +-5.3197099999999997 42.946599999999997 1.92086 +-5.1878700000000002 46.693199999999997 1.9318500000000001 +-5.1878700000000002 50.439799999999998 1.9318500000000001 +-5.1878700000000002 52.307600000000001 1.9318500000000001 +-5.1878700000000002 54.186399999999999 1.9318500000000001 +-5.3197099999999997 54.186399999999999 1.92086 +-5.3197099999999997 59.800800000000002 1.92086 +-5.1878700000000002 65.426199999999994 1.9318500000000001 +-2.7816999999999998 78.5227 2.0636899999999998 +-5.1878700000000002 67.283000000000001 1.9318500000000001 +-5.1878700000000002 71.040599999999998 1.9318500000000001 +-5.1878700000000002 72.9084 1.9318500000000001 +-5.3197099999999997 72.9084 1.92086 +-5.3197099999999997 76.654899999999998 1.92086 +-5.3197099999999997 78.5227 1.92086 +-5.1878700000000002 86.015900000000002 1.9318500000000001 +-5.1878700000000002 89.762500000000003 1.9318500000000001 +-5.1878700000000002 91.630300000000005 1.9318500000000001 +-4.3418599999999996 102.85899999999999 1.51434 +-5.1878700000000002 95.376900000000006 1.9318500000000001 +-5.3197099999999997 97.244699999999995 1.92086 +-5.3197099999999997 99.123500000000007 1.92086 +-5.1878700000000002 99.123500000000007 1.9318500000000001 +-5.1878700000000002 101.002 1.9318500000000001 +-5.3197099999999997 102.85899999999999 1.92086 +-5.3197099999999997 106.60599999999999 1.92086 +-5.1878700000000002 106.60599999999999 1.9318500000000001 +3.94238 78.5227 1.8109900000000001 +-5.1878700000000002 108.48399999999999 1.9318500000000001 +-5.3197099999999997 108.48399999999999 1.92086 +-5.1878700000000002 119.71299999999999 1.9318500000000001 +-0.73810900000000002 74.787099999999995 2.0746799999999999 +-0.73810900000000002 72.9084 2.0746799999999999 +-0.21073 136.56700000000001 1.43743 +-5.1878700000000002 140.31399999999999 1.9318500000000001 +-5.3197099999999997 142.18199999999999 1.92086 +-5.3197099999999997 136.56700000000001 1.92086 +-5.3197099999999997 138.435 1.92086 +-5.3197099999999997 134.69999999999999 1.92086 +-4.7154199999999999 106.60599999999999 1.5472999999999999 +-5.3197099999999997 125.339 1.92086 +-5.4515599999999997 125.339 1.90987 +-5.3197099999999997 123.45999999999999 1.92086 +-5.4515599999999997 114.099 1.90987 +-5.3197099999999997 114.099 1.92086 +-5.3197099999999997 110.363 1.92086 +-5.4515599999999997 106.60599999999999 1.90987 +-4.1440999999999999 74.787099999999995 1.50335 +-5.3197099999999997 104.738 1.92086 +-5.4515599999999997 101.002 1.90987 +-5.4515599999999997 93.498099999999994 1.90987 +-5.4515599999999997 89.762500000000003 1.90987 +-5.3197099999999997 91.630300000000005 1.92086 +-5.4515599999999997 87.883700000000005 1.90987 +-0.73810900000000002 61.668599999999998 2.0746799999999999 +-5.3197099999999997 87.883700000000005 1.92086 +-5.4515599999999997 80.401499999999999 1.90987 +-5.3197099999999997 80.401499999999999 1.92086 +-5.3197099999999997 67.283000000000001 1.92086 +-5.3197099999999997 69.161799999999999 1.92086 +-5.4515599999999997 65.426199999999994 1.90987 +-5.4515599999999997 63.547400000000003 1.90987 +3.8325100000000001 76.654899999999998 1.6791400000000001 +-5.3197099999999997 61.668599999999998 1.92086 +-5.4515599999999997 57.921999999999997 1.90987 +-5.4515599999999997 59.800800000000002 1.90987 +-5.4515599999999997 56.065199999999997 1.90987 +-5.4515599999999997 54.186399999999999 1.90987 +3.67869 95.376900000000006 1.8769100000000001 +-5.3197099999999997 46.693199999999997 1.92086 +-5.3197099999999997 48.572000000000003 1.92086 +-5.4515599999999997 44.825400000000002 1.90987 +-5.3197099999999997 44.825400000000002 1.92086 +-5.7482100000000003 42.946599999999997 1.85494 +-5.66031 42.946599999999997 1.8769100000000001 +-5.66031 39.210999999999999 1.8769100000000001 +-5.7482100000000003 39.210999999999999 1.85494 +-5.8251200000000001 41.078800000000001 1.84395 +-5.8800499999999998 142.18199999999999 1.8219799999999999 +-1.5181899999999999 72.9084 1.43743 +-5.93499 140.31399999999999 1.8109900000000001 +-2.28728 138.435 1.44842 +-5.8800499999999998 138.435 1.8219799999999999 +-5.93499 136.56700000000001 1.8109900000000001 +-5.93499 132.821 1.8109900000000001 +-5.3197099999999997 115.97799999999999 1.92086 +-5.93499 129.07400000000001 1.8109900000000001 +-5.93499 127.206 1.8109900000000001 +-5.8800499999999998 123.45999999999999 1.8219799999999999 +-5.93499 115.97799999999999 1.8109900000000001 +-5.93499 114.099 1.8109900000000001 +-5.8800499999999998 112.22 1.8219799999999999 +-5.93499 110.363 1.8109900000000001 +-5.8800499999999998 108.48399999999999 1.8219799999999999 +-3.0234200000000002 54.186399999999999 2.0527000000000002 +-5.93499 104.738 1.8109900000000001 +-5.93499 102.85899999999999 1.8109900000000001 +-5.8800499999999998 101.002 1.8219799999999999 +-5.93499 99.123500000000007 1.8109900000000001 +-5.93499 95.376900000000006 1.8109900000000001 +-5.93499 91.630300000000005 1.8109900000000001 +-5.8800499999999998 91.630300000000005 1.8219799999999999 +-5.93499 89.762500000000003 1.8109900000000001 +-5.8800499999999998 84.148099999999999 1.8219799999999999 +-5.93499 84.148099999999999 1.8109900000000001 +-5.8800499999999998 82.269300000000001 1.8219799999999999 +-5.93499 78.5227 1.8109900000000001 +-0.990811 93.498099999999994 2.0746799999999999 +-5.93499 72.9084 1.8109900000000001 +-5.93499 67.283000000000001 1.8109900000000001 +2.8876200000000001 80.401499999999999 1.9648099999999999 +-5.8800499999999998 67.283000000000001 1.8219799999999999 +-5.93499 63.547400000000003 1.8109900000000001 +-5.8800499999999998 61.668599999999998 1.8219799999999999 +-5.93499 59.800800000000002 1.8109900000000001 +-5.8800499999999998 59.800800000000002 1.8219799999999999 +-5.8800499999999998 57.921999999999997 1.8219799999999999 +-5.93499 52.307600000000001 1.8109900000000001 +-5.8800499999999998 52.307600000000001 1.8219799999999999 +-5.93499 50.439799999999998 1.8109900000000001 +-5.8800499999999998 87.883700000000005 1.6901299999999999 +-5.8800499999999998 48.572000000000003 1.8219799999999999 +-5.8800499999999998 46.693199999999997 1.8219799999999999 +-5.8800499999999998 41.078800000000001 1.8219799999999999 +-5.93499 39.210999999999999 1.8109900000000001 +3.67869 52.307600000000001 1.64618 +3.67869 54.186399999999999 1.64618 +-5.93499 33.585700000000003 1.8109900000000001 +-5.93499 31.7179 1.8109900000000001 +-5.93499 29.850100000000001 1.8109900000000001 +-5.93499 26.1035 1.8109900000000001 +-5.8800499999999998 26.1035 1.8219799999999999 +-5.93499 14.8637 1.8109900000000001 +-5.93499 44.825400000000002 1.8109900000000001 +-5.9679500000000001 42.946599999999997 1.7890200000000001 +-5.93499 42.946599999999997 1.8109900000000001 +-4.1440999999999999 115.97799999999999 2.0087600000000001 +-5.93499 37.332299999999996 1.8109900000000001 +-5.93499 35.464500000000001 1.8109900000000001 +-4.5286400000000002 115.97799999999999 1.98678 +-5.9899199999999997 42.946599999999997 1.77803 +-5.9899199999999997 41.078800000000001 1.77803 +-5.9899199999999997 37.332299999999996 1.77803 +-5.9899199999999997 39.210999999999999 1.77803 +-0.21073 31.7179 2.0746799999999999 +-0.21073 29.850100000000001 2.0746799999999999 +0.041973099999999999 29.850100000000001 2.0746799999999999 +0.54737800000000003 33.585700000000003 2.0636899999999998 +0.80008000000000001 35.464500000000001 2.0636899999999998 +1.2725200000000001 140.31399999999999 2.0417200000000002 +1.2725200000000001 138.435 2.0417200000000002 +1.7339800000000001 142.18199999999999 1.4923599999999999 +1.04179 138.435 2.0527000000000002 +1.2725200000000001 132.821 2.0417200000000002 +1.50325 12.995900000000001 2.0417200000000002 +1.04179 127.206 2.0527000000000002 +1.2725200000000001 125.339 2.0417200000000002 +1.04179 121.581 2.0527000000000002 +1.04179 117.845 2.0527000000000002 +-5.0450400000000002 69.161799999999999 1.5692699999999999 +1.2725200000000001 114.099 2.0417200000000002 +3.7555999999999998 48.572000000000003 1.65717 +3.8325100000000001 48.572000000000003 1.6791400000000001 +1.04179 108.48399999999999 2.0527000000000002 +1.04179 106.60599999999999 2.0527000000000002 +3.0524300000000002 26.1035 1.5692699999999999 +-1.2544999999999999 106.60599999999999 2.0746799999999999 +-0.990811 80.401499999999999 2.0746799999999999 +1.2725200000000001 93.498099999999994 2.0417200000000002 +1.2725200000000001 82.269300000000001 2.0417200000000002 +3.3380899999999998 27.971299999999999 1.6022400000000001 +1.04179 72.9084 2.0527000000000002 +1.2725200000000001 69.161799999999999 2.0417200000000002 +1.04179 69.161799999999999 2.0527000000000002 +1.04179 65.426199999999994 2.0527000000000002 +1.04179 63.547400000000003 2.0527000000000002 +1.04179 61.668599999999998 2.0527000000000002 +1.2725200000000001 57.921999999999997 2.0417200000000002 +1.2725200000000001 59.800800000000002 2.0417200000000002 +2.8876200000000001 134.69999999999999 1.9648099999999999 +1.04179 46.693199999999997 2.0527000000000002 +1.2725200000000001 46.693199999999997 2.0417200000000002 +1.04179 41.078800000000001 2.0527000000000002 +1.2725200000000001 41.078800000000001 2.0417200000000002 +1.04179 37.332299999999996 2.0527000000000002 +1.04179 39.210999999999999 2.0527000000000002 +1.2725200000000001 37.332299999999996 2.0417200000000002 +1.04179 33.585700000000003 2.0527000000000002 +1.04179 31.7179 2.0527000000000002 +2.72282 54.186399999999999 1.9758 +2.8876200000000001 54.186399999999999 1.9648099999999999 +1.2725200000000001 29.850100000000001 2.0417200000000002 +1.04179 29.850100000000001 2.0527000000000002 +1.2725200000000001 26.1035 2.0417200000000002 +1.04179 22.3569 2.0527000000000002 +0.80008000000000001 39.210999999999999 2.0636899999999998 +0.29467500000000002 37.332299999999996 2.0746799999999999 +0.54737800000000003 39.210999999999999 2.0636899999999998 +0.041973099999999999 33.585700000000003 2.0746799999999999 +0.29467500000000002 33.585700000000003 2.0746799999999999 +0.54737800000000003 35.464500000000001 2.0636899999999998 +2.1514899999999999 39.210999999999999 1.50335 +0.54737800000000003 18.610299999999999 1.44842 +1.04179 57.921999999999997 2.0527000000000002 +0.29467500000000002 20.489100000000001 1.44842 +0.29467500000000002 18.610299999999999 1.44842 +0.041973099999999999 20.489100000000001 1.44842 +0.041973099999999999 18.610299999999999 1.44842 +-0.47442000000000001 20.489100000000001 1.43743 +-0.21073 18.610299999999999 1.43743 +-0.990811 20.489100000000001 1.43743 +-1.7818799999999999 20.489100000000001 1.43743 +-1.7818799999999999 18.610299999999999 1.43743 +-2.0345800000000001 20.489100000000001 1.44842 +-2.28728 18.610299999999999 1.44842 +3.8325100000000001 95.376900000000006 1.84395 +-2.53999 18.610299999999999 1.44842 +-2.7816999999999998 18.610299999999999 1.4594 +-2.53999 14.8637 1.44842 +-4.1440999999999999 18.610299999999999 1.50335 +-4.3418599999999996 18.610299999999999 1.51434 +-5.3197099999999997 29.850100000000001 1.6022400000000001 +3.1952600000000002 78.5227 1.58026 +-5.8800499999999998 37.332299999999996 1.6901299999999999 +-5.8800499999999998 35.464500000000001 1.6901299999999999 +-5.93499 29.850100000000001 1.71211 +-5.7482100000000003 127.206 1.65717 +-5.8251200000000001 129.07400000000001 1.6791400000000001 +-5.93499 31.7179 1.71211 +-5.9679500000000001 33.585700000000003 1.72309 +-5.9679500000000001 37.332299999999996 1.72309 +-5.9679500000000001 39.210999999999999 1.72309 +-2.28728 125.339 2.0636899999999998 +-5.93499 39.210999999999999 1.71211 +-5.93499 44.825400000000002 1.71211 +-5.9679500000000001 44.825400000000002 1.72309 +-5.9679500000000001 48.572000000000003 1.72309 +-5.9679500000000001 56.065199999999997 1.72309 +-5.93499 59.800800000000002 1.71211 +-5.93499 61.668599999999998 1.71211 +-5.9679500000000001 63.547400000000003 1.72309 +-5.93499 67.283000000000001 1.71211 +-5.9679500000000001 71.040599999999998 1.72309 +-5.93499 76.654899999999998 1.71211 +-5.9679500000000001 76.654899999999998 1.72309 +-5.9679500000000001 84.148099999999999 1.72309 +-5.93499 89.762500000000003 1.71211 +-5.9679500000000001 89.762500000000003 1.72309 +-5.93499 91.630300000000005 1.71211 +-5.93499 93.498099999999994 1.71211 +-5.9679500000000001 99.123500000000007 1.72309 +-5.93499 101.002 1.71211 +-4.1440999999999999 114.099 2.0087600000000001 +-5.93499 106.60599999999999 1.71211 +-5.9679500000000001 106.60599999999999 1.72309 +-5.93499 108.48399999999999 1.71211 +2.8876200000000001 123.45999999999999 1.55829 +-5.9679500000000001 110.363 1.72309 +-5.9679500000000001 112.22 1.72309 +-5.93499 125.339 1.71211 +-5.93499 134.69999999999999 1.71211 +-5.9679500000000001 41.078800000000001 1.72309 +-5.7482100000000003 39.210999999999999 1.65717 +-5.5614299999999997 37.332299999999996 1.6242099999999999 +-5.1878700000000002 37.332299999999996 1.58026 +-5.1878700000000002 39.210999999999999 1.58026 +-4.7154199999999999 37.332299999999996 1.5472999999999999 +-4.7154199999999999 39.210999999999999 1.5472999999999999 +-4.1440999999999999 37.332299999999996 1.50335 +-3.0234200000000002 37.332299999999996 1.4594 +-2.7816999999999998 37.332299999999996 1.4594 +-2.53999 39.210999999999999 1.44842 +-2.28728 37.332299999999996 1.44842 +-2.0345800000000001 39.210999999999999 1.44842 +-1.5181899999999999 39.210999999999999 1.43743 +-1.2544999999999999 39.210999999999999 1.43743 +-0.990811 39.210999999999999 1.43743 +-0.21073 37.332299999999996 1.43743 +0.54737800000000003 39.210999999999999 1.44842 +1.04179 37.332299999999996 1.4594 +0.80008000000000001 37.332299999999996 1.4594 +1.9427300000000001 115.97799999999999 1.50335 +1.9427300000000001 114.099 1.50335 +1.9427300000000001 108.48399999999999 1.50335 +1.7339800000000001 99.123500000000007 1.4923599999999999 +1.7339800000000001 101.002 1.4923599999999999 +1.7339800000000001 97.244699999999995 1.4923599999999999 +1.9427300000000001 95.376900000000006 1.50335 +1.9427300000000001 91.630300000000005 1.50335 +1.7339800000000001 89.762500000000003 1.4923599999999999 +1.7339800000000001 87.883700000000005 1.4923599999999999 +1.9427300000000001 84.148099999999999 1.50335 +0.29467500000000002 127.206 1.44842 +1.7339800000000001 84.148099999999999 1.4923599999999999 +1.7339800000000001 82.269300000000001 1.4923599999999999 +0.80008000000000001 84.148099999999999 2.0636899999999998 +1.9427300000000001 78.5227 1.50335 +1.7339800000000001 78.5227 1.4923599999999999 +0.041973099999999999 108.48399999999999 1.44842 +3.1952600000000002 71.040599999999998 1.9318500000000001 +1.7339800000000001 72.9084 1.4923599999999999 +1.9427300000000001 69.161799999999999 1.50335 +1.7339800000000001 71.040599999999998 1.4923599999999999 +-2.0345800000000001 52.307600000000001 1.44842 +0.041973099999999999 59.800800000000002 1.44842 +3.1952600000000002 74.787099999999995 1.9318500000000001 +1.7339800000000001 65.426199999999994 1.4923599999999999 +1.9427300000000001 65.426199999999994 1.50335 +0.80008000000000001 69.161799999999999 1.4594 +1.9427300000000001 57.921999999999997 1.50335 +1.7339800000000001 56.065199999999997 1.4923599999999999 +1.9427300000000001 54.186399999999999 1.50335 +1.9427300000000001 52.307600000000001 1.50335 +1.7339800000000001 52.307600000000001 1.4923599999999999 +1.7339800000000001 48.572000000000003 1.4923599999999999 +1.9427300000000001 48.572000000000003 1.50335 +1.9427300000000001 42.946599999999997 1.50335 +1.7339800000000001 35.464500000000001 1.4923599999999999 +1.9427300000000001 35.464500000000001 1.50335 +1.9427300000000001 31.7179 1.50335 +1.9427300000000001 27.971299999999999 1.50335 +1.7339800000000001 27.971299999999999 1.4923599999999999 +1.9427300000000001 26.1035 1.50335 +1.7339800000000001 22.3569 1.4923599999999999 +1.9427300000000001 20.489100000000001 1.50335 +1.9427300000000001 14.8637 1.50335 +0.29467500000000002 22.3569 1.44842 +-0.21073 22.3569 1.43743 +-0.47442000000000001 50.439799999999998 2.0746799999999999 +-1.2544999999999999 20.489100000000001 1.43743 +3.67869 39.210999999999999 1.64618 +-2.53999 20.489100000000001 1.44842 +-2.7816999999999998 20.489100000000001 1.4594 +-0.73810900000000002 67.283000000000001 2.0746799999999999 +-2.7816999999999998 16.7425 1.4594 +-3.9353400000000001 18.610299999999999 1.50335 +-4.8802300000000001 18.610299999999999 1.9648099999999999 +-2.28728 84.148099999999999 2.0746799999999999 +-4.1440999999999999 20.489100000000001 1.50335 +-5.1878700000000002 27.971299999999999 1.58026 +-5.1878700000000002 26.1035 1.58026 +-5.0450400000000002 27.971299999999999 1.5692699999999999 +-5.5614299999999997 24.224699999999999 1.8878999999999999 +3.5688200000000001 134.69999999999999 1.6242099999999999 +1.50325 110.363 2.0417200000000002 +-5.8251200000000001 35.464500000000001 1.6791400000000001 +-5.7482100000000003 37.332299999999996 1.65717 +-5.7482100000000003 142.18199999999999 1.65717 +0.041973099999999999 97.244699999999995 1.44842 +-5.66031 140.31399999999999 1.64618 +-5.66031 136.56700000000001 1.64618 +-3.9353400000000001 123.45999999999999 2.0197400000000001 +-4.1440999999999999 123.45999999999999 2.0087600000000001 +-5.66031 132.821 1.64618 +-5.7482100000000003 132.821 1.65717 +-5.66031 130.953 1.64618 +-5.7482100000000003 129.07400000000001 1.65717 +-5.7482100000000003 130.953 1.65717 +-5.7482100000000003 125.339 1.65717 +-5.66031 125.339 1.64618 +-5.66031 121.581 1.64618 +-5.66031 114.099 1.64618 +-5.66031 112.22 1.64618 +-5.7482100000000003 112.22 1.65717 +-5.66031 108.48399999999999 1.64618 +-5.7482100000000003 104.738 1.65717 +-5.66031 102.85899999999999 1.64618 +-2.0345800000000001 123.45999999999999 1.44842 +-5.7482100000000003 102.85899999999999 1.65717 +-5.93499 93.498099999999994 1.8109900000000001 +-5.7482100000000003 93.498099999999994 1.65717 +-5.66031 93.498099999999994 1.64618 +-5.66031 89.762500000000003 1.64618 +-5.7482100000000003 86.015900000000002 1.65717 +-5.66031 84.148099999999999 1.64618 +1.9427300000000001 89.762500000000003 2.0197400000000001 +2.1514899999999999 91.630300000000005 2.0087600000000001 +-3.7155999999999998 18.610299999999999 2.0307300000000001 +-5.66031 78.5227 1.64618 +-5.66031 76.654899999999998 1.64618 +-5.7482100000000003 78.5227 1.65717 +-5.7482100000000003 76.654899999999998 1.65717 +-5.7482100000000003 72.9084 1.65717 +-5.66031 71.040599999999998 1.64618 +-5.66031 65.426199999999994 1.64618 +-5.7482100000000003 63.547400000000003 1.65717 +-5.66031 59.800800000000002 1.64618 +-5.7482100000000003 56.065199999999997 1.65717 +-5.66031 54.186399999999999 1.64618 +0.041973099999999999 101.002 1.44842 +-5.7482100000000003 54.186399999999999 1.65717 +-5.66031 44.825400000000002 1.64618 +-5.7482100000000003 41.078800000000001 1.65717 +-5.66031 31.7179 1.64618 +-5.66031 29.850100000000001 1.64618 +-5.7482100000000003 31.7179 1.65717 +-5.66031 27.971299999999999 1.64618 +-5.7482100000000003 27.971299999999999 1.65717 +-5.7482100000000003 24.224699999999999 1.65717 +3.8325100000000001 80.401499999999999 1.84395 +-5.66031 22.3569 1.64618 +-5.66031 18.610299999999999 1.64618 +-5.66031 16.7425 1.64618 +-5.7482100000000003 16.7425 1.65717 +-5.66031 14.8637 1.64618 +-5.66031 37.332299999999996 1.64618 +-5.5614299999999997 42.946599999999997 1.6242099999999999 +-5.4515599999999997 39.210999999999999 1.6132200000000001 +3.9753400000000001 115.97799999999999 1.72309 +-5.4515599999999997 35.464500000000001 1.6132200000000001 +-4.5286400000000002 35.464500000000001 1.5253300000000001 +3.8325100000000001 140.31399999999999 1.6791400000000001 +-2.28728 35.464500000000001 1.44842 +-1.5181899999999999 35.464500000000001 1.43743 +3.4589500000000002 112.22 1.90987 +-1.5181899999999999 37.332299999999996 1.43743 +-1.2544999999999999 37.332299999999996 1.43743 +-4.5286400000000002 127.206 1.98678 +0.29467500000000002 14.8637 2.0746799999999999 +-0.990811 35.464500000000001 1.43743 +0.29467500000000002 35.464500000000001 1.44842 +0.041973099999999999 37.332299999999996 1.44842 +1.2725200000000001 37.332299999999996 1.4703900000000001 +1.2725200000000001 35.464500000000001 1.4703900000000001 +1.50325 37.332299999999996 1.4813799999999999 +1.50325 41.078800000000001 1.4813799999999999 +1.2725200000000001 42.946599999999997 1.4703900000000001 +-4.7154199999999999 93.498099999999994 1.9758 +-4.8802300000000001 91.630300000000005 1.9648099999999999 +-3.49586 46.693199999999997 2.0417200000000002 +1.2725200000000001 46.693199999999997 1.4703900000000001 +1.50325 48.572000000000003 1.4813799999999999 +1.2725200000000001 52.307600000000001 1.4703900000000001 +1.2725200000000001 50.439799999999998 1.4703900000000001 +1.50325 52.307600000000001 1.4813799999999999 +1.2725200000000001 54.186399999999999 1.4703900000000001 +1.2725200000000001 56.065199999999997 1.4703900000000001 +1.04179 56.065199999999997 1.4594 +2.5360399999999998 140.31399999999999 1.5253300000000001 +1.2725200000000001 57.921999999999997 1.4703900000000001 +1.2725200000000001 59.800800000000002 1.4703900000000001 +3.94238 69.161799999999999 1.8109900000000001 +1.50325 61.668599999999998 1.4813799999999999 +1.50325 65.426199999999994 1.4813799999999999 +1.2725200000000001 65.426199999999994 1.4703900000000001 +1.2725200000000001 67.283000000000001 1.4703900000000001 +1.50325 71.040599999999998 1.4813799999999999 +1.50325 69.161799999999999 1.4813799999999999 +1.2725200000000001 72.9084 1.4703900000000001 +1.2725200000000001 74.787099999999995 1.4703900000000001 +1.50325 78.5227 1.4813799999999999 +2.3492600000000001 110.363 1.99777 +1.2725200000000001 78.5227 1.4703900000000001 +1.2725200000000001 82.269300000000001 1.4703900000000001 +1.50325 82.269300000000001 1.4813799999999999 +1.50325 84.148099999999999 1.4813799999999999 +1.2725200000000001 84.148099999999999 1.4703900000000001 +1.2725200000000001 89.762500000000003 1.4703900000000001 +1.2725200000000001 87.883700000000005 1.4703900000000001 +1.50325 87.883700000000005 1.4813799999999999 +-5.4515599999999997 130.953 1.6132200000000001 +1.2725200000000001 91.630300000000005 1.4703900000000001 +-4.1440999999999999 115.97799999999999 1.50335 +-4.3418599999999996 115.97799999999999 1.51434 +1.2725200000000001 95.376900000000006 1.4703900000000001 +1.2725200000000001 93.498099999999994 1.4703900000000001 +1.2725200000000001 97.244699999999995 1.4703900000000001 +1.04179 99.123500000000007 1.4594 +4.0083000000000002 20.489100000000001 1.7560500000000001 +-5.66031 69.161799999999999 1.8769100000000001 +1.2725200000000001 101.002 1.4703900000000001 +-0.990811 78.5227 2.0746799999999999 +-0.73810900000000002 80.401499999999999 2.0746799999999999 +1.04179 104.738 1.4594 +1.04179 106.60599999999999 1.4594 +1.2725200000000001 104.738 1.4703900000000001 +1.50325 106.60599999999999 1.4813799999999999 +-1.2544999999999999 71.040599999999998 2.0746799999999999 +1.04179 110.363 1.4594 +1.7339800000000001 106.60599999999999 1.4923599999999999 +1.50325 112.22 1.4813799999999999 +1.2725200000000001 112.22 1.4703900000000001 +1.50325 115.97799999999999 1.4813799999999999 +1.2725200000000001 115.97799999999999 1.4703900000000001 +1.50325 119.71299999999999 1.4813799999999999 +1.2725200000000001 123.45999999999999 1.4703900000000001 +1.50325 127.206 1.4813799999999999 +1.04179 130.953 1.4594 +1.50325 129.07400000000001 1.4813799999999999 +2.3492600000000001 67.283000000000001 1.51434 +1.2725200000000001 134.69999999999999 1.4703900000000001 +1.50325 132.821 1.4813799999999999 +1.2725200000000001 136.56700000000001 1.4703900000000001 +1.2725200000000001 138.435 1.4703900000000001 +0.54737800000000003 69.161799999999999 1.44842 +-5.9899199999999997 101.002 1.77803 +1.04179 142.18199999999999 1.4594 +1.2725200000000001 140.31399999999999 1.4703900000000001 +1.2725200000000001 142.18199999999999 1.4703900000000001 +1.7339800000000001 140.31399999999999 1.4923599999999999 +1.50325 142.18199999999999 1.4813799999999999 +1.50325 140.31399999999999 1.4813799999999999 +1.7339800000000001 136.56700000000001 1.4923599999999999 +-2.0345800000000001 97.244699999999995 2.0746799999999999 +3.94238 54.186399999999999 1.71211 +1.50325 130.953 1.4813799999999999 +2.3492600000000001 35.464500000000001 1.51434 +1.7339800000000001 125.339 1.4923599999999999 +0.80008000000000001 44.825400000000002 2.0636899999999998 +1.7339800000000001 119.71299999999999 1.4923599999999999 +1.50325 121.581 1.4813799999999999 +1.7339800000000001 115.97799999999999 1.4923599999999999 +1.7339800000000001 112.22 1.4923599999999999 +3.94238 65.426199999999994 1.8109900000000001 +1.7339800000000001 102.85899999999999 1.4923599999999999 +1.50325 104.738 1.4813799999999999 +-5.5614299999999997 61.668599999999998 1.8878999999999999 +1.50325 101.002 1.4813799999999999 +1.50325 95.376900000000006 1.4813799999999999 +1.7339800000000001 95.376900000000006 1.4923599999999999 +1.7339800000000001 91.630300000000005 1.4923599999999999 +1.7339800000000001 93.498099999999994 1.4923599999999999 +1.50325 91.630300000000005 1.4813799999999999 +1.50325 89.762500000000003 1.4813799999999999 +1.7339800000000001 80.401499999999999 1.4923599999999999 +1.50325 74.787099999999995 1.4813799999999999 +1.7339800000000001 69.161799999999999 1.4923599999999999 +1.7339800000000001 67.283000000000001 1.4923599999999999 +1.7339800000000001 61.668599999999998 1.4923599999999999 +1.50325 59.800800000000002 1.4813799999999999 +1.50325 57.921999999999997 1.4813799999999999 +1.7339800000000001 57.921999999999997 1.4923599999999999 +1.50325 56.065199999999997 1.4813799999999999 +1.50325 54.186399999999999 1.4813799999999999 +1.7339800000000001 54.186399999999999 1.4923599999999999 +1.50325 50.439799999999998 1.4813799999999999 +1.7339800000000001 46.693199999999997 1.4923599999999999 +1.50325 44.825400000000002 1.4813799999999999 +1.7339800000000001 42.946599999999997 1.4923599999999999 +1.50325 42.946599999999997 1.4813799999999999 +1.7339800000000001 39.210999999999999 1.4923599999999999 +1.50325 39.210999999999999 1.4813799999999999 +1.7339800000000001 37.332299999999996 1.4923599999999999 +1.50325 35.464500000000001 1.4813799999999999 +1.7339800000000001 31.7179 1.4923599999999999 +1.50325 31.7179 1.4813799999999999 +1.50325 26.1035 1.4813799999999999 +1.7339800000000001 24.224699999999999 1.4923599999999999 +1.50325 16.7425 1.4813799999999999 +1.7339800000000001 16.7425 1.4923599999999999 +-4.1440999999999999 50.439799999999998 2.0087600000000001 +-4.1440999999999999 52.307600000000001 2.0087600000000001 +1.50325 12.995900000000001 1.4813799999999999 +1.2725200000000001 16.7425 1.4703900000000001 +3.8984299999999998 54.186399999999999 1.8219799999999999 +3.8984299999999998 52.307600000000001 1.8219799999999999 +-0.21073 89.762500000000003 2.0746799999999999 +1.2725200000000001 18.610299999999999 1.4703900000000001 +3.8325100000000001 54.186399999999999 1.6791400000000001 +1.2725200000000001 20.489100000000001 1.4703900000000001 +1.50325 22.3569 1.4813799999999999 +1.2725200000000001 26.1035 1.4703900000000001 +1.50325 27.971299999999999 1.4813799999999999 +1.2725200000000001 31.7179 1.4703900000000001 +1.04179 29.850100000000001 1.4594 +0.80008000000000001 27.971299999999999 1.4594 +1.04179 27.971299999999999 1.4594 +0.80008000000000001 26.1035 1.4594 +1.04179 24.224699999999999 1.4594 +0.54737800000000003 24.224699999999999 1.44842 +0.041973099999999999 24.224699999999999 1.44842 +0.29467500000000002 24.224699999999999 1.44842 +0.041973099999999999 22.3569 1.44842 +-0.47442000000000001 24.224699999999999 1.43743 +-0.21073 24.224699999999999 1.43743 +0.041973099999999999 84.148099999999999 1.44842 +-1.2544999999999999 22.3569 1.43743 +-1.7818799999999999 24.224699999999999 1.43743 +-2.0345800000000001 22.3569 1.44842 +-2.28728 24.224699999999999 1.44842 +-2.7816999999999998 22.3569 1.4594 +-3.2651300000000001 22.3569 1.4703900000000001 +3.0524300000000002 24.224699999999999 1.9428300000000001 +-3.2651300000000001 20.489100000000001 1.4703900000000001 +-3.0234200000000002 18.610299999999999 1.4594 +-3.0234200000000002 14.8637 1.4594 +-2.7816999999999998 46.693199999999997 1.4594 +-3.9353400000000001 20.489100000000001 1.50335 +-4.3418599999999996 22.3569 1.51434 +-5.1878700000000002 29.850100000000001 1.58026 +-5.3197099999999997 129.07400000000001 1.6022400000000001 +-5.3197099999999997 123.45999999999999 1.6022400000000001 +-5.3197099999999997 117.845 1.6022400000000001 +-5.4515599999999997 119.71299999999999 1.6132200000000001 +-5.4515599999999997 115.97799999999999 1.6132200000000001 +-5.3197099999999997 114.099 1.6022400000000001 +-5.3197099999999997 112.22 1.6022400000000001 +-4.3418599999999996 95.376900000000006 1.99777 +-5.3197099999999997 104.738 1.6022400000000001 +-5.4515599999999997 106.60599999999999 1.6132200000000001 +-5.3197099999999997 102.85899999999999 1.6022400000000001 +-5.3197099999999997 101.002 1.6022400000000001 +-5.4515599999999997 99.123500000000007 1.6132200000000001 +-5.3197099999999997 93.498099999999994 1.6022400000000001 +-5.3197099999999997 89.762500000000003 1.6022400000000001 +-5.3197099999999997 87.883700000000005 1.6022400000000001 +-5.4515599999999997 89.762500000000003 1.6132200000000001 +-5.4515599999999997 86.015900000000002 1.6132200000000001 +-5.3197099999999997 84.148099999999999 1.6022400000000001 +-5.4515599999999997 82.269300000000001 1.6132200000000001 +-5.4515599999999997 84.148099999999999 1.6132200000000001 +-5.4515599999999997 78.5227 1.6132200000000001 +-5.4515599999999997 69.161799999999999 1.6132200000000001 +3.1952600000000002 95.376900000000006 1.58026 +-5.1878700000000002 125.339 1.58026 +-5.3197099999999997 59.800800000000002 1.6022400000000001 +-5.4515599999999997 57.921999999999997 1.6132200000000001 +-5.4515599999999997 54.186399999999999 1.6132200000000001 +-5.4515599999999997 48.572000000000003 1.6132200000000001 +-5.3197099999999997 46.693199999999997 1.6022400000000001 +1.2725200000000001 112.22 2.0417200000000002 +-5.3197099999999997 44.825400000000002 1.6022400000000001 +-5.4515599999999997 44.825400000000002 1.6132200000000001 +-5.4515599999999997 41.078800000000001 1.6132200000000001 +1.9427300000000001 71.040599999999998 1.50335 +-5.3197099999999997 37.332299999999996 1.6022400000000001 +-5.3197099999999997 39.210999999999999 1.6022400000000001 +-5.4515599999999997 37.332299999999996 1.6132200000000001 +-5.3197099999999997 35.464500000000001 1.6022400000000001 +-5.4515599999999997 33.585700000000003 1.6132200000000001 +-1.2544999999999999 130.953 2.0746799999999999 +-5.4515599999999997 31.7179 1.6132200000000001 +3.5688200000000001 57.921999999999997 1.6242099999999999 +-5.4515599999999997 26.1035 1.6132200000000001 +-5.3197099999999997 26.1035 1.6022400000000001 +-5.4515599999999997 22.3569 1.6132200000000001 +-5.3197099999999997 22.3569 1.6022400000000001 +-5.3197099999999997 16.7425 1.6022400000000001 +-5.1878700000000002 35.464500000000001 1.58026 +-3.9353400000000001 121.592 1.50335 +-4.8802300000000001 35.464500000000001 1.55829 +-4.1440999999999999 35.464500000000001 1.50335 +-3.9353400000000001 35.464500000000001 1.50335 +-2.7816999999999998 35.464500000000001 1.4594 +-4.5286400000000002 102.85899999999999 1.98678 +-2.53999 35.464500000000001 1.44842 +-2.0345800000000001 35.464500000000001 1.44842 +-1.2544999999999999 33.585700000000003 1.43743 +-0.990811 33.585700000000003 1.43743 +0.041973099999999999 123.45999999999999 1.44842 +0.80008000000000001 33.585700000000003 1.4594 +0.54737800000000003 35.464500000000001 1.44842 +1.04179 33.585700000000003 1.4594 +2.72282 65.426199999999994 1.9758 +0.54737800000000003 31.7179 1.44842 +0.80008000000000001 29.850100000000001 1.4594 +0.54737800000000003 26.1035 1.44842 +0.80008000000000001 24.224699999999999 1.4594 +0.29467500000000002 26.1035 1.44842 +-0.73810900000000002 24.224699999999999 1.43743 +-1.2544999999999999 26.1035 1.43743 +-1.5181899999999999 26.1035 1.43743 +-1.5181899999999999 24.224699999999999 1.43743 +-1.7818799999999999 26.1035 1.43743 +-3.2651300000000001 26.1035 1.4703900000000001 +3.0524300000000002 130.953 1.5692699999999999 +-4.1440999999999999 22.3569 1.50335 +-4.5286400000000002 26.1035 1.5253300000000001 +-5.1878700000000002 33.585700000000003 1.58026 +-5.1878700000000002 31.7179 1.58026 +-5.1878700000000002 24.224699999999999 1.9318500000000001 +-5.0450400000000002 35.464500000000001 1.5692699999999999 +-4.8802300000000001 31.7179 1.55829 +-4.8802300000000001 33.585700000000003 1.55829 +-1.5181899999999999 89.762500000000003 1.43743 +-1.7818799999999999 91.630300000000005 1.43743 +-5.0450400000000002 29.850100000000001 1.5692699999999999 +-4.8802300000000001 29.850100000000001 1.55829 +-4.8802300000000001 27.971299999999999 1.55829 +-4.8802300000000001 26.1035 1.55829 +-4.8802300000000001 24.224699999999999 1.55829 +-4.8802300000000001 22.3569 1.55829 +-4.8802300000000001 20.489100000000001 1.55829 +-4.8802300000000001 16.7425 1.55829 +-4.8802300000000001 18.610299999999999 1.55829 +-5.0450400000000002 16.7425 1.5692699999999999 +-4.7154199999999999 14.8637 1.5472999999999999 +-4.8802300000000001 14.8637 1.55829 +-2.7816999999999998 132.821 2.0636899999999998 +-4.8802300000000001 39.210999999999999 1.55829 +-5.0450400000000002 41.078800000000001 1.5692699999999999 +-4.8802300000000001 42.946599999999997 1.55829 +-4.8802300000000001 41.078800000000001 1.55829 +-5.0450400000000002 46.693199999999997 1.5692699999999999 +-4.8802300000000001 46.693199999999997 1.55829 +-4.8802300000000001 50.439799999999998 1.55829 +-1.5181899999999999 54.186399999999999 1.43743 +-1.5181899999999999 56.065199999999997 1.43743 +-5.0450400000000002 52.307600000000001 1.5692699999999999 +-4.8802300000000001 54.186399999999999 1.55829 +-5.0450400000000002 57.921999999999997 1.5692699999999999 +-5.0450400000000002 67.283000000000001 1.5692699999999999 +-4.8802300000000001 67.283000000000001 1.55829 +-5.0450400000000002 76.654899999999998 1.5692699999999999 +0.80008000000000001 56.065199999999997 1.4594 +-4.8802300000000001 78.5227 1.55829 +-5.0450400000000002 82.269300000000001 1.5692699999999999 +-4.8802300000000001 86.015900000000002 1.55829 +-5.0450400000000002 86.015900000000002 1.5692699999999999 +-5.0450400000000002 89.762500000000003 1.5692699999999999 +-4.8802300000000001 91.630300000000005 1.55829 +-4.8802300000000001 95.376900000000006 1.55829 +3.67869 26.1035 1.64618 +-5.0450400000000002 97.244699999999995 1.5692699999999999 +-5.0450400000000002 101.002 1.5692699999999999 +-4.8802300000000001 108.48399999999999 1.55829 +-5.0450400000000002 112.22 1.5692699999999999 +-4.8802300000000001 119.71299999999999 1.55829 +-5.0450400000000002 119.71299999999999 1.5692699999999999 +-5.0450400000000002 121.592 1.5692699999999999 +-5.0450400000000002 127.206 1.5692699999999999 +-4.8802300000000001 127.206 1.55829 +-4.5286400000000002 54.186399999999999 1.98678 +-5.0450400000000002 129.07400000000001 1.5692699999999999 +-5.0450400000000002 132.821 1.5692699999999999 +-5.0450400000000002 130.953 1.5692699999999999 +-4.8802300000000001 132.821 1.55829 +-4.8802300000000001 136.56700000000001 1.55829 +-5.0450400000000002 140.31399999999999 1.5692699999999999 +3.9973100000000001 33.585700000000003 1.7450699999999999 +1.2725200000000001 106.60599999999999 2.0417200000000002 +1.04179 104.738 2.0527000000000002 +-4.7154199999999999 130.953 1.5472999999999999 +-4.8802300000000001 130.953 1.55829 +-4.8802300000000001 125.339 1.55829 +-4.7154199999999999 115.97799999999999 1.5472999999999999 +-4.7154199999999999 112.22 1.5472999999999999 +-4.7154199999999999 110.363 1.5472999999999999 +-4.8802300000000001 112.22 1.55829 +-4.8802300000000001 110.363 1.55829 +-2.7816999999999998 69.161799999999999 2.0636899999999998 +-4.8802300000000001 106.60599999999999 1.55829 +-4.7154199999999999 89.762500000000003 1.5472999999999999 +-4.8802300000000001 84.148099999999999 1.55829 +-4.7154199999999999 76.654899999999998 1.5472999999999999 +-4.8802300000000001 76.654899999999998 1.55829 +-4.8802300000000001 56.065199999999997 1.55829 +2.8876200000000001 61.668599999999998 1.55829 +-4.8802300000000001 44.825400000000002 1.55829 +-4.5286400000000002 31.7179 1.5253300000000001 +-3.0234200000000002 31.7179 1.4594 +-2.53999 31.7179 1.44842 +-2.7816999999999998 33.585700000000003 1.4594 +-2.0345800000000001 33.585700000000003 1.44842 +-1.7818799999999999 33.585700000000003 1.43743 +-1.5181899999999999 33.585700000000003 1.43743 +-1.7818799999999999 59.800800000000002 1.43743 +-2.0345800000000001 61.668599999999998 1.44842 +-0.47442000000000001 33.585700000000003 1.43743 +-1.5181899999999999 52.307600000000001 1.43743 +2.5360399999999998 12.995900000000001 1.5253300000000001 +-5.1878700000000002 59.800800000000002 1.9318500000000001 +2.72282 57.921999999999997 1.9758 +0.29467500000000002 33.585700000000003 1.44842 +0.29467500000000002 31.7179 1.44842 +0.54737800000000003 29.850100000000001 1.44842 +0.29467500000000002 27.971299999999999 1.44842 +0.041973099999999999 26.1035 1.44842 +-0.21073 27.971299999999999 1.43743 +-0.990811 26.1035 1.43743 +-1.7818799999999999 27.971299999999999 1.43743 +-2.53999 26.1035 1.44842 +-2.7816999999999998 26.1035 1.4594 +-2.7816999999999998 27.971299999999999 1.4594 +-3.0234200000000002 26.1035 1.4594 +-4.3418599999999996 27.971299999999999 1.51434 +-4.3418599999999996 26.1035 1.51434 +-4.7154199999999999 29.850100000000001 1.5472999999999999 +1.50325 72.9084 1.4813799999999999 +-5.9899199999999997 119.71299999999999 1.7450699999999999 +-4.1440999999999999 31.7179 1.50335 +-2.53999 29.850100000000001 1.44842 +-2.7816999999999998 31.7179 1.4594 +-2.28728 29.850100000000001 1.44842 +-2.28728 31.7179 1.44842 +-2.0345800000000001 31.7179 1.44842 +-1.2544999999999999 29.850100000000001 1.43743 +-0.990811 29.850100000000001 1.43743 +0.29467500000000002 110.363 2.0746799999999999 +-0.47442000000000001 29.850100000000001 1.43743 +-0.73810900000000002 31.7179 1.43743 +0.041973099999999999 29.850100000000001 1.44842 +0.041973099999999999 27.971299999999999 1.44842 +-0.73810900000000002 27.971299999999999 1.43743 +-0.990811 27.971299999999999 1.43743 +-1.5181899999999999 27.971299999999999 1.43743 +-2.0345800000000001 29.850100000000001 1.44842 +-2.0345800000000001 27.971299999999999 1.44842 +-2.7816999999999998 29.850100000000001 1.4594 +-3.49586 69.161799999999999 2.0417200000000002 +-3.7155999999999998 67.283000000000001 2.0307300000000001 +-3.0234200000000002 29.850100000000001 1.4594 +-3.2651300000000001 29.850100000000001 1.4703900000000001 +-3.49586 16.7425 1.4813799999999999 +-3.2651300000000001 18.610299999999999 1.4703900000000001 +-3.49586 20.489100000000001 1.4813799999999999 +1.9427300000000001 18.610299999999999 1.50335 +-3.49586 29.850100000000001 1.4813799999999999 +-3.49586 33.585700000000003 1.4813799999999999 +-3.49586 35.464500000000001 1.4813799999999999 +-3.2651300000000001 37.332299999999996 1.4703900000000001 +-3.49586 39.210999999999999 1.4813799999999999 +-3.2651300000000001 41.078800000000001 1.4703900000000001 +-3.49586 41.078800000000001 1.4813799999999999 +-4.8802300000000001 99.123500000000007 1.55829 +-5.0450400000000002 99.123500000000007 1.5692699999999999 +3.9973100000000001 99.123500000000007 1.7450699999999999 +-3.49586 52.307600000000001 1.4813799999999999 +-3.2651300000000001 54.186399999999999 1.4703900000000001 +-3.49586 57.921999999999997 1.4813799999999999 +-3.2651300000000001 57.921999999999997 1.4703900000000001 +-3.49586 67.283000000000001 1.4813799999999999 +-3.2651300000000001 67.283000000000001 1.4703900000000001 +-3.2651300000000001 71.040599999999998 1.4703900000000001 +-3.2651300000000001 76.654899999999998 1.4703900000000001 +-3.49586 76.654899999999998 1.4813799999999999 +-3.49586 80.401499999999999 1.4813799999999999 +-3.2651300000000001 82.269300000000001 1.4703900000000001 +3.94238 46.693199999999997 1.71211 +3.9753400000000001 44.825400000000002 1.72309 +-3.49586 86.015900000000002 1.4813799999999999 +-3.49586 84.148099999999999 1.4813799999999999 +-3.49586 87.883700000000005 1.4813799999999999 +-3.2651300000000001 86.015900000000002 1.4703900000000001 +3.8984299999999998 78.5227 1.8219799999999999 +-3.2651300000000001 91.630300000000005 1.4703900000000001 +-3.49586 95.376900000000006 1.4813799999999999 +-3.2651300000000001 97.244699999999995 1.4703900000000001 +-3.49586 104.738 1.4813799999999999 +-3.2651300000000001 108.48399999999999 1.4703900000000001 +-0.73810900000000002 16.7425 2.0746799999999999 +-3.49586 115.97799999999999 1.4813799999999999 +-3.49586 114.099 1.4813799999999999 +-3.2651300000000001 115.97799999999999 1.4703900000000001 +3.7555999999999998 67.283000000000001 1.85494 +-3.49586 121.592 1.4813799999999999 +-3.49586 127.206 1.4813799999999999 +-4.5286400000000002 130.953 1.98678 +-3.2651300000000001 129.07400000000001 1.4703900000000001 +-3.49586 129.07400000000001 1.4813799999999999 +-3.2651300000000001 130.953 1.4703900000000001 +-3.2651300000000001 132.821 1.4703900000000001 +-3.2651300000000001 136.56700000000001 1.4703900000000001 +-3.49586 136.56700000000001 1.4813799999999999 +-3.49586 134.69999999999999 2.0417200000000002 +4.0083000000000002 86.015900000000002 1.7560500000000001 +-3.2651300000000001 138.435 1.4703900000000001 +-3.9353400000000001 29.850100000000001 1.50335 +-3.9353400000000001 31.7179 1.50335 +2.5360399999999998 108.48399999999999 1.98678 +-3.9353400000000001 33.585700000000003 1.50335 +-3.9353400000000001 37.332299999999996 1.50335 +-3.7155999999999998 44.825400000000002 1.4923599999999999 +-3.9353400000000001 46.693199999999997 1.50335 +-3.9353400000000001 48.572000000000003 1.50335 +-3.7155999999999998 50.439799999999998 1.4923599999999999 +3.8984299999999998 132.821 1.6901299999999999 +2.8876200000000001 140.31399999999999 1.55829 +3.0524300000000002 140.31399999999999 1.5692699999999999 +-3.7155999999999998 52.307600000000001 1.4923599999999999 +3.67869 108.48399999999999 1.8769100000000001 +-3.7155999999999998 56.065199999999997 1.4923599999999999 +-3.9353400000000001 56.065199999999997 1.50335 +-3.9353400000000001 59.800800000000002 1.50335 +-3.7155999999999998 67.283000000000001 1.4923599999999999 +-3.7155999999999998 69.161799999999999 1.4923599999999999 +-3.7155999999999998 74.787099999999995 1.4923599999999999 +-3.7155999999999998 80.401499999999999 1.4923599999999999 +-3.9353400000000001 82.269300000000001 1.50335 +-3.7155999999999998 82.269300000000001 1.4923599999999999 +-3.9353400000000001 84.148099999999999 1.50335 +-0.73810900000000002 97.244699999999995 2.0746799999999999 +-3.7155999999999998 87.883700000000005 1.4923599999999999 +-3.9353400000000001 87.883700000000005 1.50335 +-3.7155999999999998 97.244699999999995 1.4923599999999999 +-3.7155999999999998 99.123500000000007 1.4923599999999999 +-3.9353400000000001 99.123500000000007 1.50335 +-3.9353400000000001 101.002 1.50335 +-3.7155999999999998 101.002 1.4923599999999999 +-3.9353400000000001 102.85899999999999 1.50335 +-3.7155999999999998 104.738 1.4923599999999999 +-3.9353400000000001 104.738 1.50335 +3.5688200000000001 54.186399999999999 1.8878999999999999 +-3.7155999999999998 108.48399999999999 1.4923599999999999 +-3.9353400000000001 112.22 1.50335 +-3.7155999999999998 114.099 1.4923599999999999 +-3.9353400000000001 115.97799999999999 1.50335 +-3.9353400000000001 117.845 1.50335 +-3.7155999999999998 123.45999999999999 1.4923599999999999 +-0.47442000000000001 22.3569 1.43743 +-3.9353400000000001 127.206 1.50335 +-3.7155999999999998 134.69999999999999 1.4923599999999999 +-3.9353400000000001 134.69999999999999 1.50335 +-3.7155999999999998 138.435 1.4923599999999999 +-3.9353400000000001 138.435 1.50335 +-0.990811 61.668599999999998 1.43743 +-3.49586 140.31399999999999 1.4813799999999999 +-3.7155999999999998 142.18199999999999 1.4923599999999999 +-0.47442000000000001 130.953 1.43743 +-0.47442000000000001 132.821 1.43743 +-3.49586 132.821 1.4813799999999999 +-3.49586 134.69999999999999 1.4813799999999999 +-3.49586 130.953 1.4813799999999999 +-3.7155999999999998 132.821 1.4923599999999999 +-4.8802300000000001 57.921999999999997 1.9648099999999999 +-3.7155999999999998 125.339 1.4923599999999999 +-3.49586 125.339 1.4813799999999999 +-2.28728 134.69999999999999 1.44842 +-3.49586 123.45999999999999 1.4813799999999999 +-3.7155999999999998 121.592 1.4923599999999999 +-3.49586 119.71299999999999 1.4813799999999999 +-3.7155999999999998 119.71299999999999 1.4923599999999999 +-3.7155999999999998 115.97799999999999 1.4923599999999999 +-4.1440999999999999 22.3569 2.0087600000000001 +-3.7155999999999998 112.22 1.4923599999999999 +-3.49586 112.22 1.4813799999999999 +-3.7155999999999998 110.363 1.4923599999999999 +2.72282 101.002 1.9758 +-3.49586 110.363 1.4813799999999999 +-3.49586 106.60599999999999 1.4813799999999999 +-3.7155999999999998 106.60599999999999 1.4923599999999999 +-3.7155999999999998 102.85899999999999 1.4923599999999999 +0.54737800000000003 65.426199999999994 1.44842 +-3.49586 99.123500000000007 1.4813799999999999 +-3.7155999999999998 95.376900000000006 1.4923599999999999 +-3.49586 93.498099999999994 1.4813799999999999 +-3.7155999999999998 91.630300000000005 1.4923599999999999 +3.1952600000000002 114.099 1.9318500000000001 +3.8984299999999998 114.099 1.8219799999999999 +3.94238 115.97799999999999 1.8109900000000001 +-3.7155999999999998 76.654899999999998 1.4923599999999999 +-3.7155999999999998 78.5227 1.4923599999999999 +-3.49586 69.161799999999999 1.4813799999999999 +-1.2544999999999999 80.401499999999999 1.43743 +-3.49586 65.426199999999994 1.4813799999999999 +3.94238 106.60599999999999 1.71211 +-3.49586 61.668599999999998 1.4813799999999999 +-3.49586 59.800800000000002 1.4813799999999999 +-3.7155999999999998 59.800800000000002 1.4923599999999999 +-3.7155999999999998 54.186399999999999 1.4923599999999999 +-3.49586 46.693199999999997 1.4813799999999999 +0.041973099999999999 39.210999999999999 1.44842 +-3.7155999999999998 41.078800000000001 1.4923599999999999 +-3.7155999999999998 39.210999999999999 1.4923599999999999 +-3.49586 37.332299999999996 1.4813799999999999 +-3.7155999999999998 37.332299999999996 1.4923599999999999 +-3.49586 26.1035 1.4813799999999999 +3.1952600000000002 33.585700000000003 1.9318500000000001 +-3.7155999999999998 20.489100000000001 1.4923599999999999 +-3.49586 14.8637 1.4813799999999999 +-3.7155999999999998 14.8637 1.4923599999999999 +-3.7155999999999998 18.610299999999999 1.4923599999999999 +-3.7155999999999998 16.7425 1.4923599999999999 +-3.9353400000000001 22.3569 1.50335 +-3.9353400000000001 26.1035 1.50335 +-4.1440999999999999 26.1035 1.50335 +-4.1440999999999999 27.971299999999999 1.50335 +-4.5286400000000002 142.18199999999999 1.5253300000000001 +-4.5286400000000002 140.31399999999999 1.5253300000000001 +-4.3418599999999996 136.56700000000001 1.51434 +-4.3418599999999996 132.821 1.51434 +-4.5286400000000002 132.821 1.5253300000000001 +-4.3418599999999996 130.953 1.51434 +2.72282 63.547400000000003 1.9758 +-4.5286400000000002 130.953 1.5253300000000001 +-4.5286400000000002 127.206 1.5253300000000001 +-4.3418599999999996 123.45999999999999 1.51434 +-4.3418599999999996 121.592 1.51434 +-4.5286400000000002 121.592 1.5253300000000001 +-4.3418599999999996 117.845 1.51434 +-4.3418599999999996 119.71299999999999 1.51434 +-4.5286400000000002 117.845 1.5253300000000001 +-4.3418599999999996 114.099 1.51434 +-4.3418599999999996 112.22 1.51434 +-4.5286400000000002 114.099 1.5253300000000001 +-4.5286400000000002 112.22 1.5253300000000001 +-4.3418599999999996 106.60599999999999 1.51434 +-4.5286400000000002 106.60599999999999 1.5253300000000001 +-4.5286400000000002 102.85899999999999 1.5253300000000001 +-4.3418599999999996 99.123500000000007 1.51434 +-4.3418599999999996 101.002 1.51434 +-4.3418599999999996 95.376900000000006 1.51434 +-4.3418599999999996 87.883700000000005 1.51434 +-4.5286400000000002 87.883700000000005 1.5253300000000001 +-4.5286400000000002 86.015900000000002 1.5253300000000001 +-4.5286400000000002 82.269300000000001 1.5253300000000001 +-4.3418599999999996 82.269300000000001 1.51434 +-4.5286400000000002 80.401499999999999 1.5253300000000001 +-4.3418599999999996 80.401499999999999 1.51434 +-4.5286400000000002 76.654899999999998 1.5253300000000001 +-4.3418599999999996 74.787099999999995 1.51434 +-4.5286400000000002 69.161799999999999 1.5253300000000001 +-4.3418599999999996 67.283000000000001 1.51434 +-5.93499 101.002 1.8109900000000001 +-4.3418599999999996 63.547400000000003 1.51434 +-4.5286400000000002 59.800800000000002 1.5253300000000001 +-4.3418599999999996 59.800800000000002 1.51434 +-4.1440999999999999 91.630300000000005 2.0087600000000001 +-4.3418599999999996 57.921999999999997 1.51434 +3.9973100000000001 95.376900000000006 1.7450699999999999 +-4.5286400000000002 54.186399999999999 1.5253300000000001 +-4.3418599999999996 48.572000000000003 1.51434 +-0.990811 110.363 1.43743 +3.94238 72.9084 1.71211 +3.8984299999999998 74.787099999999995 1.6901299999999999 +0.80008000000000001 117.845 2.0636899999999998 +-4.3418599999999996 93.498099999999994 1.51434 +-4.5286400000000002 41.078800000000001 1.5253300000000001 +-4.3418599999999996 39.210999999999999 1.51434 +-4.5286400000000002 37.332299999999996 1.5253300000000001 +-4.5286400000000002 39.210999999999999 1.5253300000000001 +-4.3418599999999996 35.464500000000001 1.51434 +-5.8251200000000001 59.800800000000002 1.84395 +-5.8251200000000001 57.921999999999997 1.84395 +-4.3418599999999996 29.850100000000001 1.51434 +-4.5286400000000002 27.971299999999999 1.5253300000000001 +-5.93499 16.7425 1.71211 +-4.3418599999999996 24.224699999999999 1.51434 +-4.5286400000000002 18.610299999999999 1.5253300000000001 +-4.5286400000000002 20.489100000000001 1.5253300000000001 +1.7339800000000001 117.845 2.0307300000000001 +-3.9353400000000001 27.971299999999999 1.50335 +-4.7154199999999999 119.71299999999999 1.9758 +-3.0234200000000002 20.489100000000001 1.4594 +1.04179 130.953 2.0527000000000002 +-5.66031 26.1035 1.64618 +-3.0234200000000002 102.85899999999999 1.4594 +2.8876200000000001 54.186399999999999 1.55829 +-2.28728 65.426199999999994 2.0746799999999999 +3.1952600000000002 110.363 1.58026 +-5.1878700000000002 78.5227 1.9318500000000001 +2.72282 127.206 1.9758 +3.1952600000000002 125.339 1.58026 +-3.0234200000000002 101.002 1.4594 +-3.0234200000000002 99.123500000000007 1.4594 +-5.3197099999999997 127.206 1.6022400000000001 +3.3380899999999998 104.738 1.6022400000000001 +-4.1440999999999999 44.825400000000002 1.50335 +-0.21073 18.610299999999999 2.0746799999999999 +-3.7155999999999998 31.7179 1.4923599999999999 +-3.49586 31.7179 1.4813799999999999 +-5.7482100000000003 91.630300000000005 1.65717 +-5.7482100000000003 84.148099999999999 1.65717 +-5.8251200000000001 86.015900000000002 1.6791400000000001 +0.54737800000000003 57.921999999999997 2.0636899999999998 +2.3492600000000001 93.498099999999994 1.99777 +-5.8800499999999998 74.787099999999995 1.8219799999999999 +-5.8251200000000001 76.654899999999998 1.84395 +-5.66031 50.439799999999998 1.64618 +1.50325 14.8637 1.4813799999999999 +1.7339800000000001 12.995900000000001 1.4923599999999999 +-5.7482100000000003 130.953 1.85494 +2.1514899999999999 115.97799999999999 1.50335 +-2.28728 101.002 2.0746799999999999 +-0.47442000000000001 136.56700000000001 2.0746799999999999 +-5.5614299999999997 39.210999999999999 1.8878999999999999 +1.9427300000000001 22.3569 1.50335 +0.54737800000000003 63.547400000000003 2.0636899999999998 +-3.9353400000000001 87.883700000000005 2.0197400000000001 +-5.93499 86.015900000000002 1.71211 +-5.8800499999999998 86.015900000000002 1.6901299999999999 +-4.7154199999999999 26.1035 1.5472999999999999 +-4.3418599999999996 46.693199999999997 1.99777 +-4.1440999999999999 91.630300000000005 1.50335 +3.67869 89.762500000000003 1.64618 +-5.9899199999999997 87.883700000000005 1.7450699999999999 +1.9427300000000001 39.210999999999999 1.50335 +2.1514899999999999 37.332299999999996 1.50335 +-5.7482100000000003 18.610299999999999 1.65717 +-5.9899199999999997 29.850100000000001 1.77803 +-5.9679500000000001 31.7179 1.7890200000000001 +2.3492600000000001 71.040599999999998 1.99777 +0.54737800000000003 41.078800000000001 2.0636899999999998 +-1.7818799999999999 86.015900000000002 1.43743 +-5.3197099999999997 56.065199999999997 1.6022400000000001 +2.1514899999999999 132.821 1.50335 +-0.47442000000000001 89.762500000000003 1.43743 +-5.8251200000000001 63.547400000000003 1.84395 +3.9973100000000001 106.60599999999999 1.7450699999999999 +3.4589500000000002 97.244699999999995 1.6132200000000001 +3.9753400000000001 61.668599999999998 1.7890200000000001 +-3.7155999999999998 129.07400000000001 2.0307300000000001 +1.50325 123.45999999999999 1.4813799999999999 +3.3380899999999998 134.69999999999999 1.92086 +0.041973099999999999 65.426199999999994 2.0746799999999999 +0.041973099999999999 63.547400000000003 2.0746799999999999 +2.72282 78.5227 1.5472999999999999 +1.9427300000000001 33.585700000000003 1.50335 +0.54737800000000003 44.825400000000002 2.0636899999999998 +-4.3418599999999996 27.971299999999999 1.99777 +-3.9353400000000001 84.148099999999999 2.0197400000000001 +-5.1878700000000002 26.1035 1.9318500000000001 +-5.8800499999999998 115.97799999999999 1.6901299999999999 +3.3380899999999998 93.498099999999994 1.92086 +-1.7818799999999999 102.85899999999999 1.43743 +-2.7816999999999998 74.787099999999995 2.0636899999999998 +-0.73810900000000002 95.376900000000006 1.43743 +-3.0234200000000002 33.585700000000003 1.4594 +-3.2651300000000001 35.464500000000001 1.4703900000000001 +2.72282 59.800800000000002 1.5472999999999999 +1.50325 37.332299999999996 2.0417200000000002 +-5.8800499999999998 39.210999999999999 1.8219799999999999 +-4.8802300000000001 80.401499999999999 1.9648099999999999 +1.50325 117.845 1.4813799999999999 +3.67869 41.078800000000001 1.8769100000000001 +3.5688200000000001 39.210999999999999 1.8878999999999999 +3.67869 52.307600000000001 1.8769100000000001 +3.67869 54.186399999999999 1.8769100000000001 +3.8984299999999998 140.31399999999999 1.6901299999999999 +1.2725200000000001 24.224699999999999 1.4703900000000001 +2.3492600000000001 50.439799999999998 1.51434 +0.80008000000000001 93.498099999999994 2.0636899999999998 +3.67869 125.339 1.64618 +-5.7482100000000003 97.244699999999995 1.65717 +-5.5614299999999997 76.654899999999998 1.6242099999999999 +-5.9679500000000001 119.71299999999999 1.72309 +-5.9679500000000001 117.845 1.72309 +0.54737800000000003 56.065199999999997 1.44842 +2.3492600000000001 117.845 1.99777 +3.1952600000000002 59.800800000000002 1.9318500000000001 +3.4589500000000002 95.376900000000006 1.6132200000000001 +-5.9899199999999997 31.7179 1.77803 +-4.1440999999999999 76.654899999999998 1.50335 +-4.3418599999999996 76.654899999999998 1.51434 +-4.1440999999999999 33.585700000000003 2.0087600000000001 +3.8325100000000001 93.498099999999994 1.6791400000000001 +3.3380899999999998 102.85899999999999 1.6022400000000001 +-3.0234200000000002 71.040599999999998 1.4594 +-3.0234200000000002 35.464500000000001 2.0527000000000002 +-5.3197099999999997 80.401499999999999 1.6022400000000001 +3.7555999999999998 56.065199999999997 1.85494 +-3.7155999999999998 127.206 1.4923599999999999 +3.3380899999999998 121.581 1.92086 +3.4589500000000002 121.581 1.90987 +-3.7155999999999998 27.971299999999999 1.4923599999999999 +-1.5181899999999999 132.821 1.43743 +-5.1878700000000002 80.401499999999999 1.58026 +-2.28728 106.60599999999999 2.0746799999999999 +-5.5614299999999997 65.426199999999994 1.8878999999999999 +-4.3418599999999996 125.339 1.99777 +-1.7818799999999999 134.69999999999999 2.0746799999999999 +-1.5181899999999999 134.69999999999999 2.0746799999999999 +-4.3418599999999996 127.206 1.99777 +-5.8800499999999998 123.45999999999999 1.6901299999999999 +4.0083000000000002 89.762500000000003 1.7560500000000001 +-5.5614299999999997 78.5227 1.6242099999999999 +3.67869 78.5227 1.8769100000000001 +-4.1440999999999999 101.002 1.50335 +3.8325100000000001 72.9084 1.84395 +3.8325100000000001 39.210999999999999 1.84395 +-3.49586 138.435 1.4813799999999999 +3.94238 140.31399999999999 1.71211 +4.0083000000000002 136.56700000000001 1.7560500000000001 +3.9973100000000001 136.56700000000001 1.7450699999999999 +0.54737800000000003 78.5227 2.0636899999999998 +1.04179 87.883700000000005 1.4594 +1.2725200000000001 86.015900000000002 1.4703900000000001 +-1.2544999999999999 59.800800000000002 1.43743 +-1.7818799999999999 106.60599999999999 1.43743 +-2.0345800000000001 41.078800000000001 1.44842 +3.3380899999999998 142.18199999999999 1.6022400000000001 +-5.4515599999999997 95.376900000000006 1.6132200000000001 +-5.66031 127.206 1.8769100000000001 +3.7555999999999998 61.668599999999998 1.85494 +3.8325100000000001 61.668599999999998 1.84395 +3.7555999999999998 89.762500000000003 1.85494 +-4.5286400000000002 72.9084 1.5253300000000001 +2.8876200000000001 121.581 1.55829 +-5.9899199999999997 114.099 1.77803 +-5.3197099999999997 101.002 1.92086 +-5.93499 78.5227 1.71211 +3.94238 123.45999999999999 1.8109900000000001 +-1.2544999999999999 130.953 1.43743 +1.50325 27.971299999999999 2.0417200000000002 +-4.1440999999999999 119.71299999999999 2.0087600000000001 +-3.9353400000000001 119.71299999999999 2.0197400000000001 +3.8325100000000001 95.376900000000006 1.6791400000000001 +-5.7482100000000003 33.585700000000003 1.85494 +0.041973099999999999 91.630300000000005 1.44842 +0.041973099999999999 80.401499999999999 2.0746799999999999 +2.5360399999999998 80.401499999999999 1.98678 +0.80008000000000001 57.921999999999997 1.4594 +3.4589500000000002 89.762500000000003 1.6132200000000001 +2.3492600000000001 26.1035 1.51434 +2.1514899999999999 27.971299999999999 1.50335 +1.04179 121.592 1.4594 +3.94238 65.426199999999994 1.71211 +-2.28728 117.845 2.0746799999999999 +3.8984299999999998 35.464500000000001 1.6901299999999999 +1.50325 97.244699999999995 2.0417200000000002 +-5.5614299999999997 52.307600000000001 1.6242099999999999 +-5.4515599999999997 52.307600000000001 1.6132200000000001 +-4.8802300000000001 65.426199999999994 1.55829 +1.50325 72.9084 2.0417200000000002 +-5.9899199999999997 27.971299999999999 1.7450699999999999 +-5.4515599999999997 63.547400000000003 1.6132200000000001 +3.9753400000000001 112.22 1.72309 +-2.28728 26.1035 1.44842 +-3.7155999999999998 140.31399999999999 2.0307300000000001 +-2.0345800000000001 86.015900000000002 1.44842 +-4.8802300000000001 93.498099999999994 1.55829 +2.1514899999999999 54.186399999999999 1.50335 +-0.990811 72.9084 2.0746799999999999 +3.7555999999999998 59.800800000000002 1.85494 +3.5688200000000001 48.572000000000003 1.6242099999999999 +3.5688200000000001 142.18199999999999 1.6242099999999999 +-4.7154199999999999 121.581 1.9758 +-4.8802300000000001 14.8637 1.9648099999999999 +3.9753400000000001 52.307600000000001 1.7890200000000001 +3.9973100000000001 52.307600000000001 1.77803 +2.1514899999999999 59.800800000000002 1.50335 +-4.7154199999999999 65.426199999999994 1.5472999999999999 +3.67869 106.60599999999999 1.64618 +-1.2544999999999999 91.630300000000005 2.0746799999999999 +-0.21073 86.015900000000002 1.43743 +-5.1878700000000002 136.56700000000001 1.9318500000000001 +-2.28728 26.1035 2.0746799999999999 +3.8984299999999998 99.123500000000007 1.6901299999999999 +4.0083000000000002 16.7425 1.7560500000000001 +3.9973100000000001 14.8637 1.77803 +-3.0234200000000002 138.435 1.4594 +2.72282 86.015900000000002 1.9758 +2.8876200000000001 86.015900000000002 1.9648099999999999 +2.5360399999999998 42.946599999999997 1.98678 +-5.93499 132.821 1.71211 +3.7555999999999998 130.953 1.65717 +-2.53999 33.585700000000003 1.44842 +3.94238 80.401499999999999 1.8109900000000001 +-2.28728 44.825400000000002 2.0746799999999999 +3.0524300000000002 59.800800000000002 1.9428300000000001 +3.67869 59.800800000000002 1.64618 +-5.66031 101.002 1.8769100000000001 +2.3492600000000001 104.738 1.99777 +-5.9679500000000001 140.31399999999999 1.72309 +1.04179 26.1035 2.0527000000000002 +-4.8802300000000001 134.69999999999999 1.9648099999999999 +2.72282 121.581 1.9758 +2.5360399999999998 119.71299999999999 1.98678 +-5.9679500000000001 132.821 1.72309 +0.041973099999999999 95.376900000000006 2.0746799999999999 +0.041973099999999999 130.953 2.0746799999999999 +-3.2651300000000001 59.800800000000002 1.4703900000000001 +-1.5181899999999999 97.244699999999995 1.43743 +-5.0450400000000002 106.60599999999999 1.5692699999999999 +1.7339800000000001 134.69999999999999 2.0307300000000001 +3.94238 91.630300000000005 1.71211 +3.9973100000000001 82.269300000000001 1.7450699999999999 +-0.47442000000000001 112.22 2.0746799999999999 +2.1514899999999999 97.244699999999995 2.0087600000000001 +-2.7816999999999998 93.498099999999994 1.4594 +-2.53999 121.592 1.44842 +1.2725200000000001 69.161799999999999 1.4703900000000001 +-5.7482100000000003 121.581 1.85494 +-1.7818799999999999 140.31399999999999 2.0746799999999999 +-3.2651300000000001 127.206 1.4703900000000001 +1.50325 24.224699999999999 2.0417200000000002 +-5.8251200000000001 134.69999999999999 1.6791400000000001 +3.0524300000000002 115.97799999999999 1.9428300000000001 +3.0524300000000002 86.015900000000002 1.9428300000000001 +-0.21073 35.464500000000001 1.43743 +3.9753400000000001 84.148099999999999 1.72309 +3.9753400000000001 87.883700000000005 1.7890200000000001 +2.1514899999999999 112.22 2.0087600000000001 +2.1514899999999999 114.099 2.0087600000000001 +-5.5614299999999997 119.71299999999999 1.6242099999999999 +2.72282 18.610299999999999 1.9758 +3.5688200000000001 106.60599999999999 1.8878999999999999 +2.72282 129.07400000000001 1.5472999999999999 +2.8876200000000001 127.206 1.55829 +-5.9899199999999997 112.22 1.7450699999999999 +-5.1878700000000002 136.56700000000001 1.58026 +-5.0450400000000002 134.69999999999999 1.5692699999999999 +3.0524300000000002 97.244699999999995 1.9428300000000001 +-5.7482100000000003 61.668599999999998 1.85494 +-5.0450400000000002 31.7179 1.5692699999999999 +-5.0450400000000002 33.585700000000003 1.5692699999999999 +-3.9353400000000001 108.48399999999999 1.50335 +-2.53999 24.224699999999999 1.44842 +2.72282 123.45999999999999 1.9758 +2.8876200000000001 125.339 1.9648099999999999 +0.54737800000000003 127.206 2.0636899999999998 +-5.5614299999999997 106.60599999999999 1.6242099999999999 +2.1514899999999999 97.244699999999995 1.50335 +-5.7482100000000003 119.71299999999999 1.65717 +-5.8800499999999998 71.040599999999998 1.6901299999999999 +-5.93499 72.9084 1.71211 +0.29467500000000002 54.186399999999999 1.44842 +1.7339800000000001 127.206 1.4923599999999999 +-5.0450400000000002 130.953 1.9428300000000001 +4.0083000000000002 48.572000000000003 1.7560500000000001 +-5.66031 121.581 1.8769100000000001 +-4.8802300000000001 52.307600000000001 1.55829 +3.8325100000000001 87.883700000000005 1.6791400000000001 +-3.2651300000000001 59.800800000000002 2.0417200000000002 +-3.2651300000000001 57.921999999999997 2.0417200000000002 +-5.7482100000000003 35.464500000000001 1.85494 +2.5360399999999998 22.3569 1.5253300000000001 +1.9427300000000001 74.787099999999995 1.50335 +3.3380899999999998 24.224699999999999 1.92086 +-4.5286400000000002 52.307600000000001 1.5253300000000001 +-5.66031 48.572000000000003 1.64618 +-5.9899199999999997 101.002 1.7450699999999999 +3.0524300000000002 106.60599999999999 1.9428300000000001 +-5.7482100000000003 63.547400000000003 1.85494 +3.7555999999999998 121.581 1.65717 +3.8325100000000001 121.581 1.6791400000000001 +-4.1440999999999999 86.015900000000002 1.50335 +1.2725200000000001 136.56700000000001 2.0417200000000002 +-2.0345800000000001 54.186399999999999 2.0746799999999999 +1.2725200000000001 84.148099999999999 2.0417200000000002 +1.7339800000000001 26.1035 1.4923599999999999 +-0.47442000000000001 44.825400000000002 2.0746799999999999 +-1.2544999999999999 119.71299999999999 1.43743 +-2.0345800000000001 114.099 1.44842 +2.8876200000000001 56.065199999999997 1.9648099999999999 +3.1952600000000002 84.148099999999999 1.9318500000000001 +3.7555999999999998 86.015900000000002 1.65717 +2.5360399999999998 117.845 1.5253300000000001 +-5.8800499999999998 132.821 1.6901299999999999 +-5.66031 80.401499999999999 1.64618 +3.9753400000000001 142.18199999999999 1.72309 +3.3380899999999998 71.040599999999998 1.92086 +3.4589500000000002 72.9084 1.90987 +-0.73810900000000002 140.31399999999999 1.43743 +-0.990811 142.18199999999999 1.43743 +-5.4515599999999997 56.065199999999997 1.6132200000000001 +-2.7816999999999998 134.69999999999999 1.4594 +-3.0234200000000002 136.56700000000001 1.4594 +2.8876200000000001 87.883700000000005 1.55829 +-1.2544999999999999 61.668599999999998 2.0746799999999999 +-3.49586 72.9084 1.4813799999999999 +-2.53999 78.5227 1.44842 +-2.53999 76.654899999999998 1.44842 +2.72282 20.489100000000001 1.9758 +-1.2544999999999999 140.31399999999999 2.0746799999999999 +2.5360399999999998 106.60599999999999 1.5253300000000001 +-4.7154199999999999 117.845 1.9758 +-5.1878700000000002 65.426199999999994 1.58026 +-3.0234200000000002 74.787099999999995 1.4594 +-3.7155999999999998 130.953 2.0307300000000001 +-4.3418599999999996 129.07400000000001 1.51434 +-0.21073 132.821 1.43743 +-4.7154199999999999 89.762500000000003 1.9758 +0.29467500000000002 46.693199999999997 2.0746799999999999 +3.3380899999999998 74.787099999999995 1.92086 +3.8984299999999998 136.56700000000001 1.8219799999999999 +2.72282 104.738 1.9758 +-4.3418599999999996 67.283000000000001 1.99777 +0.041973099999999999 33.585700000000003 1.44842 +-2.0345800000000001 87.883700000000005 1.44842 +-2.28728 89.762500000000003 1.44842 +-5.8800499999999998 71.040599999999998 1.8219799999999999 +-4.1440999999999999 39.210999999999999 1.50335 +0.29467500000000002 71.040599999999998 2.0746799999999999 +0.29467500000000002 72.9084 2.0746799999999999 +3.7555999999999998 114.099 1.65717 +-1.7818799999999999 97.244699999999995 2.0746799999999999 +2.5360399999999998 46.693199999999997 1.98678 +-2.53999 87.883700000000005 1.44842 +-5.8251200000000001 132.821 1.6791400000000001 +0.54737800000000003 42.946599999999997 2.0636899999999998 +-5.93499 24.224699999999999 1.71211 +0.54737800000000003 67.283000000000001 2.0636899999999998 +2.1514899999999999 44.825400000000002 2.0087600000000001 +-5.1878700000000002 76.654899999999998 1.58026 +-4.5286400000000002 14.8637 1.98678 +-5.8251200000000001 108.48399999999999 1.84395 +-5.8251200000000001 110.363 1.84395 +0.29467500000000002 67.283000000000001 2.0746799999999999 +-4.8802300000000001 27.971299999999999 1.9648099999999999 +3.0524300000000002 33.585700000000003 1.9428300000000001 +-3.9353400000000001 24.224699999999999 1.50335 +-5.5614299999999997 54.186399999999999 1.6242099999999999 +1.50325 138.435 1.4813799999999999 +0.041973099999999999 86.015900000000002 1.44842 +3.7555999999999998 134.69999999999999 1.65717 +-0.73810900000000002 48.572000000000003 1.43743 +-0.73810900000000002 46.693199999999997 1.43743 +-5.8251200000000001 136.56700000000001 1.84395 +-5.5614299999999997 89.762500000000003 1.8878999999999999 +-5.66031 108.48399999999999 1.8769100000000001 +-5.93499 20.489100000000001 1.71211 +3.4589500000000002 97.244699999999995 1.90987 +3.4589500000000002 99.123500000000007 1.90987 +2.5360399999999998 134.69999999999999 1.98678 +1.9427300000000001 37.332299999999996 1.50335 +-4.1440999999999999 59.800800000000002 1.50335 +-1.5181899999999999 108.48399999999999 1.43743 +-0.73810900000000002 52.307600000000001 1.43743 +3.3380899999999998 56.065199999999997 1.6022400000000001 +2.5360399999999998 104.738 1.98678 +3.8984299999999998 74.787099999999995 1.8219799999999999 +3.9973100000000001 56.065199999999997 1.77803 +-0.21073 39.210999999999999 1.43743 +1.9427300000000001 102.85899999999999 1.50335 +1.9427300000000001 117.845 1.50335 +-5.9679500000000001 74.787099999999995 1.7890200000000001 +-5.8800499999999998 112.22 1.6901299999999999 +0.54737800000000003 46.693199999999997 2.0636899999999998 +3.67869 63.547400000000003 1.8769100000000001 +-3.9353400000000001 80.401499999999999 1.50335 +-3.9353400000000001 140.31399999999999 1.50335 +-5.0450400000000002 31.7179 1.9428300000000001 +3.8325100000000001 91.630300000000005 1.6791400000000001 +-3.7155999999999998 41.078800000000001 2.0307300000000001 +-1.5181899999999999 102.85899999999999 2.0746799999999999 +2.3492600000000001 57.921999999999997 1.99777 +3.0524300000000002 56.065199999999997 1.5692699999999999 +-4.5286400000000002 104.738 1.98678 +-0.73810900000000002 106.60599999999999 2.0746799999999999 +0.80008000000000001 110.363 2.0636899999999998 +-5.9899199999999997 67.283000000000001 1.77803 +1.7339800000000001 16.7425 2.0307300000000001 +-5.9679500000000001 35.464500000000001 1.72309 +0.54737800000000003 138.435 1.44842 +-0.47442000000000001 29.850100000000001 2.0746799999999999 +-4.7154199999999999 54.186399999999999 1.5472999999999999 +3.1952600000000002 27.971299999999999 1.9318500000000001 +-5.5614299999999997 33.585700000000003 1.6242099999999999 +0.54737800000000003 121.581 2.0636899999999998 +-5.8251200000000001 82.269300000000001 1.84395 +0.80008000000000001 12.995900000000001 2.0636899999999998 +2.72282 82.269300000000001 1.5472999999999999 +-5.8800499999999998 129.07400000000001 1.8219799999999999 +-5.8251200000000001 130.953 1.84395 +-5.1878700000000002 78.5227 1.58026 +-4.8802300000000001 134.69999999999999 1.55829 +-1.5181899999999999 117.845 2.0746799999999999 +2.1514899999999999 12.995900000000001 1.50335 +0.80008000000000001 41.078800000000001 1.4594 +-3.7155999999999998 134.69999999999999 2.0307300000000001 +-2.7816999999999998 123.45999999999999 2.0636899999999998 +-2.53999 125.339 2.0636899999999998 +-5.66031 67.283000000000001 1.64618 +-5.66031 91.630300000000005 1.8769100000000001 +-3.49586 27.971299999999999 1.4813799999999999 +-3.7155999999999998 37.332299999999996 2.0307300000000001 +-0.73810900000000002 86.015900000000002 1.43743 +0.54737800000000003 115.97799999999999 2.0636899999999998 +3.9753400000000001 37.332299999999996 1.72309 +1.7339800000000001 18.610299999999999 2.0307300000000001 +1.50325 18.610299999999999 2.0417200000000002 +3.3380899999999998 123.45999999999999 1.6022400000000001 +-3.7155999999999998 84.148099999999999 2.0307300000000001 +-2.0345800000000001 87.883700000000005 2.0746799999999999 +3.3380899999999998 67.283000000000001 1.92086 +1.9427300000000001 56.065199999999997 1.50335 +3.8984299999999998 138.435 1.8219799999999999 +3.94238 140.31399999999999 1.8109900000000001 +-5.4515599999999997 134.69999999999999 1.6132200000000001 +-4.5286400000000002 87.883700000000005 1.98678 +-0.47442000000000001 37.332299999999996 1.43743 +-1.2544999999999999 114.099 1.43743 +0.54737800000000003 33.585700000000003 1.44842 +2.3492600000000001 114.099 1.99777 +-1.7818799999999999 16.7425 2.0746799999999999 +-5.8251200000000001 140.31399999999999 1.84395 +-5.7482100000000003 142.18199999999999 1.85494 +-5.8251200000000001 39.210999999999999 1.6791400000000001 +-5.66031 87.883700000000005 1.64618 +-5.7482100000000003 65.426199999999994 1.65717 +-5.8251200000000001 65.426199999999994 1.6791400000000001 +-5.9899199999999997 37.332299999999996 1.7450699999999999 +-0.73810900000000002 37.332299999999996 1.43743 +2.8876200000000001 115.97799999999999 1.9648099999999999 +-0.47442000000000001 54.186399999999999 1.43743 +3.0524300000000002 22.3569 1.9428300000000001 +2.8876200000000001 20.489100000000001 1.9648099999999999 +2.5360399999999998 78.5227 1.5253300000000001 +-2.7816999999999998 101.002 2.0636899999999998 +-5.93499 97.244699999999995 1.71211 +-0.73810900000000002 39.210999999999999 1.43743 +-5.3197099999999997 108.48399999999999 1.6022400000000001 +-0.73810900000000002 54.186399999999999 1.43743 +-0.47442000000000001 110.363 2.0746799999999999 +-5.9679500000000001 86.015900000000002 1.72309 +2.1514899999999999 91.630300000000005 1.50335 +-3.2651300000000001 48.572000000000003 2.0417200000000002 +1.9427300000000001 97.244699999999995 1.50335 +-1.2544999999999999 16.7425 1.43743 +-2.7816999999999998 108.48399999999999 1.4594 +-1.7818799999999999 101.002 1.43743 +-5.0450400000000002 108.48399999999999 1.5692699999999999 +-2.28728 41.078800000000001 1.44842 +-2.53999 102.85899999999999 2.0636899999999998 +-2.28728 104.738 2.0746799999999999 +-5.93499 130.953 1.8109900000000001 +0.80008000000000001 130.953 1.4594 +3.5688200000000001 67.283000000000001 1.8878999999999999 +-4.3418599999999996 57.921999999999997 1.99777 +4.0083000000000002 78.5227 1.7560500000000001 +-1.7818799999999999 89.762500000000003 2.0746799999999999 +-5.9899199999999997 42.946599999999997 1.7450699999999999 +3.5688200000000001 115.97799999999999 1.6242099999999999 +3.8984299999999998 69.161799999999999 1.6901299999999999 +3.8325100000000001 86.015900000000002 1.84395 +-5.4515599999999997 102.85899999999999 1.6132200000000001 +-5.0450400000000002 101.002 1.9428300000000001 +3.4589500000000002 99.123500000000007 1.6132200000000001 +-0.21073 110.363 2.0746799999999999 +-0.47442000000000001 86.015900000000002 1.43743 +1.7339800000000001 121.581 1.4923599999999999 +1.7339800000000001 123.45999999999999 1.4923599999999999 +-4.7154199999999999 114.099 1.5472999999999999 +-0.73810900000000002 33.585700000000003 1.43743 +3.3380899999999998 80.401499999999999 1.92086 +3.8325100000000001 48.572000000000003 1.84395 +-0.47442000000000001 99.123500000000007 2.0746799999999999 +2.5360399999999998 29.850100000000001 1.5253300000000001 +2.72282 95.376900000000006 1.9758 +3.5688200000000001 129.07400000000001 1.8878999999999999 +-3.0234200000000002 130.953 2.0527000000000002 +-2.7816999999999998 130.953 2.0636899999999998 +-5.5614299999999997 95.376900000000006 1.8878999999999999 +-5.4515599999999997 46.693199999999997 1.90987 +-1.7818799999999999 48.572000000000003 1.43743 +2.1514899999999999 136.56700000000001 2.0087600000000001 +-5.9899199999999997 72.9084 1.77803 +-5.9899199999999997 74.787099999999995 1.77803 +-0.21073 132.821 2.0746799999999999 +-2.28728 67.283000000000001 2.0746799999999999 +-5.3197099999999997 35.464500000000001 1.92086 +3.0524300000000002 78.5227 1.5692699999999999 +-1.7818799999999999 142.18199999999999 1.43743 +-2.7816999999999998 91.630300000000005 2.0636899999999998 +-4.8802300000000001 84.148099999999999 1.9648099999999999 +-5.5614299999999997 52.307600000000001 1.8878999999999999 +-5.9899199999999997 72.9084 1.7450699999999999 +2.72282 89.762500000000003 1.5472999999999999 +-3.2651300000000001 50.439799999999998 1.4703900000000001 +-3.2651300000000001 14.8637 1.4703900000000001 +-5.9679500000000001 91.630300000000005 1.72309 +-4.7154199999999999 29.850100000000001 1.9758 +2.8876200000000001 18.610299999999999 1.9648099999999999 +-4.8802300000000001 114.099 1.55829 +3.7555999999999998 67.283000000000001 1.65717 +-3.7155999999999998 71.040599999999998 1.4923599999999999 +-3.2651300000000001 101.002 1.4703900000000001 +-3.7155999999999998 93.498099999999994 2.0307300000000001 +-5.8800499999999998 78.5227 1.8219799999999999 +-5.8251200000000001 80.401499999999999 1.84395 +3.0524300000000002 27.971299999999999 1.5692699999999999 +2.1514899999999999 63.547400000000003 2.0087600000000001 +-2.28728 52.307600000000001 2.0746799999999999 +-4.5286400000000002 95.376900000000006 1.5253300000000001 +4.0083000000000002 46.693199999999997 1.7560500000000001 +3.0524300000000002 18.610299999999999 1.9428300000000001 +2.8876200000000001 16.7425 1.9648099999999999 +2.1514899999999999 42.946599999999997 2.0087600000000001 +-0.21073 65.426199999999994 1.43743 +-0.47442000000000001 65.426199999999994 1.43743 +2.5360399999999998 136.56700000000001 1.98678 +2.5360399999999998 138.435 1.98678 +3.5688200000000001 84.148099999999999 1.8878999999999999 +-2.0345800000000001 26.1035 2.0746799999999999 +-2.53999 95.376900000000006 2.0636899999999998 +-2.53999 95.376900000000006 1.44842 +0.80008000000000001 20.489100000000001 1.4594 +-1.2544999999999999 95.376900000000006 1.43743 +-1.2544999999999999 93.498099999999994 1.43743 +0.041973099999999999 102.85899999999999 1.44842 +-5.93499 41.078800000000001 1.71211 +-5.0450400000000002 48.572000000000003 1.5692699999999999 +3.8325100000000001 20.489100000000001 1.84395 +-2.0345800000000001 86.015900000000002 2.0746799999999999 +1.04179 12.995900000000001 2.0527000000000002 +1.7339800000000001 18.610299999999999 1.4923599999999999 +-4.5286400000000002 44.825400000000002 1.98678 +-2.28728 106.60599999999999 1.44842 +-4.3418599999999996 20.489100000000001 1.51434 +3.94238 76.654899999999998 1.8109900000000001 +0.54737800000000003 37.332299999999996 2.0636899999999998 +2.72282 71.040599999999998 1.5472999999999999 +-5.1878700000000002 132.821 1.9318500000000001 +3.8325100000000001 127.206 1.84395 +-1.2544999999999999 18.610299999999999 1.43743 +1.50325 67.283000000000001 2.0417200000000002 +-5.93499 54.186399999999999 1.8109900000000001 +-4.8802300000000001 29.850100000000001 1.9648099999999999 +2.3492600000000001 61.668599999999998 1.99777 +-3.49586 114.099 2.0417200000000002 +-0.47442000000000001 112.22 1.43743 +2.5360399999999998 52.307600000000001 1.98678 +0.80008000000000001 22.3569 1.4594 +-0.47442000000000001 115.97799999999999 1.43743 +3.9753400000000001 87.883700000000005 1.72309 +3.94238 89.762500000000003 1.71211 +-2.0345800000000001 110.363 2.0746799999999999 +1.04179 54.186399999999999 2.0527000000000002 +3.5688200000000001 138.435 1.6242099999999999 +1.9427300000000001 54.186399999999999 2.0197400000000001 +-1.5181899999999999 136.56700000000001 1.43743 +-4.5286400000000002 44.825400000000002 1.5253300000000001 +-5.93499 115.97799999999999 1.71211 +-5.3197099999999997 33.585700000000003 1.6022400000000001 +-4.7154199999999999 27.971299999999999 1.5472999999999999 +0.041973099999999999 44.825400000000002 1.44842 +-2.0345800000000001 136.56700000000001 2.0746799999999999 +3.94238 80.401499999999999 1.71211 +-4.5286400000000002 18.610299999999999 1.98678 +-1.5181899999999999 72.9084 2.0746799999999999 +-1.5181899999999999 74.787099999999995 2.0746799999999999 +2.3492600000000001 112.22 1.99777 +-4.8802300000000001 33.585700000000003 1.9648099999999999 +3.3380899999999998 29.850100000000001 1.6022400000000001 +-1.5181899999999999 71.040599999999998 2.0746799999999999 +2.1514899999999999 27.971299999999999 2.0087600000000001 +-0.47442000000000001 56.065199999999997 2.0746799999999999 +-0.47442000000000001 129.07400000000001 1.43743 +-4.7154199999999999 67.283000000000001 1.5472999999999999 +-4.8802300000000001 69.161799999999999 1.55829 +1.7339800000000001 104.738 1.4923599999999999 +-4.1440999999999999 123.45999999999999 1.50335 +-2.7816999999999998 65.426199999999994 1.4594 +-4.5286400000000002 24.224699999999999 1.5253300000000001 +3.5688200000000001 29.850100000000001 1.8878999999999999 +3.5688200000000001 31.7179 1.8878999999999999 +-0.73810900000000002 26.1035 1.43743 +-5.0450400000000002 44.825400000000002 1.9428300000000001 +-3.7155999999999998 136.56700000000001 1.4923599999999999 +-5.8251200000000001 46.693199999999997 1.84395 +2.3492600000000001 115.97799999999999 1.51434 +-4.8802300000000001 41.078800000000001 1.9648099999999999 +-3.9353400000000001 121.581 2.0197400000000001 +3.1952600000000002 87.883700000000005 1.9318500000000001 +-2.7816999999999998 108.48399999999999 2.0636899999999998 +-3.7155999999999998 140.31399999999999 1.4923599999999999 +-5.0450400000000002 39.210999999999999 1.5692699999999999 +-5.7482100000000003 46.693199999999997 1.85494 +1.04179 41.078800000000001 1.4594 +1.04179 39.210999999999999 1.4594 +3.67869 27.971299999999999 1.64618 +1.04179 52.307600000000001 2.0527000000000002 +-4.3418599999999996 29.850100000000001 1.99777 +-2.28728 119.71299999999999 1.44842 +3.0524300000000002 87.883700000000005 1.9428300000000001 +3.8984299999999998 112.22 1.8219799999999999 +-5.8800499999999998 102.85899999999999 1.8219799999999999 +-3.9353400000000001 78.5227 1.50335 +-5.7482100000000003 44.825400000000002 1.85494 +-5.7482100000000003 74.787099999999995 1.85494 +1.7339800000000001 39.210999999999999 2.0307300000000001 +-4.7154199999999999 140.31399999999999 1.5472999999999999 +-4.8802300000000001 142.18199999999999 1.55829 +0.54737800000000003 20.489100000000001 1.44842 +-5.93499 84.148099999999999 1.71211 +1.7339800000000001 80.401499999999999 2.0307300000000001 +-5.8251200000000001 14.8637 1.6791400000000001 +-1.2544999999999999 76.654899999999998 2.0746799999999999 +-0.990811 76.654899999999998 2.0746799999999999 +3.4589500000000002 115.97799999999999 1.90987 +3.4589500000000002 117.845 1.90987 +2.72282 112.22 1.5472999999999999 +-5.0450400000000002 74.787099999999995 1.9428300000000001 +0.041973099999999999 132.821 1.44842 +-2.28728 123.45999999999999 1.44842 +-2.53999 123.45999999999999 1.44842 +3.9753400000000001 110.363 1.7890200000000001 +-4.5286400000000002 91.630300000000005 1.5253300000000001 +-4.5286400000000002 93.498099999999994 1.5253300000000001 +-2.0345800000000001 24.224699999999999 1.44842 +-5.5614299999999997 86.015900000000002 1.6242099999999999 +-5.7482100000000003 69.161799999999999 1.65717 +3.0524300000000002 102.85899999999999 1.5692699999999999 +2.72282 29.850100000000001 1.5472999999999999 +-5.8251200000000001 117.845 1.6791400000000001 +-1.2544999999999999 101.002 1.43743 +-5.1878700000000002 46.693199999999997 1.58026 +0.29467500000000002 125.339 1.44842 +3.67869 110.363 1.64618 +3.5688200000000001 112.22 1.6242099999999999 +-5.5614299999999997 101.002 1.6242099999999999 +-1.2544999999999999 99.123500000000007 2.0746799999999999 +-0.73810900000000002 63.547400000000003 1.43743 +-4.1440999999999999 89.762500000000003 1.50335 +-5.9899199999999997 136.56700000000001 1.7450699999999999 +-5.9899199999999997 138.435 1.77803 +-5.5614299999999997 24.224699999999999 1.6242099999999999 +1.2725200000000001 127.206 2.0417200000000002 +3.3380899999999998 140.31399999999999 1.92086 +-2.0345800000000001 65.426199999999994 2.0746799999999999 +-2.7816999999999998 112.22 2.0636899999999998 +-2.53999 114.099 2.0636899999999998 +-1.2544999999999999 82.269300000000001 2.0746799999999999 +-1.2544999999999999 84.148099999999999 2.0746799999999999 +3.5688200000000001 33.585700000000003 1.8878999999999999 +-2.0345800000000001 16.7425 2.0746799999999999 +3.8325100000000001 123.45999999999999 1.6791400000000001 +3.7555999999999998 125.339 1.65717 +-4.5286400000000002 67.283000000000001 1.5253300000000001 +2.8876200000000001 119.71299999999999 1.9648099999999999 +3.1952600000000002 119.71299999999999 1.9318500000000001 +3.8984299999999998 69.161799999999999 1.8219799999999999 +1.50325 24.224699999999999 1.4813799999999999 +-1.5181899999999999 142.18199999999999 1.43743 +0.29467500000000002 84.148099999999999 1.44842 +-1.5181899999999999 112.22 1.43743 +3.9753400000000001 61.668599999999998 1.72309 +-5.66031 129.07400000000001 1.64618 +3.1952600000000002 104.738 1.58026 +0.041973099999999999 31.7179 2.0746799999999999 +-4.1440999999999999 29.850100000000001 1.50335 +-5.8251200000000001 125.339 1.84395 +4.0083000000000002 52.307600000000001 1.7560500000000001 +0.29467500000000002 41.078800000000001 1.44842 +-1.2544999999999999 102.85899999999999 2.0746799999999999 +-0.21073 108.48399999999999 1.43743 +3.9973100000000001 69.161799999999999 1.77803 +-5.5614299999999997 61.668599999999998 1.6242099999999999 +2.72282 63.547400000000003 1.5472999999999999 +-4.8802300000000001 97.244699999999995 1.55829 +2.8876200000000001 112.22 1.9648099999999999 +2.5360399999999998 18.610299999999999 1.5253300000000001 +-2.0345800000000001 78.5227 1.44842 +3.8325100000000001 129.07400000000001 1.84395 +-0.47442000000000001 114.099 2.0746799999999999 +-5.8800499999999998 91.630300000000005 1.6901299999999999 +0.041973099999999999 114.099 2.0746799999999999 +0.041973099999999999 115.97799999999999 2.0746799999999999 +-2.7816999999999998 76.654899999999998 2.0636899999999998 +2.3492600000000001 130.953 1.51434 +-0.47442000000000001 27.971299999999999 1.43743 +3.67869 114.099 1.64618 +1.7339800000000001 117.845 1.4923599999999999 +-5.3197099999999997 33.585700000000003 1.92086 +-1.5181899999999999 91.630300000000005 1.43743 +3.1952600000000002 115.97799999999999 1.58026 +-3.2651300000000001 33.585700000000003 2.0417200000000002 +-0.21073 95.376900000000006 2.0746799999999999 +3.9973100000000001 138.435 1.7450699999999999 +2.72282 46.693199999999997 1.9758 +3.3380899999999998 117.845 1.92086 +3.4589500000000002 69.161799999999999 1.90987 +-5.1878700000000002 82.269300000000001 1.9318500000000001 +-2.28728 29.850100000000001 2.0746799999999999 +-2.53999 29.850100000000001 2.0636899999999998 +-2.28728 108.48399999999999 2.0746799999999999 +3.67869 12.995900000000001 1.64618 +0.29467500000000002 127.206 2.0636899999999998 +-5.5614299999999997 117.845 1.6242099999999999 +2.1514899999999999 65.426199999999994 2.0087600000000001 +-2.53999 27.971299999999999 1.44842 +-2.7816999999999998 57.921999999999997 2.0636899999999998 +-1.7818799999999999 97.244699999999995 1.43743 +-4.5286400000000002 104.738 1.5253300000000001 +3.67869 130.953 1.8769100000000001 +-2.53999 41.078800000000001 2.0636899999999998 +3.9973100000000001 87.883700000000005 1.77803 +3.1952600000000002 54.186399999999999 1.58026 +-4.5286400000000002 14.8637 1.5253300000000001 +-5.9899199999999997 84.148099999999999 1.7450699999999999 +1.2725200000000001 76.654899999999998 1.4703900000000001 +2.5360399999999998 65.426199999999994 1.5253300000000001 +-5.7482100000000003 82.269300000000001 1.65717 +-5.93499 87.883700000000005 1.71211 +1.2725200000000001 20.489100000000001 2.0417200000000002 +1.04179 18.610299999999999 2.0527000000000002 +3.67869 61.668599999999998 1.64618 +-2.7816999999999998 56.065199999999997 1.4594 +1.2725200000000001 48.572000000000003 1.4703900000000001 +1.04179 48.572000000000003 1.4594 +-5.8251200000000001 71.040599999999998 1.6791400000000001 +-5.1878700000000002 44.825400000000002 1.9318500000000001 +-2.28728 27.971299999999999 1.44842 +-5.66031 102.85899999999999 1.8769100000000001 +-5.5614299999999997 102.85899999999999 1.8878999999999999 +-3.49586 123.45999999999999 2.0417200000000002 +-3.2651300000000001 125.339 2.0417200000000002 +3.4589500000000002 134.69999999999999 1.89889 +1.50325 134.69999999999999 1.4813799999999999 +3.4589500000000002 59.800800000000002 1.6132200000000001 +3.5688200000000001 59.800800000000002 1.6242099999999999 +3.7555999999999998 33.585700000000003 1.65717 +-5.8251200000000001 84.148099999999999 1.6791400000000001 +-0.21073 106.60599999999999 1.43743 +-0.47442000000000001 108.48399999999999 1.43743 +-3.0234200000000002 59.800800000000002 1.4594 +-3.0234200000000002 61.668599999999998 1.4594 +-4.3418599999999996 123.45999999999999 1.99777 +3.94238 50.439799999999998 1.71211 +-5.4515599999999997 104.738 1.90987 +-5.0450400000000002 110.363 1.9428300000000001 +-5.0450400000000002 112.22 1.9428300000000001 +2.72282 119.71299999999999 1.9758 +2.72282 117.845 1.9758 +-5.1878700000000002 48.572000000000003 1.58026 +-1.7818799999999999 54.186399999999999 2.0746799999999999 +-2.28728 31.7179 2.0746799999999999 +-5.4515599999999997 142.18199999999999 1.90987 +0.29467500000000002 101.002 1.44842 +-3.49586 97.244699999999995 1.4813799999999999 +-1.2544999999999999 72.9084 1.43743 +-5.3197099999999997 18.610299999999999 1.92086 +3.8984299999999998 52.307600000000001 1.6901299999999999 +2.3492600000000001 87.883700000000005 1.99777 +3.7555999999999998 87.883700000000005 1.85494 +3.8984299999999998 84.148099999999999 1.8219799999999999 +1.50325 26.1035 2.0417200000000002 +3.9753400000000001 59.800800000000002 1.7890200000000001 +3.9973100000000001 59.800800000000002 1.77803 +3.9973100000000001 59.800800000000002 1.7450699999999999 +2.8876200000000001 115.97799999999999 1.55829 +3.0524300000000002 115.97799999999999 1.5692699999999999 +3.9753400000000001 142.18199999999999 1.7890200000000001 +-1.7818799999999999 54.186399999999999 1.43743 +-2.0345800000000001 54.186399999999999 1.44842 +-5.1878700000000002 112.22 1.9318500000000001 +-3.2651300000000001 82.269300000000001 2.0417200000000002 +2.8876200000000001 27.971299999999999 1.9648099999999999 +3.8984299999999998 35.464500000000001 1.8219799999999999 +-0.73810900000000002 35.464500000000001 1.43743 +3.8984299999999998 89.762500000000003 1.6901299999999999 +3.8325100000000001 89.762500000000003 1.6791400000000001 +-5.9899199999999997 26.1035 1.7450699999999999 +1.04179 69.161799999999999 1.4594 +0.80008000000000001 78.5227 2.0636899999999998 +-4.7154199999999999 35.464500000000001 1.5472999999999999 +-2.53999 71.040599999999998 1.44842 +-0.21073 95.376900000000006 1.43743 +-0.47442000000000001 97.244699999999995 1.43743 +-2.7816999999999998 24.224699999999999 1.4594 +-4.7154199999999999 82.269300000000001 1.5472999999999999 +3.3380899999999998 97.244699999999995 1.6022400000000001 +-5.3197099999999997 121.581 1.92086 +-0.990811 138.435 2.0746799999999999 +-0.73810900000000002 140.31399999999999 2.0746799999999999 +-0.21073 56.065199999999997 1.43743 +-3.7155999999999998 129.07400000000001 1.4923599999999999 +-4.7154199999999999 108.48399999999999 1.9758 +3.4589500000000002 108.48399999999999 1.6132200000000001 +3.5688200000000001 106.60599999999999 1.6242099999999999 +-4.3418599999999996 14.8637 1.99777 +-4.1440999999999999 134.69999999999999 2.0087600000000001 +-5.4515599999999997 142.18199999999999 1.6132200000000001 +-1.5181899999999999 138.435 1.43743 +-4.3418599999999996 54.186399999999999 1.51434 +1.04179 93.498099999999994 1.4594 +-5.4515599999999997 104.738 1.6132200000000001 +2.5360399999999998 71.040599999999998 1.98678 +-0.47442000000000001 57.921999999999997 2.0746799999999999 +-5.8800499999999998 104.738 1.8219799999999999 +-5.5614299999999997 57.921999999999997 1.8878999999999999 +-5.8800499999999998 48.572000000000003 1.6901299999999999 +1.2725200000000001 115.97799999999999 2.0417200000000002 +2.1514899999999999 72.9084 1.50335 +4.0083000000000002 102.85899999999999 1.7560500000000001 +3.4589500000000002 35.464500000000001 1.90987 +-1.5181899999999999 123.45999999999999 1.43743 +-1.7818799999999999 125.339 1.43743 +0.29467500000000002 80.401499999999999 2.0746799999999999 +-5.93499 119.71299999999999 1.8109900000000001 +-4.7154199999999999 67.283000000000001 1.9758 +-3.7155999999999998 117.845 1.4923599999999999 +-0.47442000000000001 82.269300000000001 2.0746799999999999 +-5.93499 110.363 1.71211 +3.94238 93.498099999999994 1.71211 +-1.2544999999999999 121.581 2.0746799999999999 +0.54737800000000003 69.161799999999999 2.0636899999999998 +2.3492600000000001 33.585700000000003 1.51434 +-0.990811 102.85899999999999 1.43743 +2.8876200000000001 130.953 1.9648099999999999 +-5.8251200000000001 65.426199999999994 1.84395 +0.041973099999999999 115.97799999999999 1.44842 +-3.2651300000000001 27.971299999999999 1.4703900000000001 +1.04179 123.45999999999999 2.0527000000000002 +1.2725200000000001 76.654899999999998 2.0417200000000002 +1.50325 78.5227 2.0417200000000002 +2.72282 112.22 1.9758 +2.8876200000000001 114.099 1.9648099999999999 +-0.990811 31.7179 1.43743 +-0.990811 50.439799999999998 1.43743 +-4.8802300000000001 117.845 1.55829 +-5.93499 102.85899999999999 1.71211 +-5.7482100000000003 69.161799999999999 1.85494 +1.50325 76.654899999999998 1.4813799999999999 +1.7339800000000001 74.787099999999995 1.4923599999999999 +2.1514899999999999 41.078800000000001 1.50335 +-0.21073 117.845 2.0746799999999999 +3.94238 108.48399999999999 1.71211 +3.9753400000000001 106.60599999999999 1.72309 +3.3380899999999998 117.845 1.6022400000000001 +-2.53999 37.332299999999996 2.0636899999999998 +1.50325 57.921999999999997 2.0417200000000002 +-3.9353400000000001 41.078800000000001 1.50335 +-1.7818799999999999 33.585700000000003 2.0746799999999999 +-5.9899199999999997 93.498099999999994 1.77803 +-0.73810900000000002 136.56700000000001 1.43743 +1.7339800000000001 74.787099999999995 2.0307300000000001 +-0.73810900000000002 91.630300000000005 1.43743 +-5.4515599999999997 29.850100000000001 1.6132200000000001 +0.041973099999999999 132.821 2.0746799999999999 +-5.9679500000000001 130.953 1.72309 +-5.4515599999999997 78.5227 1.90987 +-5.8800499999999998 27.971299999999999 1.8219799999999999 +3.3380899999999998 44.825400000000002 1.6022400000000001 +-1.2544999999999999 22.3569 2.0746799999999999 +3.3380899999999998 72.9084 1.92086 +-5.3197099999999997 29.850100000000001 1.92086 +-5.0450400000000002 37.332299999999996 1.5692699999999999 +-5.3197099999999997 50.439799999999998 1.6022400000000001 +-2.0345800000000001 99.123500000000007 1.44842 +-2.0345800000000001 76.654899999999998 1.44842 +0.80008000000000001 119.71299999999999 2.0636899999999998 +-5.8800499999999998 84.148099999999999 1.6901299999999999 +-2.0345800000000001 125.339 1.44842 +0.29467500000000002 114.099 1.44842 +-2.0345800000000001 123.45999999999999 2.0746799999999999 +-3.7155999999999998 78.5227 2.0307300000000001 +-5.8800499999999998 41.078800000000001 1.6901299999999999 +-5.8800499999999998 42.946599999999997 1.6901299999999999 +3.0524300000000002 101.002 1.9428300000000001 +2.5360399999999998 50.439799999999998 1.5253300000000001 +3.7555999999999998 80.401499999999999 1.65717 +3.67869 80.401499999999999 1.64618 +3.5688200000000001 132.821 1.8878999999999999 +3.0524300000000002 119.71299999999999 1.5692699999999999 +3.1952600000000002 119.71299999999999 1.58026 +1.04179 76.654899999999998 1.4594 +-4.1440999999999999 112.22 2.0087600000000001 +-3.9353400000000001 114.099 2.0197400000000001 +3.9973100000000001 136.56700000000001 1.77803 +-4.1440999999999999 110.363 2.0087600000000001 +-5.1878700000000002 108.48399999999999 1.58026 +-1.5181899999999999 138.435 2.0746799999999999 +0.041973099999999999 110.363 2.0746799999999999 +-4.5286400000000002 46.693199999999997 1.98678 +-3.7155999999999998 35.464500000000001 1.4923599999999999 +-1.7818799999999999 95.376900000000006 1.43743 +-5.66031 48.572000000000003 1.8769100000000001 +2.72282 99.123500000000007 1.5472999999999999 +-0.73810900000000002 16.7425 1.43743 +-4.1440999999999999 86.015900000000002 2.0087600000000001 +-3.0234200000000002 97.244699999999995 1.4594 +-4.7154199999999999 117.845 1.5472999999999999 +-5.4515599999999997 33.585700000000003 1.90987 +-4.7154199999999999 57.921999999999997 1.5472999999999999 +-1.7818799999999999 44.825400000000002 1.43743 +3.9753400000000001 127.206 1.72309 +-5.93499 140.31399999999999 1.71211 +-5.9679500000000001 142.18199999999999 1.72309 +-4.5286400000000002 110.363 1.98678 +1.9427300000000001 97.244699999999995 2.0197400000000001 +1.7339800000000001 46.693199999999997 2.0307300000000001 +2.1514899999999999 78.5227 2.0087600000000001 +3.9973100000000001 57.921999999999997 1.7450699999999999 +-5.8800499999999998 39.210999999999999 1.6901299999999999 +2.72282 44.825400000000002 1.9758 +2.8876200000000001 74.787099999999995 1.9648099999999999 +-3.0234200000000002 56.065199999999997 1.4594 +-3.2651300000000001 56.065199999999997 1.4703900000000001 +1.2725200000000001 119.71299999999999 1.4703900000000001 +-5.3197099999999997 130.953 1.6022400000000001 +-5.4515599999999997 82.269300000000001 1.90987 +-5.7482100000000003 115.97799999999999 1.65717 +0.041973099999999999 102.85899999999999 2.0746799999999999 +0.29467500000000002 104.738 2.0746799999999999 +-5.93499 80.401499999999999 1.8109900000000001 +3.4589500000000002 112.22 1.6132200000000001 +0.041973099999999999 37.332299999999996 2.0746799999999999 +-4.8802300000000001 101.002 1.9648099999999999 +3.94238 14.8637 1.71211 +-0.73810900000000002 42.946599999999997 1.43743 +-5.5614299999999997 91.630300000000005 1.8878999999999999 +1.2725200000000001 33.585700000000003 1.4703900000000001 +-2.0345800000000001 74.787099999999995 2.0746799999999999 +-5.9679500000000001 123.45999999999999 1.72309 +1.04179 67.283000000000001 1.4594 +4.0083000000000002 91.630300000000005 1.7560500000000001 +-2.53999 130.953 1.44842 +-4.1440999999999999 130.953 2.0087600000000001 +-3.9353400000000001 130.953 2.0197400000000001 +-4.1440999999999999 89.762500000000003 2.0087600000000001 +-1.7818799999999999 22.3569 1.43743 +-0.47442000000000001 140.31399999999999 2.0746799999999999 +3.4589500000000002 33.585700000000003 1.90987 +3.3380899999999998 33.585700000000003 1.92086 +3.3380899999999998 95.376900000000006 1.6022400000000001 +-2.28728 61.668599999999998 1.44842 +-2.53999 61.668599999999998 1.44842 +-4.3418599999999996 110.363 1.51434 +-5.66031 82.269300000000001 1.64618 +0.80008000000000001 129.07400000000001 2.0636899999999998 +0.80008000000000001 127.206 2.0636899999999998 +1.04179 129.07400000000001 2.0527000000000002 +3.3380899999999998 54.186399999999999 1.92086 +-5.1878700000000002 22.3569 1.58026 +-5.9899199999999997 134.69999999999999 1.7450699999999999 +-5.9899199999999997 136.56700000000001 1.77803 +1.50325 86.015900000000002 1.4813799999999999 +-2.53999 108.48399999999999 2.0636899999999998 +-4.5286400000000002 89.762500000000003 1.5253300000000001 +3.4589500000000002 65.426199999999994 1.6132200000000001 +-2.7816999999999998 115.97799999999999 2.0636899999999998 +-4.8802300000000001 61.668599999999998 1.9648099999999999 +-2.28728 95.376900000000006 1.44842 +2.5360399999999998 84.148099999999999 1.98678 +-0.990811 27.971299999999999 2.0856699999999999 +3.1952600000000002 129.07400000000001 1.9318500000000001 +3.8984299999999998 71.040599999999998 1.6901299999999999 +3.8325100000000001 71.040599999999998 1.6791400000000001 +-1.7818799999999999 138.435 1.43743 +-4.8802300000000001 82.269300000000001 1.55829 +-3.2651300000000001 129.07400000000001 2.0417200000000002 +-3.7155999999999998 57.921999999999997 1.4923599999999999 +3.8984299999999998 63.547400000000003 1.6901299999999999 +3.8984299999999998 65.426199999999994 1.6901299999999999 +-5.8800499999999998 37.332299999999996 1.8219799999999999 +-0.73810900000000002 125.339 2.0746799999999999 +-0.990811 106.60599999999999 1.43743 +-4.1440999999999999 82.269300000000001 2.0087600000000001 +-4.3418599999999996 82.269300000000001 1.99777 +-5.8800499999999998 63.547400000000003 1.6901299999999999 +2.72282 20.489100000000001 1.5472999999999999 +-1.7818799999999999 50.439799999999998 1.43743 +-5.93499 114.099 1.71211 +-4.1440999999999999 117.845 1.50335 +3.8325100000000001 29.850100000000001 1.84395 +4.0083000000000002 132.821 1.7560500000000001 +3.8984299999999998 44.825400000000002 1.6901299999999999 +3.3380899999999998 108.48399999999999 1.92086 +1.50325 97.244699999999995 1.4813799999999999 +-0.990811 56.065199999999997 1.43743 +0.54737800000000003 27.971299999999999 1.44842 +-1.5181899999999999 80.401499999999999 2.0746799999999999 +-1.5181899999999999 80.401499999999999 1.43743 +3.8984299999999998 16.7425 1.6901299999999999 +3.8984299999999998 18.610299999999999 1.6901299999999999 +-5.93499 71.040599999999998 1.8109900000000001 +-3.49586 63.547400000000003 2.0417200000000002 +-0.21073 119.71299999999999 1.43743 +-3.2651300000000001 61.668599999999998 1.4703900000000001 +-5.66031 123.45999999999999 1.64618 +-3.2651300000000001 42.946599999999997 2.0417200000000002 +-5.93499 57.921999999999997 1.71211 +3.4589500000000002 132.821 1.6132200000000001 +3.4589500000000002 134.69999999999999 1.6132200000000001 +4.0083000000000002 134.69999999999999 1.7560500000000001 +-4.8802300000000001 37.332299999999996 1.55829 +-5.1878700000000002 106.60599999999999 1.58026 +3.8984299999999998 108.48399999999999 1.8219799999999999 +1.2725200000000001 104.738 2.0417200000000002 +3.3380899999999998 89.762500000000003 1.92086 +3.5688200000000001 140.31399999999999 1.8878999999999999 +0.80008000000000001 74.787099999999995 1.4594 +0.80008000000000001 76.654899999999998 1.4594 +-5.3197099999999997 86.015900000000002 1.6022400000000001 +-5.5614299999999997 110.363 1.6242099999999999 +2.3492600000000001 117.845 1.51434 +3.7555999999999998 65.426199999999994 1.85494 +-5.9679500000000001 72.9084 1.72309 +2.72282 52.307600000000001 1.5472999999999999 +3.3380899999999998 119.71299999999999 1.92086 +-5.5614299999999997 50.439799999999998 1.8878999999999999 +-1.2544999999999999 115.97799999999999 1.43743 +-1.7818799999999999 71.040599999999998 1.43743 +-5.3197099999999997 130.953 1.92086 +-5.9679500000000001 93.498099999999994 1.72309 +-3.2651300000000001 44.825400000000002 2.0417200000000002 +2.72282 114.099 1.5472999999999999 +1.04179 101.002 1.4594 +1.2725200000000001 99.123500000000007 1.4703900000000001 +3.8325100000000001 101.002 1.6791400000000001 +1.7339800000000001 42.946599999999997 2.0307300000000001 +3.4589500000000002 56.065199999999997 1.6132200000000001 +3.67869 129.07400000000001 1.64618 +-5.5614299999999997 101.002 1.8878999999999999 +2.3492600000000001 82.269300000000001 1.51434 +3.67869 31.7179 1.8769100000000001 +2.8876200000000001 26.1035 1.9648099999999999 +2.72282 26.1035 1.9758 +3.5688200000000001 95.376900000000006 1.6242099999999999 +3.5688200000000001 97.244699999999995 1.6242099999999999 +1.2725200000000001 132.821 1.4703900000000001 +-5.9679500000000001 69.161799999999999 1.7890200000000001 +-2.7816999999999998 48.572000000000003 1.4594 +-2.28728 27.971299999999999 2.0746799999999999 +-2.7816999999999998 117.845 1.4594 +2.8876200000000001 129.07400000000001 1.9648099999999999 +-2.28728 117.845 1.44842 +-1.2544999999999999 117.845 2.0746799999999999 +-4.5286400000000002 136.56700000000001 1.98678 +-0.990811 87.883700000000005 1.43743 +-1.2544999999999999 89.762500000000003 1.43743 +-5.5614299999999997 71.040599999999998 1.6242099999999999 +-0.73810900000000002 29.850100000000001 1.43743 +-3.0234200000000002 108.48399999999999 2.0527000000000002 +-0.21073 16.7425 1.43743 +-5.93499 119.71299999999999 1.71211 +-5.8800499999999998 136.56700000000001 1.8219799999999999 +-5.8251200000000001 138.435 1.84395 +-4.1440999999999999 48.572000000000003 2.0087600000000001 +3.3380899999999998 76.654899999999998 1.92086 +3.1952600000000002 76.654899999999998 1.9318500000000001 +-3.7155999999999998 20.489100000000001 2.0307300000000001 +0.54737800000000003 86.015900000000002 2.0636899999999998 +2.72282 136.56700000000001 1.9758 +1.9427300000000001 46.693199999999997 1.50335 +-3.7155999999999998 65.426199999999994 2.0307300000000001 +-3.9353400000000001 65.426199999999994 2.0197400000000001 +-4.8802300000000001 89.762500000000003 1.55829 +2.5360399999999998 61.668599999999998 1.98678 +3.5688200000000001 29.850100000000001 1.6242099999999999 +-5.93499 27.971299999999999 1.71211 +-5.7482100000000003 22.3569 1.65717 +3.3380899999999998 37.332299999999996 1.6022400000000001 +-5.8251200000000001 29.850100000000001 1.6791400000000001 +-5.8251200000000001 27.971299999999999 1.6791400000000001 +3.5688200000000001 80.401499999999999 1.6242099999999999 +3.8984299999999998 101.002 1.8219799999999999 +3.0524300000000002 132.821 1.9428300000000001 +3.0524300000000002 130.953 1.9428300000000001 +2.72282 132.821 1.9758 +-0.990811 95.376900000000006 1.43743 +-4.3418599999999996 31.7179 1.51434 +-0.21073 129.07400000000001 2.0746799999999999 +-0.21073 127.206 2.0746799999999999 +-5.8251200000000001 29.850100000000001 1.84395 +3.8984299999999998 61.668599999999998 1.8219799999999999 +-0.47442000000000001 130.953 2.0746799999999999 +-3.2651300000000001 48.572000000000003 1.4703900000000001 +-3.49586 48.572000000000003 1.4813799999999999 +-5.7482100000000003 78.5227 1.85494 +-5.8800499999999998 114.099 1.8219799999999999 +-5.8251200000000001 114.099 1.84395 +3.3380899999999998 29.850100000000001 1.92086 +-4.1440999999999999 24.224699999999999 1.50335 +3.94238 39.210999999999999 1.71211 +3.94238 37.332299999999996 1.71211 +-3.7155999999999998 76.654899999999998 2.0307300000000001 +1.7339800000000001 108.48399999999999 1.4923599999999999 +-1.7818799999999999 106.60599999999999 2.0746799999999999 +-3.9353400000000001 136.56700000000001 1.50335 +3.1952600000000002 67.283000000000001 1.58026 +-5.8800499999999998 119.71299999999999 1.8219799999999999 +-2.7816999999999998 54.186399999999999 2.0636899999999998 +2.8876200000000001 16.7425 1.55829 +3.3380899999999998 102.85899999999999 1.92086 +3.7555999999999998 138.435 1.65717 +2.8876200000000001 29.850100000000001 1.55829 +0.29467500000000002 134.69999999999999 2.0636899999999998 +2.8876200000000001 65.426199999999994 1.55829 +3.9973100000000001 12.995900000000001 1.77803 +2.3492600000000001 35.464500000000001 1.99777 +-5.9899199999999997 76.654899999999998 1.7450699999999999 +-2.0345800000000001 82.269300000000001 2.0746799999999999 +-2.0345800000000001 80.401499999999999 2.0746799999999999 +1.9427300000000001 95.376900000000006 2.0197400000000001 +1.04179 93.498099999999994 2.0527000000000002 +-3.0234200000000002 82.269300000000001 1.4594 +0.54737800000000003 65.426199999999994 2.0636899999999998 +-4.5286400000000002 57.921999999999997 1.98678 +1.50325 102.85899999999999 1.4813799999999999 +3.8984299999999998 129.07400000000001 1.6901299999999999 +3.8325100000000001 129.07400000000001 1.6791400000000001 +0.54737800000000003 37.332299999999996 1.44842 +-5.8251200000000001 56.065199999999997 1.6791400000000001 +-3.7155999999999998 93.498099999999994 1.4923599999999999 +-5.7482100000000003 89.762500000000003 1.65717 +3.9753400000000001 117.845 1.7890200000000001 +3.9753400000000001 115.97799999999999 1.7890200000000001 +2.3492600000000001 67.283000000000001 1.99777 +-5.5614299999999997 46.693199999999997 1.8878999999999999 +-2.7816999999999998 14.8637 1.4594 +-3.0234200000000002 57.921999999999997 2.0527000000000002 +0.29467500000000002 93.498099999999994 1.44842 +2.5360399999999998 93.498099999999994 1.98678 +-3.2651300000000001 119.71299999999999 1.4703900000000001 +0.29467500000000002 130.953 2.0636899999999998 +0.29467500000000002 89.762500000000003 1.44842 +3.7555999999999998 82.269300000000001 1.85494 +3.0524300000000002 42.946599999999997 1.5692699999999999 +3.0524300000000002 110.363 1.9428300000000001 +3.1952600000000002 112.22 1.9318500000000001 +-4.8802300000000001 99.123500000000007 1.9648099999999999 +-5.0450400000000002 97.244699999999995 1.9428300000000001 +-0.21073 114.099 2.0746799999999999 +-1.5181899999999999 78.5227 1.43743 +-3.7155999999999998 29.850100000000001 1.4923599999999999 +0.041973099999999999 72.9084 2.0746799999999999 +-5.1878700000000002 63.547400000000003 1.9318500000000001 +0.80008000000000001 114.099 2.0636899999999998 +-0.47442000000000001 37.332299999999996 2.0746799999999999 +-2.53999 50.439799999999998 2.0636899999999998 +-5.9679500000000001 26.1035 1.7890200000000001 +2.3492600000000001 102.85899999999999 1.51434 +2.5360399999999998 101.002 1.5253300000000001 +-5.3197099999999997 82.269300000000001 1.92086 +-5.0450400000000002 95.376900000000006 1.5692699999999999 +3.5688200000000001 99.123500000000007 1.8878999999999999 +-5.9899199999999997 119.71299999999999 1.77803 +-5.4515599999999997 97.244699999999995 1.6132200000000001 +2.5360399999999998 63.547400000000003 1.5253300000000001 +0.80008000000000001 132.821 1.4594 +-3.7155999999999998 26.1035 1.4923599999999999 +-5.0450400000000002 56.065199999999997 1.5692699999999999 +-3.0234200000000002 22.3569 1.4594 +-2.7816999999999998 123.45999999999999 1.4594 +3.9973100000000001 95.376900000000006 1.77803 +3.1952600000000002 82.269300000000001 1.9318500000000001 +-5.8800499999999998 14.8637 1.8219799999999999 +-0.990811 91.630300000000005 1.43743 +1.7339800000000001 59.800800000000002 2.0307300000000001 +-5.8800499999999998 74.787099999999995 1.6901299999999999 +2.5360399999999998 87.883700000000005 1.5253300000000001 +-0.47442000000000001 125.339 2.0746799999999999 +3.0524300000000002 114.099 1.9428300000000001 +-5.9679500000000001 61.668599999999998 1.72309 +-3.2651300000000001 31.7179 1.4703900000000001 +-3.2651300000000001 33.585700000000003 1.4703900000000001 +0.041973099999999999 69.161799999999999 2.0746799999999999 +3.67869 41.078800000000001 1.64618 +3.5688200000000001 86.015900000000002 1.8878999999999999 +-5.8800499999999998 134.69999999999999 1.8219799999999999 +4.0083000000000002 115.97799999999999 1.7560500000000001 +3.7555999999999998 14.8637 1.65717 +-5.66031 76.654899999999998 1.8769100000000001 +1.50325 93.498099999999994 1.4813799999999999 +-2.0345800000000001 117.845 1.44842 +2.1514899999999999 121.581 2.0087600000000001 +-5.5614299999999997 115.97799999999999 1.8878999999999999 +2.3492600000000001 78.5227 1.51434 +-2.28728 102.85899999999999 2.0746799999999999 +-5.0450400000000002 102.85899999999999 1.5692699999999999 +3.1952600000000002 63.547400000000003 1.58026 +3.1952600000000002 65.426199999999994 1.58026 +3.8984299999999998 57.921999999999997 1.8219799999999999 +3.4589500000000002 44.825400000000002 1.90987 +1.7339800000000001 110.363 1.4923599999999999 +-5.9679500000000001 112.22 1.7890200000000001 +-5.9899199999999997 112.22 1.77803 +-1.7818799999999999 129.07400000000001 2.0746799999999999 +1.9427300000000001 41.078800000000001 1.50335 +-2.53999 74.787099999999995 1.44842 +3.1952600000000002 59.800800000000002 1.58026 +2.5360399999999998 82.269300000000001 1.98678 +1.04179 115.97799999999999 1.4594 +-4.3418599999999996 14.8637 1.51434 +3.9753400000000001 46.693199999999997 1.7890200000000001 +-5.5614299999999997 142.18199999999999 1.8878999999999999 +0.54737800000000003 115.97799999999999 1.44842 +0.54737800000000003 114.099 1.44842 +1.7339800000000001 35.464500000000001 2.0307300000000001 +-3.49586 24.224699999999999 1.4813799999999999 +-3.49586 22.3569 1.4813799999999999 +-3.2651300000000001 63.547400000000003 1.4703900000000001 +-3.49586 63.547400000000003 1.4813799999999999 +1.50325 54.186399999999999 2.0417200000000002 +-5.66031 20.489100000000001 1.8769100000000001 +3.3380899999999998 61.668599999999998 1.6022400000000001 +3.8325100000000001 136.56700000000001 1.84395 +-3.49586 142.18199999999999 1.4813799999999999 +-4.3418599999999996 54.186399999999999 1.99777 +0.29467500000000002 46.693199999999997 1.44842 +3.9753400000000001 127.206 1.7890200000000001 +-5.9899199999999997 84.148099999999999 1.77803 +-5.7482100000000003 125.339 1.85494 +3.9973100000000001 56.065199999999997 1.7450699999999999 +-5.3197099999999997 97.244699999999995 1.6022400000000001 +-5.7482100000000003 102.85899999999999 1.85494 +3.9973100000000001 69.161799999999999 1.7450699999999999 +3.8984299999999998 31.7179 1.8219799999999999 +-5.5614299999999997 123.45999999999999 1.8878999999999999 +-5.4515599999999997 117.845 1.90987 +-2.28728 59.800800000000002 2.0746799999999999 +1.7339800000000001 121.581 2.0307300000000001 +-3.9353400000000001 112.22 2.0197400000000001 +0.041973099999999999 35.464500000000001 1.44842 +-4.7154199999999999 52.307600000000001 1.9758 +-3.9353400000000001 69.161799999999999 2.0197400000000001 +3.1952600000000002 41.078800000000001 1.9318500000000001 +-0.21073 123.45999999999999 1.43743 +-2.53999 56.065199999999997 1.44842 +-3.9353400000000001 39.210999999999999 1.50335 +-5.8251200000000001 108.48399999999999 1.6791400000000001 +3.9973100000000001 54.186399999999999 1.77803 +4.0083000000000002 54.186399999999999 1.7560500000000001 +3.9753400000000001 26.1035 1.72309 +-4.8802300000000001 138.435 1.55829 +3.3380899999999998 54.186399999999999 1.6022400000000001 +-3.9353400000000001 132.821 1.50335 +-3.49586 59.800800000000002 2.0417200000000002 +-5.9679500000000001 72.9084 1.7890200000000001 +-1.5181899999999999 65.426199999999994 2.0746799999999999 +3.94238 101.002 1.8109900000000001 +-4.7154199999999999 129.07400000000001 1.9758 +2.1514899999999999 16.7425 2.0087600000000001 +-5.66031 74.787099999999995 1.64618 +-3.9353400000000001 106.60599999999999 1.50335 +-3.49586 129.07400000000001 2.0417200000000002 +-1.2544999999999999 56.065199999999997 1.43743 +-3.2651300000000001 50.439799999999998 2.0417200000000002 +-5.8251200000000001 104.738 1.6791400000000001 +-0.21073 12.995900000000001 2.0746799999999999 +1.04179 59.800800000000002 1.4594 +-2.53999 69.161799999999999 1.44842 +3.8325100000000001 71.040599999999998 1.84395 +1.04179 72.9084 1.4594 +2.3492600000000001 104.738 1.51434 +3.3380899999999998 104.738 1.92086 +1.9427300000000001 125.339 2.0197400000000001 +-1.7818799999999999 99.123500000000007 1.43743 +3.67869 134.69999999999999 1.64618 +-4.1440999999999999 140.31399999999999 1.50335 +2.72282 134.69999999999999 1.9758 +-0.73810900000000002 95.376900000000006 2.0746799999999999 +-1.7818799999999999 136.56700000000001 1.43743 +-2.0345800000000001 136.56700000000001 1.44842 +-5.5614299999999997 134.69999999999999 1.6242099999999999 +-0.21073 26.1035 1.43743 +3.4589500000000002 102.85899999999999 1.90987 +-1.5181899999999999 114.099 1.43743 +-5.9679500000000001 14.8637 1.7890200000000001 +3.67869 71.040599999999998 1.8769100000000001 +3.67869 67.283000000000001 1.8769100000000001 +-0.73810900000000002 93.498099999999994 1.43743 +-2.7816999999999998 119.71299999999999 1.4594 +-5.9899199999999997 87.883700000000005 1.77803 +3.9753400000000001 39.210999999999999 1.72309 +-5.8800499999999998 93.498099999999994 1.8219799999999999 +-5.8800499999999998 95.376900000000006 1.8219799999999999 +-0.990811 39.210999999999999 2.0856699999999999 +1.2725200000000001 27.971299999999999 2.0417200000000002 +1.50325 29.850100000000001 1.4813799999999999 +0.80008000000000001 86.015900000000002 2.0636899999999998 +1.2725200000000001 50.439799999999998 2.0417200000000002 +-3.7155999999999998 130.953 1.4923599999999999 +-2.0345800000000001 117.845 2.0746799999999999 +3.4589500000000002 12.995900000000001 1.90987 +2.3492600000000001 46.693199999999997 1.99777 +0.54737800000000003 108.48399999999999 1.44842 +-5.0450400000000002 84.148099999999999 1.9428300000000001 +3.94238 42.946599999999997 1.71211 +-5.3197099999999997 99.123500000000007 1.6022400000000001 +3.7555999999999998 87.883700000000005 1.65717 +-2.0345800000000001 140.31399999999999 2.0746799999999999 +3.0524300000000002 41.078800000000001 1.9428300000000001 +1.2725200000000001 129.07400000000001 1.4703900000000001 +-0.47442000000000001 121.592 1.43743 +-0.73810900000000002 123.45999999999999 1.43743 +-5.4515599999999997 67.283000000000001 1.6132200000000001 +-5.8800499999999998 65.426199999999994 1.6901299999999999 +-5.66031 35.464500000000001 1.8769100000000001 +-5.66031 33.585700000000003 1.8769100000000001 +-5.4515599999999997 67.283000000000001 1.90987 +-2.53999 37.332299999999996 1.44842 +-2.0345800000000001 106.60599999999999 2.0746799999999999 +-5.4515599999999997 39.210999999999999 1.90987 +-2.7816999999999998 84.148099999999999 1.4594 +1.50325 110.363 1.4813799999999999 +-3.2651300000000001 74.787099999999995 1.4703900000000001 +3.3380899999999998 82.269300000000001 1.6022400000000001 +-2.0345800000000001 74.787099999999995 1.44842 +3.5688200000000001 93.498099999999994 1.8878999999999999 +0.29467500000000002 44.825400000000002 2.0746799999999999 +1.04179 114.099 1.4594 +-5.66031 74.787099999999995 1.8769100000000001 +-5.0450400000000002 132.821 1.9428300000000001 +0.041973099999999999 52.307600000000001 2.0746799999999999 +3.4589500000000002 106.60599999999999 1.90987 +-5.5614299999999997 97.244699999999995 1.6242099999999999 +0.041973099999999999 78.5227 2.0746799999999999 +-3.7155999999999998 50.439799999999998 2.0307300000000001 +-3.9353400000000001 50.439799999999998 2.0197400000000001 +-3.0234200000000002 84.148099999999999 1.4594 +-5.93499 125.339 1.8109900000000001 +-5.5614299999999997 117.845 1.8878999999999999 +-5.4515599999999997 71.040599999999998 1.90987 +-3.49586 35.464500000000001 2.0417200000000002 +-3.7155999999999998 33.585700000000003 2.0307300000000001 +-3.9353400000000001 61.668599999999998 1.50335 +-5.1878700000000002 22.3569 1.9318500000000001 +3.9753400000000001 78.5227 1.72309 +2.8876200000000001 84.148099999999999 1.55829 +-0.21073 33.585700000000003 2.0746799999999999 +-0.47442000000000001 33.585700000000003 2.0746799999999999 +3.8984299999999998 65.426199999999994 1.8219799999999999 +0.80008000000000001 89.762500000000003 2.0636899999999998 +1.9427300000000001 72.9084 2.0197400000000001 +3.5688200000000001 117.845 1.8878999999999999 +1.2725200000000001 102.85899999999999 1.4703900000000001 +3.0524300000000002 89.762500000000003 1.9428300000000001 +0.041973099999999999 127.206 1.44842 +3.5688200000000001 140.31399999999999 1.6242099999999999 +-5.7482100000000003 140.31399999999999 1.65717 +1.50325 99.123500000000007 1.4813799999999999 +-1.5181899999999999 65.426199999999994 1.43743 +-4.7154199999999999 50.439799999999998 1.5472999999999999 +2.8876200000000001 136.56700000000001 1.55829 +2.8876200000000001 138.435 1.55829 +-0.73810900000000002 84.148099999999999 2.0746799999999999 +3.9753400000000001 123.45999999999999 1.7890200000000001 +3.9973100000000001 125.339 1.77803 +-5.4515599999999997 138.435 1.90987 +3.67869 91.630300000000005 1.64618 +-5.9679500000000001 35.464500000000001 1.7890200000000001 +-4.7154199999999999 52.307600000000001 1.5472999999999999 +3.5688200000000001 95.376900000000006 1.8878999999999999 +-4.8802300000000001 82.269300000000001 1.9648099999999999 +3.3380899999999998 119.71299999999999 1.6022400000000001 +-0.73810900000000002 130.953 2.0746799999999999 +-3.9353400000000001 71.040599999999998 1.50335 +-4.1440999999999999 71.040599999999998 1.50335 +-1.5181899999999999 106.60599999999999 2.0746799999999999 +-1.2544999999999999 108.48399999999999 2.0746799999999999 +-5.3197099999999997 132.821 1.6022400000000001 +1.04179 18.610299999999999 1.4594 +-5.9899199999999997 86.015900000000002 1.77803 +-5.3197099999999997 63.547400000000003 1.92086 +-5.8251200000000001 93.498099999999994 1.6791400000000001 +-4.8802300000000001 121.581 1.9648099999999999 +-5.4515599999999997 136.56700000000001 1.6132200000000001 +-3.2651300000000001 136.56700000000001 2.0417200000000002 +-3.0234200000000002 136.56700000000001 2.0527000000000002 +-1.7818799999999999 39.210999999999999 1.43743 +-5.9679500000000001 31.7179 1.72309 +2.3492600000000001 59.800800000000002 1.51434 +-5.8251200000000001 132.821 1.84395 +-5.9679500000000001 46.693199999999997 1.72309 +-2.0345800000000001 125.339 2.0746799999999999 +1.04179 54.186399999999999 1.4594 +-1.2544999999999999 31.7179 2.0746799999999999 +-4.5286400000000002 29.850100000000001 1.5253300000000001 +-4.7154199999999999 31.7179 1.5472999999999999 +-0.21073 52.307600000000001 2.0746799999999999 +3.1952600000000002 101.002 1.58026 +-4.8802300000000001 132.821 1.9648099999999999 +-5.0450400000000002 93.498099999999994 1.5692699999999999 +0.29467500000000002 37.332299999999996 1.44842 +-4.5286400000000002 125.339 1.98678 +-5.9899199999999997 142.18199999999999 1.77803 +3.1952600000000002 69.161799999999999 1.58026 +0.54737800000000003 117.845 2.0636899999999998 +-5.5614299999999997 102.85899999999999 1.6242099999999999 +2.5360399999999998 59.800800000000002 1.5253300000000001 +3.5688200000000001 78.5227 1.6242099999999999 +3.9973100000000001 130.953 1.7450699999999999 +1.7339800000000001 87.883700000000005 2.0307300000000001 +0.80008000000000001 67.283000000000001 2.0636899999999998 +-4.8802300000000001 127.206 1.9648099999999999 +3.5688200000000001 80.401499999999999 1.8878999999999999 +-5.93499 123.45999999999999 1.71211 +-4.1440999999999999 33.585700000000003 1.50335 +-5.3197099999999997 74.787099999999995 1.92086 +2.3492600000000001 63.547400000000003 1.51434 +-5.8800499999999998 106.60599999999999 1.8219799999999999 +-5.8251200000000001 106.60599999999999 1.84395 +3.8325100000000001 142.18199999999999 1.6791400000000001 +3.3380899999999998 132.821 1.6022400000000001 +-5.1878700000000002 41.078800000000001 1.58026 +-5.3197099999999997 41.078800000000001 1.6022400000000001 +0.29467500000000002 140.31399999999999 2.0636899999999998 +3.8325100000000001 65.426199999999994 1.6791400000000001 +-2.7816999999999998 76.654899999999998 1.4594 +1.7339800000000001 108.48399999999999 2.0307300000000001 +-0.47442000000000001 26.1035 2.0746799999999999 +-5.0450400000000002 22.3569 1.9428300000000001 +-2.28728 91.630300000000005 1.44842 +1.50325 63.547400000000003 2.0417200000000002 +3.5688200000000001 76.654899999999998 1.8878999999999999 +3.67869 16.7425 1.8769100000000001 +-4.5286400000000002 16.7425 1.98678 +-5.5614299999999997 136.56700000000001 1.8878999999999999 +-0.47442000000000001 69.161799999999999 1.43743 +-5.1878700000000002 44.825400000000002 1.58026 +-3.49586 93.498099999999994 2.0417200000000002 +3.5688200000000001 42.946599999999997 1.8878999999999999 +1.2725200000000001 114.099 1.4703900000000001 +-2.28728 50.439799999999998 2.0746799999999999 +-1.2544999999999999 132.821 2.0746799999999999 +-5.9899199999999997 35.464500000000001 1.77803 +-2.28728 136.56700000000001 1.44842 +-2.53999 136.56700000000001 1.44842 +3.9973100000000001 12.995900000000001 1.7450699999999999 +3.7555999999999998 82.269300000000001 1.65717 +-4.7154199999999999 91.630300000000005 1.5472999999999999 +2.5360399999999998 14.8637 1.5253300000000001 +-0.21073 72.9084 2.0746799999999999 +-4.1440999999999999 132.821 1.50335 +0.54737800000000003 24.224699999999999 2.0636899999999998 +3.8984299999999998 140.31399999999999 1.8219799999999999 +3.94238 142.18199999999999 1.8109900000000001 +2.1514899999999999 119.71299999999999 1.50335 +3.67869 127.206 1.8769100000000001 +-1.2544999999999999 35.464500000000001 1.43743 +-5.1878700000000002 127.206 1.9318500000000001 +-5.4515599999999997 72.9084 1.90987 +-2.0345800000000001 56.065199999999997 2.0746799999999999 +-4.5286400000000002 69.161799999999999 1.98678 +0.54737800000000003 104.738 1.44842 +-4.8802300000000001 87.883700000000005 1.55829 +-0.21073 87.883700000000005 1.43743 +-5.5614299999999997 99.123500000000007 1.8878999999999999 +2.5360399999999998 110.363 1.98678 +-0.21073 78.5227 1.43743 +0.54737800000000003 110.363 1.44842 +-3.7155999999999998 24.224699999999999 2.0307300000000001 +-1.5181899999999999 31.7179 1.43743 +-3.2651300000000001 114.099 1.4703900000000001 +-3.0234200000000002 89.762500000000003 1.4594 +-5.1878700000000002 57.921999999999997 1.58026 +-5.66031 101.002 1.64618 +3.8984299999999998 50.439799999999998 1.6901299999999999 +-5.8800499999999998 95.376900000000006 1.6901299999999999 +3.94238 89.762500000000003 1.8109900000000001 +3.8984299999999998 93.498099999999994 1.6901299999999999 +1.50325 134.69999999999999 2.0417200000000002 +-1.5181899999999999 95.376900000000006 1.43743 +-2.0345800000000001 50.439799999999998 2.0746799999999999 +3.7555999999999998 142.18199999999999 1.85494 +1.50325 125.339 1.4813799999999999 +-4.5286400000000002 99.123500000000007 1.98678 +-4.3418599999999996 99.123500000000007 1.99777 +-2.7816999999999998 134.69999999999999 2.0636899999999998 +-2.53999 134.69999999999999 2.0636899999999998 +-5.9679500000000001 101.002 1.72309 +2.5360399999999998 26.1035 1.5253300000000001 +-5.9899199999999997 95.376900000000006 1.77803 +3.4589500000000002 138.435 1.6132200000000001 +-5.3197099999999997 106.60599999999999 1.6022400000000001 +-0.21073 97.244699999999995 1.43743 +3.5688200000000001 41.078800000000001 1.8878999999999999 +-4.8802300000000001 104.738 1.55829 +-4.8802300000000001 102.85899999999999 1.55829 +-3.0234200000000002 142.18199999999999 1.4594 +3.8325100000000001 132.821 1.84395 +-0.73810900000000002 74.787099999999995 1.43743 +-5.93499 97.244699999999995 1.8109900000000001 +-2.7816999999999998 130.953 1.4594 +-5.66031 31.7179 1.8769100000000001 +-5.66031 29.850100000000001 1.8769100000000001 +-3.2651300000000001 14.8637 2.0417200000000002 +0.54737800000000003 89.762500000000003 2.0636899999999998 +2.72282 76.654899999999998 1.9758 +3.0524300000000002 108.48399999999999 1.9428300000000001 +1.50325 89.762500000000003 2.0417200000000002 +3.0524300000000002 16.7425 1.5692699999999999 +2.3492600000000001 130.953 1.99777 +-0.21073 29.850100000000001 1.43743 +-0.21073 31.7179 1.43743 +1.50325 136.56700000000001 1.4813799999999999 +-2.0345800000000001 108.48399999999999 1.44842 +3.94238 69.161799999999999 1.71211 +-5.9679500000000001 37.332299999999996 1.7890200000000001 +-5.9679500000000001 39.210999999999999 1.7890200000000001 +-3.2651300000000001 95.376900000000006 1.4703900000000001 +2.1514899999999999 69.161799999999999 1.50335 +-5.9679500000000001 67.283000000000001 1.72309 +3.8325100000000001 59.800800000000002 1.84395 +-1.5181899999999999 140.31399999999999 2.0746799999999999 +3.4589500000000002 71.040599999999998 1.6132200000000001 +3.3380899999999998 71.040599999999998 1.6022400000000001 +1.9427300000000001 101.002 1.50335 +3.9973100000000001 26.1035 1.7450699999999999 +-3.2651300000000001 97.244699999999995 2.0417200000000002 +1.2725200000000001 87.883700000000005 2.0417200000000002 +3.7555999999999998 132.821 1.85494 +2.3492600000000001 20.489100000000001 1.51434 +1.50325 80.401499999999999 1.4813799999999999 +-0.990811 48.572000000000003 1.43743 +-0.990811 46.693199999999997 1.43743 +-3.49586 37.332299999999996 2.0417200000000002 +0.54737800000000003 138.435 2.0636899999999998 +-5.7482100000000003 48.572000000000003 1.85494 +3.0524300000000002 48.572000000000003 1.9428300000000001 +-3.7155999999999998 63.547400000000003 1.4923599999999999 +-3.7155999999999998 61.668599999999998 1.4923599999999999 +-5.93499 138.435 1.8109900000000001 +-5.4515599999999997 129.07400000000001 1.6132200000000001 +2.72282 119.71299999999999 1.5472999999999999 +0.29467500000000002 102.85899999999999 1.44842 +3.1952600000000002 140.31399999999999 1.58026 +-3.2651300000000001 76.654899999999998 2.0417200000000002 +-3.0234200000000002 76.654899999999998 2.0527000000000002 +-5.1878700000000002 37.332299999999996 1.9318500000000001 +-5.1878700000000002 35.464500000000001 1.9318500000000001 +3.94238 97.244699999999995 1.71211 +3.94238 99.123500000000007 1.71211 +-2.28728 104.738 1.44842 +-2.7816999999999998 125.339 2.0636899999999998 +-5.9899199999999997 91.630300000000005 1.77803 +-5.3197099999999997 119.71299999999999 1.92086 +-5.93499 123.45999999999999 1.8109900000000001 +-5.9679500000000001 115.97799999999999 1.72309 +4.0083000000000002 130.953 1.7560500000000001 +-0.73810900000000002 114.099 1.43743 +-0.73810900000000002 112.22 1.43743 +-5.93499 48.572000000000003 1.8109900000000001 +3.1952600000000002 57.921999999999997 1.9318500000000001 +-0.47442000000000001 102.85899999999999 2.0746799999999999 +-0.21073 104.738 2.0746799999999999 +0.29467500000000002 99.123500000000007 2.0746799999999999 +0.80008000000000001 80.401499999999999 2.0636899999999998 +-4.3418599999999996 140.31399999999999 1.51434 +-5.66031 87.883700000000005 1.8769100000000001 +-2.7816999999999998 136.56700000000001 1.4594 +2.5360399999999998 48.572000000000003 1.5253300000000001 +-1.7818799999999999 57.921999999999997 2.0746799999999999 +1.04179 86.015900000000002 1.4594 +-5.9679500000000001 114.099 1.7890200000000001 +-2.7816999999999998 102.85899999999999 1.4594 +3.3380899999999998 57.921999999999997 1.92086 +-3.0234200000000002 125.339 1.4594 +0.80008000000000001 95.376900000000006 1.4594 +-4.8802300000000001 123.45999999999999 1.55829 +-5.0450400000000002 123.45999999999999 1.5692699999999999 +-5.4515599999999997 50.439799999999998 1.90987 +-5.3197099999999997 129.07400000000001 1.92086 +0.54737800000000003 104.738 2.0636899999999998 +-5.9899199999999997 22.3569 1.77803 +2.5360399999999998 74.787099999999995 1.5253300000000001 +-2.53999 104.738 2.0636899999999998 +-4.1440999999999999 80.401499999999999 1.50335 +-4.1440999999999999 78.5227 1.50335 +-5.0450400000000002 69.161799999999999 1.9428300000000001 +-4.1440999999999999 129.07400000000001 1.50335 +2.72282 24.224699999999999 1.5472999999999999 +-4.1440999999999999 65.426199999999994 1.50335 +-3.49586 104.738 2.0417200000000002 +2.3492600000000001 119.71299999999999 1.99777 +1.50325 67.283000000000001 1.4813799999999999 +-0.990811 31.7179 2.0856699999999999 +-5.93499 142.18199999999999 1.71211 +-2.53999 84.148099999999999 2.0636899999999998 +-5.3197099999999997 67.283000000000001 1.6022400000000001 +2.3492600000000001 110.363 1.51434 +2.72282 48.572000000000003 1.9758 +1.2725200000000001 72.9084 2.0417200000000002 +-5.7482100000000003 123.45999999999999 1.85494 +3.4589500000000002 101.002 1.6132200000000001 +3.4589500000000002 102.85899999999999 1.6132200000000001 +3.3380899999999998 31.7179 1.6022400000000001 +-1.5181899999999999 102.85899999999999 1.43743 +3.8984299999999998 93.498099999999994 1.8219799999999999 +-0.47442000000000001 99.123500000000007 1.43743 +3.94238 61.668599999999998 1.8109900000000001 +2.72282 87.883700000000005 1.5472999999999999 +-4.8802300000000001 140.31399999999999 1.55829 +-4.1440999999999999 110.363 1.50335 +3.67869 86.015900000000002 1.64618 +3.9753400000000001 24.224699999999999 1.72309 +-2.0345800000000001 26.1035 1.44842 +-5.8251200000000001 50.439799999999998 1.84395 +1.9427300000000001 57.921999999999997 2.0197400000000001 +3.94238 129.07400000000001 1.71211 +-5.5614299999999997 104.738 1.8878999999999999 +-3.2651300000000001 39.210999999999999 2.0417200000000002 +3.1952600000000002 57.921999999999997 1.58026 +3.7555999999999998 57.921999999999997 1.65717 +3.8325100000000001 56.065199999999997 1.6791400000000001 +0.29467500000000002 63.547400000000003 1.44842 +-5.3197099999999997 119.71299999999999 1.6022400000000001 +1.04179 31.7179 1.4594 +3.0524300000000002 104.738 1.5692699999999999 +-4.5286400000000002 93.498099999999994 1.98678 +0.54737800000000003 97.244699999999995 1.44842 +-5.3197099999999997 71.040599999999998 1.92086 +-5.4515599999999997 69.161799999999999 1.90987 +-2.53999 140.31399999999999 1.44842 +-2.7816999999999998 142.18199999999999 1.4594 +1.7339800000000001 130.953 2.0307300000000001 +-5.9899199999999997 50.439799999999998 1.77803 +1.7339800000000001 86.015900000000002 1.4923599999999999 +1.04179 57.921999999999997 1.4594 +3.94238 112.22 1.71211 +-5.8251200000000001 48.572000000000003 1.84395 +-5.7482100000000003 50.439799999999998 1.85494 +-5.8800499999999998 82.269300000000001 1.6901299999999999 +-5.93499 41.078800000000001 1.8109900000000001 +-4.3418599999999996 69.161799999999999 1.51434 +-1.7818799999999999 46.693199999999997 1.43743 +3.1952600000000002 101.002 1.9318500000000001 +3.3380899999999998 69.161799999999999 1.6022400000000001 +3.1952600000000002 71.040599999999998 1.58026 +3.67869 26.1035 1.8769100000000001 +-5.9899199999999997 115.97799999999999 1.7450699999999999 +3.8325100000000001 57.921999999999997 1.6791400000000001 +0.041973099999999999 41.078800000000001 2.0746799999999999 +3.8984299999999998 127.206 1.6901299999999999 +3.3380899999999998 140.31399999999999 1.6022400000000001 +-3.49586 50.439799999999998 1.4813799999999999 +3.0524300000000002 67.283000000000001 1.5692699999999999 +-1.7818799999999999 134.69999999999999 1.43743 +2.8876200000000001 95.376900000000006 1.9648099999999999 +0.041973099999999999 39.210999999999999 2.0746799999999999 +0.54737800000000003 132.821 2.0636899999999998 +3.3380899999999998 110.363 1.6022400000000001 +-1.7818799999999999 132.821 1.43743 +3.67869 20.489100000000001 1.64618 +-2.7816999999999998 95.376900000000006 2.0636899999999998 +-5.9899199999999997 26.1035 1.77803 +2.1514899999999999 46.693199999999997 1.50335 +-2.53999 42.946599999999997 2.0636899999999998 +0.29467500000000002 35.464500000000001 2.0746799999999999 +3.5688200000000001 78.5227 1.8878999999999999 +2.1514899999999999 104.738 1.50335 +0.54737800000000003 80.401499999999999 1.44842 +0.54737800000000003 87.883700000000005 1.44842 +-5.1878700000000002 48.572000000000003 1.9318500000000001 +-3.7155999999999998 35.464500000000001 2.0307300000000001 +-4.1440999999999999 71.040599999999998 2.0087600000000001 +-4.5286400000000002 22.3569 1.5253300000000001 +1.7339800000000001 31.7179 2.0307300000000001 +-2.28728 138.435 2.0636899999999998 +1.9427300000000001 123.45999999999999 2.0197400000000001 +0.041973099999999999 138.435 1.44842 +-3.2651300000000001 89.762500000000003 2.0417200000000002 +-3.2651300000000001 91.630300000000005 2.0417200000000002 +3.9973100000000001 99.123500000000007 1.77803 +1.9427300000000001 67.283000000000001 2.0197400000000001 +-5.8800499999999998 50.439799999999998 1.8219799999999999 +3.67869 78.5227 1.64618 +-5.9899199999999997 104.738 1.77803 +-0.73810900000000002 108.48399999999999 2.0746799999999999 +4.0083000000000002 59.800800000000002 1.7560500000000001 +-5.8251200000000001 82.269300000000001 1.6791400000000001 +3.3380899999999998 132.821 1.92086 +-3.7155999999999998 26.1035 2.0307300000000001 +3.5688200000000001 63.547400000000003 1.8878999999999999 +-5.8800499999999998 130.953 1.8219799999999999 +-1.5181899999999999 91.630300000000005 2.0746799999999999 +3.8984299999999998 136.56700000000001 1.6901299999999999 +3.8325100000000001 138.435 1.6791400000000001 +3.1952600000000002 99.123500000000007 1.58026 +-5.0450400000000002 71.040599999999998 1.9428300000000001 +-5.0450400000000002 50.439799999999998 1.5692699999999999 +-5.66031 61.668599999999998 1.64618 +-5.66031 63.547400000000003 1.64618 +-2.53999 27.971299999999999 2.0636899999999998 +-4.7154199999999999 110.363 1.9758 +-2.28728 132.821 2.0636899999999998 +3.8325100000000001 61.668599999999998 1.6791400000000001 +0.80008000000000001 117.845 1.4594 +-5.9679500000000001 102.85899999999999 1.7890200000000001 +-5.5614299999999997 20.489100000000001 1.6242099999999999 +3.0524300000000002 78.5227 1.9428300000000001 +3.8984299999999998 56.065199999999997 1.6901299999999999 +-4.5286400000000002 42.946599999999997 1.5253300000000001 +-4.7154199999999999 44.825400000000002 1.5472999999999999 +3.1952600000000002 48.572000000000003 1.9318500000000001 +-2.28728 52.307600000000001 1.44842 +3.94238 59.800800000000002 1.71211 +3.9753400000000001 57.921999999999997 1.72309 +-3.9353400000000001 119.71299999999999 1.50335 +-4.1440999999999999 119.71299999999999 1.50335 +1.9427300000000001 87.883700000000005 2.0197400000000001 +-2.53999 48.572000000000003 1.44842 +-4.3418599999999996 44.825400000000002 1.99777 +-5.7482100000000003 65.426199999999994 1.85494 +-3.0234200000000002 102.85899999999999 2.0527000000000002 +0.041973099999999999 71.040599999999998 2.0746799999999999 +1.9427300000000001 63.547400000000003 1.50335 +0.54737800000000003 125.339 1.44842 +3.4589500000000002 35.464500000000001 1.6132200000000001 +2.1514899999999999 117.845 1.50335 +-0.21073 125.339 2.0746799999999999 +3.8325100000000001 44.825400000000002 1.84395 +3.8325100000000001 46.693199999999997 1.84395 +2.8876200000000001 99.123500000000007 1.55829 +-2.7816999999999998 61.668599999999998 2.0636899999999998 +-4.7154199999999999 56.065199999999997 1.5472999999999999 +-5.8800499999999998 127.206 1.8219799999999999 +-5.1878700000000002 130.953 1.58026 +-2.53999 110.363 1.44842 +3.8325100000000001 87.883700000000005 1.84395 +-5.8251200000000001 102.85899999999999 1.84395 +-5.9899199999999997 82.269300000000001 1.7450699999999999 +-5.9679500000000001 82.269300000000001 1.72309 +3.9973100000000001 39.210999999999999 1.7450699999999999 +2.1514899999999999 102.85899999999999 1.50335 +3.7555999999999998 42.946599999999997 1.85494 +3.8325100000000001 26.1035 1.84395 +-5.4515599999999997 119.71299999999999 1.90987 +-4.3418599999999996 138.435 1.99777 +2.1514899999999999 86.015900000000002 1.50335 +-5.3197099999999997 95.376900000000006 1.92086 +-5.66031 95.376900000000006 1.8769100000000001 +3.7555999999999998 115.97799999999999 1.85494 +-1.2544999999999999 121.592 1.43743 +-0.990811 119.71299999999999 1.43743 +2.72282 59.800800000000002 1.9758 +1.50325 69.161799999999999 2.0417200000000002 +1.50325 71.040599999999998 2.0417200000000002 +3.4589500000000002 101.002 1.90987 +-3.7155999999999998 48.572000000000003 2.0307300000000001 +-2.0345800000000001 18.610299999999999 1.44842 +-5.66031 114.099 1.8769100000000001 +1.2725200000000001 27.971299999999999 1.4703900000000001 +1.9427300000000001 44.825400000000002 1.50335 +-0.990811 136.56700000000001 2.0746799999999999 +0.54737800000000003 76.654899999999998 2.0636899999999998 +0.80008000000000001 76.654899999999998 2.0636899999999998 +1.04179 50.439799999999998 1.4594 +-5.4515599999999997 48.572000000000003 1.90987 +1.04179 27.971299999999999 2.0527000000000002 +-5.0450400000000002 140.31399999999999 1.9428300000000001 +3.1952600000000002 104.738 1.9318500000000001 +-5.9899199999999997 46.693199999999997 1.77803 +-5.0450400000000002 99.123500000000007 1.9428300000000001 +-5.1878700000000002 74.787099999999995 1.58026 +2.72282 86.015900000000002 1.5472999999999999 +-2.28728 72.9084 1.44842 +2.8876200000000001 72.9084 1.9648099999999999 +-5.5614299999999997 56.065199999999997 1.8878999999999999 +-1.5181899999999999 134.69999999999999 1.43743 +3.0524300000000002 108.48399999999999 1.5692699999999999 +-5.93499 52.307600000000001 1.71211 +4.0083000000000002 123.45999999999999 1.7560500000000001 +3.94238 41.078800000000001 1.8109900000000001 +3.0524300000000002 97.244699999999995 1.5692699999999999 +1.04179 84.148099999999999 1.4594 +3.1952600000000002 61.668599999999998 1.9318500000000001 +-5.1878700000000002 18.610299999999999 1.58026 +-5.3197099999999997 65.426199999999994 1.92086 +-5.9679500000000001 91.630300000000005 1.7890200000000001 +3.8325100000000001 112.22 1.84395 +-2.0345800000000001 14.8637 2.0746799999999999 +-0.990811 18.610299999999999 1.43743 +0.041973099999999999 86.015900000000002 2.0746799999999999 +1.50325 18.610299999999999 1.4813799999999999 +0.29467500000000002 123.45999999999999 1.44842 +2.5360399999999998 121.581 1.5253300000000001 +-2.53999 59.800800000000002 2.0636899999999998 +0.80008000000000001 37.332299999999996 2.0636899999999998 +-5.8800499999999998 69.161799999999999 1.8219799999999999 +1.9427300000000001 99.123500000000007 1.50335 +-5.0450400000000002 20.489100000000001 1.5692699999999999 +-5.8251200000000001 121.581 1.6791400000000001 +3.7555999999999998 93.498099999999994 1.65717 +-5.66031 44.825400000000002 1.8769100000000001 +-2.28728 74.787099999999995 1.44842 +0.54737800000000003 57.921999999999997 1.44842 +-5.8251200000000001 74.787099999999995 1.6791400000000001 +-5.8800499999999998 76.654899999999998 1.6901299999999999 +-2.7816999999999998 63.547400000000003 1.4594 +3.0524300000000002 125.339 1.5692699999999999 +-5.3197099999999997 31.7179 1.6022400000000001 +3.67869 22.3569 1.64618 +2.5360399999999998 82.269300000000001 1.5253300000000001 +3.5688200000000001 127.206 1.8878999999999999 +-1.7818799999999999 74.787099999999995 2.0746799999999999 +-1.5181899999999999 76.654899999999998 2.0746799999999999 +-1.5181899999999999 106.60599999999999 1.43743 +-3.2651300000000001 102.85899999999999 1.4703900000000001 +-3.2651300000000001 104.738 1.4703900000000001 +-2.0345800000000001 71.040599999999998 1.44842 +-5.93499 65.426199999999994 1.71211 +3.9973100000000001 46.693199999999997 1.77803 +-4.1440999999999999 69.161799999999999 1.50335 +-4.3418599999999996 52.307600000000001 1.99777 +3.5688200000000001 52.307600000000001 1.6242099999999999 +1.50325 46.693199999999997 1.4813799999999999 +1.2725200000000001 54.186399999999999 2.0417200000000002 +3.9753400000000001 48.572000000000003 1.72309 +3.9753400000000001 50.439799999999998 1.72309 +-5.93499 18.610299999999999 1.71211 +3.9973100000000001 132.821 1.7450699999999999 +-3.9353400000000001 97.244699999999995 1.50335 +-3.9353400000000001 95.376900000000006 1.50335 +1.04179 136.56700000000001 2.0527000000000002 +1.50325 33.585700000000003 1.4813799999999999 +-5.9679500000000001 50.439799999999998 1.7890200000000001 +3.0524300000000002 14.8637 1.9428300000000001 +2.1514899999999999 72.9084 2.0087600000000001 +-0.21073 37.332299999999996 2.0746799999999999 +-5.0450400000000002 87.883700000000005 1.5692699999999999 +-5.9899199999999997 44.825400000000002 1.7450699999999999 +-2.28728 61.668599999999998 2.0746799999999999 +-1.7818799999999999 76.654899999999998 1.43743 +1.50325 140.31399999999999 2.0417200000000002 +-5.0450400000000002 136.56700000000001 1.5692699999999999 +-0.990811 18.610299999999999 2.0856699999999999 +3.94238 71.040599999999998 1.71211 +-4.5286400000000002 65.426199999999994 1.5253300000000001 +3.9753400000000001 52.307600000000001 1.72309 +2.5360399999999998 119.71299999999999 1.5253300000000001 +1.2725200000000001 119.71299999999999 2.0417200000000002 +-3.2651300000000001 80.401499999999999 1.4703900000000001 +1.2725200000000001 129.07400000000001 2.0417200000000002 +-1.5181899999999999 42.946599999999997 2.0746799999999999 +-3.49586 56.065199999999997 1.4813799999999999 +3.9753400000000001 42.946599999999997 1.72309 +-3.7155999999999998 132.821 2.0307300000000001 +3.0524300000000002 89.762500000000003 1.5692699999999999 +2.8876200000000001 80.401499999999999 1.55829 +-5.4515599999999997 138.435 1.6132200000000001 +-4.7154199999999999 24.224699999999999 1.5472999999999999 +-5.0450400000000002 86.015900000000002 1.9428300000000001 +-0.990811 50.439799999999998 2.0856699999999999 +3.8984299999999998 27.971299999999999 1.8219799999999999 +3.8984299999999998 46.693199999999997 1.6901299999999999 +3.8325100000000001 46.693199999999997 1.6791400000000001 +-0.47442000000000001 119.71299999999999 2.0746799999999999 +-0.47442000000000001 121.581 2.0746799999999999 +3.94238 52.307600000000001 1.8109900000000001 +3.0524300000000002 138.435 1.5692699999999999 +-4.1440999999999999 20.489100000000001 2.0087600000000001 +-4.3418599999999996 18.610299999999999 1.99777 +-5.93499 76.654899999999998 1.8109900000000001 +-3.2651300000000001 16.7425 1.4703900000000001 +-3.0234200000000002 16.7425 1.4594 +-5.8251200000000001 16.7425 1.84395 +3.67869 27.971299999999999 1.8769100000000001 +-5.1878700000000002 132.821 1.58026 +3.67869 117.845 1.8769100000000001 +-0.990811 69.161799999999999 2.0746799999999999 +1.04179 78.5227 1.4594 +3.3380899999999998 12.995900000000001 1.6022400000000001 +0.54737800000000003 56.065199999999997 2.0636899999999998 +-3.9353400000000001 80.401499999999999 2.0197400000000001 +3.9753400000000001 134.69999999999999 1.7890200000000001 +-1.5181899999999999 125.339 1.43743 +-1.7818799999999999 127.206 1.43743 +3.9973100000000001 86.015900000000002 1.7450699999999999 +-5.9679500000000001 42.946599999999997 1.72309 +0.29467500000000002 106.60599999999999 1.44842 +-5.5614299999999997 27.971299999999999 1.8878999999999999 +-5.66031 26.1035 1.8769100000000001 +3.5688200000000001 82.269300000000001 1.6242099999999999 +-5.0450400000000002 26.1035 1.5692699999999999 +0.54737800000000003 76.654899999999998 1.44842 +-1.5181899999999999 108.48399999999999 2.0746799999999999 +-1.5181899999999999 50.439799999999998 2.0746799999999999 +2.1514899999999999 82.269300000000001 1.50335 +3.0524300000000002 138.435 1.9428300000000001 +3.1952600000000002 140.31399999999999 1.9318500000000001 +-5.8800499999999998 106.60599999999999 1.6901299999999999 +-5.4515599999999997 140.31399999999999 1.6132200000000001 +2.72282 27.971299999999999 1.9758 +-3.0234200000000002 35.464500000000001 1.4594 +3.7555999999999998 54.186399999999999 1.65717 +3.7555999999999998 56.065199999999997 1.65717 +-3.2651300000000001 35.464500000000001 2.0417200000000002 +-2.7816999999999998 101.002 1.4594 +4.0083000000000002 95.376900000000006 1.7560500000000001 +3.0524300000000002 123.45999999999999 1.9428300000000001 +2.8876200000000001 121.581 1.9648099999999999 +-5.9899199999999997 110.363 1.77803 +-5.4515599999999997 42.946599999999997 1.90987 +1.2725200000000001 106.60599999999999 1.4703900000000001 +2.8876200000000001 112.22 1.55829 +-1.5181899999999999 119.71299999999999 1.43743 +3.94238 57.921999999999997 1.71211 +1.2725200000000001 101.002 2.0417200000000002 +1.50325 101.002 2.0417200000000002 +3.67869 114.099 1.8769100000000001 +-5.9679500000000001 48.572000000000003 1.7890200000000001 +3.8325100000000001 140.31399999999999 1.84395 +2.5360399999999998 134.69999999999999 1.5253300000000001 +1.7339800000000001 102.85899999999999 2.0307300000000001 +-2.53999 89.762500000000003 2.0636899999999998 +2.5360399999999998 59.800800000000002 1.98678 +-2.7816999999999998 42.946599999999997 1.4594 +-2.7816999999999998 41.078800000000001 1.4594 +2.72282 110.363 1.9758 +3.94238 63.547400000000003 1.71211 +-4.3418599999999996 102.85899999999999 1.99777 +-5.4515599999999997 112.22 1.90987 +-5.7482100000000003 44.825400000000002 1.65717 +-5.1878700000000002 69.161799999999999 1.9318500000000001 +-5.5614299999999997 35.464500000000001 1.6242099999999999 +-3.2651300000000001 104.738 2.0417200000000002 +2.3492600000000001 65.426199999999994 1.99777 +1.2725200000000001 130.953 1.4703900000000001 +1.2725200000000001 95.376900000000006 2.0417200000000002 +1.9427300000000001 20.489100000000001 2.0197400000000001 +0.54737800000000003 86.015900000000002 1.44842 +1.9427300000000001 121.581 1.4923599999999999 +-4.7154199999999999 65.426199999999994 1.9758 +1.7339800000000001 29.850100000000001 1.4923599999999999 +-5.9899199999999997 138.435 1.7450699999999999 +-5.4515599999999997 71.040599999999998 1.6132200000000001 +0.041973099999999999 99.123500000000007 2.0746799999999999 +-0.73810900000000002 134.69999999999999 2.0746799999999999 +3.4589500000000002 104.738 1.90987 +-4.8802300000000001 74.787099999999995 1.55829 +4.0083000000000002 104.738 1.7560500000000001 +3.9973100000000001 104.738 1.7450699999999999 +2.8876200000000001 95.376900000000006 1.55829 +1.2725200000000001 29.850100000000001 1.4703900000000001 +-4.5286400000000002 78.5227 1.98678 +2.8876200000000001 48.572000000000003 1.9648099999999999 +-0.73810900000000002 18.610299999999999 1.43743 +-2.0345800000000001 84.148099999999999 1.44842 +3.8325100000000001 63.547400000000003 1.6791400000000001 +1.7339800000000001 63.547400000000003 1.4923599999999999 +-3.2651300000000001 27.971299999999999 2.0417200000000002 +-5.3197099999999997 86.015900000000002 1.92086 +0.29467500000000002 121.581 2.0636899999999998 +-5.9899199999999997 130.953 1.77803 +-5.5614299999999997 140.31399999999999 1.8878999999999999 +3.67869 99.123500000000007 1.8769100000000001 +-0.990811 89.762500000000003 1.43743 +3.9753400000000001 57.921999999999997 1.7890200000000001 +3.0524300000000002 134.69999999999999 1.5692699999999999 +-5.8800499999999998 89.762500000000003 1.8219799999999999 +-0.990811 57.921999999999997 2.0856699999999999 +3.67869 67.283000000000001 1.64618 +1.2725200000000001 110.363 1.4703900000000001 +-5.3197099999999997 84.148099999999999 1.92086 +2.5360399999999998 84.148099999999999 1.5253300000000001 +2.72282 84.148099999999999 1.5472999999999999 +-5.93499 37.332299999999996 1.71211 +-0.73810900000000002 56.065199999999997 2.0746799999999999 +3.4589500000000002 82.269300000000001 1.90987 +-3.0234200000000002 50.439799999999998 1.4594 +-4.3418599999999996 71.040599999999998 1.51434 +-1.5181899999999999 29.850100000000001 1.43743 +2.1514899999999999 80.401499999999999 2.0087600000000001 +2.5360399999999998 35.464500000000001 1.5253300000000001 +1.7339800000000001 44.825400000000002 2.0307300000000001 +-5.9899199999999997 106.60599999999999 1.77803 +1.04179 123.45999999999999 1.4594 +3.5688200000000001 20.489100000000001 1.6242099999999999 +-1.7818799999999999 41.078800000000001 1.43743 +-2.7816999999999998 112.22 1.4594 +1.2725200000000001 71.040599999999998 1.4703900000000001 +3.4589500000000002 42.946599999999997 1.6132200000000001 +-5.1878700000000002 138.435 1.9318500000000001 +-5.0450400000000002 138.435 1.9428300000000001 +3.9973100000000001 130.953 1.77803 +3.4589500000000002 18.610299999999999 1.6132200000000001 +3.5688200000000001 121.581 1.6242099999999999 +-5.9899199999999997 115.97799999999999 1.77803 +-4.8802300000000001 119.71299999999999 1.9648099999999999 +-4.8802300000000001 57.921999999999997 1.55829 +2.72282 121.581 1.5472999999999999 +-5.8251200000000001 134.69999999999999 1.84395 +4.0083000000000002 138.435 1.7560500000000001 +-2.28728 72.9084 2.0746799999999999 +-5.5614299999999997 74.787099999999995 1.8878999999999999 +-5.9679500000000001 27.971299999999999 1.72309 +1.7339800000000001 48.572000000000003 2.0307300000000001 +4.0083000000000002 125.339 1.7560500000000001 +0.29467500000000002 112.22 1.44842 +0.041973099999999999 114.099 1.44842 +-3.0234200000000002 140.31399999999999 2.0527000000000002 +-5.4515599999999997 132.821 1.6132200000000001 +-2.28728 130.953 2.0636899999999998 +-0.990811 33.585700000000003 2.0856699999999999 +-3.7155999999999998 101.002 2.0307300000000001 +3.4589500000000002 50.439799999999998 1.90987 +-5.3197099999999997 112.22 1.92086 +-5.0450400000000002 18.610299999999999 1.5692699999999999 +-0.990811 138.435 1.43743 +-5.3197099999999997 127.206 1.92086 +3.8325100000000001 27.971299999999999 1.6791400000000001 +1.9427300000000001 127.206 1.4923599999999999 +1.04179 134.69999999999999 2.0527000000000002 +2.8876200000000001 48.572000000000003 1.55829 +-0.73810900000000002 44.825400000000002 1.43743 +-5.9899199999999997 82.269300000000001 1.77803 +3.1952600000000002 56.065199999999997 1.58026 +-0.21073 33.585700000000003 1.43743 +2.5360399999999998 65.426199999999994 1.98678 +-0.990811 48.572000000000003 2.0856699999999999 +2.8876200000000001 76.654899999999998 1.55829 +-4.1440999999999999 134.69999999999999 1.50335 +0.80008000000000001 78.5227 1.4594 +0.54737800000000003 78.5227 1.44842 +1.9427300000000001 104.738 1.50335 +-0.73810900000000002 57.921999999999997 2.0746799999999999 +-5.1878700000000002 41.078800000000001 1.9318500000000001 +1.9427300000000001 22.3569 2.0197400000000001 +-5.8800499999999998 132.821 1.8219799999999999 +1.04179 140.31399999999999 1.4594 +3.67869 123.45999999999999 1.64618 +3.67869 138.435 1.64618 +-4.5286400000000002 82.269300000000001 1.98678 +3.1952600000000002 39.210999999999999 1.58026 +-5.93499 82.269300000000001 1.8109900000000001 +-2.0345800000000001 42.946599999999997 2.0746799999999999 +-0.21073 61.668599999999998 1.43743 +-5.3197099999999997 132.821 1.92086 +0.54737800000000003 106.60599999999999 1.44842 +3.8325100000000001 136.56700000000001 1.6791400000000001 +-5.0450400000000002 18.610299999999999 1.9428300000000001 +-5.1878700000000002 16.7425 1.9318500000000001 +-3.49586 44.825400000000002 1.4813799999999999 +-4.1440999999999999 142.18199999999999 1.50335 +1.7339800000000001 41.078800000000001 1.4923599999999999 +-5.1878700000000002 74.787099999999995 1.9318500000000001 +-3.2651300000000001 119.71299999999999 2.0417200000000002 +-5.9679500000000001 104.738 1.72309 +-4.5286400000000002 101.002 1.5253300000000001 +-1.5181899999999999 93.498099999999994 2.0746799999999999 +-1.2544999999999999 93.498099999999994 2.0746799999999999 +3.67869 119.71299999999999 1.64618 +0.54737800000000003 129.07400000000001 2.0636899999999998 +-0.73810900000000002 78.5227 1.43743 +2.3492600000000001 89.762500000000003 1.99777 +2.1514899999999999 57.921999999999997 1.50335 +3.9973100000000001 89.762500000000003 1.7450699999999999 +3.67869 57.921999999999997 1.8769100000000001 +3.5688200000000001 57.921999999999997 1.8878999999999999 +-4.7154199999999999 99.123500000000007 1.5472999999999999 +-3.49586 44.825400000000002 2.0417200000000002 +0.80008000000000001 114.099 1.4594 +-5.66031 119.71299999999999 1.8769100000000001 +-0.990811 129.07400000000001 1.43743 +-3.9353400000000001 54.186399999999999 1.50335 +-5.9899199999999997 104.738 1.7450699999999999 +-5.66031 140.31399999999999 1.8769100000000001 +-5.0450400000000002 24.224699999999999 1.9428300000000001 +0.54737800000000003 22.3569 1.44842 +3.8325100000000001 63.547400000000003 1.84395 +-4.1440999999999999 44.825400000000002 2.0087600000000001 +-2.28728 125.339 1.44842 +-0.990811 114.099 1.43743 +-4.3418599999999996 41.078800000000001 1.99777 +-2.53999 101.002 2.0636899999999998 +-2.7816999999999998 39.210999999999999 1.4594 +1.04179 78.5227 2.0527000000000002 +0.54737800000000003 54.186399999999999 1.44842 +1.7339800000000001 33.585700000000003 1.4923599999999999 +2.5360399999999998 95.376900000000006 1.98678 +-3.7155999999999998 125.339 2.0307300000000001 +-4.8802300000000001 54.186399999999999 1.9648099999999999 +3.9973100000000001 16.7425 1.7450699999999999 +-1.7818799999999999 80.401499999999999 2.0746799999999999 +-3.49586 91.630300000000005 2.0417200000000002 +-3.2651300000000001 93.498099999999994 2.0417200000000002 +-4.7154199999999999 125.339 1.9758 +-1.5181899999999999 52.307600000000001 2.0746799999999999 +-1.2544999999999999 52.307600000000001 2.0746799999999999 +3.9753400000000001 104.738 1.72309 +-5.8800499999999998 117.845 1.8219799999999999 +-5.66031 35.464500000000001 1.64618 +-4.3418599999999996 33.585700000000003 1.51434 +-2.7816999999999998 71.040599999999998 2.0636899999999998 +-1.2544999999999999 63.547400000000003 2.0746799999999999 +-0.21073 127.206 1.43743 +-0.21073 125.339 1.43743 +-2.28728 54.186399999999999 1.44842 +-5.8800499999999998 104.738 1.6901299999999999 +-0.990811 101.002 1.43743 +-4.7154199999999999 132.821 1.5472999999999999 +-3.9353400000000001 42.946599999999997 1.50335 +2.1514899999999999 99.123500000000007 1.50335 +-2.53999 106.60599999999999 2.0636899999999998 +3.1952600000000002 97.244699999999995 1.9318500000000001 +-5.4515599999999997 110.363 1.90987 +-2.53999 93.498099999999994 1.44842 +-2.28728 22.3569 1.44842 +-5.9679500000000001 46.693199999999997 1.7890200000000001 +-5.66031 72.9084 1.8769100000000001 +-3.2651300000000001 78.5227 2.0417200000000002 +3.8984299999999998 39.210999999999999 1.8219799999999999 +-5.0450400000000002 121.581 1.9428300000000001 +-5.9899199999999997 63.547400000000003 1.77803 +3.7555999999999998 102.85899999999999 1.65717 +-5.9679500000000001 78.5227 1.72309 +-2.7816999999999998 20.489100000000001 2.0636899999999998 +1.9427300000000001 16.7425 2.0197400000000001 +-4.3418599999999996 86.015900000000002 1.99777 +-1.2544999999999999 106.60599999999999 1.43743 +3.9973100000000001 20.489100000000001 1.77803 +1.04179 134.69999999999999 1.4594 +2.5360399999999998 125.339 1.5253300000000001 +2.5360399999999998 127.206 1.5253300000000001 +0.041973099999999999 108.48399999999999 2.0746799999999999 +0.041973099999999999 104.738 2.0746799999999999 +3.1952600000000002 106.60599999999999 1.9318500000000001 +1.9427300000000001 106.60599999999999 2.0197400000000001 +-2.7816999999999998 87.883700000000005 2.0636899999999998 +-5.9899199999999997 80.401499999999999 1.7450699999999999 +2.5360399999999998 44.825400000000002 1.98678 +-3.49586 106.60599999999999 2.0417200000000002 +-3.2651300000000001 106.60599999999999 2.0417200000000002 +3.4589500000000002 56.065199999999997 1.90987 +-4.7154199999999999 93.498099999999994 1.5472999999999999 +-5.1878700000000002 91.630300000000005 1.58026 +-4.3418599999999996 104.738 1.51434 +3.8984299999999998 18.610299999999999 1.8219799999999999 +3.8984299999999998 20.489100000000001 1.8219799999999999 +-5.3197099999999997 37.332299999999996 1.92086 +3.8325100000000001 99.123500000000007 1.6791400000000001 +-5.66031 33.585700000000003 1.64618 +0.041973099999999999 117.845 2.0746799999999999 +1.7339800000000001 130.953 1.4923599999999999 +-5.4515599999999997 93.498099999999994 1.6132200000000001 +3.4589500000000002 39.210999999999999 1.6132200000000001 +-4.7154199999999999 86.015900000000002 1.9758 +-4.8802300000000001 86.015900000000002 1.9648099999999999 +0.54737800000000003 123.45999999999999 1.44842 +-3.0234200000000002 41.078800000000001 2.0527000000000002 +3.3380899999999998 50.439799999999998 1.92086 +3.94238 54.186399999999999 1.8109900000000001 +3.1952600000000002 24.224699999999999 1.58026 +1.7339800000000001 44.825400000000002 1.4923599999999999 +-5.3197099999999997 41.078800000000001 1.92086 +-5.1878700000000002 42.946599999999997 1.9318500000000001 +3.94238 127.206 1.71211 +-5.1878700000000002 140.31399999999999 1.58026 +-5.3197099999999997 140.31399999999999 1.6022400000000001 +-5.93499 117.845 1.71211 +-1.2544999999999999 132.821 1.43743 +2.72282 50.439799999999998 1.9758 +-3.49586 112.22 2.0417200000000002 +-0.47442000000000001 35.464500000000001 1.43743 +-2.28728 136.56700000000001 2.0636899999999998 +3.4589500000000002 37.332299999999996 1.6132200000000001 +3.67869 115.97799999999999 1.8769100000000001 +-5.5614299999999997 31.7179 1.6242099999999999 +2.72282 87.883700000000005 1.9758 +-5.93499 104.738 1.71211 +-0.990811 42.946599999999997 2.0856699999999999 +-0.73810900000000002 138.435 1.43743 +-0.990811 140.31399999999999 1.43743 +-0.21073 102.85899999999999 2.0746799999999999 +-5.66031 39.210999999999999 1.64618 +3.3380899999999998 95.376900000000006 1.92086 +-3.0234200000000002 129.07400000000001 1.4594 +3.7555999999999998 76.654899999999998 1.85494 +3.67869 134.69999999999999 1.8769100000000001 +-0.47442000000000001 91.630300000000005 2.0746799999999999 +-3.9353400000000001 72.9084 1.50335 +1.2725200000000001 99.123500000000007 2.0417200000000002 +1.04179 97.244699999999995 2.0527000000000002 +-0.73810900000000002 31.7179 2.0746799999999999 +-4.5286400000000002 48.572000000000003 1.5253300000000001 +-5.0450400000000002 117.845 1.5692699999999999 +-5.8251200000000001 87.883700000000005 1.84395 +-0.47442000000000001 26.1035 1.43743 +3.1952600000000002 46.693199999999997 1.58026 +-0.47442000000000001 48.572000000000003 1.43743 +-0.47442000000000001 106.60599999999999 2.0746799999999999 +-0.47442000000000001 104.738 2.0746799999999999 +-2.53999 86.015900000000002 2.0636899999999998 +3.67869 95.376900000000006 1.64618 +-5.5614299999999997 14.8637 1.6242099999999999 +-3.2651300000000001 84.148099999999999 1.4703900000000001 +-0.990811 44.825400000000002 2.0856699999999999 +-5.9679500000000001 102.85899999999999 1.72309 +-5.7482100000000003 33.585700000000003 1.65717 +-5.9899199999999997 78.5227 1.77803 +-5.9679500000000001 69.161799999999999 1.72309 +1.9427300000000001 24.224699999999999 2.0197400000000001 +1.2725200000000001 22.3569 1.4703900000000001 +-5.0450400000000002 104.738 1.9428300000000001 +-5.0450400000000002 84.148099999999999 1.5692699999999999 +-3.49586 140.31399999999999 2.0417200000000002 +3.7555999999999998 99.123500000000007 1.65717 +1.04179 80.401499999999999 1.4594 +3.94238 104.738 1.8109900000000001 +-3.7155999999999998 91.630300000000005 2.0307300000000001 +0.041973099999999999 112.22 2.0746799999999999 +-2.0345800000000001 121.592 1.44842 +-2.28728 110.363 1.44842 +-1.5181899999999999 22.3569 1.43743 +2.8876200000000001 71.040599999999998 1.55829 +0.29467500000000002 48.572000000000003 1.44842 +0.041973099999999999 50.439799999999998 1.44842 +-2.0345800000000001 42.946599999999997 1.44842 +3.3380899999999998 134.69999999999999 1.6022400000000001 +1.04179 67.283000000000001 2.0527000000000002 +1.50325 76.654899999999998 2.0417200000000002 +1.7339800000000001 20.489100000000001 1.4923599999999999 +-5.93499 138.435 1.71211 +-5.1878700000000002 84.148099999999999 1.9318500000000001 +-4.7154199999999999 119.71299999999999 1.5472999999999999 +-4.3418599999999996 42.946599999999997 1.99777 +3.0524300000000002 106.60599999999999 1.5692699999999999 +-5.93499 42.946599999999997 1.71211 +-4.5286400000000002 123.45999999999999 1.5253300000000001 +-3.0234200000000002 132.821 2.0527000000000002 +3.5688200000000001 87.883700000000005 1.8878999999999999 +3.67869 89.762500000000003 1.8769100000000001 +1.2725200000000001 123.45999999999999 2.0417200000000002 +-2.0345800000000001 69.161799999999999 1.44842 +0.54737800000000003 114.099 2.0636899999999998 +3.94238 115.97799999999999 1.71211 +-5.93499 56.065199999999997 1.71211 +-4.7154199999999999 142.18199999999999 1.5472999999999999 +2.5360399999999998 132.821 1.98678 +1.9427300000000001 91.630300000000005 2.0197400000000001 +-0.990811 37.332299999999996 1.43743 +1.7339800000000001 106.60599999999999 2.0307300000000001 +-2.28728 76.654899999999998 1.44842 +-4.7154199999999999 20.489100000000001 1.5472999999999999 +-4.8802300000000001 95.376900000000006 1.9648099999999999 +-4.7154199999999999 97.244699999999995 1.9758 +-4.8802300000000001 121.592 1.55829 +-4.3418599999999996 20.489100000000001 1.99777 +3.3380899999999998 99.123500000000007 1.6022400000000001 +-3.0234200000000002 99.123500000000007 2.0527000000000002 +2.3492600000000001 132.821 1.99777 +2.3492600000000001 134.69999999999999 1.99777 +0.54737800000000003 97.244699999999995 2.0636899999999998 +-5.8800499999999998 61.668599999999998 1.6901299999999999 +3.94238 101.002 1.71211 +3.9753400000000001 99.123500000000007 1.72309 +-5.1878700000000002 97.244699999999995 1.9318500000000001 +-4.1440999999999999 93.498099999999994 2.0087600000000001 +3.8984299999999998 86.015900000000002 1.6901299999999999 +-2.0345800000000001 52.307600000000001 2.0746799999999999 +-5.4515599999999997 95.376900000000006 1.90987 +-3.2651300000000001 106.60599999999999 1.4703900000000001 +2.72282 129.07400000000001 1.9758 +-3.0234200000000002 112.22 2.0527000000000002 +-3.0234200000000002 27.971299999999999 1.4594 +-0.21073 76.654899999999998 1.43743 +-0.47442000000000001 76.654899999999998 1.43743 +2.1514899999999999 84.148099999999999 2.0087600000000001 +3.0524300000000002 123.45999999999999 1.5692699999999999 +-3.49586 108.48399999999999 1.4813799999999999 +0.80008000000000001 50.439799999999998 1.4594 +0.54737800000000003 52.307600000000001 1.44842 +3.4589500000000002 87.883700000000005 1.90987 +-3.9353400000000001 76.654899999999998 1.50335 +-5.1878700000000002 102.85899999999999 1.58026 +2.8876200000000001 31.7179 1.9648099999999999 +3.8984299999999998 142.18199999999999 1.6901299999999999 +-1.7818799999999999 57.921999999999997 1.43743 +0.54737800000000003 102.85899999999999 2.0636899999999998 +3.9973100000000001 106.60599999999999 1.77803 +2.72282 12.995900000000001 1.5472999999999999 +1.50325 108.48399999999999 1.4813799999999999 +3.4589500000000002 125.339 1.90987 +-5.7482100000000003 52.307600000000001 1.85494 +3.8325100000000001 125.339 1.84395 +1.9427300000000001 41.078800000000001 2.0197400000000001 +1.04179 82.269300000000001 2.0527000000000002 +-2.53999 22.3569 1.44842 +-2.28728 20.489100000000001 1.44842 +-3.7155999999999998 84.148099999999999 1.4923599999999999 +-3.9353400000000001 86.015900000000002 1.50335 +-4.8802300000000001 59.800800000000002 1.55829 +-5.7482100000000003 71.040599999999998 1.85494 +3.4589500000000002 31.7179 1.90987 +3.7555999999999998 76.654899999999998 1.65717 +-2.53999 65.426199999999994 2.0636899999999998 +2.5360399999999998 97.244699999999995 1.98678 +-0.21073 20.489100000000001 1.43743 +-2.53999 63.547400000000003 1.44842 +1.2725200000000001 89.762500000000003 2.0417200000000002 +1.2725200000000001 65.426199999999994 2.0417200000000002 +-5.9679500000000001 142.18199999999999 1.7890200000000001 +-3.0234200000000002 104.738 1.4594 +-5.3197099999999997 52.307600000000001 1.92086 +3.8984299999999998 59.800800000000002 1.8219799999999999 +-5.66031 104.738 1.8769100000000001 +-0.990811 86.015900000000002 1.43743 +3.9753400000000001 56.065199999999997 1.7890200000000001 +1.2725200000000001 41.078800000000001 1.4703900000000001 +3.3380899999999998 35.464500000000001 1.6022400000000001 +-4.1440999999999999 31.7179 2.0087600000000001 +1.9427300000000001 63.547400000000003 2.0197400000000001 +-5.7482100000000003 112.22 1.85494 +3.7555999999999998 136.56700000000001 1.85494 +3.5688200000000001 115.97799999999999 1.8878999999999999 +-2.0345800000000001 127.206 2.0746799999999999 +0.29467500000000002 136.56700000000001 2.0636899999999998 +-5.9899199999999997 110.363 1.7450699999999999 +3.9753400000000001 130.953 1.72309 +-1.7818799999999999 65.426199999999994 1.43743 +-2.0345800000000001 67.283000000000001 1.44842 +-3.7155999999999998 48.572000000000003 1.4923599999999999 +3.0524300000000002 112.22 1.5692699999999999 +3.9973100000000001 72.9084 1.7450699999999999 +2.5360399999999998 33.585700000000003 1.5253300000000001 +3.94238 82.269300000000001 1.8109900000000001 +-5.4515599999999997 76.654899999999998 1.90987 +3.7555999999999998 86.015900000000002 1.85494 +-1.7818799999999999 56.065199999999997 2.0746799999999999 +2.5360399999999998 115.97799999999999 1.5253300000000001 +2.72282 115.97799999999999 1.5472999999999999 +-0.21073 42.946599999999997 2.0746799999999999 +3.8984299999999998 71.040599999999998 1.8219799999999999 +3.94238 72.9084 1.8109900000000001 +-1.5181899999999999 112.22 2.0746799999999999 +3.7555999999999998 78.5227 1.65717 +3.7555999999999998 18.610299999999999 1.85494 +-0.47442000000000001 67.283000000000001 2.0746799999999999 +-2.7816999999999998 138.435 2.0636899999999998 +-2.0345800000000001 95.376900000000006 1.44842 +-1.7818799999999999 112.22 1.43743 +-1.7818799999999999 37.332299999999996 1.43743 +3.9973100000000001 67.283000000000001 1.77803 +3.8984299999999998 67.283000000000001 1.8219799999999999 +-5.7482100000000003 61.668599999999998 1.65717 +3.1952600000000002 97.244699999999995 1.58026 +2.72282 125.339 1.9758 +-1.2544999999999999 27.971299999999999 1.43743 +-5.9679500000000001 138.435 1.7890200000000001 +0.54737800000000003 50.439799999999998 1.44842 +0.29467500000000002 52.307600000000001 1.44842 +2.5360399999999998 37.332299999999996 1.5253300000000001 +-4.3418599999999996 37.332299999999996 1.51434 +2.5360399999999998 48.572000000000003 1.98678 +-5.4515599999999997 110.363 1.6132200000000001 +-5.5614299999999997 112.22 1.6242099999999999 +1.50325 86.015900000000002 2.0417200000000002 +-4.3418599999999996 134.69999999999999 1.51434 +-4.5286400000000002 136.56700000000001 1.5253300000000001 +-0.73810900000000002 67.283000000000001 1.43743 +3.8984299999999998 76.654899999999998 1.8219799999999999 +-5.66031 72.9084 1.64618 +-3.7155999999999998 89.762500000000003 1.4923599999999999 +-3.0234200000000002 71.040599999999998 2.0527000000000002 +3.3380899999999998 80.401499999999999 1.6022400000000001 +1.2725200000000001 52.307600000000001 2.0417200000000002 +-2.53999 91.630300000000005 1.44842 +-5.3197099999999997 121.581 1.6022400000000001 +-5.3197099999999997 76.654899999999998 1.6022400000000001 +-5.5614299999999997 119.71299999999999 1.8878999999999999 +3.7555999999999998 97.244699999999995 1.65717 +-3.2651300000000001 121.592 1.4703900000000001 +3.8325100000000001 104.738 1.6791400000000001 +-2.53999 93.498099999999994 2.0636899999999998 +3.9973100000000001 129.07400000000001 1.77803 +2.72282 125.339 1.5472999999999999 +-5.66031 56.065199999999997 1.64618 +-5.66031 16.7425 1.8769100000000001 +-5.7482100000000003 14.8637 1.85494 +0.80008000000000001 67.283000000000001 1.4594 +-5.3197099999999997 27.971299999999999 1.92086 +-4.1440999999999999 138.435 2.0087600000000001 +-1.5181899999999999 86.015900000000002 1.43743 +-1.5181899999999999 84.148099999999999 1.43743 +-0.73810900000000002 35.464500000000001 2.0746799999999999 +-0.990811 104.738 2.0746799999999999 +-3.49586 130.953 2.0417200000000002 +1.2725200000000001 44.825400000000002 2.0417200000000002 +1.7339800000000001 14.8637 1.4923599999999999 +1.9427300000000001 12.995900000000001 1.50335 +-5.93499 112.22 1.8109900000000001 +-4.1440999999999999 57.921999999999997 1.50335 +1.04179 115.97799999999999 2.0527000000000002 +-3.9353400000000001 74.787099999999995 1.50335 +-0.73810900000000002 110.363 2.0746799999999999 +-2.28728 39.210999999999999 2.0746799999999999 +-5.5614299999999997 78.5227 1.8878999999999999 +-2.0345800000000001 140.31399999999999 1.44842 +-2.28728 142.18199999999999 1.44842 +-5.9899199999999997 46.693199999999997 1.7450699999999999 +3.4589500000000002 50.439799999999998 1.6132200000000001 +3.0524300000000002 99.123500000000007 1.9428300000000001 +-0.990811 54.186399999999999 2.0856699999999999 +1.50325 52.307600000000001 2.0417200000000002 +3.8325100000000001 142.18199999999999 1.84395 +0.041973099999999999 138.435 2.0746799999999999 +3.94238 24.224699999999999 1.71211 +-1.7818799999999999 48.572000000000003 2.0746799999999999 +1.7339800000000001 22.3569 2.0307300000000001 +-2.53999 132.821 2.0636899999999998 +-2.7816999999999998 99.123500000000007 2.0636899999999998 +-5.1878700000000002 121.581 1.9318500000000001 +-3.0234200000000002 86.015900000000002 1.4594 +2.3492600000000001 106.60599999999999 1.99777 +2.3492600000000001 108.48399999999999 1.99777 +2.3492600000000001 31.7179 1.51434 +-5.8800499999999998 59.800800000000002 1.6901299999999999 +3.4589500000000002 86.015900000000002 1.90987 +-3.2651300000000001 39.210999999999999 1.4703900000000001 +-1.5181899999999999 50.439799999999998 1.43743 +1.9427300000000001 121.581 2.0197400000000001 +-3.0234200000000002 127.206 2.0527000000000002 +-3.49586 117.845 1.4813799999999999 +0.041973099999999999 140.31399999999999 1.44842 +-5.1878700000000002 114.099 1.58026 +-3.0234200000000002 74.787099999999995 2.0527000000000002 +-4.1440999999999999 67.283000000000001 2.0087600000000001 +-4.1440999999999999 69.161799999999999 2.0087600000000001 +-2.0345800000000001 106.60599999999999 1.44842 +-5.4515599999999997 97.244699999999995 1.90987 +-0.21073 59.800800000000002 2.0746799999999999 +-0.21073 61.668599999999998 2.0746799999999999 +-3.49586 71.040599999999998 1.4813799999999999 +-0.73810900000000002 82.269300000000001 1.43743 +1.7339800000000001 78.5227 2.0307300000000001 +-1.7818799999999999 35.464500000000001 1.43743 +-0.47442000000000001 101.002 1.43743 +3.9973100000000001 117.845 1.7450699999999999 +-3.9353400000000001 16.7425 2.0197400000000001 +2.3492600000000001 74.787099999999995 1.99777 +2.3492600000000001 76.654899999999998 1.99777 +-1.7818799999999999 29.850100000000001 1.43743 +-5.4515599999999997 123.45999999999999 1.90987 +3.67869 59.800800000000002 1.8769100000000001 +-4.5286400000000002 33.585700000000003 1.98678 +3.94238 84.148099999999999 1.8109900000000001 +3.8325100000000001 12.995900000000001 1.6791400000000001 +3.9973100000000001 76.654899999999998 1.77803 +3.0524300000000002 59.800800000000002 1.5692699999999999 +3.5688200000000001 82.269300000000001 1.8878999999999999 +2.8876200000000001 102.85899999999999 1.55829 +2.8876200000000001 101.002 1.55829 +-2.53999 112.22 2.0636899999999998 +3.5688200000000001 132.821 1.6242099999999999 +3.1952600000000002 35.464500000000001 1.58026 +-5.93499 48.572000000000003 1.71211 +3.1952600000000002 31.7179 1.9318500000000001 +-1.5181899999999999 110.363 1.43743 +-5.3197099999999997 56.065199999999997 1.92086 +1.2725200000000001 125.339 1.4703900000000001 +-2.28728 121.581 2.0636899999999998 +3.94238 97.244699999999995 1.8109900000000001 +0.29467500000000002 48.572000000000003 2.0746799999999999 +3.94238 108.48399999999999 1.8109900000000001 +3.8984299999999998 50.439799999999998 1.8219799999999999 +-5.7482100000000003 138.435 1.65717 +1.04179 26.1035 1.4594 +3.4589500000000002 127.206 1.6132200000000001 +-5.3197099999999997 57.921999999999997 1.6022400000000001 +0.54737800000000003 136.56700000000001 2.0636899999999998 +-5.93499 22.3569 1.8109900000000001 +-4.1440999999999999 16.7425 1.50335 +-5.93499 35.464500000000001 1.71211 +-5.8800499999999998 29.850100000000001 1.8219799999999999 +-5.8251200000000001 89.762500000000003 1.6791400000000001 +-3.2651300000000001 52.307600000000001 1.4703900000000001 +2.5360399999999998 14.8637 1.98678 +3.9973100000000001 110.363 1.77803 +-5.7482100000000003 117.845 1.85494 +-2.28728 42.946599999999997 2.0746799999999999 +-3.7155999999999998 44.825400000000002 2.0307300000000001 +-5.8800499999999998 54.186399999999999 1.6901299999999999 +0.041973099999999999 31.7179 1.44842 +-4.1440999999999999 54.186399999999999 1.50335 +-1.5181899999999999 18.610299999999999 1.43743 +-1.5181899999999999 20.489100000000001 1.43743 +-1.5181899999999999 129.07400000000001 1.43743 +-5.0450400000000002 46.693199999999997 1.9428300000000001 +3.94238 29.850100000000001 1.71211 +0.80008000000000001 56.065199999999997 2.0636899999999998 +3.3380899999999998 97.244699999999995 1.92086 +0.041973099999999999 76.654899999999998 2.0746799999999999 +0.041973099999999999 35.464500000000001 2.0746799999999999 +-0.990811 97.244699999999995 2.0746799999999999 +-0.990811 95.376900000000006 2.0746799999999999 +-5.3197099999999997 117.845 1.92086 +-1.2544999999999999 44.825400000000002 1.43743 +-1.2544999999999999 67.283000000000001 1.43743 +-2.28728 33.585700000000003 1.44842 +-5.8800499999999998 22.3569 1.8219799999999999 +0.54737800000000003 110.363 2.0636899999999998 +-0.21073 46.693199999999997 1.43743 +3.94238 71.040599999999998 1.8109900000000001 +-5.3197099999999997 78.5227 1.6022400000000001 +0.29467500000000002 14.8637 1.44842 +3.7555999999999998 93.498099999999994 1.85494 +-1.7818799999999999 42.946599999999997 1.43743 +-0.73810900000000002 78.5227 2.0746799999999999 +1.04179 125.339 1.4594 +-5.66031 142.18199999999999 1.8769100000000001 +3.1952600000000002 80.401499999999999 1.58026 +3.4589500000000002 24.224699999999999 1.6132200000000001 +-0.990811 12.995900000000001 1.43743 +-5.9679500000000001 50.439799999999998 1.72309 +-0.73810900000000002 72.9084 1.43743 +2.1514899999999999 67.283000000000001 1.50335 +-5.3197099999999997 50.439799999999998 1.92086 +-0.990811 29.850100000000001 2.0856699999999999 +-5.66031 123.45999999999999 1.8769100000000001 +-4.8802300000000001 52.307600000000001 1.9648099999999999 +2.8876200000000001 108.48399999999999 1.9648099999999999 +3.9973100000000001 50.439799999999998 1.77803 +2.72282 33.585700000000003 1.5472999999999999 +-4.3418599999999996 61.668599999999998 1.51434 +-2.0345800000000001 112.22 2.0746799999999999 +3.7555999999999998 106.60599999999999 1.65717 +1.50325 114.099 1.4813799999999999 +-5.9899199999999997 129.07400000000001 1.7450699999999999 +3.8984299999999998 12.995900000000001 1.8219799999999999 +0.29467500000000002 119.71299999999999 2.0636899999999998 +-5.9679500000000001 82.269300000000001 1.7890200000000001 +-0.47442000000000001 31.7179 1.43743 +1.04179 35.464500000000001 1.4594 +4.0083000000000002 142.18199999999999 1.7560500000000001 +-0.47442000000000001 95.376900000000006 1.43743 +-5.8251200000000001 138.435 1.6791400000000001 +3.3380899999999998 101.002 1.92086 +1.9427300000000001 14.8637 2.0197400000000001 +-5.8251200000000001 16.7425 1.6791400000000001 +3.8984299999999998 106.60599999999999 1.8219799999999999 +3.9973100000000001 127.206 1.77803 +-4.1440999999999999 125.339 1.50335 +-0.47442000000000001 35.464500000000001 2.0746799999999999 +-4.5286400000000002 99.123500000000007 1.5253300000000001 +-4.1440999999999999 138.435 1.50335 +-5.8251200000000001 99.123500000000007 1.84395 +2.8876200000000001 26.1035 1.55829 +2.72282 27.971299999999999 1.5472999999999999 +-4.1440999999999999 101.002 2.0087600000000001 +-5.8251200000000001 41.078800000000001 1.6791400000000001 +3.9973100000000001 102.85899999999999 1.77803 +-3.7155999999999998 24.224699999999999 1.4923599999999999 +-5.66031 42.946599999999997 1.64618 +-1.5181899999999999 104.738 2.0746799999999999 +-3.2651300000000001 89.762500000000003 1.4703900000000001 +-3.49586 89.762500000000003 1.4813799999999999 +-5.8800499999999998 16.7425 1.8219799999999999 +-5.8800499999999998 18.610299999999999 1.8219799999999999 +-0.47442000000000001 106.60599999999999 1.43743 +-5.9899199999999997 48.572000000000003 1.77803 +-0.990811 123.45999999999999 2.0746799999999999 +2.5360399999999998 46.693199999999997 1.5253300000000001 +2.72282 46.693199999999997 1.5472999999999999 +3.5688200000000001 61.668599999999998 1.8878999999999999 +-5.9679500000000001 54.186399999999999 1.72309 +-5.9679500000000001 41.078800000000001 1.7890200000000001 +-2.53999 80.401499999999999 1.44842 +-3.49586 82.269300000000001 1.4813799999999999 +-4.7154199999999999 104.738 1.5472999999999999 +2.8876200000000001 61.668599999999998 1.9648099999999999 +-1.7818799999999999 69.161799999999999 2.0746799999999999 +-5.9899199999999997 67.283000000000001 1.7450699999999999 +-1.5181899999999999 27.971299999999999 2.0746799999999999 +-3.9353400000000001 127.206 2.0197400000000001 +-4.3418599999999996 134.69999999999999 1.99777 +-2.0345800000000001 37.332299999999996 1.44842 +-0.990811 134.69999999999999 1.43743 +-5.4515599999999997 125.339 1.6132200000000001 +-5.8800499999999998 102.85899999999999 1.6901299999999999 +-1.2544999999999999 101.002 2.0746799999999999 +1.9427300000000001 129.07400000000001 1.4923599999999999 +1.7339800000000001 129.07400000000001 1.4923599999999999 +3.9753400000000001 65.426199999999994 1.7890200000000001 +-1.2544999999999999 69.161799999999999 2.0746799999999999 +-0.990811 127.206 1.43743 +3.8325100000000001 26.1035 1.6791400000000001 +-0.73810900000000002 138.435 2.0746799999999999 +1.2725200000000001 18.610299999999999 2.0417200000000002 +2.5360399999999998 76.654899999999998 1.98678 +1.2725200000000001 61.668599999999998 1.4703900000000001 +0.80008000000000001 95.376900000000006 2.0636899999999998 +-2.28728 93.498099999999994 1.44842 +-3.2651300000000001 108.48399999999999 2.0417200000000002 +-3.0234200000000002 110.363 2.0527000000000002 +-4.7154199999999999 82.269300000000001 1.9758 +2.1514899999999999 69.161799999999999 2.0087600000000001 +-5.4515599999999997 26.1035 1.90987 +1.04179 20.489100000000001 2.0527000000000002 +2.72282 134.69999999999999 1.5472999999999999 +-5.1878700000000002 129.07400000000001 1.9318500000000001 +3.67869 132.821 1.8769100000000001 +3.7555999999999998 134.69999999999999 1.85494 +3.0524300000000002 134.69999999999999 1.9428300000000001 +-5.4515599999999997 91.630300000000005 1.6132200000000001 +0.041973099999999999 72.9084 1.44842 +1.04179 87.883700000000005 2.0527000000000002 +-0.73810900000000002 134.69999999999999 1.43743 +1.50325 84.148099999999999 2.0417200000000002 +1.50325 44.825400000000002 2.0417200000000002 +-4.1440999999999999 59.800800000000002 2.0087600000000001 +-4.3418599999999996 59.800800000000002 1.99777 +-5.9679500000000001 80.401499999999999 1.7890200000000001 +-2.53999 41.078800000000001 1.44842 +3.5688200000000001 134.69999999999999 1.8878999999999999 +-5.9679500000000001 104.738 1.7890200000000001 +-2.0345800000000001 89.762500000000003 2.0746799999999999 +-5.93499 57.921999999999997 1.8109900000000001 +2.72282 29.850100000000001 1.9758 +-4.5286400000000002 108.48399999999999 1.98678 +-0.73810900000000002 46.693199999999997 2.0746799999999999 +-3.7155999999999998 71.040599999999998 2.0307300000000001 +-3.49586 71.040599999999998 2.0417200000000002 +-4.8802300000000001 26.1035 1.9648099999999999 +2.8876200000000001 91.630300000000005 1.55829 +3.9753400000000001 114.099 1.72309 +-3.2651300000000001 127.206 2.0417200000000002 +-1.7818799999999999 121.581 2.0746799999999999 +3.9753400000000001 138.435 1.72309 +1.04179 112.22 1.4594 +2.72282 35.464500000000001 1.5472999999999999 +1.2725200000000001 39.210999999999999 1.4703900000000001 +-4.1440999999999999 67.283000000000001 1.50335 +-0.990811 132.821 2.0746799999999999 +-3.7155999999999998 72.9084 1.4923599999999999 +-2.0345800000000001 91.630300000000005 2.0746799999999999 +2.8876200000000001 22.3569 1.9648099999999999 +-5.7482100000000003 108.48399999999999 1.85494 +-3.49586 102.85899999999999 1.4813799999999999 +-2.7816999999999998 110.363 2.0636899999999998 +-5.3197099999999997 89.762500000000003 1.92086 +-5.93499 142.18199999999999 1.8109900000000001 +-3.7155999999999998 65.426199999999994 1.4923599999999999 +-5.5614299999999997 59.800800000000002 1.6242099999999999 +-5.9899199999999997 65.426199999999994 1.7450699999999999 +1.04179 42.946599999999997 1.4594 +-5.9679500000000001 129.07400000000001 1.72309 +-5.3197099999999997 136.56700000000001 1.6022400000000001 +3.8984299999999998 76.654899999999998 1.6901299999999999 +3.94238 110.363 1.71211 +2.5360399999999998 125.339 1.98678 +3.94238 84.148099999999999 1.71211 +3.8325100000000001 35.464500000000001 1.6791400000000001 +-2.53999 82.269300000000001 1.44842 +3.1952600000000002 74.787099999999995 1.58026 +-0.73810900000000002 110.363 1.43743 +-0.990811 112.22 1.43743 +0.29467500000000002 22.3569 2.0746799999999999 +2.72282 54.186399999999999 1.5472999999999999 +-0.990811 37.332299999999996 2.0856699999999999 +-1.2544999999999999 31.7179 1.43743 +3.67869 130.953 1.64618 +-2.0345800000000001 48.572000000000003 2.0746799999999999 +-5.93499 46.693199999999997 1.8109900000000001 +3.9973100000000001 78.5227 1.7450699999999999 +-2.7816999999999998 104.738 2.0636899999999998 +3.5688200000000001 119.71299999999999 1.6242099999999999 +3.4589500000000002 121.581 1.6132200000000001 +-5.66031 99.123500000000007 1.64618 +0.80008000000000001 112.22 2.0636899999999998 +-0.21073 99.123500000000007 2.0746799999999999 +-5.5614299999999997 87.883700000000005 1.6242099999999999 +-0.47442000000000001 50.439799999999998 1.43743 +3.8984299999999998 84.148099999999999 1.6901299999999999 +1.50325 114.099 2.0417200000000002 +3.7555999999999998 54.186399999999999 1.85494 +-4.7154199999999999 22.3569 1.5472999999999999 +-0.990811 41.078800000000001 1.43743 +1.50325 35.464500000000001 2.0417200000000002 +-3.7155999999999998 22.3569 1.4923599999999999 +-5.8251200000000001 37.332299999999996 1.6791400000000001 +-5.5614299999999997 31.7179 1.8878999999999999 +-0.21073 63.547400000000003 1.43743 +2.3492600000000001 69.161799999999999 1.51434 +2.1514899999999999 71.040599999999998 1.50335 +-4.8802300000000001 69.161799999999999 1.9648099999999999 +1.7339800000000001 59.800800000000002 1.4923599999999999 +3.94238 14.8637 1.8109900000000001 +3.8325100000000001 37.332299999999996 1.84395 +-4.5286400000000002 59.800800000000002 1.98678 +1.2725200000000001 121.581 2.0417200000000002 +2.72282 138.435 1.5472999999999999 +-4.5286400000000002 71.040599999999998 1.98678 +-4.5286400000000002 72.9084 1.98678 +3.94238 12.995900000000001 1.71211 +-5.7482100000000003 16.7425 1.85494 +-3.9353400000000001 78.5227 2.0197400000000001 +0.80008000000000001 71.040599999999998 1.4594 +-5.66031 99.123500000000007 1.8769100000000001 +0.041973099999999999 119.71299999999999 2.0746799999999999 +2.1514899999999999 114.099 1.50335 +3.9753400000000001 125.339 1.7890200000000001 +3.8325100000000001 18.610299999999999 1.6791400000000001 +-3.7155999999999998 46.693199999999997 1.4923599999999999 +-2.28728 41.078800000000001 2.0746799999999999 +3.9973100000000001 115.97799999999999 1.77803 +3.1952600000000002 72.9084 1.9318500000000001 +3.9753400000000001 72.9084 1.72309 +-5.0450400000000002 125.339 1.9428300000000001 +2.8876200000000001 29.850100000000001 1.9648099999999999 +-3.7155999999999998 86.015900000000002 1.4923599999999999 +1.7339800000000001 76.654899999999998 1.4923599999999999 +-3.49586 67.283000000000001 2.0417200000000002 +-2.7816999999999998 114.099 1.4594 +3.8984299999999998 129.07400000000001 1.8219799999999999 +3.7555999999999998 125.339 1.85494 +-4.3418599999999996 50.439799999999998 1.51434 +-3.0234200000000002 39.210999999999999 1.4594 +3.1952600000000002 22.3569 1.58026 +-0.47442000000000001 42.946599999999997 2.0746799999999999 +-0.47442000000000001 41.078800000000001 2.0746799999999999 +-1.5181899999999999 121.581 2.0746799999999999 +-0.990811 24.224699999999999 1.43743 +-0.73810900000000002 22.3569 1.43743 +3.9973100000000001 134.69999999999999 1.77803 +0.80008000000000001 140.31399999999999 2.0636899999999998 +-4.5286400000000002 52.307600000000001 1.98678 +-1.5181899999999999 48.572000000000003 2.0746799999999999 +-1.2544999999999999 50.439799999999998 2.0746799999999999 +3.3380899999999998 33.585700000000003 1.6022400000000001 +1.7339800000000001 114.099 1.4923599999999999 +-2.7816999999999998 97.244699999999995 1.4594 +-2.7816999999999998 95.376900000000006 1.4594 +-5.8251200000000001 52.307600000000001 1.84395 +-1.5181899999999999 119.71299999999999 2.0746799999999999 +3.4589500000000002 140.31399999999999 1.6132200000000001 +3.94238 56.065199999999997 1.71211 +-5.8251200000000001 125.339 1.6791400000000001 +-5.8800499999999998 127.206 1.6901299999999999 +-3.49586 95.376900000000006 2.0417200000000002 +2.72282 140.31399999999999 1.9758 +-5.4515599999999997 114.099 1.6132200000000001 +-4.7154199999999999 18.610299999999999 1.9758 +-4.7154199999999999 42.946599999999997 1.9758 +-5.8251200000000001 24.224699999999999 1.84395 +-3.2651300000000001 99.123500000000007 1.4703900000000001 +2.5360399999999998 136.56700000000001 1.5253300000000001 +2.5360399999999998 44.825400000000002 1.5253300000000001 +2.72282 67.283000000000001 1.9758 +3.94238 114.099 1.8109900000000001 +3.9973100000000001 84.148099999999999 1.7450699999999999 +-4.3418599999999996 91.630300000000005 1.99777 +-0.73810900000000002 65.426199999999994 2.0746799999999999 +-1.5181899999999999 114.099 2.0746799999999999 +-3.9353400000000001 142.18199999999999 1.4923599999999999 +-5.0450400000000002 78.5227 1.9428300000000001 +3.8984299999999998 14.8637 1.8219799999999999 +-5.9899199999999997 52.307600000000001 1.7450699999999999 +-5.8251200000000001 87.883700000000005 1.6791400000000001 +0.54737800000000003 95.376900000000006 1.44842 +-5.1878700000000002 112.22 1.58026 +-5.5614299999999997 142.18199999999999 1.6242099999999999 +2.1514899999999999 57.921999999999997 2.0087600000000001 +2.72282 142.18199999999999 1.5472999999999999 +-5.66031 106.60599999999999 1.64618 +-2.53999 115.97799999999999 1.44842 +0.041973099999999999 142.18199999999999 1.44842 +2.1514899999999999 56.065199999999997 1.50335 +-3.0234200000000002 46.693199999999997 2.0527000000000002 +-5.0450400000000002 114.099 1.5692699999999999 +-5.1878700000000002 110.363 1.58026 +-5.0450400000000002 59.800800000000002 1.5692699999999999 +2.3492600000000001 99.123500000000007 1.99777 +-5.8251200000000001 84.148099999999999 1.84395 +-5.7482100000000003 84.148099999999999 1.85494 +2.3492600000000001 42.946599999999997 1.51434 +3.0524300000000002 48.572000000000003 1.5692699999999999 +-0.21073 87.883700000000005 2.0746799999999999 +-0.21073 71.040599999999998 2.0746799999999999 +3.67869 76.654899999999998 1.64618 +-1.5181899999999999 95.376900000000006 2.0746799999999999 +2.8876200000000001 24.224699999999999 1.55829 +3.4589500000000002 54.186399999999999 1.6132200000000001 +3.5688200000000001 54.186399999999999 1.6242099999999999 +-4.7154199999999999 46.693199999999997 1.5472999999999999 +-5.7482100000000003 80.401499999999999 1.65717 +-5.1878700000000002 102.85899999999999 1.9318500000000001 +0.54737800000000003 84.148099999999999 1.44842 +0.29467500000000002 106.60599999999999 2.0746799999999999 +-5.93499 54.186399999999999 1.71211 +-5.5614299999999997 29.850100000000001 1.8878999999999999 +-0.47442000000000001 72.9084 2.0746799999999999 +-5.8800499999999998 63.547400000000003 1.8219799999999999 +-4.5286400000000002 91.630300000000005 1.98678 +0.80008000000000001 39.210999999999999 1.4594 +-5.8800499999999998 57.921999999999997 1.6901299999999999 +0.29467500000000002 129.07400000000001 2.0636899999999998 +3.1952600000000002 108.48399999999999 1.58026 +-3.9353400000000001 104.738 2.0197400000000001 +2.3492600000000001 138.435 1.99777 +-0.21073 42.946599999999997 1.43743 +0.041973099999999999 54.186399999999999 2.0746799999999999 +3.8984299999999998 37.332299999999996 1.8219799999999999 +2.72282 39.210999999999999 1.5472999999999999 +-5.1878700000000002 61.668599999999998 1.58026 +-5.0450400000000002 61.668599999999998 1.5692699999999999 +3.5688200000000001 108.48399999999999 1.6242099999999999 +2.1514899999999999 74.787099999999995 2.0087600000000001 +3.9753400000000001 35.464500000000001 1.72309 +0.80008000000000001 50.439799999999998 2.0636899999999998 +3.94238 20.489100000000001 1.71211 +0.29467500000000002 108.48399999999999 2.0746799999999999 +-2.0345800000000001 65.426199999999994 1.44842 +-4.3418599999999996 127.206 1.51434 +0.54737800000000003 87.883700000000005 2.0636899999999998 +-3.9353400000000001 16.7425 1.50335 +2.3492600000000001 39.210999999999999 1.51434 +-1.5181899999999999 82.269300000000001 2.0746799999999999 +1.50325 63.547400000000003 1.4813799999999999 +2.72282 127.206 1.5472999999999999 +-3.49586 54.186399999999999 1.4813799999999999 +-3.7155999999999998 89.762500000000003 2.0307300000000001 +-5.5614299999999997 115.97799999999999 1.6242099999999999 +-2.7816999999999998 59.800800000000002 2.0636899999999998 +2.8876200000000001 93.498099999999994 1.55829 +-5.4515599999999997 108.48399999999999 1.6132200000000001 +2.1514899999999999 130.953 1.50335 +3.7555999999999998 14.8637 1.85494 +3.67869 12.995900000000001 1.8769100000000001 +-5.3197099999999997 14.8637 1.6022400000000001 +-2.0345800000000001 108.48399999999999 2.0746799999999999 +-1.7818799999999999 119.71299999999999 1.43743 +-2.7816999999999998 119.71299999999999 2.0636899999999998 +2.5360399999999998 57.921999999999997 1.98678 +-1.2544999999999999 102.85899999999999 1.43743 +-3.2651300000000001 132.821 2.0417200000000002 +-1.2544999999999999 65.426199999999994 1.43743 +3.8325100000000001 82.269300000000001 1.84395 +-1.2544999999999999 24.224699999999999 1.43743 +3.8984299999999998 110.363 1.6901299999999999 +0.29467500000000002 61.668599999999998 1.44842 +1.04179 65.426199999999994 1.4594 +-3.7155999999999998 42.946599999999997 1.4923599999999999 +2.5360399999999998 97.244699999999995 1.5253300000000001 +1.50325 20.489100000000001 1.4813799999999999 +1.04179 22.3569 1.4594 +1.50325 119.71299999999999 2.0417200000000002 +-5.93499 130.953 1.71211 +3.8325100000000001 56.065199999999997 1.84395 +2.8876200000000001 106.60599999999999 1.55829 +-4.5286400000000002 33.585700000000003 1.5253300000000001 +3.8325100000000001 84.148099999999999 1.84395 +-2.0345800000000001 104.738 1.44842 +2.8876200000000001 110.363 1.9648099999999999 +-5.8800499999999998 114.099 1.6901299999999999 +0.80008000000000001 102.85899999999999 1.4594 +0.29467500000000002 29.850100000000001 1.44842 +-2.0345800000000001 93.498099999999994 2.0746799999999999 +-2.7816999999999998 89.762500000000003 1.4594 +2.8876200000000001 12.995900000000001 1.9648099999999999 +1.04179 89.762500000000003 2.0527000000000002 +-2.53999 138.435 1.44842 +-2.28728 97.244699999999995 1.44842 +-3.49586 89.762500000000003 2.0417200000000002 +3.9753400000000001 44.825400000000002 1.7890200000000001 +-2.0345800000000001 129.07400000000001 2.0746799999999999 +1.2725200000000001 71.040599999999998 2.0417200000000002 +3.7555999999999998 37.332299999999996 1.85494 +3.9753400000000001 76.654899999999998 1.7890200000000001 +3.0524300000000002 22.3569 1.5692699999999999 +3.5688200000000001 89.762500000000003 1.8878999999999999 +-3.2651300000000001 140.31399999999999 2.0417200000000002 +4.0083000000000002 31.7179 1.7560500000000001 +3.8984299999999998 48.572000000000003 1.8219799999999999 +2.8876200000000001 37.332299999999996 1.55829 +-1.2544999999999999 61.668599999999998 1.43743 +1.7339800000000001 127.206 2.0307300000000001 +1.50325 127.206 2.0417200000000002 +-5.8800499999999998 93.498099999999994 1.6901299999999999 +2.72282 57.921999999999997 1.5472999999999999 +2.8876200000000001 56.065199999999997 1.55829 +-2.7816999999999998 82.269300000000001 1.4594 +-3.0234200000000002 56.065199999999997 2.0527000000000002 +0.80008000000000001 91.630300000000005 2.0636899999999998 +1.04179 108.48399999999999 1.4594 +0.80008000000000001 108.48399999999999 1.4594 +-4.7154199999999999 84.148099999999999 1.5472999999999999 +-4.5286400000000002 112.22 1.98678 +2.72282 93.498099999999994 1.9758 +-5.3197099999999997 57.921999999999997 1.92086 +-5.1878700000000002 57.921999999999997 1.9318500000000001 +-0.21073 48.572000000000003 1.43743 +0.54737800000000003 117.845 1.44842 +3.9753400000000001 26.1035 1.7890200000000001 +3.94238 142.18199999999999 1.71211 +1.9427300000000001 114.099 2.0197400000000001 +3.4589500000000002 48.572000000000003 1.90987 +3.0524300000000002 86.015900000000002 1.5692699999999999 +-4.3418599999999996 48.572000000000003 1.99777 +1.2725200000000001 97.244699999999995 2.0417200000000002 +2.5360399999999998 33.585700000000003 1.98678 +-3.2651300000000001 123.45999999999999 2.0417200000000002 +-2.0345800000000001 142.18199999999999 1.44842 +-5.3197099999999997 140.31399999999999 1.92086 +-5.4515599999999997 140.31399999999999 1.90987 +-2.28728 50.439799999999998 1.44842 +0.80008000000000001 31.7179 1.4594 +0.80008000000000001 35.464500000000001 1.4594 +2.5360399999999998 80.401499999999999 1.5253300000000001 +0.54737800000000003 99.123500000000007 1.44842 +-2.7816999999999998 72.9084 1.4594 +-4.8802300000000001 129.07400000000001 1.9648099999999999 +-4.8802300000000001 130.953 1.9648099999999999 +-5.93499 108.48399999999999 1.8109900000000001 +1.9427300000000001 134.69999999999999 2.0197400000000001 +-0.990811 67.283000000000001 1.43743 +-3.49586 74.787099999999995 1.4813799999999999 +-4.3418599999999996 114.099 1.99777 +-1.5181899999999999 110.363 2.0746799999999999 +-2.28728 87.883700000000005 2.0746799999999999 +0.041973099999999999 121.592 1.44842 +-5.8800499999999998 31.7179 1.8219799999999999 +-2.0345800000000001 138.435 2.0746799999999999 +-5.66031 14.8637 1.8769100000000001 +3.0524300000000002 82.269300000000001 1.5692699999999999 +3.9753400000000001 69.161799999999999 1.72309 +-5.0450400000000002 14.8637 1.5692699999999999 +-2.53999 129.07400000000001 2.0636899999999998 +-2.7816999999999998 114.099 2.0636899999999998 +3.1952600000000002 106.60599999999999 1.58026 +3.0524300000000002 121.581 1.5692699999999999 +-5.66031 125.339 1.8769100000000001 +-3.49586 101.002 1.4813799999999999 +-4.8802300000000001 140.31399999999999 1.9648099999999999 +1.2725200000000001 63.547400000000003 2.0417200000000002 +-0.21073 35.464500000000001 2.0746799999999999 +-5.8800499999999998 24.224699999999999 1.8219799999999999 +1.2725200000000001 80.401499999999999 1.4703900000000001 +1.04179 82.269300000000001 1.4594 +-5.9899199999999997 69.161799999999999 1.7450699999999999 +-0.73810900000000002 121.581 2.0746799999999999 +-5.1878700000000002 31.7179 1.9318500000000001 +-0.990811 119.71299999999999 2.0746799999999999 +0.54737800000000003 48.572000000000003 1.44842 +-5.8251200000000001 26.1035 1.84395 +-5.9899199999999997 54.186399999999999 1.77803 +-1.2544999999999999 76.654899999999998 1.43743 +-5.5614299999999997 99.123500000000007 1.6242099999999999 +-2.0345800000000001 72.9084 2.0746799999999999 +-0.47442000000000001 59.800800000000002 2.0746799999999999 +1.9427300000000001 129.07400000000001 2.0197400000000001 +0.041973099999999999 106.60599999999999 2.0746799999999999 +-3.0234200000000002 41.078800000000001 1.4594 +3.4589500000000002 84.148099999999999 1.6132200000000001 +-1.2544999999999999 39.210999999999999 2.0746799999999999 +0.29467500000000002 119.71299999999999 1.44842 +-1.2544999999999999 114.099 2.0746799999999999 +3.8325100000000001 12.995900000000001 1.84395 +-2.0345800000000001 20.489100000000001 2.0746799999999999 +3.0524300000000002 20.489100000000001 1.5692699999999999 +1.7339800000000001 50.439799999999998 1.4923599999999999 +2.8876200000000001 104.738 1.55829 +3.5688200000000001 65.426199999999994 1.6242099999999999 +3.9753400000000001 14.8637 1.72309 +0.80008000000000001 48.572000000000003 2.0636899999999998 +1.9427300000000001 142.18199999999999 1.4923599999999999 +0.041973099999999999 129.07400000000001 2.0746799999999999 +3.0524300000000002 44.825400000000002 1.9428300000000001 +-5.0450400000000002 78.5227 1.5692699999999999 +-4.1440999999999999 102.85899999999999 2.0087600000000001 +-0.21073 99.123500000000007 1.43743 +-5.66031 91.630300000000005 1.64618 +2.72282 91.630300000000005 1.5472999999999999 +-3.49586 78.5227 1.4813799999999999 +0.041973099999999999 16.7425 2.0746799999999999 +-3.0234200000000002 119.71299999999999 2.0527000000000002 +-2.28728 78.5227 2.0746799999999999 +-1.2544999999999999 44.825400000000002 2.0746799999999999 +2.8876200000000001 97.244699999999995 1.9648099999999999 +-4.5286400000000002 119.71299999999999 1.5253300000000001 +-5.7482100000000003 59.800800000000002 1.65717 +-2.53999 140.31399999999999 2.0636899999999998 +-4.1440999999999999 140.31399999999999 2.0087600000000001 +3.8325100000000001 114.099 1.84395 +-5.66031 46.693199999999997 1.8769100000000001 +1.9427300000000001 101.002 2.0197400000000001 +-2.53999 59.800800000000002 1.44842 +-4.7154199999999999 33.585700000000003 1.5472999999999999 +-0.47442000000000001 61.668599999999998 2.0746799999999999 +-4.1440999999999999 136.56700000000001 1.50335 +0.54737800000000003 102.85899999999999 1.44842 +-5.3197099999999997 42.946599999999997 1.6022400000000001 +3.94238 110.363 1.8109900000000001 +-2.0345800000000001 57.921999999999997 2.0746799999999999 +-5.66031 65.426199999999994 1.8769100000000001 +1.04179 50.439799999999998 2.0527000000000002 +-5.1878700000000002 99.123500000000007 1.58026 +3.94238 136.56700000000001 1.8109900000000001 +0.041973099999999999 54.186399999999999 1.44842 +-0.990811 84.148099999999999 2.0746799999999999 +-5.0450400000000002 142.18199999999999 1.5692699999999999 +1.7339800000000001 129.07400000000001 2.0307300000000001 +-3.9353400000000001 50.439799999999998 1.50335 +-5.9679500000000001 136.56700000000001 1.7890200000000001 +0.29467500000000002 50.439799999999998 1.44842 +-5.7482100000000003 106.60599999999999 1.65717 +1.50325 117.845 2.0417200000000002 +-5.93499 87.883700000000005 1.8109900000000001 +2.72282 61.668599999999998 1.9758 +3.5688200000000001 12.995900000000001 1.6242099999999999 +2.72282 26.1035 1.5472999999999999 +0.80008000000000001 101.002 2.0636899999999998 +-4.3418599999999996 76.654899999999998 1.99777 +-5.3197099999999997 48.572000000000003 1.6022400000000001 +-5.93499 129.07400000000001 1.71211 +-1.5181899999999999 140.31399999999999 1.43743 +2.72282 72.9084 1.5472999999999999 +-1.2544999999999999 12.995900000000001 1.43743 +3.9973100000000001 117.845 1.77803 +3.9973100000000001 132.821 1.77803 +3.5688200000000001 110.363 1.6242099999999999 +-0.47442000000000001 78.5227 1.43743 +-5.5614299999999997 125.339 1.8878999999999999 +3.8984299999999998 87.883700000000005 1.8219799999999999 +-1.7818799999999999 95.376900000000006 2.0746799999999999 +-0.990811 114.099 2.0746799999999999 +2.3492600000000001 84.148099999999999 1.51434 +-1.5181899999999999 129.07400000000001 2.0746799999999999 +-4.7154199999999999 106.60599999999999 1.9758 +-2.53999 52.307600000000001 1.44842 +-2.7816999999999998 52.307600000000001 1.4594 +-4.8802300000000001 63.547400000000003 1.55829 +0.54737800000000003 61.668599999999998 2.0636899999999998 +-1.2544999999999999 78.5227 1.43743 +3.5688200000000001 52.307600000000001 1.8878999999999999 +-4.3418599999999996 35.464500000000001 1.99777 +3.9753400000000001 117.845 1.72309 +-5.93499 18.610299999999999 1.8109900000000001 +1.7339800000000001 89.762500000000003 2.0307300000000001 +3.7555999999999998 35.464500000000001 1.85494 +-0.47442000000000001 119.71299999999999 1.43743 +0.80008000000000001 93.498099999999994 1.4594 +2.5360399999999998 35.464500000000001 1.98678 +3.4589500000000002 142.18199999999999 1.6132200000000001 +-0.73810900000000002 132.821 1.43743 +-0.990811 22.3569 1.43743 +-0.73810900000000002 20.489100000000001 1.43743 +-4.7154199999999999 78.5227 1.5472999999999999 +-1.7818799999999999 129.07400000000001 1.43743 +3.3380899999999998 106.60599999999999 1.92086 +2.1514899999999999 134.69999999999999 2.0087600000000001 +-4.7154199999999999 71.040599999999998 1.5472999999999999 +2.5360399999999998 112.22 1.98678 +1.2725200000000001 127.206 1.4703900000000001 +3.0524300000000002 61.668599999999998 1.5692699999999999 +-4.7154199999999999 130.953 1.9758 +-1.2544999999999999 138.435 1.43743 +-5.8800499999999998 67.283000000000001 1.6901299999999999 +-4.8802300000000001 115.97799999999999 1.55829 +-3.9353400000000001 35.464500000000001 2.0197400000000001 +3.8984299999999998 104.738 1.6901299999999999 +2.1514899999999999 29.850100000000001 1.50335 +-5.0450400000000002 59.800800000000002 1.9428300000000001 +1.7339800000000001 101.002 2.0307300000000001 +-5.9679500000000001 52.307600000000001 1.72309 +-4.5286400000000002 61.668599999999998 1.5253300000000001 +-5.1878700000000002 87.883700000000005 1.58026 +-4.3418599999999996 72.9084 1.51434 +-4.3418599999999996 16.7425 1.99777 +2.8876200000000001 14.8637 1.9648099999999999 +-3.2651300000000001 142.18199999999999 1.4703900000000001 +-5.9899199999999997 125.339 1.7450699999999999 +-1.2544999999999999 82.269300000000001 1.43743 +-1.2544999999999999 123.45999999999999 2.0746799999999999 +2.72282 56.065199999999997 1.5472999999999999 +-4.8802300000000001 71.040599999999998 1.55829 +-5.0450400000000002 71.040599999999998 1.5692699999999999 +-3.49586 14.8637 2.0417200000000002 +-5.8800499999999998 140.31399999999999 1.8219799999999999 +-5.8800499999999998 42.946599999999997 1.8219799999999999 +3.3380899999999998 56.065199999999997 1.92086 +3.67869 142.18199999999999 1.64618 +-3.9353400000000001 52.307600000000001 2.0197400000000001 +-4.7154199999999999 56.065199999999997 1.9758 +-0.990811 84.148099999999999 1.43743 +-5.4515599999999997 115.97799999999999 1.90987 +-5.3197099999999997 93.498099999999994 1.92086 +1.2725200000000001 61.668599999999998 2.0417200000000002 +-4.5286400000000002 63.547400000000003 1.5253300000000001 +-5.93499 74.787099999999995 1.71211 +-4.5286400000000002 46.693199999999997 1.5253300000000001 +-4.3418599999999996 46.693199999999997 1.51434 +-5.5614299999999997 14.8637 1.8878999999999999 +2.8876200000000001 97.244699999999995 1.55829 +3.7555999999999998 142.18199999999999 1.65717 +-3.49586 42.946599999999997 1.4813799999999999 +-3.2651300000000001 24.224699999999999 1.4703900000000001 +-4.1440999999999999 48.572000000000003 1.50335 +-4.1440999999999999 50.439799999999998 1.50335 +1.04179 20.489100000000001 1.4594 +-1.2544999999999999 63.547400000000003 1.43743 +-4.7154199999999999 26.1035 1.9758 +-3.9353400000000001 52.307600000000001 1.50335 +-1.2544999999999999 65.426199999999994 2.0746799999999999 +-5.4515599999999997 16.7425 1.6132200000000001 +3.1952600000000002 12.995900000000001 1.9318500000000001 +3.9753400000000001 56.065199999999997 1.72309 +3.5688200000000001 76.654899999999998 1.6242099999999999 +3.8984299999999998 110.363 1.8219799999999999 +-4.3418599999999996 115.97799999999999 1.99777 +-3.0234200000000002 24.224699999999999 1.4594 +3.67869 37.332299999999996 1.64618 +-0.21073 41.078800000000001 1.43743 +2.3492600000000001 86.015900000000002 1.51434 +-5.3197099999999997 82.269300000000001 1.6022400000000001 +-5.93499 71.040599999999998 1.71211 +-5.0450400000000002 115.97799999999999 1.5692699999999999 +-5.9679500000000001 95.376900000000006 1.72309 +3.4589500000000002 74.787099999999995 1.90987 +-4.8802300000000001 24.224699999999999 1.9648099999999999 +-1.7818799999999999 31.7179 1.43743 +-4.3418599999999996 130.953 1.99777 +3.8325100000000001 78.5227 1.6791400000000001 +-1.5181899999999999 84.148099999999999 2.0746799999999999 +0.80008000000000001 12.995900000000001 1.4594 +0.54737800000000003 93.498099999999994 1.44842 +3.9973100000000001 67.283000000000001 1.7450699999999999 +2.5360399999999998 27.971299999999999 1.98678 +-3.49586 91.630300000000005 1.4813799999999999 +-1.2544999999999999 84.148099999999999 1.43743 +-3.7155999999999998 33.585700000000003 1.4923599999999999 +-5.9899199999999997 132.821 1.7450699999999999 +-3.0234200000000002 104.738 2.0527000000000002 +-5.3197099999999997 22.3569 1.92086 +-5.7482100000000003 35.464500000000001 1.65717 +-3.9353400000000001 65.426199999999994 1.50335 +-1.5181899999999999 127.206 1.43743 +-4.1440999999999999 106.60599999999999 1.50335 +-5.1878700000000002 69.161799999999999 1.58026 +-4.1440999999999999 93.498099999999994 1.50335 +1.2725200000000001 117.845 2.0417200000000002 +3.4589500000000002 57.921999999999997 1.90987 +-0.21073 142.18199999999999 1.43743 +3.4589500000000002 16.7425 1.6132200000000001 +0.29467500000000002 86.015900000000002 2.0746799999999999 +2.1514899999999999 89.762500000000003 2.0087600000000001 +3.8984299999999998 127.206 1.8219799999999999 +-5.9899199999999997 14.8637 1.7450699999999999 +-5.8251200000000001 14.8637 1.84395 +-2.53999 136.56700000000001 2.0636899999999998 +-3.49586 18.610299999999999 1.4813799999999999 +-4.7154199999999999 57.921999999999997 1.9758 +3.8984299999999998 142.18199999999999 1.8219799999999999 +-3.9353400000000001 14.8637 1.50335 +-3.7155999999999998 14.8637 2.0307300000000001 +-0.990811 140.31399999999999 2.0746799999999999 +3 0 4185 3658 +3 2 4 1 +3 4 3489 3 +3 5 8144 18 +3 5 7934 8144 +3 6 8180 19 +3 8180 7 19 +3 9 8 7 +3 9 6368 8 +3 10 3381 7902 +3 10 8032 3381 +3 12 11 7762 +3 12 13 11 +3 13 5260 11 +3 13 6182 5260 +3 14 6513 26 +3 8222 54 31 +3 15 6352 55 +3 7998 542 7453 +3 16 4011 81 +3 468 17 39 +3 468 3658 17 +3 1 41 6326 +3 1 3 41 +3 18 5588 3491 +3 19 20 550 +3 7 21 20 +3 8 72 21 +3 22 3430 6500 +3 11 23 24 +3 11 5260 23 +3 25 7158 5259 +3 25 26 7158 +3 26 8038 48 +3 7769 6001 27 +3 6001 6066 47 +3 28 7522 3305 +3 1034 5057 29 +3 30 5057 1034 +3 30 31 53 +3 31 54 52 +3 32 55 6352 +3 32 8112 55 +3 7632 6941 33 +3 6941 88 33 +3 7453 57 89 +3 7453 542 57 +3 542 58 57 +3 34 3680 3822 +3 36 61 35 +3 36 8152 62 +3 5462 65 37 +3 38 67 65 +3 39 5482 7663 +3 6326 3487 40 +3 6326 41 3487 +3 3491 5574 5306 +3 3476 550 42 +3 550 70 42 +3 550 20 70 +3 21 71 43 +3 21 72 71 +3 3009 75 7412 +3 3009 3382 75 +3 7762 7831 7604 +3 76 102 477 +3 24 45 44 +3 23 77 45 +3 5259 46 77 +3 7158 78 46 +3 48 583 78 +3 48 47 583 +3 6066 393 49 +3 393 3305 49 +3 51 5778 50 +3 29 5057 82 +3 53 52 514 +3 55 54 15 +3 55 56 54 +3 56 3198 52 +3 7633 33 87 +3 89 91 6288 +3 89 57 91 +3 57 4022 91 +3 57 58 4022 +3 59 4009 4027 +3 35 93 3685 +3 61 584 60 +3 62 6571 94 +3 37 64 63 +3 65 66 64 +3 67 5797 66 +3 7663 3656 5796 +3 68 99 7005 +3 68 40 99 +3 40 3487 69 +3 5306 5508 5374 +3 5587 42 100 +3 42 2200 100 +3 42 70 2200 +3 70 101 2200 +3 70 43 101 +3 43 71 137 +3 3429 71 72 +3 3429 73 71 +3 7412 5604 74 +3 7412 75 5604 +3 44 102 76 +3 44 105 102 +3 45 77 4499 +3 46 109 531 +3 46 78 109 +3 6067 7777 79 +3 545 80 3710 +3 7453 89 7770 +3 16 81 7117 +3 5688 82 7614 +3 82 83 7614 +3 6895 5422 83 +3 6895 84 5422 +3 6895 85 84 +3 53 85 30 +3 85 53 86 +3 86 84 85 +3 84 86 113 +3 635 117 7575 +3 635 87 117 +3 89 88 7770 +3 6288 466 90 +3 6288 118 466 +3 6288 91 118 +3 91 4019 118 +3 91 4022 4019 +3 4027 6496 6411 +3 6936 120 4954 +3 6936 3679 120 +3 93 92 122 +3 93 60 92 +3 584 125 7192 +3 584 94 125 +3 94 95 125 +3 96 127 95 +3 63 4449 97 +3 63 64 4449 +3 64 66 129 +3 66 5797 131 +3 5796 98 133 +3 5796 3656 98 +3 7005 3263 7103 +3 7005 99 3263 +3 99 3484 3263 +3 99 69 3484 +3 3475 135 5507 +3 3475 100 135 +3 2200 101 136 +3 101 139 136 +3 74 3380 3428 +3 74 5604 3380 +3 102 7213 477 +3 529 103 7214 +3 105 529 102 +3 104 103 529 +3 105 142 104 +3 105 7196 142 +3 7196 4499 106 +3 4499 107 106 +3 531 3327 107 +3 531 109 3327 +3 109 7885 108 +3 7885 110 108 +3 582 3303 110 +3 3272 572 8218 +3 581 7614 4434 +3 5422 111 152 +3 113 6649 112 +3 114 6649 514 +3 7575 117 7819 +3 117 115 7819 +3 117 116 115 +3 466 118 4373 +3 118 4019 119 +3 4954 120 157 +3 122 123 121 +3 92 159 123 +3 92 527 159 +3 7192 125 124 +3 125 164 124 +3 95 126 164 +3 95 127 126 +3 127 166 126 +3 97 4449 128 +3 129 169 168 +3 129 131 169 +3 131 130 169 +3 131 7673 130 +3 7673 4225 130 +3 133 5296 132 +3 134 7711 3473 +3 135 5339 247 +3 135 2201 5339 +3 2201 174 5339 +3 2201 136 174 +3 73 138 137 +3 138 139 137 +3 140 540 139 +3 3428 3376 175 +3 103 104 141 +3 104 176 141 +3 104 142 176 +3 142 106 178 +3 106 107 143 +3 107 3327 6680 +3 108 180 7482 +3 108 110 180 +3 110 181 180 +3 110 3303 181 +3 7061 144 145 +3 7061 549 144 +3 7061 3228 549 +3 7061 146 3228 +3 8218 147 146 +3 572 3229 147 +3 148 6947 3229 +3 7903 3430 149 +3 150 7270 3216 +3 7270 4433 3216 +3 4433 4432 3216 +3 4434 151 5109 +3 151 191 5109 +3 151 152 191 +3 152 192 191 +3 3181 112 6730 +3 112 153 6224 +3 7546 114 3198 +3 7546 154 114 +3 154 4161 153 +3 7819 155 8019 +3 4373 7672 539 +3 4701 4008 5132 +3 4701 7143 4008 +3 187 3678 156 +3 187 157 3678 +3 524 158 3688 +3 121 196 158 +3 121 123 196 +3 123 197 196 +3 123 159 197 +3 159 526 160 +3 526 5257 160 +3 526 161 5257 +3 162 198 161 +3 162 124 198 +3 124 164 163 +3 164 165 163 +3 126 200 165 +3 126 166 200 +3 166 201 200 +3 6333 204 167 +3 6333 128 204 +3 128 168 8049 +3 168 169 170 +3 130 171 1711 +3 4225 209 171 +3 7277 570 1802 +3 3494 3473 6109 +3 4613 172 173 +3 4613 247 172 +3 174 1863 523 +3 174 540 1863 +3 540 6714 1863 +3 175 6811 3426 +3 497 141 7968 +3 141 212 7968 +3 141 176 212 +3 176 177 212 +3 178 6593 177 +3 178 143 6593 +3 7482 180 179 +3 180 7661 179 +3 180 181 7661 +3 3302 182 4743 +3 183 219 3270 +3 549 7053 144 +3 548 7587 184 +3 548 185 3227 +3 549 3228 185 +3 560 3102 6576 +3 186 3104 3102 +3 4954 157 187 +3 582 79 3303 +3 5507 247 4613 +3 3491 5588 5574 +3 7904 4668 188 +3 4432 225 189 +3 5109 191 190 +3 191 226 190 +3 191 192 226 +3 192 1898 226 +3 111 5402 192 +3 5402 1898 192 +3 5402 193 1898 +3 5854 228 5235 +3 6730 6224 194 +3 4162 391 5934 +3 4162 8019 391 +3 5132 4007 195 +3 5132 4008 4007 +3 156 3676 3817 +3 156 3678 3676 +3 3688 158 7026 +3 158 233 7026 +3 158 196 233 +3 196 234 233 +3 197 160 6768 +3 5257 236 6116 +3 161 198 3144 +3 198 238 3144 +3 198 163 238 +3 163 8033 238 +3 163 165 8033 +3 165 199 8033 +3 165 200 199 +3 200 5727 199 +3 200 201 5727 +3 201 6856 5727 +3 167 203 202 +3 204 242 203 +3 8049 205 242 +3 170 206 205 +3 170 1711 206 +3 1711 207 206 +3 1711 171 207 +3 171 208 207 +3 171 209 208 +3 209 5275 208 +3 4224 5838 5214 +3 1802 3482 5647 +3 1802 210 3482 +3 6110 5849 6968 +3 523 251 249 +3 3426 6811 211 +3 7968 212 213 +3 177 258 585 +3 6593 6317 214 +3 216 260 215 +3 105 104 529 +3 216 179 260 +3 217 5672 3301 +3 3270 219 218 +3 219 4201 218 +3 219 3226 4201 +3 219 7587 3226 +3 7587 3227 3226 +3 7793 7944 220 +3 7793 221 7944 +3 221 223 8034 +3 223 3101 8034 +3 223 222 3101 +3 35 61 93 +3 3216 8179 150 +3 189 224 8179 +3 189 6774 224 +3 189 225 6774 +3 225 4431 6774 +3 190 226 6144 +3 226 264 6144 +3 5235 5110 227 +3 5235 228 5110 +3 228 194 2351 +3 391 470 6157 +3 229 7865 6570 +3 229 6956 7865 +3 6956 4017 533 +3 195 4007 532 +3 3817 269 3816 +3 3817 3676 269 +3 565 230 271 +3 7026 233 231 +3 233 232 231 +3 233 234 232 +3 234 5776 232 +3 6768 6116 5775 +3 6116 276 5775 +3 6116 236 276 +3 236 235 276 +3 236 521 235 +3 236 5595 521 +3 3144 277 237 +3 3144 238 277 +3 199 279 239 +3 202 283 240 +3 203 241 283 +3 203 242 241 +3 242 5079 241 +3 206 7732 243 +3 208 5275 244 +3 246 287 245 +3 246 5647 287 +3 5647 3481 287 +3 5647 3482 3481 +3 6968 7784 7693 +3 5458 6165 288 +3 568 172 247 +3 248 6165 5458 +3 248 249 250 +3 249 251 5656 +3 251 3425 5656 +3 3427 6057 252 +3 498 253 580 +3 256 498 254 +3 256 213 255 +3 213 289 255 +3 213 585 289 +3 585 258 257 +3 258 3325 257 +3 258 214 3325 +3 215 259 7564 +3 260 3300 259 +3 260 7086 3300 +3 3301 291 261 +3 3301 5672 291 +3 87 90 116 +3 4716 6852 7083 +3 6774 4431 262 +3 4431 292 262 +3 6144 264 4429 +3 264 263 4429 +3 264 265 263 +3 265 294 263 +3 193 6143 265 +3 6143 294 265 +3 227 5110 5162 +3 7549 267 7996 +3 6157 266 267 +3 6157 470 266 +3 3816 268 7386 +3 3816 269 268 +3 271 272 270 +3 230 536 272 +3 230 231 536 +3 231 274 536 +3 232 273 274 +3 5775 276 275 +3 276 892 275 +3 235 552 300 +3 237 277 301 +3 277 557 302 +3 239 303 556 +3 279 278 303 +3 279 5496 278 +3 5496 280 278 +3 281 307 280 +3 240 309 282 +3 240 283 309 +3 283 4871 309 +3 243 3691 312 +3 7732 6519 284 +3 6519 244 314 +3 244 285 314 +3 6834 4223 285 +3 4222 3651 286 +3 287 3479 559 +3 3472 7532 3471 +3 3472 288 7532 +3 6165 7369 3572 +3 252 3374 3424 +3 252 6057 3374 +3 253 255 323 +3 255 7947 323 +3 255 289 7947 +3 289 257 290 +3 257 3324 290 +3 257 3325 3324 +3 259 3300 3298 +3 261 291 327 +3 741 5645 6671 +3 573 3097 3095 +3 4196 3225 7228 +3 5582 3097 3224 +3 4717 4714 335 +3 262 5718 4666 +3 5718 338 4666 +3 262 292 5718 +3 292 5066 5718 +3 263 6147 293 +3 263 294 6147 +3 462 340 295 +3 462 5162 340 +3 7996 267 296 +3 6569 409 6383 +3 8016 5443 522 +3 270 5768 3690 +3 536 274 297 +3 273 299 298 +3 5828 347 299 +3 275 892 5925 +3 892 392 5925 +3 892 300 392 +3 300 350 392 +3 7648 301 352 +3 301 302 562 +3 556 5936 2792 +3 556 303 5936 +3 303 305 5936 +3 278 304 305 +3 278 280 304 +3 280 306 304 +3 280 307 306 +3 307 308 306 +3 282 309 308 +3 309 310 308 +3 4871 354 310 +3 4871 311 354 +3 311 312 355 +3 3691 284 357 +3 284 313 357 +3 284 314 313 +3 314 285 315 +3 285 360 315 +3 285 4223 360 +3 4223 4219 360 +3 316 286 3939 +3 318 317 3614 +3 318 559 317 +3 559 363 317 +3 559 3479 363 +3 3499 7351 319 +3 3572 7369 6015 +3 7369 5726 6015 +3 6108 367 5657 +3 3424 320 369 +3 579 321 322 +3 579 323 321 +3 323 7947 324 +3 7947 4760 324 +3 290 3324 547 +3 326 553 325 +3 553 373 325 +3 553 3298 373 +3 3299 327 3267 +3 328 3269 6142 +3 328 375 3269 +3 6597 331 329 +3 3049 330 331 +3 3050 563 3833 +3 3049 537 330 +3 6852 332 333 +3 262 4666 334 +3 5790 335 336 +3 335 4715 337 +3 333 4667 6026 +3 338 339 4664 +3 5066 4427 339 +3 403 402 6146 +3 295 340 6510 +3 340 341 6435 +3 4160 2351 194 +3 4159 4158 5111 +3 4158 341 5111 +3 4158 4169 341 +3 343 407 342 +3 343 296 407 +3 296 5218 5336 +3 3690 6972 6408 +3 3690 5768 6972 +3 344 297 413 +3 297 345 413 +3 297 298 345 +3 299 346 756 +3 299 347 346 +3 347 349 346 +3 5925 348 349 +3 392 350 415 +3 350 6461 7079 +3 6461 6661 7079 +3 6461 351 6661 +3 352 562 6037 +3 2792 418 561 +3 310 354 6911 +3 354 353 6911 +3 354 355 353 +3 355 525 421 +3 357 423 356 +3 313 315 358 +3 315 681 358 +3 315 360 681 +3 360 359 681 +3 4219 4218 359 +3 361 7753 427 +3 3614 362 3612 +3 317 6183 362 +3 317 363 6183 +3 365 430 364 +3 365 319 430 +3 5411 3863 3470 +3 5411 4988 3863 +3 4988 432 3863 +3 4988 3471 7532 +3 6016 5887 432 +3 6015 5726 366 +3 5726 367 3423 +3 369 368 8114 +3 322 499 370 +3 322 371 499 +3 321 324 372 +3 324 2523 372 +3 324 4760 2523 +3 1958 325 5229 +3 325 7727 5229 +3 325 373 7727 +3 5813 374 567 +3 375 7385 6793 +3 375 7804 7385 +3 3223 3091 7530 +3 3096 3223 376 +3 379 377 5224 +3 379 378 377 +3 379 564 378 +3 329 437 378 +3 329 331 5097 +3 331 4355 5097 +3 330 380 4837 +3 380 381 4837 +3 3833 4356 381 +3 383 384 382 +3 384 439 382 +3 384 8199 439 +3 8199 441 439 +3 385 386 7580 +3 386 443 7580 +3 386 387 443 +3 387 444 443 +3 387 388 444 +3 388 389 445 +3 389 448 445 +3 389 390 448 +3 390 449 448 +3 390 7588 449 +3 7588 451 449 +3 391 469 470 +3 5925 392 348 +3 28 3305 393 +3 6277 394 395 +3 336 337 5059 +3 397 399 396 +3 6026 398 399 +3 4664 554 400 +3 4664 339 554 +3 4428 6146 401 +3 6146 457 401 +3 6146 402 457 +3 402 405 457 +3 4256 403 294 +3 4256 4259 403 +3 4259 402 403 +3 4259 404 402 +3 404 7548 405 +3 463 4173 5503 +3 342 407 406 +3 407 465 406 +3 6382 473 471 +3 409 4013 408 +3 408 4013 472 +3 6615 4005 410 +3 411 3673 3814 +3 6972 5169 412 +3 5169 478 412 +3 5169 413 478 +3 413 5922 478 +3 346 480 479 +3 346 349 480 +3 349 1415 480 +3 348 415 1414 +3 415 7734 1414 +3 415 414 7734 +3 414 7460 416 +3 6661 7259 2026 +3 6037 482 574 +3 561 417 482 +3 561 418 417 +3 418 419 483 +3 419 484 483 +3 420 353 484 +3 353 421 484 +3 421 356 422 +3 356 423 486 +3 423 358 424 +3 358 488 424 +3 358 681 488 +3 359 489 425 +3 4218 426 489 +3 427 5141 4217 +3 3612 491 3611 +3 3612 362 491 +3 362 428 491 +3 362 6183 428 +3 364 429 555 +3 364 430 429 +3 3470 492 3469 +3 3470 3863 492 +3 432 431 494 +3 5887 495 431 +3 5887 366 495 +3 433 371 503 +3 371 434 503 +3 575 372 569 +3 372 504 569 +3 372 2523 504 +3 5229 506 576 +3 5229 7727 506 +3 7491 435 543 +3 5259 7158 46 +3 435 436 8136 +3 377 4351 5225 +3 377 4353 4351 +3 378 437 4353 +3 438 382 511 +3 382 513 511 +3 382 439 513 +3 439 441 440 +3 441 442 440 +3 7580 515 442 +3 7580 443 515 +3 443 444 6127 +3 444 445 446 +3 445 448 5971 +3 448 447 5971 +3 448 449 447 +3 449 451 5520 +3 451 541 450 +3 453 454 452 +3 454 518 452 +3 454 520 518 +3 55 8112 56 +3 3691 357 525 +3 524 121 158 +3 394 4251 7547 +3 7319 4712 7751 +3 396 399 4371 +3 371 575 434 +3 400 455 5930 +3 400 554 455 +3 554 4425 455 +3 4425 4424 455 +3 401 457 4426 +3 457 456 4426 +3 457 405 456 +3 405 4255 456 +3 113 458 84 +3 458 113 3181 +3 5854 459 460 +3 461 227 462 +3 462 6455 461 +3 4260 295 463 +3 6047 406 464 +3 406 4107 464 +3 406 465 4107 +3 466 467 116 +3 467 6957 115 +3 6957 155 115 +3 0 3658 468 +3 229 469 155 +3 6570 470 469 +3 6569 266 470 +3 6569 6383 266 +3 6383 5218 266 +3 6382 471 5336 +3 471 465 5336 +3 471 4106 465 +3 473 6387 5096 +3 473 472 6387 +3 6614 4003 474 +3 6614 410 4003 +3 3814 3776 3812 +3 3814 3673 3776 +3 6601 6686 3671 +3 6601 476 6686 +3 476 475 6686 +3 476 412 475 +3 76 477 7831 +3 412 3669 475 +3 412 478 3669 +3 478 3668 3669 +3 5922 1119 7471 +3 1119 3666 7471 +3 1119 479 3666 +3 479 480 481 +3 480 1415 3664 +3 1415 8029 3664 +3 416 6222 577 +3 7460 7618 6222 +3 2026 6415 7618 +3 574 482 5456 +3 482 528 5456 +3 417 483 6495 +3 483 484 422 +3 486 424 485 +3 424 488 4177 +3 488 487 4177 +3 488 425 487 +3 425 4178 487 +3 425 489 4178 +3 489 4179 4178 +3 426 4215 4179 +3 3611 491 490 +3 491 3478 490 +3 3469 492 2146 +3 492 3432 2146 +3 494 493 3432 +3 431 5146 493 +3 431 495 5146 +3 7942 5190 3421 +3 7942 7763 5190 +3 103 497 496 +3 497 3379 496 +3 497 254 3379 +3 254 3377 3379 +3 254 498 3377 +3 498 580 6929 +3 580 3375 6929 +3 580 370 3375 +3 370 499 6301 +3 499 433 500 +3 433 502 5850 +3 502 7877 5850 +3 502 501 535 +3 502 503 501 +3 503 538 501 +3 569 504 6808 +3 504 5480 6358 +3 576 3682 505 +3 576 506 3682 +3 566 8186 4361 +3 7241 507 7221 +3 4537 5108 3046 +3 4537 5899 508 +3 5899 509 508 +3 509 4349 508 +3 509 5128 4349 +3 509 543 5128 +3 543 4350 5128 +3 8136 510 4350 +3 5225 4351 510 +3 4584 511 6446 +3 511 513 512 +3 513 4233 512 +3 513 440 4233 +3 440 4236 4233 +3 440 442 4236 +3 3198 114 514 +3 515 6127 4240 +3 6127 516 4240 +3 446 5971 7022 +3 5520 7560 5616 +3 450 4243 7560 +3 450 517 4243 +3 517 452 6825 +3 452 518 4245 +3 518 4247 4245 +3 518 520 519 +3 520 4249 519 +3 274 298 297 +3 235 521 552 +3 756 479 1119 +3 570 210 1802 +3 313 358 423 +3 4029 522 4005 +3 5339 174 523 +3 3687 121 524 +3 312 3691 525 +3 356 486 422 +3 45 4499 7196 +3 418 483 417 +3 3424 3374 320 +3 56 52 54 +3 527 162 526 +3 417 6495 528 +3 102 529 7213 +3 7259 574 530 +3 77 46 531 +3 4028 532 5443 +3 344 413 5169 +3 6956 533 7865 +3 446 7022 516 +3 4716 534 6852 +3 4028 5443 8016 +3 502 535 7877 +3 3687 122 121 +3 272 536 344 +3 537 380 330 +3 546 288 3472 +3 154 153 114 +3 434 3328 538 +3 467 4373 539 +3 526 162 161 +3 136 139 540 +3 466 116 90 +3 241 5079 311 +3 7734 578 6361 +3 541 453 517 +3 8167 4024 542 +3 543 8136 4350 +3 545 6255 544 +3 6382 408 473 +3 20 43 70 +3 253 323 579 +3 546 5458 288 +3 515 4240 4238 +3 290 547 4760 +3 549 548 7053 +3 83 5422 152 +3 466 4373 467 +3 202 203 283 +3 6902 19 550 +3 6001 393 6066 +3 551 182 3302 +3 167 204 203 +3 552 7648 351 +3 6519 314 284 +3 267 266 5218 +3 259 3298 553 +3 4427 4425 554 +3 555 3468 3501 +3 557 239 556 +3 4668 558 534 +3 6255 50 544 +3 245 287 559 +3 560 186 3102 +3 562 2792 561 +3 563 5469 3833 +3 564 329 378 +3 3688 7026 565 +3 567 8186 566 +3 568 248 172 +3 575 569 434 +3 7103 3263 570 +3 4665 571 4371 +3 572 148 3229 +3 573 3224 3097 +3 7593 6037 574 +3 342 406 6047 +3 321 372 575 +3 3323 576 6168 +3 416 577 578 +3 4449 168 128 +3 580 579 370 +3 399 4665 4371 +3 442 515 4238 +3 215 260 259 +3 392 415 348 +3 107 6680 143 +3 424 4177 485 +3 5688 7614 581 +3 583 6067 582 +3 62 94 584 +3 179 7086 260 +3 212 177 585 +3 587 586 611 +3 587 588 586 +3 588 4378 6424 +3 589 612 4380 +3 589 7836 612 +3 590 614 7233 +3 591 6343 6633 +3 591 7119 6343 +3 6564 617 592 +3 5564 8090 593 +3 5735 594 8090 +3 595 7248 594 +3 595 5365 7248 +3 597 596 5364 +3 597 599 596 +3 599 8217 598 +3 8217 7499 598 +3 601 1214 600 +3 602 4527 7105 +3 604 3014 603 +3 5201 7810 6719 +3 8156 3273 3235 +3 5361 628 1364 +3 606 605 628 +3 606 7609 605 +3 607 5844 629 +3 608 4109 8153 +3 2701 609 7010 +3 5274 609 2099 +3 5274 610 609 +3 611 7611 698 +3 4380 612 613 +3 8075 4759 614 +3 4759 615 7233 +3 6677 5683 637 +3 616 5261 4887 +3 617 6698 7936 +3 6698 618 4112 +3 618 7473 641 +3 593 5875 6041 +3 596 619 644 +3 596 598 619 +3 598 6745 619 +3 598 7499 6745 +3 7499 621 620 +3 621 5455 620 +3 621 600 5455 +3 600 838 622 +3 838 646 622 +3 4530 623 648 +3 624 649 623 +3 624 625 649 +3 625 3015 649 +3 625 603 3015 +3 3183 6611 626 +3 6611 3184 4899 +3 6719 7810 6558 +3 4442 1011 6762 +3 5149 5192 627 +3 1364 628 5770 +3 605 653 7068 +3 605 630 653 +3 630 1216 653 +3 630 629 1216 +3 8057 7457 631 +3 632 7142 7585 +3 632 5497 6130 +3 5497 4113 6130 +3 698 634 633 +3 7611 2407 634 +3 7611 7541 2407 +3 636 703 4381 +3 7633 87 635 +3 636 613 703 +3 6318 637 668 +3 637 638 7434 +3 639 7620 8064 +3 4887 5368 4883 +3 4887 5261 5368 +3 5261 640 6635 +3 640 6512 6635 +3 4112 641 6347 +3 641 6041 6346 +3 6041 5875 5632 +3 5875 671 5632 +3 8131 7084 642 +3 7247 644 643 +3 644 4064 643 +3 6745 620 645 +3 5455 674 1466 +3 622 646 647 +3 648 676 4533 +3 623 678 676 +3 623 649 678 +3 649 3016 678 +3 649 3015 3016 +3 651 719 650 +3 7107 680 652 +3 7068 653 5961 +3 653 1216 654 +3 655 3384 7389 +3 6083 656 725 +3 657 763 656 +3 657 5720 763 +3 658 3525 3595 +3 658 7815 3525 +3 2236 1025 7874 +3 659 3566 3567 +3 6909 4181 3618 +3 660 687 4183 +3 660 7800 687 +3 7800 6602 687 +3 662 6491 661 +3 6433 6502 663 +3 6433 664 6502 +3 664 738 6502 +3 664 737 738 +3 665 5419 3378 +3 665 6130 5419 +3 634 666 5297 +3 4381 703 6348 +3 7722 5311 3542 +3 4758 668 706 +3 668 7434 667 +3 4883 5368 669 +3 6512 4948 670 +3 6347 6722 3120 +3 671 642 7652 +3 5927 643 672 +3 643 712 672 +3 4064 673 713 +3 673 645 3440 +3 645 715 3440 +3 1466 674 675 +3 647 4521 7197 +3 4533 676 677 +3 676 678 679 +3 678 3016 1295 +3 650 6076 7294 +3 652 5416 6342 +3 652 680 5416 +3 681 425 488 +3 6761 1366 682 +3 6761 1365 1366 +3 3975 721 683 +3 5961 654 6950 +3 656 762 2202 +3 684 6964 3436 +3 7874 5557 685 +3 3618 5348 3620 +3 3618 4181 5348 +3 4183 687 686 +3 687 7545 686 +3 661 730 7392 +3 7481 732 730 +3 689 733 688 +3 690 691 3734 +3 691 5873 3734 +3 693 692 898 +3 693 5256 692 +3 663 694 735 +3 6502 738 695 +3 3378 7067 739 +3 697 696 5716 +3 698 7298 5979 +3 633 700 699 +3 700 5400 5359 +3 702 701 4384 +3 6967 612 7836 +3 6925 6451 613 +3 6451 5490 703 +3 704 6943 6445 +3 704 3542 6943 +3 615 6910 705 +3 706 5002 7176 +3 706 667 5002 +3 7097 6320 6518 +3 707 669 744 +3 5367 708 709 +3 670 4948 746 +3 4948 3120 710 +3 6844 711 7236 +3 672 712 5382 +3 712 5695 5382 +3 712 713 5695 +3 713 714 5695 +3 3440 752 714 +3 3440 715 752 +3 715 6233 752 +3 715 675 6233 +3 717 754 716 +3 717 677 754 +3 677 679 5116 +3 679 718 5116 +3 3184 6935 4899 +3 3184 3186 6935 +3 3186 3153 6935 +3 5630 720 6558 +3 720 719 6558 +3 682 1366 1368 +3 683 721 6896 +3 721 6077 6058 +3 7799 722 8094 +3 3339 3340 723 +3 724 6596 6565 +3 724 7677 6596 +3 6083 725 726 +3 725 2994 3383 +3 2994 5809 7689 +3 2202 762 5124 +3 727 6136 6344 +3 685 8125 7327 +3 5557 3569 7989 +3 3620 728 6546 +3 3620 5348 728 +3 6899 686 729 +3 7392 768 6180 +3 7392 730 768 +3 730 732 731 +3 732 5095 769 +3 688 733 770 +3 733 6014 770 +3 5873 3780 3735 +3 735 736 734 +3 694 3973 736 +3 665 737 7142 +3 739 695 738 +3 739 814 695 +3 740 8206 775 +3 5400 4388 777 +3 6445 6802 5992 +3 742 218 741 +3 6445 6943 6802 +3 7176 5005 4763 +3 7176 5002 5005 +3 5001 780 5003 +3 6518 6320 743 +3 4882 781 4881 +3 4882 744 781 +3 708 746 745 +3 746 710 2677 +3 710 6727 783 +3 7236 748 747 +3 748 8119 785 +3 5382 749 750 +3 714 752 751 +3 752 5528 751 +3 6233 753 4518 +3 716 788 7219 +3 716 754 788 +3 6488 755 791 +3 298 299 756 +3 6075 7529 3236 +3 757 5266 7736 +3 3274 4897 758 +3 4897 794 758 +3 4897 1368 794 +3 6058 7060 6624 +3 5955 759 2448 +3 5955 801 759 +3 761 760 7678 +3 761 762 760 +3 761 1972 5124 +3 762 763 760 +3 763 684 760 +3 684 3436 760 +3 761 6150 1972 +3 761 7678 6150 +3 4210 6152 764 +3 7327 8125 803 +3 7088 806 765 +3 729 6725 806 +3 767 766 6725 +3 6180 768 5931 +3 768 731 5560 +3 731 808 5560 +3 731 769 808 +3 769 809 808 +3 5095 770 811 +3 7946 3729 771 +3 3735 3780 3736 +3 3780 6010 3736 +3 6397 772 5329 +3 6397 5614 772 +3 734 773 1405 +3 736 813 773 +3 814 6457 5465 +3 775 774 7029 +3 5279 5932 8206 +3 5932 774 8206 +3 7922 3739 776 +3 3739 777 4258 +3 777 4387 4258 +3 4763 2069 778 +3 4763 5005 2069 +3 780 743 779 +3 4881 781 7252 +3 6568 782 1395 +3 6568 6009 782 +3 6009 821 782 +3 6009 745 821 +3 2677 783 8123 +3 783 3838 7562 +3 3838 5213 1205 +3 6491 7481 661 +3 5213 7139 1205 +3 747 785 784 +3 785 5649 784 +3 4939 750 825 +3 749 3851 786 +3 751 787 827 +3 751 5528 787 +3 5528 829 787 +3 4518 6377 829 +3 7219 788 7656 +3 788 789 7656 +3 7901 831 789 +3 7901 5761 831 +3 3187 3154 7034 +3 3187 3189 3154 +3 791 948 790 +3 7736 5266 792 +3 793 758 6193 +3 758 794 6684 +3 7394 6476 795 +3 6476 834 795 +3 7060 1219 796 +3 3340 797 1218 +3 797 1220 1218 +3 798 2732 5755 +3 798 3386 2732 +3 2448 799 5551 +3 759 800 799 +3 1935 759 801 +3 1935 800 759 +3 7326 802 6577 +3 803 839 802 +3 803 3570 839 +3 805 804 840 +3 765 841 5065 +3 765 806 841 +3 806 6725 807 +3 5560 808 6159 +3 808 6440 6159 +3 809 7708 1185 +3 809 7013 7708 +3 7013 811 810 +3 811 7662 6829 +3 7076 844 812 +3 7076 771 844 +3 771 6452 844 +3 771 1697 6452 +3 773 845 1404 +3 773 813 845 +3 814 3973 695 +3 5092 1922 813 +3 776 4258 3731 +3 5739 931 815 +3 4621 884 3170 +3 817 778 816 +3 778 5006 816 +3 6655 4931 818 +3 6655 779 4931 +3 4879 7252 819 +3 7252 820 819 +3 1395 1528 820 +3 782 821 2090 +3 821 852 2090 +3 821 822 852 +3 822 6952 852 +3 7562 823 8211 +3 1205 7660 823 +3 7139 784 824 +3 5649 825 7171 +3 825 6422 7171 +3 3851 826 4323 +3 3851 827 826 +3 827 828 826 +3 787 855 828 +3 787 829 855 +3 7656 789 830 +3 789 831 832 +3 6105 856 3238 +3 833 1333 5978 +3 833 795 1333 +3 795 858 1333 +3 834 7616 858 +3 799 835 836 +3 1973 3438 6038 +3 1973 6151 3438 +3 5901 837 7338 +3 838 7105 646 +3 802 839 8025 +3 840 6918 860 +3 5065 841 6022 +3 841 807 7128 +3 807 7871 7128 +3 807 6208 7871 +3 6208 8041 7871 +3 5281 6155 8041 +3 5281 842 6155 +3 842 843 6155 +3 6159 861 843 +3 6159 6440 861 +3 1185 7708 4661 +3 6829 5865 865 +3 812 844 7414 +3 6452 4885 870 +3 6011 3781 873 +3 1404 845 5203 +3 1922 847 846 +3 847 6801 846 +3 849 848 879 +3 3731 4389 7812 +3 850 815 882 +3 816 5006 887 +3 818 4931 851 +3 819 2148 6642 +3 819 820 2148 +3 820 3261 2148 +3 2090 852 5945 +3 8211 823 853 +3 7660 854 893 +3 824 895 854 +3 7171 6422 896 +3 4621 3170 5076 +3 826 2087 6792 +3 855 7535 7584 +3 5328 2481 4538 +3 7087 900 2481 +3 830 832 2131 +3 3190 951 904 +3 3190 7543 951 +3 3238 856 5729 +3 857 905 3276 +3 857 6718 905 +3 6718 1369 905 +3 858 6432 7073 +3 859 3437 910 +3 6118 5072 3439 +3 3528 914 3550 +3 3528 3504 914 +3 860 5719 7952 +3 843 861 2971 +3 861 2098 2971 +3 861 2719 2098 +3 2719 863 862 +3 863 921 862 +3 6509 923 864 +3 6509 2002 923 +3 2002 865 5182 +3 865 867 866 +3 867 5375 5964 +3 8056 925 868 +3 8056 7414 925 +3 7414 869 925 +3 6453 926 869 +3 6453 870 926 +3 870 871 7910 +3 873 872 7649 +3 3965 6525 874 +3 2245 8097 4072 +3 2245 875 8097 +3 876 846 5743 +3 846 877 5743 +3 846 6801 877 +3 879 8146 878 +3 878 8146 929 +3 7721 1014 7603 +3 1014 848 7603 +3 1013 6006 8146 +3 776 7813 8089 +3 7813 880 8089 +3 7813 881 880 +3 881 5184 4290 +3 881 2140 5184 +3 4390 882 934 +3 883 988 4622 +3 883 4645 988 +3 4754 4751 884 +3 4751 3170 884 +3 4217 3650 885 +3 4765 886 936 +3 886 887 7304 +3 888 5653 5007 +3 7617 851 889 +3 891 890 938 +3 6642 2148 6237 +3 5945 5889 3124 +3 6951 941 5888 +3 6951 853 941 +3 853 893 943 +3 235 300 892 +3 893 6379 943 +3 854 894 6379 +3 854 895 894 +3 895 6311 894 +3 895 7172 6311 +3 7172 4680 6311 +3 7172 896 4680 +3 6792 2087 897 +3 4538 2481 3079 +3 898 5614 6397 +3 900 3020 899 +3 3188 901 3157 +3 901 902 3157 +3 5073 6875 902 +3 5073 903 6875 +3 904 947 5483 +3 5153 3277 7106 +3 5153 5729 3277 +3 3276 953 5728 +3 3276 905 953 +3 905 1369 906 +3 907 955 1370 +3 907 1334 955 +3 195 532 4028 +3 1334 6847 955 +3 7073 6432 956 +3 1975 908 5212 +3 7358 1137 963 +3 909 912 1137 +3 911 859 910 +3 911 909 835 +3 226 1898 264 +3 835 800 859 +3 800 6038 859 +3 911 6975 912 +3 3439 5072 7422 +3 3550 967 913 +3 790 7543 3190 +3 3550 914 967 +3 7952 4187 915 +3 7952 5719 4187 +3 4186 969 916 +3 6023 5321 917 +3 5779 919 918 +3 919 6156 6795 +3 920 6048 6245 +3 2971 2098 973 +3 862 921 977 +3 921 922 976 +3 8102 6271 922 +3 864 923 978 +3 923 5182 924 +3 868 925 6743 +3 869 6553 8224 +3 926 7305 6553 +3 3783 4383 3738 +3 7783 874 927 +3 4072 6302 7518 +3 5726 3423 366 +3 6296 5743 928 +3 878 929 2763 +3 2763 929 1112 +3 929 6006 1111 +3 6481 3219 1113 +3 5184 2140 6867 +3 2140 930 6867 +3 6072 987 4391 +3 6608 932 931 +3 932 815 931 +3 7653 933 882 +3 933 986 934 +3 4622 988 935 +3 6644 936 1994 +3 5007 937 5008 +3 5007 5653 937 +3 938 940 7447 +3 890 939 940 +3 5696 4398 7287 +3 5888 941 6818 +3 941 942 6818 +3 943 1038 942 +3 894 990 6378 +3 4680 992 7995 +3 6860 7224 944 +3 7224 945 944 +3 897 5226 945 +3 7052 946 5226 +3 3079 995 7007 +3 899 3020 994 +3 5483 7742 3191 +3 5483 947 7742 +3 3237 948 755 +3 3237 949 948 +3 950 951 7543 +3 3239 947 951 +3 5728 998 5346 +3 953 906 952 +3 1370 955 954 +3 955 1001 954 +3 6847 1003 1001 +3 956 1223 1003 +3 956 6431 1223 +3 957 3388 3345 +3 5551 5786 2448 +3 6879 6523 958 +3 2678 964 959 +3 964 960 959 +3 962 961 960 +3 964 5174 962 +3 964 963 5174 +3 963 1137 5173 +3 912 3441 965 +3 912 6975 3441 +3 966 5277 6976 +3 966 5319 5277 +3 967 6744 1005 +3 915 4187 7308 +3 916 968 5905 +3 916 969 968 +3 969 1009 968 +3 969 917 1009 +3 548 3227 7587 +3 917 970 1009 +3 917 971 970 +3 971 1012 970 +3 971 918 1012 +3 918 6795 1015 +3 6245 1017 972 +3 6245 6048 1017 +3 973 975 8148 +3 975 974 8148 +3 977 1019 974 +3 977 976 1019 +3 976 922 6459 +3 978 924 1021 +3 924 1022 1021 +3 5181 979 1022 +3 5181 981 979 +3 981 5638 979 +3 981 980 5638 +3 980 5294 7997 +3 6375 6743 7997 +3 7305 5552 4719 +3 7305 982 5552 +3 982 6043 5552 +3 982 6329 6043 +3 6329 1023 6043 +3 983 927 7487 +3 7518 1024 984 +3 7594 6668 5293 +3 6668 928 1540 +3 277 302 301 +3 928 985 1540 +3 2763 1112 2765 +3 3219 6867 1016 +3 339 4427 554 +3 987 986 4624 +3 7443 1117 6691 +3 4750 935 988 +3 7322 1994 7300 +3 5008 6784 5011 +3 937 4670 6783 +3 7447 3733 6207 +3 939 5291 1030 +3 5291 989 5675 +3 989 1032 5675 +3 6818 942 6819 +3 990 7995 1041 +3 992 991 8030 +3 992 944 991 +3 944 1042 991 +3 944 945 1042 +3 945 993 1042 +3 5542 1045 4540 +3 7007 995 6522 +3 995 994 3021 +3 3191 1501 6439 +3 3240 5345 996 +3 5346 997 1047 +3 5346 998 997 +3 998 952 1049 +3 999 1050 1371 +3 999 954 1050 +3 954 1000 1050 +3 954 1001 1000 +3 1001 1002 1000 +3 1003 1222 1002 +3 3345 3464 3346 +3 3345 3388 3464 +3 961 1515 3389 +3 961 962 1515 +3 962 1004 1515 +3 962 5174 1004 +3 1006 1005 6259 +3 1005 6744 7496 +3 7995 992 8030 +3 1007 7765 3622 +3 968 5460 1008 +3 968 1009 5460 +3 1009 7028 5460 +3 970 1012 1010 +3 1011 627 1365 +3 1012 1055 1010 +3 1012 1015 1055 +3 1014 1013 848 +3 1015 972 6933 +3 972 8015 6933 +3 972 1017 8015 +3 3219 1016 1026 +3 1017 1018 8015 +3 7636 5897 1018 +3 974 1019 7702 +3 1019 5947 1057 +3 5947 1020 7536 +3 5947 6459 1020 +3 6459 4263 1020 +3 7940 1021 1061 +3 1022 6770 7078 +3 979 5638 1063 +3 6043 1023 7701 +3 1023 1066 7701 +3 3785 5215 5664 +3 7188 4061 3968 +3 7188 7487 4061 +3 5261 6635 5368 +3 1024 7138 7445 +3 1025 3567 3569 +3 1026 5706 1114 +3 1016 1027 5706 +3 1016 5324 1027 +3 1028 5305 5780 +3 6691 3125 4623 +3 6691 1117 3125 +3 6784 4928 6056 +3 6207 1074 1029 +3 6207 3733 1074 +3 3733 6356 6117 +3 6356 1076 6117 +3 6356 1030 1076 +3 5675 6258 6119 +3 5675 1032 6258 +3 1032 7906 1031 +3 7906 1033 1031 +3 2992 30 1034 +3 5353 1081 1035 +3 6819 1036 1037 +3 1038 8115 1036 +3 1036 8115 1083 +3 592 617 640 +3 6070 1039 1040 +3 1041 1382 1039 +3 1041 8030 1382 +3 1042 1044 6772 +3 993 1043 1044 +3 1045 5436 4540 +3 6522 3021 6088 +3 6439 1502 5921 +3 7127 996 1046 +3 1047 1048 1087 +3 997 1372 1048 +3 997 1049 1372 +3 1050 1051 7513 +3 1000 8093 1051 +3 1000 1002 8093 +3 1002 1222 6199 +3 3346 1088 3347 +3 3346 3464 1088 +3 1004 5772 5692 +3 5732 1052 1138 +3 5731 5825 3442 +3 1053 1089 6659 +3 3622 7765 6916 +3 4188 1008 5943 +3 1008 1093 5943 +3 7028 1010 7774 +3 1010 1054 7774 +3 1055 6932 1054 +3 7796 1098 7809 +3 7702 1057 1056 +3 1057 1058 1056 +3 7536 1100 1058 +3 1020 1102 1059 +3 1020 4263 1102 +3 4263 5473 1102 +3 4263 3038 5473 +3 3038 1060 5473 +3 1061 8002 1060 +3 7078 6770 1062 +3 6770 7485 1062 +3 6770 1063 7485 +3 7485 5553 1062 +3 5553 1064 1062 +3 5553 1065 1064 +3 1065 7497 1064 +3 800 1935 6038 +3 7701 1066 5808 +3 3968 1106 1067 +3 3968 4061 1106 +3 1152 2784 1068 +3 6230 1069 2766 +3 2766 1069 6715 +3 1114 5706 1070 +3 1071 7897 1115 +3 1071 5780 7897 +3 4623 1116 1072 +3 4623 3125 1116 +3 6056 4927 4493 +3 6056 4928 4927 +3 1029 1074 1073 +3 1074 3865 1073 +3 1076 6119 1075 +3 569 6808 3328 +3 6119 1077 1075 +3 6258 1122 1077 +3 1031 1078 1122 +3 1035 1079 6094 +3 1035 1081 1079 +3 1081 1037 1080 +3 1037 5625 1080 +3 1083 1040 1082 +3 1040 5903 1082 +3 1039 1382 2425 +3 1382 6280 2425 +3 7967 1084 6280 +3 6772 6276 1084 +3 1044 4514 6276 +3 5436 5093 4312 +3 6794 6088 5662 +3 5921 1502 1503 +3 1085 1046 3278 +3 1087 1086 1126 +3 8111 1128 4439 +3 7682 672 4940 +3 8111 7513 1128 +3 7513 6254 1128 +3 3347 6817 3348 +3 3347 1088 6817 +3 3442 2206 5505 +3 3442 5825 2206 +3 5159 1139 3532 +3 6659 1089 1090 +3 1089 3575 1140 +3 1091 5046 4189 +3 1091 5943 5046 +3 1093 7605 1092 +3 7605 7774 7218 +3 6932 1095 1842 +3 2820 1094 1095 +3 1096 5468 6120 +3 7809 1098 1097 +3 1098 6367 1097 +3 197 6768 234 +3 1098 1056 6367 +3 1058 1099 5228 +3 1058 1100 1099 +3 1100 1146 1099 +3 1100 7907 1146 +3 1059 1101 7907 +3 1102 5472 1101 +3 350 414 415 +3 1060 1103 6619 +3 1060 8002 1103 +3 8002 1064 1103 +3 7497 1104 1103 +3 7497 5808 1104 +3 5808 7976 1104 +3 5216 3786 3742 +3 1067 1105 3969 +3 1067 1106 1105 +3 6406 1153 1107 +3 7554 1068 1154 +3 1068 7166 1108 +3 6715 1109 1110 +3 1111 1112 929 +3 5156 4810 1112 +3 5157 1069 4810 +3 1026 6128 1113 +3 1026 1114 6128 +3 1114 5133 7235 +3 5133 5634 7235 +3 1070 1725 1156 +3 1115 1489 4392 +3 1116 7844 7500 +3 4749 1117 935 +3 4493 4927 1118 +3 4874 1073 1158 +3 1073 3865 7788 +3 345 756 1119 +3 3865 7840 1120 +3 7840 1121 1120 +3 5165 3674 8134 +3 1075 5354 1121 +3 1075 1077 5354 +3 1077 1122 1160 +3 5974 1507 4766 +3 1122 6351 1160 +3 1078 6094 5493 +3 1080 5625 1161 +3 4312 7775 4313 +3 1123 8005 7344 +3 3192 3160 5956 +3 5767 1124 5843 +3 3193 1503 1125 +3 3241 3278 5396 +3 1126 1165 1164 +3 1086 1127 1165 +3 4439 1128 1167 +3 1128 6254 1129 +3 6254 7780 1169 +3 3344 1183 2986 +3 1183 1130 2986 +3 1131 1224 1130 +3 3348 6817 1132 +3 7390 1171 1516 +3 7390 5691 1171 +3 5691 1133 1171 +3 5691 1134 1133 +3 1134 4968 1133 +3 1135 1136 5298 +3 1135 1134 5772 +3 6092 5732 1136 +3 5173 1137 965 +3 965 1052 5732 +3 5732 1138 1136 +3 3532 5304 5495 +3 3532 1139 5304 +3 1139 3578 7970 +3 1139 1090 3578 +3 1090 1140 3578 +3 4189 5046 1141 +3 6472 1175 5479 +3 6472 1092 1175 +3 1092 5759 1175 +3 7218 1142 5759 +3 5918 2573 1142 +3 5918 1842 2573 +3 1842 1177 2573 +3 1842 1095 1177 +3 1095 1178 1177 +3 1094 1143 1178 +3 6120 1179 1143 +3 6120 5468 1179 +3 5468 1097 1144 +3 1097 1181 1144 +3 1097 6367 1181 +3 6367 1145 1181 +3 5228 1182 1145 +3 1099 1146 6033 +3 1146 1186 6033 +3 1146 1187 1186 +3 1101 5472 1147 +3 5472 1148 1147 +3 7976 1149 1148 +3 1150 3724 1149 +3 1107 1151 6826 +3 5293 1152 5331 +3 1152 7138 5331 +3 7554 1155 1153 +3 1155 1107 1153 +3 1155 1151 1107 +3 1155 6164 1151 +3 1155 1154 6164 +3 7929 1156 3054 +3 4392 7431 4393 +3 4392 1489 7431 +3 7500 7844 4747 +3 5544 5016 4767 +3 5013 1195 5014 +3 5013 1157 1195 +3 1157 4925 1195 +3 1157 1118 4925 +3 6538 1158 1198 +3 1158 7055 1198 +3 1158 7788 7055 +3 1120 1518 1159 +3 5354 1160 7416 +3 1160 6351 5737 +3 6351 1201 5737 +3 6625 1161 5622 +3 1161 1202 5622 +3 1161 1162 1202 +3 1162 1204 1202 +3 1162 7075 1204 +3 7137 7704 1208 +3 6395 4512 7704 +3 4313 7775 1211 +3 1164 1163 1213 +3 1165 6704 1163 +3 7700 1215 5237 +3 7700 1167 1215 +3 130 4225 171 +3 1167 1166 1215 +3 1167 1129 1166 +3 1169 1225 2437 +3 1169 1168 1225 +3 7824 4969 5677 +3 1516 4445 1170 +3 1516 1171 4445 +3 1171 1172 4445 +3 1133 6213 1172 +3 4968 6246 1173 +3 1174 4191 7749 +3 1175 5758 1233 +3 2573 1177 1176 +3 1177 8100 1176 +3 1177 1178 8100 +3 1143 7828 8031 +3 1179 1236 7828 +3 1179 1144 1236 +3 1144 1180 1236 +3 1144 1181 1180 +3 1181 1145 1238 +3 1145 5723 1238 +3 1145 1182 5723 +3 1183 1131 1130 +3 6033 1186 1184 +3 1186 1240 1184 +3 809 1185 6440 +3 1186 1241 1240 +3 1187 1430 1241 +3 1187 8050 1430 +3 8050 7122 1430 +3 1147 1149 7122 +3 3971 1188 5847 +3 4074 1243 6997 +3 1190 6826 1189 +3 1151 6164 3094 +3 5310 4288 7393 +3 5310 4289 4288 +3 5438 1247 1191 +3 3054 4394 1192 +3 4767 1193 4768 +3 5014 6678 6020 +3 1195 1194 6678 +3 1197 1196 1253 +3 1197 1198 1196 +3 1198 1255 1196 +3 1159 1518 7288 +3 1518 1257 7288 +3 1518 1199 1257 +3 1199 1200 1257 +3 7416 7533 1200 +3 1201 5043 1816 +3 1201 7731 5043 +3 5622 1202 1203 +3 1202 1204 3447 +3 3838 1205 7562 +3 1204 7074 1206 +3 7074 1207 6535 +3 1207 1208 2080 +3 1208 4509 2080 +3 3693 1209 3698 +3 1211 6665 1209 +3 1211 1210 6665 +3 7398 3196 5070 +3 3242 3280 5710 +3 1213 7914 1212 +3 1214 602 838 +3 1215 1266 1878 +3 1166 2437 7553 +3 5489 1217 629 +3 1217 8072 1216 +3 723 6950 654 +3 723 1218 6950 +3 1218 1220 722 +3 1220 1219 722 +3 1220 1221 1219 +3 1221 1976 796 +3 1976 6294 796 +3 1130 1222 1223 +3 1224 4970 6199 +3 7824 1168 6200 +3 7824 1226 1168 +3 3428 3380 3376 +3 1226 8067 1225 +3 1226 5677 8183 +3 6855 3392 1227 +3 6855 3390 3392 +3 1170 1270 1519 +3 4445 1172 1271 +3 1172 1228 1271 +3 1172 6213 1228 +3 5303 1273 1229 +3 7749 4651 3625 +3 1230 6221 7744 +3 6221 7310 1231 +3 1233 7286 1232 +3 5758 1234 7286 +3 6216 5756 5288 +3 5756 1276 5288 +3 1176 1277 1276 +3 8031 7410 1235 +3 7828 1236 1237 +3 1180 1278 7600 +3 1180 1238 1278 +3 1238 5723 7528 +3 8003 7339 5722 +3 8003 1184 7339 +3 1184 1239 7339 +3 1184 1240 1239 +3 1240 7238 1239 +3 1240 5621 7238 +3 1240 1241 5621 +3 6997 1243 1242 +3 1243 1283 1242 +3 1243 1189 1283 +3 1189 1244 1283 +3 7388 3094 5408 +3 3094 1245 5408 +3 7393 1284 1246 +3 1247 1285 6314 +3 1247 1192 1285 +3 1248 1490 4395 +3 1249 7845 5963 +3 7845 5523 5963 +3 816 887 886 +3 7845 1250 5523 +3 4768 1286 1251 +3 6020 1287 1252 +3 1253 1254 4870 +3 1196 5521 1254 +3 1196 1255 5521 +3 1255 6803 1256 +3 7288 1257 6581 +3 1257 1200 1258 +3 1200 5428 1258 +3 5043 1259 1260 +3 7730 5816 1259 +3 7730 1261 5816 +3 3447 1292 4329 +3 4509 1262 7959 +3 1209 1263 1264 +3 5710 1297 3243 +3 5710 3280 1297 +3 1212 1298 1265 +3 1212 7914 1298 +3 7914 5919 1298 +3 1878 1428 2142 +3 1878 1266 1428 +3 1266 1268 1428 +3 7553 1267 1268 +3 1227 1299 1269 +3 1227 3392 1299 +3 1519 1300 1520 +3 1519 1270 1300 +3 1271 1272 6060 +3 1228 6574 1272 +3 1229 1303 3214 +3 1229 1273 1303 +3 4375 1304 3627 +3 4375 1274 1304 +3 3625 4651 1274 +3 1275 5451 1305 +3 1232 7286 5965 +3 5288 1276 7470 +3 1276 1306 7470 +3 1277 1235 1307 +3 7600 1278 2432 +3 1278 1309 2432 +3 1278 7528 1309 +3 7528 7714 1309 +3 5722 7339 7669 +3 1239 1279 1310 +3 5962 1311 1280 +3 31 30 2992 +3 5822 4059 1312 +3 5822 1281 4059 +3 7181 1313 1282 +3 1242 5421 1313 +3 1242 1283 5421 +3 1283 7712 5421 +3 6977 1246 2770 +3 2770 1246 1315 +3 1246 1284 4285 +3 6314 1285 8080 +3 5513 6079 6559 +3 4746 1251 4070 +3 1251 1286 5018 +3 1252 8212 5017 +3 1252 1287 8212 +3 4870 1320 7337 +3 4870 1254 1320 +3 1254 1321 1320 +3 1254 5521 1321 +3 5521 1288 1321 +3 1256 5609 1288 +3 1289 7504 5609 +3 1258 6882 5199 +3 1258 5428 6882 +3 5428 7195 6882 +3 5428 1290 7195 +3 1291 1125 5998 +3 1260 1325 6049 +3 1259 5816 7634 +3 5747 1328 5815 +3 4329 1292 6955 +3 1292 7114 6955 +3 6370 1293 7114 +3 6370 7960 1293 +3 7960 4505 1293 +3 4314 1331 1294 +3 679 1295 718 +3 4314 1264 1331 +3 3199 1506 1296 +3 3243 7601 5253 +3 3243 1297 7601 +3 1265 1335 3281 +3 1265 1298 1335 +3 1298 4976 1335 +3 1298 5919 4976 +3 1374 5119 5920 +3 1374 2142 5119 +3 1269 1299 3394 +3 1520 1300 6399 +3 7596 3521 1301 +3 527 526 159 +3 3214 7203 1302 +3 3214 1303 7203 +3 3627 1304 4761 +3 1305 1342 4194 +3 5451 1343 1342 +3 5451 7576 1343 +3 5965 1344 7200 +3 5540 5515 1345 +3 7470 1306 1346 +3 1306 6444 1346 +3 1306 1307 6444 +3 1307 6961 6444 +3 1307 7993 6961 +3 7993 1308 1347 +3 2432 6030 5777 +3 2432 1309 6030 +3 1310 3719 7668 +3 1280 1311 3747 +3 1312 4057 3978 +3 1282 1352 4077 +3 1313 1397 1352 +3 5421 7712 1314 +3 7712 6486 1314 +3 7712 5407 6486 +3 2770 1315 7051 +3 6966 1316 6332 +3 1316 4396 6332 +3 7839 3856 1317 +3 6559 1318 4629 +3 5017 8212 1319 +3 8212 4922 1319 +3 7337 1320 7378 +3 1320 1356 7378 +3 1320 1321 1356 +3 1288 6618 1357 +3 1288 5609 6618 +3 7504 5199 1322 +3 5199 1358 1322 +3 7653 882 815 +3 7195 1324 1323 +3 6049 1359 1324 +3 6049 1325 1359 +3 1325 1326 1359 +3 7634 1361 1326 +3 7634 5815 1361 +3 5815 1327 1361 +3 5815 1328 1327 +3 1328 6955 1329 +3 1293 4504 1362 +3 1293 4505 4504 +3 1294 1331 6735 +3 1331 6338 6735 +3 1331 1330 6338 +3 1296 1506 1332 +3 3281 8135 7448 +3 3281 1335 8135 +3 5978 1333 1334 +3 1335 1375 8135 +3 1335 4976 1375 +3 1336 1338 7016 +3 7355 1337 1338 +3 7355 2281 1337 +3 3350 3396 1339 +3 1340 5387 3445 +3 1340 1301 5387 +3 1302 3581 1341 +3 3628 6081 3629 +3 3628 4761 6081 +3 4195 1388 4762 +3 4195 1389 1388 +3 4194 1342 1389 +3 1342 1343 1390 +3 1343 7863 1390 +3 1344 7266 1547 +3 1345 5450 7266 +3 6753 1346 1392 +3 1347 7905 6386 +3 7905 5777 5178 +3 5777 7179 5178 +3 6030 5666 1348 +3 5666 6126 1394 +3 7668 3719 7207 +3 3747 1350 1349 +3 1350 2439 1349 +3 3978 1351 7279 +3 3978 4057 1351 +3 4077 6685 5821 +3 4077 1352 6685 +3 1352 1397 7381 +3 1314 1399 1398 +3 1314 6486 1399 +3 6486 5881 1399 +3 4285 7123 1315 +3 6332 4396 4399 +3 1318 6263 7350 +3 1353 6263 1318 +3 6562 7644 1354 +3 7212 1319 1355 +3 1319 4922 4920 +3 7378 1356 6640 +3 1356 1357 1407 +3 1322 1358 6672 +3 1324 1411 5900 +3 1324 1359 1411 +3 1326 1360 1413 +3 853 943 941 +3 1361 5601 1360 +3 1329 8065 6610 +3 6529 1362 7930 +3 1362 4504 1417 +3 6735 6338 6225 +3 5740 6693 7302 +3 5740 3741 6693 +3 5077 6670 5167 +3 5077 1332 6670 +3 2665 194 6224 +3 8135 1375 1363 +3 1364 5192 7969 +3 7703 3975 627 +3 683 1366 1365 +3 1367 1368 1366 +3 7394 794 1368 +3 7394 833 794 +3 833 5978 6684 +3 907 1369 7232 +3 907 1370 1369 +3 1370 906 1369 +3 1370 999 906 +3 8072 723 654 +3 1371 1049 952 +3 8111 4439 1372 +3 1373 7724 6704 +3 1373 1374 7724 +3 1374 5919 7724 +3 1376 1363 1375 +3 7165 1377 1376 +3 7165 7017 1377 +3 7017 5886 1377 +3 1338 2283 7626 +3 7615 1378 2280 +3 1378 1379 7284 +3 1380 6350 1522 +3 6339 1381 6177 +3 1382 7967 6280 +3 6836 7202 3444 +3 6836 1426 1381 +3 6836 3444 1426 +3 3445 1383 1427 +3 3445 5387 1383 +3 5273 1341 1429 +3 1341 1384 1429 +3 1385 5353 6981 +3 4762 1386 1387 +3 4762 1388 1386 +3 1388 7354 1386 +3 1389 1390 6648 +3 1390 5996 6648 +3 7266 5450 1391 +3 5450 7461 1391 +3 5450 1392 7461 +3 1392 4197 1431 +3 1282 1313 1352 +3 6443 6171 1433 +3 6386 5526 1393 +3 7179 7740 6651 +3 1348 1394 8207 +3 7208 6658 7001 +3 781 6568 1395 +3 5821 5806 1396 +3 5821 6685 5806 +3 7381 6299 5805 +3 1314 1398 1397 +3 1398 7381 1397 +3 1398 1399 6805 +3 2771 1400 5342 +3 7654 1454 1401 +3 7654 2249 1454 +3 2249 4399 1402 +3 4397 5712 6541 +3 4397 6473 5712 +3 4631 7350 1403 +3 1354 7124 2788 +3 1354 5019 7124 +3 4049 5188 5021 +3 1405 1404 2246 +3 6883 5074 5578 +3 1407 1459 1457 +3 1407 1406 1459 +3 1406 1409 1408 +3 359 4218 489 +3 1409 5522 1408 +3 1409 5135 5522 +3 3378 5419 7067 +3 5135 1410 5522 +3 6672 5707 1410 +3 6672 7909 5707 +3 5900 1411 1461 +3 1411 1413 7512 +3 1413 1412 7512 +3 1360 4420 1412 +3 1360 5601 4420 +3 348 1414 1415 +3 7930 6100 1416 +3 7930 1417 6100 +3 5435 1418 6592 +3 6809 3027 1418 +3 6809 6225 3027 +3 5704 6465 3163 +3 1420 3914 1419 +3 1421 1422 3231 +3 1422 1363 7330 +3 1376 1464 1423 +3 1377 1465 1464 +3 1377 5886 1465 +3 5886 2004 1465 +3 7626 2283 1424 +3 3351 1769 1425 +3 1522 6823 1524 +3 1381 1426 5951 +3 1427 4958 3446 +3 2142 1428 1336 +3 3535 1470 3536 +3 697 5716 7010 +3 3535 1429 1470 +3 1429 8060 1470 +3 3630 1686 6983 +3 1386 1473 8086 +3 1386 7354 1473 +3 7354 1474 1473 +3 6648 5996 1475 +3 7201 6630 7249 +3 1241 1430 3722 +3 1391 1477 1476 +3 1431 5446 5746 +3 7629 1433 1432 +3 1433 1393 1479 +3 1393 6262 1479 +3 6651 1481 5525 +3 8207 1435 6789 +3 7001 1434 1435 +3 7001 6658 1434 +3 8044 7624 3749 +3 1436 4054 5538 +3 5805 6299 1437 +3 6299 1438 1437 +3 6299 6805 1438 +3 1440 4111 7716 +3 7234 705 1439 +3 1440 7424 4111 +3 7424 8078 6607 +3 8078 4114 6607 +3 2760 4115 1441 +3 3145 1442 5527 +3 1442 4117 5527 +3 1442 2762 4117 +3 2762 4118 4117 +3 2762 1443 4118 +3 7310 1232 1231 +3 1443 2764 6405 +3 2764 1445 6622 +3 1445 2767 1444 +3 2767 5891 1444 +3 1446 1447 5891 +3 2768 4120 1447 +3 2768 6639 4120 +3 6269 7466 4121 +3 6269 1449 7466 +3 1449 4123 7466 +3 1449 1448 4123 +3 1448 1451 7988 +3 1451 1450 7988 +3 1451 7690 1450 +3 4282 1401 1452 +3 1401 1453 1452 +3 1401 1454 1453 +3 1454 1486 1453 +3 1454 1402 1486 +3 6541 5712 8022 +3 1455 2788 7135 +3 5021 5188 1456 +3 6973 1457 1493 +3 1457 1459 1458 +3 1459 1408 5941 +3 5522 1410 1496 +3 7445 7138 1153 +3 1410 5707 3271 +3 7175 3559 1460 +3 7175 1461 3559 +3 1461 6674 3559 +3 1412 1497 8045 +3 5830 7984 1498 +3 1463 1416 1462 +3 1416 4498 1462 +3 1418 3027 1500 +3 3163 6763 3165 +3 1419 7282 3246 +3 1419 3914 7282 +3 1423 4847 7331 +3 1423 1464 4847 +3 1464 1465 1511 +3 6324 3354 2284 +3 6324 6149 3354 +3 1467 3397 3352 +3 645 1466 715 +3 1467 1425 3397 +3 7612 6711 1468 +3 3446 4958 1529 +3 3536 1470 1531 +3 1470 1469 1531 +3 6984 7257 3631 +3 1472 8086 1471 +3 8086 3543 1471 +3 8086 1473 3543 +3 1473 6631 3543 +3 1473 1474 6631 +3 1474 7012 6631 +3 1474 1535 7012 +3 1475 5995 1535 +3 6629 1476 2293 +3 1476 1477 1478 +3 1477 5746 7655 +3 5746 5446 1539 +3 5446 1541 1539 +3 5446 1432 1541 +3 1432 1542 1541 +3 1432 1479 1542 +3 1481 6789 1480 +3 6789 1482 1480 +3 1435 3716 1482 +3 3749 7624 3750 +3 7624 1544 3750 +3 5272 1437 1483 +3 1437 7621 1483 +3 4526 1484 2106 +3 1485 1452 4016 +3 1453 5154 1833 +3 1094 6120 1143 +3 1453 1486 5154 +3 1487 5780 5305 +3 7816 1488 1489 +3 7430 7900 6087 +3 7900 1490 6087 +3 1491 5712 6473 +3 4633 6231 8022 +3 6373 1550 6298 +3 5020 1456 2378 +3 1456 6897 2378 +3 1456 4917 6897 +3 7820 5973 4868 +3 1492 1493 1552 +3 1493 7937 1552 +3 1493 1458 7937 +3 1458 1494 7937 +3 1458 5941 1494 +3 6341 1496 5283 +3 1496 1495 5283 +3 1496 3271 1495 +3 8045 1497 4379 +3 1497 1498 1499 +3 7984 1462 1556 +3 7178 3029 5323 +3 3627 4761 3628 +3 7178 1500 3029 +3 7324 5120 5863 +3 3809 1501 7741 +3 287 3481 3479 +3 3809 1502 1501 +3 5534 1503 1502 +3 1504 1125 1503 +3 1504 5711 1125 +3 8095 7881 1505 +3 3244 1332 1506 +3 3244 3562 1332 +3 4766 1507 5015 +3 3562 6670 1332 +3 3561 1508 6669 +3 1508 6112 5539 +3 7216 1561 1509 +3 7331 1564 1510 +3 7331 4847 1564 +3 1511 1512 1565 +3 6748 2285 1512 +3 6748 1513 2285 +3 3352 1514 1566 +3 1084 6395 7137 +3 3352 3397 1514 +3 6419 3389 1515 +3 6419 6944 3389 +3 7390 1516 7242 +3 1170 1517 6985 +3 1170 1519 1517 +3 1121 1199 1518 +3 1519 3391 1517 +3 1520 5307 4901 +3 5307 1380 3393 +3 1380 1521 3393 +3 1380 1522 1521 +3 1522 1523 1521 +3 1524 1805 1523 +3 1526 1525 7031 +3 6229 5423 1526 +3 1527 1468 7180 +3 1468 5313 7180 +3 1468 7477 5313 +3 1530 3519 8053 +3 820 1528 3261 +3 1530 1529 3519 +3 7847 5289 1569 +3 7847 1531 5289 +3 1531 5982 5289 +3 1533 1532 7258 +3 1533 1471 1532 +3 6631 7012 1534 +3 7012 1535 7745 +3 1536 5548 7745 +3 1536 1557 5548 +3 2293 1538 1537 +3 1478 5713 1538 +3 7655 1539 1574 +3 6668 1540 5293 +3 1541 2895 3908 +3 1542 5094 1576 +3 1480 1543 7325 +3 1482 3715 1543 +3 1482 3716 3715 +3 3750 1544 1578 +3 1545 6532 2082 +3 6532 1546 2082 +3 6532 7773 1546 +3 8026 1547 6630 +3 1483 7621 3497 +3 7621 1548 3497 +3 7621 2124 1548 +3 5511 6543 1664 +3 1833 5154 1584 +3 1549 6400 1620 +3 6298 1550 1551 +3 5751 3870 1587 +3 1552 6035 5597 +3 5784 6547 5968 +3 1495 1553 6153 +3 1553 1554 5137 +3 6560 4379 1555 +3 4379 1592 1555 +3 6695 1556 6643 +3 1556 3135 1593 +3 3135 4495 1593 +3 5519 3185 4318 +3 1557 1537 5548 +3 5323 3029 1558 +3 5863 5120 5161 +3 1560 7446 1559 +3 1509 1561 1562 +3 1561 6616 1563 +3 1510 5040 3306 +3 1510 1564 5040 +3 1564 6974 5040 +3 1564 1565 6974 +3 1565 6238 6974 +3 1512 2286 6238 +3 1566 3399 4246 +3 1526 5423 1599 +3 5423 7251 1599 +3 7566 7180 1567 +3 1569 1568 3539 +3 5289 5982 6187 +3 5230 7004 3634 +3 7258 7666 1570 +3 7328 1571 1604 +3 1534 1572 5769 +3 1572 1605 5769 +3 1572 1573 1605 +3 7745 5548 1573 +3 1537 1538 7569 +3 1538 3343 7569 +3 1538 5713 3343 +3 5713 1606 3343 +3 5713 1574 1606 +3 1574 5397 1606 +3 1574 3908 5397 +3 2895 1608 4534 +3 1576 1609 1608 +3 1576 1575 1609 +3 1575 7486 1577 +3 1543 1611 6594 +3 1543 3715 1611 +3 862 977 975 +3 1578 3792 1612 +3 6215 4050 1579 +3 6215 7332 4050 +3 2736 1617 1616 +3 2736 3497 1617 +3 2773 1580 4129 +3 1580 2774 6567 +3 1581 1710 6557 +3 6557 1710 1582 +3 1583 2105 1484 +3 8192 1710 2105 +3 4015 4401 6449 +3 4015 1584 4401 +3 1585 1621 4402 +3 1585 1620 1621 +3 2034 1586 4634 +3 4742 1587 7210 +3 5022 3778 8214 +3 6585 1625 1588 +3 6585 2231 1625 +3 5597 7667 7182 +3 6035 7415 1589 +3 7415 1590 1589 +3 5968 1626 1590 +3 5137 1628 6355 +3 7610 1591 1628 +3 5859 2497 1591 +3 5859 1555 2497 +3 1555 1592 6205 +3 1592 8200 6205 +3 6643 1593 5877 +3 1593 4496 5877 +3 4318 1594 1631 +3 3185 1558 1595 +3 6017 3056 3203 +3 7269 6868 3943 +3 1562 5896 6545 +3 1562 1563 5896 +3 3306 5040 1596 +3 6238 2286 1597 +3 3353 1598 7537 +3 1598 2287 7537 +3 6437 1643 6393 +3 6437 1599 1643 +3 1599 5134 1643 +3 6723 7963 1600 +3 3539 1644 5086 +3 1568 1601 1644 +3 3634 7004 4199 +3 7666 1647 5152 +3 7666 1603 1647 +3 1603 1604 1602 +3 1604 5280 1648 +3 5280 1651 1648 +3 1605 6345 1653 +3 3343 1606 7855 +3 1606 5397 8099 +3 5397 1657 8099 +3 4534 1607 1657 +3 4534 1608 1607 +3 1609 1577 6729 +3 1577 1610 6729 +3 1577 2303 1610 +3 6594 1611 7814 +3 1612 3794 3753 +3 3794 7333 3753 +3 1579 4050 1613 +3 7336 1614 4081 +3 5554 1752 1614 +3 2736 1546 7773 +3 1616 6816 1546 +3 1616 1615 6816 +3 1616 1617 1661 +3 1617 6359 1661 +3 6449 5082 1618 +3 4402 1621 1619 +3 7220 1621 1620 +3 7679 1619 1621 +3 5047 5104 1622 +3 8214 1623 2496 +3 1588 1624 4866 +3 1625 1670 1624 +3 7182 7667 6497 +3 1589 4706 1672 +3 1626 1674 5766 +3 1626 5600 1674 +3 1628 3779 1627 +3 1591 2497 5219 +3 8116 1630 1629 +3 5877 4492 1630 +3 1631 5517 4319 +3 1594 1595 3032 +3 3203 3056 1632 +3 3247 5161 6111 +3 1683 1632 3056 +3 5166 1633 5444 +3 1634 1596 1684 +3 1635 1685 6008 +3 1635 1637 1685 +3 1637 1597 1636 +3 1638 3400 3355 +3 6393 4099 6437 +3 6393 1639 4099 +3 1640 1687 1639 +3 6393 1643 1641 +3 1643 1642 1641 +3 1600 7963 1691 +3 5086 1644 4407 +3 1644 7315 4407 +3 1645 4199 1693 +3 6188 7958 1646 +3 5152 1647 1694 +3 1602 1648 1695 +3 1648 1651 1649 +3 1651 1650 7255 +3 1653 1652 1698 +3 1653 6345 4138 +3 7570 1654 7126 +3 8099 7932 1655 +3 1657 1656 7932 +3 5596 6729 1658 +3 1610 7161 1659 +3 1610 3395 7161 +3 3395 7814 6505 +3 3980 1613 4048 +3 4081 6003 1660 +3 4081 1614 6003 +3 1615 1707 1753 +3 1615 1661 1707 +3 1661 4132 1707 +3 5926 1662 6620 +3 6620 1662 1663 +3 7953 4280 1664 +3 8046 1665 4403 +3 1619 4637 1665 +3 665 3378 737 +3 1667 7211 1666 +3 7211 4740 1666 +3 6467 1586 1551 +3 480 3664 481 +3 1668 4740 7211 +3 1622 5104 5715 +3 5104 1669 5715 +3 1624 1670 7933 +3 1670 7442 1671 +3 6497 1672 1673 +3 5766 1674 6123 +3 1674 6241 7032 +3 6241 1675 7032 +3 5929 5117 1675 +3 5929 1627 5117 +3 1627 1723 5117 +3 1627 3779 1723 +3 3779 1724 1723 +3 1676 1729 1726 +3 1676 1629 1729 +3 1629 1630 1728 +3 1630 4488 1728 +3 4319 5517 1677 +3 5517 3032 1731 +3 1680 1678 6923 +3 3202 3166 1679 +3 3202 3205 3166 +3 3205 1680 3166 +3 3205 1678 1680 +3 3204 5223 1681 +3 1632 1682 5223 +3 1632 1683 1682 +3 6434 1733 5105 +3 6434 3283 1733 +3 1633 5627 5852 +3 3307 7132 3308 +3 3307 1684 7132 +3 1684 6008 5185 +3 6008 1737 5185 +3 1685 1636 1738 +3 3629 6081 1686 +3 1687 7945 7307 +3 1640 1641 1688 +3 1690 1689 3449 +3 1690 1742 1642 +3 1690 3449 6421 +3 1692 1691 3516 +3 3635 7375 6575 +3 3635 1693 7375 +3 1646 7958 6417 +3 6378 990 6070 +3 1694 2534 1744 +3 2534 1746 1744 +3 2534 1695 1746 +3 1695 4587 1746 +3 1695 1649 4587 +3 1649 7255 1696 +3 1697 4885 6452 +3 710 783 2677 +3 1698 1699 2963 +3 1652 1748 1699 +3 1652 5254 1748 +3 7125 1655 1700 +3 1655 7932 7710 +3 620 5455 1466 +3 1656 1701 1702 +3 1656 7449 1701 +3 6976 5277 5824 +3 7449 1658 5565 +3 1658 1750 5565 +3 1658 1659 1750 +3 1703 5038 3754 +3 5038 6012 3754 +3 1704 4047 3981 +3 1704 4048 4047 +3 6003 5475 1705 +3 1753 1755 1706 +3 1753 1707 1755 +3 2774 4130 6567 +3 1708 4400 4130 +3 1709 1663 5106 +3 6097 1582 1710 +3 6097 5572 1582 +3 169 130 1711 +3 5572 1662 1582 +3 4278 1712 1663 +3 4277 1713 4151 +3 7550 1714 7833 +3 4403 7746 5500 +3 1665 4637 1715 +3 4635 8141 4636 +3 1666 4740 6905 +3 4773 5024 1716 +3 2345 1757 5023 +3 7630 1717 1758 +3 6539 7933 2271 +3 7933 5399 2271 +3 1673 1719 1718 +3 1719 1720 1718 +3 4705 1761 1720 +3 7032 1762 6122 +3 1675 1721 1762 +3 5117 1723 6531 +3 1723 1722 6531 +3 1723 1724 1722 +3 1724 1763 1722 +3 1156 1725 4394 +3 6209 6737 1763 +3 6209 1726 6737 +3 1726 1729 1727 +3 1729 5196 1727 +3 1729 1728 5196 +3 1730 1677 1765 +3 1677 1767 1765 +3 1677 1731 1767 +3 823 893 853 +3 1681 1732 1771 +3 1681 5223 1732 +3 5105 1733 6374 +3 5852 5627 1734 +3 3308 7132 1735 +3 5185 5788 1736 +3 5185 1737 5788 +3 1737 1738 5302 +3 6673 1741 2288 +3 1741 1739 2288 +3 1741 1740 1739 +3 1740 8098 6544 +3 7945 7348 7306 +3 7945 1688 7348 +3 1742 5676 5665 +3 1742 6421 5676 +3 3450 7244 3451 +3 6575 6595 1743 +3 6417 7889 1779 +3 6572 1780 7889 +3 43 137 101 +3 6572 1744 1780 +3 1744 1746 1745 +3 1746 7852 1745 +3 4587 1696 1747 +3 1696 1783 1747 +3 1696 2963 1783 +3 1748 1789 1785 +3 1748 1749 1789 +3 5254 6760 1749 +3 7710 1790 7691 +3 1701 1792 6990 +3 1750 6746 3889 +3 3754 6012 3755 +3 3981 1751 1794 +3 3981 4047 1751 +3 1615 1753 1752 +3 1753 5475 1752 +3 1706 1705 5475 +3 1706 1754 1705 +3 1706 7262 1754 +3 1706 1755 7262 +3 1755 7035 1756 +3 5795 4151 5101 +3 4151 5084 5101 +3 5500 5702 3326 +3 5500 7746 5702 +3 7746 4638 5702 +3 4636 1841 6086 +3 4636 8141 1841 +3 1716 5025 1801 +3 1716 5024 5025 +3 5023 1757 5347 +3 1757 7366 5347 +3 1757 4914 7366 +3 1758 7488 4864 +3 1717 2271 1759 +3 5399 1760 1811 +3 1760 5390 5240 +3 5390 5114 5240 +3 1718 7458 5114 +3 1718 1720 7458 +3 1720 1813 7458 +3 1761 7382 1813 +3 1762 5541 5478 +3 1722 1763 1817 +3 1727 6638 1764 +3 1766 1765 6814 +3 1765 1767 8188 +3 1768 3206 3208 +3 1339 3396 1769 +3 1191 6314 1770 +3 1771 1772 3207 +3 1732 3249 1772 +3 1732 3248 3249 +3 244 6834 285 +3 1773 6374 5357 +3 5333 7334 2721 +3 1774 1734 3310 +3 5626 6953 3309 +3 1735 1736 4886 +3 1736 1823 4886 +3 1736 5788 1823 +3 6804 7403 5536 +3 1775 6252 3404 +3 1776 5665 1872 +3 5665 5676 5299 +3 3451 7244 5262 +3 5835 1825 3544 +3 5835 1777 1825 +3 1777 6785 3586 +3 1743 1778 7432 +3 1779 6135 6364 +3 1780 1745 6858 +3 1745 1781 6858 +3 1745 7852 1781 +3 7852 1782 1781 +3 1747 1830 1782 +3 1747 1783 1830 +3 1783 1784 1831 +3 1784 1785 1786 +3 1785 1789 1787 +3 1789 1834 1787 +3 1789 1788 1834 +3 1749 5532 1788 +3 7691 1790 7994 +3 1790 6990 1791 +3 6990 7204 1791 +3 6990 1792 7204 +3 1792 3889 1793 +3 3889 3972 1793 +3 3889 6746 3972 +3 6746 7938 3711 +3 1794 4046 6927 +3 4084 1796 1795 +3 1797 1891 1796 +3 1754 2276 1890 +3 1754 7262 2276 +3 7262 1798 2276 +3 1800 4133 4131 +3 1800 1799 4133 +3 6086 1840 4639 +3 4738 1801 7961 +3 7277 1802 1803 +3 1801 5025 1804 +3 6229 7031 1805 +3 1807 1808 1806 +3 5347 4911 1808 +3 5347 7366 4911 +3 1759 1809 1843 +3 1809 1810 1843 +3 1811 7023 1810 +3 6342 1812 757 +3 7458 1813 8204 +3 1813 7382 8159 +3 7382 1814 8159 +3 5478 5541 1850 +3 5255 4606 1815 +3 5255 5415 4606 +3 5415 1817 5736 +3 5737 1201 1816 +3 1817 7862 5736 +3 1817 7006 7862 +3 7006 1764 1818 +3 1764 6850 1818 +3 1819 1853 4322 +3 1819 6814 1853 +3 6814 8101 1853 +3 3207 8028 1820 +3 3309 7825 5301 +3 4886 1865 1862 +3 4886 1823 1865 +3 1823 1821 1865 +3 1823 1822 1821 +3 7493 1871 1824 +3 5263 1873 3452 +3 3544 7343 3546 +3 3544 1825 7343 +3 1825 3586 1826 +3 1828 4326 1827 +3 1828 6364 4326 +3 1033 1035 6094 +3 6858 1879 1829 +3 1781 1880 1879 +3 1781 1782 1880 +3 1830 8074 6430 +3 1831 1786 5725 +3 1786 1787 8198 +3 1834 1883 1832 +3 1452 1453 1833 +3 1834 5605 1883 +3 5485 1835 5605 +3 5485 7994 1835 +3 7994 7268 1835 +3 7204 1885 1884 +3 1793 3972 1836 +3 725 2202 2994 +3 3972 1887 1836 +3 6927 4046 7299 +3 1795 1796 1837 +3 1796 1838 1837 +3 2616 6525 3965 +3 1796 1891 1838 +3 4276 6807 5791 +3 5944 6755 6707 +3 4405 1894 6021 +3 4405 3018 1894 +3 4639 1840 1839 +3 1840 4737 1839 +3 4739 7280 1841 +3 1808 4911 4909 +3 7271 6404 6189 +3 1054 6932 1842 +3 6404 7956 6189 +3 6388 1843 7728 +3 1843 1810 1844 +3 1810 7023 1845 +3 7023 1904 1845 +3 7023 1847 1904 +3 1847 7459 1846 +3 7459 8147 1846 +3 8159 7509 1848 +3 1814 1850 1849 +3 1850 1815 1908 +3 4606 5736 1851 +3 7862 1818 1852 +3 4322 1853 6963 +3 1853 6107 6963 +3 1855 1854 7999 +3 3208 7972 1768 +3 3208 1856 7972 +3 1856 1855 7972 +3 1856 1854 1855 +3 1820 1913 6391 +3 1857 8028 1772 +3 1859 1858 6514 +3 3284 7748 1860 +3 7825 1862 1861 +3 1862 1864 1861 +3 7829 5667 5442 +3 523 1863 251 +3 8072 654 1216 +3 1865 2290 1864 +3 4398 1866 7287 +3 3359 2289 1867 +3 5837 1868 7521 +3 1870 1824 1869 +3 1824 6239 1869 +3 5356 1824 1871 +3 1871 1776 1872 +3 1319 4920 1355 +3 3452 3514 1921 +3 3452 1873 3514 +3 7343 3588 1874 +3 7683 4200 3637 +3 7683 5350 4200 +3 1827 4326 3728 +3 4326 1924 3728 +3 1875 1877 1925 +3 1877 1829 1876 +3 5237 1215 1878 +3 1829 1927 1876 +3 1829 1879 1927 +3 1879 1880 5894 +3 1880 6430 1928 +3 6430 1881 1928 +3 6430 8074 1881 +3 8074 5724 1881 +3 8198 1832 1882 +3 1832 1883 6185 +3 1883 4368 1930 +3 1883 5605 4368 +3 7268 1884 1933 +3 1884 1885 1934 +3 1836 1886 1937 +3 1836 1887 1886 +3 1889 1888 5993 +3 1889 1837 1888 +3 1890 1891 6634 +3 7849 1838 1891 +3 7849 1982 1838 +3 7849 5461 1982 +3 7848 4136 5461 +3 7848 4134 4136 +3 7091 6806 7205 +3 1893 1892 2021 +3 6967 6925 612 +3 6707 1946 1892 +3 6707 6755 1946 +3 6021 1894 1895 +3 1894 4640 1896 +3 1839 1897 5177 +3 1839 4737 1897 +3 1898 265 264 +3 6042 5862 1899 +3 5862 5028 1899 +3 764 837 5901 +3 5862 5026 5028 +3 5027 6652 5029 +3 3332 4909 5441 +3 6189 1901 1900 +3 7956 7642 1901 +3 1844 1950 1902 +3 1845 1903 1950 +3 1845 1904 1903 +3 1904 6065 1903 +3 1904 1846 6065 +3 1846 8147 4974 +3 8147 1951 4974 +3 1848 1952 1951 +3 7509 1905 1952 +3 7509 1849 1905 +3 1849 1906 1905 +3 1849 1908 1906 +3 1908 1907 1906 +3 1908 1909 1907 +3 1909 1953 1907 +3 1909 1851 1953 +3 1851 1910 6736 +3 1910 1852 1911 +3 6391 1913 1912 +3 1913 6958 6148 +3 3250 6514 5953 +3 1915 1957 1914 +3 1915 1860 1957 +3 1860 5639 1957 +3 1860 3311 5639 +3 1916 1917 3312 +3 5287 1918 1917 +3 1861 1960 1918 +3 1861 1864 1960 +3 1864 2292 1960 +3 1864 2290 2292 +3 7912 1919 4430 +3 3405 6480 3407 +3 7044 5546 2815 +3 1869 6239 1962 +3 6239 3455 1962 +3 1921 1920 4141 +3 1874 3590 7048 +3 1922 876 845 +3 5544 5015 5016 +3 3637 4200 1964 +3 1924 5890 1923 +3 1925 1876 5220 +3 1876 1926 5220 +3 1927 1968 1926 +3 1927 5894 1968 +3 5894 4503 1968 +3 1928 4198 4503 +3 1881 1929 4198 +3 6185 1930 1974 +3 1930 1977 1931 +3 1930 4368 1977 +3 6663 1933 1932 +3 1933 1979 1932 +3 1933 1934 1979 +3 1934 1937 5848 +3 1973 6038 1935 +3 1937 1936 5848 +3 6050 3798 3758 +3 3983 5774 2535 +3 5993 1980 4087 +3 1888 1983 1938 +3 5461 4136 1939 +3 2775 1940 8082 +3 2775 1941 1940 +3 7091 7205 1942 +3 1942 7205 1943 +3 1944 7205 6806 +3 1892 1985 1945 +3 1892 1946 1985 +3 1946 4411 1985 +3 1947 1899 8122 +3 1899 1948 8122 +3 6844 7236 5176 +3 6917 1949 1989 +3 1900 1991 1949 +3 1900 1901 1991 +3 1901 5372 1991 +3 1901 7642 5372 +3 7642 1992 5372 +3 7642 1902 1992 +3 1902 5754 1992 +3 1950 2950 5754 +3 4974 1951 1995 +3 1952 8096 7129 +3 1906 1996 6534 +3 1907 1997 1996 +3 1907 1953 1997 +3 1953 7099 1997 +3 6736 1911 7098 +3 3321 1954 4327 +3 2464 6261 1954 +3 1955 7586 4253 +3 7440 2001 3209 +3 5954 7411 6751 +3 1914 1957 2003 +3 1957 1956 2003 +3 3312 1917 7739 +3 1917 1918 5531 +3 326 325 1958 +3 1918 1959 5531 +3 1918 1960 1959 +3 1960 2006 1959 +3 1960 2292 2006 +3 2815 1961 2008 +3 5546 1962 2049 +3 1963 5984 3547 +3 1963 7048 5984 +3 3639 1964 1965 +3 1966 6632 5856 +3 1923 5890 2010 +3 5220 1926 1967 +3 1926 1968 3422 +3 1968 4503 7583 +3 1929 2372 1969 +3 1929 6064 2372 +3 7159 1970 2013 +3 6186 1974 8051 +3 1974 1971 8051 +3 1973 6756 1972 +3 1974 1931 1971 +3 984 1024 7445 +3 1931 4039 1971 +3 1931 2018 4039 +3 3342 1975 1976 +3 1931 1977 2018 +3 1977 1932 2018 +3 1979 1978 2017 +3 1979 5848 1978 +3 3798 3067 6949 +3 4087 1980 7472 +3 1980 1938 1981 +3 1982 1983 1838 +3 1984 1938 1983 +3 1984 6162 1938 +3 1945 1985 1986 +3 1985 4411 4412 +3 678 1295 679 +3 6968 5849 7784 +3 1987 5155 5186 +3 1988 6653 5163 +3 6653 5679 7349 +3 2536 5071 7830 +3 1989 1990 4855 +3 1949 6493 1990 +3 1949 1991 6493 +3 5372 1992 7318 +3 2950 1993 6908 +3 2950 6217 1993 +3 1995 2031 2029 +3 1994 5009 8054 +3 1995 7129 2031 +3 6534 2033 7341 +3 6534 1996 2033 +3 1996 1997 1998 +3 1997 7099 6960 +3 4327 1999 2036 +3 1018 1096 8017 +3 1079 6625 7148 +3 1954 6261 2000 +3 3209 2040 3211 +3 3350 3394 3396 +3 3209 2001 2040 +3 6475 2001 1912 +3 8182 2040 2001 +3 6829 865 2002 +3 6751 7370 7854 +3 6751 7411 7370 +3 8197 2003 7723 +3 2003 3313 7723 +3 2004 1424 1513 +3 7739 5531 2005 +3 1959 2006 7943 +3 3362 3408 7253 +3 6734 3407 6480 +3 449 5520 447 +3 6734 5187 3407 +3 6734 2007 6499 +3 2008 6132 2007 +3 3547 2009 7516 +3 3547 5984 2009 +3 5984 3592 2009 +3 5856 5195 6830 +3 5195 2010 2055 +3 6401 2011 7567 +3 1967 2057 2011 +3 4502 1969 5689 +3 1969 6881 5689 +3 1969 2372 6881 +3 8050 1147 7122 +3 2372 2012 6881 +3 2013 2014 2012 +3 1970 2061 2014 +3 1971 5760 2015 +3 4039 2018 2016 +3 2018 2017 2016 +3 6949 3067 7771 +3 7830 5071 2158 +3 5961 6950 7799 +3 6162 5088 2108 +3 2020 5580 2019 +3 7275 6184 2777 +3 2777 6184 2066 +3 1945 5211 2021 +3 1945 6873 5211 +3 1986 2070 6872 +3 1986 4412 2070 +3 4410 2022 6327 +3 4410 5155 2022 +3 5155 2682 2022 +3 8043 4734 5466 +3 4734 2023 5405 +3 4775 2420 2024 +3 4855 5379 6390 +3 4855 1990 5379 +3 1990 2025 5379 +3 1990 6493 2025 +3 314 315 313 +3 6493 6273 2025 +3 7079 6661 2026 +3 5942 2027 6392 +3 6908 2028 2027 +3 1993 2078 2028 +3 8021 2029 2079 +3 2031 2030 6566 +3 2031 7342 2030 +3 7342 3662 2030 +3 7341 2033 2081 +3 2033 1998 2032 +3 2034 1551 1586 +3 1998 6960 2083 +3 5958 4480 2035 +3 2036 2037 5338 +3 1999 3034 2037 +3 1999 2000 3034 +3 3169 7729 2038 +3 3211 2040 2711 +3 2040 2039 2711 +3 2040 8182 2039 +3 7854 2041 2042 +3 7854 7370 2041 +3 7723 3313 2043 +3 2045 2044 3314 +3 2045 2047 2044 +3 2047 2046 2044 +3 2047 2005 2046 +3 707 744 4882 +3 7523 2294 2085 +3 2048 3412 3363 +3 6133 2049 3456 +3 6133 2091 4336 +3 6133 3456 2091 +3 5170 5177 5466 +3 2050 6573 3510 +3 2009 3592 2051 +3 7296 2093 3640 +3 7296 5906 2093 +3 2053 2052 2094 +3 6831 2054 2052 +3 6830 2096 2054 +3 2055 3060 2096 +3 7567 2011 2056 +3 2011 2097 2056 +3 2011 2057 2097 +3 2057 4062 2097 +3 2058 3788 4062 +3 2058 5690 3788 +3 5689 5642 2059 +3 2012 2014 6005 +3 2014 2061 2101 +3 2061 2060 2101 +3 2061 2015 2060 +3 6613 2306 7501 +3 2016 7186 6612 +3 7186 2062 3706 +3 2063 7121 5694 +3 7402 7070 2107 +3 5711 5998 1125 +3 7402 3820 7070 +3 2108 5088 2064 +3 6987 2065 3384 +3 2776 2778 4137 +3 2778 6938 4137 +3 2778 5437 6938 +3 2777 2066 5559 +3 5559 2066 5568 +3 4275 2067 6184 +3 2067 2066 6184 +3 2067 6090 2066 +3 8164 6243 2068 +3 778 2069 5006 +3 6243 2109 2068 +3 6872 2070 4413 +3 2072 6839 2071 +3 2024 5207 2073 +3 5031 2115 8142 +3 5031 4078 2115 +3 6390 2695 2074 +3 6390 5379 2695 +3 2025 6273 2075 +3 6273 6870 6841 +3 6392 2076 2077 +3 6392 2027 2076 +3 2027 4110 2076 +3 2027 2028 4110 +3 2028 5832 4110 +3 2028 2078 5832 +3 2078 2079 2119 +3 6535 2080 7960 +3 2030 2121 2120 +3 2030 3662 2121 +3 2081 2125 7680 +3 2081 2032 2125 +3 1545 2082 7505 +3 2032 2083 2127 +3 2083 6084 2126 +3 6084 6337 2126 +3 2037 3035 5885 +3 2137 2711 2712 +3 3285 5045 2084 +3 2046 2085 2134 +3 2085 2294 2086 +3 7436 5611 4058 +3 2087 7584 7052 +3 5432 2088 2295 +3 3363 2135 5189 +3 2089 5363 2729 +3 2089 8193 5363 +3 782 2090 1528 +3 8193 5937 5363 +3 4336 2091 2092 +3 7882 6418 6903 +3 7882 2051 6418 +3 3640 2093 6667 +3 2094 2095 4202 +3 2052 2145 2095 +3 2054 5395 2145 +3 2054 2096 5395 +3 2096 6219 5395 +3 2056 2097 7866 +3 3788 2151 5243 +3 2098 862 975 +3 5980 5274 2099 +3 2059 5641 2151 +3 6880 8023 2100 +3 2101 2102 7069 +3 2060 2154 2102 +3 2060 5136 2154 +3 5136 2103 2154 +3 7501 2156 2103 +3 7501 2306 2156 +3 2306 3704 2156 +3 6612 3706 2305 +3 3759 2104 2157 +3 2106 2105 1581 +3 5694 7121 4042 +3 2107 2160 6526 +3 6162 1981 1938 +3 2108 5681 6256 +3 5681 6396 6256 +3 5681 2161 2205 +3 2064 5087 2163 +3 2068 2109 5802 +3 2109 4413 2110 +3 7437 6124 4414 +3 2112 2111 2167 +3 2112 2071 2111 +3 2113 2073 8126 +3 3079 899 995 +3 2073 2114 8126 +3 8142 2115 6442 +3 2115 7256 6441 +3 2074 5168 4854 +3 2695 7985 2116 +3 7985 5858 2116 +3 7985 2075 5858 +3 2075 6841 2291 +3 2076 2117 6095 +3 5832 2119 2118 +3 2119 2174 2118 +3 2119 7590 2174 +3 7590 2120 2175 +3 2120 2121 2176 +3 2121 2123 2176 +3 7680 2122 2123 +3 7680 2125 2122 +3 1438 4128 2124 +3 2125 2178 2122 +3 2125 2127 2178 +3 2127 7772 2178 +3 2127 2126 7772 +3 2126 6337 2128 +3 2129 7759 4655 +3 5885 3035 2130 +3 3252 3287 3289 +3 2084 5044 6912 +3 7782 2132 3315 +3 830 2131 900 +3 7399 2133 2132 +3 3341 2897 2133 +3 3341 2134 2897 +3 2134 2296 2897 +3 2134 2086 2296 +3 5189 3413 6336 +3 5189 2135 3413 +3 2729 5363 2136 +3 7781 2092 2186 +3 3211 2711 2137 +3 6842 2138 2139 +3 7812 2511 2140 +3 2141 2190 5112 +3 2141 6903 2190 +3 1373 1878 2142 +3 6903 3596 2190 +3 4202 2143 2192 +3 2095 2145 2144 +3 2145 5394 2144 +3 3469 2146 3434 +3 6517 2147 7853 +3 6517 7866 2147 +3 2148 5697 6237 +3 4063 2150 2149 +3 5243 4508 2150 +3 5243 2151 4508 +3 2151 5646 4508 +3 5641 2152 5646 +3 5641 2100 2152 +3 5046 5479 1141 +3 2100 2195 2152 +3 2100 8023 2195 +3 8023 2198 2195 +3 7069 2153 2198 +3 7069 2102 2153 +3 2102 2154 7169 +3 2103 2155 7439 +3 1239 7238 1279 +3 2156 7697 2155 +3 2157 3801 3760 +3 3801 6740 3760 +3 7830 2158 2063 +3 3988 4042 4041 +3 2160 2159 2204 +3 2205 2161 2162 +3 2161 2163 5392 +3 5558 2164 2208 +3 6090 5568 2066 +3 5325 2165 2211 +3 2167 8213 2166 +3 2168 2071 6839 +3 2168 8151 2071 +3 6442 2169 6888 +3 4854 2218 2170 +3 5168 2219 2218 +3 2116 6335 2219 +3 2291 7309 2171 +3 6885 2172 7309 +3 6095 2221 2172 +3 2117 2222 2221 +3 6946 5792 5958 +3 2173 2223 2222 +3 2173 2118 2223 +3 2118 2174 2224 +3 2174 2175 6503 +3 2175 2176 2226 +3 2176 2123 2177 +3 2122 2178 4525 +3 2128 5292 5855 +3 4655 6586 4332 +3 4655 7759 6586 +3 2179 6471 3173 +3 3212 6713 3366 +3 6713 2179 3366 +3 6713 6471 2179 +3 6591 2713 6712 +3 3253 3288 2180 +3 6040 5535 2181 +3 2132 2133 2182 +3 2897 2296 2183 +3 6336 3413 2234 +3 2184 2136 5773 +3 2136 2185 5773 +3 5362 2238 2185 +3 4330 2186 2187 +3 2189 2139 2188 +3 5112 7671 3551 +3 5112 2190 7671 +3 2190 3596 2191 +3 2192 2193 4204 +3 2143 5898 2193 +3 2143 2144 5898 +3 2144 2240 5898 +3 2144 5394 2240 +3 5394 6790 6250 +3 6790 2241 6250 +3 2147 2242 2194 +3 2147 2149 2242 +3 2152 2195 2250 +3 2195 2198 2196 +3 2497 2197 5219 +3 2198 2199 2196 +3 2153 4771 2199 +3 2153 7169 4771 +3 7169 3862 4771 +3 7439 2155 2253 +3 2155 4830 2253 +3 2155 7697 4830 +3 6764 4041 6999 +3 965 3441 1052 +3 100 2200 2201 +3 6407 2203 6697 +3 2994 2202 5809 +3 2204 4500 2203 +3 2205 7368 7185 +3 5505 2206 2207 +3 2162 5392 6864 +3 2208 8014 2779 +3 2779 8014 7647 +3 2211 2209 8190 +3 6008 1685 1737 +3 2211 8132 2209 +3 2211 2210 8132 +3 2165 2212 2210 +3 2165 5703 2212 +3 2215 2685 5474 +3 4386 2213 931 +3 2215 2214 2685 +3 2166 2216 6664 +3 2166 8213 2216 +3 8213 4190 4732 +3 3194 5730 5650 +3 3194 5032 5730 +3 6888 2217 7707 +3 2170 2262 4853 +3 2170 2218 2262 +3 2218 2219 2264 +3 6335 2171 2267 +3 2171 7396 2267 +3 7309 2172 2220 +3 2172 2268 2220 +3 2172 2221 2268 +3 7820 5075 5973 +3 2221 2222 7573 +3 2222 2223 7990 +3 2224 2225 7435 +3 6503 2272 2225 +3 2226 2177 2634 +3 2228 2229 2227 +3 4525 7455 2229 +3 4525 4339 7455 +3 5855 4476 6007 +3 4332 7591 2274 +3 6712 2715 2230 +3 2180 5576 7037 +3 2180 3288 5576 +3 2181 3361 3290 +3 2231 7807 5290 +3 5535 2232 3361 +3 6300 2182 2233 +3 2182 7418 2233 +3 2182 5748 7418 +3 4472 7419 2297 +3 2235 2234 4875 +3 2730 2300 5529 +3 2185 2301 5486 +3 2236 659 1025 +3 2185 2238 2301 +3 2238 2187 2237 +3 2239 7823 3457 +3 2239 2188 7823 +3 3551 2302 6201 +3 4204 2193 6478 +3 2240 2307 5409 +3 2241 2194 7413 +3 2242 2311 4364 +3 2242 6945 2311 +3 6945 2243 2311 +3 2247 2244 2312 +3 2246 875 2245 +3 2247 7646 2244 +3 5878 3856 5322 +3 6917 1900 1949 +3 7646 2248 2244 +3 7646 2250 2248 +3 6332 4399 2249 +3 2250 2196 5561 +3 2196 2251 5561 +3 4771 3862 2316 +3 3862 2252 2316 +3 3862 2253 2252 +3 2253 4830 7787 +3 6309 7502 3763 +3 2254 1124 3196 +3 6309 2255 7503 +3 6654 4040 2256 +3 6697 2203 2319 +3 2203 2257 2319 +3 4500 5914 2320 +3 5914 2258 2320 +3 5914 2259 2258 +3 2259 4142 2258 +3 2779 7647 5452 +3 5452 7647 7719 +3 7647 2322 7719 +3 5474 2685 2688 +3 2216 4732 2260 +3 4853 2329 2261 +3 4853 2262 2329 +3 2262 5654 2329 +3 2262 2264 5654 +3 2264 2263 5654 +3 2264 2265 2263 +3 478 5922 3668 +3 2265 2266 2263 +3 2267 7887 2266 +3 2220 2268 6426 +3 7990 2269 2270 +3 2271 1809 1759 +3 7990 7435 2269 +3 7435 5591 2269 +3 7435 2225 5591 +3 2225 2272 5590 +3 2272 2634 2273 +3 2274 2337 4338 +3 7591 4520 2275 +3 2276 4134 7848 +3 2277 1191 5895 +3 2230 2715 6032 +3 7037 2703 3257 +3 3290 6046 6492 +3 3290 3361 6046 +3 2279 8201 2278 +3 8201 2342 2278 +3 7539 1267 5698 +3 7539 2280 1267 +3 2280 2281 1267 +3 7284 1337 2281 +3 7284 2282 1337 +3 2282 2283 1337 +3 6324 1424 2283 +3 6324 2284 1424 +3 2284 1513 1424 +3 7537 2287 2285 +3 2287 2288 2286 +3 2288 1597 2286 +3 1739 1636 1597 +3 1739 6544 1636 +3 2289 1822 5302 +3 2289 7521 1822 +3 7401 2290 1821 +3 5268 2292 2290 +3 2075 2291 5858 +3 4058 2006 2292 +3 4058 5611 2006 +3 5611 7943 2006 +3 5611 2295 7943 +3 2293 1478 1538 +3 2295 7409 2294 +3 7578 4472 2296 +3 4472 2297 2183 +3 2297 4544 2298 +3 5529 2348 2299 +3 5529 2300 2348 +3 1713 7550 7833 +3 2300 5486 2350 +3 2301 2352 2349 +3 2301 2237 2352 +3 3457 4684 2354 +3 3457 7823 4684 +3 2302 6749 2355 +3 2303 3395 1610 +3 5617 2304 7376 +3 5403 2698 6190 +3 2306 6612 2305 +3 5409 5125 2698 +3 5409 2307 5125 +3 2307 2309 2308 +3 2309 2358 2308 +3 4364 2310 7827 +3 2311 8178 2310 +3 2312 2313 6323 +3 914 3573 6340 +3 2244 5721 2313 +3 2314 2366 2364 +3 2314 2316 2366 +3 2316 2315 2366 +3 2252 2317 2315 +3 2252 7787 2317 +3 3763 2318 6139 +3 3763 7502 2318 +3 2256 4038 3991 +3 6384 5179 4091 +3 6384 2319 5179 +3 2257 2320 6788 +3 1359 1326 1413 +3 2320 5902 6788 +3 2258 4142 2371 +3 7719 4271 2321 +3 7719 2322 4271 +3 6381 5502 2373 +3 4415 2687 6767 +3 2324 2323 2375 +3 5378 2260 2325 +3 2326 2327 5035 +3 6657 2379 2327 +3 2261 2328 6285 +3 2261 2329 2328 +3 2329 6874 2328 +3 2263 2381 7374 +3 6721 6173 6265 +3 2263 2266 2381 +3 2266 7887 2330 +3 7887 2382 2330 +3 4084 1797 1796 +3 7887 7395 2382 +3 7395 2384 2382 +3 6001 7769 393 +3 2269 5591 2385 +3 5591 7757 2385 +3 5590 2273 2331 +3 416 7460 6222 +3 2273 6690 2331 +3 2273 2333 6690 +3 2333 2332 6690 +3 2333 4963 2332 +3 4963 2388 2332 +3 4963 2334 2388 +3 2334 2389 2388 +3 7916 2335 2389 +3 4338 2337 2336 +3 2337 2275 6484 +3 3174 6264 2338 +3 2339 2716 2392 +3 3316 2278 2340 +3 2278 2341 2340 +3 276 235 892 +3 2278 2342 2341 +3 2342 2343 2341 +3 2344 2531 2343 +3 1622 5715 2345 +3 4544 6416 2346 +3 2654 6089 2347 +3 2299 2400 6758 +3 2299 2348 2400 +3 2348 2492 2400 +3 2350 2402 2492 +3 2350 2349 2402 +3 4159 5111 2351 +3 2349 2352 2353 +3 2354 5004 3458 +3 7002 5583 3554 +3 5781 7387 5583 +3 5781 2355 7387 +3 5535 6582 2232 +3 2356 5098 2404 +3 5125 2308 2357 +3 2358 7827 2408 +3 2310 7170 2359 +3 2310 8178 7170 +3 8178 2360 7170 +3 8178 6323 2360 +3 6323 2313 2361 +3 6709 7707 5033 +3 2313 5721 2362 +3 5721 2411 2362 +3 5069 2412 2411 +3 1135 6246 4968 +3 5069 7371 2412 +3 7371 2363 2412 +3 2364 2365 2363 +3 2366 2367 2365 +3 2315 6069 2367 +3 6139 2368 2369 +3 3991 6220 3992 +3 4091 2370 4092 +3 4091 5179 2370 +3 5179 2508 2370 +3 6788 5118 5344 +3 2258 2371 5902 +3 8 22 72 +3 6788 5902 5118 +3 2372 2013 2012 +3 7189 2321 2421 +3 6052 2373 2422 +3 2375 7879 2374 +3 6838 4053 7332 +3 2323 2325 7880 +3 2377 8140 2376 +3 5020 2378 3803 +3 5035 2327 2424 +3 2327 2379 6410 +3 2328 2380 5818 +3 2328 6874 2380 +3 6874 6019 2380 +3 7374 2381 6018 +3 2381 2330 4788 +3 2330 2427 4788 +3 2330 2382 2427 +3 2382 2384 2383 +3 2384 8175 7950 +3 3443 2429 4936 +3 3443 5714 2429 +3 5714 2431 2429 +3 5714 2385 2431 +3 2332 2386 2435 +3 2332 2388 2386 +3 2388 2387 2386 +3 2388 2389 2387 +3 2389 7665 2387 +3 6791 2391 2390 +3 2336 2438 2391 +3 2392 2717 6289 +3 3256 3293 5798 +3 3256 3291 3293 +3 7024 2442 6771 +3 6045 2393 2442 +3 6045 6995 2393 +3 2395 2394 5738 +3 2395 2340 2394 +3 2340 2443 2394 +3 2341 2396 2443 +3 2341 2343 2396 +3 2343 2531 5121 +3 2397 2346 6158 +3 6758 2400 2398 +3 2400 2399 2398 +3 2402 2353 2401 +3 3458 5004 8083 +3 3554 2403 5620 +3 3554 5583 2403 +3 6498 8162 3643 +3 4206 2404 3474 +3 2405 5126 2454 +3 5126 7507 2454 +3 2357 8063 7507 +3 2357 2406 8063 +3 2408 2457 4085 +3 634 2407 666 +3 2408 2359 2457 +3 2359 7170 5370 +3 2360 2409 2410 +3 2360 2361 2409 +3 2361 2460 2409 +3 2361 2362 2460 +3 2362 6907 2460 +3 2362 2411 6907 +3 2411 2412 2413 +3 2412 2363 6799 +3 2363 2462 6799 +3 2363 2365 2462 +3 2365 2414 2462 +3 2367 6069 2415 +3 2369 3808 2416 +3 3992 2417 2418 +3 3992 6220 2417 +3 2370 2508 2509 +3 5344 5118 2465 +3 5118 4144 2465 +3 7189 2421 2419 +3 2024 2420 5207 +3 2419 2421 2466 +3 7329 2468 7492 +3 2422 7420 8055 +3 2374 2423 4646 +3 2376 5036 3128 +3 7599 5427 5037 +3 2424 4904 5427 +3 5903 2425 5946 +3 2380 8061 2473 +3 6019 2475 8061 +3 6018 4788 2426 +3 2427 2476 4787 +3 2427 2383 2476 +3 2383 5198 2476 +3 7950 2479 5198 +3 4936 2429 2428 +3 2429 2480 2428 +3 2431 2430 2480 +3 4847 1565 1564 +3 2431 7112 2430 +3 7600 2432 5628 +3 7112 2433 4335 +3 2433 7915 2434 +3 2435 2436 2484 +3 2386 6334 2436 +3 2390 2391 5251 +3 2437 5698 7553 +3 2391 6456 5251 +3 2391 2438 6456 +3 1349 2439 7873 +3 6289 5811 2440 +3 6771 2442 2441 +3 2442 6781 2441 +3 2443 5840 6754 +3 5205 5244 6588 +3 6090 4273 5568 +3 7639 2445 2444 +3 2398 2491 2445 +3 5620 2446 2494 +3 2403 2447 2446 +3 2403 3600 2447 +3 7676 5955 2448 +3 3643 4209 2449 +3 3643 8162 4209 +3 4207 2450 2451 +3 3474 2452 2450 +3 8107 2499 2452 +3 8107 2453 2499 +3 2453 2454 2498 +3 2454 7506 2498 +3 8063 4085 2455 +3 4085 2456 2455 +3 2457 2458 2456 +3 5370 2502 2458 +3 2410 2459 2502 +3 2409 2503 2459 +3 2409 2460 2503 +3 2460 6304 2503 +3 6799 2462 2461 +3 2462 5334 2461 +3 2416 3808 7685 +3 3358 4547 3402 +3 4547 2507 3402 +3 1888 1938 1980 +3 4547 2509 2507 +3 5314 5053 2510 +3 6963 2463 2464 +3 5314 2465 5053 +3 2465 4146 5053 +3 2467 2466 2512 +3 6247 2421 2321 +3 7492 2514 7870 +3 7492 2468 2514 +3 2468 8055 2469 +3 4417 2691 2470 +3 7846 2423 7879 +3 7846 4731 2423 +3 3128 5036 2471 +3 5282 5817 2472 +3 5817 2519 2472 +3 5817 2473 2519 +3 2473 2521 2519 +3 60 7192 527 +3 8061 2475 2474 +3 2475 2522 2474 +3 2475 2426 2522 +3 4787 2476 2524 +3 5198 2479 2477 +3 2479 2428 2478 +3 2428 2480 2525 +3 2480 2483 2525 +3 2481 899 3079 +3 2430 2482 2483 +3 2430 4335 2482 +3 2434 2484 6871 +3 2485 7131 4340 +3 5251 6456 2486 +3 7524 6687 3176 +3 3215 8129 2338 +3 2440 5811 2528 +3 5271 6688 3260 +3 2487 2529 6716 +3 2487 2441 2529 +3 3317 5841 5985 +3 5841 6754 2488 +3 5840 7033 2530 +3 7380 6266 2489 +3 6588 5244 2490 +3 2444 8216 7134 +3 2444 2445 8216 +3 2445 2491 6641 +3 2491 6628 6641 +3 5160 6851 5270 +3 5160 2399 6851 +3 2399 2492 6851 +3 5160 5270 2493 +3 2494 7837 5447 +3 2450 5085 2495 +3 2450 2452 5085 +3 5104 2496 1669 +3 2452 2542 5085 +3 2452 2499 2542 +3 2499 2544 2542 +3 2497 6205 2197 +3 2499 2498 2544 +3 2498 7506 2500 +3 2456 2545 7036 +3 2458 2501 2545 +3 2502 6637 2501 +3 2459 2503 8068 +3 2503 6304 2504 +3 6862 7898 5783 +3 7898 2461 6204 +3 5334 6321 2505 +3 3766 2506 2549 +3 3766 7685 2506 +3 3402 2507 2552 +3 2507 2554 2552 +3 5314 2509 2508 +3 2510 2507 2509 +3 2510 2554 2507 +3 2467 2512 2783 +3 2783 2512 2555 +3 2512 4268 2555 +3 2140 2511 930 +3 2512 3604 4268 +3 6074 2557 7312 +3 7329 4270 2513 +3 7329 7492 4270 +3 2514 2469 4418 +3 2470 2691 2515 +3 6540 6235 2516 +3 7065 5976 6800 +3 5976 2517 6800 +3 5039 7467 2518 +3 2472 5799 5989 +3 2519 6312 5799 +3 5053 4146 4147 +3 2521 2474 2520 +3 2474 2563 2520 +3 686 7545 767 +3 2522 2564 2563 +3 2522 7353 2564 +3 7353 2524 4728 +3 2523 5480 504 +3 2524 3576 6330 +3 2477 2566 6062 +3 2478 2567 2566 +3 2478 2525 2567 +3 2525 2483 5867 +3 2483 2526 5867 +3 3899 6871 5158 +3 6871 4735 5158 +3 5222 6703 4468 +3 7131 2527 7842 +3 3356 6104 5430 +3 3356 2528 6104 +3 3260 6971 2569 +3 2529 7811 6776 +3 5985 2488 2572 +3 2488 2530 5433 +3 2397 2531 7658 +3 2489 5839 5121 +3 2489 2761 5839 +3 2761 2532 7033 +3 2533 2490 5171 +3 1647 1602 2534 +3 2536 2535 5071 +3 6641 2537 8155 +3 1430 7122 3721 +3 6641 6628 2537 +3 6628 2493 3217 +3 3460 4793 2538 +3 5447 2539 2540 +3 7837 2577 2539 +3 7837 6683 2577 +3 5923 4208 2578 +3 4234 2495 7565 +3 2542 2541 2582 +3 2544 2500 2543 +3 6569 7756 409 +3 2500 5648 2543 +3 447 5520 5616 +3 2500 5880 5648 +3 5880 7043 5648 +3 5880 7101 7043 +3 7101 2585 7043 +3 7101 7036 2585 +3 7036 2586 2585 +3 7036 2545 2586 +3 2545 2588 2586 +3 2501 7404 2588 +3 2501 6637 7404 +3 8068 2546 6527 +3 2504 2591 2546 +3 2504 2547 2591 +3 2547 3200 2591 +3 5921 1503 3193 +3 6204 5335 2548 +3 5335 3701 2548 +3 2549 3810 3769 +3 267 5218 296 +3 2550 7965 2594 +3 5882 2551 6843 +3 2552 2553 2551 +3 2554 2597 2553 +3 2554 5054 2597 +3 5054 2598 2597 +3 5054 4147 2598 +3 7105 4524 646 +3 2783 2555 2599 +3 2555 7640 2556 +3 2557 2601 7557 +3 2557 6196 2601 +3 6196 4421 2601 +3 6196 4418 4421 +3 5551 958 5786 +3 5115 2696 2558 +3 2516 2559 2696 +3 2560 2518 7559 +3 5989 2561 2562 +3 5799 6312 2604 +3 2520 5846 7173 +3 2520 2563 5846 +3 2564 4727 5845 +3 6330 2606 2565 +3 6062 2566 5514 +3 2567 5867 2609 +3 2568 7153 5327 +3 4468 4466 6460 +3 5487 5242 4342 +3 2345 5715 1757 +3 2569 6970 4157 +3 6776 4535 2570 +3 4234 7565 2580 +3 6776 7811 4535 +3 8181 2617 2571 +3 6297 6316 2617 +3 6297 2572 6316 +3 2572 5433 6315 +3 5433 3517 6315 +3 1142 2573 5756 +3 4773 6031 5024 +3 2532 4585 7227 +3 2575 7209 2574 +3 7209 6025 2574 +3 2537 3461 2576 +3 2539 2577 5631 +3 2579 2578 6892 +3 2580 2623 5629 +3 2582 7876 2581 +3 2541 2543 2583 +3 2543 2584 2583 +3 2543 5648 2584 +3 7043 2585 7478 +3 2585 2586 2587 +3 2586 2588 2627 +3 6527 2589 5349 +3 6527 2546 2589 +3 2546 2591 2590 +3 2591 6175 2590 +3 2548 3699 2592 +3 3769 3810 2593 +3 2595 2594 4035 +3 4097 6843 2596 +3 2551 2553 2636 +3 700 4291 699 +3 2553 2597 2635 +3 2597 2598 2637 +3 2599 2556 8020 +3 7557 2601 2600 +3 2601 2722 2600 +3 2601 4421 2722 +3 2558 2697 3506 +3 2558 2696 2697 +3 5457 5340 6436 +3 5876 2643 2602 +3 4849 2603 7551 +3 4849 2562 2603 +3 2562 8105 2603 +3 2561 2604 8104 +3 2604 6780 8104 +3 5846 2646 4334 +3 4727 2565 2605 +3 2565 2648 2605 +3 2565 2606 2648 +3 5514 2607 5429 +3 5506 2609 2650 +3 2609 2608 2650 +3 2609 8073 2608 +3 5327 7347 7426 +3 7153 2612 2610 +3 2612 2611 2610 +3 2612 6460 2611 +3 5242 3039 2613 +3 2614 5789 2708 +3 4157 6970 2615 +3 2570 2656 5834 +3 2570 4535 2656 +3 2616 7675 6525 +3 2571 2617 2658 +3 6316 5250 5744 +3 6315 3517 5249 +3 3368 7750 2618 +3 4923 2574 2619 +3 2574 2620 2619 +3 2574 6025 2620 +3 2576 3461 2662 +3 4221 3507 2664 +3 3555 3548 3557 +3 2621 3602 3548 +3 5629 2622 5673 +3 2623 2667 2622 +3 2623 2914 2667 +3 2914 2668 2667 +3 2914 2581 2668 +3 2551 2636 3119 +3 2606 5514 5429 +3 2583 2625 6464 +3 2584 2624 2625 +3 2584 2626 2624 +3 2626 2669 2624 +3 2626 7478 2669 +3 2587 2627 7163 +3 5827 5349 7335 +3 2589 2590 2672 +3 2590 2628 2672 +3 6175 2675 2628 +3 6175 4125 2675 +3 2592 2629 2676 +3 2592 3699 2629 +3 2630 4582 8157 +3 2630 2593 4582 +3 3994 4034 2631 +3 3994 4035 4034 +3 4098 5567 2632 +3 4098 2596 5567 +3 2596 2633 5567 +3 2636 7808 7359 +3 2634 2333 2273 +3 2636 2635 7808 +3 2635 2637 4149 +3 2639 7832 2638 +3 2641 2679 2640 +3 2343 5121 2396 +3 2641 2600 2679 +3 2600 2680 2679 +3 3996 5231 2692 +3 6436 5340 2642 +3 2643 8177 8077 +3 2603 8105 2699 +3 8104 7980 2644 +3 6780 4334 2645 +3 4334 2646 6054 +3 4790 2605 2647 +3 2605 2648 5911 +3 2607 2649 7747 +3 2607 2650 2649 +3 8071 4744 1550 +3 2650 7292 2649 +3 2610 6832 7346 +3 4343 2651 2707 +3 3672 5151 2651 +3 2653 2652 7476 +3 3364 6089 2654 +3 4156 2724 3262 +3 2460 6907 6304 +3 4156 2615 2724 +3 2655 6542 3654 +3 5834 2656 5820 +3 2474 2522 2563 +3 6914 2657 6894 +3 2658 3802 2657 +3 2658 5744 3802 +3 5250 2659 7597 +3 2532 7227 7383 +3 2199 2314 2251 +3 7227 3517 7383 +3 6934 2660 5249 +3 3367 2618 2661 +3 1759 1843 6388 +3 8109 2619 7081 +3 2619 7226 7081 +3 2740 2662 2663 +3 2664 7237 3462 +3 2665 4160 194 +3 3557 2744 3558 +3 3548 3602 2666 +3 5673 2622 7884 +3 2622 2748 7884 +3 2622 2667 2748 +3 2667 2749 2748 +3 2667 2668 2749 +3 2668 2750 2749 +3 7835 4747 1250 +3 2668 6398 2750 +3 6398 2753 2750 +3 2624 6928 2755 +3 2624 2669 6928 +3 2669 7164 7803 +3 7163 2670 2671 +3 5584 2672 6223 +3 2672 2674 6223 +3 2628 2673 2674 +3 2628 2675 2673 +3 2675 2676 6331 +3 2676 3696 6331 +3 745 2677 822 +3 2631 4033 3995 +3 2678 7358 963 +3 2631 4034 4033 +3 2640 2679 2789 +3 2679 2680 2681 +3 2684 2022 2682 +3 2684 2683 2022 +3 5665 5299 1872 +3 4643 6380 2214 +3 6380 2686 2685 +3 2686 2688 2685 +3 5236 2687 2688 +3 5236 2689 2687 +3 2689 5749 2687 +3 2690 7718 5749 +3 4647 5366 2691 +3 5366 2515 2691 +3 5366 4648 2515 +3 4648 5413 2515 +3 4648 5232 5413 +3 2693 4649 2692 +3 4649 2794 2692 +3 5940 5826 8088 +3 5940 2694 5826 +3 2074 2695 5168 +3 7788 1159 7055 +3 4729 2697 2696 +3 6765 2694 2697 +3 4726 6427 2796 +3 5570 2798 6160 +3 6190 2698 2405 +3 7045 2699 6115 +3 2644 7980 2700 +3 6470 609 2701 +3 2645 5556 2702 +3 6054 3953 5556 +3 7495 2647 3952 +3 5911 5417 6599 +3 3257 2703 3291 +3 2704 7265 5417 +3 1202 3447 1203 +3 2704 7747 7265 +3 7425 7346 2705 +3 7346 5801 2705 +3 2707 2706 4346 +3 2651 5151 3041 +3 2708 3178 2614 +3 2708 2709 3178 +3 2709 3179 3178 +3 2710 2804 3218 +3 3251 2712 2711 +3 3254 6590 2712 +3 2714 3255 2713 +3 3255 2715 2713 +3 3231 7330 6617 +3 5273 1429 3535 +3 3255 8037 2715 +3 8037 6032 2715 +3 3258 2716 6032 +3 3259 2717 2716 +3 4663 2718 2528 +3 1185 863 2719 +3 2718 7858 6104 +3 6890 2720 2652 +3 2721 7748 3284 +3 5245 2804 7476 +3 2600 2722 2680 +3 3262 4192 2723 +3 3262 2724 4192 +3 6542 3318 2725 +3 2657 5330 2726 +3 3802 7597 2727 +3 422 486 6495 +3 2659 3334 2728 +3 3369 2809 5547 +3 3369 2661 2809 +3 2729 3411 3410 +3 2729 2184 3411 +3 2184 6353 3411 +3 2184 2730 6353 +3 2730 5529 2731 +3 5755 2732 2733 +3 2299 3414 6354 +3 2299 6758 3414 +3 6033 1184 8003 +3 6758 5440 3414 +3 2444 7519 2734 +3 2575 2735 7133 +3 8109 2738 5147 +3 1483 3497 2736 +3 2737 2810 3415 +3 2738 7971 2737 +3 7081 2739 7971 +3 7081 7226 2739 +3 2741 2620 2740 +3 2741 2663 6604 +3 2482 2568 2526 +3 3558 2744 2742 +3 2744 2743 2742 +3 2744 2666 2743 +3 2746 2745 3647 +3 2746 6365 2745 +3 7884 2748 2747 +3 2748 7538 2747 +3 2748 2749 7538 +3 2749 2750 2751 +3 2750 2753 2752 +3 4342 3672 4343 +3 2753 2754 2752 +3 4359 2816 2754 +3 4359 2755 2816 +3 6928 2818 7095 +3 5373 7318 6870 +3 6508 2822 2756 +3 2673 5518 2757 +3 3995 4033 6738 +3 6646 2827 6833 +3 6093 5969 2827 +3 6093 2758 5969 +3 2701 1440 7377 +3 2701 5717 1440 +3 740 775 2759 +3 775 2760 2759 +3 2761 3365 2532 +3 775 7029 2760 +3 7029 849 3145 +3 849 1442 3145 +3 849 879 1442 +3 879 2762 1442 +3 878 1443 2762 +3 878 2763 1443 +3 2763 2765 2764 +3 2765 1445 2764 +3 2765 6230 1445 +3 6230 2766 2767 +3 7063 2768 1446 +3 2769 7474 618 +3 6977 2770 1449 +3 2770 7051 1448 +3 7051 1451 1448 +3 7051 6752 1451 +3 6752 2771 7690 +3 4526 2772 6773 +3 2106 2773 2772 +3 1581 1580 2773 +3 6557 5926 2774 +3 5926 6620 1708 +3 6357 6447 1799 +3 6447 2775 1799 +3 2772 2773 5034 +3 7275 2776 7687 +3 7275 2777 2776 +3 2777 5559 2778 +3 5559 5437 2778 +3 2208 2829 6322 +3 2208 2779 2829 +3 2779 6114 2829 +3 2779 5452 6114 +3 5452 2831 6114 +3 3879 7189 2780 +3 2419 2834 2781 +3 2419 2467 2834 +3 7905 5178 6386 +3 2467 2782 2834 +3 2467 2783 2782 +3 2783 2835 2782 +3 1540 6174 2784 +3 2783 2599 2835 +3 2599 8020 2837 +3 8020 2785 2837 +3 2639 2838 2785 +3 2639 6701 2838 +3 6701 7635 6901 +3 7635 6986 6901 +3 6701 2786 7635 +3 7557 2641 7864 +3 2641 6846 7864 +3 2640 2787 6846 +3 6563 1354 2788 +3 5883 7531 2787 +3 5883 2789 2790 +3 3975 5194 721 +3 2789 2681 2791 +3 302 556 2792 +3 2794 2793 2841 +3 6726 1505 5870 +3 2795 2796 7859 +3 2796 8165 7859 +3 5042 2797 8166 +3 6160 2798 2844 +3 3820 6256 6396 +3 6115 2847 4617 +3 6786 2849 2847 +3 6786 2700 2849 +3 5417 7265 2799 +3 7966 2800 2856 +3 2800 6293 2856 +3 7291 8018 2801 +3 8018 2858 2801 +3 8018 2705 2858 +3 2705 2802 2858 +3 5801 4461 2802 +3 3218 2803 2861 +3 3218 2804 2803 +3 2804 5245 2805 +3 2723 2864 3264 +3 3204 1632 5223 +3 2723 4192 2864 +3 2807 2806 5131 +3 4193 2725 6930 +3 2725 3318 4859 +3 6893 2726 2808 +3 2726 5586 2808 +3 5547 3417 6797 +3 5547 2809 3417 +3 2810 2811 3416 +3 2737 2869 2811 +3 2737 7971 2869 +3 6779 3463 2925 +3 2812 2872 6369 +3 2812 2742 2872 +3 2813 8039 2874 +3 2747 5384 5439 +3 7538 2751 2814 +3 2751 2877 2814 +3 2751 2752 2877 +3 7525 7044 2815 +3 2752 2878 2877 +3 2816 2879 7695 +3 2816 7095 2879 +3 1228 6212 6574 +3 7095 2817 2879 +3 7095 2818 2817 +3 2818 2819 2817 +3 7802 2880 2819 +3 2756 2883 2882 +3 2820 8017 1094 +3 2822 2885 2883 +3 2822 2821 2885 +3 2700 2823 2849 +3 5518 4460 4006 +3 5518 2824 4460 +3 2826 2825 3770 +3 2826 6131 2825 +3 3998 6738 4032 +3 6833 2827 6202 +3 6705 4153 5661 +3 7418 2298 7658 +3 6705 4152 4153 +3 6322 4139 2828 +3 6322 2829 4139 +3 2829 6068 4139 +3 6114 2831 2830 +3 2831 4140 2830 +3 2831 2780 4140 +3 2780 2832 4140 +3 2780 2781 2832 +3 2781 2834 4143 +3 2834 2833 4143 +3 2782 4145 2833 +3 2782 2835 4145 +3 2837 2836 7692 +3 2838 4148 5618 +3 6901 4150 4148 +3 6901 6986 4150 +3 2839 2892 2890 +3 2839 2790 2892 +3 2790 2791 6998 +3 2840 3819 4422 +3 2840 2841 3819 +3 2841 4653 3819 +3 8166 5078 2842 +3 745 822 821 +3 2845 2900 2843 +3 2845 2844 2900 +3 2844 4617 2846 +3 4617 2902 2846 +3 4617 2847 2902 +3 2847 2849 2848 +3 2849 2850 2848 +3 2823 5977 2850 +3 6710 2852 2851 +3 2852 7572 2851 +3 2854 2853 7572 +3 2854 6600 2853 +3 5418 2799 2904 +3 2799 2906 2904 +3 7577 2856 5637 +3 2856 2855 5637 +3 6293 2801 2857 +3 2801 2858 2909 +3 2858 2802 2910 +3 2802 2859 2910 +3 6137 2912 6828 +3 6731 2860 3043 +3 7966 2856 7577 +3 2861 2862 5935 +3 2803 3265 2862 +3 3264 3294 2863 +3 3264 2864 3294 +3 6930 4859 2865 +3 2808 2866 2919 +3 2808 5586 2866 +3 5586 2921 2866 +3 6797 3417 2867 +3 3416 2923 2868 +3 3416 2811 2923 +3 611 5979 6662 +3 2811 2869 6267 +3 2869 2924 6267 +3 2869 2926 2924 +3 2870 5987 2929 +3 6369 2872 5404 +3 2872 2871 3607 +3 3648 4212 7463 +3 4211 4539 2873 +3 4211 2874 4539 +3 5384 2875 6394 +3 2814 2877 2876 +3 2877 5352 2876 +3 2878 2934 5352 +3 2878 7695 2934 +3 7695 7272 2934 +3 7695 2879 7272 +3 2819 2880 2939 +3 2880 3737 2881 +3 1774 3310 7334 +3 3737 2882 5269 +3 2882 2883 2940 +3 2883 2884 2940 +3 2885 2943 2884 +3 2885 7843 2943 +3 7563 5803 5659 +3 7563 4032 5803 +3 6202 6869 2886 +3 5669 2948 5680 +3 5427 4904 2887 +3 5661 2888 2948 +3 5661 4153 2888 +3 7184 2951 2949 +3 7184 6837 2951 +3 2839 2890 2889 +3 2890 5950 4265 +3 2890 2892 2891 +3 2892 6998 2953 +3 4422 3819 4437 +3 4652 6504 2893 +3 6504 2955 2893 +3 4724 2894 5708 +3 1542 1576 2895 +3 2842 2896 2958 +3 2133 2897 5748 +3 5078 7177 2896 +3 5078 2898 7177 +3 2843 2899 2959 +3 2843 2900 2899 +3 2900 6992 2899 +3 2900 2846 6992 +3 2902 2848 2901 +3 6629 2293 1557 +3 2850 5977 7582 +3 2084 6912 6039 +3 5977 2851 2962 +3 2851 2964 2962 +3 2853 6002 2903 +3 7090 2904 2967 +3 2904 7875 2967 +3 2906 5637 2905 +3 6260 1107 6826 +3 2855 2907 2908 +3 2855 2857 2907 +3 1975 7776 6294 +3 2857 2970 2907 +3 2857 2909 2970 +3 2910 4457 7720 +3 6828 2912 2911 +3 2912 7850 2911 +3 2912 3043 7850 +3 7264 2913 7851 +3 7565 6948 2914 +3 7264 2915 2913 +3 2915 2916 2917 +3 2862 3265 3232 +3 2863 3294 3296 +3 3295 6059 2978 +3 2919 2920 2918 +3 2866 2979 2920 +3 2866 2921 2979 +3 2921 7939 2922 +3 7939 3338 2922 +3 2923 2982 6506 +3 6267 2984 2982 +3 6267 2924 2984 +3 2924 2927 2984 +3 2928 2925 8042 +3 2926 2739 2925 +3 2928 3467 2927 +3 2929 3503 3465 +3 5098 2405 2453 +3 2930 5589 2987 +3 2930 5404 5589 +3 2873 2990 2931 +3 4539 5401 2990 +3 5129 6394 2932 +3 2876 7794 7407 +3 2934 7246 2933 +3 7272 2935 7246 +3 8052 6919 2935 +3 3546 1874 2936 +3 2938 2937 6919 +3 2939 2881 7111 +3 2940 2942 6732 +3 2884 2941 2942 +3 2884 2943 2941 +3 2943 6098 6073 +3 6098 2944 6073 +3 6098 7136 2944 +3 3772 7146 2945 +3 5659 7231 2946 +3 4102 2947 6978 +3 4102 2886 2947 +3 1685 1738 1737 +3 2886 4105 2947 +3 2886 6869 4105 +3 5680 2948 3004 +3 942 1038 1036 +3 2949 4164 7738 +3 1903 6217 2950 +3 2949 4171 4165 +3 2951 5533 4171 +3 4171 5533 2952 +3 2891 4423 7625 +3 2891 2953 4423 +3 7628 4437 2954 +3 8066 2893 6489 +3 2893 4721 6489 +3 2893 2955 4721 +3 4722 3230 2956 +3 2958 2957 3007 +3 2896 7177 5924 +3 2959 8027 4843 +3 6992 2960 7688 +3 2901 5200 5524 +3 2901 7293 5200 +3 1567 2961 1689 +3 7582 2962 3010 +3 2963 1784 1783 +3 2962 2964 2965 +3 2903 6002 2966 +3 6002 2967 3012 +3 2905 5745 2968 +3 2905 2908 5745 +3 2908 2969 5745 +3 2907 5470 2969 +3 2907 2970 5470 +3 2970 7720 5670 +3 4347 5917 6272 +3 843 2971 920 +3 2911 3044 5917 +3 2911 7850 3044 +3 6211 3220 3090 +3 2973 2972 3221 +3 2975 2974 6251 +3 2975 3296 2974 +3 2977 2978 2976 +3 2978 3485 2976 +3 6921 3329 3320 +3 2920 2979 3331 +3 2979 2922 2980 +3 7866 2149 2147 +3 2922 3338 6848 +3 2181 5535 3361 +3 3372 6810 2981 +3 6506 2982 3433 +3 2116 5858 6335 +3 6357 2983 6447 +3 2982 2984 2985 +3 2984 2927 6310 +3 2927 6376 6310 +3 2986 1223 6431 +3 2927 3467 6376 +3 1885 1836 1937 +3 3465 3477 3466 +3 2987 3564 3563 +3 2989 4214 3659 +3 2989 2988 4214 +3 2990 5113 3164 +3 5401 2991 5113 +3 2932 6717 2991 +3 2932 3537 6717 +3 7147 4398 5696 +3 2992 8222 31 +3 3537 2993 6717 +3 2994 3385 3383 +3 7794 2933 3663 +3 2933 2995 3663 +3 2933 7246 2995 +3 2935 3665 2996 +3 2937 3667 2997 +3 6732 2942 3670 +3 2941 2998 7225 +3 3775 2945 2999 +3 2137 2712 3213 +3 2946 7231 7102 +3 6978 3002 3000 +3 2947 3001 3002 +3 918 1015 1012 +3 4104 4108 3003 +3 4104 3004 4108 +3 3004 4154 4108 +3 3004 8154 4154 +3 2952 3893 4172 +3 5949 5499 5986 +3 7625 4423 4293 +3 3006 2954 3005 +3 6490 4296 4657 +3 2956 5048 5051 +3 3007 5393 5049 +3 5524 4304 3008 +3 7902 3382 3009 +3 7054 3010 4305 +3 3010 2965 4306 +3 2966 3012 3011 +3 3012 5434 3011 +3 8187 2968 4982 +3 2968 3013 4982 +3 2968 5745 3013 +3 2969 7869 4309 +3 5917 3044 7891 +3 3051 4469 3014 +3 4469 603 3014 +3 3053 7821 3015 +3 7821 3016 3015 +3 6988 1295 3016 +3 3017 3058 718 +3 4640 1894 3018 +3 3058 5761 718 +3 3058 3019 5761 +3 3019 831 5761 +3 3019 7199 831 +3 7199 832 831 +3 7198 2131 832 +3 7198 3059 2131 +3 3059 3020 2131 +3 3059 6861 3020 +3 1416 6100 4498 +3 6915 5358 3021 +3 7405 3062 5662 +3 3062 3022 3023 +3 3022 3024 1210 +3 3025 5376 1263 +3 5376 3026 1330 +3 3064 6225 6338 +3 3066 1500 3027 +3 3222 3092 3028 +3 3066 7918 1500 +3 6355 1627 5929 +3 3068 1558 3029 +3 7409 2086 2294 +3 3068 3030 1558 +3 3030 1595 1558 +3 3030 3031 1595 +3 3031 3032 1595 +3 3070 1731 3032 +3 6244 3033 1767 +3 7040 8101 8188 +3 7983 2463 6107 +3 3072 2000 6261 +3 6650 3075 3034 +3 3075 3035 3034 +3 3036 3401 7758 +3 3037 3080 2486 +3 3080 2527 2486 +3 7940 1061 3038 +3 1629 1728 1729 +3 3040 3039 2527 +3 3081 2613 3039 +3 3081 5952 2613 +3 7637 2860 3041 +3 7822 3042 3043 +3 3045 7891 3044 +3 7427 7049 3046 +3 7049 4537 3046 +3 7400 3047 5899 +3 3085 436 435 +3 3085 6556 436 +3 6556 5224 436 +3 6645 988 4645 +3 6556 3048 5224 +3 3048 379 5224 +3 3048 5337 379 +3 5753 3049 6597 +3 3089 537 3049 +3 3089 6516 537 +3 6516 3050 537 +3 7838 3052 3051 +3 3052 4469 3051 +3 7766 3055 3053 +3 5438 3054 1247 +3 3055 7674 7821 +3 2095 2144 2143 +3 3150 3017 6988 +3 3247 1683 3056 +3 3150 3057 3017 +3 3057 5308 3058 +3 2939 7111 2937 +3 5308 3019 3058 +3 5308 7894 3019 +3 3147 7066 3059 +3 6449 4401 5082 +3 7066 6609 6861 +3 3060 2056 6517 +3 6609 3061 6915 +3 3061 7406 5358 +3 5693 3022 3062 +3 3143 3024 3022 +3 3143 3063 3024 +3 3063 3140 3025 +3 3141 3026 5376 +3 3141 3065 3026 +3 3065 3139 3064 +3 3139 6226 3064 +3 3139 5970 6226 +3 5970 3066 6226 +3 3138 7918 3066 +3 3138 3137 7918 +3 3067 3799 7771 +3 3137 3068 7918 +3 3137 3069 3068 +3 3069 8047 3030 +3 8047 5569 3031 +3 5569 3070 3031 +3 6676 6244 3070 +3 6840 7041 3033 +3 5463 6878 7040 +3 5463 3071 6878 +3 3071 7983 6878 +3 3133 3072 5509 +3 3133 3073 3072 +3 7134 8216 7209 +3 3073 8091 6650 +3 5613 3074 3075 +3 3076 3036 3074 +3 3076 3127 3036 +3 3799 2104 3759 +3 3077 3683 7514 +3 3123 5140 3078 +3 5140 6474 3078 +3 5140 7954 6474 +3 7954 8149 3037 +3 4538 3079 5543 +3 8149 7733 3080 +3 3118 5952 3081 +3 3115 3082 7822 +3 3084 3083 3042 +3 7878 3045 3083 +3 7878 3112 3045 +3 3110 5705 3047 +3 5705 5549 3047 +3 7623 3085 5549 +3 8085 6556 3085 +3 6656 3086 3048 +3 6053 3419 5337 +3 6053 3087 3419 +3 3087 3088 5753 +3 3088 3106 3089 +3 3106 6516 3089 +3 3106 7356 6516 +3 3028 3182 3090 +3 3092 7949 3977 +3 3092 3091 7949 +3 3091 3096 3093 +3 3096 3111 3093 +3 3094 4122 1245 +3 3096 3095 3111 +3 3095 3097 3098 +3 5582 4196 3108 +3 4196 7622 3108 +3 220 7856 7622 +3 220 7944 7856 +3 8034 3101 3099 +3 3101 3100 3099 +3 3101 6576 3100 +3 6576 6176 3100 +3 6576 3102 6176 +3 3102 3103 6176 +3 3104 3105 3103 +3 7356 3106 3105 +3 3106 3103 3105 +3 3106 3088 3103 +3 3087 3100 6176 +3 3086 3107 3099 +3 6656 8085 7856 +3 8085 7622 7856 +3 5705 6179 3108 +3 3110 3098 6179 +3 5356 3453 3109 +3 3110 7598 3098 +3 7598 3111 3098 +3 7705 3112 3093 +3 3084 3082 3182 +3 3082 3115 3113 +3 3115 3114 3113 +3 3115 7638 3114 +3 7638 3180 3114 +3 3116 3118 7089 +3 3118 3117 7089 +3 3118 6091 3117 +3 6843 2551 3119 +3 6091 3177 3117 +3 3120 6727 710 +3 6091 7733 3177 +3 5694 4042 3988 +3 5695 714 3121 +3 3123 4778 3122 +3 3124 5888 1385 +3 8191 1116 3125 +3 5750 3126 3175 +3 3127 3131 6181 +3 3129 2376 3128 +3 3076 3130 3131 +3 3076 5613 3130 +3 3073 3172 3132 +3 3073 3133 3172 +3 3133 7096 3172 +3 3133 5127 7096 +3 5127 3134 7096 +3 2076 4110 2117 +3 1092 7218 5759 +3 3071 6924 3134 +3 1462 4498 3135 +3 5463 7041 3136 +3 6840 3168 6413 +3 6840 6676 3168 +3 3069 7899 7699 +3 3069 3137 7899 +3 3138 8168 7018 +3 542 4024 58 +3 5970 3139 6798 +3 3139 7527 6798 +3 3141 8036 7526 +3 3141 3140 8036 +3 3063 3142 7924 +3 3143 3161 3142 +3 3143 5693 3161 +3 161 3144 5595 +3 5693 6980 3161 +3 6099 7406 3913 +3 7406 3061 5842 +3 7029 3145 2760 +3 6223 2674 2821 +3 3061 3146 5842 +3 7066 3147 5208 +3 7954 5140 3148 +3 5308 3057 3158 +3 3057 3150 3149 +3 3150 3156 3149 +3 3614 317 362 +3 3150 7674 3156 +3 3055 6428 3151 +3 7766 3052 6429 +3 3052 4898 6429 +3 3052 7838 4898 +3 626 4899 3152 +3 3153 7034 6428 +3 7034 3151 6428 +3 7034 3154 3151 +3 3154 3156 3151 +3 3186 3155 3153 +3 4696 3149 3156 +3 4696 3157 3149 +3 3157 3158 3149 +3 902 5309 3158 +3 8005 5956 5208 +3 5956 3160 3159 +3 585 257 289 +3 3160 3146 3159 +3 2254 3913 5842 +3 3162 6845 3161 +3 6845 3142 3161 +3 5704 3163 7526 +3 2931 2990 3164 +3 3163 3165 7527 +3 3165 6798 7527 +3 1679 3166 7018 +3 1680 7699 7899 +3 6923 3167 7699 +3 1768 5369 3167 +3 1855 6413 3168 +3 7999 1955 3136 +3 1955 5563 6924 +3 5563 3134 6924 +3 3169 7096 3134 +3 3171 4645 3170 +3 2038 3366 3172 +3 2179 7290 3132 +3 2179 3173 7290 +3 3173 3130 7290 +3 6721 3174 3131 +3 3174 6181 3131 +3 2338 3175 6181 +3 2338 8129 3175 +3 7524 3176 3122 +3 3176 3148 3122 +3 3176 5448 3148 +3 5448 7955 3148 +3 3178 3177 5068 +3 3179 7851 3117 +3 2913 2917 3180 +3 2917 3114 3180 +3 2917 6211 3114 +3 6211 3113 3114 +3 3181 460 458 +3 6211 3090 3113 +3 3090 3182 3113 +3 3090 3220 7109 +3 5201 6719 3183 +3 650 3186 3184 +3 4318 3185 1594 +3 7294 3155 3186 +3 6488 791 3187 +3 790 3188 3189 +3 928 4119 985 +3 790 3190 3188 +3 3190 901 3188 +3 5483 3191 903 +3 5921 3193 3192 +3 3193 1291 5767 +3 8150 8126 3194 +3 1291 1124 5767 +3 3195 3196 1124 +3 6726 5070 3196 +3 3198 3197 7546 +3 3199 7872 5070 +3 1296 8004 7872 +3 2448 759 799 +3 5167 3741 5740 +3 5783 7957 3200 +3 5167 3201 3741 +3 3201 7324 6465 +3 6017 4644 7421 +3 6017 3203 4644 +3 3203 3202 4644 +3 3203 3204 3202 +3 3204 3205 3202 +3 1681 1678 3205 +3 3165 7421 6849 +3 1771 3206 1678 +3 1771 3207 3206 +3 3207 3208 3206 +3 1820 1856 3208 +3 1820 6391 1856 +3 6391 1854 1856 +3 7440 3209 7586 +3 3209 4253 7586 +3 3211 3210 4253 +3 2137 7729 3210 +3 3213 6591 3212 +3 4482 3214 7490 +3 2230 2339 6173 +3 2339 6265 6173 +3 2392 6289 6264 +3 2440 6274 3215 +3 3216 189 8179 +3 6628 3217 2537 +3 3356 5430 6687 +3 5430 7092 6687 +3 7368 2159 7185 +3 6319 5789 7092 +3 2653 2708 5789 +3 2653 2710 2708 +3 2710 3218 2709 +3 3218 3335 2709 +3 5935 2915 7264 +3 5184 6867 3219 +3 5935 2973 2915 +3 2973 2916 2915 +3 3221 507 3220 +3 507 7109 3220 +3 6145 3222 7109 +3 4182 624 4530 +3 7804 6671 3223 +3 6671 376 3223 +3 6671 5645 376 +3 4201 3226 3224 +3 3226 3225 3224 +3 3226 3227 3225 +3 3227 7228 3225 +3 185 3228 7793 +3 3228 221 7793 +3 3228 146 221 +3 146 223 221 +3 146 147 223 +3 147 222 223 +3 147 3229 222 +3 3230 6777 5048 +3 1421 3231 6102 +3 3903 7057 3232 +3 3903 3233 2972 +3 5757 4279 4280 +3 3233 7221 2972 +3 3233 3266 7221 +3 3266 7241 7221 +3 3266 3234 7241 +3 5390 1718 5114 +3 3235 7107 6423 +3 652 6342 720 +3 7736 6105 3236 +3 6105 3237 3236 +3 3238 949 3237 +3 5153 950 949 +3 5153 7106 950 +3 7106 3239 950 +3 8181 6297 2617 +3 7106 3240 3239 +3 3240 7127 7062 +3 7127 7741 7062 +3 1085 3809 7741 +3 1085 3241 3809 +3 5763 1504 5534 +3 5763 3242 1504 +3 973 8148 7636 +3 5710 3243 8095 +3 3243 7881 8095 +3 3243 5253 7881 +3 5253 5871 7881 +3 5253 3245 5871 +3 3245 3244 5871 +3 3245 1420 3244 +3 3246 1508 3561 +3 3246 1560 1508 +3 1560 6112 1508 +3 6434 1683 3247 +3 6434 5105 1683 +3 5105 1682 1683 +3 1773 3248 1682 +3 6679 3249 3248 +3 1859 1857 3249 +3 1859 3250 1857 +3 3250 5954 6958 +3 5954 6751 6148 +3 2042 2039 8182 +3 2042 3252 2039 +3 3252 3251 2039 +3 3253 3254 3251 +3 2180 2714 3254 +3 7037 3257 3255 +3 6772 1044 6276 +3 3257 8037 3255 +3 3257 3256 8037 +3 3256 5798 3258 +3 5798 3259 3258 +3 5798 5271 3259 +3 5271 5812 3259 +3 5271 3260 5812 +3 2569 2718 4663 +3 3261 7147 5696 +3 2569 4157 2718 +3 4157 7858 2718 +3 3262 2720 6890 +3 2723 3264 5245 +3 3263 3483 570 +3 3264 2805 5245 +3 2863 3265 2805 +3 2863 2975 3265 +3 2975 3232 3265 +3 2975 6251 3232 +3 4361 3233 3903 +3 4361 8186 3233 +3 374 3234 3266 +3 3267 3268 3234 +3 327 3269 3268 +3 2625 2624 2755 +3 291 6142 3269 +3 5672 742 6142 +3 4743 3270 742 +3 3271 1553 1495 +3 182 183 3270 +3 6877 184 183 +3 80 144 7053 +3 80 544 144 +3 544 145 144 +3 50 3272 145 +3 352 6037 7593 +3 50 5778 3272 +3 4442 3273 8169 +3 4442 6762 3273 +3 6762 7115 6178 +3 7115 680 6178 +3 3275 3274 5416 +3 793 6194 5266 +3 6194 792 5266 +3 6194 857 792 +3 857 856 792 +3 857 3276 856 +3 5728 5346 3277 +3 1047 1087 996 +3 1087 1046 996 +3 1087 1126 1046 +3 1126 1164 3278 +3 1213 3279 5396 +3 1212 3280 3279 +3 1265 1297 3280 +3 1265 3281 1297 +3 7448 3282 7601 +3 7448 1421 3282 +3 1509 5217 7446 +3 6243 6872 2109 +3 5444 3283 6868 +3 2721 5357 6374 +3 3284 1858 5357 +3 3284 1915 1858 +3 1914 5953 6514 +3 1914 8197 5953 +3 3285 2041 7370 +3 3285 3286 2041 +3 3286 3287 2041 +3 6040 3289 3287 +3 2181 3288 3289 +3 2181 3290 3288 +3 3290 5576 3288 +3 3290 6492 5576 +3 7024 6771 3291 +3 2487 3292 3293 +3 1642 1742 6082 +3 2487 6716 3292 +3 4589 2655 6970 +3 2655 2615 6970 +3 2655 3654 2615 +3 3654 2724 2615 +3 6931 3295 2864 +3 3295 2977 3294 +3 3297 2974 3296 +3 506 566 3681 +3 373 3298 5813 +3 4364 2311 2310 +3 3298 3300 3299 +3 3300 261 3299 +3 7661 217 3301 +3 181 3302 217 +3 181 3303 3302 +3 3303 551 3302 +3 79 3304 551 +3 1650 1653 1698 +3 79 7777 3304 +3 7777 49 3710 +3 49 3305 545 +3 3297 505 3682 +3 3297 2976 505 +3 3306 1563 6616 +3 3306 1634 1563 +3 1634 5896 1563 +3 1634 3307 5896 +3 3307 3308 5286 +3 5626 3309 1734 +3 3309 5301 3310 +3 1916 3311 7726 +3 1916 3312 3311 +3 3312 5639 3311 +3 3312 6412 5639 +3 2045 3313 1956 +3 2045 3314 3313 +3 3314 2043 3313 +3 3314 7782 2043 +3 3315 6912 5044 +3 2279 2232 6582 +3 2279 3316 2232 +3 3316 2395 5227 +3 7967 6772 1084 +3 2395 5738 6995 +3 5738 2393 6995 +3 5738 3317 2393 +3 3317 6781 2393 +3 6914 2656 4535 +3 6914 6894 2656 +3 6894 5820 2656 +3 6893 3319 3318 +3 3319 4859 3318 +3 3320 6358 3485 +3 3322 2464 3321 +3 6358 6167 3485 +3 5480 7883 6168 +3 7883 3323 6168 +3 547 1958 3323 +3 547 3324 1958 +3 3324 3325 326 +3 3325 7564 326 +3 3325 214 7564 +3 214 215 7564 +3 214 6317 215 +3 6680 3327 7482 +3 3326 3018 4405 +3 3327 108 7482 +3 3327 109 108 +3 3329 3553 3328 +3 824 3330 895 +3 3553 3331 538 +3 3331 2980 501 +3 1806 3332 5027 +3 3336 3333 3334 +3 7851 3335 7264 +3 3336 3370 3333 +3 3370 3337 3333 +3 3370 3398 3337 +3 3398 3338 3337 +3 3342 908 1975 +3 3373 6848 3338 +3 3373 7187 6848 +3 6987 6520 8227 +3 6290 5386 5488 +3 6290 724 5386 +3 724 3339 5386 +3 724 6565 3339 +3 6565 3340 3339 +3 3074 2130 3035 +3 798 797 3340 +3 798 5755 797 +3 5755 7789 797 +3 2044 3341 7399 +3 5615 8221 7789 +3 5615 7360 8221 +3 7360 3342 8221 +3 957 908 3342 +3 7569 3343 1654 +3 957 3345 908 +3 3345 3344 908 +3 3345 3346 3344 +3 3346 1183 3344 +3 3346 3347 1183 +3 3347 3348 1131 +3 3348 3349 1131 +3 8058 4969 3349 +3 1269 3350 6080 +3 1339 1378 7615 +3 5067 6973 5074 +3 1339 3351 1378 +3 6609 6915 6861 +3 3351 1467 1379 +3 3352 3354 6149 +3 1566 3353 3354 +3 1566 4246 3353 +3 4246 1598 3353 +3 4246 1638 1598 +3 1638 6673 1598 +3 3355 1741 6673 +3 3355 3357 1741 +3 2440 2528 3356 +3 3357 1740 1741 +3 3357 6804 1740 +3 4092 4547 3358 +3 5536 7926 3359 +3 4430 3360 1868 +3 4430 3362 3360 +3 3361 5227 6046 +3 3362 4865 3360 +3 3362 2048 4865 +3 2048 7436 4865 +3 1537 7569 4912 +3 2048 3363 7436 +3 1913 6148 1912 +3 6336 2235 7408 +3 2235 3364 5733 +3 3364 7419 5733 +3 5594 7525 3403 +3 5205 6158 2346 +3 2533 6266 7380 +3 2533 7923 6266 +3 7923 3365 6266 +3 3366 3132 3172 +3 3368 4585 3365 +3 3368 3367 4585 +3 3367 3369 4586 +3 6796 3372 3370 +3 3372 3398 3370 +3 3372 3371 3398 +3 3371 5190 3373 +3 7763 368 7877 +3 368 5850 7877 +3 320 3374 500 +3 6057 211 3375 +3 6811 3376 3377 +3 3378 738 737 +3 3376 3380 3379 +3 3380 496 3379 +3 75 3382 7213 +3 3382 3381 477 +3 3371 3421 5190 +3 3371 2981 3421 +3 726 3383 2065 +3 3383 3385 3384 +3 3385 7389 3384 +3 3385 7254 7389 +3 5786 958 3386 +3 958 2732 3386 +3 958 6523 2732 +3 6523 2733 2732 +3 959 7790 2733 +3 960 3387 7790 +3 961 3388 3387 +3 961 3389 3388 +3 6944 1088 3464 +3 1517 3390 1132 +3 3391 3392 3390 +3 4901 1299 3392 +3 4901 3393 1299 +3 3393 3394 1299 +3 1521 3396 3394 +3 6594 7814 3395 +3 1523 1769 3396 +3 1523 1805 1769 +3 5813 3267 374 +3 1805 1425 1769 +3 1525 1514 3397 +3 3398 3373 3338 +3 4099 3399 1514 +3 1639 7581 3399 +3 1687 7307 3400 +3 7307 5206 3400 +3 3127 3126 3401 +3 7307 1775 5206 +3 1775 3404 5836 +3 3358 3402 4096 +3 3404 3403 7403 +3 3403 3405 3406 +3 3405 3407 6210 +3 1015 6933 1055 +3 3407 5187 1919 +3 5187 3408 1919 +3 5187 3409 3408 +3 3409 3410 7253 +3 3410 3411 3412 +3 6353 2731 3413 +3 2731 2234 3413 +3 6354 3414 4875 +3 5440 2734 2347 +3 7451 3147 7198 +3 2734 5204 2347 +3 2735 5171 2490 +3 5147 2618 7750 +3 5147 3415 2618 +3 3415 2810 2661 +3 2810 2809 2661 +3 2810 3416 2809 +3 3416 3417 2809 +3 2868 2867 3417 +3 2868 3418 2867 +3 3418 5145 6810 +3 3419 5753 6597 +3 5145 2981 6810 +3 5145 3420 2981 +3 3420 3431 3421 +3 3422 7583 2058 +3 4851 2472 5989 +3 3431 3423 7942 +3 367 369 8114 +3 367 6108 369 +3 3425 252 3424 +3 3425 6942 252 +3 6714 3426 3427 +3 140 138 175 +3 138 73 3428 +3 73 3429 74 +3 6500 3009 7412 +3 6500 3430 3009 +3 3430 7902 3009 +3 495 366 3431 +3 366 3423 3431 +3 6561 493 5146 +3 3433 2985 3432 +3 6310 6376 3434 +3 658 3595 3435 +3 3595 6964 3435 +3 727 4210 3436 +3 5901 6118 6151 +3 3439 3437 3438 +3 3439 5320 3437 +3 5320 910 3437 +3 673 3440 713 +3 5320 966 910 +3 966 6975 910 +3 5731 1052 3441 +3 5731 3442 1052 +3 3442 1138 1052 +3 3442 5505 1138 +3 5752 7928 1173 +3 7928 6212 1173 +3 7911 2270 3443 +3 1340 3445 5343 +3 3445 3444 5343 +3 1427 3446 1426 +3 3446 1530 5951 +3 1530 7477 5951 +3 1530 8053 7477 +3 3447 1206 1292 +3 8053 5313 7477 +3 1600 2961 3448 +3 1600 1692 2961 +3 1692 3449 2961 +3 1692 3450 3449 +3 3451 5676 6421 +3 5263 3452 5299 +3 3452 1921 3453 +3 3454 6355 5929 +3 1921 3109 3453 +3 1921 4141 3109 +3 4141 3455 3109 +3 4141 3712 3455 +3 3712 6775 3455 +3 5303 3579 1273 +3 5988 2091 3456 +3 5988 6842 2091 +3 6842 2092 2091 +3 2189 2186 2092 +3 2239 3457 2187 +3 3457 2354 2237 +3 2354 2352 2237 +3 2354 3458 2352 +3 3458 7645 2353 +3 3459 5270 2401 +3 3460 5355 2493 +3 5355 4221 3217 +3 4221 3461 3217 +3 4221 2664 3461 +3 2664 2662 3461 +3 2664 3462 2662 +3 2870 2929 3463 +3 3389 6944 3464 +3 2929 8042 3463 +3 2929 3465 8042 +3 3074 3036 2130 +3 3465 3466 3467 +3 3468 3434 6376 +3 3468 429 3434 +3 429 3469 3434 +3 430 3470 3469 +3 319 5411 3470 +3 319 7351 5411 +3 7784 3472 3471 +3 5849 546 3472 +3 6109 173 546 +3 6109 3473 173 +3 3474 8107 2452 +3 7711 5507 4613 +3 5574 5587 3475 +3 8144 6902 3476 +3 3466 3501 3468 +3 3466 3477 3501 +3 3478 3560 3563 +3 3478 428 3502 +3 428 3500 3502 +3 363 3479 7975 +3 3479 3481 3480 +3 3481 3498 3480 +3 1926 3422 1967 +3 3481 3482 3498 +3 210 3483 3495 +3 3484 3493 3496 +3 3320 3485 6372 +3 3389 3464 3388 +3 5359 5400 777 +3 69 3487 3486 +3 3487 3492 3486 +3 41 3488 3492 +3 3489 3490 7552 +3 5 18 3490 +3 18 3491 7552 +3 5306 5374 3492 +3 5374 3486 3492 +3 134 3493 3486 +3 3494 3496 3493 +3 6110 3495 3496 +3 3497 6360 1617 +3 6968 7693 8202 +3 7693 3498 8202 +3 3499 3480 3498 +3 3499 365 3480 +3 2895 1576 1608 +3 364 555 8117 +3 555 3500 8117 +3 555 3501 3500 +3 3501 3502 3500 +3 3477 3560 3502 +3 3477 3503 3560 +3 3504 8025 3573 +3 5771 5398 7206 +3 7237 3507 3505 +3 3506 2694 5940 +3 3507 5623 3505 +3 2538 3508 3556 +3 8083 6141 6991 +3 8083 5004 6141 +3 5004 3509 6141 +3 2188 3552 3765 +3 2188 2139 3552 +3 2139 5879 3552 +3 2138 3549 5879 +3 2138 3510 3549 +3 3510 6573 3511 +3 6573 3512 7664 +3 3512 1920 3513 +3 3514 6275 5221 +3 1873 5262 6036 +3 5262 3545 6036 +3 5262 7244 3545 +3 7244 3515 3545 +3 3516 3518 3515 +3 6934 5249 3517 +3 1691 3541 3518 +3 1691 7963 3541 +3 5550 3519 7155 +3 1529 3538 7372 +3 1529 4958 3538 +3 4958 3520 3538 +3 1301 3521 3533 +3 3521 4890 3533 +3 3521 6994 4890 +3 2206 3924 3522 +3 2206 5825 3924 +3 5825 3531 3924 +3 5277 5319 3523 +3 7338 3529 3524 +3 6344 6136 5425 +3 6136 5592 5425 +3 6136 3525 5592 +3 2236 7874 3526 +3 685 7327 5592 +3 7327 5425 5592 +3 7326 6577 7314 +3 6577 3527 7314 +3 6577 3528 3527 +3 3528 3550 3529 +3 913 7725 3524 +3 1006 3530 7725 +3 1006 1053 3530 +3 3737 5269 2881 +3 1053 3523 3530 +3 1053 6659 3523 +3 6659 5278 3523 +3 5159 3531 5278 +3 5159 3532 3531 +3 5495 3522 3924 +3 7489 3533 4890 +3 5273 5431 3533 +3 3535 3534 5431 +3 3536 3520 3534 +3 2875 7407 3537 +3 7847 1569 3538 +3 1569 7372 3538 +3 1569 3539 7372 +3 3540 3541 6206 +3 7130 3518 3541 +3 4755 6943 3542 +3 3543 1571 7328 +3 5835 3544 3515 +3 3544 3545 3515 +3 3546 6036 3545 +3 2936 1963 6275 +3 4273 2164 5568 +3 1963 5221 6275 +3 1963 3547 5221 +3 3547 3513 5221 +3 7515 3511 7664 +3 7515 2141 3511 +3 3557 3548 2744 +3 2141 3549 3511 +3 3550 3524 3529 +3 3551 3552 5879 +3 6201 3765 3552 +3 2920 3331 3553 +3 7002 3554 7094 +3 3554 3509 7094 +3 2494 6991 6141 +3 2540 3508 7908 +3 2540 3555 3508 +3 3555 3557 3556 +3 3557 5623 3556 +3 1982 5581 1984 +3 3557 3558 5623 +3 633 634 5297 +3 3558 3505 5623 +3 3558 2812 3505 +3 3559 5860 1554 +3 2812 7429 3505 +3 2930 7206 5398 +3 2987 3563 5264 +3 3563 3560 5264 +3 1419 3561 3562 +3 3563 490 3478 +3 3563 3564 490 +3 3564 3610 490 +3 3619 3565 3566 +3 3565 3568 3567 +3 3568 3569 3567 +3 5285 7989 3569 +3 5285 3571 7989 +3 3571 3570 7989 +3 288 6165 3572 +3 7951 3621 3573 +3 3621 6340 3573 +3 3621 3574 6340 +3 3574 6744 6340 +3 6305 3623 7496 +3 3623 3575 7496 +3 3576 2477 6062 +3 5061 3577 1140 +3 3577 3624 3578 +3 3624 7970 3578 +3 3624 3626 7970 +3 3626 3579 7970 +3 3626 3580 3579 +3 3582 3581 7203 +3 6989 1384 3581 +3 3632 3583 1469 +3 3583 5982 1469 +3 3633 3584 6187 +3 3584 1601 6187 +3 3584 3585 1601 +3 3585 7315 1601 +3 3636 3587 3586 +3 3587 1826 3586 +3 3638 3588 1826 +3 7510 3589 3590 +3 3591 3592 3589 +3 5928 2051 3592 +3 3594 6418 2051 +3 3594 3593 6418 +3 3595 727 6964 +3 3593 3641 3596 +3 3641 3597 2191 +3 3597 3598 6749 +3 3598 3599 2355 +3 3644 3600 7387 +3 3644 6242 3600 +3 3645 6683 2447 +3 3646 2577 6683 +3 3646 3601 2577 +3 3601 3603 5631 +3 3603 3602 5631 +3 3606 2666 3602 +3 3605 3604 2466 +3 3606 7072 2666 +3 7072 5983 2743 +3 7050 6103 3607 +3 3649 7361 3608 +3 5682 3609 3610 +3 3609 6282 3611 +3 6282 3613 3612 +3 3613 3614 3612 +3 6742 318 3614 +3 6500 72 22 +3 6742 3652 318 +3 3652 245 318 +3 3652 3615 245 +3 3615 3653 246 +3 3653 1803 246 +3 3653 3616 1803 +3 5481 68 7005 +3 5481 5453 68 +3 3657 7613 7193 +3 3657 3617 7613 +3 3617 2 7613 +3 6909 3618 3619 +3 3618 3620 3565 +3 6546 805 5285 +3 805 840 3571 +3 2073 5207 2114 +3 840 6700 3571 +3 840 860 6700 +3 860 8076 6700 +3 860 7952 8076 +3 915 3621 7951 +3 1007 3574 3621 +3 1007 3622 3574 +3 3622 7921 6305 +3 3190 904 901 +3 8081 5061 3623 +3 8081 1174 5061 +3 1174 3577 5061 +3 7749 3625 3624 +3 3625 3626 3624 +3 4375 3580 3626 +3 4202 2095 2143 +3 4375 3627 3580 +3 3627 6494 3580 +3 3627 3628 6494 +3 3628 3629 7317 +3 3629 3630 3582 +3 3380 5604 496 +3 3630 6989 3582 +3 6984 3631 8138 +3 3631 5230 3632 +3 5230 3583 3632 +3 3634 3633 3583 +3 3634 1645 3633 +3 1645 3584 3633 +3 7386 3674 5165 +3 1645 3635 3584 +3 3025 1263 6665 +3 3635 6575 3585 +3 1743 6477 8113 +3 1743 7432 6477 +3 7683 3587 3636 +3 7683 3637 3587 +3 3637 3638 3587 +3 3639 5687 3638 +3 3639 5907 5687 +3 5907 7510 5687 +3 60 527 92 +3 3640 5234 5928 +3 5234 3594 5928 +3 6821 3641 3593 +3 5617 3597 3641 +3 3642 6498 3598 +3 3643 3644 3599 +3 2449 6242 3644 +3 5923 2579 3645 +3 2579 3646 3645 +3 2579 6287 3646 +3 6287 3601 3646 +3 7479 3603 3601 +3 7479 2746 3603 +3 2746 3606 3603 +3 2746 3647 3606 +3 3648 5983 7072 +3 4285 1315 1246 +3 3648 7684 5983 +3 7684 2989 7050 +3 2989 6103 7050 +3 1699 1785 1784 +3 805 3571 5285 +3 2989 3659 6103 +3 3659 3649 6103 +3 3650 5682 3649 +3 3650 5141 5682 +3 5141 3609 5682 +3 7753 6282 3609 +3 3939 286 3613 +3 6240 6941 7632 +3 286 3651 6742 +3 3651 5214 3652 +3 5214 3615 3652 +3 5838 5296 3653 +3 3654 2725 4193 +3 5296 3616 3653 +3 98 7484 3616 +3 7756 5975 409 +3 3656 3655 7484 +3 3656 5482 3655 +3 17 5453 5481 +3 17 3658 5453 +3 3658 3657 5453 +3 3658 4185 3657 +3 3659 885 3650 +3 4213 4226 4216 +3 3164 4228 4226 +3 3164 5113 4228 +3 2991 6724 3660 +3 2991 6717 6724 +3 2993 577 3661 +3 2993 7795 577 +3 7795 3663 578 +3 7341 2081 3662 +3 3663 6361 578 +3 2996 3665 3664 +3 3665 2997 481 +3 2997 3666 481 +3 3667 7471 3666 +3 7779 5787 3668 +3 5787 3670 3669 +3 3670 475 3669 +3 3670 7225 475 +3 2998 3694 3671 +3 3776 3692 5445 +3 3776 3673 3692 +3 3672 2613 5151 +3 3673 8134 5477 +3 8134 6739 5477 +3 8134 3674 6739 +3 3674 6409 6739 +3 3674 268 6409 +3 268 3675 6409 +3 269 3689 3675 +3 3676 3677 3689 +3 98 3656 7484 +3 3678 6757 3677 +3 157 6536 6757 +3 120 3679 3686 +3 3680 4408 6134 +3 3682 3681 2974 +3 3683 8229 3684 +3 36 3684 8229 +3 35 4408 3684 +3 35 3685 4408 +3 4213 3164 4226 +3 3687 3686 6134 +3 524 6536 3686 +3 3688 6757 6536 +3 270 3675 3689 +3 270 3690 3675 +3 7732 284 3691 +3 3671 3692 5477 +3 3671 3694 3692 +3 4313 1211 3693 +3 3694 5445 3692 +3 3694 2944 5445 +3 2944 3695 5445 +3 3696 2629 6402 +3 593 8090 5875 +3 2629 3697 6402 +3 3698 1264 4314 +3 2629 3699 3697 +3 7181 1242 1313 +3 3699 3701 3700 +3 3701 3768 3700 +3 2505 6321 3702 +3 6321 3767 3702 +3 6321 2415 3767 +3 2415 3764 3767 +3 6069 2317 3703 +3 3704 2305 3761 +3 2305 3705 3761 +3 2305 3706 3705 +3 3706 6169 3705 +3 2062 3708 5948 +3 3708 3707 5948 +3 8001 534 4716 +3 3708 1936 3707 +3 1936 3709 3707 +3 3304 3710 6728 +3 1936 1886 3709 +3 1887 3757 5484 +3 1887 3711 3757 +3 3711 3756 3757 +3 7160 7285 7896 +3 7160 6505 7285 +3 6505 5579 7285 +3 6505 7814 5579 +3 3712 2050 6775 +3 1611 3713 3714 +3 1611 3715 3713 +3 852 6952 5889 +3 3715 3752 3713 +3 3715 3716 3752 +3 3716 1434 7080 +3 1434 3751 7080 +3 1434 6658 3751 +3 6658 3717 3751 +3 7207 3718 3717 +3 3719 1279 3748 +3 7238 5621 3720 +3 5621 3745 3720 +3 3722 3743 3745 +3 3722 3721 3743 +3 3721 3724 3723 +3 3724 3725 3723 +3 1150 3740 3725 +3 1150 5807 3740 +3 128 8049 204 +3 5807 3726 3740 +3 5807 1066 3726 +3 1066 7156 3726 +3 1023 3727 7156 +3 1023 6329 3727 +3 6329 5122 3727 +3 3728 1923 6632 +3 7462 871 5380 +3 1697 3729 3732 +3 3729 7281 3730 +3 690 3730 5239 +3 690 3734 3730 +3 776 3731 7813 +3 3734 3732 3730 +3 940 6356 3733 +3 3734 3735 3732 +3 3735 5471 3732 +3 3736 6922 5471 +3 7737 2882 3737 +3 873 7649 5122 +3 7649 3727 5122 +3 7649 3738 3727 +3 4382 3726 7156 +3 5359 777 3739 +3 4382 5664 3726 +3 5216 3725 3740 +3 5704 3741 6465 +3 5216 3742 3725 +3 3744 3743 3723 +3 3744 5960 3743 +3 1604 1648 1602 +3 5960 3745 3743 +3 6306 3720 3745 +3 6306 1280 3720 +3 1280 3746 3720 +3 1280 3747 3746 +3 3747 3748 3746 +3 2947 4105 3001 +3 1349 3718 3748 +3 1349 7873 3718 +3 7873 3749 3717 +3 3749 3750 3751 +3 3750 1578 7080 +3 1578 1612 3752 +3 1612 3713 3752 +3 1612 3753 3713 +3 3754 7285 5579 +3 3755 5099 7896 +3 5099 2807 3756 +3 2807 3757 3756 +3 5131 5484 3757 +3 3758 6949 3709 +3 3759 6169 5948 +3 5507 135 247 +3 2157 3705 6169 +3 2157 3760 3705 +3 3760 2255 3761 +3 6309 3763 3762 +3 3763 4831 3762 +3 3763 6139 4831 +3 2369 3703 6138 +3 2416 3764 3703 +3 7823 2188 3765 +3 2416 3766 3764 +3 7442 5391 1671 +3 3766 2549 3767 +3 2549 3769 3702 +3 3769 3768 3702 +3 3769 2630 3768 +3 2630 3700 3768 +3 8157 3697 3700 +3 2826 6824 6402 +3 2434 6871 3899 +3 2826 3770 6824 +3 6989 8138 1384 +3 3770 3772 3771 +3 3772 7556 3771 +3 3772 3775 7556 +3 6875 3773 5309 +3 3775 3774 3695 +3 3774 3812 3776 +3 6813 7457 8057 +3 3777 3780 5873 +3 2378 6898 3778 +3 3779 5219 1724 +3 8196 6010 3780 +3 8196 3782 6010 +3 3782 3781 6010 +3 5180 3783 872 +3 5819 3784 4383 +3 3784 3866 3785 +3 4752 816 886 +3 3866 5215 3785 +3 3866 3787 5215 +3 3787 3786 5215 +3 8184 7992 4167 +3 3788 2059 2151 +3 3861 5959 4283 +3 3789 3860 5962 +3 3860 1311 5962 +3 3860 3859 1311 +3 1048 1372 7311 +3 3859 1350 1311 +3 3859 3790 1350 +3 6996 3791 8044 +3 3791 7624 8044 +3 5194 6077 721 +3 6552 3793 1544 +3 3793 3792 1544 +3 4628 3794 3792 +3 4628 3795 3794 +3 3795 7333 3794 +3 3795 7826 7333 +3 3857 6012 5038 +3 3857 3796 6012 +3 3796 7194 3797 +3 3854 2806 5972 +3 3854 6051 2806 +3 3852 3067 3798 +3 7958 6572 6417 +3 8087 3800 3799 +3 3800 2104 3799 +3 3850 3801 2104 +3 2657 3802 5330 +3 3803 3778 5022 +3 3804 3805 6740 +3 3805 7503 6740 +3 5388 3806 7502 +3 3806 3807 2318 +3 3807 2368 2318 +3 3847 3808 2368 +3 3847 7686 3808 +3 5530 2506 7685 +3 5802 5703 2165 +3 3809 5534 1502 +3 5530 3811 2506 +3 3811 3810 2506 +3 3331 501 538 +3 6292 2593 3810 +3 5103 2825 6131 +3 7301 7149 2945 +3 3845 3813 3812 +3 3813 3814 3812 +3 8110 411 3814 +3 3842 3815 5165 +3 3815 7386 5165 +3 5674 5130 3816 +3 5130 3837 3817 +3 3819 3818 4437 +3 3837 156 3817 +3 3837 3836 156 +3 3836 187 156 +3 7472 6256 3820 +3 3836 3821 187 +3 3821 4954 187 +3 8143 34 3822 +3 8143 5872 34 +3 3956 3917 3955 +3 3956 3844 3917 +3 3958 3959 3823 +3 3959 3825 3843 +3 3825 3824 7520 +3 3824 5573 3826 +3 5573 3841 3826 +3 5573 3827 3841 +3 3827 3840 3841 +3 3827 8176 3840 +3 8176 3839 3840 +3 8176 3828 3839 +3 3828 3829 3839 +3 3961 3830 3829 +3 1421 6102 7190 +3 3831 3832 3830 +3 7817 5640 3832 +3 3050 3833 380 +3 7817 3834 5640 +3 3835 5406 6501 +3 8143 6501 5406 +3 4854 5168 2218 +3 7323 3821 3832 +3 3821 3830 3832 +3 7028 7774 7605 +3 3821 3836 3830 +3 3836 3837 3829 +3 6727 5176 3838 +3 3837 5130 3839 +3 5674 3841 3840 +3 3815 3826 3841 +3 3815 3842 3826 +3 8110 3843 7520 +3 3813 3823 3843 +3 3813 3845 3823 +3 3845 3844 3823 +3 3845 7149 3844 +3 7149 3917 3844 +3 7973 3846 3915 +3 3846 3912 3915 +3 3846 6889 3912 +3 6292 4753 7801 +3 3811 3907 4753 +3 3811 5530 3907 +3 7686 3847 7764 +3 3847 3807 3848 +3 3807 3849 3848 +3 3807 3806 3849 +3 3806 3904 3849 +3 3806 5388 3904 +3 3804 7767 6528 +3 3804 3850 7767 +3 3850 3800 7768 +3 3800 3900 7768 +3 3800 8087 3900 +3 3121 827 3851 +3 8087 3898 3900 +3 8087 3852 3898 +3 3852 7020 3898 +3 3853 6051 3897 +3 3854 3894 7108 +3 7194 3796 3855 +3 3796 3857 5491 +3 3409 6499 2089 +3 3402 2552 5882 +3 3857 3890 5491 +3 1317 3856 6473 +3 3857 7826 3890 +3 4628 3888 6694 +3 3791 3858 6551 +3 6996 4675 3858 +3 6996 3790 4675 +3 2203 4500 2257 +3 3790 3859 5449 +3 3859 3884 5449 +3 3859 3860 3884 +3 3789 3861 5981 +3 3861 7962 5981 +3 1855 7999 6413 +3 3861 7992 7962 +3 7439 2253 3862 +3 8184 3787 4170 +3 3863 494 492 +3 3787 3864 4170 +3 6117 7840 3865 +3 3787 3866 3864 +3 3866 3784 3867 +3 5525 1481 5510 +3 3784 3881 3867 +3 3784 5819 3881 +3 5180 6469 3868 +3 5183 3782 4448 +3 3782 3880 4448 +3 8196 4878 3880 +3 3870 3869 5585 +3 3777 7650 3878 +3 7650 3871 3878 +3 7650 3872 3871 +3 3872 6121 3871 +3 6813 3874 3873 +3 3874 3875 3873 +3 3918 3919 3875 +3 3919 3873 3875 +3 3919 3921 3873 +3 3921 6121 3873 +3 3921 3876 6121 +3 3876 3871 6121 +3 7703 5770 5194 +3 3876 3877 3871 +3 3877 3878 3871 +3 8130 4878 3878 +3 2133 5748 2182 +3 3879 2321 7189 +3 6325 3880 4878 +3 3922 4448 3880 +3 3923 3868 6469 +3 5247 5063 3881 +3 370 6301 3375 +3 5377 3882 3864 +3 2640 2789 5883 +3 3926 3883 4170 +3 3926 3928 3883 +3 5869 7694 5981 +3 3931 5449 3884 +3 3931 3885 5449 +3 3933 3858 4675 +3 3886 7321 6551 +3 7321 3887 6551 +3 7321 3935 3887 +3 3935 3888 3887 +3 3935 4458 3888 +3 4458 6694 3888 +3 5565 1750 3889 +3 4458 3937 6694 +3 3937 7868 6694 +3 3937 5383 7868 +3 5383 3890 7868 +3 3891 5491 3890 +3 7222 3892 3855 +3 3892 3894 3855 +3 4261 5503 3893 +3 7670 7108 3894 +3 7670 3895 7108 +3 3895 3896 3897 +3 3896 3984 7020 +3 3984 3940 3898 +3 4335 3899 2482 +3 3940 3900 3898 +3 3901 7768 3900 +3 3942 6528 7767 +3 5892 3902 6528 +3 6251 4361 3903 +3 3948 3849 3904 +3 3948 3905 3849 +3 3905 3906 3848 +3 3906 8226 7764 +3 8226 6191 7764 +3 8158 3909 3907 +3 1539 1541 3908 +3 3909 4753 3907 +3 6308 3910 7801 +3 3910 3911 3912 +3 6099 3913 6980 +3 6102 3914 7190 +3 3911 3950 3915 +3 3950 5966 3915 +3 7818 3955 3916 +3 7638 3116 3180 +3 3955 3917 3916 +3 8008 3964 3918 +3 3964 3919 3918 +3 3920 3921 3919 +3 5276 3876 3921 +3 2581 6398 2668 +3 5276 6466 3876 +3 6466 3877 3876 +3 6466 7987 3877 +3 6479 3922 6325 +3 3966 3967 7162 +3 6450 5247 3923 +3 7409 7578 2086 +3 3532 5495 3924 +3 7064 5063 5247 +3 3925 3970 5377 +3 3974 3926 3882 +3 3974 3927 3926 +3 3927 3928 3926 +3 3976 6769 3928 +3 3929 5869 6769 +3 3929 3930 5869 +3 3930 3979 8103 +3 3979 3931 8103 +3 3979 3932 3931 +3 3932 3885 3931 +3 6214 3886 3933 +3 6214 3934 3886 +3 7320 3936 3935 +3 3936 4458 3935 +3 3982 5383 3937 +3 3982 3938 5383 +3 5566 3892 7222 +3 5143 3895 7670 +3 3986 3896 3895 +3 3985 3984 3896 +3 316 3939 361 +3 3990 3901 3940 +3 3989 3941 3901 +3 7760 3942 3941 +3 3943 3247 6111 +3 3945 5892 3942 +3 3945 3944 5892 +3 3993 6034 3948 +3 6034 3905 3948 +3 3946 3906 3905 +3 3946 4945 3906 +3 4945 8226 3906 +3 4945 3947 8226 +3 3997 3910 6308 +3 3997 3949 3910 +3 3993 3948 7008 +3 3949 3911 3910 +3 3949 3999 3911 +3 3999 3950 3911 +3 3951 3954 3950 +3 3953 3952 2854 +3 4000 7818 3954 +3 4000 5663 7818 +3 4002 3956 3955 +3 3957 3958 3956 +3 4004 3959 3958 +3 5644 3825 3959 +3 5644 3960 3825 +3 8194 3962 3828 +3 3962 3961 3828 +3 3962 4010 3961 +3 4010 3831 3961 +3 4367 3963 7817 +3 3963 3834 7817 +3 3963 5248 3834 +3 693 3920 3964 +3 693 898 3920 +3 898 6397 5276 +3 2616 3965 7986 +3 3965 6479 7986 +3 7783 983 3966 +3 983 3967 3966 +3 7188 6450 3967 +3 7188 3968 6450 +3 1067 3969 3925 +3 3969 3971 3970 +3 3971 3974 3970 +3 3972 3711 1887 +3 1848 7509 1952 +3 5092 813 3973 +3 5823 3927 3974 +3 3975 1365 627 +3 5822 3976 3927 +3 5822 1312 3976 +3 7878 3084 3977 +3 1312 3929 3976 +3 1312 3978 3929 +3 7279 1436 3979 +3 1436 3932 3979 +3 1436 5538 3932 +3 5538 6000 3932 +3 5538 6838 6000 +3 1579 7320 3934 +3 1579 3980 7320 +3 3980 1704 3936 +3 1704 4459 3936 +3 3981 3982 4459 +3 1794 3938 3982 +3 1794 6927 3938 +3 6371 5566 7223 +3 6371 3983 5566 +3 2536 5143 6438 +3 3987 3940 3984 +3 2063 3985 3986 +3 2063 5694 3985 +3 3988 3990 3987 +3 6764 3989 3990 +3 2256 3991 3945 +3 3992 3993 3944 +3 2418 6034 3993 +3 8137 2550 3946 +3 2595 3947 4945 +3 2595 3994 3947 +3 2631 3995 7595 +3 4419 5231 3996 +3 3995 3998 3997 +3 3998 3949 3997 +3 7875 2968 8187 +3 7563 5659 3999 +3 2946 4000 3951 +3 2946 4001 4000 +3 1154 1108 6163 +3 4001 5663 4000 +3 4001 4003 5663 +3 4003 4002 5663 +3 410 3957 4002 +3 410 4005 3957 +3 4005 4004 3957 +3 522 5443 5644 +3 532 4007 5619 +3 2757 4006 7843 +3 4007 5410 5619 +3 5582 3108 6179 +3 4007 4008 5410 +3 4008 7698 5410 +3 2423 4731 6540 +3 6496 4009 3962 +3 4009 7116 4010 +3 7116 4367 4010 +3 7116 81 4367 +3 81 3963 4367 +3 81 4011 3963 +3 4011 5248 3963 +3 4001 7102 474 +3 472 7215 4012 +3 7296 3640 3591 +3 472 4013 7215 +3 4013 5975 5562 +3 3555 2621 3548 +3 4014 4030 5765 +3 4014 533 4030 +3 4016 1833 4015 +3 533 4017 5938 +3 4017 7456 5938 +3 7672 119 4018 +3 119 4019 4020 +3 4019 4022 8208 +3 4022 4021 8208 +3 5321 971 917 +3 58 4024 5833 +3 4024 4025 4023 +3 4025 4026 4023 +3 16 7117 4026 +3 7117 4023 4026 +3 7117 59 4023 +3 59 5833 4023 +3 59 4027 5833 +3 4701 4020 8208 +3 8073 5327 7426 +3 195 7456 4018 +3 195 4028 7456 +3 4028 5938 7456 +3 8016 4029 4030 +3 4029 6615 5765 +3 5803 4103 4031 +3 5803 4032 4103 +3 6738 4033 4101 +3 4033 4034 7592 +3 4035 4036 7379 +3 2594 7534 4036 +3 2594 7965 7534 +3 4792 4037 7964 +3 2417 4094 4037 +3 4038 4040 6853 +3 4039 6613 5760 +3 4040 6999 4089 +3 6999 4041 4090 +3 4042 4043 6696 +3 7121 6483 4043 +3 2158 5071 4044 +3 2535 4088 4045 +3 7299 4046 7039 +3 3344 2986 5212 +3 1751 4086 7027 +3 1751 4047 4086 +3 4047 4048 7715 +3 4048 1613 4083 +3 4049 1355 5188 +3 1613 8161 4083 +3 4050 6815 8161 +3 7332 4053 4051 +3 4053 4054 4052 +3 4054 5210 4052 +3 7861 1351 4055 +3 8213 4732 2216 +3 1351 4079 4055 +3 1351 4057 4079 +3 4057 4056 4079 +3 4057 4059 4056 +3 4865 7436 4058 +3 4059 4060 4056 +3 1281 4076 4060 +3 5847 7082 4076 +3 1106 7571 4116 +3 3991 4038 6220 +3 1106 4061 7571 +3 4061 6621 7571 +3 1355 4920 4918 +3 927 4073 5864 +3 927 874 4073 +3 2097 4062 4063 +3 7675 6647 7085 +3 619 673 4064 +3 7675 772 6647 +3 772 6096 6647 +3 772 5614 6096 +3 5614 7113 6096 +3 5776 5828 273 +3 692 4069 7113 +3 692 5256 4069 +3 2297 7419 6416 +3 5256 4067 4069 +3 7058 4065 4068 +3 4065 7978 4068 +3 5829 7979 4066 +3 3061 6609 3146 +3 6433 4068 7978 +3 663 4067 4068 +3 735 4069 4067 +3 734 7113 4069 +3 2246 6647 6096 +3 2014 2101 6005 +3 4772 4070 7644 +3 4072 4071 7085 +3 984 5864 4073 +3 984 6812 5864 +3 6812 6303 6621 +3 4074 4075 4116 +3 6997 7082 4075 +3 6839 2023 2168 +3 1282 4060 4076 +3 1282 4077 4060 +3 4077 4056 4060 +3 4078 7469 7256 +3 4077 5821 4056 +3 1396 4055 4079 +3 1396 4080 4055 +3 4080 5210 4055 +3 4080 1545 5210 +3 1545 4052 5210 +3 7505 4051 4052 +3 7505 7336 4051 +3 7336 4081 6815 +3 4081 8161 6815 +3 1660 4082 4083 +3 4082 4084 7715 +3 4084 4086 7715 +3 2406 2408 4085 +3 1795 7027 4086 +3 1795 1889 7027 +3 1889 5993 7039 +3 365 7975 3480 +3 4087 4088 6227 +3 2848 7293 2901 +3 5933 4045 4088 +3 7402 2107 4044 +3 6384 4089 4090 +3 6384 4091 4089 +3 4091 4092 6853 +3 8197 7723 4093 +3 3358 4094 6448 +3 3358 4096 4094 +3 4096 4037 4094 +3 4096 4095 4037 +3 4095 4097 7964 +3 4098 4036 7534 +3 2632 7379 4036 +3 2632 6646 7379 +3 6646 6833 7592 +3 1525 6437 4099 +3 5555 4100 4101 +3 5555 4102 4100 +3 4102 6978 4103 +3 3000 5096 6387 +3 3000 3002 5096 +3 3002 4106 5096 +3 6706 2758 2633 +3 4104 4105 6869 +3 3003 3001 4105 +3 3003 4107 3001 +3 4107 4106 3001 +3 3003 464 4107 +3 3003 4108 464 +3 4108 5142 464 +3 4108 4154 5142 +3 7716 4111 4109 +3 4110 2173 2117 +3 4111 8153 4109 +3 6698 4112 7936 +3 6607 4114 4113 +3 1048 7311 1086 +3 4114 1441 6129 +3 4115 7104 6253 +3 8160 4074 4116 +3 5527 4117 6759 +3 4117 5464 6759 +3 6639 6269 4121 +3 4118 6405 6801 +3 6622 4119 877 +3 1444 985 4119 +3 1447 4120 7166 +3 4120 1108 7166 +3 4120 4121 1108 +3 4121 6163 1108 +3 7466 4123 4122 +3 4123 1245 4122 +3 7988 4124 1245 +3 3200 7957 4125 +3 1450 4126 6485 +3 4126 4127 5881 +3 5034 4128 5678 +3 2817 2938 8052 +3 4129 2124 4128 +3 6567 4130 1548 +3 291 5672 6142 +3 4130 6360 1548 +3 4400 4131 6359 +3 4131 4132 6359 +3 4133 7035 4132 +3 4133 8082 7035 +3 8082 1756 7035 +3 1940 1798 1756 +3 4135 4134 1798 +3 4135 7110 4134 +3 7110 5997 4136 +3 5997 1939 4136 +3 5997 4137 1939 +3 2828 4139 5087 +3 3210 7729 3169 +3 1652 4138 5254 +3 4139 2163 5087 +3 2830 6864 5392 +3 2830 4140 6864 +3 4140 4142 6864 +3 4141 3512 3712 +3 2832 2371 4142 +3 2422 8055 2468 +3 4143 7867 2371 +3 2833 4145 4144 +3 4343 3672 2651 +3 4145 4146 4144 +3 7692 4147 4146 +3 2836 2598 4147 +3 2836 5618 2598 +3 5618 2637 2598 +3 5618 4148 2637 +3 4148 4150 4149 +3 4150 6750 4149 +3 4151 7833 5084 +3 7738 4153 4152 +3 4164 2888 4153 +3 4164 4166 2888 +3 4166 8154 2888 +3 6708 4155 4154 +3 4155 4168 5142 +3 4169 342 6047 +3 4169 4158 342 +3 4157 4156 7858 +3 4158 343 342 +3 4158 4159 343 +3 4159 4160 7996 +3 4160 7549 7996 +3 2665 4161 5934 +3 4161 4162 5934 +3 734 736 773 +3 154 8011 4162 +3 154 7546 8011 +3 3197 8112 635 +3 4163 6240 7632 +3 4165 4166 4164 +3 7641 6708 4166 +3 7641 6584 6708 +3 8184 4167 3786 +3 6584 4155 6708 +3 873 5122 5380 +3 6583 6435 4168 +3 6435 341 4169 +3 3882 3926 4170 +3 4172 4165 4171 +3 4174 6584 7641 +3 4174 4173 6584 +3 4172 3893 4174 +3 530 4175 6414 +3 5456 4176 4175 +3 2801 2909 2857 +3 5456 528 4176 +3 485 4177 4176 +3 4177 5741 4176 +3 487 4178 4230 +3 4178 4179 4231 +3 660 4183 4180 +3 4183 4181 4180 +3 4182 8040 624 +3 4183 6899 4181 +3 765 4184 728 +3 4185 3617 3657 +3 765 5065 4184 +3 6024 4186 6918 +3 4186 5719 6918 +3 5905 7308 4187 +3 5905 4188 7308 +3 4188 1091 7765 +3 3353 7537 2284 +3 1091 6916 7765 +3 1091 4189 6916 +3 4189 7468 8215 +3 8151 4190 2111 +3 7468 5884 8215 +3 1230 4191 5884 +3 1230 1275 4191 +3 4193 6931 4192 +3 1275 1305 4651 +3 1305 1274 4651 +3 1305 4194 1274 +3 4194 1304 1274 +3 4194 4195 1304 +3 5922 7471 3668 +3 4195 4761 1304 +3 4196 220 7622 +3 1346 6444 4197 +3 1472 1533 6983 +3 1533 7257 6983 +3 4198 1969 4502 +3 1646 1693 4199 +3 1646 7935 1693 +3 1828 1778 6595 +3 1827 7362 5350 +3 7362 4200 5350 +3 1966 1964 4200 +3 4701 5132 4020 +3 5645 4201 573 +3 1966 7152 1964 +3 7152 2053 1965 +3 2053 5906 1965 +3 2053 2094 5906 +3 2094 2093 5906 +3 1668 7211 1586 +3 2094 4202 2093 +3 4202 6667 2093 +3 2192 4204 7941 +3 4204 4203 7941 +3 4204 7295 4203 +3 7295 2304 4203 +3 7295 4205 2304 +3 433 5850 500 +3 4205 4206 7376 +3 4206 8009 7376 +3 2858 2910 2909 +3 4206 4207 8009 +3 4207 8162 8009 +3 4234 4208 4209 +3 4210 7678 3436 +3 2580 2578 4208 +3 2813 2745 6365 +3 4211 4212 2745 +3 652 720 5630 +3 2873 7463 4212 +3 2931 2988 7463 +3 2931 4213 2988 +3 4213 4216 4214 +3 736 3973 813 +3 4216 885 4214 +3 4216 4215 885 +3 4215 426 4217 +3 426 4218 427 +3 5126 2357 7507 +3 4218 361 427 +3 4218 4219 361 +3 4221 4220 3507 +3 4219 4223 316 +3 4223 4222 316 +3 209 132 4224 +3 209 4225 132 +3 4225 7673 133 +3 7673 5796 133 +3 38 468 39 +3 7984 1556 6695 +3 38 5606 468 +3 4216 4226 6863 +3 4226 5612 6863 +3 4226 4228 5612 +3 4228 4227 5612 +3 4228 3660 4227 +3 3660 5999 4227 +3 8010 7568 5999 +3 6414 4175 4229 +3 4175 5741 4229 +3 5741 4230 4229 +3 4230 4231 6733 +3 663 735 4067 +3 4231 6863 5612 +3 4227 7568 6733 +3 4227 5999 7568 +3 7891 3046 4232 +3 3046 5108 4232 +3 508 4349 5426 +3 4588 6446 8174 +3 512 5685 5598 +3 512 4233 5685 +3 2451 2495 4234 +3 4233 4236 4235 +3 4236 4237 4235 +3 4238 7373 4237 +3 4240 4239 7373 +3 516 8121 4239 +3 3230 5048 2956 +3 7022 6857 4241 +3 6857 4360 4241 +3 7560 4243 4242 +3 4243 4244 4242 +3 6825 7364 4244 +3 6825 4245 7364 +3 3950 3954 5966 +3 4246 7581 1638 +3 6071 5817 5282 +3 4245 4247 4362 +3 4247 4248 4363 +3 519 4249 4365 +3 4249 6203 4365 +3 7547 4251 4250 +3 1323 5900 7909 +3 4251 5610 4250 +3 571 4252 4370 +3 4424 7217 7243 +3 456 4376 7274 +3 4253 5563 1955 +3 4255 4254 4376 +3 7548 4255 405 +3 3642 3598 3597 +3 7042 4254 4255 +3 460 111 458 +3 460 5402 111 +3 459 7071 193 +3 2374 7879 2423 +3 461 4256 6143 +3 461 6455 4256 +3 6455 4259 4256 +3 4258 4257 3731 +3 4260 404 4259 +3 4260 5454 404 +3 5454 4261 7548 +3 4262 4264 7042 +3 7391 3038 4263 +3 4292 5602 4264 +3 4292 6954 5602 +3 6954 4266 7303 +3 4266 4265 7303 +3 4266 6458 4265 +3 6458 4267 2889 +3 4267 7531 2889 +3 7640 4268 7864 +3 964 962 960 +3 3605 4269 6074 +3 6247 4270 4269 +3 4271 2513 4270 +3 2322 6587 6886 +3 6587 4272 6886 +3 7276 2209 4272 +3 7276 4273 2209 +3 2067 4275 8164 +3 4275 4274 8164 +3 4275 7191 4274 +3 1944 2021 5211 +3 4276 5686 1893 +3 1712 4278 5795 +3 4278 4277 5795 +3 5572 4279 4277 +3 5572 6097 4279 +3 913 1006 7725 +3 8192 1664 4280 +3 8192 1583 1664 +3 1583 5511 1664 +3 1583 4281 5511 +3 4281 6555 1485 +3 6555 4282 1485 +3 6555 7273 4282 +3 7123 7245 5913 +3 4167 4283 3744 +3 4285 4284 7245 +3 1284 4286 4284 +3 3147 7451 4287 +3 4288 5895 4286 +3 4289 1109 2277 +3 1109 6623 6055 +3 6623 5157 5634 +3 1111 1113 6128 +3 1014 880 4290 +3 1014 7721 880 +3 5279 5265 7922 +3 697 699 4291 +3 610 5274 7298 +3 5355 3217 2493 +3 4292 4262 2952 +3 4262 3893 2952 +3 5986 4264 5602 +3 5986 5499 7755 +3 5499 4293 4377 +3 7250 3005 4294 +3 4657 4296 4295 +3 4296 5939 4295 +3 4296 5668 5939 +3 4720 4298 4297 +3 4298 5050 4297 +3 5049 5393 4299 +3 3553 538 3328 +3 2563 2564 5845 +3 5393 4892 4299 +3 7494 4300 4841 +3 7792 4301 4300 +3 7151 6385 4301 +3 7151 4302 6385 +3 4302 3008 4303 +3 3008 7651 4303 +3 3008 4304 7651 +3 1857 1772 3249 +3 4305 4306 4447 +3 4306 4307 7316 +3 4307 5512 5504 +3 3011 4308 5492 +3 5434 4452 4308 +3 3013 6195 6468 +3 4309 4311 6195 +3 7869 4310 4311 +3 5436 4312 5764 +3 4313 7805 4542 +3 5563 3169 3134 +3 3693 4543 7805 +3 3698 4314 6268 +3 6706 6603 2758 +3 4314 6170 6268 +3 7100 5652 4510 +3 7100 5435 5652 +3 5435 4545 5652 +3 5435 6592 4545 +3 6865 4315 4316 +3 5519 4317 4315 +3 5519 4318 4317 +3 2150 4508 7659 +3 4318 1631 4550 +3 1631 4319 4552 +3 4319 1730 4551 +3 1730 1766 4320 +3 1766 1819 4321 +3 1256 1289 5609 +3 1819 6702 4321 +3 1819 4322 6702 +3 6422 4323 5709 +3 4322 3322 4324 +3 3321 4555 4325 +3 3321 4327 4555 +3 4326 1875 1924 +3 6194 6718 857 +3 4327 4328 4555 +3 2036 7786 4328 +3 2036 5338 7786 +3 5747 4329 1328 +3 5338 2129 5916 +3 4330 2238 5362 +3 2129 4331 5916 +3 4655 4332 4333 +3 7173 5846 4334 +3 4335 2434 3899 +3 6132 4336 5385 +3 4332 2274 4557 +3 2274 4338 4558 +3 4338 4337 4558 +3 4338 6791 4337 +3 4339 6007 7455 +3 2485 7761 4559 +3 4340 5487 4562 +3 5487 4341 4562 +3 5487 4342 4341 +3 4342 4343 4565 +3 2872 3607 5404 +3 4343 2707 4344 +3 4346 4345 8035 +3 6828 7229 4567 +3 4347 4569 7229 +3 5107 4571 7120 +3 3340 1218 723 +3 5426 4349 4573 +3 4349 4348 4573 +3 4350 4575 7154 +3 510 4351 7009 +3 4351 4353 4352 +3 4353 5351 4352 +3 6752 7690 1451 +3 5097 4354 4578 +3 350 7079 414 +3 5097 4355 4354 +3 4355 7297 4354 +3 4837 381 5607 +3 381 4580 5607 +3 381 4356 4580 +3 1850 1908 1849 +3 4356 7464 4580 +3 7019 4595 6692 +3 5150 4599 7542 +3 7278 7920 4599 +3 5685 4357 7144 +3 4235 4237 4603 +3 4237 4358 4603 +3 4237 7373 4358 +3 6464 4359 2753 +3 4360 7561 7289 +3 4242 4609 6013 +3 4244 7183 4609 +3 4244 7364 7183 +3 1270 1271 6060 +3 566 4361 3681 +3 4362 4363 4611 +3 6364 6135 1875 +3 4363 5064 6236 +3 2194 2242 4364 +3 4248 4365 4615 +3 4365 6203 6940 +3 7890 4250 4366 +3 4010 4367 3831 +3 1835 6663 4368 +3 4250 4369 4366 +3 4250 5610 4369 +3 5511 4016 6543 +3 4372 4620 4707 +3 4371 6959 396 +3 4371 4370 6959 +3 4370 4620 4372 +3 4373 119 7672 +3 4252 6876 4620 +3 7243 5459 4662 +3 4374 6076 719 +3 7243 7217 5459 +3 4375 3625 1274 +3 7274 4376 8209 +3 4376 7755 8209 +3 7755 4377 8209 +3 589 4380 4378 +3 4379 1499 1592 +3 4380 6424 4378 +3 4380 636 6424 +3 636 4381 7541 +3 4381 2407 7541 +3 4381 702 2407 +3 702 666 2407 +3 702 4384 666 +3 4383 3785 4382 +3 4384 4385 666 +3 4386 4388 4385 +3 5739 4387 4388 +3 850 4257 4387 +3 4390 4389 4257 +3 1047 996 5345 +3 4390 6072 4389 +3 6072 4391 2511 +3 4391 1028 930 +3 1028 1071 5324 +3 1071 1027 5324 +3 1071 1115 1027 +3 1115 4392 5994 +3 4392 1725 5994 +3 4392 4393 1725 +3 4393 1248 4394 +3 6387 7230 3000 +3 1248 1192 4394 +3 1248 4395 1192 +3 1317 4396 8080 +3 1317 4397 4396 +3 4397 4399 4396 +3 5945 3124 4398 +3 6541 1402 4399 +3 7743 1486 1402 +3 1585 1584 5154 +3 1585 4402 1584 +3 6854 4131 4400 +3 4402 8046 4401 +3 8046 5082 4401 +3 8046 4403 5082 +3 3326 4404 1714 +3 3326 4405 4404 +3 4405 5083 4404 +3 4405 6021 5083 +3 4407 4406 8220 +3 7514 3684 4408 +3 6021 5794 5083 +3 5360 7860 5794 +3 5360 4409 7860 +3 4409 4410 4411 +3 4410 6327 4412 +3 6327 2070 4412 +3 7437 4414 4413 +3 4414 2110 4413 +3 4414 2215 2110 +3 5474 4415 2212 +3 4415 6767 5501 +3 6767 4416 5501 +3 6766 4417 7420 +3 2470 2469 8055 +3 2470 7452 2469 +3 4419 4421 4418 +3 4420 1498 1497 +3 3996 2722 4421 +3 3996 5089 2722 +3 5089 2680 2722 +3 5089 5341 2680 +3 5341 2681 2680 +3 5341 2840 2681 +3 2840 2791 2681 +3 2840 4422 2791 +3 4422 6998 2791 +3 7250 4293 4423 +3 7250 4436 4293 +3 7217 7274 8209 +3 7217 4424 7274 +3 4424 4425 4426 +3 3013 4309 6195 +3 4425 4427 401 +3 4427 5066 4428 +3 292 4429 293 +3 4430 3408 3362 +3 1395 782 1528 +3 4431 6144 4429 +3 225 4432 190 +3 4433 4434 5109 +3 3263 3484 3483 +3 4435 581 4434 +3 4436 4294 7000 +3 4654 2954 4437 +3 4438 3005 2954 +3 4438 4658 3005 +3 4658 4294 3005 +3 4658 4440 4294 +3 4439 7311 1372 +3 4440 7000 4294 +3 4656 4295 4669 +3 1129 1169 2437 +3 4295 4702 4669 +3 4295 5939 4702 +3 4297 4441 5857 +3 4297 5050 4441 +3 7428 4672 5052 +3 7428 4299 4672 +3 4299 4673 4672 +3 4299 4892 4673 +3 4841 4300 6969 +3 6487 5149 4442 +3 4300 4674 6969 +3 4301 4676 4674 +3 4301 6385 4676 +3 6385 4443 4676 +3 4303 7651 4677 +3 7417 4446 4444 +3 1170 4445 1270 +3 4446 6524 4444 +3 4446 4447 6524 +3 4447 4450 6524 +3 5183 4448 6469 +3 4449 129 168 +3 7316 5851 4450 +3 5492 5300 7239 +3 5492 4308 5300 +3 4308 6307 5300 +3 3629 3582 7317 +3 4308 4452 6307 +3 4452 6468 4451 +3 4311 7608 7982 +3 4683 6004 4594 +3 6004 4576 4594 +3 6004 6900 4576 +3 3903 2972 7057 +3 6004 4454 6900 +3 4454 4453 4574 +3 4454 4310 4453 +3 4453 7706 4455 +3 7706 4572 4455 +3 7706 7384 4572 +3 7706 5670 7384 +3 7384 7720 4457 +3 4457 4570 4456 +3 4457 2859 4570 +3 4459 3937 4458 +3 2859 2802 4461 +3 4461 6891 4568 +3 4006 4460 7136 +3 4461 5800 6891 +3 5800 4462 6891 +3 5800 6832 4464 +3 4464 2611 4463 +3 4463 4465 4566 +3 4463 4466 4465 +3 4466 4467 4564 +3 4466 4468 4467 +3 4469 3053 603 +3 4247 519 4248 +3 4467 6703 4470 +3 1037 1083 5625 +3 4470 4561 4563 +3 4470 4471 4561 +3 4471 7665 4560 +3 4471 2387 7665 +3 4472 5733 7419 +3 322 575 371 +3 7665 4473 4560 +3 4475 4476 4474 +3 4475 6007 4476 +3 4476 6660 4474 +3 700 5359 4291 +3 7056 4477 4478 +3 4479 4809 4477 +3 4479 4480 4809 +3 4479 2035 4480 +3 4480 4556 4809 +3 4480 5792 4556 +3 677 5116 754 +3 4480 5958 5792 +3 5792 6946 4483 +3 4483 4481 5915 +3 5643 1229 4482 +3 4483 8012 4481 +3 8012 4484 6598 +3 4484 4487 4485 +3 4484 6850 4487 +3 4487 4486 4485 +3 4487 6638 5197 +3 5517 1731 1677 +3 5197 6029 4486 +3 5415 5736 4606 +3 4489 1728 4488 +3 4488 4554 4490 +3 6608 2213 4491 +3 4488 4492 4554 +3 4488 1630 4492 +3 4492 4496 4553 +3 4492 5877 4496 +3 4494 4493 1157 +3 4496 4495 6257 +3 4495 4497 4549 +3 4495 3135 4497 +3 4497 4498 6101 +3 4499 531 107 +3 6101 6425 6061 +3 4501 4548 6425 +3 2159 5914 4500 +3 4501 1417 6420 +3 4503 4502 7583 +3 6420 4504 4506 +3 4506 4546 6192 +3 4506 6979 4546 +3 4506 4505 6979 +3 6979 4507 4546 +3 1262 7357 4507 +3 4508 2247 7659 +3 1262 7038 7357 +3 1262 4509 7038 +3 1743 6595 1778 +3 7038 6389 7357 +3 1294 4510 6170 +3 4512 4511 6389 +3 4514 4513 7602 +3 4514 1043 4513 +3 1043 993 5991 +3 5748 2298 7418 +3 5991 4515 5144 +3 5991 946 4515 +3 946 4541 4515 +3 4516 7535 5123 +3 7535 6550 5123 +3 8128 6377 4517 +3 6377 4518 7003 +3 7003 4536 4519 +3 5793 2275 4520 +3 6113 4521 4522 +3 7524 3122 4778 +3 2376 8140 5036 +3 4521 4523 5810 +3 4521 647 4523 +3 4523 4524 6580 +3 4523 646 4524 +3 4524 5414 6580 +3 4524 4528 5414 +3 2122 4525 2228 +3 4528 4532 5414 +3 4526 5342 1484 +3 4528 4529 4532 +3 4528 4527 4529 +3 4529 4531 4532 +3 4182 4530 4531 +3 4530 648 4532 +3 4533 717 6580 +3 3908 2895 4534 +3 716 4522 5810 +3 2571 6914 4535 +3 7219 4536 4522 +3 7657 4519 4536 +3 7657 5328 4519 +3 5328 4517 4519 +3 4235 4603 4357 +3 7400 5899 4537 +3 5328 4538 4517 +3 4538 6550 4517 +3 4539 5129 5401 +3 4538 5543 6550 +3 5542 4540 4541 +3 4542 4513 5144 +3 7805 4543 7602 +3 4544 2397 7658 +3 7874 1025 5557 +3 5652 4545 4546 +3 4545 4316 6192 +3 4316 4548 6192 +3 2370 2509 4547 +3 4315 6425 4548 +3 4317 4550 6061 +3 4550 4549 6061 +3 4550 4552 4549 +3 4482 1229 3214 +3 4552 4551 6257 +3 4551 4320 4553 +3 4320 4554 4553 +3 4320 4321 4554 +3 4321 4490 4554 +3 3836 3829 3830 +3 6702 6029 4490 +3 4324 4325 4486 +3 4325 4555 4485 +3 4555 4328 6598 +3 4328 4481 6598 +3 4328 7786 4481 +3 6559 6079 1318 +3 4331 4809 4556 +3 4333 4557 4477 +3 4557 4558 4478 +3 4558 6660 4478 +3 4337 7025 4474 +3 4559 4473 7893 +3 7761 4562 4560 +3 4562 4561 4560 +3 4341 4565 4563 +3 4565 4564 4563 +3 4565 4344 4564 +3 4344 8035 4465 +3 4345 4462 4566 +3 4345 4567 4462 +3 4569 4570 4568 +3 1460 3559 1554 +3 7120 4456 4570 +3 7120 4571 4456 +3 4571 4572 4456 +3 4573 4455 4572 +3 4348 4574 4455 +3 7690 4126 1450 +3 4348 7154 4574 +3 4575 4576 6900 +3 7009 6363 4576 +3 4352 4593 6363 +3 4352 5351 4593 +3 5351 4578 4577 +3 4578 5734 4577 +3 5607 4580 6859 +3 4580 4579 6859 +3 4580 7464 4579 +3 7464 5090 4579 +3 3846 4581 4582 +3 383 438 4583 +3 438 511 4584 +3 4584 4579 5090 +3 4584 4588 4579 +3 7227 4585 4586 +3 1746 4587 7852 +3 4588 6859 4579 +3 6689 2570 4589 +3 4588 8174 4590 +3 7278 4591 7919 +3 7278 4599 5150 +3 4592 4577 5734 +3 6827 4593 4577 +3 6827 4595 7019 +3 7019 6692 4594 +3 3252 3289 3253 +3 6692 4595 7981 +3 4597 4596 4686 +3 7542 4598 4596 +3 7542 4599 4598 +3 4599 4688 4598 +3 4599 7920 4688 +3 5624 7144 4600 +3 4357 4601 4602 +3 4357 4603 4601 +3 4603 4605 4601 +3 4358 4604 4605 +3 1815 4606 1909 +3 8120 4607 7913 +3 7289 4608 4693 +3 4759 7233 614 +3 7289 6013 4608 +3 6013 5701 4608 +3 6013 4609 5701 +3 4609 7183 4610 +3 7363 4611 5861 +3 6236 8171 8185 +3 6236 4612 8171 +3 1534 5769 5280 +3 3473 7711 4613 +3 6236 5064 4612 +3 5064 4614 4612 +3 4615 4835 4614 +3 4615 6940 4835 +3 4616 5571 6939 +3 2798 6115 4617 +3 4369 4697 4618 +3 4369 4619 4697 +3 5655 5102 4698 +3 4707 4620 4700 +3 7722 6451 6925 +3 6445 5992 7077 +3 5992 4491 7077 +3 5992 4621 4491 +3 883 4622 7653 +3 4622 933 7653 +3 881 4290 880 +3 4622 7443 933 +3 7443 986 933 +3 6691 4623 4624 +3 1072 4625 1487 +3 1072 4626 4625 +3 4626 7816 4625 +3 4626 4627 7816 +3 1002 6199 8093 +3 4627 1249 1488 +3 1249 7430 1488 +3 4628 3793 3888 +3 6559 4629 4630 +3 4631 5537 5878 +3 1545 7505 4052 +3 4631 4632 5537 +3 4632 1491 5537 +3 4632 6373 1491 +3 6373 4633 1491 +3 6298 6231 4633 +3 4634 1667 7220 +3 1667 4635 7679 +3 4635 4636 4637 +3 4636 6086 1715 +3 4639 4641 4638 +3 8189 4640 4641 +3 3665 481 3664 +3 5170 1896 4640 +3 7579 4642 1896 +3 7444 1987 4642 +3 7444 2072 1987 +3 2072 2682 1987 +3 2167 7011 2684 +3 2166 4643 7011 +3 6849 4644 1679 +3 2324 2686 6380 +3 2375 5236 2686 +3 5076 3170 4645 +3 2374 4646 2689 +3 4646 2690 2689 +3 4646 7544 2690 +3 7544 4647 2690 +3 2558 3506 4648 +3 3506 5232 4648 +3 3506 5940 5232 +3 8088 4650 4649 +3 6988 3017 1295 +3 4650 2793 4649 +3 4650 4652 2793 +3 1275 4651 4191 +3 4652 4653 2793 +3 8066 3818 4653 +3 8066 6490 3818 +3 6490 4654 3818 +3 2129 4655 4331 +3 6490 4657 4654 +3 4657 4438 4654 +3 4657 4656 4438 +3 5393 6313 4892 +3 4656 4659 4658 +3 4659 4440 4658 +3 5635 4660 4440 +3 1185 4661 863 +3 6876 4252 4662 +3 4252 5930 4662 +3 3260 2569 4663 +3 4252 571 5930 +3 571 400 5930 +3 4665 398 4664 +3 398 4667 338 +3 4667 332 4666 +3 332 334 4666 +3 332 558 334 +3 5092 5465 847 +3 558 4668 224 +3 4659 4669 4699 +3 4669 4702 5316 +3 5653 889 4670 +3 4671 5857 8062 +3 5052 4672 6482 +3 4672 4673 4891 +3 6969 4674 4783 +3 3885 3933 4675 +3 4674 4676 5267 +3 4443 4784 7574 +3 4443 4677 4784 +3 4677 7511 4785 +3 7511 4786 4785 +3 7511 4444 4786 +3 571 4665 400 +3 4444 4678 4786 +3 6524 4450 4679 +3 5300 6307 5389 +3 6307 4794 5389 +3 4680 6860 992 +3 4682 7982 4681 +3 7982 4683 4681 +3 4684 7094 3509 +3 4686 4796 4685 +3 4598 4688 4687 +3 4688 4600 4687 +3 4600 4689 4687 +3 4602 4798 4689 +3 4601 6349 4798 +3 4601 4605 6349 +3 4690 7797 4800 +3 134 3473 3494 +3 7797 4691 4800 +3 7913 4692 4691 +3 4693 4694 4692 +3 4608 6681 4694 +3 5318 4803 4802 +3 8185 4695 4805 +3 8185 8171 4695 +3 3116 7089 3180 +3 3189 4696 3154 +3 4618 4697 4994 +3 3017 718 1295 +3 4698 5636 5056 +3 4700 4699 5315 +3 4700 5635 4699 +3 6411 7143 4701 +3 4704 4671 8062 +3 4704 5316 4702 +3 4704 6463 4703 +3 4706 4705 1719 +3 5835 3515 3518 +3 4703 4708 5315 +3 4708 4707 5315 +3 4709 4710 4372 +3 4709 5102 4710 +3 4710 6926 4711 +3 4711 396 6959 +3 4711 4712 396 +3 5447 7837 2539 +3 4711 7751 4712 +3 4712 397 396 +3 4712 4713 397 +3 4712 7319 4713 +3 2738 2737 3415 +3 4713 6866 397 +3 4713 4715 6866 +3 4713 337 4715 +3 4715 7083 6866 +3 4715 4714 7083 +3 4715 335 4714 +3 4207 3474 2450 +3 4714 4718 4716 +3 4714 4717 4718 +3 4718 8001 4716 +3 5939 5668 6078 +3 6553 7305 4719 +3 5668 4720 6078 +3 5668 4721 4720 +3 5158 2612 7153 +3 4721 4723 4720 +3 2955 4722 4723 +3 2894 4779 4722 +3 2894 4724 4779 +3 1607 7449 1656 +3 4724 5603 4725 +3 1186 1187 1241 +3 5603 2795 4725 +3 5603 6765 2795 +3 6765 4726 2795 +3 4729 5332 4726 +3 4728 2565 4727 +3 4729 2559 5332 +3 6235 4777 4730 +3 6235 4731 4777 +3 7846 7367 7065 +3 7880 2325 3129 +3 2325 8106 3129 +3 2325 2260 8106 +3 2260 5233 8106 +3 2260 4732 5233 +3 4732 4190 4733 +3 2168 2113 8150 +3 2168 2023 2113 +3 2023 4734 7015 +3 4734 4776 7015 +3 1940 4135 1798 +3 5158 4735 2612 +3 8043 4736 4776 +3 1897 1947 4736 +3 1897 4737 1947 +3 6133 1961 2049 +3 4737 7280 6042 +3 7280 4774 6042 +3 2752 2754 2878 +3 7280 4739 4774 +3 4739 6905 4738 +3 6905 4740 6530 +3 4740 6140 6530 +3 6467 5241 4741 +3 7648 352 351 +3 5474 2688 4415 +3 6228 4744 4742 +3 3302 4743 217 +3 4744 5751 4742 +3 4744 4846 5751 +3 4745 1455 4845 +3 4745 6263 1455 +3 1353 5284 6562 +3 5284 4772 6562 +3 5284 5523 4772 +3 1250 4770 4746 +3 1250 4747 4770 +3 4747 4769 4770 +3 4749 4748 5912 +3 4749 4750 4748 +3 3641 2191 3596 +3 4750 7322 4748 +3 3171 4751 4765 +3 4751 4754 4752 +3 4754 817 4752 +3 6308 7801 4753 +3 4754 4756 817 +3 4756 4764 817 +3 4756 4755 4764 +3 4755 5312 4757 +3 5312 6910 5467 +3 6910 4758 5467 +3 6910 615 4758 +3 615 6318 4758 +3 615 4759 6318 +3 4760 7883 2523 +3 4759 8075 6677 +3 4762 6081 4761 +3 4757 4763 4764 +3 817 816 4752 +3 6048 973 7636 +3 4752 886 4765 +3 4765 936 6644 +3 5912 4766 8133 +3 5478 1850 1814 +3 8133 5544 5575 +3 5575 4767 4769 +3 4769 4768 4770 +3 4770 1251 4746 +3 2199 4771 2314 +3 4746 4070 4772 +3 7983 5509 2463 +3 4772 7644 6562 +3 1455 7135 4845 +3 5751 1587 4742 +3 4742 7210 5241 +3 6186 8051 1970 +3 4741 4773 6140 +3 6140 1716 6530 +3 4738 7961 4774 +3 4774 5862 6042 +3 1947 8122 4736 +3 7684 7050 5983 +3 4736 4775 4776 +3 4776 2024 7015 +3 5233 2377 8106 +3 7065 6800 4777 +3 4777 5457 4730 +3 5332 6427 4726 +3 5750 3175 4778 +3 4725 6778 4779 +3 4779 3230 4722 +3 4723 4298 4720 +3 8062 7925 4780 +3 6482 4891 4889 +3 5138 4813 4781 +3 5138 4783 4813 +3 4783 4782 4813 +3 913 967 1005 +3 5267 4815 4782 +3 7574 4784 4816 +3 4784 4785 8195 +3 4786 7735 6537 +3 4788 4787 2426 +3 8045 4379 6560 +3 4679 4821 5910 +3 5545 4789 7607 +3 5845 4727 4790 +3 5389 4795 7558 +3 5389 4794 4795 +3 4791 563 3050 +3 2418 4792 8137 +3 4794 4685 4795 +3 2538 4793 3508 +3 4794 5494 4685 +3 4796 7931 4795 +3 6063 4687 4797 +3 4687 4689 4797 +3 4689 4798 4823 +3 4798 6349 4799 +3 6349 5762 4799 +3 7263 5658 4824 +3 5658 4800 4825 +3 4691 4826 7423 +3 4691 4692 4826 +3 4692 4694 4801 +3 4694 6681 4828 +3 5238 4802 5782 +3 4802 4803 4804 +3 4805 5904 7340 +3 4807 4806 4996 +3 5056 4808 6462 +3 4808 4703 6463 +3 6154 4811 5742 +3 4811 4888 5742 +3 4333 4477 4809 +3 2765 1112 4810 +3 4811 4889 4888 +3 6248 4832 4833 +3 6248 4781 4832 +3 4781 4813 4829 +3 4813 4812 4829 +3 4782 4814 4812 +3 4815 4827 4814 +3 4815 4816 4827 +3 4816 7517 4827 +3 6537 7735 4817 +3 4186 6023 969 +3 7735 5910 4818 +3 4819 7200 7886 +3 5910 6125 4818 +3 4821 7607 4820 +3 7607 6578 4820 +3 7558 7931 4822 +3 4823 6578 4822 +3 4823 4799 6578 +3 4799 5762 4820 +3 5762 6125 4820 +3 5762 4824 6125 +3 7558 4795 7931 +3 4824 4825 4818 +3 8021 2079 2078 +3 4125 2592 2676 +3 4825 7423 4817 +3 4826 4801 7517 +3 4801 4828 4827 +3 1551 6228 6467 +3 4828 4814 4827 +3 433 503 502 +3 4828 5804 4814 +3 5782 4804 4829 +3 7787 4830 4831 +3 4804 4832 4829 +3 4804 7340 4832 +3 7340 5904 4833 +3 4834 6939 5571 +3 8225 4836 4835 +3 4836 4614 4835 +3 4836 6284 4614 +3 3096 3091 3223 +3 4987 4695 8171 +3 5476 4838 5904 +3 6821 5617 3641 +3 4838 4833 5904 +3 330 4837 4355 +3 4838 5081 4833 +3 5081 6248 4833 +3 5081 4839 6248 +3 4839 4840 6249 +3 4840 4985 5139 +3 1495 6153 5599 +3 4985 4841 5139 +3 4985 4842 4841 +3 4842 7494 4841 +3 4842 4844 7494 +3 4844 4843 7494 +3 4846 4745 4845 +3 8170 2959 4843 +3 4981 6161 2845 +3 6720 4848 5570 +3 4847 1511 1565 +3 4848 7551 5570 +3 4848 7895 7551 +3 7895 4849 7551 +3 6920 5990 4849 +3 6920 4850 5990 +3 4850 4978 4851 +3 2560 7559 5876 +3 4977 6071 5282 +3 4977 6286 6071 +3 3061 5358 6915 +3 4975 2261 6285 +3 4975 4852 2261 +3 4852 4853 2261 +3 4973 2170 4853 +3 7508 5371 4854 +3 4856 8048 4855 +3 4857 6917 1989 +3 7643 4862 4858 +3 4862 7271 4858 +3 4860 2865 4859 +3 4862 4861 7271 +3 4861 4863 4864 +3 1141 7310 6221 +3 8203 4866 7630 +3 3360 4865 5268 +3 4966 1588 4866 +3 4966 4867 1588 +3 4964 7820 4868 +3 4964 8007 7820 +3 7713 4869 6883 +3 4869 4960 6884 +3 4959 1253 4870 +3 3967 3923 7162 +3 241 311 4871 +3 4956 1197 1253 +3 4956 4873 1197 +3 4873 4872 6538 +3 1837 1983 1888 +3 4872 7498 4874 +3 2235 4875 3364 +3 4876 7447 6207 +3 4949 4947 938 +3 4947 891 938 +3 4947 4877 891 +3 4877 4880 5295 +3 3777 3878 4878 +3 4880 4879 5295 +3 4880 4943 4879 +3 4943 4881 4879 +3 8228 7547 7890 +3 4943 4941 4881 +3 4942 707 4882 +3 4942 4884 707 +3 4884 4883 707 +3 5191 4887 4883 +3 4885 5471 6922 +3 1735 4886 6953 +3 4937 616 4887 +3 4937 6291 616 +3 4995 5062 6234 +3 5062 5175 6234 +3 5062 4888 5175 +3 4888 4889 6218 +3 7490 4890 6533 +3 5131 3758 5484 +3 4889 4891 5080 +3 4673 4892 5967 +3 4892 4986 5967 +3 4892 6313 4986 +3 6313 4984 4986 +3 2898 4893 7917 +3 4894 7778 4893 +3 4895 8077 7397 +3 8077 8177 4896 +3 3275 682 4897 +3 4899 4898 3152 +3 8177 4900 4896 +3 1520 4901 3391 +3 4903 4902 4980 +3 4903 2887 4902 +3 2887 6044 4902 +3 4904 4979 6044 +3 4904 6410 4979 +3 2678 963 964 +3 6410 6606 4979 +3 2379 8210 6605 +3 8210 7717 6605 +3 2169 4906 4905 +3 6441 5577 4906 +3 6441 7256 5577 +3 7469 7349 4907 +3 7349 4971 4907 +3 1079 1080 6625 +3 5441 4908 4972 +3 5441 4909 4908 +3 4909 4911 4910 +3 6252 1870 5594 +3 4911 7365 4910 +3 1573 4912 6345 +3 4914 1669 4913 +3 2496 4967 7438 +3 1623 6898 6197 +3 6897 4917 4915 +3 4917 4916 4915 +3 4917 4918 4916 +3 64 129 4449 +3 4918 4919 4916 +3 4920 4962 4919 +3 4922 6328 4921 +3 6328 4961 4921 +3 4923 5148 2735 +3 6328 5317 4961 +3 5317 4924 4961 +3 1194 4925 4957 +3 1118 4927 4926 +3 4927 4953 4926 +3 4927 4928 4953 +3 4928 5893 4953 +3 4928 6783 5893 +3 6783 4952 5893 +3 6783 4670 4952 +3 4670 4950 4952 +3 4670 889 4950 +3 889 4929 4950 +3 4239 7798 4930 +3 889 851 4929 +3 851 4946 4929 +3 851 4931 4946 +3 743 6366 5868 +3 743 6320 6366 +3 4933 4932 4944 +3 4933 6172 4932 +3 4935 5442 4934 +3 7950 4936 2479 +3 5442 5667 4934 +3 5667 4938 4937 +3 4938 6291 4937 +3 5191 4884 4934 +3 4940 750 4939 +3 4884 4942 5660 +3 4942 4932 5660 +3 7700 5237 1127 +3 4942 4941 4932 +3 73 74 3428 +3 4941 4943 4944 +3 611 698 5979 +3 4880 4877 5868 +3 2550 2595 4945 +3 4877 5172 5868 +3 4877 4947 5172 +3 4947 4946 5172 +3 4947 4949 4946 +3 6511 3120 4948 +3 4949 4929 4946 +3 4949 4876 4929 +3 4876 4950 4929 +3 4951 4952 4950 +3 7498 5893 4952 +3 6273 6841 2075 +3 4873 4926 4953 +3 7323 6936 4954 +3 4873 4956 4926 +3 4956 4955 4926 +3 6020 6678 1287 +3 4956 4959 4955 +3 4959 4957 4955 +3 4958 1383 3520 +3 4959 7345 4957 +3 7345 4960 4924 +3 4960 4869 4961 +3 4869 4921 4961 +3 4869 7713 4921 +3 7713 4962 4921 +3 8007 4919 4962 +3 8007 4964 4919 +3 2227 2229 4963 +3 4964 4916 4919 +3 4964 5831 4916 +3 5831 4867 4915 +3 4867 4965 4915 +3 4966 6197 4965 +3 4966 8203 6197 +3 7631 7438 4967 +3 1133 4968 6213 +3 4863 4913 7438 +3 4863 4861 4913 +3 4862 7643 7365 +3 7643 4910 7365 +3 6927 7223 3938 +3 7643 4857 4910 +3 4857 4908 4910 +3 3349 4969 4970 +3 4856 4971 4972 +3 4856 7991 4971 +3 66 131 129 +3 7991 4907 4971 +3 7991 5371 4907 +3 5371 7709 4907 +3 6737 1764 7006 +3 4973 4906 5577 +3 4973 4852 4906 +3 4852 4905 4906 +3 4852 4975 4905 +3 1846 4974 6065 +3 4975 7717 4905 +3 1064 7497 1103 +3 4975 6286 7717 +3 4779 6778 3230 +3 7165 1375 4976 +3 6286 6605 7717 +3 6286 4977 6605 +3 4977 4978 6606 +3 4978 4979 6606 +3 4850 6044 4979 +3 4848 4900 4980 +3 4848 6720 4900 +3 6161 4981 7397 +3 5434 4982 4452 +3 7118 8170 4893 +3 4844 4983 7917 +3 7423 4826 7047 +3 4842 4984 4983 +3 4842 4985 4984 +3 4985 4840 4986 +3 4840 5967 4986 +3 4839 5081 8205 +3 4838 5476 6218 +3 5476 4987 5175 +3 4987 6234 5175 +3 4987 6283 6234 +3 6016 432 4988 +3 4836 4989 7754 +3 4836 8225 4989 +3 8225 4834 4992 +3 4834 4990 4993 +3 4990 4991 4993 +3 8228 7890 4991 +3 4366 4992 4993 +3 4366 4618 4992 +3 1942 7275 7687 +3 4618 4994 4989 +3 5412 7627 7754 +3 4996 4997 4995 +3 4806 5055 4997 +3 5301 1916 7726 +3 591 6633 4998 +3 1120 1121 1518 +3 6633 4999 4998 +3 639 638 4999 +3 639 5000 638 +3 5001 5002 667 +3 5003 5005 5002 +3 5004 4684 3509 +3 2873 4539 2990 +3 5381 2069 5005 +3 888 887 5006 +3 888 5007 887 +3 5007 5008 7304 +3 5008 5011 5009 +3 5011 8054 5009 +3 5011 5010 8054 +3 5010 4494 5012 +3 4494 1507 5012 +3 7059 3964 8008 +3 4494 5013 1507 +3 1519 1520 3391 +3 5013 5014 5015 +3 5014 6020 5016 +3 1252 5017 1286 +3 5017 7212 5018 +3 4049 5019 5785 +3 5021 7124 5019 +3 5021 5020 7124 +3 3803 5022 3869 +3 2345 6031 5699 +3 2345 5023 6031 +3 2218 2264 2262 +3 1975 5212 7776 +3 5023 1807 5024 +3 7123 4285 7245 +3 1807 5025 5024 +3 1806 1804 5025 +3 1806 5027 1804 +3 5027 5026 1804 +3 1660 5420 4082 +3 5029 1988 5028 +3 1988 1948 5028 +3 5188 4917 1456 +3 1433 1479 1432 +3 5164 5030 1948 +3 5164 5031 5030 +3 5031 8142 2420 +3 6709 5032 2114 +3 6709 5033 5032 +3 2772 5034 4127 +3 2326 6913 5730 +3 2326 5035 6913 +3 5035 8163 6913 +3 7599 5037 8140 +3 5037 5039 5036 +3 5039 2471 5036 +3 7826 5038 7333 +3 5039 2560 2471 +3 2560 2517 2471 +3 2560 5876 2517 +3 5040 1635 1596 +3 2602 5340 5041 +3 5042 7260 2642 +3 5043 7730 1259 +3 2842 5633 8165 +3 2958 6777 5633 +3 5045 2043 5044 +3 5046 6472 5479 +3 761 5124 762 +3 643 4064 712 +3 5047 5700 5585 +3 2958 3007 6777 +3 2012 6005 6880 +3 3007 5049 5048 +3 5049 5051 5048 +3 7428 5050 5051 +3 7428 5052 5050 +3 5052 4441 5050 +3 2510 5053 5054 +3 5055 6462 4780 +3 4806 5056 6462 +3 4807 4698 5056 +3 4807 5058 4698 +3 5058 5655 4698 +3 4450 5851 5545 +3 5057 85 6895 +3 5058 4619 5655 +3 4619 6741 5655 +3 4619 5610 6741 +3 4251 5059 5060 +3 3623 5061 3575 +3 4251 394 5059 +3 394 336 5059 +3 5742 5062 4997 +3 5742 4888 5062 +3 5062 4995 4997 +3 3065 3141 7526 +3 632 665 7142 +3 5063 3867 3881 +3 6963 6107 2463 +3 5014 1195 6678 +3 7371 2364 2363 +3 4248 4615 5064 +3 5065 6024 804 +3 5066 293 4428 +3 6716 6688 3292 +3 7378 6640 5067 +3 2859 4461 4568 +3 3312 7739 6412 +3 86 514 6649 +3 5371 7508 7709 +3 3457 2237 2187 +3 2614 5068 7955 +3 2358 2408 2406 +3 1721 6531 5255 +3 2248 5561 5069 +3 7398 5070 3162 +3 5071 4045 4044 +3 1421 7190 3282 +3 5072 3524 7725 +3 2250 5561 2248 +3 904 5073 901 +3 5578 5074 5075 +3 3742 3744 3723 +3 5076 883 932 +3 4723 2956 4298 +3 1419 3246 3561 +3 1296 1332 5077 +3 2336 6484 2438 +3 1932 2017 2018 +3 2797 2898 5078 +3 2495 6948 7565 +3 205 243 5079 +3 5721 5069 2411 +3 5035 2424 7599 +3 6281 1208 1207 +3 5081 5080 8205 +3 4289 2277 5895 +3 428 6183 3500 +3 1618 5082 6198 +3 5084 4404 5083 +3 2495 5085 6948 +3 3539 5086 7155 +3 1021 1022 7078 +3 5088 2019 5087 +3 2405 2454 2453 +3 2679 2681 2789 +3 5089 2692 2794 +3 5091 4583 5090 +3 5658 4825 4824 +3 5108 508 5426 +3 2132 2182 6300 +3 814 5465 5092 +3 2107 6526 6483 +3 4312 5093 7775 +3 1479 6262 5094 +3 688 770 5095 +3 2429 2431 2480 +3 4033 7592 4101 +3 471 473 5096 +3 329 5097 437 +3 5089 2794 5341 +3 6190 2405 5098 +3 3797 5972 5099 +3 5101 5944 5100 +3 5102 5636 4698 +3 4654 4438 2954 +3 5103 5966 5608 +3 8214 2496 5104 +3 5105 1773 1682 +3 1712 5516 5106 +3 5108 5107 4232 +3 2102 7169 2153 +3 4450 5545 4679 +3 4432 4433 5109 +3 6498 3599 3598 +3 5111 5162 5110 +3 2141 5112 3549 +3 5113 3660 4228 +3 1589 1590 4706 +3 1866 6981 7906 +3 5240 5114 1847 +3 2002 5182 923 +3 1932 1979 2017 +3 2773 4129 5034 +3 7544 2516 5115 +3 5653 4670 937 +3 754 5116 7901 +3 648 5414 4532 +3 7894 7199 3019 +3 7273 5913 4282 +3 6145 7385 3222 +3 1675 5117 1721 +3 5118 7867 4144 +3 5920 5119 7017 +3 6112 5120 5539 +3 6675 2489 5121 +3 701 7077 4491 +3 7462 5380 5122 +3 6586 4520 7591 +3 4516 5123 4541 +3 5809 5124 6756 +3 2698 5125 5126 +3 5127 3071 3134 +3 360 4219 359 +3 2300 2350 2348 +3 4349 5128 4348 +3 2874 5439 5129 +3 5130 3840 3839 +3 5131 6050 3758 +3 1006 6259 1053 +3 5132 4018 4020 +3 33 90 87 +3 5133 1070 1156 +3 3637 1964 3639 +3 1690 5134 1689 +3 7927 1322 5135 +3 5150 5734 4591 +3 1667 7679 7220 +3 1923 2010 5195 +3 5136 7501 2103 +3 5137 7610 1628 +3 1876 1927 1926 +3 5139 5138 6249 +3 5140 3122 3148 +3 5141 7753 3609 +3 6047 464 5142 +3 4205 2356 2404 +3 5143 3986 3895 +3 5764 4542 5144 +3 2649 7292 2800 +3 5146 3420 5145 +3 8109 5147 5148 +3 4442 5149 1011 +3 5150 4592 5734 +3 6636 3041 5151 +3 1570 7666 5152 +3 3238 5729 5153 +3 1549 1585 5154 +3 4409 5186 5155 +3 2579 6892 6287 +3 1624 7933 6539 +3 5489 629 5844 +3 7301 6787 3916 +3 5157 5156 7235 +3 6573 7664 3511 +3 8193 5385 5937 +3 3899 5158 2568 +3 5159 1090 1139 +3 5679 5441 4972 +3 2817 2819 2938 +3 4072 8097 6302 +3 5160 2491 2399 +3 2549 3702 3767 +3 6017 5161 3056 +3 341 340 5162 +3 3806 2318 7502 +3 5164 5163 4078 +3 2721 3284 5357 +3 3842 5165 411 +3 5166 6545 1633 +3 5167 6669 3201 +3 5168 2116 2219 +3 7826 3857 5038 +3 5768 344 5169 +3 8189 5177 5170 +3 5095 811 7013 +3 6771 3293 3291 +3 7923 5171 7750 +3 2046 2134 3341 +3 4931 779 5172 +3 5174 5173 6092 +3 5476 5175 6218 +3 5176 5213 3838 +3 18 7552 3490 +3 6931 6059 3295 +3 8043 5466 5177 +3 6386 5178 5526 +3 5132 195 4018 +3 4689 4823 4797 +3 5179 8069 2508 +3 5180 5183 6469 +3 5182 866 5181 +3 1837 1838 1983 +3 6760 5532 1749 +3 1768 7972 5369 +3 6443 1433 7629 +3 53 514 86 +3 5728 953 998 +3 2112 2167 2684 +3 7099 6085 6960 +3 5183 872 3781 +3 3605 6247 4269 +3 4494 1157 5013 +3 1252 1286 1193 +3 4331 4333 4809 +3 4290 5184 6481 +3 1684 5185 7132 +3 4782 4815 4814 +3 4642 1987 5186 +3 6805 4128 1438 +3 6499 3409 5187 +3 5188 4918 4917 +3 5189 2088 5432 +3 6319 2653 5789 +3 5923 2578 2579 +3 2985 2146 3432 +3 4195 4194 1389 +3 5190 7187 3373 +3 5191 4937 4887 +3 2113 8126 8150 +3 7703 627 5192 +3 760 3436 7678 +3 5194 5193 6077 +3 6632 1923 5195 +3 5197 5196 4489 +3 2476 5198 3576 +3 6581 1258 5199 +3 5890 6401 2010 +3 4537 508 5108 +3 5200 7054 6454 +3 6292 3811 4753 +3 3861 3789 5959 +3 5988 2138 6842 +3 2270 5714 3443 +3 4246 3399 7581 +3 5697 989 5291 +3 7008 3904 3902 +3 655 5488 6520 +3 5201 8118 7810 +3 3685 93 122 +3 6400 5202 1620 +3 8119 4939 785 +3 1404 5203 875 +3 7145 5204 5205 +3 3355 3400 5206 +3 8113 6477 4406 +3 4463 6460 4466 +3 7046 2114 5207 +3 8005 5208 4287 +3 5500 3326 1714 +3 5209 5310 6270 +3 7861 4055 5210 +3 913 1005 1006 +3 7191 5211 4274 +3 5212 6431 7776 +3 5213 747 7139 +3 4224 5214 6362 +3 5664 5215 5216 +3 5217 5166 1559 +3 6382 5336 5218 +3 5075 7806 5973 +3 5219 6209 1724 +3 5890 5220 6401 +3 2196 2199 2251 +3 1920 3514 5221 +3 1833 1584 4015 +3 2484 2436 5222 +3 2729 3410 2089 +3 4155 5142 4154 +3 5223 3248 1732 +3 3789 5962 5959 +3 436 5224 5225 +3 1427 1426 3444 +3 4873 6538 1197 +3 945 5226 993 +3 5195 2055 6830 +3 3316 5227 2232 +3 3119 2636 7359 +3 1056 1058 5228 +3 683 1367 1366 +3 1958 5229 3323 +3 5230 7974 7004 +3 5232 5231 5413 +3 4733 5252 5233 +3 245 559 318 +3 6795 972 1015 +3 911 835 859 +3 539 4017 6956 +3 5234 6822 3594 +3 5235 7071 459 +3 1338 1337 2283 +3 2608 7426 8079 +3 248 5458 172 +3 4330 5362 5937 +3 1978 2062 7186 +3 2374 2689 5236 +3 6969 4783 5138 +3 1516 1170 6985 +3 2567 2609 5506 +3 5237 1373 6704 +3 869 926 6553 +3 2625 2755 4359 +3 568 523 249 +3 1998 2083 2032 +3 5701 5238 6681 +3 7114 1293 1362 +3 3796 5491 3855 +3 273 5828 299 +3 5584 6223 6508 +3 3063 3025 3024 +3 631 690 5239 +3 1760 5240 1811 +3 6228 4742 5241 +3 4342 5242 3672 +3 4062 3788 5243 +3 7519 5244 5204 +3 2723 5245 2720 +3 8156 3235 5246 +3 3923 5247 3868 +3 5248 3835 3834 +3 5250 5249 2659 +3 2390 5251 2485 +3 5378 2325 2323 +3 7992 4283 4167 +3 5233 5252 2377 +3 5253 3282 3245 +3 7126 6760 5254 +3 1721 5255 5541 +3 4053 4052 4051 +3 2441 6982 2529 +3 1059 1102 1101 +3 5256 7058 4067 +3 5257 5595 236 +3 3231 6617 5258 +3 2010 6401 7567 +3 5260 25 5259 +3 7316 5504 5851 +3 592 640 5261 +3 3427 211 6057 +3 1080 1161 6625 +3 2928 2926 2925 +3 3451 5262 5263 +3 2987 5264 7206 +3 5265 3739 7922 +3 793 5266 1812 +3 5267 7574 4815 +3 3360 5268 7401 +3 3964 3920 3919 +3 2881 5269 7555 +3 306 308 310 +3 3758 3709 5484 +3 3460 2493 5270 +3 5003 780 6655 +3 492 494 3432 +3 1786 8198 5725 +3 5271 3292 6688 +3 2955 2894 4722 +3 3326 5702 3018 +3 1773 6679 3248 +3 5806 5272 6106 +3 2976 6167 505 +3 2828 5087 2019 +3 4092 2370 4547 +3 7489 1341 5273 +3 5274 5979 7298 +3 5275 4224 6362 +3 898 5276 3920 +3 7025 7893 4474 +3 5824 5277 5278 +3 696 5279 6027 +3 7154 4575 6900 +3 7014 6339 6177 +3 5787 3669 3668 +3 1571 1534 5280 +3 5767 5843 3160 +3 5931 842 5281 +3 4978 5282 4851 +3 5283 5599 6547 +3 1019 1057 7702 +3 4273 7276 2164 +3 5963 5523 5284 +3 6546 5285 3568 +3 1633 5286 5627 +3 5287 1861 1918 +3 6216 5288 1234 +3 4767 5016 1193 +3 1569 5289 1568 +3 5258 6616 1561 +3 7667 1672 6497 +3 5170 7579 1896 +3 2231 5290 1625 +3 306 310 6911 +3 3462 7237 6666 +3 2605 5911 2647 +3 6237 5697 5291 +3 4476 5855 5292 +3 5293 2784 1152 +3 7676 2448 5786 +3 1212 1265 3280 +3 398 338 4664 +3 2485 4340 7761 +3 6827 4597 4595 +3 5394 6250 2240 +3 5294 6375 7997 +3 1072 1116 7500 +3 5295 819 6642 +3 5296 98 3616 +3 8160 1190 4074 +3 1109 6055 2277 +3 1465 2004 6748 +3 5769 1605 1650 +3 633 5297 700 +3 716 7219 4522 +3 7733 6091 3040 +3 7977 593 7473 +3 1135 5298 6246 +3 2876 5352 7794 +3 2781 4143 2832 +3 1872 5299 3453 +3 4395 1490 5322 +3 2990 5401 5113 +3 1580 6567 4129 +3 7239 5300 7093 +3 1279 3746 3748 +3 5301 5287 1916 +3 1764 6638 6850 +3 7059 693 3964 +3 1867 2289 5302 +3 6834 5275 6362 +3 5304 3579 5303 +3 4391 987 5305 +3 3491 5306 3488 +3 5307 6399 7014 +3 7894 5308 5309 +3 1110 4289 5310 +3 5312 3542 5311 +3 6723 3448 5313 +3 2898 4894 4893 +3 8160 6260 1190 +3 5995 7249 1536 +3 5344 2465 5314 +3 269 3676 3689 +3 4703 5315 5316 +3 5317 1194 4924 +3 6154 4780 7925 +3 4205 2404 4206 +3 5318 5861 4803 +3 5320 7422 5319 +3 7128 5779 5321 +3 4630 5878 5322 +3 5519 5323 3185 +3 6905 6530 4738 +3 7118 4893 7778 +3 1028 5324 930 +3 6447 6295 2775 +3 2068 5325 5326 +3 4321 6702 4490 +3 2875 2876 7407 +3 5643 5303 1229 +3 2526 2568 5327 +3 5328 7087 2481 +3 5329 2616 7987 +3 5330 2727 6887 +3 5293 5331 7594 +3 4730 6436 5332 +3 5976 2471 2517 +3 7140 4980 4900 +3 5502 4416 2373 +3 7207 3719 3718 +3 3011 5434 4308 +3 7987 8130 3877 +3 5853 5333 1733 +3 2461 5334 5335 +3 3286 2084 6039 +3 296 5336 407 +3 2739 6779 2925 +3 3086 6053 5337 +3 5338 5885 2129 +3 247 5339 568 +3 7791 2642 5340 +3 5341 2841 2840 +3 5342 6555 4281 +3 1272 6574 5343 +3 8069 5344 2508 +3 5346 5345 3277 +3 3821 7323 4954 +3 795 834 858 +3 5023 5347 1807 +3 7088 728 5348 +3 6419 5691 7390 +3 5349 5584 7335 +3 1251 5018 4070 +3 871 6922 5380 +3 1221 796 1219 +3 6422 5709 896 +3 3778 6898 1623 +3 1827 5350 1778 +3 437 4578 5351 +3 5352 2933 7794 +3 6818 6819 5353 +3 1121 5354 1199 +3 5269 2940 6732 +3 2514 4418 6196 +3 4677 4785 4784 +3 7025 4559 7893 +3 5355 2538 4220 +3 5356 1872 3453 +3 1773 5357 6679 +3 5358 6088 3021 +3 4291 5359 5265 +3 5360 1895 5186 +3 5361 606 628 +3 5363 5362 2136 +3 2941 6073 2998 +3 5365 597 5364 +3 1341 3581 1384 +3 2558 4648 5366 +3 2863 3296 2975 +3 5368 5367 669 +3 2052 2054 2145 +3 5569 3167 5369 +3 2359 5370 2457 +3 5371 2074 4854 +3 5439 5384 6394 +3 3995 6738 3998 +3 7948 3334 2660 +3 1355 4918 5188 +3 2710 2709 2708 +3 5865 867 865 +3 4029 4005 6615 +3 5613 3076 3074 +3 1844 1845 1950 +3 1484 4281 1583 +3 1991 5372 5373 +3 7097 4933 6320 +3 7915 2484 2434 +3 2824 3696 6824 +3 3462 7021 2663 +3 5374 134 3486 +3 5375 6589 5964 +3 3140 3141 5376 +3 6542 5820 3318 +3 3925 5377 5063 +3 2216 2260 5378 +3 5379 7985 2695 +3 5974 5012 1507 +3 1339 1769 3351 +3 5120 6111 5161 +3 6011 873 5380 +3 5381 818 7888 +3 672 5382 4940 +3 6716 2529 6776 +3 1224 6199 1222 +3 5383 3891 3890 +3 2005 2085 2046 +3 7486 2303 1577 +3 5384 2814 2875 +3 6644 1994 7322 +3 2007 6132 5385 +3 6942 3427 252 +3 5488 5386 1217 +3 1383 5387 3534 +3 4663 2528 5811 +3 2846 2960 6992 +3 5388 3805 3902 +3 5300 5389 7093 +3 33 88 90 +3 3057 3149 3158 +3 2597 2637 2635 +3 5391 1673 5390 +3 6068 2830 5392 +3 3459 6820 4793 +3 784 3330 824 +3 6460 4463 2611 +3 2813 4211 2745 +3 2957 6313 5393 +3 5241 7210 6515 +3 2150 7659 6945 +3 4667 4666 338 +3 5395 6790 5394 +3 3241 5396 5763 +3 3268 375 6793 +3 5314 2510 2509 +3 3846 7973 4581 +3 7631 4863 7438 +3 1914 2003 8197 +3 507 6145 7109 +3 1521 1523 3396 +3 5397 4534 1657 +3 6369 2930 5398 +3 1671 1760 5399 +3 5297 4385 5400 +3 5598 5685 7144 +3 5401 2932 2991 +3 459 193 5402 +3 6679 1859 3249 +3 5403 5409 2698 +3 3037 2486 6456 +3 5404 3608 5589 +3 7267 1391 1476 +3 4734 5405 5466 +3 1018 5897 1096 +3 5872 8143 5406 +3 7737 2756 2882 +3 5408 4124 5407 +3 1555 6205 2497 +3 5898 2240 5409 +3 5410 3827 5573 +3 1284 4288 4286 +3 8016 522 4029 +3 3471 4988 5411 +3 7705 3093 3111 +3 4994 6166 5412 +3 7452 2515 5413 +3 1459 5941 1458 +3 4533 6580 5414 +3 5388 3902 3904 +3 5052 6482 7168 +3 4175 4176 5741 +3 6682 4152 6705 +3 7056 4479 4477 +3 4382 3785 5664 +3 1722 1817 5415 +3 6342 5416 1812 +3 7498 1029 4874 +3 8078 2759 4114 +3 6599 5417 5418 +3 5234 6667 7941 +3 5419 6253 7067 +3 1203 3447 4329 +3 5420 1705 6634 +3 1313 5421 1397 +3 2279 2278 3316 +3 2930 2987 7206 +3 5422 458 111 +3 5424 7566 5423 +3 6344 5425 7314 +3 5107 5426 4571 +3 5037 5427 7467 +3 7533 1290 5428 +3 2648 5429 2704 +3 7358 909 1137 +3 5430 7857 6319 +3 5387 1301 5431 +3 3363 5189 5432 +3 4825 4817 4818 +3 5372 7318 5373 +3 5433 7383 3517 +3 8187 4982 5434 +3 5435 6809 1418 +3 5436 6794 5093 +3 5437 2828 6938 +3 7929 3054 5438 +3 8039 2747 5439 +3 7003 6113 4536 +3 4371 571 4370 +3 7639 2734 5440 +3 3332 5441 6652 +3 5696 7287 989 +3 7119 5442 6343 +3 5443 3960 5644 +3 3886 6551 3858 +3 5079 312 311 +3 2645 6054 5556 +3 3787 8184 3786 +3 5444 5853 3283 +3 3776 5445 3774 +3 7629 1432 5446 +3 2494 5447 6991 +3 2548 3701 3699 +3 5448 2614 7955 +3 5430 6319 7092 +3 3790 5449 4675 +3 6753 1392 5450 +3 946 7052 4516 +3 7744 7576 5451 +3 5452 3879 2831 +3 5453 7193 68 +3 5454 463 5503 +3 1818 8013 1852 +3 7483 3737 2880 +3 5455 622 674 +3 574 5456 530 +3 681 359 425 +3 5457 5041 5340 +3 2973 3221 2916 +3 5458 173 172 +3 4660 5459 7000 +3 1008 5460 1093 +3 1403 4846 8071 +3 1982 5461 5581 +3 305 420 419 +3 5606 38 5462 +3 1920 5221 3513 +3 3959 3843 3823 +3 5746 1539 7655 +3 3647 2745 4212 +3 3071 5463 6924 +3 6172 5660 4932 +3 5465 5464 847 +3 1673 1718 5390 +3 6337 7056 2128 +3 2977 3296 3294 +3 3504 3573 914 +3 7714 6126 5666 +3 7255 2963 1696 +3 5170 5466 7579 +3 5629 2623 2622 +3 5312 5467 4757 +3 990 1041 6070 +3 1249 5513 7430 +3 1906 1907 1996 +3 7809 1097 5468 +3 5469 7465 4356 +3 2969 5470 7869 +3 1697 3732 5471 +3 5473 6619 5472 +3 4445 1271 1270 +3 2215 5474 5703 +3 1614 1752 5475 +3 4987 5476 4695 +3 6601 3671 5477 +3 6122 1762 5478 +3 729 767 6725 +3 4751 3171 3170 +3 1141 5479 7310 +3 5034 4129 4128 +3 5308 3158 5309 +3 6358 5480 6167 +3 374 3267 3234 +3 2426 7353 2522 +3 5482 17 5481 +3 375 3268 3269 +3 1832 6185 1882 +3 1081 1080 1079 +3 4117 4118 5464 +3 904 5483 5073 +3 2882 2940 5269 +3 5377 3864 3867 +3 1886 1887 5484 +3 7691 7994 5485 +3 6766 5749 7718 +3 5773 2185 5486 +3 5487 7842 5242 +3 6520 5488 5489 +3 5490 6348 703 +3 7222 3855 5491 +3 5512 3011 5492 +3 7038 4512 6389 +3 6830 2055 2096 +3 7021 6604 2663 +3 5752 1173 6246 +3 6351 5493 1201 +3 4681 7981 5494 +3 5495 5303 5643 +3 5727 6856 5496 +3 1164 5396 3278 +3 5498 608 5497 +3 7625 4293 5499 +3 4300 4301 4674 +3 5290 7442 1670 +3 4403 5500 6198 +3 2210 5501 5502 +3 228 2351 5110 +3 3774 2999 3812 +3 7688 3008 4302 +3 5503 4174 3893 +3 7433 5001 667 +3 4840 4839 5967 +3 5504 5492 7239 +3 5505 5909 5298 +3 3418 6810 2867 +3 5222 4468 4735 +3 2566 2567 5506 +3 5508 3475 5507 +3 6804 8098 1740 +3 5768 5169 6972 +3 3940 3901 3900 +3 3038 1061 1060 +3 1323 1324 5900 +3 694 695 3973 +3 2072 2112 2682 +3 5127 3133 5509 +3 5525 5510 7150 +3 6979 1262 4507 +3 1485 4016 5511 +3 7752 2966 5512 +3 5513 7900 7430 +3 5399 1811 1809 +3 5514 5506 2607 +3 4863 7631 1758 +3 188 4668 534 +3 3055 7766 6428 +3 5515 6753 1345 +3 2458 2502 2501 +3 5516 4276 2983 +3 3811 6292 3810 +3 1594 3032 5517 +3 5075 1492 7806 +3 2268 7573 7911 +3 4157 2615 4156 +3 6331 2824 5518 +3 5275 6834 244 +3 1985 4412 1986 +3 6865 5323 5519 +3 5520 450 7560 +3 5521 1256 1288 +3 5133 1156 7929 +3 1408 5522 6341 +3 5523 4746 4772 +3 3476 42 5587 +3 2960 2901 5524 +3 4672 4891 6482 +3 7402 4044 4045 +3 5526 6651 5525 +3 4959 4956 1253 +3 3145 5527 4115 +3 5724 7892 6064 +3 599 598 596 +3 3319 2919 4860 +3 5528 4518 829 +3 5529 6354 2731 +3 5530 6191 3907 +3 5531 7523 2005 +3 1921 3514 1920 +3 5532 5485 1788 +3 6954 4292 5533 +3 1471 3543 7328 +3 3241 5763 5534 +3 3082 3084 3042 +3 3401 4520 7758 +3 6039 6582 5535 +3 6804 5536 8098 +3 5878 5537 3856 +3 5538 4053 6838 +3 3201 6669 5539 +3 1234 5515 5540 +3 6162 2108 1981 +3 20 21 43 +3 1311 1350 3747 +3 5541 1815 1850 +3 5543 5542 5123 +3 2614 3178 5068 +3 4766 5015 5544 +3 4679 5545 4821 +3 1869 1962 5546 +3 3369 5547 7540 +3 5548 4912 1573 +3 683 6896 1367 +3 5549 435 7491 +3 4918 4920 4919 +3 8053 3519 5550 +3 5551 836 6879 +3 2602 8173 7791 +3 4719 5552 5553 +3 2082 6816 5554 +3 5555 2886 4102 +3 4866 1624 6539 +3 8225 4992 4989 +3 5556 2852 6710 +3 685 5557 8125 +3 1264 1330 1331 +3 7812 4389 2511 +3 5559 5558 5437 +3 946 4516 4541 +3 960 961 3387 +3 7889 1780 8219 +3 1787 1832 8198 +3 768 5560 5931 +3 6923 1768 3167 +3 5561 7371 5069 +3 2096 3060 6219 +3 2674 2757 2821 +3 3834 3835 6501 +3 4013 5562 7215 +3 2456 2458 2545 +3 5474 2212 5703 +3 6293 2857 2855 +3 1492 1552 7806 +3 3210 3169 5563 +3 5564 5735 8090 +3 608 8153 5497 +3 37 65 64 +3 3409 2089 3410 +3 1701 5565 1792 +3 5566 6438 3892 +3 5567 2758 6093 +3 5559 5568 5558 +3 2536 7830 5143 +3 2653 7476 2710 +3 902 6875 5309 +3 6752 1400 2771 +3 1978 3708 2062 +3 3833 5469 4356 +3 232 5776 273 +3 1231 1232 4819 +3 3969 1188 3971 +3 5569 6676 3070 +3 5570 7045 2798 +3 3638 5687 3588 +3 4990 4834 5571 +3 5572 4278 1662 +3 5619 5410 5573 +3 4384 2213 4386 +3 5306 5574 5508 +3 8191 8133 5575 +3 7037 5576 2703 +3 7508 5577 7709 +3 7713 6883 5578 +3 6454 4446 7417 +3 6734 6499 5187 +3 1703 5579 3714 +3 4398 3124 1866 +3 3525 7815 5593 +3 5479 1175 1233 +3 5581 1939 5580 +3 4196 5582 3225 +3 355 421 353 +3 5583 3600 2403 +3 2589 2672 5584 +3 7406 5842 3913 +3 3631 7257 7974 +3 4504 6420 1417 +3 3212 3366 2038 +3 6657 8210 2379 +3 5022 5047 5585 +3 5330 6887 5586 +3 5588 3476 5587 +3 6105 3238 3237 +3 5589 7361 3564 +3 7906 6981 1033 +3 8120 7913 7797 +3 1793 1836 1885 +3 5591 5590 7757 +3 3704 3761 7696 +3 685 5592 5593 +3 1181 1238 1180 +3 5594 3404 6252 +3 3260 6688 6971 +3 5595 237 521 +3 4600 4602 4689 +3 6987 655 6520 +3 1608 1609 5596 +3 8172 4894 2797 +3 7806 1552 5597 +3 1077 1160 5354 +3 6446 5598 8174 +3 6547 5599 5600 +3 5601 5830 4420 +3 5949 5986 5602 +3 6765 5603 2694 +3 5604 7214 496 +3 7843 6098 2943 +3 1788 5485 5605 +3 5606 0 468 +3 4837 5607 7297 +3 6787 5608 3916 +3 4604 5658 7263 +3 974 7702 7796 +3 5609 7927 6618 +3 1993 8021 2078 +3 5610 5060 6741 +3 5432 2295 5611 +3 7449 5565 1701 +3 2931 3164 4213 +3 7540 2660 6934 +3 4231 5612 6733 +3 5613 7290 3130 +3 5614 692 7113 +3 5295 6642 891 +3 5615 2733 7790 +3 6857 5616 4360 +3 5617 3642 3597 +3 2785 2838 5618 +3 959 960 7790 +3 646 4523 647 +3 1203 4329 5747 +3 3960 5619 3824 +3 4137 6938 5580 +3 3554 5620 3509 +3 7064 3925 5063 +3 5621 3722 3745 +3 6262 7150 5094 +3 4978 4977 5282 +3 6626 5622 1261 +3 570 3483 210 +3 4220 3556 5623 +3 4099 1639 3399 +3 3366 2179 3132 +3 5598 7144 5624 +3 5625 1082 1162 +3 3308 5626 5627 +3 1237 7600 5628 +3 2580 5629 2578 +3 6712 2713 2715 +3 7107 5630 6423 +3 2539 5631 2621 +3 6041 5632 6346 +3 7859 8165 5633 +3 6623 5634 6055 +3 5635 6876 4660 +3 610 697 7010 +3 337 7319 5059 +3 1770 6966 4286 +3 725 656 2202 +3 7743 1549 1486 +3 4708 5636 4709 +3 904 951 947 +3 5637 2908 2905 +3 799 800 835 +3 377 378 4353 +3 5638 7240 1063 +3 1957 5639 1956 +3 7323 3832 5640 +3 5642 2100 5641 +3 5495 5643 3522 +3 2602 2643 8173 +3 8064 4933 7097 +3 522 5644 4004 +3 2651 3041 2706 +3 218 4201 5645 +3 4508 5646 2247 +3 1803 1802 5647 +3 4500 2320 2257 +3 5648 2626 2584 +3 4939 825 5649 +3 5651 3194 5650 +3 4510 5652 4507 +3 5558 2208 6322 +3 1200 7533 5428 +3 5965 5540 1344 +3 3782 8196 3880 +3 7617 889 5653 +3 2329 5654 6874 +3 7953 1618 5757 +3 6926 5102 5655 +3 250 5656 5657 +3 4690 4800 5658 +3 4642 1895 1896 +3 5659 3951 3999 +3 4884 5660 4934 +3 2302 2355 5781 +3 6603 6705 5661 +3 6454 4305 4446 +3 2482 3899 2568 +3 5093 5662 3023 +3 7424 6607 4111 +3 5663 3955 7818 +3 8012 6598 4481 +3 239 279 303 +3 5664 3740 3726 +3 6082 1742 5665 +3 1309 7714 5666 +3 7486 7325 2303 +3 5667 5191 4934 +3 650 7294 3186 +3 6489 4721 5668 +3 5669 5661 2948 +3 5594 1870 7044 +3 2470 2515 7452 +3 5164 4078 5031 +3 5470 5670 5671 +3 5672 4743 742 +3 5629 5673 6892 +3 5689 6881 5642 +3 5674 3815 3841 +3 5291 5675 1030 +3 7662 5865 6829 +3 3080 3040 2527 +3 924 5181 1022 +3 6355 1628 1627 +3 4941 4882 4881 +3 866 981 5181 +3 5263 5299 5676 +3 2056 7866 6517 +3 3409 7253 3408 +3 7792 7151 4301 +3 1227 8183 5677 +3 4127 5034 5678 +3 6652 5441 5679 +3 5680 4104 6869 +3 5681 2064 2161 +3 2630 8157 3700 +3 6284 4612 4614 +3 3649 5682 7361 +3 5684 7313 5683 +3 5685 4235 4357 +3 7661 181 217 +3 2813 2874 4211 +3 6794 5662 5093 +3 4487 5197 4486 +3 925 869 8224 +3 5166 5444 6868 +3 7349 5679 4971 +3 7413 4364 7827 +3 5954 6148 6958 +3 1688 1776 7348 +3 1699 1748 1785 +3 2044 2046 3341 +3 5516 5100 5686 +3 5687 3590 3588 +3 29 82 5688 +3 4330 7781 2186 +3 4502 5689 5690 +3 5692 1134 5691 +3 5693 6099 6980 +3 5694 3987 3985 +3 1301 3533 5431 +3 5382 5695 749 +3 3261 5696 5697 +3 8067 5698 1225 +3 23 5259 77 +3 1622 5699 5700 +3 6787 7301 7146 +3 942 1036 6819 +3 5701 4610 5238 +3 4641 3018 5702 +3 2215 5703 2110 +3 6693 3741 5704 +3 7322 7300 4748 +3 5033 7707 6657 +3 426 427 4217 +3 5988 3510 2138 +3 5705 7623 5549 +3 3229 6947 560 +3 5706 5994 1070 +3 5707 1460 3271 +3 4665 4664 400 +3 8088 5826 5708 +3 4862 7365 7785 +3 6312 7173 2604 +3 442 4238 4236 +3 2145 5395 5394 +3 5709 6792 7224 +3 3242 5710 5711 +3 2117 2173 2222 +3 4633 8022 5712 +3 7655 1574 5713 +3 2269 2385 5714 +3 5715 4914 1757 +3 4489 4490 6029 +3 5717 5716 6028 +3 338 5718 339 +3 1808 4909 3332 +3 916 4187 5719 +3 6965 684 5720 +3 2248 5069 5721 +3 5723 8003 5722 +3 1376 1377 1464 +3 2832 4143 2371 +3 1422 7330 3231 +3 5725 7892 5724 +3 367 5726 5657 +3 199 5727 279 +3 3276 5728 5729 +3 5033 2326 5730 +3 6976 5824 5731 +3 211 6929 3375 +3 5173 965 5732 +3 229 6570 469 +3 7279 1351 7861 +3 2235 5733 7408 +3 4354 4591 5734 +3 5735 595 594 +3 5736 1910 1851 +3 7416 5737 7533 +3 2103 2156 2155 +3 5738 5841 3317 +3 4386 931 5739 +3 3414 5440 6089 +3 5077 5740 8004 +3 487 4230 5741 +3 3407 1919 6210 +3 2338 6264 3215 +3 2023 7015 2113 +3 6154 5742 5055 +3 5743 4119 928 +3 7957 2592 4125 +3 2617 6316 5744 +3 1622 2345 5699 +3 4292 2952 5533 +3 5745 4309 3013 +3 7461 1431 5746 +3 1261 1203 5747 +3 5748 2183 2298 +3 6767 2687 5749 +3 5750 3123 6232 +3 7382 5478 1814 +3 4845 3870 5751 +3 5752 5908 6994 +3 5753 3089 3049 +3 3207 1772 8028 +3 5625 1162 1161 +3 1043 5144 4513 +3 3659 3650 3649 +3 2620 6025 2740 +3 1992 5754 5942 +3 6458 2889 4265 +3 1160 5737 7416 +3 4884 5191 4883 +3 5755 5615 7789 +3 5756 1176 1276 +3 1567 3448 2961 +3 5757 1713 4279 +3 5759 6216 5758 +3 2015 5760 5136 +3 5116 718 5761 +3 7263 4824 5762 +3 5763 3279 3242 +3 1206 6370 1292 +3 4540 5764 4515 +3 6977 1449 6269 +3 4024 4023 5833 +3 7762 76 7831 +3 5975 5765 5562 +3 3069 3030 3068 +3 1590 5766 4706 +3 3193 5767 3192 +3 3991 3992 3944 +3 272 344 5768 +3 8073 7426 2608 +3 5280 5769 1651 +3 5770 7068 5193 +3 5565 3889 1792 +3 5771 6666 5398 +3 2322 6886 2513 +3 6254 1169 1129 +3 6368 22 8 +3 1135 5772 1136 +3 132 5838 4224 +3 1135 4968 1134 +3 4318 4550 4317 +3 2730 5773 2300 +3 7045 6115 2798 +3 5774 6227 4088 +3 5776 5775 5828 +3 2400 2492 2399 +3 655 6290 5488 +3 2877 2878 5352 +3 5628 2432 5777 +3 1654 7855 7125 +3 6610 8065 1463 +3 5778 8084 3272 +3 5321 5779 971 +3 5111 5110 2351 +3 4625 7897 5780 +3 6201 2302 5781 +3 5804 5782 4812 +3 6862 5783 2547 +3 3587 3638 1826 +3 5407 4124 6485 +3 6341 5283 5784 +3 4070 5018 5785 +3 1700 7710 7691 +3 7676 5786 6596 +3 4824 4818 6125 +3 6732 3670 5787 +3 5788 5302 1822 +3 5448 7092 5789 +3 5268 4058 2292 +3 7340 4833 4832 +3 4717 335 5790 +3 7360 957 3342 +3 4276 5791 2983 +3 5174 6092 1004 +3 5744 7597 3802 +3 5792 5915 4556 +3 7735 4818 4817 +3 5750 6232 5793 +3 5814 5794 6755 +3 1494 5784 5968 +3 2477 2478 2566 +3 1712 5795 5100 +3 7993 1347 6961 +3 8172 4895 4894 +3 5797 7663 5796 +3 3259 5812 2717 +3 5798 3292 5271 +3 4233 4235 5685 +3 5989 5799 2561 +3 6832 5800 5801 +3 1353 1318 6079 +3 5802 2110 5703 +3 2535 5774 4088 +3 5659 5803 7231 +3 5238 5782 5804 +3 5806 5805 5272 +3 5808 5807 7976 +3 4530 624 623 +3 995 3021 6522 +3 7689 5809 801 +3 2416 7685 3766 +3 2757 5518 4006 +3 717 716 5810 +3 5543 3079 7007 +3 5812 4663 5811 +3 3299 3267 5813 +3 5101 5084 5814 +3 1291 3195 1124 +3 5816 5747 5815 +3 5818 2473 5817 +3 3178 3179 3177 +3 6479 3966 3922 +3 5180 5819 3783 +3 6893 3318 5820 +3 3264 2863 2805 +3 5821 4079 4056 +3 5649 7171 3330 +3 2428 2525 2478 +3 5632 711 6844 +3 5823 1281 5822 +3 5853 1733 3283 +3 7479 6365 2746 +3 5825 5824 3531 +3 1724 6209 1763 +3 4941 4942 4882 +3 5826 5603 4724 +3 6921 2918 3329 +3 2767 1446 5891 +3 5522 1496 6341 +3 2588 7404 5827 +3 5828 275 347 +3 3216 4432 189 +3 5273 3535 5431 +3 1393 5526 6262 +3 5829 6279 7030 +3 3998 4032 7563 +3 2859 4568 4570 +3 2851 7572 2964 +3 6610 1463 5830 +3 5831 4868 6585 +3 4110 5832 2173 +3 58 5833 4021 +3 4595 4597 4686 +3 2873 2931 7463 +3 4589 5834 2655 +3 7130 1777 5835 +3 3357 5206 5836 +3 3647 4212 3648 +3 3359 5837 2289 +3 2032 2127 2125 +3 3254 2714 6590 +3 5214 5838 3615 +3 2396 5839 5840 +3 5861 4805 4803 +3 2394 6754 5841 +3 5843 2254 5842 +3 4826 7517 7047 +3 6521 5489 5844 +3 1011 1365 6761 +3 8175 3443 4936 +3 5846 5845 2646 +3 5400 4385 4388 +3 3971 5847 5823 +3 5848 3708 1978 +3 5849 6109 546 +3 320 500 5850 +3 5851 4789 5545 +3 4724 5708 5826 +3 5853 5852 1774 +3 3181 6730 5854 +3 7772 5855 4339 +3 1966 5856 7152 +3 142 178 176 +3 6078 4297 5857 +3 3620 6546 3568 +3 5858 2171 6335 +3 6189 7956 1901 +3 5860 5859 7610 +3 4141 1920 3512 +3 5861 8185 4805 +3 7961 5026 5862 +3 2544 2543 2541 +3 2202 5124 5809 +3 3063 3143 3142 +3 5098 2453 8107 +3 4464 4463 4566 +3 7324 5863 6763 +3 2245 4072 7085 +3 408 472 473 +3 7487 927 5864 +3 5866 8230 5865 +3 5867 8073 2609 +3 1541 1542 2895 +3 524 3688 6536 +3 140 175 3426 +3 779 743 5868 +3 7066 6861 3059 +3 4215 4216 6863 +3 5869 8103 7694 +3 5871 1506 5870 +3 5872 3077 34 +3 8191 7844 1116 +3 7650 3777 5873 +3 590 7234 5874 +3 1036 1083 1037 +3 5875 8131 671 +3 5876 5041 2517 +3 6643 5877 8116 +3 4629 4631 5878 +3 5279 696 5265 +3 5112 3551 5879 +3 8024 7101 5880 +3 1399 5881 5678 +3 3324 326 1958 +3 4362 4611 7363 +3 3984 3898 7020 +3 4096 3402 5882 +3 8211 853 6951 +3 5883 2839 7531 +3 8081 5884 1174 +3 987 4624 5305 +3 2129 5885 7759 +3 2413 7898 6862 +3 5886 7626 2004 +3 5333 1774 7334 +3 1480 1482 1543 +3 6015 366 5887 +3 5889 6951 5888 +3 7354 1475 1474 +3 6664 5378 2324 +3 1925 5220 5890 +3 3987 3990 3940 +3 4125 2676 2675 +3 1810 1845 1844 +3 2419 2466 2467 +3 3863 432 494 +3 2123 2228 2177 +3 3245 3282 7190 +3 8040 625 624 +3 31 52 53 +3 5891 6174 985 +3 5892 7008 3902 +3 915 1007 3621 +3 656 763 762 +3 4872 4953 5893 +3 5894 1928 4503 +3 5115 5366 4647 +3 1890 2276 7848 +3 1770 4286 5895 +3 6545 5896 5286 +3 5897 7796 7809 +3 337 4713 7319 +3 2193 5898 5403 +3 2533 5171 7923 +3 7491 509 5899 +3 3789 5981 7694 +3 791 3189 3187 +3 8047 3031 3030 +3 7909 5900 7175 +3 732 769 731 +3 764 5901 6150 +3 5902 7867 5118 +3 1305 5451 1342 +3 261 327 3299 +3 2581 7876 6398 +3 525 356 421 +3 3985 3987 3984 +3 1588 1625 1624 +3 1082 5903 7075 +3 4403 1665 7746 +3 2627 5827 2670 +3 5476 5904 4695 +3 1659 6747 1750 +3 3007 5048 6777 +3 5905 1008 4188 +3 2599 2837 2835 +3 5907 1965 5906 +3 2705 5801 2802 +3 5909 2207 5908 +3 4678 4679 5910 +3 5911 2704 5417 +3 1740 6544 1739 +3 7261 4749 5912 +3 5467 706 7176 +3 5913 1401 4282 +3 3173 6173 6721 +3 5260 5259 23 +3 7368 2259 5914 +3 5916 4556 5915 +3 7931 4797 4822 +3 6002 3012 2966 +3 6272 5917 4232 +3 2080 4509 7959 +3 3693 1211 1209 +3 1054 1842 5918 +3 4867 4966 4965 +3 6921 6372 2865 +3 2532 3365 4585 +3 5920 4976 5919 +3 3028 3092 3977 +3 6522 6088 6794 +3 6439 5921 5957 +3 4236 4238 4237 +3 3775 3695 7556 +3 345 1119 5922 +3 5594 7044 7525 +3 2449 5923 6242 +3 2736 1616 1546 +3 8048 4857 1989 +3 2896 5924 2957 +3 275 5925 347 +3 5926 1582 1662 +3 5335 2505 3701 +3 2742 2871 2872 +3 7247 643 5927 +3 3640 5928 3591 +3 6247 3605 2421 +3 1230 7744 1275 +3 6624 7450 834 +3 1249 5963 5513 +3 3454 5929 6241 +3 7243 4662 5930 +3 6180 5931 766 +3 5932 7721 774 +3 4087 7472 5933 +3 3551 7671 2302 +3 2803 2805 3265 +3 2665 5934 7549 +3 5935 7057 2973 +3 746 2677 745 +3 2792 5936 418 +3 2881 7555 7111 +3 4330 5937 7781 +3 533 5938 4030 +3 1111 6006 1113 +3 4702 5939 4671 +3 5940 2693 5232 +3 5941 5784 1494 +3 5942 6908 2027 +3 4801 4827 7517 +3 5943 6472 5046 +3 5944 5814 6755 +3 2640 5883 2787 +3 2090 5945 7147 +3 5946 6281 1207 +3 976 6459 5947 +3 1651 7255 1649 +3 7771 3759 5948 +3 5950 5949 7303 +3 963 5173 5174 +3 5690 2059 3788 +3 1381 5951 6711 +3 5952 5151 2613 +3 999 1371 952 +3 7353 4728 2564 +3 5954 5953 7411 +3 256 253 498 +3 2707 4346 8035 +3 5620 2403 2446 +3 3235 6423 5246 +3 2106 1581 2773 +3 5955 7689 801 +3 1766 6814 1819 +3 1645 1693 3635 +3 7437 2683 6124 +3 5957 3192 5956 +3 7098 5958 6085 +3 3822 3679 6936 +3 4799 4820 6578 +3 4283 5959 5960 +3 7068 5961 5193 +3 5959 5962 6306 +3 2935 6919 3665 +3 5513 5963 6079 +3 866 5964 981 +3 5548 1537 4912 +3 1232 5965 4819 +3 7973 3915 5966 +3 6726 3199 5070 +3 2700 2702 2823 +3 5381 7888 2069 +3 4673 5967 8205 +3 7278 5150 4591 +3 1494 5968 7415 +3 670 746 708 +3 2827 5969 8059 +3 5970 3138 3066 +3 2107 6483 4044 +3 7348 1776 1871 +3 5971 6857 7022 +3 5099 5972 2807 +3 4868 5973 2231 +3 238 8033 557 +3 1472 6983 1686 +3 4748 7300 5974 +3 5975 4014 5765 +3 491 428 3478 +3 1522 6350 6823 +3 3128 2471 5976 +3 1806 1808 3332 +3 7467 4903 2518 +3 6710 2851 5977 +3 5978 907 7232 +3 1068 1108 1154 +3 5980 6662 5979 +3 5538 4054 4053 +3 2068 5802 5325 +3 6746 3711 3972 +3 5823 5822 3927 +3 6769 5869 5981 +3 3633 6187 5982 +3 5983 2871 2743 +3 5984 3589 3592 +3 3317 5985 6782 +3 5986 4254 4264 +3 5928 3594 2051 +3 1631 4552 4550 +3 3503 5987 5264 +3 5798 3293 3292 +3 2994 7689 3385 +3 438 4584 5090 +3 6600 7090 2853 +3 4667 398 6026 +3 5671 4453 4310 +3 655 7389 6290 +3 2050 3510 5988 +3 4590 8174 7920 +3 1410 3271 1496 +3 2337 6484 2336 +3 4472 2183 2296 +3 2596 3119 2633 +3 4040 4089 6853 +3 1671 5391 1760 +3 1105 1106 4116 +3 4851 5989 5990 +3 5991 5226 946 +3 1164 1213 5396 +3 5992 884 4621 +3 4880 5868 6366 +3 6566 2120 7590 +3 5077 5167 5740 +3 5993 6227 7039 +3 1115 5994 1027 +3 5996 7201 5995 +3 2776 4137 5997 +3 1605 1653 1650 +3 3195 5998 1505 +3 6317 216 215 +3 2846 2902 2960 +3 4267 2786 2638 +3 3966 7162 3922 +3 6904 8010 5999 +3 6000 3933 3885 +3 6001 8038 27 +3 7090 2967 6002 +3 1660 6003 5420 +3 6004 7608 4454 +3 103 141 497 +3 6880 6005 8023 +3 1467 3352 6149 +3 6006 6481 1113 +3 6948 2581 2914 +3 335 337 336 +3 7455 6007 7916 +3 1137 912 965 +3 1596 1635 6008 +3 5422 84 458 +3 6690 2332 2435 +3 7140 4903 4980 +3 708 745 6009 +3 3736 6010 6011 +3 4498 4497 3135 +3 541 517 450 +3 6012 3797 3755 +3 7561 4242 6013 +3 2766 7063 1446 +3 6014 5866 7662 +3 4974 1995 8108 +3 1899 5028 1948 +3 3572 6015 6016 +3 5863 5161 6017 +3 6019 6018 2475 +3 2590 6175 2628 +3 3956 3958 3844 +3 4047 7715 4086 +3 6020 1193 5016 +3 2209 8132 4272 +3 6021 5360 5794 +3 6931 2864 4192 +3 6022 5321 6023 +3 4985 4986 4984 +3 6024 6022 6023 +3 6025 2576 2740 +3 6866 6026 397 +3 8177 7140 4900 +3 1753 1706 5475 +3 6028 6027 740 +3 5241 6515 4741 +3 4324 4486 6029 +3 5777 6030 7179 +3 6515 5699 6031 +3 2230 6032 2339 +3 7645 3459 2401 +3 1099 6033 1182 +3 7628 3006 2953 +3 6034 3946 3905 +3 2595 4035 3994 +3 7957 2548 2592 +3 1087 1048 1086 +3 7110 4136 4134 +3 5094 7150 1575 +3 5597 6035 7667 +3 3870 5585 1587 +3 5355 4220 4221 +3 6373 6298 4633 +3 7733 3040 3080 +3 2936 6275 6036 +3 6037 561 482 +3 331 330 4355 +3 6038 3437 859 +3 4865 4058 5268 +3 3719 3748 3718 +3 3286 6039 6040 +3 7473 593 6041 +3 4737 6042 1947 +3 3696 6402 6824 +3 5552 6043 1065 +3 6920 4902 6044 +3 6046 6995 6045 +3 6438 5143 7670 +3 6084 2035 6337 +3 4168 4169 6047 +3 2971 973 6048 +3 1290 1260 6049 +3 6051 6050 2806 +3 4793 6820 7908 +3 6052 2513 6886 +3 3087 6053 3100 +3 6054 7495 3953 +3 5438 2277 6055 +3 6139 2318 2368 +3 6318 668 4758 +3 3673 5477 3692 +3 5011 6784 6056 +3 3374 6057 6301 +3 3198 514 52 +3 6058 8094 7060 +3 6336 2234 2235 +3 6059 2865 6372 +3 1270 6060 1300 +3 4497 6101 6061 +3 3938 7223 3891 +3 6330 6062 2606 +3 7519 7133 5244 +3 2098 975 973 +3 4596 6063 4796 +3 6064 2013 2372 +3 1903 6065 6217 +3 7137 6395 7704 +3 47 6066 6067 +3 4139 6068 2163 +3 2415 6069 3764 +3 6378 6070 8115 +3 5297 666 4385 +3 6071 5818 5817 +3 6072 934 987 +3 6073 3694 2998 +3 7870 2557 6074 +3 1875 1925 1924 +3 7268 1933 6663 +3 7529 6075 6076 +3 5037 5036 8140 +3 6858 1781 1879 +3 6898 4965 6197 +3 7749 4191 4651 +3 3540 4407 8220 +3 6077 7799 8094 +3 1474 1475 1535 +3 5939 6078 4671 +3 4112 6347 6511 +3 1962 3455 6775 +3 6038 3438 3437 +3 7088 729 806 +3 3640 6667 5234 +3 536 297 344 +3 5284 1353 6079 +3 686 767 729 +3 2064 2163 2161 +3 1807 1806 5025 +3 1269 6080 8183 +3 1387 1686 6081 +3 818 851 7617 +3 1976 1975 6294 +3 1688 6082 1776 +3 6083 657 656 +3 6085 2035 6084 +3 7058 4068 4067 +3 6086 4638 1715 +3 2297 6416 4544 +3 4393 6087 1248 +3 3271 1460 1553 +3 7405 5662 6088 +3 3382 477 7213 +3 7452 4418 2469 +3 3414 6089 4875 +3 4273 6090 8190 +3 1359 1413 1411 +3 7404 5349 5827 +3 6538 1198 1197 +3 32 4163 7632 +3 779 5868 5172 +3 6091 3081 3040 +3 6925 613 612 +3 1004 6092 5772 +3 998 1049 997 +3 7152 1965 1964 +3 2632 5567 6093 +3 125 95 164 +3 2887 4904 6044 +3 6094 7148 5493 +3 2077 2076 6095 +3 2807 5131 3757 +3 3337 3338 7939 +3 7982 7608 4683 +3 1405 2246 6096 +3 1874 3588 3590 +3 6097 4280 4279 +3 4006 7136 6098 +3 8201 2233 2342 +3 6099 3062 7405 +3 6101 6100 4501 +3 3124 1385 1866 +3 2795 7859 4725 +3 5338 5916 7786 +3 394 6277 336 +3 2725 4859 6930 +3 6102 5258 7216 +3 4190 5651 4733 +3 7892 7159 6064 +3 3559 6674 5860 +3 6103 3608 3607 +3 2702 5556 6710 +3 7164 6962 7803 +3 5430 6104 7857 +3 6105 792 856 +3 4464 4566 4462 +3 1143 1179 7828 +3 6250 2241 2309 +3 6106 7773 6532 +3 837 3527 3529 +3 6878 7983 6107 +3 5486 2301 2349 +3 6108 3424 369 +3 3494 6109 6110 +3 7269 6111 6112 +3 6016 4988 7532 +3 7578 5733 4472 +3 7 8 21 +3 6113 7197 4521 +3 2829 6114 6068 +3 6797 3336 7948 +3 941 943 942 +3 6115 6786 2847 +3 1659 7161 6747 +3 160 5257 6116 +3 3733 6117 1074 +3 6118 3438 6151 +3 2890 4265 2889 +3 1396 5806 6106 +3 1030 5675 6119 +3 443 6127 515 +3 8017 1096 6120 +3 1450 6485 4124 +3 4019 8208 4020 +3 4219 316 361 +3 6640 1457 6973 +3 5704 7526 8036 +3 6813 3873 6121 +3 6405 877 6801 +3 6123 6122 1761 +3 1053 6259 1089 +3 6467 6228 5241 +3 6611 4899 626 +3 8084 572 3272 +3 4643 2214 6124 +3 5364 644 7247 +3 3970 3882 5377 +3 4821 4820 6125 +3 388 445 444 +3 6126 7208 1394 +3 6127 446 516 +3 5156 1111 6128 +3 5628 5777 7905 +3 4337 4474 6660 +3 6130 6129 5419 +3 6403 4581 6131 +3 6133 6132 1961 +3 6540 4731 6235 +3 3679 3680 6134 +3 5263 5262 1873 +3 6135 8219 1877 +3 3595 3525 6136 +3 5636 4708 4808 +3 4346 6731 6137 +3 6139 6138 4831 +3 1668 4741 6140 +3 5620 2494 6141 +3 328 6142 741 +3 6632 5195 5856 +3 7071 461 6143 +3 225 190 6144 +3 6793 7385 6145 +3 6147 403 6146 +3 4868 2231 6585 +3 6475 1912 6148 +3 1467 6149 1379 +3 1972 6150 6151 +3 837 6152 3527 +3 5599 6153 3454 +3 7168 4811 6154 +3 3115 7822 7637 +3 8041 6155 6156 +3 5067 6640 6973 +3 5934 391 6157 +3 6523 959 2733 +3 6158 6675 2397 +3 5560 6159 842 +3 6161 6160 2845 +3 6162 2020 5088 +3 3807 3847 2368 +3 432 5887 431 +3 6164 6163 4122 +3 4925 1118 4955 +3 6165 250 7369 +3 1681 1771 1678 +3 836 835 909 +3 4697 5058 6166 +3 6168 505 6167 +3 3337 7939 6278 +3 2062 5948 6169 +3 6170 7357 6389 +3 1296 5077 8004 +3 2735 5148 5171 +3 6961 1347 6171 +3 7620 4935 6172 +3 2207 3522 8127 +3 2230 6173 6471 +3 6756 801 5809 +3 6800 2517 5041 +3 1447 7166 6174 +3 7760 3945 3942 +3 3200 4125 6175 +3 7433 6518 5001 +3 3793 3887 3888 +3 4641 5702 4638 +3 4710 4711 6959 +3 3088 3087 6176 +3 6350 6177 7612 +3 3235 3273 6178 +3 3445 1427 3444 +3 3097 5582 6179 +3 5364 596 644 +3 7545 6180 767 +3 6638 4487 6850 +3 3126 3127 6181 +3 7098 6946 5958 +3 6039 6912 6582 +3 6182 14 25 +3 6183 8117 3500 +3 2819 2939 2938 +3 4275 6184 1943 +3 6791 2336 2391 +3 1882 6185 6186 +3 6060 1272 7202 +3 5289 6187 1568 +3 221 8034 7944 +3 8052 2938 6919 +3 5370 2410 2502 +3 6188 5152 7958 +3 4830 7697 3762 +3 7271 6189 4858 +3 6478 6190 2356 +3 2902 2901 2960 +3 6072 2511 4389 +3 8158 3907 6191 +3 3126 5793 3401 +3 6420 4506 6192 +3 6194 6193 6718 +3 3188 3157 4696 +3 5230 3634 3583 +3 7072 2743 2666 +3 6468 6195 4682 +3 7870 2514 6196 +3 4839 8205 5967 +3 5819 3868 3881 +3 4526 2106 2772 +3 1623 6197 4967 +3 5356 6239 1824 +3 1618 6198 7550 +3 8144 7934 6902 +3 6020 1252 1193 +3 8093 6199 6200 +3 7514 3683 3684 +3 6201 7002 3765 +3 6833 6202 5555 +3 1639 1687 7581 +3 6203 4616 6940 +3 7898 6204 5783 +3 6205 1676 2197 +3 5550 7155 6206 +3 4610 5318 4802 +3 4951 4876 6207 +3 1085 3278 3241 +3 5705 3110 6179 +3 4172 4174 7641 +3 766 5281 6208 +3 2868 6506 3418 +3 2197 1726 6209 +3 6334 4470 6703 +3 911 910 6975 +3 7926 3406 6210 +3 6211 2916 3220 +3 6213 1173 6212 +3 2244 2248 5721 +3 1413 1360 1412 +3 6215 3934 6214 +3 1142 5756 6216 +3 5575 5544 4767 +3 7797 7913 4691 +3 243 7732 3691 +3 618 641 4112 +3 6217 8021 1993 +3 1549 5154 1486 +3 2922 6848 2980 +3 999 952 906 +3 2479 2478 2477 +3 4838 6218 5080 +3 5395 6219 6790 +3 2417 6220 4094 +3 7468 1141 6221 +3 577 6222 3661 +3 6508 6223 2822 +3 4161 2665 6224 +3 2082 1546 6816 +3 6226 3027 6225 +3 1638 3355 6673 +3 7299 7039 6227 +3 2390 2485 4559 +3 7835 1250 7845 +3 4329 6955 1328 +3 56 8112 3197 +3 1550 4744 6228 +3 1524 5424 6229 +3 6230 4810 1069 +3 7771 3799 3759 +3 6400 6231 5202 +3 5793 6232 2275 +3 3173 6471 6173 +3 752 6233 5528 +3 4995 6234 7627 +3 2516 6235 2559 +3 4363 6236 4611 +3 2709 3335 3179 +3 890 6237 939 +3 6331 3696 2824 +3 6974 6238 1637 +3 499 371 433 +3 1971 4039 5760 +3 2631 7595 7157 +3 2177 2227 2634 +3 5483 903 5073 +3 6239 3109 3455 +3 2418 8137 6034 +3 2398 2399 2491 +3 6240 8223 6941 +3 5944 5686 5100 +3 5325 5802 2165 +3 6601 5477 6739 +3 4694 4828 4801 +3 5023 5024 6031 +3 5600 3454 6241 +3 6242 3645 2447 +3 6873 6243 4274 +3 5468 1144 1179 +3 2928 2924 2926 +3 3070 6244 1731 +3 5558 5568 2164 +3 6156 920 6245 +3 132 5296 5838 +3 4749 7261 1117 +3 5909 5752 6246 +3 6247 4271 4270 +3 5865 8230 867 +3 6249 4781 6248 +3 3576 6062 6330 +3 2240 6250 2307 +3 6251 3681 4361 +3 4049 5021 5019 +3 7306 7493 6252 +3 1441 6253 6129 +3 1051 7780 6254 +3 1321 1288 1357 +3 3305 7522 6255 +3 2108 6256 1981 +3 4496 6257 4553 +3 7359 2633 3119 +3 6258 1031 1122 +3 2488 5433 2572 +3 6259 3575 1089 +3 6303 6406 6260 +3 6566 2030 2120 +3 5509 6261 2463 +3 6262 5525 7150 +3 6263 6563 1455 +3 2392 6264 6265 +3 2489 6266 2761 +3 2894 2955 6504 +3 648 4533 5414 +3 4370 4252 4620 +3 2811 6267 2923 +3 1634 1684 3307 +3 4543 6268 4511 +3 6270 6977 6269 +3 922 6271 7391 +3 6272 5107 7120 +3 1176 8100 1277 +3 2410 2409 2459 +3 2710 7476 2804 +3 5373 6870 6273 +3 3215 6274 8129 +3 620 1466 645 +3 8002 1062 1064 +3 1873 6036 6275 +3 311 355 354 +3 1084 6276 6395 +3 6773 4127 4126 +3 6277 5790 336 +3 2727 6278 6887 +3 6279 7585 7142 +3 2425 6280 6281 +3 7157 3909 8158 +3 5155 1987 2682 +3 3939 3613 6282 +3 6284 6283 4612 +3 6286 6285 6071 +3 6287 7479 3601 +3 89 6288 88 +3 6289 3215 6264 +3 6290 7677 724 +3 544 50 145 +3 6291 8145 616 +3 3803 3869 7619 +3 112 6224 6730 +3 2220 6426 7395 +3 4674 5267 4783 +3 6292 6889 2593 +3 7367 5976 7065 +3 6838 7332 6215 +3 7291 2801 6293 +3 7450 6294 7616 +3 6295 7091 1941 +3 304 306 6911 +3 876 5743 6296 +3 459 5854 5235 +3 5985 2572 6297 +3 6028 8078 7424 +3 6298 2034 6231 +3 1398 6805 6299 +3 1462 3135 1556 +3 793 6193 6194 +3 7269 3943 6111 +3 3315 6300 8000 +3 7596 6574 6212 +3 4877 5295 891 +3 3374 6301 500 +3 6302 5331 1024 +3 3431 7942 3421 +3 2184 5773 2730 +3 6303 7571 6621 +3 5683 4999 638 +3 6304 2547 2504 +3 852 5889 5945 +3 3322 4325 4324 +3 1444 5891 985 +3 3622 6305 3574 +3 5960 5959 6306 +3 6307 4451 4794 +3 1412 4420 1497 +3 368 320 5850 +3 7595 6308 3909 +3 2255 6309 7696 +3 4267 6458 2786 +3 2985 6310 2146 +3 894 6311 990 +3 6312 2520 7173 +3 6313 5924 4984 +3 1770 6314 1316 +3 3446 1529 1530 +3 6316 6315 5250 +3 4845 7135 3870 +3 6137 6828 4567 +3 143 6680 6317 +3 6677 637 6318 +3 3274 793 1812 +3 6319 2652 2653 +3 6320 4944 6366 +3 2414 2415 6321 +3 5558 6322 5437 +3 2243 2312 6323 +3 2282 6149 6324 +3 7986 6479 6325 +3 7613 6326 7193 +3 6327 2683 7437 +3 1287 5317 6328 +3 4279 1713 4277 +3 3303 79 551 +3 5645 573 376 +3 4403 6198 5082 +3 6329 7462 5122 +3 2524 6330 4728 +3 2254 3196 7398 +3 5212 908 3344 +3 2675 6331 2673 +3 5205 6588 6158 +3 3742 4167 3744 +3 4340 4562 7761 +3 5694 3988 3987 +3 6966 6332 7174 +3 5228 1099 1182 +3 97 128 6333 +3 2387 4471 6334 +3 2219 6335 2265 +3 642 5927 7682 +3 1859 6514 3250 +3 5189 6336 2088 +3 7056 6337 4479 +3 4189 1141 7468 +3 3026 3064 6338 +3 6836 1381 6339 +3 8189 5170 4640 +3 5081 4838 5080 +3 914 6340 967 +3 1408 6341 5941 +3 6342 4374 720 +3 6343 4935 7620 +3 4844 4842 4983 +3 727 6344 4210 +3 6345 7570 4138 +3 1487 5305 4624 +3 2835 2837 7692 +3 1967 3422 2057 +3 6545 5286 1633 +3 8017 6120 1094 +3 5800 4464 4462 +3 3550 913 3524 +3 6347 6346 6722 +3 5900 1461 7175 +3 5182 5181 924 +3 7077 701 6348 +3 6349 7263 5762 +3 7014 6177 6350 +3 1078 5493 6351 +3 7605 7218 1092 +3 4759 6677 6318 +3 323 324 321 +3 5042 8172 2797 +3 5587 100 3475 +3 4163 32 6352 +3 6993 4302 7151 +3 3411 6353 2135 +3 2731 6354 2234 +3 7131 2486 2527 +3 7145 2347 5204 +3 8097 7594 6302 +3 953 952 998 +3 6153 5137 6355 +3 4217 5141 3650 +3 939 1030 6356 +3 2944 7136 3695 +3 1709 6357 1800 +3 1113 3219 1026 +3 504 6358 6808 +3 4400 6359 6360 +3 2995 8029 6361 +3 1863 6714 6942 +3 6362 3651 4222 +3 452 4245 6825 +3 3850 3804 3801 +3 5995 1536 1535 +3 4594 4576 6363 +3 4656 4669 4659 +3 1067 3925 7064 +3 7681 1779 6364 +3 8070 6365 7441 +3 3804 6740 3801 +3 5440 2347 6089 +3 4943 4880 6366 +3 6367 5228 1145 +3 6368 149 22 +3 2812 6369 7429 +3 6535 7960 6370 +3 6371 5774 3983 +3 6059 6372 2978 +3 6373 8071 1550 +3 5333 2721 6374 +3 868 6743 6375 +3 3466 3468 6376 +3 6377 4519 4517 +3 4114 6129 4113 +3 6379 6378 1038 +3 6664 2324 6380 +3 4272 8132 6381 +3 5666 1394 1348 +3 6166 4996 5412 +3 1072 7500 4626 +3 4750 4749 935 +3 1941 7606 4135 +3 6383 408 6382 +3 5681 2205 6396 +3 6697 2319 6384 +3 6385 4303 4443 +3 1347 6386 6171 +3 6849 7421 4644 +3 975 977 974 +3 6387 4012 7230 +3 1276 1277 1306 +3 6404 6388 7956 +3 6268 6170 6389 +3 2545 2501 2588 +3 7991 4856 6390 +3 6391 7440 1854 +3 4097 4098 7534 +3 7318 6392 6870 +3 6393 1640 1639 +3 2449 4208 5923 +3 4505 4506 4504 +3 6394 3537 2932 +3 208 244 6519 +3 4512 6395 6507 +3 3820 6396 7070 +3 6397 6466 5276 +3 6398 6464 2753 +3 6399 8124 6339 +3 1056 5228 6367 +3 6231 6400 8022 +3 6401 1967 2011 +3 8124 6060 7202 +3 6403 2826 6402 +3 1028 5780 1071 +3 7488 6388 6404 +3 6405 6622 877 +3 4589 2570 5834 +3 7589 2638 7832 +3 7777 3710 3304 +3 8067 7539 5698 +3 7445 1153 6406 +3 1146 7907 1187 +3 1089 1140 1090 +3 4544 7658 2298 +3 6407 6696 4043 +3 1766 4321 4320 +3 3690 6408 6409 +3 5157 7235 5634 +3 6383 6382 5218 +3 2707 8035 4344 +3 2327 6410 2424 +3 4623 1072 1487 +3 5341 2794 2841 +3 7757 2433 7112 +3 6023 917 969 +3 4027 6411 4021 +3 6412 2045 1956 +3 2689 2690 5749 +3 7041 6840 6413 +3 6415 530 6414 +3 7145 2346 6416 +3 1646 6417 7935 +3 6903 6418 3596 +3 3611 490 3610 +3 6419 5692 5691 +3 3446 5951 1426 +3 4501 6420 4548 +3 2759 1441 4114 +3 3604 6074 7312 +3 7928 7596 6212 +3 2112 2684 2682 +3 196 197 234 +3 3953 2854 2852 +3 671 7652 711 +3 3450 3451 6421 +3 786 4323 6422 +3 6423 7810 8118 +3 588 6424 586 +3 5788 1822 1823 +3 5150 7542 4592 +3 4317 6061 6425 +3 2142 1336 5119 +3 460 459 5402 +3 7395 6426 2384 +3 5679 4972 4971 +3 6872 4413 2109 +3 87 116 117 +3 6427 2642 7260 +3 2742 2743 2871 +3 3153 6428 6429 +3 1782 1830 6430 +3 6432 7776 6431 +3 2677 8123 822 +3 7979 664 6433 +3 1791 7204 1884 +3 3943 3283 6434 +3 1294 7100 4510 +3 7988 1450 4124 +3 3253 3289 3288 +3 1737 5302 5788 +3 3753 1703 3714 +3 3961 3831 3830 +3 3083 3044 7850 +3 340 6435 6510 +3 5332 6436 6427 +3 6289 2717 5811 +3 6406 1107 6260 +3 3073 6650 3072 +3 1209 6665 1263 +3 1526 1599 6437 +3 4029 5765 4030 +3 3983 2536 6438 +3 8058 3390 6855 +3 1827 3728 7362 +3 763 5720 684 +3 5926 1708 2774 +3 5683 638 637 +3 6821 4203 2304 +3 3191 6439 1123 +3 6440 2719 861 +3 2853 7090 6002 +3 6442 6441 2169 +3 6444 6443 4197 +3 704 6445 5490 +3 5609 7504 7927 +3 6446 512 5598 +3 6575 7375 6595 +3 6447 5791 6295 +3 6220 4038 6448 +3 8105 2644 2699 +3 7133 2490 5244 +3 2837 2785 2836 +3 5284 6079 5963 +3 5119 1336 7016 +3 7609 630 605 +3 6543 4015 6449 +3 6450 7064 5247 +3 3304 6728 6877 +3 704 5490 6451 +3 4344 4465 4564 +3 4381 6348 702 +3 6161 7397 4896 +3 8170 7118 2959 +3 1191 1247 6314 +3 844 6452 6453 +3 5200 6454 4304 +3 295 4260 6455 +3 6474 3037 6456 +3 5217 1559 7446 +3 6457 7104 6759 +3 6458 7475 2786 +3 1961 5546 2049 +3 6459 7391 4263 +3 1428 1268 7355 +3 4995 7627 5412 +3 4735 4468 6460 +3 8157 6403 3697 +3 300 552 6461 +3 6463 4780 6462 +3 7902 3381 3382 +3 1690 1642 5134 +3 1512 2285 2286 +3 7088 765 728 +3 7876 2583 6464 +3 3268 6793 3234 +3 2200 136 2201 +3 3163 6465 6763 +3 5329 7987 6466 +3 7599 2424 5427 +3 6467 1668 1586 +3 4982 3013 6468 +3 7518 6302 1024 +3 7162 3923 6469 +3 6250 2309 2307 +3 2151 5641 5646 +3 6137 4567 4345 +3 6470 2099 609 +3 6481 5184 3219 +3 6712 2230 6471 +3 227 5162 462 +3 6762 6178 3273 +3 1093 1092 6472 +3 5537 1491 6473 +3 3078 6474 2438 +3 6475 8182 2001 +3 6476 6624 834 +3 3734 5873 3735 +3 6477 3636 6785 +3 1066 1023 7156 +3 4204 6478 7295 +3 5247 3881 3868 +3 4705 6123 1761 +3 7783 3966 6479 +3 7521 1821 1822 +3 6877 6728 184 +3 6480 2815 2008 +3 271 3689 3677 +3 2324 2375 2686 +3 1013 4290 6481 +3 7168 6482 4811 +3 5130 3817 3816 +3 5529 2299 6354 +3 2158 4044 6483 +3 6232 3078 6484 +3 1460 1554 1553 +3 6486 6485 5881 +3 5693 3143 3022 +3 1291 5998 3195 +3 4436 4377 4293 +3 6487 7352 5149 +3 921 976 977 +3 7294 6488 3155 +3 5610 4619 4369 +3 528 485 4176 +3 2575 4923 2735 +3 6490 6489 4296 +3 6491 689 7481 +3 138 3428 175 +3 5540 1345 1344 +3 6492 6045 7024 +3 2178 7772 4339 +3 6493 5373 6273 +3 1590 1626 5766 +3 3580 6494 1273 +3 495 3431 3420 +3 6787 5103 5608 +3 8110 3842 411 +3 528 6495 485 +3 5339 523 568 +3 6411 6496 7143 +3 7442 6497 5391 +3 2586 2627 2587 +3 6498 8009 8162 +3 1010 1055 1054 +3 6499 8193 2089 +3 5197 4489 6029 +3 6500 3429 72 +3 4482 7490 6533 +3 6937 5640 6501 +3 663 6502 694 +3 5108 5426 5107 +3 434 569 3328 +3 6171 1393 1433 +3 5086 4407 3540 +3 4195 4762 4761 +3 6503 2226 2272 +3 3853 3798 6050 +3 3842 8110 7520 +3 5612 4227 6733 +3 5253 7601 3282 +3 4650 5708 6504 +3 6350 7612 6823 +3 6147 6146 4428 +3 2794 4649 2793 +3 3395 6505 7161 +3 6561 3418 6506 +3 5199 6882 1358 +3 3685 122 3687 +3 6507 6276 4514 +3 3958 3823 3844 +3 7335 6508 6548 +3 4635 1666 8141 +3 810 2002 6509 +3 463 6510 4173 +3 6841 6885 2291 +3 7936 6511 6512 +3 3699 3700 3697 +3 7024 6045 2442 +3 6513 27 8038 +3 7576 7886 1343 +3 1915 1914 6514 +3 2942 7225 3670 +3 6482 4889 4811 +3 4741 6515 4773 +3 697 610 699 +3 2649 2800 7966 +3 3800 3850 2104 +3 7513 1051 6254 +3 6516 4791 3050 +3 3060 6517 6219 +3 5001 6518 780 +3 6285 2328 5818 +3 3986 3985 3896 +3 5964 6589 980 +3 4415 2688 2687 +3 3942 5892 6528 +3 207 208 6519 +3 8227 6520 6521 +3 7007 6522 1045 +3 2949 2951 4171 +3 1820 8028 1913 +3 1628 1591 3779 +3 2678 959 6523 +3 4444 6524 4678 +3 874 6525 4071 +3 6526 2204 6407 +3 6637 8068 6527 +3 7042 4264 4254 +3 6016 6015 5887 +3 8175 4936 7950 +3 7489 5273 3533 +3 3805 3804 6528 +3 1329 6529 8065 +3 6530 1801 4738 +3 6369 5404 2930 +3 1616 1661 1615 +3 1043 5991 5144 +3 1770 1316 6966 +3 6531 5415 5255 +3 6286 4975 6285 +3 7059 5256 693 +3 4080 6106 6532 +3 2856 6293 2855 +3 6994 5908 6533 +3 1905 1906 6534 +3 7074 6535 1206 +3 120 3686 6536 +3 6700 8076 839 +3 4785 4786 6537 +3 1214 838 600 +3 4874 1158 6538 +3 4414 6124 2214 +3 1828 1827 1778 +3 5936 305 419 +3 5360 5186 4409 +3 3558 2742 2812 +3 4866 6539 7630 +3 6560 1555 5859 +3 4646 2423 6540 +3 6541 7743 1402 +3 5834 5820 6542 +3 5931 5560 842 +3 5769 1650 1651 +3 4629 1318 7350 +3 1664 6543 7953 +3 6544 1738 1636 +3 2348 2350 2492 +3 6889 6292 7801 +3 5217 1562 6545 +3 6546 4184 805 +3 438 5090 4583 +3 5968 6547 1626 +3 6219 6517 7853 +3 7265 7577 2799 +3 6548 2756 7737 +3 726 2065 6549 +3 3654 4193 2724 +3 8128 4517 6550 +3 3932 6000 3885 +3 2591 3200 6175 +3 2042 2041 3287 +3 2842 2958 5633 +3 6552 3791 6551 +3 8224 6553 6554 +3 1400 7273 6555 +3 2123 2122 2228 +3 6656 3048 6556 +3 8151 2111 2071 +3 1581 6557 1580 +3 2892 2953 2891 +3 6719 6558 651 +3 5513 6559 7900 +3 51 50 6255 +3 7279 7861 1436 +3 6674 6560 5860 +3 8139 7832 2556 +3 6561 3433 493 +3 4183 686 6899 +3 1353 6562 6563 +3 6242 2447 3600 +3 6945 7659 2243 +3 2255 7696 3761 +3 6564 6699 617 +3 1922 845 813 +3 4305 4447 4446 +3 6565 798 3340 +3 3229 560 222 +3 2029 2031 6566 +3 7720 7384 5670 +3 4129 6567 2124 +3 744 709 6568 +3 2734 7519 5204 +3 6570 7756 6569 +3 4409 5155 4410 +3 6571 96 94 +3 1775 5836 5206 +3 7506 5880 2500 +3 1694 1744 6572 +3 3712 3512 6573 +3 3323 5229 576 +3 7839 5322 3856 +3 1340 5343 6574 +3 650 719 6076 +3 6575 8113 3585 +3 4241 4360 4607 +3 560 6576 222 +3 4234 2580 4208 +3 7194 3854 5972 +3 373 5813 567 +3 218 5645 741 +3 6154 5055 4780 +3 6577 3504 3528 +3 6579 4822 6578 +3 4523 6580 5810 +3 7288 6581 1289 +3 8000 2279 6582 +3 6584 6583 4155 +3 7980 2702 2700 +3 4867 5831 6585 +3 1499 6695 7834 +3 5552 1065 5553 +3 6586 7758 4520 +3 5784 5283 6547 +3 6587 7276 4272 +3 456 4255 4376 +3 6588 2533 7380 +3 1680 6923 7699 +3 6589 5294 980 +3 6591 6590 2713 +3 6592 4316 4545 +3 6890 2652 7857 +3 6288 90 88 +3 177 6593 258 +3 7325 6594 2303 +3 5356 3109 6239 +3 5053 4147 5054 +3 2010 7567 2055 +3 7681 1828 6595 +3 5065 804 4184 +3 6565 6596 3386 +3 5812 5811 2717 +3 7128 7871 5779 +3 3419 6597 564 +3 4555 6598 4485 +3 3952 6599 6600 +3 6408 476 6601 +3 3203 1632 3204 +3 756 346 479 +3 2563 5845 5846 +3 687 6602 7545 +3 2313 2362 2361 +3 1835 7268 6663 +3 6603 5669 5969 +3 6779 6604 3463 +3 3930 8103 5869 +3 2379 6605 6606 +3 1883 1930 6185 +3 4111 6607 8153 +3 4621 5076 6608 +3 6609 3159 3146 +3 4629 7350 4631 +3 1327 6610 5601 +3 651 3184 6611 +3 3319 2808 2919 +3 6613 2016 6612 +3 7093 5389 7558 +3 5745 2969 4309 +3 5816 5815 7634 +3 6615 6614 5562 +3 1510 6616 6617 +3 6618 1409 1406 +3 4604 4690 5658 +3 6639 4121 4120 +3 6619 1104 1148 +3 6620 1709 6854 +3 7313 4999 5683 +3 451 450 5520 +3 2331 7915 2433 +3 1508 5539 6669 +3 6812 6621 5864 +3 4714 4716 7083 +3 4420 5830 1498 +3 2287 2286 2285 +3 6622 1444 4119 +3 2442 2393 6781 +3 5157 6623 1069 +3 6896 6058 6624 +3 7598 7705 3111 +3 430 319 3470 +3 7148 6625 6626 +3 6627 4152 6750 +3 5160 2493 6628 +3 6630 7267 6629 +3 4692 4801 4826 +3 1613 4050 8161 +3 8048 1989 4855 +3 7201 7249 5995 +3 5882 2552 2551 +3 134 3494 3493 +3 6597 3049 331 +3 2575 2574 4923 +3 3543 6631 1571 +3 7362 3728 6632 +3 5064 4615 4614 +3 6633 639 4999 +3 5910 4821 6125 +3 5420 6634 1797 +3 6635 670 5367 +3 3116 6636 5952 +3 2459 8068 6637 +3 5196 5197 6638 +3 6766 7718 4417 +3 6270 6269 6639 +3 6640 1407 1457 +3 2445 6641 8216 +3 891 6642 890 +3 6695 6643 7834 +3 5352 2934 2933 +3 2929 5987 3503 +3 2465 4144 4146 +3 6645 3171 6644 +3 3908 4534 5397 +3 4733 5650 5252 +3 1268 2281 7355 +3 6646 6093 2827 +3 2245 7085 6647 +3 5724 6064 1929 +3 7200 1344 1547 +3 1388 1389 6648 +3 153 112 6649 +3 3072 6650 2000 +3 5178 7179 6651 +3 3378 739 738 +3 5029 6652 6653 +3 6654 7760 3989 +3 5003 6655 5381 +3 4840 5139 6249 +3 955 6847 1001 +3 3086 6656 3107 +3 5033 6657 2326 +3 6658 7207 3717 +3 6659 5159 5278 +3 5292 4478 6660 +3 6661 7593 7259 +3 587 611 6662 +3 5436 5764 4540 +3 4368 6663 1977 +3 7590 2175 2174 +3 2166 6664 4643 +3 3189 3188 4696 +3 3024 3025 6665 +3 3462 6666 7021 +3 4178 4231 4230 +3 1730 1765 1766 +3 407 5336 465 +3 6561 5145 3418 +3 6837 6906 2951 +3 5524 5200 4304 +3 6306 5962 1280 +3 2192 7941 6667 +3 6296 928 6668 +3 3729 1697 771 +3 3561 6669 6670 +3 4642 5186 1895 +3 741 6671 328 +3 1322 6672 5135 +3 1598 6673 2287 +3 119 4020 4018 +3 3304 6877 551 +3 6674 8045 6560 +3 1189 7388 1244 +3 2925 3463 8042 +3 7380 2489 6675 +3 6676 5369 3168 +3 113 112 3181 +3 5992 6802 884 +3 5058 4807 6166 +3 2365 2367 2414 +3 3040 3081 3039 +3 5500 1714 6198 +3 2472 2519 5799 +3 7393 4288 1284 +3 1439 705 5311 +3 5085 2542 2582 +3 5684 5683 6677 +3 3300 7086 261 +3 6678 5317 1287 +3 6679 1858 1859 +3 6317 6680 216 +3 445 5971 446 +3 2848 2850 7293 +3 7334 3310 7726 +3 6681 5804 4828 +3 1777 3586 1825 +3 7359 7808 6682 +3 4188 5943 1091 +3 3805 6528 3902 +3 3701 2505 3768 +3 2446 2447 6683 +3 5908 2207 8127 +3 758 6684 6193 +3 4936 2428 2479 +3 6685 5805 5806 +3 5632 671 711 +3 4391 930 2511 +3 5605 1835 4368 +3 602 7105 838 +3 2998 3671 6686 +3 2505 3702 3768 +3 1984 5581 2020 +3 3356 6687 6274 +3 3603 3606 3602 +3 698 7611 634 +3 7999 3136 6413 +3 5506 2650 2607 +3 6689 6971 6688 +3 3920 5276 3921 +3 2331 6690 7915 +3 2369 2416 3703 +3 7443 6691 986 +3 3601 5631 2577 +3 4594 6692 4683 +3 836 909 7358 +3 6024 6023 4186 +3 631 7457 690 +3 4414 2214 2215 +3 7302 6693 7924 +3 3795 4628 6694 +3 1498 7984 6695 +3 6697 4090 6696 +3 327 291 3269 +3 6673 2288 2287 +3 5407 6485 6486 +3 6699 2769 6698 +3 3192 5767 3160 +3 3404 7403 5836 +3 3571 6700 3570 +3 3315 2132 6300 +3 6701 2638 2786 +3 6702 4324 6029 +3 2436 6334 6703 +3 786 3851 4323 +3 8170 7917 4893 +3 3786 4167 3742 +3 3778 1623 8214 +3 5209 6639 2768 +3 5237 6704 1127 +3 6706 6682 6705 +3 5686 6707 1893 +3 7345 4924 4957 +3 4166 6708 8154 +3 6709 6888 7707 +3 268 269 3675 +3 2702 6710 2823 +3 7489 1302 1341 +3 1568 6187 1601 +3 7873 3717 3718 +3 5799 2604 2561 +3 7464 5091 5090 +3 6561 5146 5145 +3 3933 3886 3858 +3 4190 8151 5651 +3 2644 2700 6786 +3 6177 1381 6711 +3 6591 6712 6713 +3 6354 4875 2234 +3 1886 5484 3709 +3 6893 2808 3319 +3 2995 2996 8029 +3 6281 7137 1208 +3 1527 7180 7566 +3 5472 6619 1148 +3 494 431 493 +3 6714 140 3426 +3 2766 6715 7063 +3 6716 6689 6688 +3 6717 3661 6724 +3 4027 4009 6496 +3 7191 4275 1943 +3 7553 5698 1267 +3 6718 7232 1369 +3 1321 1357 1356 +3 7084 5927 642 +3 1411 7512 1461 +3 2266 2330 2381 +3 6719 6611 3183 +3 2308 2406 2357 +3 2774 1708 4130 +3 6320 4933 4944 +3 4211 2873 4212 +3 2967 7875 8187 +3 6720 6161 4896 +3 3173 6721 3130 +3 8098 1867 6544 +3 3729 3730 3732 +3 6722 6844 5176 +3 6723 5550 7963 +3 7807 5597 7182 +3 3660 6724 5999 +3 6725 6208 807 +3 210 3495 8202 +3 3195 1505 6726 +3 1363 1423 7330 +3 1241 3722 5621 +3 1730 4320 4551 +3 7423 7047 4817 +3 6722 5176 6727 +3 6728 80 7053 +3 6729 1659 1658 +3 702 6348 701 +3 1807 5347 1808 +3 5854 6730 228 +3 4278 1663 1662 +3 2686 5236 2688 +3 1164 1165 1163 +3 4846 4845 5751 +3 3166 1680 7899 +3 2706 2860 6731 +3 5269 6732 7555 +3 4230 6733 4229 +3 6734 2008 2007 +3 1294 6735 7100 +3 6565 3386 798 +3 1851 6736 1953 +3 7147 5945 4398 +3 6464 2625 4359 +3 1879 5894 1927 +3 6737 1727 1764 +3 7773 1483 2736 +3 4032 6738 4100 +3 7107 652 5630 +3 3077 7514 34 +3 784 5649 3330 +3 7216 5258 1561 +3 6408 6601 6739 +3 4082 1797 4084 +3 2996 3664 8029 +3 8071 4846 4744 +3 864 978 6271 +3 1596 6008 1684 +3 3760 6740 2255 +3 6741 6926 5655 +3 286 6742 3613 +3 6743 7240 7997 +3 6305 7496 6744 +3 4545 6192 4546 +3 4002 3957 3956 +3 6843 3119 2596 +3 1556 1593 6643 +3 4727 2605 4790 +3 619 6745 673 +3 3207 1820 3208 +3 6747 7938 6746 +3 1517 3391 3390 +3 1465 6748 1511 +3 3597 6749 2191 +3 5766 6123 4705 +3 7808 6750 6682 +3 5947 7536 1057 +3 6751 6475 6148 +3 6752 7141 1400 +3 4432 5109 190 +3 7470 1346 6753 +3 6754 2530 2488 +3 1690 6421 1742 +3 805 4184 804 +3 871 4885 6922 +3 6755 7860 1946 +3 2178 4339 4525 +3 978 1021 7940 +3 6756 1935 801 +3 4425 401 4426 +3 565 3677 6757 +3 6758 7639 5440 +3 6457 6759 5465 +3 4005 522 4004 +3 6760 1700 5532 +3 6762 6761 7115 +3 3165 6763 7421 +3 3988 4041 6764 +3 2608 8079 7292 +3 2496 1623 4967 +3 1102 5473 5472 +3 6765 4729 4726 +3 7782 3315 5044 +3 6767 6766 4416 +3 369 320 368 +3 234 6768 5776 +3 2118 2224 2223 +3 3928 6769 7962 +3 2815 5546 1961 +3 979 1063 6770 +3 6771 2487 3293 +3 5950 7303 4265 +3 6847 956 1003 +3 1692 3516 3450 +3 991 1042 6772 +3 4899 6935 4898 +3 2771 4526 6773 +3 3295 3294 2864 +3 6774 334 224 +3 1962 6775 2049 +3 6716 6776 6689 +3 6720 5570 6160 +3 6778 5633 6777 +3 1880 1928 5894 +3 2741 6604 6779 +3 8104 6780 7980 +3 6782 6982 6781 +3 937 6783 6784 +3 6477 6785 4406 +3 4470 6334 4471 +3 826 828 2087 +3 2699 2644 6786 +3 6336 7408 2088 +3 5103 6787 2825 +3 2257 6788 8069 +3 7740 8207 6789 +3 5088 5087 2064 +3 4312 4313 4542 +3 6790 7853 2241 +3 6791 7025 4337 +3 7979 7030 664 +3 4323 826 6792 +3 3234 6793 7241 +3 8146 6006 929 +3 1126 3278 1046 +3 1045 6522 6794 +3 6795 6245 972 +3 453 452 517 +3 6797 6796 3336 +3 5970 6798 8168 +3 2412 6799 2413 +3 6721 6265 3174 +3 5376 1330 1263 +3 4777 6800 5457 +3 4118 6801 5464 +3 4754 884 6802 +3 5115 2516 2696 +3 5367 670 708 +3 474 4012 7215 +3 3747 1349 3748 +3 5509 3072 6261 +3 6803 1289 1256 +3 6804 5836 7403 +3 6805 5678 4128 +3 6807 1944 6806 +3 6488 6075 755 +3 5950 2891 7625 +3 3320 3329 6808 +3 5697 5696 989 +3 6735 6225 6809 +3 6692 7981 4681 +3 6796 2867 6810 +3 7267 1476 6629 +3 211 6811 6929 +3 6812 6406 6303 +3 6813 3872 7457 +3 6814 8188 8101 +3 7336 6815 4051 +3 6679 5357 1858 +3 5554 6816 1752 +3 4278 5572 4277 +3 6985 1132 6817 +3 5888 6818 1385 +3 5353 6819 1081 +3 6820 8083 6991 +3 6822 4203 6821 +3 6823 1527 5424 +3 3319 4860 4859 +3 1342 1390 1389 +3 2824 6824 3771 +3 517 6825 4243 +3 3121 751 827 +3 1188 1105 4075 +3 6826 7388 1189 +3 36 35 3684 +3 632 6130 665 +3 7115 3275 680 +3 7921 3623 6305 +3 4592 4597 6827 +3 6828 4347 7229 +3 811 6829 810 +3 5856 6830 6831 +3 7711 5508 5507 +3 2611 4464 6832 +3 6833 4101 7592 +3 4223 6834 4222 +3 6835 4065 7058 +3 5237 1878 1373 +3 5743 877 4119 +3 850 4390 4257 +3 6836 8124 7202 +3 5014 5016 5015 +3 6837 7475 6906 +3 2847 2848 2902 +3 6838 6214 6000 +3 5061 1140 3575 +3 6468 4682 4451 +3 3685 3687 6134 +3 7782 5044 2043 +3 5405 2023 6839 +3 6676 6840 6244 +3 6841 2077 6885 +3 7885 582 110 +3 6842 2189 2092 +3 4095 5882 6843 +3 6346 5632 6844 +3 4262 4261 3893 +3 1994 8054 7300 +3 4850 6920 6044 +3 2976 3485 6167 +3 6845 7302 3142 +3 7640 7864 6846 +3 7073 956 6847 +3 2980 6848 535 +3 3165 6849 6798 +3 4358 4930 4604 +3 1818 6850 8013 +3 1194 4957 4924 +3 6851 2401 5270 +3 519 4365 4248 +3 558 332 6852 +3 7401 5268 2290 +3 4038 6853 6448 +3 6620 6854 1708 +3 5636 4808 5056 +3 976 5947 1019 +3 6492 2703 5576 +3 6855 5677 4969 +3 1643 5134 1642 +3 6856 281 5496 +3 1156 4394 3054 +3 3078 2438 6484 +3 447 5616 6857 +3 1780 6858 8219 +3 3634 4199 1645 +3 3943 6868 3283 +3 1309 5666 6030 +3 3347 1131 1183 +3 4220 2538 3556 +3 4590 7919 6859 +3 5978 7232 6684 +3 2523 7883 5480 +3 896 5709 6860 +3 7344 903 1123 +3 6861 994 3020 +3 6907 6862 6304 +3 4179 4215 6863 +3 6397 5329 6466 +3 2042 3287 3252 +3 2162 6864 2259 +3 2249 1402 1454 +3 6592 7178 6865 +3 2492 2402 6851 +3 5275 209 4224 +3 6866 333 6026 +3 2647 6599 3952 +3 6867 5324 1016 +3 5166 6868 1559 +3 5680 6869 8059 +3 1591 5219 3779 +3 4768 1193 1286 +3 2004 1513 6748 +3 6870 2077 6841 +3 2193 5403 6478 +3 7766 6429 6428 +3 7550 6198 1714 +3 5650 5730 6913 +3 212 585 213 +3 298 756 345 +3 1033 6094 1078 +3 6871 5222 4735 +3 6873 1986 6872 +3 6874 7374 6019 +3 6875 7344 3773 +3 2842 5078 2896 +3 7425 2705 8018 +3 4620 6876 4700 +3 551 6877 182 +3 7040 6878 8101 +3 532 5619 3960 +3 6000 6214 3933 +3 3539 1568 1644 +3 747 784 7139 +3 6143 4256 294 +3 5342 4281 1484 +3 7510 3591 3589 +3 5814 5083 5794 +3 6879 2678 6523 +3 8142 6442 7046 +3 6881 6880 5642 +3 6882 1323 1358 +3 6884 5067 6883 +3 101 137 139 +3 6885 6095 2172 +3 4393 7431 6087 +3 6381 6052 6886 +3 7048 3589 5984 +3 5556 3953 2852 +3 160 6116 6768 +3 3792 3794 1612 +3 4775 5030 2420 +3 4332 6586 7591 +3 748 785 747 +3 3088 6176 3103 +3 5586 6887 2921 +3 7388 5408 1244 +3 7046 6442 6888 +3 6889 4582 2593 +3 4156 3262 6890 +3 2730 2731 6353 +3 4567 7229 6891 +3 6287 6892 7441 +3 6831 6830 2054 +3 6894 2726 6893 +3 2564 4728 4727 +3 5792 4483 5915 +3 5057 6895 82 +3 1367 6896 6476 +3 6898 6897 4965 +3 6899 5348 4181 +3 3976 3929 6769 +3 3240 7062 3239 +3 7154 6900 4574 +3 6701 6901 2838 +3 6 19 6902 +3 7515 7882 6903 +3 5319 3530 3523 +3 6724 3661 6904 +3 823 7660 893 +3 2797 4894 2898 +3 6137 6731 2912 +3 1666 6905 8141 +3 2951 6906 5533 +3 6907 2413 6862 +3 5754 2950 6908 +3 237 301 7648 +3 6909 4180 4181 +3 169 1711 170 +3 6524 4679 4678 +3 3116 7638 6636 +3 6498 3643 3599 +3 8186 3266 3233 +3 1131 3349 1224 +3 1198 7055 1255 +3 8194 3828 8176 +3 6910 5311 705 +3 2375 2374 5236 +3 304 6911 420 +3 3191 7742 1501 +3 6451 703 613 +3 8000 6582 6912 +3 2664 3507 7237 +3 7576 4819 7886 +3 3102 3104 3103 +3 474 7102 4012 +3 5650 6913 5252 +3 2555 4268 7640 +3 5283 1495 5599 +3 5543 5123 6550 +3 2109 2110 5802 +3 6914 2658 2657 +3 3739 4258 776 +3 471 5096 4106 +3 7302 7924 3142 +3 6861 6915 994 +3 3147 3059 7198 +3 3622 6916 7921 +3 4858 1900 6917 +3 6024 6918 804 +3 3770 7146 3772 +3 293 6147 4428 +3 6229 1526 7031 +3 3053 3015 603 +3 7644 5019 1354 +3 6537 4817 7047 +3 6919 2997 3665 +3 6920 7895 4902 +3 6721 3131 3130 +3 2647 5911 6599 +3 4860 2918 6921 +3 2282 1379 6149 +3 6011 5380 6922 +3 6883 5067 5074 +3 3333 6278 2728 +3 2973 7057 2972 +3 5167 6670 6669 +3 5209 6270 6639 +3 568 249 248 +3 4041 4042 6696 +3 6923 3206 1768 +3 6496 3962 8194 +3 1955 6924 3136 +3 6865 7178 5323 +3 427 7753 5141 +3 5120 6112 6111 +3 1439 7722 6925 +3 5079 243 312 +3 7751 4711 6926 +3 6927 6371 7223 +3 6928 7803 2818 +3 5007 7304 887 +3 498 6929 3377 +3 6526 6407 4043 +3 7032 1675 1762 +3 4402 4401 1584 +3 6931 6930 6059 +3 3793 6552 3887 +3 3877 8130 3878 +3 6933 2820 6932 +3 4586 7540 6934 +3 6935 6429 4898 +3 721 6058 6896 +3 5027 3332 6652 +3 6102 7216 3914 +3 6937 3822 6936 +3 6938 2019 5580 +3 4417 7718 2691 +3 6051 3854 7108 +3 6940 6939 4835 +3 7488 1759 6388 +3 6062 5514 2606 +3 6941 7770 88 +3 4189 8215 6916 +3 1863 6942 251 +3 6095 2117 2221 +3 1268 1267 2281 +3 4756 6802 6943 +3 6720 4896 4900 +3 1292 6370 7114 +3 6944 7242 1088 +3 2149 2150 6945 +3 1911 7283 6946 +3 6834 6362 4222 +3 6947 186 560 +3 6948 2582 2581 +3 3201 6465 3741 +3 661 7481 730 +3 6949 3707 3709 +3 4661 864 8102 +3 7570 7126 4138 +3 1013 1014 4290 +3 7799 6950 722 +3 6119 6258 1077 +3 8128 829 6377 +3 7041 6413 3136 +3 6952 8211 6951 +3 3309 6953 7825 +3 4266 6954 6906 +3 6955 6529 1329 +3 6957 539 6956 +3 3191 1123 903 +3 5027 5029 5026 +3 1392 1431 7461 +3 3075 3074 3035 +3 3250 6958 1857 +3 4710 6959 4372 +3 6960 6084 2083 +3 6444 6961 6443 +3 6962 2671 7483 +3 4703 4808 4708 +3 2956 5051 4298 +3 1653 4138 1652 +3 4322 6963 3322 +3 3980 3936 7320 +3 8137 3946 6034 +3 6965 3435 6964 +3 5516 1712 5100 +3 6966 4284 4286 +3 7234 6967 5874 +3 2532 7383 7033 +3 2381 4788 6018 +3 6110 6968 3495 +3 4841 6969 5139 +3 4589 6970 6971 +3 5936 419 418 +3 6408 6972 476 +3 5074 6973 1492 +3 2396 5121 5839 +3 5040 6974 1635 +3 3758 3798 6949 +3 6976 3441 6975 +3 6977 7393 1246 +3 6978 4031 4103 +3 6979 7959 1262 +3 5346 1047 5345 +3 7398 3162 6980 +3 3711 7938 3756 +3 6981 1035 1033 +3 2529 6982 7811 +3 1396 6106 4080 +3 3355 5206 3357 +3 1147 1148 1149 +3 6478 5403 6190 +3 3507 4220 5623 +3 5301 7726 3310 +3 1439 6925 6967 +3 3630 6983 6984 +3 1516 6985 7242 +3 2394 2443 6754 +3 6986 6627 4150 +3 2037 3034 3035 +3 6319 7857 2652 +3 7480 2065 6987 +3 7674 3150 6988 +3 6984 8138 6989 +3 3362 7253 2048 +3 2868 2923 6506 +3 2525 5867 2567 +3 444 446 6127 +3 1539 3908 1574 +3 1702 1701 6990 +3 6820 6991 7908 +3 1744 1745 1780 +3 3118 3116 5952 +3 6067 79 582 +3 6557 1582 5926 +3 2899 6992 6993 +3 5752 6994 7928 +3 2397 6675 2531 +3 833 6684 794 +3 5205 5204 5244 +3 1470 8060 1469 +3 2167 2166 7011 +3 7914 7724 5919 +3 2395 6995 5227 +3 3790 6996 2439 +3 1704 3981 4459 +3 6997 7181 7082 +3 1510 3306 6616 +3 3247 3056 5161 +3 7183 5318 4610 +3 7628 2953 6998 +3 6764 6999 6654 +3 4436 7000 7167 +3 7954 3037 6474 +3 898 692 5614 +3 2414 6321 5334 +3 3171 4765 6644 +3 7048 3590 3589 +3 6773 2772 4127 +3 1394 7208 7001 +3 7002 5781 5583 +3 6526 4043 6483 +3 7003 753 6113 +3 1570 6188 7004 +3 3655 5481 7005 +3 2540 2539 2621 +3 8069 6788 5344 +3 7506 8024 5880 +3 2251 2314 2364 +3 7791 5042 2642 +3 1763 6737 7006 +3 5543 7007 5542 +3 7973 6131 4581 +3 6362 5214 3651 +3 3944 3993 7008 +3 510 7009 4575 +3 2219 2265 2264 +3 2701 7010 5717 +3 7011 6124 2683 +3 7012 1572 1534 +3 1765 8188 6814 +3 769 5095 7013 +3 2841 2793 4653 +3 3426 211 3427 +3 5337 3419 564 +3 4093 5045 3285 +3 5307 7014 1380 +3 7015 2073 2113 +3 7017 7016 5886 +3 6172 4935 5660 +3 3137 3138 7018 +3 7019 6363 4593 +3 6567 1548 2124 +3 3853 3897 7020 +3 7021 5771 2870 +3 7495 3952 3953 +3 7645 2401 2353 +3 6433 663 4068 +3 516 7022 8121 +3 5240 1847 7023 +3 6241 5929 1675 +3 1565 1512 6238 +3 3174 6265 6264 +3 860 6918 5719 +3 6492 7024 2703 +3 3209 3211 4253 +3 2785 5618 2836 +3 6284 7754 7627 +3 2174 6503 2224 +3 2390 4559 7025 +3 4206 3474 4207 +3 565 7026 230 +3 4046 1751 7027 +3 1600 1691 1692 +3 7301 2945 7146 +3 970 1010 7028 +3 5412 4996 4995 +3 3781 872 873 +3 7029 7603 849 +3 943 6379 1038 +3 3662 2081 7680 +3 7030 737 664 +3 6993 7688 4302 +3 7031 3397 1425 +3 3422 2058 2057 +3 1674 7032 6123 +3 2761 7033 5839 +3 3645 3646 6683 +3 3155 3187 7034 +3 2958 2896 2957 +3 1707 4132 7035 +3 2455 2456 7036 +3 1403 4745 4846 +3 3885 4675 5449 +3 2180 7037 2714 +3 3837 3839 3829 +3 6865 5519 4315 +3 7038 7704 4512 +3 1889 7039 7027 +3 1988 5164 1948 +3 2288 1739 1597 +3 7041 7040 3033 +3 4261 4262 7042 +3 5648 7043 2626 +3 3615 246 245 +3 7044 1869 5546 +3 6075 3236 755 +3 2946 7102 4001 +3 2603 2699 7045 +3 7046 6709 2114 +3 2550 4945 3946 +3 8195 6537 7047 +3 2684 7011 2683 +3 2936 1874 7048 +3 7705 7598 7049 +3 5983 7050 2871 +3 7051 7141 6752 +3 2087 7052 897 +3 1870 1869 7044 +3 4758 706 5467 +3 6408 6739 6409 +3 6728 7053 184 +3 7447 940 3733 +3 7582 3010 7054 +3 1550 6228 1551 +3 7055 6803 1255 +3 6731 3043 2912 +3 6077 8094 6058 +3 5292 2128 7056 +3 2862 3232 7057 +3 3213 2712 6590 +3 5946 1207 7074 +3 6835 7058 7059 +3 6624 7060 7450 +3 7061 8218 146 +3 2890 2891 5950 +3 3239 7062 947 +3 3087 5753 3419 +3 7063 1110 5209 +3 4867 6585 1588 +3 3968 1067 7064 +3 6938 2828 2019 +3 2671 6548 7737 +3 3199 5870 1506 +3 8066 6489 6490 +3 4001 474 4003 +3 565 271 3677 +3 1866 1385 6981 +3 1605 1573 6345 +3 2977 3297 3296 +3 4731 7846 7065 +3 6609 7066 3159 +3 2106 1484 2105 +3 6827 7019 4593 +3 739 7067 6457 +3 7589 8139 2787 +3 4082 5420 1797 +3 4273 8190 2209 +3 6838 6215 6214 +3 1499 7834 1592 +3 6703 4467 4468 +3 7508 4973 5577 +3 4781 4829 4832 +3 628 605 7068 +3 5912 5974 4766 +3 6005 2101 7069 +3 7070 7185 2160 +3 227 461 7071 +3 7184 2949 7738 +3 7579 7444 4642 +3 4496 1593 4495 +3 3647 3648 7072 +3 1333 858 7073 +3 1991 5373 6493 +3 2367 2415 2414 +3 6357 5106 2983 +3 7075 5946 7074 +3 7946 771 7076 +3 6445 7077 5490 +3 4041 6696 4090 +3 7135 3869 3870 +3 4584 6446 4588 +3 1021 7078 1061 +3 414 7079 7460 +3 2320 2258 5902 +3 5503 4261 5454 +3 6854 1800 4131 +3 3716 7080 3752 +3 8109 7081 2738 +3 3967 6450 3923 +3 429 430 3469 +3 4288 4289 5895 +3 2997 3667 3666 +3 4307 5504 7316 +3 7111 7555 7779 +3 893 854 6379 +3 1188 4075 7082 +3 7083 333 6866 +3 5804 4812 4814 +3 2606 5429 2648 +3 3497 1548 6360 +3 594 7248 7084 +3 6166 4807 4996 +3 6525 7675 7085 +3 7086 3301 261 +3 2149 6945 2242 +3 7087 830 900 +3 6972 412 476 +3 6899 729 7088 +3 2913 3180 7089 +3 5418 2904 7090 +3 7091 7606 1941 +3 3176 6687 7092 +3 7239 7093 4789 +3 7002 7094 3765 +3 790 948 7543 +3 2755 6928 7095 +3 3306 1596 1634 +3 2453 2498 2499 +3 2038 3172 7096 +3 5000 7097 7433 +3 5443 532 3960 +3 3411 2135 3412 +3 6736 7098 7099 +3 4092 3358 6448 +3 7100 6809 5435 +3 8070 2813 6365 +3 2284 3354 3353 +3 4792 2417 4037 +3 4303 4677 4443 +3 2455 7036 7101 +3 1001 1003 1002 +3 4861 7785 4913 +3 7102 7230 4012 +3 6511 6347 3120 +3 4334 6054 2645 +3 2221 7573 2268 +3 3655 7005 7103 +3 5527 6759 7104 +3 4930 4690 4604 +3 4332 4557 4333 +3 4524 7105 4528 +3 7106 5345 3240 +3 3791 6996 3858 +3 7107 6178 680 +3 6051 7108 3897 +3 6323 2361 2360 +3 6807 1893 2021 +3 7041 5463 7040 +3 3090 7109 3028 +3 4239 8121 7798 +3 3221 3220 2916 +3 8091 3075 6650 +3 6645 4750 988 +3 2035 4479 6337 +3 7606 7687 7110 +3 2937 7111 3667 +3 6507 4514 7602 +3 5739 850 4387 +3 7727 373 567 +3 2385 7757 7112 +3 6364 1875 4326 +3 4960 7345 7337 +3 4338 2336 6791 +3 2928 2927 2924 +3 5819 5180 3868 +3 1405 6096 7113 +3 6955 7114 6529 +3 7115 682 3275 +3 7117 7116 59 +3 4876 4951 4950 +3 6502 695 694 +3 5542 7007 1045 +3 383 382 438 +3 7118 4981 2843 +3 1039 2425 5903 +3 7119 7829 5442 +3 7210 5699 6515 +3 6272 7120 4569 +3 7121 2158 6483 +3 3685 6134 4408 +3 3724 3721 7122 +3 7123 7141 1315 +3 2788 7124 7619 +3 7168 6154 7925 +3 2602 7791 5340 +3 682 1368 4897 +3 2917 2916 6211 +3 5626 1735 6953 +3 4225 133 132 +3 3535 3536 3534 +3 7126 7125 6760 +3 7127 1085 7741 +3 3 3489 7552 +3 4685 4796 4795 +3 5105 6374 1773 +3 2020 2019 5088 +3 841 7128 6022 +3 1951 1952 7129 +3 3540 8220 7130 +3 3647 7072 3606 +3 5251 2486 7131 +3 3693 3698 4543 +3 7132 1736 1735 +3 3193 1125 1291 +3 7021 2870 6604 +3 6762 1011 6761 +3 7134 2575 7133 +3 5495 5304 5303 +3 1269 3394 3350 +3 2966 3011 5512 +3 1771 1732 1772 +3 7135 7619 3869 +3 1218 722 6950 +3 7136 7556 3695 +3 6280 1084 7137 +3 7554 1153 7138 +3 1205 7139 7660 +3 60 584 7192 +3 2518 4903 7140 +3 7117 81 7116 +3 6094 1079 7148 +3 1373 2142 1374 +3 7141 7273 1400 +3 6279 7142 7030 +3 4008 7143 7698 +3 7144 4602 4600 +3 2654 2347 7145 +3 701 4491 2213 +3 1583 8192 2105 +3 5534 1504 1503 +3 6787 7146 2825 +3 1528 2090 7147 +3 7651 7511 4677 +3 5493 7148 7731 +3 548 549 185 +3 2938 2939 2937 +3 7149 2999 2945 +3 7150 7486 1575 +3 8027 6993 7151 +3 7152 6831 2053 +3 2903 2966 7752 +3 5327 7153 7347 +3 5439 6394 5129 +3 5128 4350 7154 +3 3539 7155 7372 +3 3738 4382 7156 +3 3994 2631 7157 +3 1881 5724 1929 +3 6417 6572 7889 +3 7158 48 78 +3 7159 6186 1970 +3 3000 7230 4031 +3 7161 7160 6747 +3 7568 4229 6733 +3 3922 7162 4448 +3 3996 2692 5089 +3 8077 4896 7397 +3 4512 6507 4511 +3 7164 7163 6962 +3 1129 2437 1166 +3 5920 7017 7165 +3 3659 4214 885 +3 3157 902 3158 +3 6452 870 6453 +3 238 557 277 +3 2784 6174 7166 +3 4016 4015 6543 +3 204 8049 242 +3 5368 6635 5367 +3 7145 5205 2346 +3 7593 574 7259 +3 2057 2058 4062 +3 3782 5183 3781 +3 5426 4573 4571 +3 6208 5281 8041 +3 4722 2956 4723 +3 6712 6471 6713 +3 2256 4040 4038 +3 4436 7167 4377 +3 6284 4836 7754 +3 5052 7168 4441 +3 8223 7770 6941 +3 5029 5028 5026 +3 6377 7003 4519 +3 7169 7439 3862 +3 7170 2410 5370 +3 557 556 302 +3 3330 7171 7172 +3 2604 7173 6780 +3 3546 7343 1874 +3 176 178 177 +3 6966 7174 4284 +3 6544 1867 1738 +3 4544 2346 2397 +3 4427 4428 401 +3 2015 5136 2060 +3 709 6009 6568 +3 4659 4699 5635 +3 7909 7175 5707 +3 675 7197 753 +3 709 708 6009 +3 6539 2271 1717 +3 651 650 3184 +3 2462 2414 5334 +3 2271 5399 1809 +3 5467 7176 4757 +3 2641 2640 6846 +3 4347 2911 5917 +3 5924 7177 4983 +3 1418 1500 7178 +3 3845 3812 2999 +3 7912 1868 5837 +3 6899 7088 5348 +3 7179 1348 7740 +3 3580 1273 3579 +3 7180 3448 1567 +3 7181 4076 7082 +3 1614 5475 6003 +3 5117 6531 1721 +3 7807 7182 5290 +3 36 62 61 +3 7183 7363 5318 +3 6986 6837 7184 +3 834 7450 7616 +3 2205 7185 6396 +3 1789 1749 1788 +3 3483 3484 3496 +3 2017 1978 7186 +3 5033 5730 5032 +3 294 403 6147 +3 6642 6237 890 +3 3759 2157 6169 +3 7180 5313 3448 +3 3936 4459 4458 +3 7194 5972 3797 +3 182 6877 183 +3 7187 535 6848 +3 983 7487 7188 +3 2152 2250 7646 +3 7189 2781 2780 +3 4857 8048 4908 +3 2566 5506 5514 +3 5074 1492 5075 +3 6675 5121 2531 +3 3245 7190 1420 +3 5065 6022 6024 +3 7191 1944 5211 +3 527 7192 162 +3 7193 40 68 +3 3854 7194 3894 +3 2380 6019 8061 +3 966 6976 6975 +3 849 7603 848 +3 5045 5044 2084 +3 7195 6049 1324 +3 44 45 7196 +3 3176 7092 5448 +3 3309 3310 1734 +3 674 647 7197 +3 2451 2450 2495 +3 7451 7198 7199 +3 636 7541 6424 +3 4314 1294 6170 +3 1982 1984 1983 +3 1439 5311 7722 +3 56 3197 3198 +3 7886 7200 8026 +3 714 751 3121 +3 8026 6630 7201 +3 4930 7798 4690 +3 7202 5343 3444 +3 7317 3582 7203 +3 2115 6441 6442 +3 4415 5501 2212 +3 6335 2267 2265 +3 7204 1793 1885 +3 4540 4515 4541 +3 6282 3612 3611 +3 7191 1943 7205 +3 5987 5771 7206 +3 1762 1721 5541 +3 6985 1517 1132 +3 7668 7207 7208 +3 4751 4752 4765 +3 7054 4305 6454 +3 7209 8155 6025 +3 3351 1379 1378 +3 7210 5700 5699 +3 4634 1586 7211 +3 5128 7154 4348 +3 7212 4049 5785 +3 5718 5066 339 +3 75 7213 7214 +3 1207 2080 6535 +3 6614 474 7215 +3 7216 7282 3914 +3 2072 2071 2112 +3 2727 2728 6278 +3 7217 7167 5459 +3 2005 7523 2085 +3 2418 2417 4792 +3 7218 5918 1142 +3 7219 7657 4536 +3 1149 3724 7122 +3 7129 7342 2031 +3 4634 7220 5202 +3 3333 3337 6278 +3 7562 1205 823 +3 3221 2972 7221 +3 6053 3086 3099 +3 5334 2505 5335 +3 7223 7222 3891 +3 3620 3568 3565 +3 6902 550 3476 +3 7224 897 945 +3 7225 6686 475 +3 4489 4488 4490 +3 8085 6656 6556 +3 6480 2008 6734 +3 4042 7121 4043 +3 7071 6143 193 +3 1374 5920 5919 +3 5651 5650 4733 +3 2741 7226 2620 +3 6708 4154 8154 +3 5017 1319 7212 +3 7227 6934 3517 +3 655 6987 3384 +3 7228 220 4196 +3 6006 1013 6481 +3 7229 4568 6891 +3 7231 4031 7230 +3 6193 6684 7232 +3 4177 487 5741 +3 1535 1536 7745 +3 6819 1037 1081 +3 7234 7233 705 +3 7174 2249 7654 +3 1114 7235 6128 +3 5176 7236 5213 +3 6666 7237 7429 +3 1279 7238 3746 +3 2195 2196 2250 +3 2464 2463 6261 +3 3676 3678 3677 +3 3237 755 3236 +3 5282 2472 4851 +3 41 3 3488 +3 5504 7239 5851 +3 7240 6554 1063 +3 7241 6145 507 +3 4454 4574 6900 +3 4699 4669 5316 +3 7242 6817 1088 +3 7557 2600 2641 +3 455 4424 7243 +3 7244 3516 3515 +3 7335 5584 6508 +3 4150 6627 6750 +3 7006 1818 7862 +3 4734 8043 4776 +3 6953 4886 1862 +3 7174 7654 7245 +3 2777 2778 2776 +3 3204 1681 3205 +3 7246 2996 2995 +3 1398 6299 7381 +3 6185 1974 6186 +3 2253 7787 2252 +3 7248 5364 7247 +3 7363 5861 5318 +3 4931 5172 4946 +3 6650 3034 2000 +3 899 994 995 +3 7249 6629 1557 +3 511 512 6446 +3 3006 3005 7250 +3 7251 1567 1689 +3 5744 5250 7597 +3 2078 2119 5832 +3 7703 5194 3975 +3 3598 2355 6749 +3 3258 3259 2716 +3 4623 1487 4624 +3 6927 7299 6371 +3 7252 1395 820 +3 867 5964 866 +3 5115 2558 5366 +3 2048 7253 3412 +3 4757 7176 4763 +3 5955 7676 7254 +3 3905 3848 3849 +3 2274 4558 4557 +3 7255 1698 2963 +3 7234 1439 6967 +3 6821 2304 5617 +3 1195 4925 1194 +3 7256 7709 5577 +3 7258 7974 7257 +3 8058 6855 4969 +3 2026 7259 6415 +3 3174 2338 6181 +3 3138 5970 8168 +3 6427 7260 2796 +3 7261 3125 1117 +3 7262 1756 1798 +3 4605 4604 7263 +3 2861 5935 7264 +3 2771 5342 4526 +3 7265 7966 7577 +3 5901 7338 6118 +3 1547 7266 7267 +3 1791 1884 7268 +3 4728 6330 2565 +3 7269 1559 6868 +3 7284 1379 2282 +3 249 5656 250 +3 4435 4433 7270 +3 5542 4541 5123 +3 143 6317 6593 +3 4864 6404 7271 +3 6974 1637 1635 +3 7272 8052 2935 +3 2033 2032 2081 +3 2756 2822 2883 +3 6057 3375 6301 +3 7273 7123 5913 +3 5252 6913 8163 +3 4426 456 7274 +3 7275 1943 6184 +3 5523 1250 4746 +3 2650 2608 7292 +3 8102 864 6271 +3 2164 7276 8014 +3 4709 4372 4707 +3 3616 7484 7277 +3 6754 5840 2530 +3 639 8064 5000 +3 4590 7920 7278 +3 3999 3951 3950 +3 2583 2584 2625 +3 3978 7279 3930 +3 7280 1840 1841 +3 7133 2735 2490 +3 610 7298 699 +3 3825 7520 3843 +3 6881 2012 6880 +3 4659 5635 4440 +3 7281 5239 3730 +3 1509 7446 7282 +3 138 140 139 +3 1847 1846 1904 +3 4193 4192 2724 +3 2987 5589 3564 +3 3363 3412 2135 +3 7283 4483 6946 +3 1378 7284 2280 +3 3755 7896 7285 +3 7286 5540 5965 +3 989 7287 1032 +3 6784 6783 4928 +3 1867 5302 1738 +3 1159 7288 6803 +3 4360 7289 4607 +3 8091 3132 7290 +3 5935 2862 7057 +3 4636 1715 4637 +3 7352 5192 5149 +3 2265 2267 2266 +3 2977 2976 3297 +3 5841 2488 5985 +3 7292 7291 2800 +3 7293 7054 5200 +3 7294 6075 6488 +3 2695 2116 5168 +3 7295 2356 4205 +3 5907 5906 7296 +3 4354 7297 4591 +3 633 699 7298 +3 6371 7299 5774 +3 6135 1877 1875 +3 4097 2596 4098 +3 2386 2387 6334 +3 292 4431 4429 +3 7300 5012 5974 +3 7149 7301 3917 +3 8004 5740 7302 +3 6954 7303 5602 +3 3978 3930 3929 +3 2834 2782 2833 +3 2984 6310 2985 +3 6723 1600 3448 +3 936 7304 5009 +3 7910 982 7305 +3 4739 4738 4774 +3 193 265 1898 +3 4003 410 4002 +3 7307 7306 1775 +3 915 7308 1007 +3 6526 2160 2204 +3 1655 7710 1700 +3 4266 6906 7475 +3 7118 2843 2959 +3 2171 7309 7396 +3 7310 1233 1232 +3 5599 3454 5600 +3 1560 7269 6112 +3 922 7391 6459 +3 8099 1657 7932 +3 7700 1127 7311 +3 7075 7074 1204 +3 4268 3604 7312 +3 7574 4816 4815 +3 6577 802 3504 +3 6091 3118 3081 +3 7313 4998 4999 +3 2788 7619 7135 +3 6387 472 4012 +3 3416 2868 3417 +3 4731 7065 4777 +3 6152 6344 7314 +3 4407 7315 4406 +3 5710 8095 5711 +3 4306 7316 4447 +3 6494 7317 1303 +3 4461 5801 5800 +3 3010 4306 4305 +3 3028 3977 3182 +3 2673 6331 5518 +3 1443 6405 4118 +3 2308 2358 2406 +3 734 1405 7113 +3 1727 5196 6638 +3 5889 5888 3124 +3 7318 5942 6392 +3 5059 7319 5060 +3 5499 4377 7755 +3 3934 7320 7321 +3 3728 1924 1923 +3 1668 6467 4741 +3 6645 6644 7322 +3 2542 2544 2541 +3 764 6152 837 +3 1105 4116 4075 +3 7323 6937 6936 +3 4602 4601 4798 +3 2340 2341 2443 +3 2137 3213 7729 +3 6591 6713 3212 +3 7324 5539 5120 +3 3970 3974 3882 +3 3770 2825 7146 +3 3452 3453 5299 +3 5510 1480 7325 +3 545 544 80 +3 5488 1217 5489 +3 7327 7326 5425 +3 1532 7328 1603 +3 6052 2422 7329 +3 5505 5298 1138 +3 6304 6862 2547 +3 4467 4470 4563 +3 3618 3565 3619 +3 7331 6617 7330 +3 7208 7207 6658 +3 4050 7332 6815 +3 3753 7333 1703 +3 2721 7334 7748 +3 5827 7335 2670 +3 7336 5554 1614 +3 4960 7337 6884 +3 6118 7338 5072 +3 4858 6189 1900 +3 3430 22 149 +3 7339 1310 7669 +3 4803 4805 7340 +3 8096 7341 7342 +3 7343 1826 3588 +3 7344 4287 3773 +3 7345 4870 7337 +3 4095 6843 4097 +3 7347 2610 7346 +3 7306 7348 7493 +3 6653 7349 5163 +3 7350 4745 1403 +3 3297 3682 2974 +3 2307 2308 5125 +3 7351 3471 5411 +3 7352 7969 5192 +3 2241 7413 2309 +3 5149 627 1011 +3 5600 6241 1674 +3 4787 2524 7353 +3 5257 161 5595 +3 1561 1563 1562 +3 5574 5588 5587 +3 7499 620 6745 +3 7354 6648 1475 +3 1428 7355 1336 +3 7356 4791 6516 +3 4510 4507 7357 +3 5620 6141 3509 +3 6379 894 6378 +3 4503 4198 4502 +3 6383 409 408 +3 7212 5785 5018 +3 6879 836 7358 +3 7319 7751 5060 +3 7149 3845 2999 +3 7359 6706 2633 +3 1792 1793 7204 +3 7360 3387 957 +3 3064 6226 6225 +3 4160 4159 2351 +3 3564 7361 3610 +3 4771 2316 2314 +3 7362 1966 4200 +3 865 866 5182 +3 4107 465 4106 +3 4342 4565 4341 +3 7364 4362 7363 +3 7366 7785 7365 +3 305 304 420 +3 7367 3128 5976 +3 7368 2162 2259 +3 7399 3341 2133 +3 7369 5657 5726 +3 4093 3285 7370 +3 7364 7363 7183 +3 2251 2364 7371 +3 2316 2252 2315 +3 3519 1529 7372 +3 7295 6478 2356 +3 5486 2349 2350 +3 5363 5937 5362 +3 7373 4930 4358 +3 5654 2263 7374 +3 7681 6595 7375 +3 5323 1558 3185 +3 5617 7376 3642 +3 2904 2906 7875 +3 6470 2701 7377 +3 7325 1543 6594 +3 7337 7378 6884 +3 5707 7175 1460 +3 3479 3480 7975 +3 4034 4035 7379 +3 1317 6473 4397 +3 4074 1190 1243 +3 5937 5385 7781 +3 5512 5492 5504 +3 6588 7380 6158 +3 3536 1531 7847 +3 1352 7381 6685 +3 590 7233 7234 +3 6122 5478 7382 +3 2530 7033 7383 +3 7384 4456 4572 +3 3971 5823 3974 +3 7385 7530 3222 +3 2107 7070 2160 +3 5674 3816 7386 +3 983 7188 3967 +3 3179 3117 3177 +3 3599 3644 7387 +3 3690 6409 3675 +3 1641 1642 6082 +3 1151 3094 7388 +3 6290 7389 7677 +3 6419 7390 6944 +3 4091 6853 4089 +3 2839 2889 7531 +3 7391 7940 3038 +3 6602 661 7392 +3 6270 5310 7393 +3 1367 6476 7394 +3 7396 2220 7395 +3 4395 5322 7839 +3 4171 2952 4172 +3 5000 8064 7097 +3 3401 5793 4520 +3 398 4665 399 +3 4355 4837 7297 +3 8096 6534 7341 +3 4482 6533 8127 +3 5133 7929 5634 +3 4895 7397 7778 +3 2254 7398 3913 +3 7249 1557 1536 +3 3251 3254 2712 +3 3314 2044 7399 +3 2189 2239 2186 +3 5404 3607 3608 +3 3110 3047 7400 +3 1868 3360 7401 +3 2572 6315 6316 +3 5933 3820 7402 +3 5536 7403 3406 +3 7404 6527 5349 +3 7226 6779 2739 +3 3160 5843 3146 +3 7406 7405 5358 +3 3537 7407 2993 +3 7708 6509 4661 +3 6623 1109 6715 +3 2088 7408 7409 +3 2870 3463 6604 +3 7410 1237 1308 +3 3459 4793 3460 +3 2148 3261 5697 +3 5567 2633 2758 +3 1524 6823 5424 +3 3969 1105 1188 +3 2964 2903 7752 +3 4093 7370 7411 +3 3429 6500 7412 +3 2309 7413 2358 +3 1579 1613 3980 +3 7414 6453 869 +3 720 4374 719 +3 7937 1494 7415 +3 1070 5994 1725 +3 5338 2037 5885 +3 5354 7416 1199 +3 4598 4687 6063 +3 1253 1196 1254 +3 4304 6454 7417 +3 5013 5015 1507 +3 6531 1722 5415 +3 3022 1210 3023 +3 2233 7418 2344 +3 7444 6839 2072 +3 2654 6416 7419 +3 4630 5322 1490 +3 2373 4416 7420 +3 4730 5457 6436 +3 6926 4710 5102 +3 7043 7478 2626 +3 4619 5058 4697 +3 1709 1800 6854 +3 5863 6017 7421 +3 5319 7422 3530 +3 4800 4691 7423 +3 5717 6028 7424 +3 6381 2373 6052 +3 7426 7425 8079 +3 7059 7058 5256 +3 3112 7427 3045 +3 5049 4299 7428 +3 7686 7764 6191 +3 4092 6448 6853 +3 467 115 116 +3 6666 7429 5398 +3 1488 7430 7431 +3 675 753 6233 +3 2160 7185 2159 +3 6455 4260 4259 +3 7432 3636 6477 +3 2238 2237 2301 +3 5000 7433 7434 +3 2223 2224 7435 +3 6942 6714 3427 +3 7525 3405 3403 +3 7436 5432 5611 +3 4552 6257 4549 +3 4788 2427 4787 +3 6327 7437 2070 +3 2936 7048 1963 +3 4869 6884 6883 +3 6420 6192 4548 +3 2519 2521 6312 +3 3969 3970 3925 +3 5993 1888 1980 +3 4245 4362 7364 +3 4431 225 6144 +3 7331 7330 1423 +3 1669 2496 7438 +3 1238 7528 1278 +3 6223 2821 2822 +3 2154 2103 7439 +3 6285 5818 6071 +3 1073 7788 1158 +3 7440 1912 2001 +3 7630 6539 1717 +3 5673 8070 7441 +3 2440 3356 6274 +3 7182 6497 7442 +3 7171 896 7172 +3 7443 935 1117 +3 6070 1041 1039 +3 3960 3824 3825 +3 7444 5405 6839 +3 984 7445 6812 +3 2569 6971 6970 +3 3246 7282 7446 +3 2784 7166 1068 +3 4949 938 7447 +3 901 5073 902 +3 7448 1422 1421 +3 7911 3443 8175 +3 4708 4709 4707 +3 2963 1699 1784 +3 5596 1658 7449 +3 4661 6509 864 +3 2760 3145 4115 +3 2571 2658 6914 +3 642 7682 7652 +3 7450 796 6294 +3 7451 3773 4287 +3 7736 792 6105 +3 7452 4419 4418 +3 7998 7453 7454 +3 1852 7283 1911 +3 2229 7455 2334 +3 3582 6989 3581 +3 7672 4018 7456 +3 7457 691 690 +3 5114 7458 7459 +3 7460 2026 7618 +3 3834 6501 5640 +3 1391 7461 1477 +3 5010 6056 4493 +3 1637 1636 1685 +3 7910 7462 982 +3 6828 2911 4347 +3 4085 2457 2456 +3 1709 5106 6357 +3 6807 4276 1893 +3 6635 6512 670 +3 1641 6082 1688 +3 3648 7463 7684 +3 7461 5746 1477 +3 7465 5091 7464 +3 1763 7006 1817 +3 1540 985 6174 +3 3162 3161 6980 +3 3055 7821 3053 +3 5094 1575 1576 +3 2291 6885 7309 +3 2588 5827 2627 +3 3628 7317 6494 +3 4121 7466 6163 +3 7467 2887 4903 +3 1383 3534 3520 +3 8203 4966 4866 +3 7468 1230 5884 +3 3983 2535 2536 +3 7671 6749 2302 +3 7332 4051 6815 +3 5037 7467 5039 +3 2540 2621 3555 +3 5163 7349 7469 +3 4210 6344 6152 +3 5288 7470 5515 +3 6325 3922 3880 +3 7779 3668 7471 +3 3772 2945 3775 +3 696 4291 5265 +3 4072 7518 4071 +3 7615 2280 7539 +3 2436 6703 5222 +3 4935 4934 5660 +3 2197 1676 1726 +3 5086 3540 6206 +3 3084 3182 3977 +3 7842 3039 5242 +3 641 6346 6347 +3 7472 1981 6256 +3 7474 7977 7473 +3 7635 2786 7475 +3 2720 5245 7476 +3 6711 5951 7477 +3 7478 2587 7164 +3 7479 7441 6365 +3 6570 6569 470 +3 7480 6549 2065 +3 7481 688 732 +3 6680 7482 216 +3 6962 7483 7802 +3 7362 6632 1966 +3 6158 7380 6675 +3 7484 7103 7277 +3 2461 5335 6204 +3 8131 642 671 +3 957 3387 3388 +3 780 779 6655 +3 6133 4336 6132 +3 1924 1925 5890 +3 4719 5553 7485 +3 7478 7164 2669 +3 5510 7325 7486 +3 5183 5180 872 +3 2406 4085 8063 +3 3316 2340 2395 +3 2654 7145 6416 +3 4061 7487 6621 +3 1717 1759 7488 +3 1911 6946 7098 +3 7490 1302 7489 +3 3047 5549 7491 +3 7492 4269 4270 +3 3262 2723 2720 +3 4803 7340 4804 +3 6252 7493 1870 +3 1795 1837 1889 +3 7494 7792 4300 +3 6768 5775 5776 +3 1334 7073 6847 +3 2034 4634 5202 +3 2646 4790 7495 +3 1005 7496 6259 +3 7701 5808 7497 +3 4096 5882 4095 +3 6726 5870 3199 +3 7165 1376 1375 +3 6626 1261 7730 +3 2259 6864 4142 +3 7498 4951 1029 +3 1066 5807 5808 +3 5462 38 65 +3 7841 621 7499 +3 1560 1559 7269 +3 3860 3789 7694 +3 2750 2752 2751 +3 4626 7500 7835 +3 2239 2187 2186 +3 5760 6613 7501 +3 6637 6527 7404 +3 5388 7502 7503 +3 6118 3439 3438 +3 6581 5199 7504 +3 1452 1833 4016 +3 3307 5286 5896 +3 7547 4250 7890 +3 7505 5554 7336 +3 7507 8024 7506 +3 4973 7508 2170 +3 1814 1849 7509 +3 2870 5771 5987 +3 7296 3591 7510 +3 1679 7018 8168 +3 4756 4754 6802 +3 4627 1488 7816 +3 2738 3415 5147 +3 7417 4444 7511 +3 4242 4244 4609 +3 1461 7512 6674 +3 874 4071 4073 +3 7329 2422 2468 +3 1371 1050 7513 +3 2481 900 899 +3 34 7514 3680 +3 1525 1526 6437 +3 5325 2211 8190 +3 2943 6073 2941 +3 1400 6555 5342 +3 7433 7097 6518 +3 3242 3279 3280 +3 7516 7882 7515 +3 6782 6297 8181 +3 1997 6960 1998 +3 8195 7047 7517 +3 6552 6551 3887 +3 7518 4073 4071 +3 3591 5928 3592 +3 530 5456 4175 +3 4743 182 3270 +3 7350 6263 4745 +3 7134 7133 7519 +3 5190 7763 7187 +3 3544 3546 3545 +3 1257 1258 6581 +3 5898 5409 5403 +3 4750 6645 7322 +3 3842 7520 3826 +3 7521 7401 1821 +3 3465 3503 3477 +3 1190 1189 1243 +3 6439 1501 1502 +3 1803 5647 246 +3 735 734 4069 +3 295 6510 463 +3 1720 1761 1813 +3 7518 984 4073 +3 7522 51 6255 +3 1959 7943 7523 +3 6274 6687 7524 +3 5490 7077 6348 +3 3636 3586 6785 +3 3405 7525 6480 +3 711 7652 748 +3 5582 3224 3225 +3 3065 7526 7527 +3 6973 1493 1492 +3 7528 5722 7714 +3 757 7529 4374 +3 2559 4730 5332 +3 7804 3223 7530 +3 4700 5315 4707 +3 7589 2787 7531 +3 2136 5362 2185 +3 3572 6016 7532 +3 1607 5596 7449 +3 3478 3502 3560 +3 7533 1816 1290 +3 2915 2917 2913 +3 5258 6617 6616 +3 1275 7744 5451 +3 5130 5674 3840 +3 4097 7534 7964 +3 7535 8128 6550 +3 6488 3187 3155 +3 3506 2697 2694 +3 6506 3433 6561 +3 7536 1059 1100 +3 7880 3129 7367 +3 6953 1862 7825 +3 2059 5642 5641 +3 4466 4564 4465 +3 537 3050 380 +3 2284 7537 1513 +3 483 422 6495 +3 3654 6542 2725 +3 3195 6726 3196 +3 7662 5866 5865 +3 2747 7538 5384 +3 6600 5418 7090 +3 6740 7503 2255 +3 7459 8204 8147 +3 5972 2806 2807 +3 4720 4297 6078 +3 7539 6080 7615 +3 7114 1362 6529 +3 7540 7948 2660 +3 586 6424 7541 +3 2571 4535 7811 +3 7220 7679 1621 +3 7681 6364 1828 +3 4592 7542 4597 +3 4597 7542 4596 +3 949 950 7543 +3 7544 6540 2516 +3 2670 7335 6548 +3 7545 7392 6180 +3 7546 7575 8011 +3 3822 3680 3679 +3 4885 871 870 +3 395 394 7547 +3 2210 2212 5501 +3 6237 5291 939 +3 1086 7311 1127 +3 7548 7042 4255 +3 7055 1159 6803 +3 1726 1727 6737 +3 2156 3704 7697 +3 7549 6157 267 +3 6745 645 673 +3 4618 4989 4992 +3 6693 5704 8036 +3 5757 1618 7550 +3 3095 376 573 +3 7015 2024 2073 +3 7551 7045 5570 +3 77 531 4499 +3 3 7552 3488 +3 4697 6166 4994 +3 1114 1070 5133 +3 3275 5416 680 +3 1166 7553 1266 +3 1152 1068 7554 +3 7555 5787 7779 +3 2229 2334 4963 +3 6114 2830 6068 +3 4459 3982 3937 +3 4460 3771 7556 +3 7312 2557 7557 +3 2764 6622 6405 +3 6730 194 228 +3 7093 7558 6579 +3 5876 7559 2643 +3 7554 1154 1155 +3 397 6026 399 +3 7504 1322 7927 +3 3548 2666 2744 +3 4027 4021 5833 +3 5459 4660 4662 +3 5616 7560 7561 +3 783 7562 8123 +3 3998 7563 3949 +3 7564 553 326 +3 6295 1941 2775 +3 217 4743 5672 +3 2580 7565 2623 +3 4064 713 712 +3 4 3 1 +3 5423 7566 7251 +3 4063 5243 2150 +3 6215 1579 3934 +3 5709 7224 6860 +3 1902 1950 5754 +3 3635 3585 3584 +3 2282 6324 2283 +3 2790 6998 2892 +3 2699 6786 6115 +3 2055 7567 3060 +3 6414 4229 7568 +3 4912 7569 7570 +3 1104 7976 1148 +3 5444 1633 5852 +3 8160 4116 7571 +3 6182 25 5260 +3 7572 2903 2964 +3 6910 5312 5311 +3 5146 495 3420 +3 3084 7878 3083 +3 7573 2270 7911 +3 5840 5839 7033 +3 1095 1094 1178 +3 3968 7064 6450 +3 4676 4443 7574 +3 3197 635 7575 +3 2798 4617 2844 +3 1231 4819 7576 +3 3975 683 1365 +3 2799 7577 2906 +3 3738 4383 4382 +3 7408 5733 7578 +3 4774 7961 5862 +3 2814 2876 2875 +3 7579 5405 7444 +3 385 7580 441 +3 3415 2661 2618 +3 5891 1447 6174 +3 3235 6178 7107 +3 1638 7581 3400 +3 4977 6606 6605 +3 2850 7582 7293 +3 7583 5690 2058 +3 828 855 7584 +3 5498 632 7585 +3 6960 6085 6084 +3 8039 5439 2874 +3 1515 1004 5692 +3 5819 4383 3783 +3 7824 5677 1226 +3 1667 1666 4635 +3 3267 327 3268 +3 7440 7586 1854 +3 3352 1566 3354 +3 3551 6201 3552 +3 7587 183 184 +3 7588 8092 451 +3 5465 6759 5464 +3 7995 8030 1041 +3 106 143 178 +3 7589 4267 2638 +3 2079 6566 7590 +3 6123 7032 6122 +3 2108 2064 5681 +3 1557 2293 1537 +3 876 5203 845 +3 2274 7591 2337 +3 3329 3328 6808 +3 6646 7592 7379 +3 351 352 7593 +3 8006 6668 7594 +3 7595 3997 6308 +3 6295 5791 6806 +3 7596 1340 6574 +3 7597 2728 2727 +3 6706 6705 6603 +3 5480 6168 6167 +3 6719 651 6611 +3 7598 7400 7049 +3 7498 4872 5893 +3 6631 1534 1571 +3 696 697 4291 +3 7555 6732 5787 +3 1805 7031 1425 +3 6778 6777 3230 +3 1599 7251 5134 +3 6755 5794 7860 +3 6515 6031 4773 +3 2101 2060 2102 +3 7199 7198 832 +3 3819 4653 3818 +3 4201 3224 573 +3 2728 3334 3333 +3 1344 1345 7266 +3 5035 7599 8163 +3 5215 3786 5216 +3 1549 1620 1585 +3 750 786 825 +3 1236 1180 7600 +3 711 748 7236 +3 4460 2824 3771 +3 5503 4173 4174 +3 7561 6013 7289 +3 3281 7448 7601 +3 6507 7602 4511 +3 7721 7603 774 +3 7584 4516 7052 +3 12 7762 7604 +3 5460 7028 7605 +3 1942 7687 7606 +3 3735 3736 5471 +3 7327 803 7326 +3 4312 4542 5764 +3 4721 2955 4723 +3 6791 2390 7025 +3 950 3239 951 +3 789 832 830 +3 7607 6579 6578 +3 4310 4454 7608 +3 6399 6339 7014 +3 7783 927 983 +3 529 7214 7213 +3 6923 1678 3206 +3 7294 6076 6075 +3 437 5097 4578 +3 7609 607 630 +3 5537 6473 3856 +3 1554 5860 7610 +3 1136 1138 5298 +3 2233 2344 2342 +3 2034 5202 6231 +3 7738 4164 4153 +3 7842 2527 3039 +3 879 878 2762 +3 586 7541 7611 +3 409 5975 4013 +3 6823 7612 1527 +3 4909 4910 4908 +3 301 562 352 +3 6984 6983 7257 +3 791 790 3189 +3 7613 1 6326 +3 2444 7134 7519 +3 4365 6940 4615 +3 2627 2670 7163 +3 3171 6645 4645 +3 2246 2245 6647 +3 1942 1943 7275 +3 1031 1033 1078 +3 5454 7548 404 +3 4925 4955 4957 +3 4285 1284 4284 +3 2339 2392 6265 +3 4327 1954 1999 +3 4277 4151 5795 +3 7614 151 4434 +3 5526 5525 6262 +3 4298 5051 5050 +3 3350 1339 7615 +3 858 7616 6432 +3 7888 7617 888 +3 1464 1511 4847 +3 7618 8010 6904 +3 1199 7416 1200 +3 5020 3803 7619 +3 6633 6343 7620 +3 4819 5965 7200 +3 5758 6216 1234 +3 2225 5590 5591 +3 1438 2124 7621 +3 2354 4684 5004 +3 3896 7020 3897 +3 7623 3108 7622 +3 6552 1544 7624 +3 5950 7625 5949 +3 4521 5810 4522 +3 4605 7263 6349 +3 7415 5968 1590 +3 7016 1338 7626 +3 3002 3001 4106 +3 4160 2665 7549 +3 7430 6087 7431 +3 1457 1458 1493 +3 6283 6284 7627 +3 3828 3961 3829 +3 4422 4437 7628 +3 4205 7376 2304 +3 5159 6659 1090 +3 3238 5153 949 +3 4800 7423 4825 +3 7301 3916 3917 +3 1988 5163 5164 +3 4197 7629 1431 +3 1661 6359 4132 +3 7458 8204 7459 +3 1498 6695 1499 +3 5551 6879 958 +3 7490 7489 4890 +3 7631 8203 7630 +3 2392 2716 2717 +3 2457 5370 2458 +3 32 7632 7633 +3 3637 3639 3638 +3 6603 5969 2758 +3 1259 7634 1325 +3 7161 6505 7160 +3 6986 7635 6837 +3 5337 564 379 +3 4948 710 746 +3 86 6649 113 +3 4783 5267 4782 +3 1118 4926 4955 +3 6048 7636 1017 +3 1617 6360 6359 +3 8010 6414 7568 +3 2317 6138 3703 +3 8139 7589 7832 +3 7638 7637 6636 +3 776 8089 7922 +3 7639 2398 2445 +3 3257 3291 3256 +3 1609 6729 5596 +3 7243 5930 455 +3 1441 4115 6253 +3 2521 2520 6312 +3 5923 3645 6242 +3 2553 2635 2636 +3 2556 7640 8139 +3 6932 2820 1095 +3 2639 2638 6701 +3 940 939 6356 +3 2632 6093 6646 +3 1380 7014 6350 +3 4172 7641 4165 +3 6957 229 155 +3 2964 7752 2965 +3 732 688 5095 +3 1479 5094 1542 +3 7728 1902 7642 +3 3562 3561 6670 +3 4857 7643 6917 +3 7196 106 142 +3 7981 4685 5494 +3 7644 5785 5019 +3 4451 5494 4794 +3 4356 7465 7464 +3 7645 6820 3459 +3 5646 2152 7646 +3 7632 33 7633 +3 7647 6587 2322 +3 1669 7438 4913 +3 521 237 7648 +3 7394 795 833 +3 1345 6753 5450 +3 7649 3783 3738 +3 3126 5750 5793 +3 3872 7650 691 +3 4834 4993 4992 +3 7651 7417 7511 +3 2498 2500 2544 +3 7652 8119 748 +3 7186 3706 6612 +3 6652 5679 6653 +3 883 7653 932 +3 4313 3693 7805 +3 6101 4501 6425 +3 7063 5209 2768 +3 7245 7654 5913 +3 4366 4369 4618 +3 669 709 744 +3 1477 7655 1478 +3 3784 3785 4383 +3 1367 7394 1368 +3 7657 7656 7087 +3 4397 6541 4399 +3 4881 7252 4879 +3 1357 6618 1406 +3 7418 7658 2344 +3 5944 6707 5686 +3 2226 2634 2272 +3 7659 2312 2243 +3 7660 824 854 +3 179 7661 7086 +3 5607 6859 7919 +3 159 160 197 +3 770 6014 7662 +3 4797 4823 4822 +3 67 39 7663 +3 2576 2662 2740 +3 6700 839 3570 +3 7516 7664 3513 +3 1024 5331 7138 +3 7665 2335 4473 +3 1511 6748 1512 +3 6875 903 7344 +3 1825 1826 7343 +3 1532 1603 7666 +3 7667 1589 1672 +3 6222 7618 6904 +3 4813 4782 4812 +3 5589 3608 7361 +3 6108 5656 3425 +3 5274 5980 5979 +3 1362 1417 7930 +3 7669 7668 6126 +3 6438 7670 3892 +3 7671 2191 6749 +3 6108 5657 5656 +3 1950 1903 2950 +3 662 661 6602 +3 256 255 253 +3 1260 1259 1325 +3 539 7672 4017 +3 5949 7625 5499 +3 1281 5847 4076 +3 7008 3948 3904 +3 6219 7853 6790 +3 3981 1794 3982 +3 7673 5797 5796 +3 6520 5489 6521 +3 7674 3151 3156 +3 3632 1469 8060 +3 4527 4528 7105 +3 7564 259 553 +3 7795 578 577 +3 2449 4209 4208 +3 3514 1873 6275 +3 6296 8006 5203 +3 5329 772 7675 +3 4193 6930 6931 +3 6053 3099 3100 +3 7254 7676 7677 +3 6155 843 920 +3 764 6150 7678 +3 3065 3064 3026 +3 1619 7679 4637 +3 7112 4335 2430 +3 5473 1060 6619 +3 7174 6332 2249 +3 3662 7680 2121 +3 4978 4850 4979 +3 7935 1779 7681 +3 5101 5100 5795 +3 5134 7251 1689 +3 7652 7682 8119 +3 7432 5350 7683 +3 3525 5593 5592 +3 7684 2988 2989 +3 7189 2419 2781 +3 7686 5530 7685 +3 7687 5997 7110 +3 7614 83 151 +3 7688 5524 3008 +3 4805 4695 5904 +3 7689 7254 3385 +3 7690 6773 4126 +3 3938 3891 5383 +3 3364 4875 6089 +3 7530 3092 3222 +3 1700 7691 5532 +3 2771 6773 7690 +3 67 38 39 +3 2835 7692 4145 +3 1371 7513 8111 +3 7693 3499 3498 +3 7505 2082 5554 +3 5996 5995 1475 +3 7482 179 216 +3 7067 6253 7104 +3 3860 7694 3884 +3 1533 7258 7257 +3 2754 2816 7695 +3 2970 5670 5470 +3 4347 6272 4569 +3 6554 7485 1063 +3 7697 7696 3762 +3 5410 7698 3827 +3 6711 7477 1468 +3 8047 3069 7699 +3 1816 1260 1290 +3 4439 1167 7700 +3 6295 6806 7091 +3 7819 115 155 +3 3088 3089 5753 +3 863 4661 8102 +3 6043 7701 1065 +3 7796 7702 1098 +3 5664 5216 3740 +3 1364 5770 7703 +3 3082 3113 3182 +3 2483 2482 2526 +3 1234 5288 5515 +3 725 3383 726 +3 5307 3393 4901 +3 1208 7704 4509 +3 3112 7705 7427 +3 2139 2138 5879 +3 3308 1735 5626 +3 7049 7400 4537 +3 6867 930 5324 +3 6412 1956 5639 +3 6168 576 505 +3 5687 7510 3590 +3 5670 7706 5671 +3 7598 3110 7400 +3 7707 8210 6657 +3 3082 3042 7822 +3 5232 2693 5231 +3 7708 810 6509 +3 7469 4907 7709 +3 4699 5316 5315 +3 1728 4489 5196 +3 2223 7435 7990 +3 7500 4747 7835 +3 4080 6532 1545 +3 1348 8207 7740 +3 4856 4855 6390 +3 7710 1702 1790 +3 1816 5043 1260 +3 1111 5156 1112 +3 2385 7112 2431 +3 5374 5508 7711 +3 653 654 5961 +3 1244 5407 7712 +3 2918 3553 3329 +3 7713 8007 4962 +3 7714 7669 6126 +3 4082 7715 4083 +3 7560 4242 7561 +3 6229 5424 5423 +3 7515 6903 2141 +3 3766 3767 3764 +3 5977 2962 7582 +3 7377 1440 7716 +3 2217 4905 7717 +3 2003 1956 3313 +3 7194 3855 3894 +3 3252 3253 3251 +3 6064 7159 2013 +3 949 7543 948 +3 4647 2691 7718 +3 5452 7719 3879 +3 2852 2854 7572 +3 6800 5041 5457 +3 2909 2910 7720 +3 7721 8089 880 +3 4424 4426 7274 +3 1264 1263 1330 +3 7722 704 6451 +3 6065 4974 8108 +3 4093 7723 5045 +3 3750 7080 3751 +3 3459 3460 5270 +3 3364 2654 7419 +3 2754 7695 2878 +3 1163 6704 7724 +3 1509 1562 5217 +3 5516 2983 5106 +3 5908 8127 6533 +3 7422 5072 7725 +3 1065 7701 7497 +3 7334 7726 7748 +3 506 7727 566 +3 1703 3754 5579 +3 7728 1844 1902 +3 2038 7729 3212 +3 938 890 940 +3 309 4871 310 +3 1917 5531 7739 +3 4863 1758 4864 +3 7731 6626 7730 +3 207 6519 7732 +3 1852 8013 7283 +3 5209 1110 5310 +3 6492 6046 6045 +3 1336 7355 1338 +3 5092 847 1922 +3 5116 5761 7901 +3 5738 2394 5841 +3 3941 3942 7767 +3 4676 7574 5267 +3 2104 3801 2157 +3 26 48 7158 +3 648 623 676 +3 7238 3720 3746 +3 6860 944 992 +3 2789 2791 2790 +3 3140 5376 3025 +3 7697 3704 7696 +3 6298 1551 2034 +3 7733 5068 3177 +3 3026 6338 1330 +3 7734 416 578 +3 49 545 3710 +3 4678 5910 7735 +3 2208 2164 8014 +3 1040 1039 5903 +3 757 7736 7529 +3 2671 7737 7483 +3 7184 7738 6627 +3 6412 7739 2047 +3 6651 7740 1481 +3 3462 2663 2662 +3 5669 5680 8059 +3 1602 1695 2534 +3 7516 7515 7664 +3 4864 7488 6404 +3 7742 7062 7741 +3 1787 1834 1832 +3 7743 6400 1549 +3 5219 2197 6209 +3 1984 2020 6162 +3 6287 7441 7479 +3 1390 7863 5996 +3 1130 1224 1222 +3 7744 1231 7576 +3 1603 1602 1647 +3 7926 5837 3359 +3 3460 2538 5355 +3 6915 3021 994 +3 44 7196 105 +3 5831 4915 4916 +3 5076 932 6608 +3 5453 3657 7193 +3 610 7010 609 +3 847 5464 6801 +3 7536 1058 1057 +3 7012 7745 1572 +3 4736 8122 4775 +3 2508 5344 5314 +3 1522 1524 1523 +3 5941 6341 5784 +3 2194 4364 7413 +3 7746 1715 4638 +3 3853 3852 3798 +3 1665 1715 7746 +3 7491 543 509 +3 5429 2607 7747 +3 7748 3311 1860 +3 7455 7916 2334 +3 4168 6047 5142 +3 6873 6872 6243 +3 739 6457 814 +3 7784 5849 3472 +3 5265 5359 3739 +3 1815 1909 1908 +3 7067 7104 6457 +3 8129 4778 3175 +3 133 98 5296 +3 6082 5665 1776 +3 8027 7151 7792 +3 1174 7749 3577 +3 1038 6378 8115 +3 5148 5147 7750 +3 5060 7751 6741 +3 7157 7595 3909 +3 4861 4862 7785 +3 7103 570 7277 +3 7530 3091 3092 +3 2965 7752 4307 +3 6164 4122 3094 +3 7753 3939 6282 +3 872 3783 7649 +3 4994 5412 7754 +3 6458 4266 7475 +3 7544 5115 4647 +3 5066 292 293 +3 6073 2944 3694 +3 6205 8200 1676 +3 2053 6831 2052 +3 7968 254 497 +3 5986 7755 4254 +3 7756 4014 5975 +3 8159 1814 7509 +3 727 3436 6964 +3 2634 2227 2333 +3 2726 5330 5586 +3 7757 2331 2433 +3 2227 4963 2333 +3 7759 2130 7758 +3 808 809 6440 +3 4911 7366 7365 +3 7426 7347 7425 +3 2256 3945 7760 +3 7338 837 3529 +3 4559 7761 4473 +3 24 76 7762 +3 8114 368 7763 +3 1055 6933 6932 +3 3906 7764 3848 +3 6619 1103 1104 +3 1809 1811 1810 +3 5895 1191 1770 +3 4188 7765 7308 +3 2587 7163 7164 +3 3052 7766 4469 +3 3941 7767 7768 +3 7769 28 393 +3 7453 7770 7454 +3 6949 7771 3707 +3 6327 2022 2683 +3 7772 2128 5855 +3 6981 5353 1035 +3 1420 3562 3244 +3 1025 3569 5557 +3 2559 6235 4730 +3 5272 1483 7773 +3 4370 4372 6959 +3 2324 5378 2323 +3 7774 5918 7218 +3 7775 3023 1210 +3 5722 7669 7714 +3 164 126 165 +3 3547 7516 3513 +3 4032 4100 4103 +3 6407 2204 2203 +3 1928 1881 4198 +3 7616 6294 7776 +3 6066 49 7777 +3 3991 3944 3945 +3 7473 6041 641 +3 4319 1677 1730 +3 1916 5287 1917 +3 1213 1212 3279 +3 1649 1696 4587 +3 4981 7118 7778 +3 3770 3771 6824 +3 518 519 4247 +3 7111 7779 3667 +3 6769 5981 7962 +3 6260 6826 1190 +3 4453 5671 7706 +3 1314 1397 5421 +3 6222 6904 3661 +3 1082 7075 1162 +3 5901 6151 6150 +3 7780 6200 1168 +3 4336 2092 7781 +3 7782 7399 2132 +3 6296 6668 8006 +3 3965 874 7783 +3 1478 7655 5713 +3 4793 7908 3508 +3 2918 2920 3553 +3 7693 7784 7351 +3 7266 1391 7267 +3 5907 7296 7510 +3 4571 4573 4572 +3 7686 7685 3808 +3 4914 4913 7785 +3 4960 4961 4924 +3 2769 618 6698 +3 7786 5915 4481 +3 1007 7308 7765 +3 2317 7787 6138 +3 3095 3096 376 +3 7200 1547 8026 +3 825 786 6422 +3 114 153 6649 +3 7788 1120 1159 +3 797 7789 1220 +3 6999 4090 4089 +3 5773 5486 2300 +3 7106 3277 5345 +3 1712 5106 1663 +3 2804 2805 2803 +3 5615 7790 7360 +3 6803 7288 1289 +3 4451 4682 5494 +3 766 5931 5281 +3 7791 8172 5042 +3 4843 8027 7792 +3 6213 6212 1228 +3 185 7793 7228 +3 2315 2317 6069 +3 7407 7794 7795 +3 6309 7503 7502 +3 8148 974 7796 +3 4327 2036 4328 +3 8218 572 147 +3 3350 7615 6080 +3 4603 4358 4605 +3 7386 268 3674 +3 5084 5083 5814 +3 7798 8120 7797 +3 802 8025 3504 +3 5193 5961 7799 +3 7406 6099 7405 +3 3339 723 8072 +3 6554 4719 7485 +3 2908 2907 2969 +3 7800 662 6602 +3 6889 7801 3912 +3 4384 701 2213 +3 2272 2273 5590 +3 4920 4922 4962 +3 6630 6629 7249 +3 7803 7802 2818 +3 328 6671 7804 +3 3199 1296 7872 +3 6884 7378 5067 +3 4542 7805 4513 +3 967 6340 6744 +3 1029 1073 4874 +3 7692 2836 4147 +3 5973 7806 7807 +3 897 7052 5226 +3 7563 3999 3949 +3 6664 2216 5378 +3 7808 4149 6750 +3 5897 7809 1096 +3 4876 4949 7447 +3 6113 4522 4536 +3 1277 1307 1306 +3 61 60 93 +3 4641 4640 3018 +3 5630 6558 7810 +3 1235 7993 1307 +3 2823 6710 5977 +3 8181 2571 7811 +3 7813 7812 881 +3 5858 2291 2171 +3 3250 5953 5954 +3 3484 69 3493 +3 3487 41 3492 +3 7814 3714 5579 +3 1782 6430 1880 +3 3281 7601 1297 +3 3769 2593 2630 +3 8145 592 616 +3 2426 4787 7353 +3 4608 5701 6681 +3 7815 3526 5593 +3 5212 2986 6431 +3 5818 2380 2473 +3 4625 7816 7897 +3 1481 1480 5510 +3 3410 3412 7253 +3 2753 4359 2754 +3 5031 2420 5030 +3 4367 7817 3831 +3 5913 7654 1401 +3 7894 7451 7199 +3 735 694 736 +3 7659 2247 2312 +3 4943 6366 4944 +3 2720 7476 2652 +3 1615 1752 6816 +3 7775 1210 1211 +3 7250 4294 4436 +3 4447 7316 4450 +3 4243 6825 4244 +3 7840 1075 1121 +3 8149 3080 3037 +3 6570 7865 7756 +3 6940 4616 6939 +3 6793 6145 7241 +3 3954 7818 5608 +3 5933 7402 4045 +3 7575 7819 8011 +3 5578 5075 7820 +3 2312 2244 2313 +3 6315 5249 5250 +3 3503 5264 3560 +3 8166 2797 5078 +3 6623 6715 1069 +3 5417 2799 5418 +3 270 272 5768 +3 6412 2047 2045 +3 3879 2780 2831 +3 1083 1082 5625 +3 3609 3611 3610 +3 4062 5243 4063 +3 7635 7475 6837 +3 7821 6988 3016 +3 7953 5757 4280 +3 3083 3045 3044 +3 5857 7925 8062 +3 5659 2946 3951 +3 7390 7242 6944 +3 5093 3023 7775 +3 4830 3762 4831 +3 7637 7822 2860 +3 4684 7823 7094 +3 5086 6206 7155 +3 6807 6806 5791 +3 4970 4969 7824 +3 4258 4387 4257 +3 5374 7711 134 +3 1754 1890 6634 +3 6789 1435 1482 +3 2369 2368 3808 +3 5594 3403 3404 +3 7197 6113 753 +3 5301 7825 5287 +3 5731 5824 5825 +3 2741 6779 7226 +3 1356 1407 6640 +3 7826 7868 3890 +3 7827 2359 2408 +3 7657 7087 5328 +3 8031 7828 7410 +3 7829 4938 5667 +3 4350 510 4575 +3 7830 3986 5143 +3 3381 8032 7831 +3 1420 1419 3562 +3 7483 7737 3737 +3 7346 6832 5801 +3 4267 7589 7531 +3 2670 6548 2671 +3 806 807 841 +3 5424 1527 7566 +3 6729 1610 1659 +3 7237 3505 7429 +3 8020 2556 7832 +3 1333 7073 1334 +3 2441 6781 6982 +3 7992 3861 4283 +3 7086 7661 3301 +3 7833 4404 5084 +3 1592 7834 8200 +3 4657 4295 4656 +3 1430 3721 3722 +3 3126 6181 3175 +3 6155 920 6156 +3 6439 5957 1123 +3 3793 4628 3792 +3 552 351 6461 +3 7413 7827 2358 +3 932 7653 815 +3 7669 1310 7668 +3 5590 2331 7757 +3 3213 3212 7729 +3 1327 1329 6610 +3 1992 5942 7318 +3 3006 4423 2953 +3 4626 7835 4627 +3 7525 2815 6480 +3 6022 7128 5321 +3 4786 4678 7735 +3 5874 6967 7836 +3 4789 7093 6579 +3 5085 2582 6948 +3 3450 3516 7244 +3 2446 6683 7837 +3 1785 1787 1786 +3 1650 1698 7255 +3 6530 1716 1801 +3 7838 3152 4898 +3 4395 7839 1285 +3 5987 7206 5264 +3 1076 1075 7840 +3 7693 7351 3499 +3 283 241 4871 +3 1750 6747 6746 +3 61 62 584 +3 7841 601 621 +3 622 647 674 +3 886 7304 936 +3 2719 862 2098 +3 5629 6892 2578 +3 6280 7137 6281 +3 4704 4702 4671 +3 810 6829 2002 +3 6004 4683 7608 +3 4340 7131 7842 +3 2821 2757 7843 +3 4610 4802 5238 +3 5437 6322 2828 +3 5853 1774 5333 +3 7844 5575 4769 +3 1915 6514 1858 +3 4607 7289 4693 +3 1032 1031 6258 +3 1608 5596 1607 +3 7566 1567 7251 +3 6410 2379 6606 +3 6270 7393 6977 +3 5545 7607 4821 +3 5949 5602 7303 +3 4627 7835 7845 +3 7079 2026 7460 +3 6685 7381 5805 +3 5610 4251 5060 +3 7846 7880 7367 +3 6575 1743 8113 +3 3536 7847 3520 +3 1890 7848 7849 +3 3042 3083 7850 +3 4325 4485 4486 +3 1884 1934 1933 +3 5479 1233 7310 +3 4429 263 293 +3 7851 7089 3117 +3 2161 5392 2162 +3 1045 6794 5436 +3 7852 1747 1782 +3 6965 6964 684 +3 7853 2194 2241 +3 562 561 6037 +3 6751 7854 6475 +3 7855 1655 7125 +3 6656 7856 3107 +3 1754 6634 1705 +3 1707 7035 1755 +3 2550 2594 2595 +3 2838 6901 4148 +3 7858 6890 7857 +3 1702 6990 1790 +3 7663 5482 3656 +3 2738 7081 7971 +3 4395 1285 1192 +3 4725 7859 6778 +3 3367 2661 3369 +3 5971 447 6857 +3 1388 6648 7354 +3 1946 7860 4411 +3 1436 7861 4054 +3 5736 7862 1910 +3 7863 7201 5996 +3 7557 7864 7312 +3 3909 6308 4753 +3 5102 4709 5636 +3 7368 5914 2159 +3 2965 4307 4306 +3 7865 4014 7756 +3 5021 1456 5020 +3 4860 2919 2918 +3 925 8224 6743 +3 1488 7431 1489 +3 7866 4063 2149 +3 2962 2965 3010 +3 7786 5916 5915 +3 876 6296 5203 +3 1110 1109 4289 +3 3651 3652 6742 +3 2335 7893 4473 +3 1233 5758 7286 +3 6836 6339 8124 +3 2833 4144 7867 +3 1748 5254 1749 +3 7013 810 7708 +3 5964 980 981 +3 6876 4662 4660 +3 7888 818 7617 +3 3795 6694 7868 +3 1357 1406 1407 +3 7869 5671 4310 +3 3260 4663 5812 +3 7492 7870 4269 +3 7871 919 5779 +3 3574 6305 6744 +3 2770 1448 1449 +3 3162 5070 7872 +3 2655 5834 6542 +3 3775 2999 3774 +3 7873 8044 3749 +3 7874 5593 3526 +3 7875 2905 2968 +3 1794 1751 4046 +3 2541 2583 7876 +3 1893 6707 1892 +3 7130 5835 3518 +3 1387 1472 1686 +3 3036 7758 2130 +3 2894 6504 5708 +3 7862 1852 1910 +3 7223 5566 7222 +3 5055 5742 4997 +3 4302 4303 6385 +3 1178 1143 8031 +3 7763 7877 7187 +3 4467 4563 4564 +3 3112 7878 7949 +3 4627 7845 1249 +3 674 7197 675 +3 7880 7879 2323 +3 7881 5870 1505 +3 2718 6104 2528 +3 5760 7501 5136 +3 3802 2727 5330 +3 2573 1176 5756 +3 1941 4135 1940 +3 2009 2051 7882 +3 7883 547 3323 +3 7935 6417 1779 +3 404 405 402 +3 4941 4944 4932 +3 6309 3762 7696 +3 4202 2192 6667 +3 4304 7417 7651 +3 1531 1469 5982 +3 5673 7884 8070 +3 3246 7446 1560 +3 900 2131 3020 +3 850 882 4390 +3 7347 7346 7425 +3 3519 7372 7155 +3 78 583 7885 +3 7870 6196 2557 +3 1343 7886 7863 +3 6092 5173 5732 +3 7396 7395 7887 +3 2321 4271 6247 +3 2949 4165 4164 +3 7888 5006 2069 +3 5595 3144 237 +3 4790 2647 7495 +3 6139 2369 6138 +3 2909 7720 2970 +3 1779 7889 6135 +3 7890 4993 4991 +3 4340 7842 5487 +3 6682 6750 4152 +3 6233 4518 5528 +3 7427 3046 7891 +3 2437 1225 5698 +3 7892 1882 7159 +3 1289 6581 7504 +3 4074 6997 4075 +3 302 2792 562 +3 3491 3488 7552 +3 4475 4474 7893 +3 2706 3041 2860 +3 7451 7894 3773 +3 919 6795 918 +3 7895 4980 4902 +3 6921 3320 6372 +3 525 357 356 +3 5063 5377 3867 +3 7938 7896 3756 +3 7723 2043 5045 +3 1115 7897 1489 +3 3042 7850 3043 +3 5770 5193 5194 +3 380 3833 381 +3 5626 1734 5627 +3 6188 4199 7004 +3 5541 5255 1815 +3 6756 5124 1972 +3 157 120 6536 +3 6799 2461 7898 +3 3166 7899 7018 +3 7900 4630 1490 +3 754 7901 788 +3 2335 4475 7893 +3 7903 10 7902 +3 2980 535 501 +3 1272 5343 7202 +3 3954 5608 5966 +3 2759 2760 1441 +3 4861 4864 7271 +3 4970 6200 6199 +3 7904 150 8179 +3 1308 5628 7905 +3 7287 1866 7906 +3 2177 2228 2227 +3 842 6159 843 +3 7907 8050 1187 +3 5447 2540 7908 +3 1399 5678 6805 +3 1657 1607 1656 +3 4137 5580 1939 +3 1358 1323 7909 +3 6380 2685 2214 +3 870 7910 926 +3 767 6180 766 +3 5845 4790 2646 +3 2364 2366 2365 +3 1581 2105 1710 +3 7865 533 4014 +3 222 6576 3101 +3 2268 7911 6426 +3 7912 6210 1919 +3 558 224 334 +3 7913 4693 4692 +3 175 3376 6811 +3 775 8206 774 +3 5156 5157 4810 +3 5737 1816 7533 +3 6447 2983 5791 +3 1163 7724 7914 +3 5669 8059 5969 +3 3451 5263 5676 +3 4852 4973 4853 +3 1363 1376 1423 +3 7915 2435 2484 +3 5217 6545 5166 +3 7130 8220 1777 +3 7344 8005 4287 +3 2335 7916 4475 +3 3433 3432 493 +3 7177 2898 7917 +3 1547 7267 6630 +3 7918 3029 1500 +3 4885 1697 5471 +3 5723 5722 7528 +3 6563 2788 1455 +3 6171 6386 1393 +3 4587 1747 7852 +3 7297 5607 7919 +3 7920 5624 4688 +3 7687 2776 5997 +3 3320 6808 6358 +3 1515 5692 6419 +3 6968 8202 3495 +3 7921 8081 3623 +3 2083 2126 2127 +3 5932 5279 7922 +3 7923 3368 3365 +3 4755 4756 6943 +3 2297 2298 2183 +3 7639 2444 2734 +3 2342 2344 2343 +3 3140 3063 7924 +3 7168 7925 4441 +3 7071 5235 227 +3 7926 7912 5837 +3 1553 5137 6153 +3 7736 3236 7529 +3 3466 6376 3467 +3 7066 5208 3159 +3 717 5810 6580 +3 6618 7927 1409 +3 5927 672 7682 +3 6957 6956 229 +3 6994 6533 4890 +3 7928 3521 7596 +3 4271 2322 2513 +3 7929 6055 5634 +3 419 420 484 +3 69 3486 3493 +3 6529 7930 8065 +3 616 592 5261 +3 1970 8051 2061 +3 651 6558 719 +3 7676 6596 7677 +3 4315 4317 6425 +3 6046 5227 6995 +3 3391 4901 3392 +3 6063 4797 7931 +3 7932 1702 7710 +3 7933 1671 5399 +3 274 273 298 +3 3221 7221 507 +3 3753 3714 3713 +3 7934 6 6902 +3 7935 7375 1693 +3 583 582 7885 +3 617 7936 640 +3 1552 7937 6035 +3 1003 1223 1222 +3 3274 758 793 +3 1672 4706 1719 +3 6678 1194 5317 +3 3790 2439 1350 +3 7938 7160 7896 +3 4145 7692 4146 +3 6887 6278 7939 +3 6876 5635 4700 +3 6271 978 7940 +3 3742 3723 3725 +3 7220 1620 5202 +3 7212 1355 4049 +3 600 622 5455 +3 7348 1871 7493 +3 5234 7941 6822 +3 6767 5749 6766 +3 1128 1129 1167 +3 312 525 355 +3 7878 3977 7949 +3 986 987 934 +3 1862 1865 1864 +3 5532 7691 5485 +3 5960 6306 3745 +3 8114 7763 7942 +3 3129 3128 7367 +3 7523 7943 2294 +3 7944 3107 7856 +3 1640 1688 7945 +3 1326 1361 1360 +3 7281 3729 7946 +3 1213 1163 7914 +3 7947 290 4760 +3 73 137 71 +3 5387 5431 3534 +3 4343 4344 4565 +3 7722 3542 704 +3 6873 4274 5211 +3 3698 6268 4543 +3 4098 2632 4036 +3 5838 3653 3615 +3 5290 7182 7442 +3 2707 2651 2706 +3 5547 6797 7948 +3 7923 7750 3368 +3 3516 1691 3518 +3 3112 7949 3093 +3 2384 7950 2383 +3 7952 7951 8076 +3 1215 1166 1266 +3 7953 6449 1618 +3 8149 7954 7955 +3 7956 7728 7642 +3 6204 2548 7957 +3 2204 2159 4500 +3 7674 6988 7821 +3 1466 675 715 +3 2749 2751 7538 +3 1934 5848 1979 +3 7958 1694 6572 +3 6992 7688 6993 +3 6283 7627 6234 +3 7174 7245 4284 +3 7960 7959 4505 +3 6117 1076 7840 +3 1487 4625 5780 +3 7961 1804 5026 +3 2494 2446 7837 +3 5847 1188 7082 +3 3928 7962 3883 +3 2729 2136 2184 +3 3420 3421 2981 +3 7084 7247 5927 +3 5902 2371 7867 +3 6130 4113 6129 +3 3308 5627 5286 +3 7963 6206 3541 +3 332 4667 333 +3 7965 4792 7964 +3 2669 7803 6928 +3 421 422 484 +3 5152 1694 7958 +3 7286 1234 5540 +3 7102 7231 7230 +3 7481 689 688 +3 3738 7156 3727 +3 3305 6255 545 +3 7748 7726 3311 +3 7747 2649 7966 +3 3989 7760 3941 +3 4390 934 6072 +3 991 6772 7967 +3 7968 256 254 +3 5361 1364 7969 +3 1139 7970 5304 +3 6455 462 295 +3 271 270 3689 +3 5496 281 280 +3 7704 7038 4509 +3 3054 1192 1247 +3 6140 4773 1716 +3 5581 5580 2020 +3 7546 3197 7575 +3 6226 3066 3027 +3 4241 4607 8120 +3 7971 2926 2869 +3 6272 4232 5107 +3 7551 2603 7045 +3 6342 757 4374 +3 7342 7341 3662 +3 5851 7239 4789 +3 3213 6590 6591 +3 4238 4240 7373 +3 7972 3168 5369 +3 6030 1348 7179 +3 3240 996 7127 +3 7973 5103 6131 +3 4748 5974 5912 +3 5829 7030 7979 +3 14 26 25 +3 4341 4563 4561 +3 1570 7004 7974 +3 6588 2490 2533 +3 3744 4283 5960 +3 7099 7098 6085 +3 6432 6431 956 +3 364 8117 7975 +3 5642 6880 2100 +3 1437 1438 7621 +3 7631 7630 1758 +3 4706 5766 4705 +3 4968 1173 6213 +3 3532 3924 3531 +3 7976 1150 1149 +3 1009 970 7028 +3 6699 6698 617 +3 6156 6245 6795 +3 7977 5564 593 +3 1973 1972 6151 +3 1625 5290 1670 +3 5129 2932 5401 +3 7979 7978 4066 +3 6978 2947 3002 +3 5860 6560 5859 +3 3363 5432 7436 +3 6692 4681 4683 +3 7742 7741 1501 +3 7980 2645 2702 +3 7981 4686 4685 +3 2546 2590 2589 +3 6195 4311 7982 +3 2378 6897 6898 +3 5739 815 850 +3 5127 5509 7983 +3 7805 7602 4513 +3 1463 1462 7984 +3 7359 6682 6706 +3 6161 6720 6160 +3 4004 5644 3959 +3 6086 1841 1840 +3 2025 2075 7985 +3 4872 4873 4953 +3 4764 778 817 +3 2468 2469 2514 +3 770 7662 811 +3 3774 5445 3695 +3 7936 4112 6511 +3 7987 7986 8130 +3 8133 4766 5544 +3 7849 7848 5461 +3 1448 7988 4123 +3 5807 1150 7976 +3 8116 5877 1630 +3 6513 8038 26 +3 4123 7988 1245 +3 1954 2000 1999 +3 1364 7703 5192 +3 3097 6179 3098 +3 5557 7989 8125 +3 7339 1239 1310 +3 2222 7990 7573 +3 1312 4059 4057 +3 1797 6634 1891 +3 5371 7991 2074 +3 7992 3883 7962 +3 1237 5628 1308 +3 4102 4103 4100 +3 2549 2506 3810 +3 1672 1719 1673 +3 7410 1308 7993 +3 6919 2937 2997 +3 3583 3633 5982 +3 7626 1424 2004 +3 3127 3401 3036 +3 7994 1791 7268 +3 1890 7849 1891 +3 4590 7278 7919 +3 540 140 6714 +3 7771 5948 3707 +3 3383 3384 2065 +3 2923 6267 2982 +3 1405 773 1404 +3 2050 3456 6775 +3 3546 2936 6036 +3 4704 4703 5316 +3 6311 4680 7995 +3 7747 7966 7265 +3 1358 7909 6672 +3 5140 3123 3122 +3 3185 1595 1594 +3 4339 5855 6007 +3 4215 4217 885 +3 2537 3217 3461 +3 6822 3593 3594 +3 7254 7677 7389 +3 5956 3159 5208 +3 1922 846 876 +3 124 163 198 +3 1885 1937 1934 +3 4159 7996 343 +3 7952 915 7951 +3 980 7997 5638 +3 3613 6742 3614 +3 4439 7700 7311 +3 6850 4484 8013 +3 4274 6243 8164 +3 7894 5309 3773 +3 7643 4858 6917 +3 5920 7165 4976 +3 4198 1929 1969 +3 6826 1151 7388 +3 7998 8167 542 +3 5646 7646 2247 +3 3631 7974 5230 +3 7912 4430 1868 +3 6894 6893 5820 +3 7759 7758 6586 +3 7999 7586 1955 +3 2169 6441 4906 +3 4888 6218 5175 +3 2674 2673 2757 +3 3731 4257 4389 +3 6403 6402 3697 +3 8000 8201 2279 +3 7307 7945 7306 +3 2303 6594 3395 +3 4054 7861 5210 +3 7963 5550 6206 +3 8001 188 534 +3 6548 6508 2756 +3 3528 3529 3527 +3 6103 3649 3608 +3 7572 2853 2903 +3 7578 2296 2086 +3 7279 3979 3930 +3 3285 2084 3286 +3 7803 6962 7802 +3 7078 1062 8002 +3 5148 7750 5171 +3 1182 6033 8003 +3 1631 1594 5517 +3 6845 7872 8004 +3 5957 5956 8005 +3 3678 157 6757 +3 4798 4799 4823 +3 2617 5744 2658 +3 4558 4337 6660 +3 1572 7745 1573 +3 2621 5631 3602 +3 2413 6799 7898 +3 875 5203 8006 +3 6108 3425 3424 +3 8007 5578 7820 +3 5755 2733 5615 +3 6835 7059 8008 +3 7937 7415 6035 +3 1126 1086 1165 +3 3642 7376 8009 +3 479 481 3666 +3 5667 4937 5191 +3 6415 6414 8010 +3 2192 2143 2193 +3 6792 897 7224 +3 7749 3624 3577 +3 8011 8019 4162 +3 8013 8012 7283 +3 3227 185 7228 +3 5885 2130 7759 +3 5717 7424 1440 +3 8014 6587 7647 +3 3368 2618 3367 +3 6933 8015 2820 +3 4028 8016 5938 +3 8015 1018 8017 +3 4747 7844 4769 +3 3321 2464 1954 +3 489 426 4179 +3 8079 7425 8018 +3 8019 469 391 +3 8020 2639 2785 +3 4374 7529 6076 +3 8108 2029 8021 +3 6541 8022 7743 +3 749 3121 3851 +3 1171 1133 1172 +3 8023 7069 2198 +3 7618 6415 8010 +3 8024 2455 7101 +3 7951 3573 8025 +3 5830 1463 7984 +3 7880 7846 7879 +3 2217 2169 4905 +3 6602 7392 7545 +3 7886 8026 7863 +3 1996 1998 2033 +3 8012 8013 4484 +3 2530 7383 5433 +3 2899 6993 8027 +3 791 755 948 +3 6592 1418 7178 +3 6958 1913 8028 +3 2049 6775 3456 +3 1414 6361 8029 +3 2326 6657 2327 +3 5385 4336 7781 +3 8030 7967 1382 +3 1178 8031 8100 +3 669 5367 709 +3 8058 1132 3390 +3 8032 7604 7831 +3 3698 1209 1264 +3 8033 239 557 +3 7944 8034 3107 +3 5909 6246 5298 +3 6608 931 2213 +3 5883 2790 2839 +3 5917 7891 4232 +3 3251 2711 2039 +3 173 5458 546 +3 1325 7634 1326 +3 8035 4566 4465 +3 4376 4254 7755 +3 6440 1185 2719 +3 3501 3477 3502 +3 2659 2660 3334 +3 5178 6651 5526 +3 2690 4647 7718 +3 6693 8036 7924 +3 840 804 6918 +3 3351 1425 1467 +3 8037 3258 6032 +3 2646 7495 6054 +3 5306 3492 3488 +3 5924 4983 4984 +3 47 48 8038 +3 7884 2747 8039 +3 8040 604 625 +3 7871 8041 919 +3 5903 5946 7075 +3 206 207 7732 +3 4410 4412 4411 +3 7360 7790 3387 +3 7863 8026 7201 +3 486 485 6495 +3 6879 7358 2678 +3 2928 8042 3467 +3 439 440 513 +3 5993 4087 6227 +3 6976 5731 3441 +3 4607 4693 7913 +3 1973 1935 6756 +3 5463 3136 6924 +3 3211 2137 3210 +3 5444 5852 5853 +3 8043 1897 4736 +3 7366 4914 7785 +3 611 586 7611 +3 5933 7472 3820 +3 6996 8044 2439 +3 3688 565 6757 +3 300 6461 350 +3 2120 2176 2175 +3 3381 7831 477 +3 7874 685 5593 +3 4592 6827 4577 +3 460 3181 5854 +3 5351 4577 4593 +3 3458 2353 2352 +3 4682 4681 5494 +3 7512 1412 8045 +3 1783 1831 1830 +3 1096 7809 5468 +3 8046 1619 1665 +3 5569 8047 3167 +3 8048 4972 4908 +3 2190 2191 7671 +3 6796 6810 3372 +3 7320 3935 7321 +3 5011 6056 5010 +3 5673 7441 6892 +3 8049 170 205 +3 3891 7222 5491 +3 2849 2823 2850 +3 6251 3903 3232 +3 2648 2704 5911 +3 4516 7584 7535 +3 6961 6171 6443 +3 7187 7877 535 +3 6620 1663 1709 +3 6086 4639 4638 +3 5823 5847 1281 +3 1101 1147 8050 +3 5549 3085 435 +3 8051 2015 2061 +3 2879 2817 8052 +3 5531 1959 7523 +3 7971 2739 2926 +3 3322 3321 4325 +3 4879 819 5295 +3 7794 3663 7795 +3 8053 6723 5313 +3 1945 1986 6873 +3 4802 4804 5782 +3 2476 3576 2524 +3 1937 1886 1936 +3 5333 6374 1733 +3 8015 8017 2820 +3 1587 5585 5700 +3 4311 4310 7608 +3 7954 3148 7955 +3 7432 1778 5350 +3 5909 5908 5752 +3 3483 3496 3495 +3 7331 1510 6617 +3 6085 5958 2035 +3 7890 4366 4993 +3 3791 6552 7624 +3 4384 4386 4385 +3 2635 4149 7808 +3 6314 8080 1316 +3 7300 8054 5012 +3 2693 2692 5231 +3 40 69 99 +3 6435 4169 4168 +3 4078 7256 2115 +3 7192 124 162 +3 1834 1788 5605 +3 205 206 243 +3 4646 6540 7544 +3 4417 2470 8055 +3 4402 1619 8046 +3 5226 5991 993 +3 1175 5759 5758 +3 3123 3078 6232 +3 7739 2005 2047 +3 6512 6511 4948 +3 4740 1668 6140 +3 812 7414 8056 +3 8048 4856 4972 +3 3031 3070 3032 +3 3874 6813 8057 +3 5797 7673 131 +3 4034 7379 7592 +3 3086 5337 3048 +3 2619 2620 7226 +3 6302 7594 5331 +3 3348 1132 8058 +3 1435 1434 3716 +3 7029 774 7603 +3 5379 2025 7985 +3 5786 3386 6596 +3 5447 7908 6991 +3 7802 7483 2880 +3 2484 5222 6871 +3 7774 1054 5918 +3 2454 7507 7506 +3 6897 4915 4965 +3 6310 3434 2146 +3 2827 8059 6202 +3 3405 6210 3406 +3 8138 8060 1384 +3 2473 8061 2521 +3 7132 5185 1736 +3 420 6911 353 +3 4704 8062 6463 +3 3643 2449 3644 +3 3367 4586 4585 +3 7507 8063 8024 +3 6394 2875 3537 +3 1575 1577 1609 +3 8064 6172 4933 +3 5805 1437 5272 +3 6935 3153 6429 +3 8108 1995 2029 +3 8065 1416 1463 +3 3754 3755 7285 +3 1152 7554 7138 +3 7979 6433 7978 +3 6676 5569 5369 +3 5943 1093 6472 +3 6774 262 334 +3 4652 2893 8066 +3 8067 6080 7539 +3 8068 2504 2546 +3 7062 7742 947 +3 3155 7034 3153 +3 7009 4352 6363 +3 7991 6390 2074 +3 6937 7323 5640 +3 3006 7250 4423 +3 103 496 7214 +3 5763 5396 3279 +3 2319 2257 8069 +3 5277 3523 5278 +3 5508 5574 3475 +3 8070 8039 2813 +3 2319 8069 5179 +3 4693 4608 4694 +3 7508 4854 2170 +3 6997 1242 7181 +3 4632 1403 8071 +3 5386 3339 8072 +3 122 92 123 +3 2280 7284 2281 +3 7326 803 802 +3 2526 5327 8073 +3 1831 5725 8074 +3 1414 7734 6361 +3 5055 4806 6462 +3 8075 5684 6677 +3 4557 4478 4477 +3 2306 2305 3704 +3 7928 6994 3521 +3 8076 8025 839 +3 4046 7027 7039 +3 3369 7540 4586 +3 1123 5957 8005 +3 5717 7010 5716 +3 7813 3731 7812 +3 4970 7824 6200 +3 2906 2905 7875 +3 6547 5600 1626 +3 2154 7439 7169 +3 3605 2466 2421 +3 8082 1940 1756 +3 7780 1168 1169 +3 6195 7982 4682 +3 3137 7018 7899 +3 5843 5842 3146 +3 2643 8077 8173 +3 4789 6579 7607 +3 4484 4485 6598 +3 7818 3916 5608 +3 7248 7247 7084 +3 7407 7795 2993 +3 2986 1130 1223 +3 7512 8045 6674 +3 740 2759 8078 +3 7292 8079 7291 +3 7144 4357 4602 +3 7839 1317 8080 +3 8081 8215 5884 +3 1799 2775 8082 +3 3458 8083 7645 +3 8084 148 572 +3 2616 7986 7987 +3 7433 667 7434 +3 8085 7623 7622 +3 2008 1961 6132 +3 6615 5562 5765 +3 1387 1386 8086 +3 3639 1965 5907 +3 6003 1705 5420 +3 3357 5836 6804 +3 6812 7445 6406 +3 644 619 4064 +3 5536 3406 7926 +3 7297 7919 4591 +3 2957 5924 6313 +3 5438 1191 2277 +3 2334 7916 2389 +3 4543 4511 7602 +3 5990 2562 4849 +3 2934 7272 7246 +3 2610 2611 6832 +3 1100 1059 7907 +3 1316 8080 4396 +3 7789 8221 1221 +3 4262 4292 4264 +3 3852 8087 3067 +3 136 540 174 +3 3911 3915 3912 +3 5940 8088 2693 +3 6771 2441 2487 +3 5932 7922 8089 +3 3992 2418 3993 +3 6259 7496 3575 +3 4316 4315 4548 +3 7374 6018 6019 +3 6494 1303 1273 +3 6593 214 258 +3 7825 1861 5287 +3 8090 8131 5875 +3 785 4939 5649 +3 2502 2459 6637 +3 4197 6443 7629 +3 8091 5613 3075 +3 7256 7469 7709 +3 8092 541 451 +3 3629 1686 3630 +3 5076 4645 883 +3 6613 6612 2306 +3 6276 6507 6395 +3 6510 6435 6583 +3 6822 6821 3593 +3 1910 1911 6736 +3 6908 1993 2028 +3 1471 7328 1532 +3 2339 6032 2716 +3 8087 3799 3067 +3 1051 8093 7780 +3 8094 1219 7060 +3 1811 5240 7023 +3 6407 6697 6696 +3 7787 4831 6138 +3 5711 8095 5998 +3 3980 4048 1704 +3 4860 6921 2865 +3 1905 6534 8096 +3 8034 3099 3107 +3 966 5320 5319 +3 4729 6765 2697 +3 3343 7855 1654 +3 8097 8006 7594 +3 1174 5884 4191 +3 2714 2713 6590 +3 744 6568 781 +3 2755 7095 2816 +3 8011 7819 8019 +3 4048 4083 7715 +3 8098 3359 1867 +3 1775 7306 6252 +3 1606 8099 7855 +3 24 44 76 +3 7579 5466 5405 +3 1026 1016 5706 +3 548 184 7053 +3 8100 1235 1277 +3 6592 6865 4316 +3 2443 2396 5840 +3 6474 6456 2438 +3 1853 8101 6107 +3 5754 6908 5942 +3 83 152 151 +3 863 8102 921 +3 1472 1471 1533 +3 3317 6782 6781 +3 8103 3884 7694 +3 4839 6249 6248 +3 2561 8104 8105 +3 4161 6224 153 +3 3163 7527 7526 +3 8106 2376 3129 +3 6028 740 8078 +3 4609 4610 5701 +3 3256 3258 8037 +3 2404 5098 8107 +3 7888 888 5006 +3 2383 7950 5198 +3 628 7068 5770 +3 1953 6736 7099 +3 6543 6449 7953 +3 6065 8108 6217 +3 7684 7463 2988 +3 3007 2957 5393 +3 2959 2899 8027 +3 6689 6776 2570 +3 2382 2383 2427 +3 5193 7799 6077 +3 6201 5781 7002 +3 936 5009 1994 +3 7569 1654 7570 +3 696 6027 5716 +3 7324 6763 6465 +3 3429 7412 74 +3 3642 8009 6498 +3 5391 5390 1760 +3 8070 7884 8039 +3 4923 2619 8109 +3 6625 5622 6626 +3 499 500 6301 +3 5029 6653 1988 +3 1302 7203 3581 +3 5775 275 5828 +3 8110 3813 3843 +3 5757 7550 1713 +3 1371 8111 1049 +3 7638 3115 7637 +3 4994 7754 4989 +3 435 8136 543 +3 8112 7633 635 +3 916 5905 4187 +3 6887 7939 2921 +3 4240 516 4239 +3 3298 3299 5813 +3 5551 799 836 +3 6725 766 6208 +3 7895 6920 4849 +3 3585 8113 7315 +3 3423 367 8114 +3 1122 1078 6351 +3 7242 6985 6817 +3 5482 5481 3655 +3 3616 7277 1803 +3 8115 1040 1083 +3 7834 6643 8116 +3 363 7975 8117 +3 5246 6423 8118 +3 7577 5637 2906 +3 7610 5859 1591 +3 5049 7428 5051 +3 2942 2941 7225 +3 8119 4940 4939 +3 8121 4241 8120 +3 4017 7672 7456 +3 3852 3853 7020 +3 3927 3976 3928 +3 781 1395 7252 +3 365 364 7975 +3 8122 5030 4775 +3 6782 5985 6297 +3 6388 7728 7956 +3 6840 3033 6244 +3 8019 155 469 +3 7229 4569 4568 +3 6028 5716 6027 +3 822 8123 6952 +3 8061 2474 2521 +3 3865 1120 7788 +3 8074 5725 5724 +3 4309 7869 4311 +3 1387 8086 1472 +3 1300 6060 8124 +3 6357 1799 1800 +3 5783 6204 7957 +3 3147 4287 5208 +3 8125 3570 803 +3 6525 7085 4071 +3 871 7462 7910 +3 7999 1854 7586 +3 8105 8104 2644 +3 8126 5032 3194 +3 5365 5364 7248 +3 4161 154 4162 +3 6664 6380 4643 +3 1226 1225 1168 +3 5837 7521 2289 +3 4514 1044 1043 +3 3140 7924 8036 +3 5643 4482 8127 +3 5774 7299 6227 +3 8126 2114 5032 +3 1865 1821 2290 +3 2766 1446 2767 +3 2485 5251 7131 +3 7219 7656 7657 +3 6040 6039 5535 +3 829 8128 855 +3 2 1 7613 +3 357 313 423 +3 8129 7524 4778 +3 7620 6172 8064 +3 4586 6934 7227 +3 1857 6958 8028 +3 6727 3838 783 +3 361 3939 7753 +3 5119 7016 7017 +3 4808 6463 6462 +3 6663 1932 1977 +3 1308 7905 1347 +3 1236 7600 1237 +3 7152 5856 6831 +3 3687 524 3686 +3 6232 6484 2275 +3 5638 7997 7240 +3 4732 4733 5233 +3 8130 6325 4878 +3 594 7084 8131 +3 7727 567 566 +3 8132 5502 6381 +3 7752 5512 4307 +3 5690 5689 2059 +3 1370 954 999 +3 1687 3400 7581 +3 3162 7872 6845 +3 2036 1999 2037 +3 4981 2845 2843 +3 5125 2357 5126 +3 4573 4348 4455 +3 5715 1669 4914 +3 2402 2401 6851 +3 7261 5912 8133 +3 3680 7514 4408 +3 4173 6510 6583 +3 1647 2534 1694 +3 6238 1597 1637 +3 3815 5674 7386 +3 6562 1354 6563 +3 7063 6715 1110 +3 1930 1931 1974 +3 4148 4149 2637 +3 4655 4333 4331 +3 8091 3073 3132 +3 1877 1876 1925 +3 1385 6818 5353 +3 2880 2881 2939 +3 601 600 621 +3 3376 3379 3377 +3 5165 8134 411 +3 5663 4002 3955 +3 6369 5398 7429 +3 6489 5668 4296 +3 7326 7314 5425 +3 7474 7473 618 +3 3604 3605 6074 +3 6051 3853 6050 +3 6221 1231 7744 +3 2224 6503 2225 +3 4596 4598 6063 +3 896 6860 4680 +3 8004 7302 6845 +3 4222 286 316 +3 7448 8135 1422 +3 1644 1601 7315 +3 1476 1478 2293 +3 8136 5225 510 +3 6423 5630 7810 +3 7948 3336 3334 +3 3430 7903 7902 +3 8137 7965 2550 +3 231 232 274 +3 7162 6469 4448 +3 8062 4780 6463 +3 607 629 630 +3 3047 7491 5899 +3 4131 4133 4132 +3 4417 8055 7420 +3 6553 4719 6554 +3 2585 2587 7478 +3 6289 2440 3215 +3 5242 2613 3672 +3 59 7116 4009 +3 6888 2169 2217 +3 4346 2706 6731 +3 2050 5988 3456 +3 8138 3632 8060 +3 4660 7000 4440 +3 8139 6846 2787 +3 3667 7779 7471 +3 1346 4197 1392 +3 700 5297 5400 +3 4430 1919 3408 +3 3253 2180 3254 +3 3577 3578 1140 +3 7881 5871 5870 +3 463 5454 4260 +3 4253 3210 5563 +3 3154 4696 3156 +3 1074 6117 3865 +3 7816 1489 7897 +3 5857 4441 7925 +3 5561 2251 7371 +3 2175 2226 6503 +3 6110 6109 5849 +3 7929 5438 6055 +3 6078 5857 4671 +3 1882 6186 7159 +3 8041 6156 919 +3 7599 8140 8163 +3 7127 1046 1085 +3 7100 6735 6809 +3 6758 2398 7639 +3 168 170 8049 +3 5160 6628 2491 +3 4739 1841 8141 +3 6633 7620 639 +3 5072 7338 3524 +3 3314 7399 7782 +3 4419 5413 5231 +3 3120 6722 6727 +3 4806 4807 5056 +3 8142 5207 2420 +3 7766 3053 4469 +3 4143 2833 7867 +3 8143 6937 6501 +3 8016 4030 5938 +3 6010 3781 6011 +3 4530 4532 4531 +3 7789 1221 1220 +3 18 8144 5588 +3 8145 6564 592 +3 4762 1387 6081 +3 2228 4525 2229 +3 920 2971 6048 +3 5356 1871 1872 +3 2349 2353 2402 +3 413 345 5922 +3 4173 6583 6584 +3 1013 8146 848 +3 8147 1848 1951 +3 5461 1939 5581 +3 3218 2861 3335 +3 1235 7410 7993 +3 4084 1795 4086 +3 8103 3931 3884 +3 5017 5018 1286 +3 5624 4600 4688 +3 4622 935 7443 +3 5139 6969 5138 +3 2017 7186 2016 +3 7636 8148 5897 +3 7733 8149 5068 +3 4894 4895 7778 +3 2189 2188 2239 +3 8151 8150 5651 +3 4760 547 7883 +3 933 934 882 +3 3062 3023 5662 +3 8152 6571 62 +3 5497 8153 4113 +3 6005 7069 8023 +3 5863 7421 6763 +3 3372 2981 3371 +3 2948 2888 8154 +3 8115 6070 1040 +3 8155 2576 6025 +3 6100 6101 4498 +3 7847 3538 3520 +3 5071 2535 4045 +3 4492 4553 4554 +3 8088 5708 4650 +3 7806 5597 7807 +3 668 667 706 +3 7484 3655 7103 +3 5643 8127 3522 +3 659 3567 1025 +3 5099 3756 7896 +3 7606 7110 4135 +3 4213 4214 2988 +3 1030 6119 1076 +3 5680 3004 4104 +3 2806 6050 5131 +3 3179 3335 7851 +3 6717 2993 3661 +3 7385 7804 7530 +3 7083 6852 333 +3 2433 2434 4335 +3 2694 5603 5826 +3 3494 6110 3496 +3 911 912 909 +3 3241 5534 3809 +3 8156 8169 3273 +3 6040 2181 3289 +3 7628 2954 3006 +3 3071 5127 7983 +3 5824 5278 3531 +3 4104 3003 4105 +3 6636 7637 3041 +3 7689 5955 7254 +3 3057 3058 3017 +3 5921 3192 5957 +3 8157 4581 6403 +3 3947 7157 8158 +3 604 603 625 +3 7537 2285 1513 +3 4035 2594 4036 +3 5293 1540 2784 +3 2013 1970 2014 +3 6343 5442 4935 +3 5304 7970 3579 +3 4629 5878 4630 +3 242 205 5079 +3 4268 7312 7864 +3 39 17 5482 +3 3565 3567 3566 +3 769 7013 809 +3 8007 7713 5578 +3 1813 8159 8204 +3 6066 7777 6067 +3 3450 6421 3449 +3 7798 7797 4690 +3 6303 6260 8160 +3 5530 7686 6191 +3 1755 1756 7262 +3 8200 1629 1676 +3 8033 199 239 +3 4654 4437 3818 +3 4323 6792 5709 +3 8113 4406 7315 +3 7855 8099 1655 +3 2761 6266 3365 +3 1660 4083 8161 +3 6811 3377 6929 +3 2698 5126 2405 +3 3275 4897 3274 +3 1491 4633 5712 +3 5973 7807 2231 +3 4951 6207 1029 +3 118 119 4373 +3 6690 2435 7915 +3 8157 4582 4581 +3 5358 7405 6088 +3 4567 6891 4462 +3 5493 7731 1201 +3 3274 1812 5416 +3 1445 1444 6622 +3 2451 4209 8162 +3 5252 8163 2377 +3 7536 1020 1059 +3 1894 1896 1895 +3 7328 1604 1603 +3 5220 1967 6401 +3 5010 4493 4494 +3 2067 8164 5326 +3 111 192 152 +3 7452 5413 4419 +3 8166 8165 7260 +3 6697 6384 4090 +3 4319 4551 4552 +3 7373 4239 4930 +3 8167 4025 4024 +3 4569 7120 4570 +3 6042 1899 1947 +3 2267 7396 7887 +3 3286 6040 3287 +3 6849 1679 8168 +3 6978 3000 4031 +3 7437 4413 2070 +3 2552 2554 2553 +3 1980 1981 7472 +3 8142 7046 5207 +3 6487 4442 8169 +3 5652 4546 4507 +3 2029 6566 2079 +3 881 7812 2140 +3 3736 6011 6922 +3 3679 6134 3686 +3 2121 7680 2123 +3 8170 4844 7917 +3 7823 3765 7094 +3 5292 7056 4478 +3 742 741 6142 +3 3393 1521 3394 +3 7721 5932 8089 +3 7996 296 343 +3 6283 4987 8171 +3 5419 6129 6253 +3 7115 6761 682 +3 3315 8000 6912 +3 6152 7314 3527 +3 2404 8107 3474 +3 6403 6131 2826 +3 8112 32 7633 +3 6842 2139 2189 +3 4495 4549 6257 +3 7051 1315 7141 +3 1830 1831 8074 +3 7705 7049 7427 +3 4140 2832 4142 +3 8173 4895 8172 +3 6766 7420 4416 +3 6183 363 8117 +3 7895 4848 4980 +3 8174 5624 7920 +3 4419 3996 4421 +3 6426 7911 8175 +3 4346 6137 4345 +3 5616 7561 4360 +3 7698 8194 8176 +3 879 848 8146 +3 814 5092 3973 +3 7123 7273 7141 +3 8151 2168 8150 +3 7559 7140 8177 +3 5604 75 7214 +3 7674 3055 3151 +3 6244 1767 1731 +3 7743 8022 6400 +3 1182 8003 5723 +3 1944 6807 2021 +3 1165 1127 6704 +3 2344 7658 2531 +3 2874 5129 4539 +3 5692 5772 1134 +3 3568 5285 3569 +3 8088 4649 2693 +3 183 7587 219 +3 4186 916 5719 +3 1989 1949 1990 +3 3995 3997 7595 +3 4261 7042 7548 +3 2243 6323 8178 +3 4668 7904 8179 +3 3139 3065 7527 +3 6102 3231 5258 +3 5135 6672 1410 +3 6986 7184 6627 +3 3872 691 7457 +3 7740 6789 1481 +3 1415 1414 8029 +3 4764 4763 778 +3 7826 3795 7868 +3 5779 918 971 +3 251 6942 3425 +3 2599 2555 2556 +3 1271 1228 1272 +3 5470 5671 7869 +3 4453 4455 4574 +3 5727 5496 279 +3 4281 1485 5511 +3 2079 7590 2119 +3 8189 1839 5177 +3 6068 5392 2163 +3 2246 1404 875 +3 4009 4010 3962 +3 1248 6087 1490 +3 5728 3277 5729 +3 6747 7160 7938 +3 8051 1971 2015 +3 7134 7209 2575 +3 4247 4363 4362 +3 777 4388 4387 +3 3361 2232 5227 +3 303 278 305 +3 4452 4451 6307 +3 8180 9 7 +3 6546 728 4184 +3 6782 8181 6982 +3 8100 8031 1235 +3 7854 2042 8182 +3 250 5657 7369 +3 844 6453 7414 +3 503 434 538 +3 4588 4590 6859 +3 6090 2067 5326 +3 7091 1942 7606 +3 3201 5539 7324 +3 6878 6107 8101 +3 676 679 677 +3 6346 6844 6722 +3 3951 4000 3954 +3 4922 4921 4962 +3 1713 7833 4151 +3 1226 8183 8067 +3 2940 2884 2942 +3 7656 830 7087 +3 4551 4553 6257 +3 4179 6863 4231 +3 555 429 3468 +3 7468 6221 1230 +3 2311 2243 8178 +3 423 424 486 +3 7918 3068 3029 +3 6764 6654 3989 +3 7992 8184 3883 +3 7129 8096 7342 +3 4138 7126 5254 +3 4611 6236 8185 +3 3330 7172 895 +3 2077 6095 6885 +3 2451 4234 4209 +3 6615 410 6614 +3 6882 7195 1323 +3 6217 8108 8021 +3 1968 7583 3422 +3 8186 374 3266 +3 3349 4970 1224 +3 7259 530 6415 +3 100 2201 135 +3 4631 1403 4632 +3 2270 2269 5714 +3 5112 5879 3549 +3 7026 231 230 +3 2562 2561 8105 +3 7986 6325 8130 +3 5848 1936 3708 +3 7019 4594 6363 +3 7050 3607 2871 +3 6099 5693 3062 +3 1524 6229 1805 +3 875 8006 8097 +3 2967 8187 3012 +3 4126 5881 6485 +3 5111 341 5162 +3 3033 7040 8188 +3 4639 1839 8189 +3 4039 2016 6613 +3 4650 6504 4652 +3 1255 1256 5521 +3 2424 6410 4904 +3 5916 4331 4556 +3 4409 4411 7860 +3 414 416 7734 +3 4844 8170 4843 +3 6001 47 8038 +3 2207 2206 3522 +3 5325 8190 5326 +3 6627 7738 4152 +3 8191 7261 8133 +3 7623 8085 3085 +3 7193 6326 40 +3 1154 6163 6164 +3 730 731 768 +3 1525 4099 1514 +3 6583 4168 4155 +3 1571 5280 1604 +3 3805 5388 7503 +3 3663 2995 6361 +3 8192 6097 1710 +3 7854 8182 6475 +3 5588 8144 3476 +3 3990 3989 3901 +3 8125 7989 3570 +3 2007 5385 8193 +3 7231 5803 4031 +3 6303 8160 7571 +3 3348 8058 3349 +3 5876 2602 5041 +3 7143 6496 8194 +3 349 348 1415 +3 3095 3098 3111 +3 5008 937 6784 +3 3473 4613 173 +3 2547 5783 3200 +3 7751 6926 6741 +3 1290 6049 7195 +3 482 417 528 +3 5536 3359 8098 +3 3943 6434 3247 +3 567 374 8186 +3 6177 6711 7612 +3 6797 2867 6796 +3 7384 4457 4456 +3 322 321 575 +3 6393 1641 1640 +3 3510 3511 3549 +3 3322 6963 2464 +3 3045 7427 7891 +3 7309 2220 7396 +3 3465 3467 8042 +3 2375 2323 7879 +3 2094 2052 2095 +3 4784 8195 4816 +3 1244 5408 5407 +3 4951 7498 4952 +3 6954 5533 6906 +3 7432 7683 3636 +3 6193 7232 6718 +3 6952 6951 5889 +3 5654 7374 6874 +3 7398 6980 3913 +3 7236 747 5213 +3 351 7593 6661 +3 5583 7387 3600 +3 8196 3777 4878 +3 8197 7411 5953 +3 7612 1468 1527 +3 5759 1142 6216 +3 5349 2589 5584 +3 5725 8198 7892 +3 7596 1301 1340 +3 4422 7628 6998 +3 2085 2086 2134 +3 6607 4113 8153 +3 4351 4352 7009 +3 1061 7078 8002 +3 1587 5700 7210 +3 6353 3413 2135 +3 8030 991 7967 +3 6391 1912 7440 +3 6160 2844 2845 +3 926 7910 7305 +3 3831 7817 3832 +3 289 290 7947 +3 4578 4354 5734 +3 7731 7730 5043 +3 411 8134 3673 +3 2021 1892 1945 +3 82 6895 83 +3 7173 4334 6780 +3 6052 7329 2513 +3 8199 385 441 +3 2439 8044 7873 +3 8200 8116 1629 +3 7889 8219 6135 +3 4210 764 7678 +3 5637 2855 2908 +3 7645 8083 6820 +3 7591 2275 2337 +3 1042 993 1044 +3 4652 8066 4653 +3 6599 5418 6600 +3 3593 3596 6418 +3 7870 6074 4269 +3 3934 7321 3886 +3 3724 1150 3725 +3 4493 1118 1157 +3 6689 4589 6971 +3 3803 2378 3778 +3 1698 1652 1699 +3 6188 1646 4199 +3 5772 6092 1136 +3 4883 669 707 +3 7935 7681 7375 +3 2897 2183 5748 +3 6007 4475 7916 +3 65 67 66 +3 8079 8018 7291 +3 2921 2922 2979 +3 6724 6904 5999 +3 3439 7422 5320 +3 1420 7190 3914 +3 5695 3121 749 +3 3295 2978 2977 +3 6381 6886 4272 +3 5459 7167 7000 +3 5312 4755 3542 +3 3625 4375 3626 +3 7822 3043 2860 +3 6268 6389 4511 +3 1689 2961 3449 +3 6300 2233 8201 +3 7859 5633 6778 +3 7844 8191 5575 +3 7702 1056 1098 +3 3169 2038 7096 +3 3270 218 742 +3 3482 210 8202 +3 1227 1269 8183 +3 4755 4757 4764 +3 2503 2504 8068 +3 580 253 579 +3 8065 7930 1416 +3 3952 6600 2854 +3 3599 7387 2355 +3 3777 8196 3780 +3 7021 6666 5771 +3 6021 1895 5360 +3 7170 2360 2410 +3 47 6067 583 +3 7011 4643 6124 +3 640 7936 6512 +3 4276 5516 5686 +3 8203 4967 6197 +3 3910 3912 7801 +3 1868 7401 7521 +3 3847 3848 7764 +3 7793 220 7228 +3 713 3440 714 +3 3572 7532 288 +3 1801 1804 7961 +3 7834 8116 8200 +3 7487 5864 6621 +3 8204 1848 8147 +3 6069 3703 3764 +3 8095 1505 5998 +3 8141 6905 4739 +3 8094 722 1219 +3 3994 7157 3947 +3 7665 2389 2335 +3 2763 2764 1443 +3 6894 2657 2726 +3 4891 4673 8205 +3 6855 1227 5677 +3 1648 1649 1695 +3 5934 6157 7549 +3 6249 5138 4781 +3 7623 5705 3108 +3 3892 7670 3894 +3 5460 7605 1093 +3 1520 6399 5307 +3 2435 2386 2436 +3 2883 2885 2884 +3 1017 7636 1018 +3 5042 8166 7260 +3 7493 1824 1870 +3 5279 8206 6027 +3 2741 2740 2663 +3 6597 329 564 +3 8076 7951 8025 +3 1328 1329 1327 +3 8174 5598 5624 +3 4391 5305 1028 +3 7060 796 7450 +3 6035 1589 7667 +3 8139 7640 6846 +3 3512 3513 7664 +3 2696 2559 4729 +3 6097 8192 4280 +3 4363 4248 5064 +3 8207 7001 1435 +3 1217 1216 629 +3 5821 1396 4079 +3 1578 3752 7080 +3 3540 7130 3541 +3 4621 6608 4491 +3 7024 3291 2703 +3 923 924 978 +3 1554 7610 5137 +3 5782 4829 4812 +3 8149 7955 5068 +3 2844 2846 2900 +3 6557 2774 1580 +3 4668 8179 224 +3 2411 2413 6907 +3 1431 7629 5446 +3 1417 4501 6100 +3 3631 3632 8138 +3 6411 4701 8208 +3 5622 1203 1261 +3 2480 2430 2483 +3 7287 7906 1032 +3 6170 4510 7357 +3 7031 1525 3397 +3 4595 4686 7981 +3 905 906 953 +3 1361 1327 5601 +3 6822 7941 4203 +3 1446 2768 1447 +3 7167 7217 8209 +3 328 7804 375 +3 6930 2865 6059 +3 828 7584 2087 +3 2080 7959 7960 +3 8198 1882 7892 +3 5871 3244 1506 +3 4982 6468 4452 +3 7462 6329 982 +3 2205 2162 7368 +3 4497 6061 4549 +3 6499 2007 8193 +3 4095 7964 4037 +3 3222 3028 7109 +3 8210 2217 7717 +3 2861 7264 3335 +3 5990 5989 2562 +3 78 7885 109 +3 8123 7562 8211 +3 2276 1798 4134 +3 1952 1905 8096 +3 7150 5510 7486 +3 1427 1383 4958 +3 8053 5550 6723 +3 2660 2659 5249 +3 6654 6999 4040 +3 521 7648 552 +3 7926 6210 7912 +3 4457 2910 2859 +3 5448 5789 2614 +3 5797 67 7663 +3 7317 7203 1303 +3 5114 7459 1847 +3 4889 5080 6218 +3 7932 1656 1702 +3 7163 2671 6962 +3 4735 6460 2612 +3 6090 5326 8190 +3 1761 6122 7382 +3 94 96 95 +3 4562 4341 4561 +3 7707 2217 8210 +3 8212 6328 4922 +3 2111 4190 8213 +3 4127 5678 5881 +3 5022 8214 5047 +3 1047 997 1048 +3 1951 7129 1995 +3 4785 6537 8195 +3 1310 1279 3719 +3 7858 7857 6104 +3 4483 7283 8012 +3 1784 1786 1831 +3 7921 6916 8215 +3 7830 2063 3986 +3 827 787 828 +3 7143 8194 7698 +3 7490 3214 1302 +3 3944 7008 5892 +3 5852 1734 1774 +3 4776 4775 2024 +3 7682 4940 8119 +3 8216 8155 7209 +3 757 1812 5266 +3 7280 4737 1840 +3 3682 506 3681 +3 6126 7668 7208 +3 1287 6328 8212 +3 7791 8173 8172 +3 8217 7841 7499 +3 5057 30 85 +3 5008 5009 7304 +3 7030 7142 737 +3 4639 8189 4641 +3 1790 1791 7994 +3 7538 2814 5384 +3 2063 2158 7121 +3 5047 8214 5104 +3 6426 8175 2384 +3 2068 5326 8164 +3 5505 2207 5909 +3 2211 2165 2210 +3 8218 145 3272 +3 4130 4400 6360 +3 6230 2767 1445 +3 4843 7792 7494 +3 2960 5524 7688 +3 6937 8143 3822 +3 2167 2111 8213 +3 4207 2451 8162 +3 5682 3610 7361 +3 7921 8215 8081 +3 3630 6984 6989 +3 3706 2062 6169 +3 6796 3370 3336 +3 5832 2118 2173 +3 1429 1384 8060 +3 3403 3406 7403 +3 3423 8114 7942 +3 7965 7964 7534 +3 1944 7191 7205 +3 6202 8059 6869 +3 753 7003 4518 +3 8197 4093 7411 +3 4611 8185 5861 +3 5619 5573 3824 +3 4912 7570 6345 +3 5224 377 5225 +3 7535 855 8128 +3 5020 7619 7124 +3 2568 5158 7153 +3 7839 8080 1285 +3 1687 1640 7945 +3 8219 1829 1877 +3 6691 4624 986 +3 4322 4324 6702 +3 8220 6785 1777 +3 7258 1532 7666 +3 7972 1855 3168 +3 3284 1860 1915 +3 5010 5012 8054 +3 5156 6128 7235 +3 2861 2803 2862 +3 24 23 45 +3 5022 5585 3869 +3 4380 613 636 +3 4769 4767 4768 +3 6654 2256 7760 +3 8106 2377 2376 +3 8122 1948 5030 +3 8221 1976 1221 +3 1570 5152 6188 +3 8222 15 54 +3 7833 1714 4404 +3 6738 4101 4100 +3 4115 5527 7104 +3 2198 2153 2199 +3 7851 2913 7089 +3 441 7580 442 +3 8223 7454 7770 +3 7016 7626 5886 +3 8067 8183 6080 +3 6681 5238 5804 +3 3091 3093 7949 +3 2948 8154 3004 +3 7853 2147 2194 +3 2518 7140 7559 +3 7698 8176 3827 +3 2765 4810 6230 +3 3957 4004 3958 +3 8137 4792 7965 +3 3276 5729 856 +3 4996 4806 4997 +3 4081 1660 8161 +3 2510 5054 2554 +3 7828 1237 7410 +3 7959 6979 4505 +3 3872 6813 6121 +3 8063 2455 8024 +3 7565 2914 2623 +3 4634 7211 1667 +3 5502 5501 4416 +3 7927 5135 1409 +3 7345 4959 4870 +3 1261 5747 5816 +3 6743 8224 7240 +3 8204 8159 1848 +3 8090 594 8131 +3 2979 2980 3331 +3 8014 7276 6587 +3 4981 7778 7397 +3 5706 1027 5994 +3 3499 319 365 +3 1283 1244 7712 +3 4533 677 717 +3 3760 3761 3705 +3 4632 8071 6373 +3 6603 5661 5669 +3 2810 2737 2811 +3 2295 2294 7943 +3 8220 4406 6785 +3 8047 7699 3167 +3 3012 8187 5434 +3 750 749 786 +3 7153 2610 7347 +3 5905 968 1008 +3 4330 2187 2238 +3 3371 3373 3398 +3 3965 7783 6479 +3 7167 8209 4377 +3 7258 1570 7974 +3 7907 1101 8050 +3 3850 7768 7767 +3 5613 8091 7290 +3 7037 3255 2714 +3 7968 213 256 +3 5952 6636 5151 +3 4724 4725 4779 +3 7616 7776 6432 +3 2373 7420 2422 +3 7516 2009 7882 +3 1654 7125 7126 +3 5764 5144 4515 +3 4834 8225 6939 +3 5039 2518 2560 +3 4386 5739 4388 +3 1300 8124 6399 +3 8224 6554 7240 +3 8219 6858 1829 +3 6889 3846 4582 +3 1497 1499 4379 +3 2672 2628 2674 +3 6833 5555 4101 +3 3866 3867 3864 +3 5498 5497 632 +3 4940 5382 750 +3 4471 4560 4561 +3 5831 4964 4868 +3 8150 3194 5651 +3 8121 8120 7798 +3 7583 4502 5690 +3 6311 7995 990 +3 4087 5933 4088 +3 19 7 20 +3 788 7901 789 +3 2097 4063 7866 +3 5408 1245 4124 +3 6497 1673 5391 +3 347 5925 349 +3 5163 7469 4078 +3 2377 8163 8140 +3 7408 7578 7409 +3 2425 6281 5946 +3 3242 5711 1504 +3 6274 7524 8129 +3 6251 2974 3681 +3 5047 1622 5700 +3 8166 2842 8165 +3 3749 3751 3717 +3 24 7762 11 +3 4393 4394 1725 +3 4476 5292 6660 +3 7181 1282 4076 +3 8111 1372 1049 +3 1566 1514 3399 +3 4850 4851 5990 +3 8173 8077 4895 +3 7827 2310 2359 +3 3712 6573 2050 +3 7573 7990 2270 +3 8221 3342 1976 +3 4059 1281 4060 +3 7876 6464 6398 +3 8226 8158 6191 +3 2088 7409 2295 +3 8181 7811 6982 +3 1022 979 6770 +3 6283 8171 4612 +3 6153 6355 3454 +3 6518 743 780 +3 1799 8082 4133 +3 2582 2541 7876 +3 5223 1682 3248 +3 2800 7291 6293 +3 5429 7747 2704 +3 2126 2128 7772 +3 5113 2991 3660 +3 6579 7558 4822 +3 4923 8109 5148 +3 3127 3076 3131 +3 6896 6624 6476 +3 6614 7215 5562 +3 2879 8052 7272 +3 8216 6641 8155 +3 7246 2935 2996 +3 271 230 272 +3 4872 4874 6538 +3 5198 2477 3576 +3 4282 1452 1485 +3 1679 4644 3202 +3 5515 7470 6753 +3 322 370 579 +3 4686 4596 4796 +3 1544 3792 1578 +3 8035 4345 4566 +3 3813 8110 3814 +3 2978 6372 3485 +3 7567 2056 3060 +3 8218 7061 145 +3 7136 4460 7556 +3 6436 2642 6427 +3 4022 58 4021 +3 7261 8191 3125 +3 3123 5750 4778 +3 7843 4006 6098 +3 2466 3604 2512 +3 6780 2645 7980 +3 4656 4658 4438 +3 7293 7582 7054 +3 3879 7719 2321 +3 5555 6202 2886 +3 4635 4637 7679 +3 8123 8211 6952 +3 4770 4768 1251 +3 1406 1408 1459 +3 8225 4835 6939 +3 3595 6136 727 +3 3755 3797 5099 +3 615 705 7233 +3 7046 6888 6709 +3 8132 2210 5502 +3 1708 6854 4400 +3 5101 5814 5944 +3 4796 6063 7931 +3 7559 8177 2643 +3 5386 8072 1217 +3 8184 4170 3883 +3 7022 4241 8121 +3 1266 7553 1268 +3 5867 2526 8073 +3 7650 5873 691 +3 8000 6300 8201 +3 7177 7917 4983 +3 888 7617 5653 +3 3901 3941 7768 +3 5001 5003 5002 +3 4165 7641 4166 +3 5177 1897 8043 +3 1206 6535 6370 +3 7814 1611 3714 +3 1843 1844 7728 +3 7351 7784 3471 +3 3482 8202 3498 +3 3895 3897 7108 +3 3947 8158 8226 +3 7333 5038 1703 +3 8135 1363 1422 +3 534 558 6852 +3 8020 7832 2639 +3 5427 2887 7467 +3 8203 7631 4967 +3 5843 1124 2254 +3 6263 1353 6563 +3 6559 4630 7900 +3 5003 5381 5005 +3 5381 6655 818 +3 5103 7973 5966 +3 3721 3723 3743 +3 7070 6396 7185 +3 2356 6190 5098 +3 1050 1000 1051 +3 1758 1717 7488 +3 7139 824 7660 +3 3983 6438 5566 +3 921 8102 922 +3 7216 1509 7282 +3 8155 2537 2576 +3 6411 8208 4021 +3 6271 7940 7391 +3 5547 7948 7540 +3 4353 437 5351 +3 7761 4560 4473 +3 1670 1671 7933 +3 4156 6890 7858 +3 8148 7796 5897 +3 4726 2796 2795 +3 5601 6610 5830 +3 7597 2659 2728 +3 637 7434 668 +3 7125 1700 6760 +3 1719 4705 1720 +3 5329 7675 2616 +3 4575 7009 4576 +3 2366 2315 2367 +3 3024 6665 1210 +3 7225 2998 6686 +3 6018 2426 2475 +3 2818 7802 2819 +3 6220 6448 4094 +3 5978 1334 907 +3 467 539 6957 +3 740 6027 8206 +3 3033 8188 1767 +3 3710 80 6728 +3 2821 7843 2885 +3 7480 6987 8227 +3 6106 5272 7773 +3 395 7547 8228 +3 3824 3826 7520 +3 2676 2629 3696 +3 3988 6764 3990 +3 6849 8168 6798 +3 1204 1206 3447 +3 2796 7260 8165 +3 4606 1851 1909 +3 3555 3556 3508 +3 2982 2985 3433 +3 248 250 6165 +3 8152 36 8229 +3 1394 7001 8207 +3 6870 6392 2077 +3 3796 3797 6012 +3 698 633 7298 +3 2176 2177 2226 +3 7466 4122 6163 +3 4816 8195 7517 +3 4070 5785 7644 +3 1528 7147 3261 +3 7148 6626 7731 +3 2919 2866 2920 +3 5000 7434 638 +3 7422 7725 3530 +3 3882 4170 3864 +3 4891 8205 5080 +3 436 5225 8136 +3 4433 4435 4434 +3 8093 6200 7780 +3 8230 5375 867 diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/detect_features_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/detect_features_example.cpp index a95c322fc77..ee3c704e7ed 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/detect_features_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/detect_features_example.cpp @@ -18,7 +18,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/P.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/face_filtered_graph_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/face_filtered_graph_example.cpp index 9d54eea2319..8fc832cf4dc 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/face_filtered_graph_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/face_filtered_graph_example.cpp @@ -28,7 +28,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/blobby_3cc.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example.cpp index 2a98bb66781..fe2cfb4a75c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example.cpp @@ -23,7 +23,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/mech-holes-shark.off"; Polyhedron poly; - if(!PMP::read_polygon_mesh(filename, poly)) + if(!PMP::IO::read_polygon_mesh(filename, poly)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_LCC.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_LCC.cpp index 7dd03e34d99..b7ee221fd8e 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_LCC.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_LCC.cpp @@ -25,7 +25,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/mech-holes-shark.off"; LCC mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -58,7 +58,7 @@ int main(int argc, char* argv[]) std::ofstream out("filled_LCC.off"); out.precision(17); - CGAL::write_OFF(out, mesh); + CGAL::IO::write_OFF(out, mesh); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_SM.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_SM.cpp index 40689ff2054..ea4082b0c5c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_SM.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/hole_filling_example_SM.cpp @@ -52,7 +52,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/mech-holes-shark.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -90,7 +90,7 @@ int main(int argc, char* argv[]) std::cout << std::endl; std::cout << nb_holes << " holes have been filled" << std::endl; - CGAL::write_polygon_mesh("filled_SM.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("filled_SM.off", mesh, CGAL::parameters::stream_precision(17)); std::cout << "Mesh written to: filled_SM.off" << std::endl; return 0; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_example.cpp index 2fb29d976ef..77e11fe115c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_example.cpp @@ -36,7 +36,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_of_patch_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_of_patch_example.cpp index fa67dc57d25..6a331b6a38c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_of_patch_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/isotropic_remeshing_of_patch_example.cpp @@ -37,7 +37,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -75,7 +75,7 @@ int main(int argc, char* argv[]) .protect_constraints(true)//i.e. protect border, here ); - CGAL::write_polygon_mesh("out.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("out.off", mesh, CGAL::parameters::stream_precision(17)); std::cout << "Remeshing done." << std::endl; return 0; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/manifoldness_repair_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/manifoldness_repair_example.cpp index 94274b740b3..f035ccc4946 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/manifoldness_repair_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/manifoldness_repair_example.cpp @@ -35,7 +35,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/blobby.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh) || CGAL::is_empty(mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh) || CGAL::is_empty(mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/compare_meshes_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/match_faces.cpp similarity index 86% rename from Polygon_mesh_processing/examples/Polygon_mesh_processing/compare_meshes_example.cpp rename to Polygon_mesh_processing/examples/Polygon_mesh_processing/match_faces.cpp index 5babc6b1ffb..9eeae6b6d00 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/compare_meshes_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/match_faces.cpp @@ -28,7 +28,7 @@ int main(int argc, char* argv[]) Surface_mesh mesh1; Polyhedron mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -41,15 +41,15 @@ int main(int argc, char* argv[]) PMP::match_faces(mesh1, mesh2, std::back_inserter(common), std::back_inserter(m1_only), std::back_inserter(m2_only)); - std::cout<<"Faces only in m1 :"< 1) ? argv[1] : "data/eight.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh) || CGAL::is_empty(mesh) || !CGAL::is_triangle_mesh(mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh) || CGAL::is_empty(mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/mesh_smoothing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/mesh_smoothing_example.cpp index afb47b3a465..9aff9d2306d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/mesh_smoothing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/mesh_smoothing_example.cpp @@ -20,7 +20,7 @@ int main(int argc, char** argv) const char* filename = argc > 1 ? argv[1] : "data/anchor_dense.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -47,7 +47,7 @@ int main(int argc, char** argv) .use_safety_constraints(false) // authorize all moves .edge_is_constrained_map(eif)); - CGAL::write_polygon_mesh("mesh_smoothed.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("mesh_smoothed.off", mesh, CGAL::parameters::stream_precision(17)); std::cout << "Done!" << std::endl; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/orient_polygon_soup_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/orient_polygon_soup_example.cpp index 49cc2711c2f..f0d37d9af7d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/orient_polygon_soup_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/orient_polygon_soup_example.cpp @@ -23,7 +23,7 @@ int main(int argc, char* argv[]) std::vector points; std::vector > polygons; - if(!CGAL::read_polygon_soup(filename, points, polygons) || points.empty()) + if(!CGAL::IO::read_polygon_soup(filename, points, polygons) || points.empty()) { std::cerr << "Cannot open file " << std::endl; return EXIT_FAILURE; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/orientation_pipeline_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/orientation_pipeline_example.cpp index bfb6d31f783..f34b46b8604 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/orientation_pipeline_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/orientation_pipeline_example.cpp @@ -29,7 +29,7 @@ int main(int argc, char** argv) std::vector points; std::vector > polygons; - if(!CGAL::read_polygon_soup(input_filename, points, polygons) || + if(!CGAL::IO::read_polygon_soup(input_filename, points, polygons) || points.size() == 0 || polygons.size() == 0) { std::cerr << "Error: can not read input file.\n"; @@ -37,7 +37,7 @@ int main(int argc, char** argv) } Mesh ref1; - if(!PMP::read_polygon_mesh(reference_filename, ref1)) + if(!PMP::IO::read_polygon_mesh(reference_filename, ref1)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/point_inside_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/point_inside_example.cpp index 355430023c3..87250a1703e 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/point_inside_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/point_inside_example.cpp @@ -33,7 +33,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/eight.off"; Polyhedron poly; - if(!PMP::read_polygon_mesh(filename, poly) || CGAL::is_empty(poly) || !CGAL::is_triangle_mesh(poly)) + if(!PMP::IO::read_polygon_mesh(filename, poly) || CGAL::is_empty(poly) || !CGAL::is_triangle_mesh(poly)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/polyhedral_envelope_of_triangle_soup.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/polyhedral_envelope_of_triangle_soup.cpp index 97a0fa3a607..89c4b7a659c 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/polyhedral_envelope_of_triangle_soup.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/polyhedral_envelope_of_triangle_soup.cpp @@ -19,7 +19,7 @@ int main(int argc, char* argv[]) std::vector points; std::vector > polygons; - CGAL::read_OFF(in, points, polygons); + CGAL::IO::read_OFF(in, points, polygons); Envelope envelope(points, polygons, eps); diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/random_perturbation_SM_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/random_perturbation_SM_example.cpp index d68467b62bf..2455f47fac8 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/random_perturbation_SM_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/random_perturbation_SM_example.cpp @@ -21,7 +21,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/eight.off"; Surface_mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -31,7 +31,7 @@ int main(int argc, char* argv[]) PMP::random_perturbation(mesh, max_size, CGAL::parameters::vertex_point_map(mesh.points()).geom_traits(K())); - CGAL::write_polygon_mesh("data/eight_perturbed.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("data/eight_perturbed.off", mesh, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/refine_fair_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/refine_fair_example.cpp index b850c28ae6e..de44126ec22 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/refine_fair_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/refine_fair_example.cpp @@ -45,7 +45,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/blobby.off"; Polyhedron poly; - if(!PMP::read_polygon_mesh(filename, poly) || !CGAL::is_triangle_mesh(poly)) + if(!PMP::IO::read_polygon_mesh(filename, poly) || !CGAL::is_triangle_mesh(poly)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/self_intersections_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/self_intersections_example.cpp index 75e7e45c3a0..a7b5037743d 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/self_intersections_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/self_intersections_example.cpp @@ -21,7 +21,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/shape_smoothing_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/shape_smoothing_example.cpp index ae7ba6f4926..7268a84b337 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/shape_smoothing_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/shape_smoothing_example.cpp @@ -17,7 +17,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/pig.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) PMP::smooth_shape(mesh, time, PMP::parameters::number_of_iterations(nb_iterations) .vertex_is_constrained_map(vcmap)); - CGAL::write_polygon_mesh("mesh_shape_smoothed.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("mesh_shape_smoothed.off", mesh, CGAL::parameters::stream_precision(17)); std::cout << "Done!" << std::endl; return EXIT_SUCCESS; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/stitch_borders_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/stitch_borders_example.cpp index 149bf6a5fee..7da94ff1bf5 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/stitch_borders_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/stitch_borders_example.cpp @@ -18,7 +18,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/full_border_quads.off"; Polyhedron mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -36,7 +36,7 @@ int main(int argc, char* argv[]) std::cout << "\t Number of halfedges :\t" << mesh.size_of_halfedges() << std::endl; std::cout << "\t Number of facets :\t" << mesh.size_of_facets() << std::endl; - CGAL::write_polygon_mesh("mesh_stitched.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("mesh_stitched.off", mesh, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/surface_mesh_intersection.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/surface_mesh_intersection.cpp index 177e55f46c3..9f925bdbdce 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/surface_mesh_intersection.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/surface_mesh_intersection.cpp @@ -25,7 +25,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc > 2) ? argv[2] : "data/eight.off"; Mesh mesh1, mesh2; - if(!PMP::read_polygon_mesh(filename1, mesh1) || !PMP::read_polygon_mesh(filename2, mesh2)) + if(!PMP::IO::read_polygon_mesh(filename1, mesh1) || !PMP::IO::read_polygon_mesh(filename2, mesh2)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_example.cpp index 70c6db3c96f..7391186d70a 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_example.cpp @@ -21,7 +21,7 @@ int main(int argc, char* argv[]) const char* outfilename = (argc > 2) ? argv[2] : "P_tri.off"; Surface_mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; @@ -34,7 +34,7 @@ int main(int argc, char* argv[]) if(!CGAL::is_triangle(halfedge(f, mesh), mesh)) std::cerr << "Error: non-triangular face left in mesh." << std::endl; - CGAL::write_polygon_mesh(outfilename, mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh(outfilename, mesh, CGAL::parameters::stream_precision(17)); return 0; } diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_split_visitor_example.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_split_visitor_example.cpp index 4036a4c504a..5091e5e447a 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_split_visitor_example.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/triangulate_faces_split_visitor_example.cpp @@ -90,7 +90,7 @@ int main(int argc, char* argv[]) Surface_mesh copy; - copy_face_graph(mesh, copy, CGAL::Emptyset_iterator(), CGAL::Emptyset_iterator(),Insert_iterator(t2q)); + CGAL::copy_face_graph(mesh, copy, CGAL::parameters::face_to_face_output_iterator(Insert_iterator(t2q))); Visitor v(t2q); CGAL::Polygon_mesh_processing::triangulate_faces(copy, diff --git a/Polygon_mesh_processing/examples/Polygon_mesh_processing/volume_connected_components.cpp b/Polygon_mesh_processing/examples/Polygon_mesh_processing/volume_connected_components.cpp index c800b9e3c27..8b90977371b 100644 --- a/Polygon_mesh_processing/examples/Polygon_mesh_processing/volume_connected_components.cpp +++ b/Polygon_mesh_processing/examples/Polygon_mesh_processing/volume_connected_components.cpp @@ -21,7 +21,7 @@ int main(int argc, char** argv) const char* filename = (argc > 1) ? argv[1] : "data/blobby.off"; Surface_mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h index d932c5b7583..4fe8a9deaf0 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/IO/polygon_mesh_io.h @@ -33,7 +33,7 @@ namespace CGAL { namespace Polygon_mesh_processing { - +namespace IO { /*! \ingroup PMP_IO_grp @@ -82,7 +82,7 @@ namespace Polygon_mesh_processing { * * \return `true` if the reading, repairing, and orientation operations were successful, `false` otherwise. * - * \sa \link PkgBGLIOFct `CGAL::write_polygon_mesh()` \endlink + * \sa \link PkgBGLIOFct `CGAL::IO::write_polygon_mesh()` \endlink */ template bool read_polygon_mesh(const std::string& fname, @@ -101,7 +101,7 @@ bool read_polygon_mesh(const std::string& fname, std::vector points; std::vector > faces; - if(!CGAL::read_polygon_soup(fname, points, faces)) + if(!CGAL::IO::read_polygon_soup(fname, points, faces)) { if(verbose) std::cerr << "Warning: cannot read polygon soup" << std::endl; @@ -135,11 +135,12 @@ bool read_polygon_mesh(const std::string& fname, template bool read_polygon_mesh(const std::string& fname, PolygonMesh& g) { - return CGAL::Polygon_mesh_processing::read_polygon_mesh(fname, g, parameters::all_default()); + return CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(fname, g, parameters::all_default()); } /// \endcond +} // namespace IO } // namespace Polygon_mesh_processing } // namespace CGAL diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/intersection_callbacks.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/intersection_callbacks.h index d764b106181..3c33b980cbc 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/intersection_callbacks.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Corefinement/intersection_callbacks.h @@ -21,7 +21,7 @@ #include #include -#include +#include #include namespace CGAL { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h index e60dafba2b1..4f1e2b7fac8 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Hole_filling/Triangulate_hole_polyline.h @@ -1487,6 +1487,8 @@ triangulate_hole_polyline(const PointRange1& points, bool use_delaunay_triangulation, const Kernel&) { + CGAL_assertion(!points.empty()); + typedef Kernel K; typedef typename K::Point_3 Point_3; #ifndef CGAL_HOLE_FILLING_DO_NOT_USE_DT3 diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h index 9bbe717ca5b..f3098e2422a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/internal/Isotropic_remeshing/remesh_impl.h @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include @@ -92,7 +92,7 @@ namespace internal { typedef typename boost::graph_traits::edge_descriptor edge_descriptor; typedef FaceIndexMap FIMap; - boost::shared_ptr< std::set > border_edges_ptr; + std::shared_ptr< std::set > border_edges_ptr; const PM* pmesh_ptr_; public: @@ -1294,6 +1294,8 @@ private: return false; else if (is_on_mesh(hopp) && is_on_border(h)) return false; + else if (is_an_isolated_constraint(h)) + return false; else return true; } @@ -1308,6 +1310,9 @@ private: if (is_on_mesh(he) && is_on_mesh(hopp)) return false; + if (is_an_isolated_constraint(he) || is_an_isolated_constraint(hopp)) + return false; + if ( (protect_constraints_ || !collapse_constraints) && is_constrained(e)) return false; if (is_on_patch(he)) //hopp is also on patch @@ -1562,21 +1567,23 @@ private: } //tag PATCH, //h and hopp belong to the patch to be remeshed + std::vector patch_halfedges; for(face_descriptor f : face_range) { for(halfedge_descriptor h : halfedges_around_face(halfedge(f, mesh_), mesh_)) { set_status(h, PATCH); + patch_halfedges.push_back(h); } } // tag patch border halfedges - for(halfedge_descriptor h : halfedges(mesh_)) + for(halfedge_descriptor h : patch_halfedges) { - if (status(h) == PATCH - && ( status(opposite(h, mesh_)) != PATCH - || get_patch_id(face(h, mesh_)) != get_patch_id(face(opposite(h, mesh_), mesh_)))) + CGAL_assertion(status(h) == PATCH); + if( status(opposite(h, mesh_)) != PATCH + || get_patch_id(face(h, mesh_)) != get_patch_id(face(opposite(h, mesh_), mesh_))) { set_status(h, PATCH_BORDER); has_border_ = true; @@ -1610,26 +1617,31 @@ private: if (hs != PATCH_BORDER && hsopp != PATCH_BORDER) { - set_status(h, ISOLATED_CONSTRAINT); - set_status(hopp, ISOLATED_CONSTRAINT); + if(hs != MESH_BORDER) + set_status(h, ISOLATED_CONSTRAINT); + if(hsopp != MESH_BORDER) + set_status(hopp, ISOLATED_CONSTRAINT); } } } } +#ifdef CGAL_PMP_REMESHING_DEBUG std::ofstream ofs("dump_isolated.polylines.txt"); for (edge_descriptor e : edges(mesh_)) { halfedge_descriptor h = halfedge(e, mesh_); - if (status(h) == ISOLATED_CONSTRAINT) - { - CGAL_assertion(status(opposite(h, mesh_)) == ISOLATED_CONSTRAINT); + Halfedge_status so = status(opposite(h, mesh_)); + bool isolated = (status(h) == ISOLATED_CONSTRAINT || so == ISOLATED_CONSTRAINT); + CGAL_assertion(!isolated + || so == ISOLATED_CONSTRAINT + || so == MESH_BORDER); + if(isolated) ofs << "2 " << get(vpmap_, target(h, mesh_)) - << " " << get(vpmap_, source(h, mesh_)) << std::endl; - } + << " " << get(vpmap_, source(h, mesh_)) << std::endl; } ofs.close(); - +#endif } Halfedge_status status(const halfedge_descriptor& h) const @@ -1903,7 +1915,8 @@ public: bool is_an_isolated_constraint(const halfedge_descriptor& h) const { bool res = (status(h) == ISOLATED_CONSTRAINT); - CGAL_assertion(!res || status(opposite(h, mesh_)) == ISOLATED_CONSTRAINT); + CGAL_assertion_code(Halfedge_status so = status(opposite(h, mesh_))); + CGAL_assertion(!res || so == ISOLATED_CONSTRAINT || so == MESH_BORDER); return res; } @@ -1926,6 +1939,7 @@ private: unsigned int nb_mesh = 0; unsigned int nb_patch = 0; unsigned int nb_patch_border = 0; + unsigned int nb_isolated = 0; for(halfedge_descriptor h : halfedges(mesh_)) { @@ -1933,6 +1947,7 @@ private: else if(is_on_patch_border(h)) nb_patch_border++; else if(is_on_mesh(h)) nb_mesh++; else if(is_on_border(h)) nb_border++; + else if(is_an_isolated_constraint(h)) nb_isolated++; else CGAL_assertion(false); } } diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h index f6cf6936f42..f65caaaa87a 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/measure.h @@ -53,14 +53,14 @@ public: namespace Polygon_mesh_processing { -namespace pmp_internal { +namespace internal { inline void rearrange_face_ids(boost::container::small_vector& ids) { - auto min_elem = std::min_element(ids.begin(), ids.end()); - std::rotate(ids.begin(), min_elem, ids.end()); + auto min_elem = std::min_element(ids.begin(), ids.end()); + std::rotate(ids.begin(), min_elem, ids.end()); } -}//end pmp_internal +}//namespace internal /** * \ingroup measure_grp * computes the length of an edge of a given polygon mesh. @@ -835,7 +835,7 @@ centroid(const TriangleMesh& tmesh) /** * \ingroup measure_grp * identifies faces only present in `m1` and `m2` as well as the faces present - * in both polygon meshes. Two faces are identical if they have the same + * in both polygon meshes. Two faces are matching if they have the same * orientation and the same points. * * @tparam PolygonMesh1 a model of `HalfedgeListGraph` and `FaceListGraph` @@ -851,8 +851,8 @@ centroid(const TriangleMesh& tmesh) * @tparam NamedParameters1 a sequence of \ref bgl_namedparameters "Named Parameters" * @tparam NamedParameters2 a sequence of \ref bgl_namedparameters "Named Parameters" * - * @param m1 the first `PolygonMesh1` - * @param m2 the second `PolygonMesh2` + * @param m1 the first `PolygonMesh` + * @param m2 the second `PolygonMesh` * @param common output iterator collecting the faces that are common to both meshes. * @param m1_only output iterator collecting the faces that are only in `m1` * @param m2_only output iterator collecting the faces that are only in `m2` @@ -863,7 +863,7 @@ centroid(const TriangleMesh& tmesh) * \cgalParamNBegin{vertex_point_map} * \cgalParamDescription{a property map associating points to the vertices of `m1`} * \cgalParamType{a class model of `ReadablePropertyMap` with `boost::graph_traits::%vertex_descriptor` - * as key type and `%Point_3` as value type. `%Point_3` must be LessThanComparable.} + * as key type and `%Point_3` as value type. `%Point_3` must be `LessThanComparable`.} * \cgalParamDefault{`boost::get(CGAL::vertex_point, m1)`} * \cgalParamExtra{The same holds for `m2` and `PolygonMesh2` and the point type must be the same for both meshes.} * \cgalParamNEnd @@ -883,29 +883,35 @@ centroid(const TriangleMesh& tmesh) */ template< typename PolygonMesh1, typename PolygonMesh2, + typename FacePairOutputIterator, typename FaceOutputIterator1, typename FaceOutputIterator2, - typename FacePairOutputIterator, typename NamedParameters1, typename NamedParameters2 > void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, FacePairOutputIterator common, FaceOutputIterator1 m1_only, FaceOutputIterator2 m2_only, const NamedParameters1& np1, const NamedParameters2& np2) { - using parameters::choose_parameter; - using parameters::get_parameter; - typedef typename GetVertexPointMap < PolygonMesh1, NamedParameters1>::const_type VPMap1; - typedef typename GetVertexPointMap < PolygonMesh2, NamedParameters2>::const_type VPMap2; + typedef typename GetVertexPointMap::const_type VPMap1; + typedef typename GetVertexPointMap::const_type VPMap2; typedef typename GetInitializedVertexIndexMap::const_type VIMap1; typedef typename GetInitializedVertexIndexMap::const_type VIMap2; - VPMap1 vpm1 = choose_parameter(get_parameter(np1, internal_np::vertex_point), - get_const_property_map(vertex_point, m1)); - VPMap2 vpm2 = choose_parameter(get_parameter(np2, internal_np::vertex_point), - get_const_property_map(vertex_point, m2)); - VIMap1 vim1 = get_initialized_vertex_index_map(m1, np1); - VIMap2 vim2 = get_initialized_vertex_index_map(m2, np2); - typedef typename boost::property_traits::value_type Point_3; - typedef typename boost::graph_traits::face_descriptor face_descriptor_1; + typedef typename boost::property_traits::value_type Point_3; + typedef typename boost::graph_traits::face_descriptor face_descriptor_1; + + using parameters::choose_parameter; + using parameters::get_parameter; + + const VPMap1 vpm1 = choose_parameter(get_parameter(np1, internal_np::vertex_point), + get_const_property_map(vertex_point, m1)); + const VPMap2 vpm2 = choose_parameter(get_parameter(np2, internal_np::vertex_point), + get_const_property_map(vertex_point, m2)); + CGAL_static_assertion_msg((boost::is_same::value_type, + typename boost::property_traits::value_type>::value), + "Both vertex point maps must have the same point type."); + + const VIMap1 vim1 = get_initialized_vertex_index_map(m1, np1); + const VIMap2 vim2 = get_initialized_vertex_index_map(m2, np2); std::map point_id_map; @@ -917,21 +923,21 @@ void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, std::size_t id = 0; for(auto v : vertices(m1)) { - const Point_3& p = get(vpm1, v); - auto res = point_id_map.insert(std::make_pair(p, id)); + const typename boost::property_traits::reference p = get(vpm1, v); + auto res = point_id_map.emplace(p, id); if(res.second) ++id; - m1_vertex_id[get(vim1, v)]=res.first->second; + m1_vertex_id[get(vim1, v)] = res.first->second; } for(auto v : vertices(m2)) { - const Point_3& p = get(vpm2, v); - auto res = point_id_map.insert(std::make_pair(p, id)); + const typename boost::property_traits::reference p = get(vpm2, v); + auto res = point_id_map.emplace(p, id); if(res.second) ++id; else shared_vertices.set(res.first->second); - m2_vertex_id[get(vim2, v)]=res.first->second; + m2_vertex_id[get(vim2, v)] = res.first->second; } //fill a set with the "faces point-ids" of m1 and then iterate faces of m2 to compare. @@ -942,7 +948,7 @@ void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, boost::container::small_vector ids; for(auto v : CGAL::vertices_around_face(halfedge(f, m1), m1)) { - std::size_t vid = m1_vertex_id[get(vim1, v)]; + std::size_t vid = m1_vertex_id[get(vim1, v)]; ids.push_back(vid); if(!shared_vertices.test(vid)) { @@ -952,8 +958,8 @@ void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, } if(all_shared) { - pmp_internal::rearrange_face_ids(ids); - m1_faces_map.insert({ids, f}); + internal::rearrange_face_ids(ids); + m1_faces_map.emplace(ids, f); } else *m1_only++ = f; @@ -974,7 +980,7 @@ void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, } if(all_shared) { - pmp_internal::rearrange_face_ids(ids); + internal::rearrange_face_ids(ids); auto it = m1_faces_map.find(ids); if(it != m1_faces_map.end()) { @@ -996,7 +1002,7 @@ void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, } } -template +template void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, FacePairOutputIterator common, FaceOutputIterator1 m1_only, FaceOutputIterator2 m2_only, const NamedParameters& np) @@ -1004,7 +1010,7 @@ void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, match_faces(m1, m2, common, m1_only, m2_only, np, parameters::all_default()); } -template +template void match_faces(const PolygonMesh1& m1, const PolygonMesh2& m2, FacePairOutputIterator common, FaceOutputIterator1 m1_only, FaceOutputIterator2 m2_only) { diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h index 8254cfa4384..cb4a1ce9e08 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_degeneracies.h @@ -436,7 +436,7 @@ bool remove_almost_degenerate_faces(const FaceRange& face_range, std::cout << "Iter: " << iter << std::endl; std::ostringstream oss; oss << "degen_cleaning_iter_" << iter++ << ".off"; - CGAL::write_polygon_mesh(oss.str(), tmesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh(oss.str(), tmesh, CGAL::parameters::stream_precision(17)); #endif if(edges_to_collapse.empty() && edges_to_flip.empty()) @@ -1680,7 +1680,7 @@ bool remove_degenerate_faces(const FaceRange& face_range, #ifdef CGAL_PMP_REMOVE_DEGENERATE_FACES_DEBUG { std::cout <<"Done with null edges.\n"; - CGAL::write_polygon_mesh("/tmp/no_null_edges.off", tmesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("/tmp/no_null_edges.off", tmesh, CGAL::parameters::stream_precision(17)); } #endif @@ -1804,7 +1804,7 @@ bool remove_degenerate_faces(const FaceRange& face_range, std::vector points; std::vector > triangles; std::ifstream in("/tmp/out.off"); - CGAL::read_OFF(in, points, triangles); + CGAL::IO::read_OFF(in, points, triangles); if(!CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh(triangles)) { std::cerr << "Warning: got a polygon soup (may simply be a non-manifold vertex)!\n"; diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_self_intersections.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_self_intersections.h index 18153362c22..ca8cc0c7897 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_self_intersections.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/repair_self_intersections.h @@ -245,7 +245,7 @@ FaceOutputIterator replace_faces_with_patch(const std::vector +template bool remove_self_intersections_with_smoothing(std::set::face_descriptor>& face_range, TriangleMesh& tmesh, const bool constrain_sharp_edges, const double dihedral_angle, const double weak_DA, -#ifndef CGAL_PMP_REMOVE_SELF_INTERSECTION_NO_POLYHEDRAL_ENVELOPE_CHECK - const Polyhedral_envelope& cc_envelope, -#endif + const PolyhedralEnvelope& cc_envelope, VertexPointMap vpm, const GeomTraits& gt) { @@ -469,7 +467,7 @@ bool remove_self_intersections_with_smoothing(std::set > patch; for(const face_descriptor f : faces(local_mesh)) @@ -1042,14 +1038,12 @@ bool check_patch_sanity(const std::vector >& patch) } // This function is only called when the hole is NOT subdivided into smaller holes -template +template bool fill_hole(std::vector::halfedge_descriptor>& cc_border_hedges, std::set::face_descriptor>& cc_faces, std::set::face_descriptor>& working_face_range, TriangleMesh& tmesh, -#ifndef CGAL_PMP_REMOVE_SELF_INTERSECTION_NO_POLYHEDRAL_ENVELOPE_CHECK - const CGAL::Polyhedral_envelope& cc_envelope, -#endif + const PolyhedralEnvelope& cc_envelope, VertexPointMap vpm, const GeomTraits& gt) { @@ -1087,7 +1081,6 @@ bool fill_hole(std::vector::halfedge_ return false; } -#ifndef CGAL_PMP_REMOVE_SELF_INTERSECTION_NO_POLYHEDRAL_ENVELOPE_CHECK if (!cc_envelope.is_empty() && !cc_envelope(patch)) { #ifdef CGAL_PMP_REMOVE_SELF_INTERSECTION_DEBUG @@ -1095,7 +1088,6 @@ bool fill_hole(std::vector::halfedge_ #endif return false; } -#endif // Could renew the range directly within the patch replacement function // to avoid erasing and re-adding the same face @@ -1121,13 +1113,11 @@ bool fill_hole(std::vector::halfedge_ } // Same function as above but border of the hole is not known -template +template bool fill_hole(std::set::face_descriptor>& cc_faces, std::set::face_descriptor>& working_face_range, TriangleMesh& tmesh, -#ifndef CGAL_PMP_REMOVE_SELF_INTERSECTION_NO_POLYHEDRAL_ENVELOPE_CHECK - const CGAL::Polyhedral_envelope& cc_envelope, -#endif + const PolyhedralEnvelope& cc_envelope, VertexPointMap vpm, const GeomTraits& gt) { @@ -1149,24 +1139,19 @@ bool fill_hole(std::set::face_descrip if(order_border_halfedge_range(cc_border_hedges, tmesh)) return fill_hole(cc_border_hedges, cc_faces, working_face_range, tmesh, -#ifndef CGAL_PMP_REMOVE_SELF_INTERSECTION_NO_POLYHEDRAL_ENVELOPE_CHECK - cc_envelope, -#endif - vpm, gt); + cc_envelope,vpm, gt); else return false; } -template +template bool fill_hole_with_constraints(std::vector::halfedge_descriptor>& cc_border_hedges, std::set::face_descriptor>& cc_faces, std::set::face_descriptor>& working_face_range, TriangleMesh& tmesh, const double dihedral_angle, const double weak_DA, -#ifndef CGAL_PMP_REMOVE_SELF_INTERSECTION_NO_POLYHEDRAL_ENVELOPE_CHECK - const CGAL::Polyhedral_envelope& cc_envelope, -#endif + const PolyhedralEnvelope& cc_envelope, VertexPointMap vpm, const GeomTraits& gt) { @@ -1215,10 +1200,7 @@ bool fill_hole_with_constraints(std::vector use basic hole-filling return fill_hole(cc_border_hedges, cc_faces, working_face_range, tmesh, -#ifndef CGAL_PMP_REMOVE_SELF_INTERSECTION_NO_POLYHEDRAL_ENVELOPE_CHECK - cc_envelope, -#endif - vpm, gt); + cc_envelope,vpm, gt); } } #ifdef CGAL_PMP_REMOVE_SELF_INTERSECTION_DEBUG @@ -1253,13 +1235,9 @@ bool fill_hole_with_constraints(std::vector new_faces; @@ -1378,7 +1352,7 @@ bool is_simple_3(const std::vector::h return true; } -template +template bool remove_self_intersections_with_hole_filling(std::vector::halfedge_descriptor>& cc_border_hedges, std::set::face_descriptor>& cc_faces, std::set::face_descriptor>& working_face_range, @@ -1386,9 +1360,7 @@ bool remove_self_intersections_with_hole_filling(std::vector& cc_envelope, -#endif + const PolyhedralEnvelope& cc_envelope, VertexPointMap vpm, const GeomTraits& gt) { @@ -1418,18 +1390,12 @@ bool remove_self_intersections_with_hole_filling(std::vector(cc_faces, tmesh, containment_epsilon); #else + struct Return_true { + bool is_empty() const { return true; } + bool operator()(const std::vector >&) const { return true; } + bool operator()(const TriangleMesh&) const { return true; } + }; + + Return_true cc_envelope; CGAL_USE(containment_epsilon); #endif @@ -1753,9 +1726,7 @@ remove_self_intersections_one_step(std::set mesh_non_border_hedges; std::set mesh_border_hedge; for(halfedge_descriptor h : cc_border_hedges) { if(!is_border(opposite(h, tmesh), tmesh)) - only_border_edges = false; + mesh_non_border_hedges.push_back(h); else mesh_border_hedge.insert(opposite(h, tmesh)); } - int nb_cycles = 0; + if (mesh_border_hedge.empty()) + { +#ifdef CGAL_PMP_REMOVE_SELF_INTERSECTION_DEBUG + std::cout << " DEBUG: CC not handled, selection is not a topological disk (preserve_genus=false)\n"; + ++unsolved_self_intersections; +#endif + topology_issue = true; + continue; + } + + // we look for cycles of border halfedges and update selection_chi while(!mesh_border_hedge.empty()) { // we must count the number of cycle of boundary edges @@ -1821,14 +1812,14 @@ remove_self_intersections_one_step(std::set::iterator it = mesh_border_hedge.find(h); if(it == mesh_border_hedge.end()) - break; // not a cycle + break; // not a cycle does not count mesh_border_hedge.erase(it); } @@ -1836,29 +1827,19 @@ remove_self_intersections_one_step(std::set (only_border_edges ? 1 : 0)) + if(selection_chi!=1) { #ifdef CGAL_PMP_REMOVE_SELF_INTERSECTION_DEBUG - std::cout << " DEBUG: CC not handled due to the presence of " - << nb_cycles << " of boundary edges\n"; - ++unsolved_self_intersections; + std::cout << " DEBUG: CC not handled, selection is not a topological disk even if" + << " boundary cycles are removed: chi=" << selection_chi << "\n"; + ++unsolved_self_intersections; #endif - topology_issue = true; continue; } else { - if(preserve_genus) - { -#ifdef CGAL_PMP_REMOVE_SELF_INTERSECTION_DEBUG - std::cout << " DEBUG: CC not handled because it is not a topological disk (preserve_genus=true)\n"; - ++unsolved_self_intersections; -#endif - - all_fixed = false; - continue; - } + cc_border_hedges.swap(mesh_non_border_hedges); // count the number of cycles of halfedges of the boundary std::map bhs; @@ -1907,9 +1888,7 @@ remove_self_intersections_one_step(std::set ::type Output_iterator_predicate; Output_iterator_predicate out_it_predicates - = choose_parameter(get_parameter(np, internal_np::filter)); + = choose_parameter(get_parameter(np, internal_np::filter)); // use containment check const double containment_epsilon = choose_parameter(get_parameter(np, internal_np::polyhedral_envelope_epsilon), 0.); diff --git a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h index 98c33a0c0f0..de4525c3890 100644 --- a/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h +++ b/Polygon_mesh_processing/include/CGAL/Polygon_mesh_processing/triangulate_hole.h @@ -543,6 +543,8 @@ namespace Polygon_mesh_processing { OutputIterator out, const NamedParameters& np) { + if (points.empty()) return out; + using parameters::choose_parameter; using parameters::get_parameter; diff --git a/Polygon_mesh_processing/include/CGAL/Polyhedral_envelope.h b/Polygon_mesh_processing/include/CGAL/Polyhedral_envelope.h index fe43b4f32d1..abc6f3804e4 100644 --- a/Polygon_mesh_processing/include/CGAL/Polyhedral_envelope.h +++ b/Polygon_mesh_processing/include/CGAL/Polyhedral_envelope.h @@ -85,6 +85,9 @@ #include #include #include +#include +#include + #ifdef DOXYGEN_RUNNING #define CGAL_PMP_NP_TEMPLATE_PARAMETERS NamedParameters #define CGAL_PMP_NP_CLASS NamedParameters diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt index ee7be943420..c3e7dfb367a 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/CMakeLists.txt @@ -71,6 +71,7 @@ create_single_source_cgal_program("pmp_do_intersect_test.cpp") create_single_source_cgal_program("test_is_polygon_soup_a_polygon_mesh.cpp") create_single_source_cgal_program("test_stitching.cpp") create_single_source_cgal_program("remeshing_test.cpp") +create_single_source_cgal_program("remeshing_with_isolated_constraints_test.cpp" ) create_single_source_cgal_program("measures_test.cpp") create_single_source_cgal_program("triangulate_faces_test.cpp") create_single_source_cgal_program("triangulate_faces_hole_filling_dt3_test.cpp") diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/autorefinement_sm.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/autorefinement_sm.cpp index 97f80e530ee..e437fe6e23e 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/autorefinement_sm.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/autorefinement_sm.cpp @@ -17,7 +17,7 @@ int main(int argc, char* argv[]) const char* filename = (argc > 1) ? argv[1] : "data/blobby.off"; Mesh mesh; - if(!PMP::read_polygon_mesh(filename, mesh)) + if(!PMP::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Input mesh is not a valid off file." << std::endl; return 1; @@ -42,17 +42,17 @@ int main(int argc, char* argv[]) PMP::experimental::autorefine(mesh); std::cout << "Number of vertices after autorefinement " << mesh.number_of_vertices() << "\n"; - CGAL::write_polygon_mesh("mesh_autorefined.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("mesh_autorefined.off", mesh, CGAL::parameters::stream_precision(17)); clear(mesh); - CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh); + CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh); std::cout << "Number of vertices before self-intersection removal " << mesh.number_of_vertices() << "\n"; if (!PMP::experimental::autorefine_and_remove_self_intersections(mesh)) std::cout << "WARNING: Cannot remove all self-intersections\n"; std::cout << "Number of vertices after self-intersection removal " << mesh.number_of_vertices() << "\n"; - CGAL::write_polygon_mesh("mesh_fixed.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("mesh_fixed.off", mesh, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/measures_test.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/measures_test.cpp index 701b9a2a3a6..b8db4721474 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/measures_test.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/measures_test.cpp @@ -203,17 +203,19 @@ void test_centroid(const char* filename) } -template +template void test_compare() { - typedef typename boost::graph_traits::vertex_descriptor vertex_descriptor; - typedef typename boost::graph_traits::face_descriptor face_descriptor; + typedef typename boost::graph_traits::face_descriptor face_descriptor1; + typedef typename boost::graph_traits::face_descriptor face_descriptor2; namespace PMP = CGAL::Polygon_mesh_processing; - PolygonMesh mesh1, mesh2; - std::vector > common; + PolygonMesh1 mesh1; + PolygonMesh2 mesh2; + std::vector > common; common.clear(); - std::vector m1_only, m2_only; + std::vector m1_only; + std::vector m2_only; /************************* * triangulated and open * * **********************/ @@ -262,8 +264,8 @@ void test_compare() return; } input.close(); - std::unordered_map fim1; - std::unordered_map fim2; + std::unordered_map fim1; + std::unordered_map fim2; std::size_t id = 0; for(const auto& f : faces(mesh1)) { @@ -360,10 +362,10 @@ int main(int argc, char* argv[]) // It won't work with Epec for large meshes as it builds up a deep DAG // leading to a stackoverflow when the destructor is called. test_centroid,Epic>(filename_surface_mesh); - test_compare >(); - test_compare >(); - test_compare >(); - test_compare >(); + test_compare, CGAL::Surface_mesh >(); + test_compare, CGAL::Surface_mesh >(); + test_compare, CGAL::Polyhedron_3 >(); + test_compare, CGAL::Polyhedron_3 >(); std::cerr << "All done." << std::endl; return 0; } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_with_isolated_constraints_test.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_with_isolated_constraints_test.cpp new file mode 100644 index 00000000000..4e7ebe96092 --- /dev/null +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/remeshing_with_isolated_constraints_test.cpp @@ -0,0 +1,61 @@ +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; +typedef Kernel::Point_3 Point_3; +typedef CGAL::Surface_mesh Polygon_mesh; + +typedef boost::graph_traits::vertex_descriptor vertex_descriptor; +typedef boost::graph_traits::edge_descriptor edge_descriptor; +typedef boost::graph_traits::face_descriptor face_descriptor; + +namespace PMP = CGAL::Polygon_mesh_processing; + +int main(int, char**) +{ + Polygon_mesh sm; + CGAL::make_grid(10, 10, sm); + PMP::triangulate_faces(sm); + std::cout << faces(sm).size() << " faces in input" << std::endl; + assert(faces(sm).size() == 200); + + std::set fs; + auto selected_faces = make_boolean_property_map(fs); + fs.insert(*(faces(sm).begin())); + CGAL::expand_face_selection(fs, sm, 1, selected_faces, CGAL::Emptyset_iterator()); + std::cout << fs.size() << " faces in the range" << std::endl; + assert(fs.size() == 4); + + typedef std::set Active_vertices; + Active_vertices active_vertices; + auto apm = make_boolean_property_map(active_vertices); + for(vertex_descriptor v : vertices(sm)) + put(apm, v, true); + + typedef CGAL::dynamic_edge_property_t Contraint_property; + typedef typename boost::property_map::type ECM; + ECM ecm = get(Contraint_property(), sm); + + for(edge_descriptor e : edges(sm)) + put(ecm, e, true); + + PMP::isotropic_remeshing(fs, 0.5, sm, CGAL::parameters::vertex_is_constrained_map(apm) + .edge_is_constrained_map(ecm) + .collapse_constraints(false) + .number_of_iterations(10) + .number_of_relaxation_steps(10)); + + std::cout << faces(sm).size() << " faces in output" << std::endl; + assert(faces(sm).size() == 234); + + return EXIT_SUCCESS; +} diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/surface_intersection_sm_poly.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/surface_intersection_sm_poly.cpp index 242e50edcbf..2eec580c5bc 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/surface_intersection_sm_poly.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/surface_intersection_sm_poly.cpp @@ -28,13 +28,13 @@ template void run(const char* filename1, const char* filename2, const char* msg) { TriangleMesh mesh1; - if ( !CGAL::Polygon_mesh_processing::read_polygon_mesh(filename1, mesh1) ) { + if ( !PMP::IO::read_polygon_mesh(filename1, mesh1) ) { std::cerr << filename1 << " is not a valid off file.\n"; exit(1); } TriangleMesh mesh2; - if ( !CGAL::Polygon_mesh_processing::read_polygon_mesh(filename2, mesh2) ) { + if ( !PMP::IO::read_polygon_mesh(filename2, mesh2) ) { std::cerr << filename2 << " is not a valid off file.\n"; exit(1); } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_autorefinement.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_autorefinement.cpp index eb8cf3a4654..06bbfa2a147 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_autorefinement.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_autorefinement.cpp @@ -22,7 +22,7 @@ struct My_visitor : : i (new int(0) ) {} - boost::shared_ptr i; + std::shared_ptr i; }; void test(const char* fname, std::size_t nb_polylines, std::size_t total_nb_points, diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefine.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefine.cpp index 10dd9ff76d7..ec1cefd793c 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefine.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefine.cpp @@ -20,7 +20,7 @@ struct My_visitor : : i (new int(0) ) {} - boost::shared_ptr i; + std::shared_ptr i; }; void test(const char* f1, const char* f2) diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefinement_bool_op.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefinement_bool_op.cpp index 4cc5233a1ce..0355040ecad 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefinement_bool_op.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_corefinement_bool_op.cpp @@ -67,7 +67,7 @@ void run_boolean_operations( #ifdef CGAL_COREFINEMENT_DEBUG std::stringstream fname; fname << scenario << "_tm1_union_tm2.off"; - CGAL::write_polygon_mesh(fname.str(), union_, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh(fname.str(), union_, CGAL::parameters::stream_precision(17)); #endif } else @@ -79,7 +79,7 @@ void run_boolean_operations( #ifdef CGAL_COREFINEMENT_DEBUG std::stringstream fname; fname << scenario << "_tm1_inter_tm2.off"; - CGAL::write_polygon_mesh(fname.str(), inter, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh(fname.str(), inter, CGAL::parameters::stream_precision(17)); #endif } else @@ -91,7 +91,7 @@ void run_boolean_operations( #ifdef CGAL_COREFINEMENT_DEBUG std::stringstream fname; fname << scenario << "_tm1_minus_tm2.off"; - CGAL::write_polygon_mesh(fname.str(), tm1_minus_tm2, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh(fname.str(), tm1_minus_tm2, CGAL::parameters::stream_precision(17)); #endif } else @@ -103,7 +103,7 @@ void run_boolean_operations( #ifdef CGAL_COREFINEMENT_DEBUG std::stringstream fname; fname << scenario << "_tm2_minus_tm1.off"; - CGAL::write_polygon_mesh(fname.str(), tm2_minus_tm1, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh(fname.str(), tm2_minus_tm1, CGAL::parameters::stream_precision(17)); #endif } else diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_is_polygon_soup_a_polygon_mesh.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_is_polygon_soup_a_polygon_mesh.cpp index c6e889e008f..97836482d73 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_is_polygon_soup_a_polygon_mesh.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_is_polygon_soup_a_polygon_mesh.cpp @@ -40,7 +40,7 @@ void test_polygon_soup(std::string fname, bool expected) exit(EXIT_FAILURE); } - if(!CGAL::read_OFF(input, points, polygons)) + if(!CGAL::IO::read_OFF(input, points, polygons)) { std::cerr << "Error parsing the OFF file " << fname << "\n"; exit(EXIT_FAILURE); diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_merging_border_vertices.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_merging_border_vertices.cpp index a178117ab66..491837ea01d 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_merging_border_vertices.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_merging_border_vertices.cpp @@ -32,7 +32,7 @@ void test_merge_duplicated_vertices_in_boundary_cycles(const char* fname, if (expected_nb_vertices==0) { std::cout << "writing output to out1.off\n"; - CGAL::write_polygon_mesh("out1.off", mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh("out1.off", mesh, CGAL::parameters::stream_precision(17)); } } diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_distance.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_distance.cpp index 7a908e33b8c..c8d1040383d 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_distance.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_distance.cpp @@ -1,11 +1,11 @@ #include #include + #include #include - - #include - +#include +#include #include #include @@ -194,6 +194,14 @@ struct Custom_traits_Hausdorff }; namespace CGAL{ + +CGAL_DEFINE_COERCION_TRAITS_FOR_SELF(Custom_traits_Hausdorff::FT) +CGAL_DEFINE_COERCION_TRAITS_FROM_TO(short, Custom_traits_Hausdorff::FT) +CGAL_DEFINE_COERCION_TRAITS_FROM_TO(int, Custom_traits_Hausdorff::FT) +CGAL_DEFINE_COERCION_TRAITS_FROM_TO(long, Custom_traits_Hausdorff::FT) +CGAL_DEFINE_COERCION_TRAITS_FROM_TO(float, Custom_traits_Hausdorff::FT) +CGAL_DEFINE_COERCION_TRAITS_FROM_TO(double, Custom_traits_Hausdorff::FT) + template<>struct Kernel_traits { typedef Custom_traits_Hausdorff Kernel; @@ -318,7 +326,7 @@ int main(int argc, char** argv) std::vector > faces; std::vector points; input.open(argv[1]); - CGAL::read_OFF(input, points, faces); + CGAL::IO::read_OFF(input, points, faces); input.close(); std::vector samples; diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_non_conforming_snapping.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_non_conforming_snapping.cpp index d9ede5fc7d0..c41b951d573 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_non_conforming_snapping.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_non_conforming_snapping.cpp @@ -51,7 +51,7 @@ void read_mesh(const char* filename, { std::vector points; std::vector > faces; - CGAL::read_STL(in, points, faces); + CGAL::IO::read_STL(in, points, faces); if(!CGAL::Polygon_mesh_processing::orient_polygon_soup(points, faces)) std::cerr << "W: File does not describe a polygon mesh" << std::endl; diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_polyhedral_envelope.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_polyhedral_envelope.cpp index 7127b22e3e0..1a7d4ff8041 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_polyhedral_envelope.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_polyhedral_envelope.cpp @@ -17,7 +17,7 @@ void test_API() std::vector points; std::vector > triangles; std::ifstream in("data/eight.off"); - CGAL::read_OFF(in, points, triangles); + CGAL::IO::read_OFF(in, points, triangles); CGAL::Surface_mesh sm; CGAL::Polyhedron_3 poly; PMP::polygon_soup_to_polygon_mesh(points, triangles, sm); diff --git a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_read_polygon_mesh.cpp b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_read_polygon_mesh.cpp index 3ad4d43e8f5..e205ea5c5db 100644 --- a/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_read_polygon_mesh.cpp +++ b/Polygon_mesh_processing/test/Polygon_mesh_processing/test_pmp_read_polygon_mesh.cpp @@ -42,14 +42,14 @@ void test(const std::string& filename, const bool is_pm) Mesh g; std::cout<<"0"< cvpm(cpoints); std::cout<<"4"< 1) path = std::string(argv[1]); path += "4464_" + file_name + ".off"; std::ofstream out(path.c_str(), std::ios_base::out); - CGAL::set_ascii_mode(out); - CGAL::write_OFF(out, pmesh); + CGAL::IO::set_ascii_mode(out); + CGAL::IO::write_OFF(out, pmesh); out.close(); std::cout << "* finished writing the file" << std::endl; } diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp index ef2f5599d51..81af025c489 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_model_complexty_control.cpp @@ -50,11 +50,11 @@ int main() CGAL::Timer t; t.start(); - if (!CGAL::read_PLY_with_properties(input_stream, - std::back_inserter(points), - CGAL::make_ply_point_reader(Point_map()), - CGAL::make_ply_normal_reader(Normal_map()), - std::make_pair(Plane_index_map(), CGAL::PLY_property("segment_index")))) + if (!CGAL::IO::read_PLY_with_properties(input_stream, + std::back_inserter(points), + CGAL::make_ply_point_reader(Point_map()), + CGAL::make_ply_normal_reader(Normal_map()), + std::make_pair(Plane_index_map(), CGAL::PLY_property("segment_index")))) { std::cerr << "Error: cannot read file " << input_file << std::endl; return EXIT_FAILURE; @@ -91,7 +91,7 @@ int main() } else { const std::string& output_file = "data/building_result-0.05.off"; - if (CGAL::write_OFF(output_file, model)) { + if (CGAL::IO::write_OFF(output_file, model)) { std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; } else { @@ -109,7 +109,7 @@ int main() } else { const std::string& output_file = "data/building_result-0.5.off"; - if (CGAL::write_OFF(output_file, model)) + if (CGAL::IO::write_OFF(output_file, model)) std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; else { std::cerr << " Failed saving file." << std::endl; @@ -126,7 +126,7 @@ int main() } else { const std::string& output_file = "data/building_result-0.7.off"; - if (CGAL::write_OFF(output_file, model)){ + if (CGAL::IO::write_OFF(output_file, model)){ std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; } else { diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp index dbe23f024fb..3a032287bdd 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_user_provided_planes.cpp @@ -50,11 +50,11 @@ int main() CGAL::Timer t; t.start(); - if (!CGAL::read_PLY_with_properties(input_stream, - std::back_inserter(points), - CGAL::make_ply_point_reader(Point_map()), - CGAL::make_ply_normal_reader(Normal_map()), - std::make_pair(Plane_index_map(), CGAL::PLY_property("segment_index")))) + if (!CGAL::IO::read_PLY_with_properties(input_stream, + std::back_inserter(points), + CGAL::make_ply_point_reader(Point_map()), + CGAL::make_ply_normal_reader(Normal_map()), + std::make_pair(Plane_index_map(), CGAL::PLY_property("segment_index")))) { std::cerr << "Error: cannot read file " << input_file << std::endl; return EXIT_FAILURE; @@ -90,7 +90,7 @@ int main() // Saves the mesh model const std::string& output_file("data/ball_result.off"); - if (CGAL::write_OFF(output_file, model)) + if (CGAL::IO::write_OFF(output_file, model)) std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; else { std::cerr << " Failed saving file." << std::endl; diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp index a30cfd29c01..936034142cd 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_with_region_growing.cpp @@ -101,8 +101,8 @@ int main() CGAL::Timer t; t.start(); - if (!CGAL::read_points(input_file.c_str(), std::back_inserter(points), - CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) { + if (!CGAL::IO::read_points(input_file.c_str(), std::back_inserter(points), + CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) { std::cerr << "Error: cannot read file " << input_file << std::endl; return EXIT_FAILURE; @@ -175,7 +175,7 @@ int main() std::cout << "Saving..."; t.reset(); const std::string& output_file("data/cube_result.off"); - if (CGAL::write_OFF(output_file, model)) + if (CGAL::IO::write_OFF(output_file, model)) std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; else { std::cerr << " Failed saving file." << std::endl; diff --git a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp index 0f8365be9a7..1a5d215a79f 100644 --- a/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp +++ b/Polygonal_surface_reconstruction/examples/Polygonal_surface_reconstruction/polyfit_example_without_input_planes.cpp @@ -68,8 +68,8 @@ int main() CGAL::Timer t; t.start(); - if (!CGAL::read_points(input_file.c_str(), std::back_inserter(points), - CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) + if (!CGAL::IO::read_points(input_file.c_str(), std::back_inserter(points), + CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) { std::cerr << "Error: cannot read file " << input_file << std::endl; return EXIT_FAILURE; @@ -126,7 +126,7 @@ int main() } const std::string& output_file("data/cube_result.off"); - if (CGAL::write_OFF(output_file, model)) + if (CGAL::IO::write_OFF(output_file, model)) std::cout << " Done. Saved to " << output_file << ". Time: " << t.time() << " sec." << std::endl; else { std::cerr << " Failed saving file." << std::endl; @@ -140,7 +140,7 @@ int main() algo.output_candidate_faces(candidate_faces); const std::string& candidate_faces_file("data/cube_candidate_faces.off"); std::ofstream candidate_stream(candidate_faces_file.c_str()); - if (CGAL::write_OFF(candidate_stream, candidate_faces)) + if (CGAL::IO::write_OFF(candidate_stream, candidate_faces)) std::cout << "Candidate faces saved to " << candidate_faces_file << "." << std::endl; return EXIT_SUCCESS; diff --git a/Polygonal_surface_reconstruction/test/Polygonal_surface_reconstruction/polygonal_surface_reconstruction_test_framework.h b/Polygonal_surface_reconstruction/test/Polygonal_surface_reconstruction/polygonal_surface_reconstruction_test_framework.h index 01021729f87..0f0582591cf 100644 --- a/Polygonal_surface_reconstruction/test/Polygonal_surface_reconstruction/polygonal_surface_reconstruction_test_framework.h +++ b/Polygonal_surface_reconstruction/test/Polygonal_surface_reconstruction/polygonal_surface_reconstruction_test_framework.h @@ -84,37 +84,36 @@ int reconstruct(const std::string& input_file, bool force_extract_planes) CGAL::Timer t; t.start(); if (extension == ".pwn") { - if (!CGAL::read_XYZ( - input_stream, - std::back_inserter(points), - CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) - { + if (!CGAL::IO::read_XYZ(input_stream, + std::back_inserter(points), + CGAL::parameters::point_map(Point_map()).normal_map(Normal_map()))) + { std::cerr << " Error: cannot read file " << input_file << std::endl; - return EXIT_FAILURE; - } - else - std::cout << " Done. " << points.size() << " points. Time: " << t.time() << " sec." << std::endl; + return EXIT_FAILURE; + } + else + std::cout << " Done. " << points.size() << " points. Time: " << t.time() << " sec." << std::endl; } else if (extension == ".ply") { - if (!CGAL::read_PLY_with_properties( + if (!CGAL::IO::read_PLY_with_properties( input_stream, std::back_inserter(points), CGAL::make_ply_point_reader(Point_map()), CGAL::make_ply_normal_reader(Normal_map()), std::make_pair(Plane_index_map(), CGAL::PLY_property("segment_index")))) - { - std::cerr << " Error: cannot read file " << input_file << std::endl; - return EXIT_FAILURE; - } - else - std::cout << " Done. " << points.size() << " points. Time: " << t.time() << " sec." << std::endl; + { + std::cerr << " Error: cannot read file " << input_file << std::endl; + return EXIT_FAILURE; + } + else + std::cout << " Done. " << points.size() << " points. Time: " << t.time() << " sec." << std::endl; - int max_plane_index = 0; + int max_plane_index = 0; for (std::size_t i = 0; i < points.size(); ++i) { - int plane_index = points[i].template get<2>(); - if (plane_index > max_plane_index) - max_plane_index = plane_index; - } + int plane_index = points[i].template get<2>(); + if (plane_index > max_plane_index) + max_plane_index = plane_index; + } int num_planes = max_plane_index + 1; // if fewer than 4 planes provided, we consider it as not provided. diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.cpp b/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.cpp index 1de6a367cb5..b919ba2ca6b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.cpp @@ -389,10 +389,10 @@ void Cluster_classification::backup_existing_colors_and_add_new() { if (m_points->point_set()->has_colors()) { - m_color = m_points->point_set()->add_property_map("real_color").first; + m_color = m_points->point_set()->add_property_map("real_color").first; for (Point_set::const_iterator it = m_points->point_set()->begin(); it != m_points->point_set()->first_selected(); ++ it) - m_color[*it] = CGAL::Color ((unsigned char)(255 * m_points->point_set()->red(*it)), + m_color[*it] = CGAL::IO::Color ((unsigned char)(255 * m_points->point_set()->red(*it)), (unsigned char)(255 * m_points->point_set()->green(*it)), (unsigned char)(255 * m_points->point_set()->blue(*it))); @@ -404,7 +404,7 @@ void Cluster_classification::backup_existing_colors_and_add_new() void Cluster_classification::reset_colors() { - if (m_color == Point_set::Property_map()) + if (m_color == Point_set::Property_map()) m_points->point_set()->remove_colors(); else { @@ -599,7 +599,7 @@ int Cluster_classification::real_index_color() const { int out = m_index_color; - if (out == 0 && m_color == Point_set::Property_map()) + if (out == 0 && m_color == Point_set::Property_map()) out = -1; return out; } @@ -635,7 +635,7 @@ void Cluster_classification::compute_features (std::size_t nb_scales, float voxe if (normals) normal_map = m_points->point_set()->normal_map(); - bool colors = (m_color != Point_set::Property_map()); + bool colors = (m_color != Point_set::Property_map()); Point_set::Property_map echo_map; bool echo; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h b/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h index e7b3df3e9b2..224a66d20c7 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Cluster_classification.h @@ -379,7 +379,7 @@ class Cluster_classification : public Item_classification_base Point_set::Property_map m_red; Point_set::Property_map m_green; Point_set::Property_map m_blue; - Point_set::Property_map m_color; + Point_set::Property_map m_color; Point_set::Property_map m_cluster_id; Point_set::Property_map m_training; Point_set::Property_map m_classif; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Item_classification_base.h b/Polyhedron/demo/Polyhedron/Plugins/Classification/Item_classification_base.h index ad13090ccc9..5b860c1b15c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Item_classification_base.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Item_classification_base.h @@ -228,7 +228,7 @@ public: void change_label_color (std::size_t position, const QColor& color) { m_labels[position]->set_color - (CGAL::Color (color.red(), color.green(), color.blue())); + (CGAL::IO::Color (color.red(), color.green(), color.blue())); } void change_label_name (std::size_t position, const std::string& name) { diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.cpp b/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.cpp index 06a51d6d962..b6295553e1a 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.cpp @@ -325,10 +325,10 @@ void Point_set_item_classification::backup_existing_colors_and_add_new() { if (m_points->point_set()->has_colors()) { - m_color = m_points->point_set()->add_property_map("real_color").first; + m_color = m_points->point_set()->add_property_map("real_color").first; for (Point_set::const_iterator it = m_points->point_set()->begin(); it != m_points->point_set()->first_selected(); ++ it) - m_color[*it] = CGAL::Color((unsigned char)(255 * m_points->point_set()->red(*it)), + m_color[*it] = CGAL::IO::Color((unsigned char)(255 * m_points->point_set()->red(*it)), (unsigned char)(255 * m_points->point_set()->green(*it)), (unsigned char)(255 * m_points->point_set()->blue(*it))); @@ -340,7 +340,7 @@ void Point_set_item_classification::backup_existing_colors_and_add_new() void Point_set_item_classification::reset_colors() { - if (m_color == Point_set::Property_map()) + if (m_color == Point_set::Property_map()) m_points->point_set()->remove_colors(); else { @@ -491,7 +491,7 @@ int Point_set_item_classification::real_index_color() const { int out = m_index_color; - if (out == 0 && m_color == Point_set::Property_map()) + if (out == 0 && m_color == Point_set::Property_map()) out = -1; return out; } @@ -530,7 +530,7 @@ void Point_set_item_classification::compute_features (std::size_t nb_scales, flo if (normals) normal_map = m_points->point_set()->normal_map(); - bool colors = (m_color != Point_set::Property_map()); + bool colors = (m_color != Point_set::Property_map()); Point_set::Property_map echo_map; bool echo; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h b/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h index bf6f3e1cf66..f52e2438aab 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Point_set_item_classification.h @@ -399,7 +399,7 @@ class Point_set_item_classification : public Item_classification_base Point_set::Property_map m_red; Point_set::Property_map m_green; Point_set::Property_map m_blue; - Point_set::Property_map m_color; + Point_set::Property_map m_color; std::vector > m_label_probabilities; Point_set::Property_map m_training; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.cpp b/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.cpp index 41f56217c4c..3fc12e4dd2f 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.cpp @@ -58,27 +58,27 @@ Surface_mesh_item_classification::~Surface_mesh_item_classification() void Surface_mesh_item_classification::backup_existing_colors_and_add_new() { bool has_colors = false; - boost::tie (m_color, has_colors) = m_mesh->polyhedron()->property_map("f:color"); + boost::tie (m_color, has_colors) = m_mesh->polyhedron()->property_map("f:color"); if (has_colors) { m_real_color - = m_mesh->polyhedron()->add_property_map("f:real_color").first; + = m_mesh->polyhedron()->add_property_map("f:real_color").first; for(face_descriptor fd : faces(*(m_mesh->polyhedron()))) { m_real_color[fd] = m_color[fd]; - m_color[fd] = CGAL::Color(128, 128, 128); + m_color[fd] = CGAL::IO::Color(128, 128, 128); } } else m_color = - m_mesh->polyhedron()->add_property_map("f:color", CGAL::Color(128,128,128)).first; + m_mesh->polyhedron()->add_property_map("f:color", CGAL::IO::Color(128,128,128)).first; } void Surface_mesh_item_classification::change_color (int index, float* vmin, float* vmax) { m_index_color = index; int index_color = index; - if (index == 0 && m_real_color == Mesh::Property_map()) + if (index == 0 && m_real_color == Mesh::Property_map()) index_color = -1; static Color_ramp ramp; @@ -87,7 +87,7 @@ void Surface_mesh_item_classification::change_color (int index, float* vmin, flo if (index_color == -1) // item color { for(face_descriptor fd : faces(*(m_mesh->polyhedron()))) - m_color[fd] = CGAL::Color(128,128,128); + m_color[fd] = CGAL::IO::Color(128,128,128); } else if (index_color == 0) // real colors { @@ -104,7 +104,7 @@ void Surface_mesh_item_classification::change_color (int index, float* vmin, flo if (c != std::size_t(-1)) color = label_qcolor (m_labels[c]); - m_color[fd] = CGAL::Color(color.red(), color.green(), color.blue()); + m_color[fd] = CGAL::IO::Color(color.red(), color.green(), color.blue()); } } else if (index_color == 2) // training @@ -121,7 +121,7 @@ void Surface_mesh_item_classification::change_color (int index, float* vmin, flo float div = 1; if (c != c2) div = 2; - m_color[fd] = CGAL::Color(color.red() / div, + m_color[fd] = CGAL::IO::Color(color.red() / div, color.green() / div, color.blue() / div); } @@ -136,7 +136,7 @@ void Surface_mesh_item_classification::change_color (int index, float* vmin, flo { for(face_descriptor fd : faces(*(m_mesh->polyhedron()))) { - m_color[fd] = CGAL::Color((unsigned char)(128), + m_color[fd] = CGAL::IO::Color((unsigned char)(128), (unsigned char)(128), (unsigned char)(128)); } @@ -146,7 +146,7 @@ void Surface_mesh_item_classification::change_color (int index, float* vmin, flo for(face_descriptor fd : faces(*(m_mesh->polyhedron()))) { float v = (std::max) (0.f, (std::min)(1.f, m_label_probabilities[corrected_index][fd])); - m_color[fd] = CGAL::Color((unsigned char)(ramp.r(v) * 255), + m_color[fd] = CGAL::IO::Color((unsigned char)(ramp.r(v) * 255), (unsigned char)(ramp.g(v) * 255), (unsigned char)(ramp.b(v) * 255)); } @@ -190,7 +190,7 @@ void Surface_mesh_item_classification::change_color (int index, float* vmin, flo if (v < 0.f) v = 0.f; if (v > 1.f) v = 1.f; - m_color[fd] = CGAL::Color((unsigned char)(ramp.r(v) * 255), + m_color[fd] = CGAL::IO::Color((unsigned char)(ramp.r(v) * 255), (unsigned char)(ramp.g(v) * 255), (unsigned char)(ramp.b(v) * 255)); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.h b/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.h index 1b6b2c1e720..797e88de438 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Classification/Surface_mesh_item_classification.h @@ -200,8 +200,8 @@ protected: Scene_polyhedron_selection_item* m_selection; Mesh::Property_map m_training; Mesh::Property_map m_classif; - Mesh::Property_map m_color; - Mesh::Property_map m_real_color; + Mesh::Property_map m_color; + Mesh::Property_map m_real_color; std::vector > m_label_probabilities; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp index 8b92ffb1b37..c787c901e5b 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Display/Display_property_plugin.cpp @@ -207,8 +207,8 @@ public: typedef boost::graph_traits::face_descriptor face_descriptor; typedef boost::graph_traits::halfedge_descriptor halfedge_descriptor; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - SMesh::Property_map vcolors = - sm->property_map("v:color").first; + SMesh::Property_map vcolors = + sm->property_map("v:color").first; SMesh::Property_map vdist= sm->property_map("v:dist").first; typedef CGAL::Buffer_for_vao CPF; @@ -263,7 +263,7 @@ public: } for(vertex_descriptor vd : vertices(*sm)) { - CGAL::Color c = vcolors[vd]; + CGAL::IO::Color c = vcolors[vd]; colors.push_back((float)c.red()/255); colors.push_back((float)c.green()/255); colors.push_back((float)c.blue()/255); @@ -966,8 +966,8 @@ private Q_SLOTS: dock_widget->maxBox->setValue(max); displayLegend(); //} - SMesh::Property_map vcolors = - mesh.add_property_map("v:color", CGAL::Color()).first; + SMesh::Property_map vcolors = + mesh.add_property_map("v:color", CGAL::IO::Color()).first; SMesh::Property_map vdist= mesh.add_property_map("v:dist", 0.0).first; for(boost::graph_traits::vertex_iterator vit = vertices(mesh).begin(); @@ -975,7 +975,7 @@ private Q_SLOTS: ++vit) { double h =(heat_intensity[*vit]-min)/(max-min); - CGAL::Color color( + CGAL::IO::Color color( 255*color_ramp.r(h), 255*color_ramp.g(h), 255*color_ramp.b(h)); @@ -1535,7 +1535,7 @@ private: pit != this->dataset.end(); ++pit) { - CGAL::Color color( + CGAL::IO::Color color( this->parent->color_map[value_index_map[this->property_map[*pit]]].red(), this->parent->color_map[value_index_map[this->property_map[*pit]]].green(), this->parent->color_map[value_index_map[this->property_map[*pit]]].blue()); @@ -1558,7 +1558,7 @@ private: f = 0; if(f>1) f = 1; - CGAL::Color color( + CGAL::IO::Color color( 255*this->parent->color_ramp.r(f), 255*this->parent->color_ramp.g(f), 255*this->parent->color_ramp.b(f)); @@ -1589,13 +1589,13 @@ private: void set_colors_map(std::unordered_map &value_index_map) { - SMesh::Property_map vcolors = - this->dataset.template add_property_map("v:color", CGAL::Color()).first; + SMesh::Property_map vcolors = + this->dataset.template add_property_map("v:color", CGAL::IO::Color()).first; for(boost::graph_traits::vertex_iterator vit = vertices(this->dataset).begin(); vit != vertices(this->dataset).end(); ++vit) { - CGAL::Color color( + CGAL::IO::Color color( this->parent->color_map[value_index_map[this->property_map[*vit]]].red(), this->parent->color_map[value_index_map[this->property_map[*vit]]].green(), this->parent->color_map[value_index_map[this->property_map[*vit]]].blue()); @@ -1605,8 +1605,8 @@ private: void set_colors_ramp() { - SMesh::Property_map vcolors = - this->dataset.template add_property_map("v:color", CGAL::Color()).first; + SMesh::Property_map vcolors = + this->dataset.template add_property_map("v:color", CGAL::IO::Color()).first; float max = this->parent->maxBox; float min = this->parent->minBox; for(boost::graph_traits::vertex_iterator vit = vertices(this->dataset).begin(); @@ -1620,7 +1620,7 @@ private: f = 0; if(f>1) f = 1; - CGAL::Color color( + CGAL::IO::Color color( 255*this->parent->color_ramp.r(f), 255*this->parent->color_ramp.g(f), 255*this->parent->color_ramp.b(f)); @@ -1648,13 +1648,13 @@ private: void set_colors_map(std::unordered_map &value_index_map) { - SMesh::Property_map fcolors = - this->dataset.template add_property_map("f:color", CGAL::Color()).first; + SMesh::Property_map fcolors = + this->dataset.template add_property_map("f:color", CGAL::IO::Color()).first; for(boost::graph_traits::face_iterator fit = faces(this->dataset).begin(); fit != faces(this->dataset).end(); ++fit) { - CGAL::Color color( + CGAL::IO::Color color( this->parent->color_map[value_index_map[this->property_map[*fit]]].red(), this->parent->color_map[value_index_map[this->property_map[*fit]]].green(), this->parent->color_map[value_index_map[this->property_map[*fit]]].blue()); @@ -1664,8 +1664,8 @@ private: void set_colors_ramp() { - SMesh::Property_map fcolors = - this->dataset.template add_property_map("f:color", CGAL::Color()).first; + SMesh::Property_map fcolors = + this->dataset.template add_property_map("f:color", CGAL::IO::Color()).first; float max = this->parent->maxBox; float min = this->parent->minBox; for(boost::graph_traits::face_iterator fit = faces(this->dataset).begin(); @@ -1679,7 +1679,7 @@ private: f = 0; if(f>1) f = 1; - CGAL::Color color( + CGAL::IO::Color color( 255*this->parent->color_ramp.r(f), 255*this->parent->color_ramp.g(f), 255*this->parent->color_ramp.b(f)); diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/3mf_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/3mf_io_plugin.cpp index 401834f0a0f..739eb180174 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/3mf_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/3mf_io_plugin.cpp @@ -32,7 +32,7 @@ class Io_3mf_plugin: typedef std::vector Polygon; typedef std::vector PolygonRange; typedef std::list PolylineRange; - typedef std::vector ColorRange; + typedef std::vector ColorRange; void init() Q_DECL_OVERRIDE { QMenu* menuFile = CGAL::Three::Three::mainWindow()->findChild("menuFile"); @@ -76,10 +76,10 @@ class Io_3mf_plugin: std::vector all_polygons; std::vector names; QList result; - std::vector > all_colors; + std::vector > all_colors; int nb_meshes = - CGAL::read_3MF(fileinfo.filePath().toUtf8().toStdString(), - all_points, all_polygons, all_colors, names); + CGAL::IO::read_3MF(fileinfo.filePath().toUtf8().toStdString(), + all_points, all_polygons, all_colors, names); if(nb_meshes <0 ) { ok = false; @@ -100,7 +100,7 @@ class Io_3mf_plugin: } SMesh mesh; PMP::polygon_soup_to_polygon_mesh(points, triangles, mesh); - CGAL::Color first = colors.front(); + CGAL::IO::Color first = colors.front(); bool need_pmap = false; for(auto color : colors) { @@ -112,16 +112,16 @@ class Io_3mf_plugin: } if(need_pmap) { - SMesh::Property_map fcolor = - mesh.add_property_map("f:color",first).first; + SMesh::Property_map fcolor = + mesh.add_property_map("f:color",first).first; for(std::size_t pid = 0; pid < colors.size(); ++pid) { put(fcolor, face_descriptor(pid), colors[pid]);//should work bc mesh is just created and shouldn't have any destroyed face. Not so sure bc of orientation though. } } Scene_surface_mesh_item* sm_item = new Scene_surface_mesh_item(mesh); - if(first == CGAL::Color(0,0,0,0)) - first = CGAL::Color(50,80,120,255); + if(first == CGAL::IO::Color(0,0,0,0)) + first = CGAL::IO::Color(50,80,120,255); sm_item->setColor(QColor(first.red(), first.green(), first.blue())); sm_item->setProperty("already_colored", true); sm_item->setName(names[i].data()); @@ -206,13 +206,13 @@ class Io_3mf_plugin: triangles.push_back(triangle); } - std::vector colors; + std::vector colors; //if item is multicolor, fill colors with f:color if(sm_item->isItemMulticolor()) { colors.reserve(triangles.size()); - SMesh::Property_map fcolors = - mesh.property_map("f:color").first; + SMesh::Property_map fcolors = + mesh.property_map("f:color").first; for(auto fd : mesh.faces()) { colors.push_back(get(fcolors, fd)); @@ -227,7 +227,7 @@ class Io_3mf_plugin: { int pid = get(fpid, fd); QColor q_color = sm_item->color_vector()[pid]; - colors.push_back(CGAL::Color(q_color.red(), q_color.green(), + colors.push_back(CGAL::IO::Color(q_color.red(), q_color.green(), q_color.blue(), q_color.alpha())); } } @@ -246,7 +246,7 @@ class Io_3mf_plugin: for(Scene_points_with_normal_item* pts_item : pts_items) { QColor qc = pts_item->color(); - CGAL::Color color(qc.red(), qc.green(), qc.blue()); + CGAL::IO::Color color(qc.red(), qc.green(), qc.blue()); CGAL::IO::write_point_cloud_to_model(pts_item->point_set()->points(), color, pts_item->name().toStdString(), &pMeshObject, pModel); @@ -257,7 +257,7 @@ class Io_3mf_plugin: pol_it != pol_item->polylines.end(); ++pol_it) { QColor qc = pol_item->color(); - CGAL::Color color(qc.red(), qc.green(), qc.blue()); + CGAL::IO::Color color(qc.red(), qc.green(), qc.blue()); CGAL::IO::write_polyline_to_model(*pol_it,color, pol_item->name().toStdString(), &pMeshObject, pModel); diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp index 1e4e522cf45..feeef33572e 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/GOCAD_io_plugin.cpp @@ -74,7 +74,7 @@ Polyhedron_demo_gocad_plugin::load(QFileInfo fileinfo, bool& ok, bool add_to_sce SMesh& P = * const_cast(item->polyhedron()); std::pair name_and_color; - if(! CGAL::read_GOCAD(in, name_and_color, P)) + if(! CGAL::IO::read_GOCAD(in, name_and_color, P)) { std::cerr << "Error: Invalid polyhedron" << std::endl; delete item; @@ -121,7 +121,7 @@ save(QFileInfo fileinfo,QList& items) std::ofstream out(fileinfo.filePath().toUtf8()); out.precision (std::numeric_limits::digits10 + 2); SMesh* poly = const_cast(sm_item->polyhedron()); - CGAL::write_GOCAD(out, qPrintable(fileinfo.baseName()), *poly); + CGAL::IO::write_GOCAD(out, qPrintable(fileinfo.baseName()), *poly); items.pop_front(); return true; diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/LAS_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/LAS_io_plugin.cpp index ee4b373b160..a46bc54d3bf 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/LAS_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/LAS_io_plugin.cpp @@ -40,7 +40,7 @@ load(QFileInfo fileinfo, bool& ok, bool add_to_scene) { item->point_set()->clear(); - ok = CGAL::read_LAS (in, *(item->point_set())) && !item->isEmpty(); + ok = CGAL::IO::read_LAS (in, *(item->point_set())) && !item->isEmpty(); if(ok) { std::cerr << item->point_set()->info(); @@ -95,7 +95,7 @@ bool Polyhedron_demo_las_plugin::save(QFileInfo fileinfo,QListpoint_set()->reset_indices(); - return CGAL::write_LAS(out, *(point_set_item->point_set())); + return CGAL::IO::write_LAS(out, *(point_set_item->point_set())); } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp index 87b92228a80..e7de52da567 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/OFF_io_plugin.cpp @@ -221,7 +221,7 @@ Polyhedron_demo_off_plugin::load_obj(QFileInfo fileinfo) { //if not polygonmesh load in soup std::vector points; std::vector > polygons; - if(CGAL::read_OBJ(in, points, polygons)) + if(CGAL::IO::read_OBJ(in, points, polygons)) { Scene_polygon_soup_item* soup_item = new Scene_polygon_soup_item(); soup_item->load(points, polygons); @@ -272,7 +272,7 @@ save(QFileInfo fileinfo,QList& items) } if(fileinfo.suffix().toLower() == "obj"){ bool res = (sm_item && sm_item->save_obj(out)) - || (soup_item && CGAL::write_OBJ(out, soup_item->points(), soup_item->polygons())); + || (soup_item && CGAL::IO::write_OBJ(out, soup_item->points(), soup_item->polygons())); if(res) { items.pop_front(); diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp index d649629168a..fe4120c5919 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/PLY_io_plugin.cpp @@ -102,7 +102,7 @@ load(QFileInfo fileinfo, bool& ok, bool add_to_scene) { // First try mesh std::string comments; Scene_surface_mesh_item* sm_item = new Scene_surface_mesh_item(); - if (CGAL::read_PLY(in, *sm_item->face_graph(), comments)) + if (CGAL::IO::read_PLY(in, *sm_item->face_graph(), comments)) { if(sm_item->face_graph()->property_map("f:patch_id").second) { @@ -129,10 +129,10 @@ load(QFileInfo fileinfo, bool& ok, bool add_to_scene) { // else try polygon soup std::vector points; std::vector > polygons; - std::vector fcolors; - std::vector vcolors; + std::vector fcolors; + std::vector vcolors; - if (!(CGAL::read_PLY (in, points, polygons, fcolors, vcolors))) + if (!(CGAL::IO::read_PLY (in, points, polygons, fcolors, vcolors))) { QApplication::restoreOverrideCursor(); ok = false; @@ -205,7 +205,7 @@ save(QFileInfo fileinfo,QList& items) std::ofstream out(fileinfo.filePath().toUtf8().data(), std::ios::binary); if (choice == tr("Binary")) - CGAL::set_binary_mode(out); + CGAL::IO::set_binary_mode(out); else out.precision (std::numeric_limits::digits10 + 2); @@ -227,7 +227,7 @@ save(QFileInfo fileinfo,QList& items) if (soup_item) { bool res = - CGAL::write_PLY (out, soup_item->points(), soup_item->polygons()); + CGAL::IO::write_PLY (out, soup_item->points(), soup_item->polygons()); if(res) items.pop_front(); return res; @@ -239,7 +239,7 @@ save(QFileInfo fileinfo,QList& items) if (sm_item) { bool res = - CGAL::write_PLY(out, *(sm_item->polyhedron()), sm_item->comments()); + CGAL::IO::write_PLY(out, *(sm_item->polyhedron()), sm_item->comments()); if(res) items.pop_front(); return res; @@ -251,7 +251,7 @@ save(QFileInfo fileinfo,QList& items) if (stm_item) { bool res = - CGAL::write_PLY(out, *(stm_item->textured_face_graph())); + CGAL::IO::write_PLY(out, *(stm_item->textured_face_graph())); if(res) items.pop_front(); return res; diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp index 90626158e40..20fa2f36ca1 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/STL_io_plugin.cpp @@ -78,7 +78,7 @@ load(QFileInfo fileinfo, bool& ok, bool add_to_scene){ } std::vector points; std::vector > triangles; - if (!CGAL::read_polygon_soup(fileinfo.filePath().toUtf8().toStdString(), points, triangles)) + if (!CGAL::IO::read_polygon_soup(fileinfo.filePath().toUtf8().toStdString(), points, triangles)) { std::cerr << "Error: invalid STL file" << std::endl; ok = false; @@ -147,16 +147,16 @@ save(QFileInfo fileinfo,QList& items) std::ofstream out(fileinfo.filePath().toUtf8(), std::ios::out | std::ios::binary); if ( choice == tr("Binary") ) - CGAL::set_mode(out, CGAL::IO::BINARY); + CGAL::IO::set_mode(out, CGAL::IO::BINARY); else { - CGAL::set_mode(out, CGAL::IO::ASCII); + CGAL::IO::set_mode(out, CGAL::IO::ASCII); out.precision (std::numeric_limits::digits10 + 2); } if (sm_item) { - CGAL::write_STL(out, *sm_item->face_graph()); + CGAL::IO::write_STL(out, *sm_item->face_graph()); items.pop_front(); return true; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp index 7dbc3eaa910..12616332198 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/VTK_io_plugin.cpp @@ -241,7 +241,7 @@ public: std::ofstream os(output_filename.data()); os << std::setprecision(16); //write header - CGAL::write_VTP(os, *mesh); + CGAL::IO::write_VTP(os, *mesh); } } else @@ -255,7 +255,7 @@ public: os << std::setprecision(16); const C3t3& c3t3 = c3t3_item->c3t3(); - CGAL::output_to_vtu(os, c3t3); + CGAL::IO::output_to_vtu(os, c3t3); } items.pop_front(); return true; diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/WKT_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/WKT_io_plugin.cpp index 5c509345eda..9dbd44d2abe 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/WKT_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/WKT_io_plugin.cpp @@ -60,7 +60,7 @@ load(QFileInfo fileinfo, bool& ok, bool add_to_scene) { } std::list > polylines; - CGAL::read_multi_linestring_WKT (in, polylines); + CGAL::IO::read_multi_linestring_WKT (in, polylines); Scene_polylines_item* item = new Scene_polylines_item; item->polylines = polylines; @@ -101,7 +101,7 @@ save(QFileInfo fileinfo,QList& items) qobject_cast(item); if (polylines_item) { - CGAL::write_multi_linestring_WKT (out, polylines_item->polylines); + CGAL::IO::write_multi_linestring_WKT (out, polylines_item->polylines); items.pop_front(); return true; } diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp index 4dfab1afc69..e2e77c8faff 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/C3t3_io_plugin.cpp @@ -248,7 +248,7 @@ save(QFileInfo fileinfo, QList &items) else if (fileinfo.suffix() == "am") { std::ofstream avizo_file (qPrintable(path)); - CGAL::output_to_avizo(avizo_file, c3t3_item->c3t3()); + CGAL::IO::output_to_avizo(avizo_file, c3t3_item->c3t3()); items.pop_front(); return true; } @@ -302,7 +302,7 @@ operator>>( std::istream& is, Fake_CDT_3_vertex_base& v) { is >> static_cast::Base&>(v); char s; - if( CGAL::is_ascii(is) ) { + if( CGAL::IO::is_ascii(is) ) { is >> s; if( s == 'S' ) { v.steiner = true; @@ -359,13 +359,13 @@ std::istream& operator>>( std::istream& is, Fake_CDT_3_cell_base& c) { char s; for( int li = 0; li < 4; ++li ) { - if( CGAL::is_ascii(is) ) + if( CGAL::IO::is_ascii(is) ) is >> c.constrained_facet[li]; else CGAL::read( is, c.constrained_facet[li] ); } - if( CGAL::is_ascii(is) ) { + if( CGAL::IO::is_ascii(is) ) { is >> s; CGAL_assertion(s == '-'); } @@ -510,7 +510,7 @@ try_load_a_cdt_3(std::istream& is, C3t3& c3t3) return false; } } - if(binary) CGAL::set_binary_mode(is); + if(binary) CGAL::IO::set_binary_mode(is); if(c3t3.triangulation().file_input< Fake_CDT_3, Update_vertex_from_CDT_3, @@ -529,7 +529,7 @@ bool Polyhedron_demo_c3t3_binary_io_plugin:: try_load_other_binary_format(std::istream& is, C3t3& c3t3) { - CGAL::set_ascii_mode(is); + CGAL::IO::set_ascii_mode(is); std::string s; if(!(is >> s)) return false; bool binary = false; @@ -552,8 +552,8 @@ try_load_other_binary_format(std::istream& is, C3t3& c3t3) return false; } } - if(binary) CGAL::set_binary_mode(is); - else CGAL::set_ascii_mode(is); + if(binary) CGAL::IO::set_binary_mode(is); + else CGAL::IO::set_ascii_mode(is); std::istream& f_is = c3t3.triangulation().file_input< Fake_c3t3::Triangulation, Update_vertex, diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt index 4c54343a0f3..5c3e9542e83 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/CMakeLists.txt @@ -35,7 +35,7 @@ if(VTK_FOUND) endif() if("${VTK_VERSION_MAJOR}" GREATER "5" OR VTK_VERSION VERSION_GREATER 5) if(TARGET VTK::IOImage) - set(VTK_LIBRARIES VTK::IOImage) + set(VTK_LIBRARIES VTK::IOImage VTK::ImagingGeneral) endif() if(NOT VTK_LIBRARIES) message( diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp index 33248597860..1b2a4553095 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Io_image_plugin.cpp @@ -57,7 +57,7 @@ #include #include #ifdef CGAL_USE_VTK -#include +#include #include #include @@ -1312,7 +1312,7 @@ Image* Io_image_plugin::createDCMImage(QString dirname) auto vtk_image = smoother->GetOutput(); vtk_image->Print(std::cerr); image = new Image; - *image = CGAL::read_vtk_image_data(vtk_image); // copy the image data + *image = CGAL::IO::read_vtk_image_data(vtk_image); // copy the image data #else CGAL::Three::Three::warning("You need VTK to read a DCM file"); CGAL_USE(dirname); diff --git a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h index 22c5ab667f7..2e72edebc9c 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h +++ b/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Mesh_3_plugin_cgal_code.h @@ -7,7 +7,7 @@ #include "Kernel_type.h" #include "Meshing_thread.h" #include "Scene_surface_mesh_item.h" -#include +#include #include class Scene_surface_mesh_item; diff --git a/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp index b98ab4052a4..467331c4fd2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/PMP/Orient_soup_plugin.cpp @@ -113,28 +113,28 @@ QList Polyhedron_demo_orient_soup_plugin::actions() const { << actionClean; } -void set_vcolors(SMesh* smesh, std::vector colors) +void set_vcolors(SMesh* smesh, std::vector colors) { typedef SMesh SMesh; typedef boost::graph_traits::vertex_descriptor vertex_descriptor; - SMesh::Property_map vcolors = - smesh->property_map("v:color").first; + SMesh::Property_map vcolors = + smesh->property_map("v:color").first; bool created; - boost::tie(vcolors, created) = smesh->add_property_map("v:color",CGAL::Color(0,0,0)); + boost::tie(vcolors, created) = smesh->add_property_map("v:color",CGAL::IO::Color(0,0,0)); assert(colors.size()==smesh->number_of_vertices()); int color_id = 0; for(vertex_descriptor vd : vertices(*smesh)) vcolors[vd] = colors[color_id++]; } -void set_fcolors(SMesh* smesh, std::vector colors) +void set_fcolors(SMesh* smesh, std::vector colors) { typedef SMesh SMesh; typedef boost::graph_traits::face_descriptor face_descriptor; - SMesh::Property_map fcolors = - smesh->property_map("f:color").first; + SMesh::Property_map fcolors = + smesh->property_map("f:color").first; bool created; - boost::tie(fcolors, created) = smesh->add_property_map("f:color",CGAL::Color(0,0,0)); + boost::tie(fcolors, created) = smesh->add_property_map("f:color",CGAL::IO::Color(0,0,0)); assert(colors.size()==smesh->number_of_faces()); int color_id = 0; for(face_descriptor fd : faces(*smesh)) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp index a379cf36095..3b68e11752d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Offset_meshing_plugin.cpp @@ -35,7 +35,7 @@ #include #include -#include +#include #include // std::shared_ptr @@ -76,8 +76,8 @@ public: } private: - boost::shared_ptr m_tree_ptr; - boost::shared_ptr m_side_of_ptr; + std::shared_ptr m_tree_ptr; + std::shared_ptr m_side_of_ptr; double m_offset_distance; bool m_is_closed; diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Surface_mesh_approximation_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Surface_mesh_approximation_plugin.cpp index bba6d446aa6..bf993b55c90 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Surface_mesh_approximation_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh/Surface_mesh_approximation_plugin.cpp @@ -254,10 +254,10 @@ public: cvx_hull_points.push_back(origin + p.x() * base1 + p.y() * base2); } } - std::vector fcolors; + std::vector fcolors; for(const QColor& c : approx.proxy_colors()) - fcolors.push_back(CGAL::Color(c.red(), c.green(), c.blue())); - approx.visual_items().planes->load(cvx_hull_points, cvx_hulls, fcolors, std::vector()); + fcolors.push_back(CGAL::IO::Color(c.red(), c.green(), c.blue())); + approx.visual_items().planes->load(cvx_hull_points, cvx_hulls, fcolors, std::vector()); } public Q_SLOTS: diff --git a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp index 3709992f052..f316258cb5d 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Surface_mesh_deformation/Scene_edit_polyhedron_item.cpp @@ -357,7 +357,7 @@ void Scene_edit_polyhedron_item_priv::compute_normals_and_vertices(Mesh* mesh) if(spheres) { - CGAL::Color c(0,255,0); + CGAL::IO::Color c(0,255,0); EPICK::Point_3 point(p.x()+offset.x, p.y()+offset.y, p.z()+offset.z); spheres->add_sphere(EPICK::Sphere_3(point, length_of_axis/15.0*length_of_axis/15.0), 0, c); } @@ -391,7 +391,7 @@ void Scene_edit_polyhedron_item_priv::compute_normals_and_vertices(Mesh* mesh) if(spheres_ctrl) { - CGAL::Color c(255*r,0,255*b); + CGAL::IO::Color c(255*r,0,255*b); EPICK::Point_3 center(p.x()+offset.x, p.y()+offset.y, diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp index a9a3626d544..3b604818e77 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.cpp @@ -34,7 +34,7 @@ #include #include #include -#include +#include #include "Scene_polygon_soup_item.h" @@ -186,7 +186,7 @@ public : } void addTriangle(const Tr::Bare_point& pa, const Tr::Bare_point& pb, - const Tr::Bare_point& pc, const CGAL::Color color) + const Tr::Bare_point& pc, const CGAL::IO::Color color) { const CGAL::qglviewer::Vec offset = Three::mainViewer()->offset(); Geom_traits::Vector_3 n = cross_product(pb - pa, pc - pa); @@ -1323,7 +1323,7 @@ void Scene_c3t3_item_priv::computeIntersection(const Primitive& cell) const Tr::Bare_point& pc = wp2p(ch->vertex(2)->point()); const Tr::Bare_point& pd = wp2p(ch->vertex(3)->point()); - CGAL::Color color(UC(c.red()), UC(c.green()), UC(c.blue())); + CGAL::IO::Color color(UC(c.red()), UC(c.green()), UC(c.blue())); intersection->addTriangle(pb, pa, pc, color); intersection->addTriangle(pa, pb, pd, color); @@ -1415,7 +1415,7 @@ void Scene_c3t3_item_priv::computeSpheres() typedef unsigned char UC; tr_vertices.push_back(*vit); spheres->add_sphere(Geom_traits::Sphere_3(center, radius),s_id++, - CGAL::Color(UC(c.red()), UC(c.green()), UC(c.blue()))); + CGAL::IO::Color(UC(c.red()), UC(c.green()), UC(c.blue()))); } spheres->invalidateOpenGLBuffers(); @@ -1530,7 +1530,7 @@ void Scene_c3t3_item_priv::computeElements() bool Scene_c3t3_item::load_binary(std::istream& is) { - if(!CGAL::Mesh_3::load_binary_file(is, c3t3())) return false; + if(!CGAL::IO::load_binary_file(is, c3t3())) return false; if(is && d->frame == 0) { d->frame = new CGAL::qglviewer::ManipulatedFrame(); } diff --git a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h index 7d5e343ded0..c34951335b6 100644 --- a/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_c3t3_item.h @@ -47,12 +47,12 @@ public: void setColor(QColor c) Q_DECL_OVERRIDE; bool save_binary(std::ostream& os) const { - return CGAL::Mesh_3::save_binary_file(os, c3t3()); + return CGAL::IO::save_binary_file(os, c3t3()); } bool save_ascii(std::ostream& os) const { os << "ascii CGAL c3t3 " << CGAL::Get_io_signature()() << "\n"; - CGAL::set_ascii_mode(os); + CGAL::IO::set_ascii_mode(os); return !!(os << c3t3()); } diff --git a/Polyhedron/demo/Polyhedron/Scene_group_item.cpp b/Polyhedron/demo/Polyhedron/Scene_group_item.cpp index 70570753802..29e0685ec51 100644 --- a/Polyhedron/demo/Polyhedron/Scene_group_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_group_item.cpp @@ -90,10 +90,12 @@ void Scene_group_item::update_group_number(Scene_item * new_item, int n) Scene_group_item* group = qobject_cast(new_item); if(group) + { Q_FOREACH(Scene_interface::Item_id id, group->getChildren()){ update_group_number(getChild(id),n+1); } + } new_item->has_group = n; } void Scene_group_item::setColor(QColor c) diff --git a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp index deaf33e1cc7..63707001765 100644 --- a/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_points_with_normal_item.cpp @@ -554,7 +554,7 @@ bool Scene_points_with_normal_item::read_ply_point_set(std::istream& stream) d->m_points->clear(); - bool ok = CGAL::read_PLY(stream, *(d->m_points), d->m_comments) && !isEmpty(); + bool ok = CGAL::IO::read_PLY(stream, *(d->m_points), d->m_comments) && !isEmpty(); d->point_Slider->setValue(CGAL::Three::Three::getDefaultPointSize()); std::cerr << d->m_points->info(); @@ -586,9 +586,9 @@ bool Scene_points_with_normal_item::write_ply_point_set(std::ostream& stream, bo return false; if (binary) - CGAL::set_binary_mode (stream); + CGAL::IO::set_binary_mode (stream); - return CGAL::write_PLY(stream, *(d->m_points), d->m_comments); + return CGAL::IO::write_PLY(stream, *(d->m_points), d->m_comments); } // Loads point set from .OFF file @@ -597,7 +597,7 @@ bool Scene_points_with_normal_item::read_off_point_set(std::istream& stream) Q_ASSERT(d->m_points != nullptr); d->m_points->clear(); - bool ok = CGAL::read_OFF(stream, *(d->m_points)) && !isEmpty(); + bool ok = CGAL::IO::read_OFF(stream, *(d->m_points)) && !isEmpty(); d->point_Slider->setValue(CGAL::Three::Three::getDefaultPointSize()); invalidateOpenGLBuffers(); @@ -611,7 +611,7 @@ bool Scene_points_with_normal_item::write_off_point_set(std::ostream& stream) co d->m_points->reset_indices(); - return CGAL::write_OFF(stream, *(d->m_points)); + return CGAL::IO::write_OFF(stream, *(d->m_points)); } // Loads point set from .XYZ file @@ -621,7 +621,7 @@ bool Scene_points_with_normal_item::read_xyz_point_set(std::istream& stream) d->m_points->clear(); - bool ok = CGAL::read_XYZ (stream, *(d->m_points)) && !isEmpty(); + bool ok = CGAL::IO::read_XYZ (stream, *(d->m_points)) && !isEmpty(); d->point_Slider->setValue(CGAL::Three::Three::getDefaultPointSize()); invalidateOpenGLBuffers(); @@ -635,7 +635,7 @@ bool Scene_points_with_normal_item::write_xyz_point_set(std::ostream& stream) co d->m_points->reset_indices(); - return CGAL::write_XYZ(stream, *(d->m_points)); + return CGAL::IO::write_XYZ(stream, *(d->m_points)); } QString diff --git a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp index 40935ddfffb..6e106c555eb 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.cpp @@ -186,7 +186,7 @@ Scene_polygon_soup_item_priv::triangulate_polygon(Polygons_iterator pit, int pol positions_poly.push_back(ffit->vertex(2)->point().y()); positions_poly.push_back(ffit->vertex(2)->point().z()); - CGAL::Color color; + CGAL::IO::Color color; if(!soup->fcolors.empty()) color = soup->fcolors[polygon_id]; for(int i=0; i<3; i++) @@ -202,7 +202,7 @@ Scene_polygon_soup_item_priv::triangulate_polygon(Polygons_iterator pit, int pol } if(!soup->vcolors.empty()) { - CGAL::Color vcolor = soup->vcolors[triangulation.v2v[ffit->vertex(i)]]; + CGAL::IO::Color vcolor = soup->vcolors[triangulation.v2v[ffit->vertex(i)]]; v_colors.push_back((float)vcolor.red()/255); v_colors.push_back((float)vcolor.green()/255); v_colors.push_back((float)vcolor.blue()/255); @@ -262,7 +262,7 @@ Scene_polygon_soup_item_priv::compute_normals_and_vertices() const{ positions_poly.push_back(p.z()+offset.z); if(!soup->fcolors.empty()) { - const CGAL::Color color = soup->fcolors[nb]; + const CGAL::IO::Color color = soup->fcolors[nb]; f_colors.push_back((float)color.red()/255); f_colors.push_back((float)color.green()/255); f_colors.push_back((float)color.blue()/255); @@ -270,7 +270,7 @@ Scene_polygon_soup_item_priv::compute_normals_and_vertices() const{ if(!soup->vcolors.empty()) { - const CGAL::Color color = soup->vcolors[it->at(i)]; + const CGAL::IO::Color color = soup->vcolors[it->at(i)]; v_colors.push_back((float)color.red()/255); v_colors.push_back((float)color.green()/255); v_colors.push_back((float)color.blue()/255); @@ -350,9 +350,9 @@ Scene_polygon_soup_item::load(std::istream& in) else d->soup->clear(); - bool result = CGAL::read_OFF(in, d->soup->points, d->soup->polygons, - CGAL::parameters::vertex_color_output_iterator(std::back_inserter(d->soup->vcolors)) - .face_color_output_iterator(std::back_inserter(d->soup->fcolors))); + bool result = CGAL::IO::read_OFF(in, d->soup->points, d->soup->polygons, + CGAL::parameters::vertex_color_output_iterator(std::back_inserter(d->soup->vcolors)) + .face_color_output_iterator(std::back_inserter(d->soup->fcolors))); invalidateOpenGLBuffers(); return result; @@ -689,8 +689,8 @@ void Scene_polygon_soup_item::load(const std::vector& points, const std:: template void Scene_polygon_soup_item::load(const std::vector& points, const std::vector& polygons, - const std::vector& fcolors, - const std::vector& vcolors) + const std::vector& fcolors, + const std::vector& vcolors) { load (points, polygons); @@ -708,8 +708,8 @@ template SCENE_POLYGON_SOUP_ITEM_EXPORT void Scene_polygon_soup_item::load& points, const std::vector >& polygons); template SCENE_POLYGON_SOUP_ITEM_EXPORT void Scene_polygon_soup_item::load > (const std::vector& points, const std::vector >& polygons, - const std::vector& fcolors, - const std::vector& vcolors); + const std::vector& fcolors, + const std::vector& vcolors); // Local Variables: // c-basic-offset: 4 @@ -718,8 +718,8 @@ template SCENE_POLYGON_SOUP_ITEM_EXPORT void Scene_polygon_soup_item::loadsoup->points; } const Scene_polygon_soup_item::Polygons& Scene_polygon_soup_item::polygons() const { return d->soup->polygons; } bool Scene_polygon_soup_item::isDataColored() { return d->soup->fcolors.size()>0 || d->soup->vcolors.size()>0;} -std::vector Scene_polygon_soup_item::getVColors() const{return d->soup->vcolors;} -std::vector Scene_polygon_soup_item::getFColors() const{return d->soup->fcolors;} +std::vector Scene_polygon_soup_item::getVColors() const{return d->soup->vcolors;} +std::vector Scene_polygon_soup_item::getFColors() const{return d->soup->fcolors;} void Scene_polygon_soup_item::itemAboutToBeDestroyed(Scene_item *item) { diff --git a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h index b7a849ca566..e20306ca916 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_polygon_soup_item.h @@ -20,7 +20,7 @@ struct Polygon_soup typedef std::map, std::set > Edges_map; typedef boost::array Edge; typedef std::vector Polygons; - typedef std::vector Colors; + typedef std::vector Colors; typedef std::set Edges; typedef Polygons::size_type size_type; @@ -120,16 +120,16 @@ public: template void load(const std::vector& points, const std::vector& polygons, - const std::vector& fcolors, - const std::vector& vcolors); + const std::vector& fcolors, + const std::vector& vcolors); bool load(std::istream& in); void load(Scene_surface_mesh_item*); bool isDataColored(); bool save(std::ostream& out) const; - std::vector getVColors() const; - std::vector getFColors() const; + std::vector getVColors() const; + std::vector getFColors() const; QString toolTip() const Q_DECL_OVERRIDE; // Indicate if rendering mode is supported diff --git a/Polyhedron/demo/Polyhedron/Scene_polylines_item.cpp b/Polyhedron/demo/Polyhedron/Scene_polylines_item.cpp index 328539eb94c..7dfc1825da6 100644 --- a/Polyhedron/demo/Polyhedron/Scene_polylines_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_polylines_item.cpp @@ -253,7 +253,7 @@ Scene_polylines_item_private::computeSpheres() colors[2] = 200; } - CGAL::Color c(colors[0], colors[1], colors[2]); + CGAL::IO::Color c(colors[0], colors[1], colors[2]); spheres->add_sphere(K::Sphere_3(center+offset, spheres_drawn_square_radius),s_id++, c); } spheres->setToolTip( diff --git a/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp b/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp index 21df39ff5b0..836b4641636 100644 --- a/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_spheres_item.cpp @@ -22,7 +22,7 @@ struct Scene_spheres_item_priv { typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; typedef CGAL::Sphere_3 Sphere; - typedef std::pair Sphere_pair; + typedef std::pair Sphere_pair; typedef std::vector > Spheres_container; Scene_spheres_item_priv(bool planed, std::size_t max_index, Scene_spheres_item* parent, bool pickable) @@ -247,7 +247,7 @@ void Scene_spheres_item::drawEdges(Viewer_interface *viewer) const getEdgeContainer(0)->draw(viewer, false); } -void Scene_spheres_item::add_sphere(const Sphere &sphere, std::size_t index, CGAL::Color color) +void Scene_spheres_item::add_sphere(const Sphere &sphere, std::size_t index, CGAL::IO::Color color) { if((int)index > (int)d->spheres.size() - 1) d->spheres.resize(index+1); diff --git a/Polyhedron/demo/Polyhedron/Scene_spheres_item.h b/Polyhedron/demo/Polyhedron/Scene_spheres_item.h index 7520a4fca3e..aa040096054 100644 --- a/Polyhedron/demo/Polyhedron/Scene_spheres_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_spheres_item.h @@ -30,7 +30,7 @@ class SCENE_BASIC_OBJECTS_EXPORT Scene_spheres_item public: typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; typedef CGAL::Sphere_3 Sphere; - typedef std::pair Sphere_pair; + typedef std::pair Sphere_pair; typedef std::vector > Spheres_container; Scene_spheres_item(Scene_group_item* parent, std::size_t max_index = 0, bool planed = false, bool pickable = true); @@ -45,7 +45,7 @@ public: return (m == Gouraud || m == Wireframe); } void compute_bbox() const Q_DECL_OVERRIDE; - void add_sphere(const Sphere &sphere, std::size_t index = 0, CGAL::Color = CGAL::Color(120,120,120)); + void add_sphere(const Sphere &sphere, std::size_t index = 0, CGAL::IO::Color = CGAL::IO::Color(120,120,120)); void clear_spheres(); void setPrecision(int prec); void gl_initialization(CGAL::Three::Viewer_interface* viewer); diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp index b275fc3db75..d24357f2f1c 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp @@ -211,7 +211,7 @@ struct Scene_surface_mesh_item_priv{ void initialize_colors() const; void invalidate_stats(); void initializeBuffers(CGAL::Three::Viewer_interface *) const; - void addFlatData(Point, EPICK::Vector_3, CGAL::Color *, Scene_item_rendering_helper::Gl_data_names name) const; + void addFlatData(Point, EPICK::Vector_3, CGAL::IO::Color *, Scene_item_rendering_helper::Gl_data_names name) const; void* get_aabb_tree(); QList triangulate_primitive(face_descriptor fit, EPICK::Vector_3 normal); @@ -226,13 +226,13 @@ struct Scene_surface_mesh_item_priv{ void triangulate_facet(face_descriptor fd, SMesh::Property_map *fnormals, - SMesh::Property_map *fcolors, + SMesh::Property_map *fcolors, boost::property_map< SMesh, boost::vertex_index_t >::type *im, Scene_item_rendering_helper::Gl_data_names name, bool index) const; void triangulate_convex_facet(face_descriptor fd, SMesh::Property_map *fnormals, - SMesh::Property_map *fcolors, + SMesh::Property_map *fcolors, boost::property_map< SMesh, boost::vertex_index_t >::type *im, Scene_item_rendering_helper::Gl_data_names name, bool index) const; @@ -384,7 +384,7 @@ Scene_surface_mesh_item::color_vector() } -void Scene_surface_mesh_item_priv::addFlatData(Point p, EPICK::Vector_3 n, CGAL::Color *c, Scene_item_rendering_helper::Gl_data_names name) const +void Scene_surface_mesh_item_priv::addFlatData(Point p, EPICK::Vector_3 n, CGAL::IO::Color *c, Scene_item_rendering_helper::Gl_data_names name) const { const CGAL::qglviewer::Vec offset = static_cast(CGAL::QGLViewer::QGLViewerPool().first())->offset(); if(name.testFlag(Scene_item_rendering_helper::GEOMETRY)) @@ -443,11 +443,11 @@ void Scene_surface_mesh_item_priv::compute_elements(Scene_item_rendering_helper: SMesh::Property_map positions = smesh_->points(); - SMesh::Property_map vcolors = - smesh_->property_map("v:color").first; + SMesh::Property_map vcolors = + smesh_->property_map("v:color").first; - SMesh::Property_map fcolors = - smesh_->property_map("f:color").first; + SMesh::Property_map fcolors = + smesh_->property_map("f:color").first; boost::property_map< SMesh, boost::vertex_index_t >::type im = get(boost::vertex_index, *smesh_); @@ -508,8 +508,8 @@ void Scene_surface_mesh_item_priv::compute_elements(Scene_item_rendering_helper: { has_fpatch_id = smesh_->property_map("f:patch_id").second; - has_fcolors = smesh_->property_map("f:color").second; - has_vcolors = smesh_->property_map("v:color").second; + has_fcolors = smesh_->property_map("f:color").second; + has_vcolors = smesh_->property_map("v:color").second; } if(name.testFlag(Scene_item_rendering_helper::GEOMETRY)) { @@ -564,12 +564,12 @@ void Scene_surface_mesh_item_priv::compute_elements(Scene_item_rendering_helper: //The sharp features detection produces patch ids >=1, this //is meant to insure the wanted id is in the range [min,max] QColor c = item->color_vector()[fpatch_id_map[fd] - min_patch_id]; - CGAL::Color color(c.red(),c.green(),c.blue()); + CGAL::IO::Color color(c.red(),c.green(),c.blue()); CPF::add_color_in_buffer(color, f_colors); } else if(has_fcolors) { - CGAL::Color c = fcolors[fd]; + CGAL::IO::Color c = fcolors[fd]; CPF::add_color_in_buffer(c, f_colors); } } @@ -589,11 +589,11 @@ void Scene_surface_mesh_item_priv::compute_elements(Scene_item_rendering_helper: halfedge_descriptor hd = halfedge(fd, *smesh_); Point p = positions[source(hd, *smesh_)]; EPICK::Vector_3 n = fnormals[fd]; - CGAL::Color *c; + CGAL::IO::Color *c; if(has_fpatch_id) { QColor color = item->color_vector()[fpatch_id_map[fd] - min_patch_id]; - c = new CGAL::Color(color.red(),color.green(),color.blue()); + c = new CGAL::IO::Color(color.red(),color.green(),color.blue()); } else if(has_fcolors) c= &fcolors[fd]; @@ -648,7 +648,7 @@ void Scene_surface_mesh_item_priv::compute_elements(Scene_item_rendering_helper: { for(vertex_descriptor vd : vertices(*smesh_)) { - CGAL::Color c = vcolors[vd]; + CGAL::IO::Color c = vcolors[vd]; v_colors.push_back((float)c.red()/255); v_colors.push_back((float)c.green()/255); v_colors.push_back((float)c.blue()/255); @@ -896,7 +896,7 @@ void Scene_surface_mesh_item_priv::checkFloat()const void Scene_surface_mesh_item_priv::triangulate_convex_facet(face_descriptor fd, SMesh::Property_map *fnormals, - SMesh::Property_map *fcolors, + SMesh::Property_map *fcolors, boost::property_map< SMesh, boost::vertex_index_t >::type *im, Scene_item_rendering_helper::Gl_data_names name, bool index) const @@ -916,11 +916,11 @@ void Scene_surface_mesh_item_priv::triangulate_convex_facet(face_descriptor fd, p2 = smesh_->point(v2); if(!index) { - CGAL::Color* color; + CGAL::IO::Color* color; if(has_fpatch_id) { QColor c = item->color_vector()[fpatch_id_map[fd] - min_patch_id]; - color = new CGAL::Color(c.red(),c.green(),c.blue()); + color = new CGAL::IO::Color(c.red(),c.green(),c.blue()); } else if(has_fcolors) color = &(*fcolors)[fd]; @@ -953,7 +953,7 @@ void Scene_surface_mesh_item_priv::triangulate_convex_facet(face_descriptor fd, void Scene_surface_mesh_item_priv::triangulate_facet(face_descriptor fd, SMesh::Property_map *fnormals, - SMesh::Property_map *fcolors, + SMesh::Property_map *fcolors, boost::property_map< SMesh, boost::vertex_index_t >::type *im, Scene_item_rendering_helper::Gl_data_names name, bool index) const @@ -1008,11 +1008,11 @@ Scene_surface_mesh_item_priv::triangulate_facet(face_descriptor fd, //adds the vertices, normals and colors to the appropriate vectors if(!index) { - CGAL::Color* color; + CGAL::IO::Color* color; if(has_fpatch_id) { QColor c= item->color_vector()[fpatch_id_map[fd] - min_patch_id]; - color = new CGAL::Color(c.red(),c.green(),c.blue()); + color = new CGAL::IO::Color(c.red(),c.green(),c.blue()); } else if(has_fcolors) color = &(*fcolors)[fd]; @@ -1470,17 +1470,17 @@ void Scene_surface_mesh_item::setItemIsMulticolor(bool b) d->smesh_->remove_property_map(d->fpatch_id_map); d->has_fcolors = false; } - if(d->smesh_->property_map("f:color").second) + if(d->smesh_->property_map("f:color").second) { - SMesh::Property_map pmap = - d->smesh_->property_map("f:color").first; + SMesh::Property_map pmap = + d->smesh_->property_map("f:color").first; d->smesh_->remove_property_map(pmap); d->has_fcolors = false; } - if(d->smesh_->property_map("v:color").second) + if(d->smesh_->property_map("v:color").second) { - SMesh::Property_map pmap = - d->smesh_->property_map("v:color").first; + SMesh::Property_map pmap = + d->smesh_->property_map("v:color").first; d->smesh_->remove_property_map(pmap); d->has_vcolors = false; } @@ -1524,14 +1524,14 @@ bool Scene_surface_mesh_item::load_obj(std::istream& in) { typedef SMesh::Point Point; - bool failed = !CGAL::read_OBJ(in, *(d->smesh_)); + bool failed = !CGAL::IO::read_OBJ(in, *(d->smesh_)); if(failed) { in.clear(); in.seekg(0); std::vector points; std::vector > faces; - failed = !CGAL::read_OBJ(in, points, faces); + failed = !CGAL::IO::read_OBJ(in, points, faces); if(!failed) { CGAL::Polygon_mesh_processing::repair_polygon_soup(points, faces); @@ -1557,9 +1557,9 @@ Scene_surface_mesh_item::save_obj(std::ostream& out) const boost::tie(vnormals, has_normals) = d->smesh_->template property_map("v:normal"); if(has_normals) - return CGAL::write_OBJ(out, *(d->smesh_), CGAL::parameters::vertex_normal_map(vnormals)); + return CGAL::IO::write_OBJ(out, *(d->smesh_), CGAL::parameters::vertex_normal_map(vnormals)); else - return CGAL::write_OBJ(out, *(d->smesh_)); + return CGAL::IO::write_OBJ(out, *(d->smesh_)); } void diff --git a/Polyhedron/demo/Polyhedron/include/CGAL/IO/read_surf_trianglemesh.h b/Polyhedron/demo/Polyhedron/include/CGAL/IO/read_surf_trianglemesh.h index adbec646b3c..fc2ac29aeb3 100644 --- a/Polyhedron/demo/Polyhedron/include/CGAL/IO/read_surf_trianglemesh.h +++ b/Polyhedron/demo/Polyhedron/include/CGAL/IO/read_surf_trianglemesh.h @@ -138,7 +138,7 @@ void treat_surf_vertices(std::istream& input, double x(0),y(0),z(0); iss.clear(); iss.str(line); - iss >> CGAL::iformat(x) >> CGAL::iformat(y) >> CGAL::iformat(z); + iss >> CGAL::IO::iformat(x) >> CGAL::IO::iformat(y) >> CGAL::IO::iformat(z); points.push_back(Point_3(x,y,z)); } } diff --git a/Polyhedron/demo/Polyhedron/include/run_with_qprogressdialog.h b/Polyhedron/demo/Polyhedron/include/run_with_qprogressdialog.h index 47f5f9670df..f2657fda3f1 100644 --- a/Polyhedron/demo/Polyhedron/include/run_with_qprogressdialog.h +++ b/Polyhedron/demo/Polyhedron/include/run_with_qprogressdialog.h @@ -3,10 +3,11 @@ #include #include -#include #include "Callback_signaler.h" +#include + typedef CGAL::Parallel_if_available_tag Concurrency_tag; class Signal_callback @@ -112,12 +113,14 @@ void run_with_qprogressdialog (Functor& functor, #ifdef CGAL_HAS_STD_THREADS if (boost::is_convertible::value) { - CGAL::cpp11::thread thread (functor); + std::thread thread (functor); while (*signal_callback->latest_adv != 1. && *signal_callback->state) { - CGAL::cpp11::sleep_for (0.1); + typedef std::chrono::nanoseconds nanoseconds; + nanoseconds ns (nanoseconds::rep (1000000000.0 * 0.1)); + std::this_thread::sleep_for(ns); QApplication::processEvents (); } diff --git a/Polyhedron/doc/Polyhedron/CGAL/IO/Polyhedron_iostream.h b/Polyhedron/doc/Polyhedron/CGAL/IO/Polyhedron_iostream.h index 275f633766e..4af85fdec22 100644 --- a/Polyhedron/doc/Polyhedron/CGAL/IO/Polyhedron_iostream.h +++ b/Polyhedron/doc/Polyhedron/CGAL/IO/Polyhedron_iostream.h @@ -36,8 +36,8 @@ bool read_OFF( std::istream& in, Polyhedron_3& P); /*! \relates Polyhedron_3 -\deprecated This function is deprecated since \cgal 5.2, - \link PkgPolyhedronIOFunc `CGAL::read_OFF(std::ostream&, Polyhedron_3&)` \endlink should be used instead. +\deprecated This function is deprecated since \cgal 5.3, + \link PkgPolyhedronIOFunc `CGAL::IO::read_OFF(std::ostream&, Polyhedron_3&)` \endlink should be used instead. */ template bool read_off( std::ostream& out, Polyhedron_3& P); @@ -79,8 +79,8 @@ bool write_OFF( std::ostream& out, Polyhedron_3& P); /*! \relates Polyhedron_3 -\deprecated This function is deprecated since \cgal 5.2, - \link PkgPolyhedronIOFunc `CGAL::write_OFF(std::ostream&, Polyhedron_3&)` \endlink should be used instead. +\deprecated This function is deprecated since \cgal 5.3, + \link PkgPolyhedronIOFunc `CGAL::IO::write_OFF(std::ostream&, Polyhedron_3&)` \endlink should be used instead. */ template bool write_off( std::ostream& out, Polyhedron_3& P); diff --git a/Polyhedron/doc/Polyhedron/Polyhedron.txt b/Polyhedron/doc/Polyhedron/Polyhedron.txt index ff1b4df6ec8..91fc936f60b 100644 --- a/Polyhedron/doc/Polyhedron/Polyhedron.txt +++ b/Polyhedron/doc/Polyhedron/Polyhedron.txt @@ -430,7 +430,7 @@ faces but would be for vertices - and add the color attribute. template struct My_face : public CGAL::HalfedgeDS_face_base { -CGAL::Color color; +CGAL::IO::Color color; }; \endcode diff --git a/Polyhedron/examples/Polyhedron/polyhedron_copy.cpp b/Polyhedron/examples/Polyhedron/polyhedron_copy.cpp index eedf5d0c3e4..a110a0da229 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_copy.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_copy.cpp @@ -97,14 +97,14 @@ int main( int argc, char **argv) { } if ( binary) { - vout << "CGAL::set_binary_mode( ofstream(" << name << "))" << endl; - CGAL::set_binary_mode( *p_out); + vout << "CGAL::IO::set_binary_mode( ofstream(" << name << "))" << endl; + CGAL::IO::set_binary_mode( *p_out); } else if ( noc) { - vout << "CGAL::set_ascii_mode( ofstream(" << name << "))" << endl; - CGAL::set_ascii_mode( *p_out); + vout << "CGAL::IO::set_ascii_mode( ofstream(" << name << "))" << endl; + CGAL::IO::set_ascii_mode( *p_out); } else { - vout << "CGAL::set_pretty_mode( ofstream(" << name << "))" << endl; - CGAL::set_pretty_mode( *p_out); + vout << "CGAL::IO::set_pretty_mode( ofstream(" << name << "))" << endl; + CGAL::IO::set_pretty_mode( *p_out); } vout << "ofstream(" << name << ") << CGAL::Polyhedron_3 ..." << endl; diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_color.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_color.cpp index 13a5569c3d0..68fe759f33a 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_color.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_color.cpp @@ -5,7 +5,7 @@ // A face type with a color member variable. template struct My_face : public CGAL::HalfedgeDS_face_base { - CGAL::Color color; + CGAL::IO::Color color; }; // An items type using my face. @@ -23,6 +23,6 @@ typedef Polyhedron::Halfedge_handle Halfedge_handle; int main() { Polyhedron P; Halfedge_handle h = P.make_tetrahedron(); - h->facet()->color = CGAL::red(); + h->facet()->color = CGAL::IO::red(); return 0; } diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_normals.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_normals.cpp index 15f044a9e97..2cfebd9696d 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_normals.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_normals.cpp @@ -31,7 +31,7 @@ int main() { P.make_tetrahedron( p, q, r, s); std::transform( P.facets_begin(), P.facets_end(), P.planes_begin(), Normal_vector()); - CGAL::set_pretty_mode( std::cout); + CGAL::IO::set_pretty_mode( std::cout); std::copy( P.planes_begin(), P.planes_end(), std::ostream_iterator( std::cout, "\n")); return 0; diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_off.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_off.cpp index cecca0428e8..d1fdd179c41 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_off.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_off.cpp @@ -18,7 +18,7 @@ int main() { P.make_tetrahedron( p, q, r, s); // Write polyhedron in Object File Format (OFF). - CGAL::set_ascii_mode( std::cout); + CGAL::IO::set_ascii_mode( std::cout); std::cout << "OFF" << std::endl << P.size_of_vertices() << ' ' << P.size_of_facets() << " 0" << std::endl; std::copy( P.points_begin(), P.points_end(), diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_planes.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_planes.cpp index 08c009acc85..02cc825cda3 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_planes.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_planes.cpp @@ -28,7 +28,7 @@ int main() { P.make_tetrahedron( p, q, r, s); std::transform( P.facets_begin(), P.facets_end(), P.planes_begin(), Plane_equation()); - CGAL::set_pretty_mode( std::cout); + CGAL::IO::set_pretty_mode( std::cout); std::copy( P.planes_begin(), P.planes_end(), std::ostream_iterator( std::cout, "\n")); return 0; diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_tetra.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_tetra.cpp index d610ded2099..15a72a60b03 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_tetra.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_tetra.cpp @@ -15,7 +15,7 @@ int main() { Polyhedron P; P.make_tetrahedron( p, q, r, s); - CGAL::set_ascii_mode( std::cout); + CGAL::IO::set_ascii_mode( std::cout); for ( Vertex_iterator v = P.vertices_begin(); v != P.vertices_end(); ++v) std::cout << v->point() << std::endl; return 0; diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_vector.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_vector.cpp index c36b1aecaf0..9c4190a8e1e 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_vector.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_vector.cpp @@ -17,7 +17,7 @@ int main() { Polyhedron P; // alternative constructor: Polyhedron P(4,12,4); P.make_tetrahedron( p, q, r, s); - CGAL::set_ascii_mode( std::cout); + CGAL::IO::set_ascii_mode( std::cout); std::copy( P.points_begin(), P.points_end(), std::ostream_iterator( std::cout, "\n")); return 0; diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_color.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_color.cpp index 63abfbc9b2a..639c1540f4f 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_color.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_color.cpp @@ -7,7 +7,7 @@ template struct My_vertex : public CGAL::HalfedgeDS_vertex_base { - CGAL::Color color; + CGAL::IO::Color color; My_vertex() {} // repeat the required constructors My_vertex( const Point& p) : CGAL::HalfedgeDS_vertex_base(p) {} @@ -29,6 +29,6 @@ typedef Polyhedron::Halfedge_handle Halfedge_handle; int main() { Polyhedron P; Halfedge_handle h = P.make_tetrahedron(); - h->vertex()->color = CGAL::red(); + h->vertex()->color = CGAL::IO::red(); return 0; } diff --git a/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_normal.cpp b/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_normal.cpp index f39c08ed009..58d41655c40 100644 --- a/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_normal.cpp +++ b/Polyhedron/examples/Polyhedron/polyhedron_prog_vertex_normal.cpp @@ -101,7 +101,7 @@ int main() { P.make_tetrahedron( p, q, r, s); std::for_each( P.facets_begin(), P.facets_end(), Facet_normal()); std::for_each( P.vertices_begin(), P.vertices_end(), Vertex_normal()); - CGAL::set_pretty_mode( std::cout); + CGAL::IO::set_pretty_mode( std::cout); for ( Vertex_iterator i = P.vertices_begin(); i != P.vertices_end(); ++i) std::cout << i->normal() << std::endl; return 0; diff --git a/Polyhedron/include/CGAL/IO/Polyhedron_OFF_iostream.h b/Polyhedron/include/CGAL/IO/Polyhedron_OFF_iostream.h index 54b9438a8ee..bb413897c51 100644 --- a/Polyhedron/include/CGAL/IO/Polyhedron_OFF_iostream.h +++ b/Polyhedron/include/CGAL/IO/Polyhedron_OFF_iostream.h @@ -31,6 +31,8 @@ namespace CGAL { +namespace IO { + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Read @@ -56,7 +58,7 @@ bool read_OFF(std::istream& in, typedef typename boost::property_traits::value_type Point; typedef typename Kernel_traits::Kernel Kernel; - typedef typename internal::Converter_selector::type Converter; + typedef typename CGAL::internal::Converter_selector::type Converter; using parameters::choose_parameter; using parameters::get_parameter; @@ -97,13 +99,37 @@ bool read_OFF(std::istream& in, Polyhedron_3& P) return read_OFF(in, P, parameters::all_default()); } +template class HDS, + class Alloc, class CGAL_BGL_NP_TEMPLATE_PARAMETERS> +bool read_OFF(const std::string& fname, + Polyhedron_3& P, + const CGAL_BGL_NP_CLASS& np) +{ + std::ifstream in(fname); + return read_OFF(in, P, np); +} + +template class HDS, + class Alloc> +bool read_OFF(const std::string& fname, Polyhedron_3& P) +{ + std::ifstream in(fname); + return read_OFF(in, P, parameters::all_default()); +} + +} // namespace IO + template class HDS, class Alloc> std::istream& operator>>(std::istream& in, Polyhedron_3& P) { - read_OFF(in, P); + IO::read_OFF(in, P); return in; } @@ -111,6 +137,8 @@ std::istream& operator>>(std::istream& in, Polyhedron_3 class HDS, @@ -149,13 +177,15 @@ bool write_OFF(std::ostream& out, const Polyhedron_3& return write_OFF(out, P, parameters::all_default()); } +} // namespace IO + template class HDS, class Alloc> std::ostream& operator<<(std::ostream& out, const Polyhedron_3& P) { - write_OFF(out, P); + IO::write_OFF(out, P); return out; } diff --git a/Polyhedron/include/CGAL/IO/Polyhedron_scan_OFF.h b/Polyhedron/include/CGAL/IO/Polyhedron_scan_OFF.h index 51935383f32..0023d882f63 100644 --- a/Polyhedron/include/CGAL/IO/Polyhedron_scan_OFF.h +++ b/Polyhedron/include/CGAL/IO/Polyhedron_scan_OFF.h @@ -88,7 +88,7 @@ void Polyhedron_scan_OFF:: operator()(HDS& target) B.add_vertex( p); if(scanner.has_vcolors()) { - Color c; + IO::Color c; file_scan_color(scanner, c); } scanner.skip_to_next_vertex(i); diff --git a/Polyhedron/include/CGAL/IO/print_OFF.h b/Polyhedron/include/CGAL/IO/print_OFF.h index 9e3e9a6e291..845539e0f8d 100644 --- a/Polyhedron/include/CGAL/IO/print_OFF.h +++ b/Polyhedron/include/CGAL/IO/print_OFF.h @@ -55,8 +55,8 @@ bool print_polyhedron_OFF(std::ostream& out, bool verbose = false) { File_header_OFF header(verbose); - header.set_binary(is_binary(out)); - header.set_no_comments(!is_pretty(out)); + header.set_binary(IO::is_binary(out)); + header.set_no_comments(!IO::is_pretty(out)); return print_polyhedron_with_header_OFF(out, P, header); } diff --git a/Polyhedron/include/CGAL/Polyhedron_incremental_builder_3.h b/Polyhedron/include/CGAL/Polyhedron_incremental_builder_3.h index f5686239a51..282e8766bdc 100644 --- a/Polyhedron/include/CGAL/Polyhedron_incremental_builder_3.h +++ b/Polyhedron/include/CGAL/Polyhedron_incremental_builder_3.h @@ -191,7 +191,7 @@ public: CGAL_assertion_code(check_protocoll = 0;) } - ~Polyhedron_incremental_builder_3() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + ~Polyhedron_incremental_builder_3() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_destructor_assertion( check_protocoll == 0); } @@ -402,7 +402,7 @@ protected: CGAL_assertion( ! last_vertex); HalfedgeDS_items_decorator decorator; Halfedge_handle e = get_vertex_to_edge_map( w); - if ( e != Halfedge_handle()) { + if ( e != nullptr) { CGAL_assertion( e->vertex() == index_to_vertex_map[w]); // check that the facet has no self intersections if ( current_face != Face_handle() @@ -491,7 +491,7 @@ protected: // Halfedge e points to a vertex w. Walk around w to find a hole // in the facet structure. Report an error if none exist. Return // the halfedge at this hole that points to the vertex w. - CGAL_assertion( e != Halfedge_handle()); + CGAL_assertion( e != nullptr); HalfedgeDS_items_decorator decorator; Halfedge_handle start_edge( e); do { @@ -649,7 +649,7 @@ add_vertex_to_facet( std::size_t v2) { Halfedge_handle hole = lookup_hole( v1); if ( m_error) return; - CGAL_assertion( hole != Halfedge_handle()); + CGAL_assertion( hole != nullptr); h2->opposite()->HBase::set_next( hole->next()); decorator.set_prev( hole->next(), h2->opposite()); hole->HBase::set_next( h1->opposite()); @@ -689,7 +689,7 @@ add_vertex_to_facet( std::size_t v2) { } while ( e->next() != prev && e != h1); if ( e == h1) { // disconnected facet complexes - if ( hole != Halfedge_handle()) { + if ( hole != nullptr) { // The complex can be connected with // the hole at hprime. hprime->HBase::set_next( hole->next()); @@ -763,8 +763,8 @@ test_facet_indices( std::vector< std::size_t> indices) { // check if halfedge is already in the HDS and is not border halfedge Halfedge_handle v = get_vertex_to_edge_map(indices[i]); Vertex_handle w = index_to_vertex_map[indices[i+1]]; - if ( v != Halfedge_handle() - && get_vertex_to_edge_map(indices[i+1]) != Halfedge_handle()) { + if ( v != nullptr + && get_vertex_to_edge_map(indices[i+1]) != nullptr) { // cycle through halfedge-loop and find edge to indices[i+1] Halfedge_handle vstart = v; do { @@ -780,7 +780,7 @@ test_facet_indices( std::vector< std::size_t> indices) { // tested for non-manifold halfedges already, we just need to check // if the vertex indices[i] is not a closed manifold yet. Halfedge_handle v = get_vertex_to_edge_map(indices[i]); - if ( v != Halfedge_handle()) { + if ( v != nullptr) { Halfedge_handle vstart = v; do { v = v->next()->opposite(); diff --git a/Polyhedron/include/CGAL/boost/graph/properties_Polyhedron_3.h b/Polyhedron/include/CGAL/boost/graph/properties_Polyhedron_3.h index a53bde8e724..939093a7db5 100644 --- a/Polyhedron/include/CGAL/boost/graph/properties_Polyhedron_3.h +++ b/Polyhedron/include/CGAL/boost/graph/properties_Polyhedron_3.h @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include #define CGAL_HDS_PARAM_ template < class Traits, class Items, class Alloc> class HDS @@ -46,7 +46,7 @@ public: reference operator[](const key_type& k) const { return (*map_)[k]; } private: - boost::shared_ptr map_; + std::shared_ptr map_; }; // Special case for edges. @@ -75,7 +75,7 @@ public: reference operator[](const key_type& k) const { return (*map_)[k]; } private: - boost::shared_ptr map_; + std::shared_ptr map_; }; template diff --git a/Polyhedron/test/Polyhedron/test_polyhedron_io.cpp b/Polyhedron/test/Polyhedron/test_polyhedron_io.cpp index ce9ff3e0ff7..fc6d0032056 100644 --- a/Polyhedron/test/Polyhedron/test_polyhedron_io.cpp +++ b/Polyhedron/test/Polyhedron/test_polyhedron_io.cpp @@ -115,7 +115,7 @@ void test_file_IO_OFF() { Polyhedron P; std::istringstream in( ::empty); - read_OFF(in, P); + IO::read_OFF(in, P); assert(P.empty()); assert(in); } diff --git a/Polyline_simplification_2/demo/Polyline_simplification_2/Polyline_simplification_2.cpp b/Polyline_simplification_2/demo/Polyline_simplification_2/Polyline_simplification_2.cpp index 0bf0684ae3f..965fa4e5bcb 100644 --- a/Polyline_simplification_2/demo/Polyline_simplification_2/Polyline_simplification_2.cpp +++ b/Polyline_simplification_2/demo/Polyline_simplification_2/Polyline_simplification_2.cpp @@ -395,7 +395,7 @@ void MainWindow::loadWKT(QString MultiPoint points; MultiLineString polylines; MultiPolygon polygons; - CGAL::read_WKT(ifs, points,polylines,polygons); + CGAL::IO::read_WKT(ifs, points,polylines,polygons); m_pct.clear(); mGI->modelChanged(); diff --git a/Polyline_simplification_2/examples/Polyline_simplification_2/points_and_vertices.cpp b/Polyline_simplification_2/examples/Polyline_simplification_2/points_and_vertices.cpp index 1ccdb7ab524..95d0aaf1a1a 100644 --- a/Polyline_simplification_2/examples/Polyline_simplification_2/points_and_vertices.cpp +++ b/Polyline_simplification_2/examples/Polyline_simplification_2/points_and_vertices.cpp @@ -62,7 +62,7 @@ int main(int argc, char* argv[]) Polygon_with_holes_2 P; Constraint_id cid; std::size_t largest = 0; - while(CGAL::read_polygon_WKT(ifs, P)){ + while(CGAL::IO::read_polygon_WKT(ifs, P)){ const Polygon_2& poly = P.outer_boundary(); Constraint_id cid2 = ct.insert_constraint(poly); if(poly.size() > largest){ diff --git a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp index f815a9b9dd2..ccfd6222431 100644 --- a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp +++ b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify.cpp @@ -35,7 +35,7 @@ int main(int argc, char* argv[]) std::ifstream ifs( (argc==1)?"data/polygon.wkt":argv[1]); CT ct; Polygon_with_holes_2 P; - while(CGAL::read_polygon_WKT(ifs, P)){ + while(CGAL::IO::read_polygon_WKT(ifs, P)){ const Polygon_2& poly = P.outer_boundary(); ct.insert_constraint(poly); for(Polygon_with_holes_2::Hole_const_iterator it = P.holes_begin(); it != P.holes_end(); ++it){ diff --git a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polygon.cpp b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polygon.cpp index 989b6b68ba4..a5763c20399 100644 --- a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polygon.cpp +++ b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polygon.cpp @@ -21,12 +21,12 @@ int main(int argc, char* argv[]) { std::ifstream ifs( (argc==1)?"data/polygon.wkt":argv[1]); Polygon_with_holes_2 polygon; - CGAL::read_polygon_WKT(ifs, polygon); + CGAL::IO::read_polygon_WKT(ifs, polygon); Cost cost; polygon = PS::simplify(polygon, cost, Stop(0.5)); std::cout.precision(12); - CGAL::write_polygon_WKT(std::cout, polygon) << std::endl; + CGAL::IO::write_polygon_WKT(std::cout, polygon) << std::endl; return 0; } diff --git a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polyline.cpp b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polyline.cpp index f1dfd1da732..6bffee9ad49 100644 --- a/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polyline.cpp +++ b/Polyline_simplification_2/examples/Polyline_simplification_2/simplify_polyline.cpp @@ -23,7 +23,7 @@ int main(int argc, char* argv[]) #if BOOST_VERSION >= 105600 && (! defined(BOOST_GCC) || BOOST_GCC >= 40500) Polyline_2 polyline; std::ifstream ifs( (argc==1)?"data/polyline.wkt":argv[1]); - CGAL::read_linestring_WKT(ifs, polyline); + CGAL::IO::read_linestring_WKT(ifs, polyline); Cost cost; std::deque result; PS::simplify(polyline.begin(), polyline.end(), cost, Stop(0.5), std::back_inserter(result)); diff --git a/Polynomial/archive/test/Polynomial/Polynomial_traits_d.cpp b/Polynomial/archive/test/Polynomial/Polynomial_traits_d.cpp index 0a866b15a59..832f98579ee 100644 --- a/Polynomial/archive/test/Polynomial/Polynomial_traits_d.cpp +++ b/Polynomial/archive/test/Polynomial/Polynomial_traits_d.cpp @@ -17,8 +17,8 @@ template < typename AK> void test_AK_1(){ - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); typedef typename AK::Integer Integer; typedef typename AK::Rational Rational; @@ -37,8 +37,8 @@ void test_AK_1(){ template < typename AK> void test_AK_2(){ - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); typedef typename AK::Integer Integer; typedef typename AK::Rational Rational; @@ -57,8 +57,8 @@ void test_AK_2(){ template < typename AK> void test_AK_4(){ - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); typedef typename AK::Integer Integer; typedef typename AK::Rational Rational; @@ -78,8 +78,8 @@ void test_AK_4(){ template < typename AK> void test_AK_5(){ - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); typedef typename AK::Integer Integer; typedef typename AK::Rational Rational; @@ -101,8 +101,8 @@ void test_AK_5(){ template < typename AK> void test_AK_6(){ - CGAL::set_pretty_mode(std::cout); - CGAL::set_pretty_mode(std::cerr); + CGAL::IO::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cerr); typedef typename AK::Integer Integer; typedef typename AK::Rational Rational; diff --git a/Polynomial/examples/Polynomial/coefficient_access.cpp b/Polynomial/examples/Polynomial/coefficient_access.cpp index 0ca295a45f9..97f3dae76df 100644 --- a/Polynomial/examples/Polynomial/coefficient_access.cpp +++ b/Polynomial/examples/Polynomial/coefficient_access.cpp @@ -3,7 +3,7 @@ #include int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Polynomial_type_generator::Type Poly_2; typedef CGAL::Polynomial_traits_d PT_2; diff --git a/Polynomial/examples/Polynomial/construction.cpp b/Polynomial/examples/Polynomial/construction.cpp index 020d23ad8b4..9c21fc55bf4 100644 --- a/Polynomial/examples/Polynomial/construction.cpp +++ b/Polynomial/examples/Polynomial/construction.cpp @@ -3,7 +3,7 @@ #include int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Polynomial_type_generator::Type Poly_2; typedef CGAL::Polynomial_traits_d PT_2; diff --git a/Polynomial/examples/Polynomial/degree.cpp b/Polynomial/examples/Polynomial/degree.cpp index c86516fe44c..c4fadac65c2 100644 --- a/Polynomial/examples/Polynomial/degree.cpp +++ b/Polynomial/examples/Polynomial/degree.cpp @@ -3,7 +3,7 @@ #include int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Polynomial_type_generator::Type Poly_2; typedef CGAL::Polynomial_traits_d PT_2; diff --git a/Polynomial/examples/Polynomial/gcd_up_to_constant_factor.cpp b/Polynomial/examples/Polynomial/gcd_up_to_constant_factor.cpp index 1314ed41f5c..674b5aeb615 100644 --- a/Polynomial/examples/Polynomial/gcd_up_to_constant_factor.cpp +++ b/Polynomial/examples/Polynomial/gcd_up_to_constant_factor.cpp @@ -3,7 +3,7 @@ #include int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Polynomial_type_generator::Type Poly_1; typedef CGAL::Polynomial_traits_d PT_1; diff --git a/Polynomial/examples/Polynomial/subresultants.cpp b/Polynomial/examples/Polynomial/subresultants.cpp index 69dfda7c15c..339a5baa154 100644 --- a/Polynomial/examples/Polynomial/subresultants.cpp +++ b/Polynomial/examples/Polynomial/subresultants.cpp @@ -5,7 +5,7 @@ #include int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Exact_integer Int; diff --git a/Polynomial/examples/Polynomial/substitute.cpp b/Polynomial/examples/Polynomial/substitute.cpp index 4b5ca70cf34..6f0c47217d3 100644 --- a/Polynomial/examples/Polynomial/substitute.cpp +++ b/Polynomial/examples/Polynomial/substitute.cpp @@ -3,7 +3,7 @@ #include int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Polynomial_type_generator::Type Poly_2; typedef CGAL::Polynomial_traits_d PT_2; diff --git a/Polynomial/examples/Polynomial/swap_move.cpp b/Polynomial/examples/Polynomial/swap_move.cpp index bcfb9210ae9..e6479c717ab 100644 --- a/Polynomial/examples/Polynomial/swap_move.cpp +++ b/Polynomial/examples/Polynomial/swap_move.cpp @@ -3,7 +3,7 @@ #include int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Polynomial_type_generator::Type Poly_3; typedef CGAL::Polynomial_traits_d PT_3; diff --git a/Polynomial/include/CGAL/Exponent_vector.h b/Polynomial/include/CGAL/Exponent_vector.h index d841191d59e..5f34cb4869b 100644 --- a/Polynomial/include/CGAL/Exponent_vector.h +++ b/Polynomial/include/CGAL/Exponent_vector.h @@ -161,7 +161,7 @@ inline std::ostream& operator << (std::ostream& os, const Exponent_vector& ev) { namespace std{ template <> inline void swap(CGAL::Exponent_vector& ev1, CGAL::Exponent_vector& ev2) - CGAL_NOEXCEPT(std::is_nothrow_move_constructible::value + noexcept(std::is_nothrow_move_constructible::value && std::is_nothrow_move_assignable::value) { ev1.swap(ev2); diff --git a/Polynomial/include/CGAL/Polynomial/Polynomial_type.h b/Polynomial/include/CGAL/Polynomial/Polynomial_type.h index 9f4316aa3eb..fc08c137347 100644 --- a/Polynomial/include/CGAL/Polynomial/Polynomial_type.h +++ b/Polynomial/include/CGAL/Polynomial/Polynomial_type.h @@ -829,7 +829,7 @@ public: * of xi. Missing coefficients are set to zero. * Whitespace is ignored. * The format of the coefficients must be understandable for - * is >> iformat(ai) . + * is >> IO::iformat(ai) . * * Example: A \c CGAL::Polynomial with a value of * 4x2 - 1 has to be written as @@ -1223,7 +1223,7 @@ Polynomial division(const Polynomial& p1, */ template std::ostream& operator << (std::ostream& os, const Polynomial& p) { - switch(CGAL::get_mode(os)) { + switch(CGAL::IO::get_mode(os)) { case CGAL::IO::PRETTY: p.output_maple(os); break; default: @@ -1242,7 +1242,7 @@ std::ostream& operator << (std::ostream& os, const Polynomial& p) { */ template std::istream& operator >> (std::istream& is, Polynomial& p) { - CGAL_precondition(!CGAL::is_pretty(is)); + CGAL_precondition(!CGAL::IO::is_pretty(is)); p = Polynomial::input_ascii(is); return is; } @@ -1253,12 +1253,12 @@ void print_maple_monomial(std::ostream& os, const NT& coeff, const std::string& var, int expn) { if (expn == 0 || coeff != NT(1)) { - os << CGAL::oformat(coeff, Parens_as_product_tag()); + os << CGAL::IO::oformat(coeff, Parens_as_product_tag()); if (expn >= 1) os << "*"; } if (expn >= 1) { os << var; - if (expn > 1) os << "^" << CGAL::oformat(expn); + if (expn > 1) os << "^" << CGAL::IO::oformat(expn); } } @@ -1291,12 +1291,12 @@ void Polynomial::output_maple(std::ostream& os) const { template void Polynomial::output_ascii(std::ostream &os) const { const Polynomial &p = *this; - if (p.is_zero()) { os << "P[0 (0," << oformat(NT(0)) << ")]"; return; } + if (p.is_zero()) { os << "P[0 (0," << IO::oformat(NT(0)) << ")]"; return; } - os << "P[" << oformat(p.degree()); + os << "P[" << IO::oformat(p.degree()); for (int i = 0; i <= p.degree(); i++) { - if (p[i] != NT(0)) os << "(" << CGAL::oformat(i) << "," - << CGAL::oformat(p[i]) << ")"; + if (p[i] != NT(0)) os << "(" << CGAL::IO::oformat(i) << "," + << CGAL::IO::oformat(p[i]) << ")"; } os << "]"; } @@ -1371,7 +1371,7 @@ Polynomial Polynomial::input_ascii(std::istream &is) { internal::swallow(is, 'P'); internal::swallow(is, '['); - is >> CGAL::iformat(degr); + is >> CGAL::IO::iformat(degr); if (degr < 0) { CGAL_error_msg( "input error: negative degree of polynomial specified"); } @@ -1381,12 +1381,12 @@ Polynomial Polynomial::input_ascii(std::istream &is) { do is.get(c); while (isspace(c)); do { if (c != '(') CGAL_error_msg( "input error: ( expected"); - is >> CGAL::iformat(i); + is >> CGAL::IO::iformat(i); if (!(i >= 0 && i <= degr && p[i] == NT(0))) { CGAL_error_msg( "input error: invalid exponent in polynomial"); }; internal::swallow(is, ','); - is >> CGAL::iformat(p.coeff(i)); + is >> CGAL::IO::iformat(p.coeff(i)); internal::swallow(is, ')'); do is.get(c); while (isspace(c)); } while (c != ']'); diff --git a/Polynomial/test/Polynomial/Interpolator.cpp b/Polynomial/test/Polynomial/Interpolator.cpp index 54d18be0db3..8f4c3a4351e 100644 --- a/Polynomial/test/Polynomial/Interpolator.cpp +++ b/Polynomial/test/Polynomial/Interpolator.cpp @@ -54,7 +54,7 @@ void test_interpolator(){ int main(){ - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Arithmetic_kernel AK; typedef AK::Integer Integer; diff --git a/Polynomial/test/Polynomial/Polynomial_using_core.cpp b/Polynomial/test/Polynomial/Polynomial_using_core.cpp index ff19c6474d6..50c93fc7b19 100644 --- a/Polynomial/test/Polynomial/Polynomial_using_core.cpp +++ b/Polynomial/test/Polynomial/Polynomial_using_core.cpp @@ -7,7 +7,7 @@ int main() { // Set wrong rounding mode to test modular arithmetic CGAL::Protect_FPU_rounding pfr(CGAL_FE_UPWARD); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); #ifdef CGAL_USE_CORE { diff --git a/Polynomial/test/Polynomial/Polynomial_using_leda.cpp b/Polynomial/test/Polynomial/Polynomial_using_leda.cpp index 2437bc1a36f..379f5ab37f6 100644 --- a/Polynomial/test/Polynomial/Polynomial_using_leda.cpp +++ b/Polynomial/test/Polynomial/Polynomial_using_leda.cpp @@ -6,7 +6,7 @@ int main() { // Set wrong rounding mode to test modular arithmetic CGAL::Protect_FPU_rounding pfr(CGAL_FE_UPWARD); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); #ifdef CGAL_USE_LEDA { diff --git a/Polynomial/test/Polynomial/include/CGAL/test_modular_gcd.h b/Polynomial/test/Polynomial/include/CGAL/test_modular_gcd.h index 108f89cd655..9e013d7e18c 100644 --- a/Polynomial/test/Polynomial/include/CGAL/test_modular_gcd.h +++ b/Polynomial/test/Polynomial/include/CGAL/test_modular_gcd.h @@ -35,7 +35,7 @@ void gcd_utcf_test(const NT& f, const NT& g, const NT& d) { template void test_modular_gcd(Unique_factorization_domain_tag) { - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); typedef typename AT::Integer Integer; typedef Integer NT; @@ -100,7 +100,7 @@ void test_modular_gcd(Integral_domain_tag) { test_special_polynomials(Integral_domain_tag()); - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); typedef typename AT::Integer Integer; typedef CGAL::Sqrt_extension int_EXT_1; @@ -222,7 +222,7 @@ template void test_special_polynomials(Integral_domain_tag) { - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); typedef typename AT::Integer Integer; typedef CGAL::Sqrt_extension int_EXT_1; diff --git a/Polynomial/test/Polynomial/modular_gcd_utils.cpp b/Polynomial/test/Polynomial/modular_gcd_utils.cpp index a10dcabb7d8..c89923614ef 100644 --- a/Polynomial/test/Polynomial/modular_gcd_utils.cpp +++ b/Polynomial/test/Polynomial/modular_gcd_utils.cpp @@ -43,7 +43,7 @@ void test_modular_gcd_utils() { CGAL_USE_TYPE(Field_with_sqrt); CGAL::Random my_random(4711); - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); typedef typename AT::Integer Integer; typedef Integer NT; diff --git a/Polynomial/test/Polynomial/polynomial_gcd.cpp b/Polynomial/test/Polynomial/polynomial_gcd.cpp index 9f8b9c6d76b..aca5a767228 100644 --- a/Polynomial/test/Polynomial/polynomial_gcd.cpp +++ b/Polynomial/test/Polynomial/polynomial_gcd.cpp @@ -42,7 +42,7 @@ template void gcd_test(const POLY& f, const POLY& g, const POLY& d) { POLY tmp = CGAL::gcd(f, g); #ifdef WITH_OUTPUT - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); std::cout << "\ngcd: "; std::cout << "\nf(x) = " << f; std::cout << "\ng(x) = " << g; @@ -734,7 +734,7 @@ void trivariate_polynomial_test() { template void polynomial_gcd_test() { - ::CGAL::set_pretty_mode(std::cout); + ::CGAL::IO::set_pretty_mode(std::cout); std::cout<<" univariate "<(); std::cout<<" bivariate "< void test_polynomial_utils(){ - //CGAL::set_pretty_mode(std::cout); + //CGAL::IO::set_pretty_mode(std::cout); typedef typename AK::Integer Integer; typedef typename AK::Rational Rational; diff --git a/Polynomial/test/Polynomial/resultant.cpp b/Polynomial/test/Polynomial/resultant.cpp index 61491583631..cf704773ae0 100644 --- a/Polynomial/test/Polynomial/resultant.cpp +++ b/Polynomial/test/Polynomial/resultant.cpp @@ -70,7 +70,7 @@ int main(){ // Set wrong rounding mode to test modular arithmetic CGAL::Protect_FPU_rounding pfr(CGAL_FE_UPWARD); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); typedef CGAL::Arithmetic_kernel AK; typedef AK::Integer Integer; diff --git a/Polynomial/test/Polynomial/test_polynomial.h b/Polynomial/test/Polynomial/test_polynomial.h index f962a34e20e..646057c636b 100644 --- a/Polynomial/test/Polynomial/test_polynomial.h +++ b/Polynomial/test/Polynomial/test_polynomial.h @@ -297,32 +297,32 @@ void io() { assert( p == q ); }{ std::ostringstream os; - CGAL::set_pretty_mode(os); - os << oformat(POLY(NT(3))); + CGAL::IO::set_pretty_mode(os); + os << CGAL::IO::oformat(POLY(NT(3))); //std::cout <::d == 1) assert( os.str() == "4*x + (-3)" ); else assert( os.str() == "4*y + (-3)" ); }{ std::ostringstream os; - CGAL::set_pretty_mode(os); - os << oformat(POLY(NT(-3),NT(4)), CGAL::Parens_as_product_tag()); + CGAL::IO::set_pretty_mode(os); + os << CGAL::IO::oformat(POLY(NT(-3),NT(4)), CGAL::Parens_as_product_tag()); if( CGAL::Polynomial_traits_d::d == 1) assert( os.str() == "(4*x + (-3))" ); diff --git a/Polynomial/test/Polynomial/test_polynomial_Coercion_traits.cpp b/Polynomial/test/Polynomial/test_polynomial_Coercion_traits.cpp index 86a39477003..8ba6939b0d0 100644 --- a/Polynomial/test/Polynomial/test_polynomial_Coercion_traits.cpp +++ b/Polynomial/test/Polynomial/test_polynomial_Coercion_traits.cpp @@ -15,7 +15,7 @@ template void test_coercion_from_to(A, B){ template void test_coercion_traits(){ - //CGAL::set_pretty_mode(std::cout); + //CGAL::IO::set_pretty_mode(std::cout); typedef typename AK::Integer Integer; typedef typename AK::Rational Rational; diff --git a/Polynomial/test/Polynomial/test_subresultants.cpp b/Polynomial/test/Polynomial/test_subresultants.cpp index cc8b392d049..a9dd531777f 100644 --- a/Polynomial/test/Polynomial/test_subresultants.cpp +++ b/Polynomial/test/Polynomial/test_subresultants.cpp @@ -491,7 +491,7 @@ void test_routine() { assert(sres[2]==coP[2]*f + coQ[2]*g); assert(sres[1]==coP[1]*f + coQ[1]*g); assert(sres[0]==coP[0]*f + coQ[0]*g); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); assert(sres[2]==sres_check[2]); assert(sres[1]==sres_check[1]); assert(sres[0]==sres_check[0]); @@ -508,7 +508,7 @@ void test_routine() { std::back_inserter(sres), std::back_inserter(coP), std::back_inserter(coQ)); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); for(int i=static_cast(sres.size()-1);i>=0;i--) { assert(sres[i]==coP[i]*f + coQ[i]*g); assert(sres_check[i]==sres[i]); @@ -532,7 +532,7 @@ void test_routine() { std::back_inserter(sres), std::back_inserter(coP), std::back_inserter(coQ)); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); for(int i=static_cast(sres.size()-1);i>=0;i--) { assert(sres[i]==coP[i]*f + coQ[i]*g); assert(sres_check[i]==sres[i]); @@ -556,7 +556,7 @@ void test_routine() { std::back_inserter(sres), std::back_inserter(coP), std::back_inserter(coQ)); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); for(int i=static_cast(sres.size()-1);i>=0;i--) { assert(sres[i]==coP[i]*f + coQ[i]*g); assert(sres_check[i]==sres[i]); diff --git a/Polytope_distance_d/include/CGAL/Polytope_distance_d.h b/Polytope_distance_d/include/CGAL/Polytope_distance_d.h index b52d1ca7219..ede3b47aa92 100644 --- a/Polytope_distance_d/include/CGAL/Polytope_distance_d.h +++ b/Polytope_distance_d/include/CGAL/Polytope_distance_d.h @@ -849,7 +849,7 @@ operator << ( std::ostream& os, typedef typename Traits_::ET ET; typedef ostream_iterator Et_it; - switch ( CGAL::get_mode( os)) { + switch ( CGAL::IO::get_mode( os)) { case CGAL::IO::PRETTY: os << "CGAL::Polytope_distance_d( |P+Q| = " @@ -918,7 +918,7 @@ operator << ( std::ostream& os, default: CGAL_optimisation_assertion_msg( false, - "CGAL::get_mode( os) invalid!"); + "CGAL::IO::get_mode( os) invalid!"); break; } return( os); diff --git a/Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d.h b/Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d.h index 1f7f293fa5b..d0122d83486 100644 --- a/Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d.h +++ b/Polytope_distance_d/test/Polytope_distance_d/test_Polytope_distance_d.h @@ -55,7 +55,7 @@ test_Polytope_distance_d( ForwardIterator p_first, ForwardIterator p_last, CGAL::Verbose_ostream verr0( verbose == 0); CGAL::Verbose_ostream verr1( verbose == 1); CGAL::Verbose_ostream verrX( verbose == 2); - CGAL::set_pretty_mode( verr.out()); + CGAL::IO::set_pretty_mode( verr.out()); bool is_valid_verbose = ( verbose > 1); diff --git a/Profiling_tools/include/CGAL/Profile_counter.h b/Profiling_tools/include/CGAL/Profile_counter.h index dfaacdb48f9..537d7640bee 100644 --- a/Profiling_tools/include/CGAL/Profile_counter.h +++ b/Profiling_tools/include/CGAL/Profile_counter.h @@ -48,6 +48,7 @@ #include #include #include +#include #include @@ -92,7 +93,7 @@ struct Profile_counter Profile_counter(const std::string & ss) : s(ss) { - i = 0; // needed here because of tbb::atomic + i = 0; // needed here because of std::atomic } void operator++() { ++i; } @@ -107,7 +108,7 @@ struct Profile_counter private: #ifdef CGAL_CONCURRENT_PROFILE - tbb::atomic i; + std::atomic i; #else unsigned int i; #endif @@ -167,7 +168,7 @@ struct Profile_branch_counter Profile_branch_counter(const std::string & ss) : s(ss) { - i = j = 0; // needed here because of tbb::atomic + i = j = 0; // needed here because of std::atomic } void operator++() { ++i; } @@ -183,7 +184,7 @@ struct Profile_branch_counter private: #ifdef CGAL_CONCURRENT_PROFILE - tbb::atomic i, j; + std::atomic i, j; #else unsigned int i, j; #endif @@ -196,7 +197,7 @@ struct Profile_branch_counter_3 Profile_branch_counter_3(const std::string & ss) : s(ss) { - i = j = k = 0; // needed here because of tbb::atomic + i = j = k = 0; // needed here because of std::atomic } void operator++() { ++i; } @@ -214,7 +215,7 @@ struct Profile_branch_counter_3 private: #ifdef CGAL_CONCURRENT_PROFILE - tbb::atomic i, j, k; + std::atomic i, j, k; #else unsigned int i, j, k; #endif diff --git a/Property_map/include/CGAL/Dynamic_property_map.h b/Property_map/include/CGAL/Dynamic_property_map.h index fb37d46e214..6337a639068 100644 --- a/Property_map/include/CGAL/Dynamic_property_map.h +++ b/Property_map/include/CGAL/Dynamic_property_map.h @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include #include @@ -70,7 +70,7 @@ struct Dynamic_property_map { typedef boost::unordered_map Map; - boost::shared_ptr map_; + std::shared_ptr map_; V default_value_; }; @@ -119,7 +119,7 @@ struct Dynamic { put(*(m.map_), k, v); } - boost::shared_ptr map_; + std::shared_ptr map_; }; template @@ -152,7 +152,7 @@ struct Dynamic_with_index (*m.m_values)[k.idx()]=v; } - boost::shared_ptr > m_values; + std::shared_ptr > m_values; }; } // namespace internal diff --git a/Property_map/include/CGAL/Index_property_map.h b/Property_map/include/CGAL/Index_property_map.h index 4d170e39e25..314dacda060 100644 --- a/Property_map/include/CGAL/Index_property_map.h +++ b/Property_map/include/CGAL/Index_property_map.h @@ -13,7 +13,7 @@ #define CGAL_INDEX_PROPERTY_MAP_H #include -#include +#include #include #include @@ -97,7 +97,7 @@ public: private: // Property maps must be lightweight classes => share std::map - boost::shared_ptr m_index_map; + std::shared_ptr m_index_map; }; /// @cond SKIP_IN_MANUAL diff --git a/QP_solver/include/CGAL/QP_models.h b/QP_solver/include/CGAL/QP_models.h index 500a4350d2a..c2c19285096 100644 --- a/QP_solver/include/CGAL/QP_models.h +++ b/QP_solver/include/CGAL/QP_models.h @@ -1061,7 +1061,7 @@ private: template bool number(NumberType& entry) { // whitespace(); the following >> should care for this - from >> CGAL::iformat(entry); + from >> CGAL::IO::iformat(entry); return from.good(); } diff --git a/QP_solver/test/QP_solver/master_mps_to_derivatives.cpp b/QP_solver/test/QP_solver/master_mps_to_derivatives.cpp index 22a72be23f9..b0af787b72e 100644 --- a/QP_solver/test/QP_solver/master_mps_to_derivatives.cpp +++ b/QP_solver/test/QP_solver/master_mps_to_derivatives.cpp @@ -18,7 +18,7 @@ #include #include -#include +#include #include #include @@ -200,7 +200,7 @@ void write_MPS(std::ostream& out, CGAL::print_quadratic_program(out, qp, problem_name); } -boost::shared_ptr +std::shared_ptr create_output_file(const char *filename, // Note: "Bernd3" and not // "Bernd3.mps". const char *directory, @@ -210,7 +210,7 @@ create_output_file(const char *filename, // Note: "Bernd3" and not std::string new_name = std::string(directory) + std::string("/") + std::string(filename) + std::string("_") + std::string(suffix) + std::string(".mps"); - return boost::shared_ptr(new std::ofstream(new_name.c_str(), + return std::shared_ptr(new std::ofstream(new_name.c_str(), std::ios_base::trunc | std::ios_base::out)); } @@ -275,7 +275,7 @@ void create_shifted_instance(const CGAL::Quadratic_program_from_mps & qp, // output: using boost::make_transform_iterator; using boost::make_zip_iterator; - boost::shared_ptr out = create_output_file(file, dir, "shifted"); + std::shared_ptr out = create_output_file(file, dir, "shifted"); write_MPS(*out, "", // deduce number-type @@ -359,7 +359,7 @@ void create_free_instance(CGAL::Quadratic_program_from_mps& qp, qp.set_u(i, false); // variable becomes free } // output: - boost::shared_ptr out = create_output_file(file, dir, "free"); + std::shared_ptr out = create_output_file(file, dir, "free"); write_MPS(*out, "", // deduce number-type "Freed instance of original file", diff --git a/Ridges_3/examples/Ridges_3/Ridges_Umbilics_LCC.cpp b/Ridges_3/examples/Ridges_3/Ridges_Umbilics_LCC.cpp index 5ce258d2909..5df0c1a42c7 100644 --- a/Ridges_3/examples/Ridges_3/Ridges_Umbilics_LCC.cpp +++ b/Ridges_3/examples/Ridges_3/Ridges_Umbilics_LCC.cpp @@ -285,7 +285,7 @@ int main() //load the model from PolyhedralSurf P; - CGAL::read_polygon_mesh(if_name.c_str(), P); + CGAL::IO::read_polygon_mesh(if_name.c_str(), P); fprintf(stderr, "loadMesh %d Ves %d Facets\n", (int)num_vertices(P), (int)num_faces(P)); if(verbose) diff --git a/Ridges_3/include/CGAL/Umbilics.h b/Ridges_3/include/CGAL/Umbilics.h index d10ecd1a1e5..278688706d4 100644 --- a/Ridges_3/include/CGAL/Umbilics.h +++ b/Ridges_3/include/CGAL/Umbilics.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -133,7 +133,7 @@ class Umbilic_approximation const TriangleMesh& P; typedef T_PolyhedralSurf_neighbors Poly_neighbors; - boost::shared_ptr poly_neighbors; + std::shared_ptr poly_neighbors; CGAL::Abs cgal_abs; CGAL::To_double To_double; @@ -165,7 +165,7 @@ Umbilic_approximation(const TriangleMesh& p, { CGAL_precondition(is_triangle_mesh(P)); - poly_neighbors = boost::shared_ptr(new Poly_neighbors(P)); + poly_neighbors = std::shared_ptr(new Poly_neighbors(P)); } diff --git a/STL_Extension/include/CGAL/Compact_container.h b/STL_Extension/include/CGAL/Compact_container.h index 62751003b5a..470918b5f80 100644 --- a/STL_Extension/include/CGAL/Compact_container.h +++ b/STL_Extension/include/CGAL/Compact_container.h @@ -875,6 +875,8 @@ namespace internal { m_ptr = nullptr; } + explicit CC_iterator(pointer ptr) : m_ptr(ptr) { } + // Converting constructor from mutable to constant iterator template CC_iterator(const CC_iterator< diff --git a/STL_Extension/include/CGAL/Concurrent_compact_container.h b/STL_Extension/include/CGAL/Concurrent_compact_container.h index 3877e39f98b..d1f1a4e840f 100644 --- a/STL_Extension/include/CGAL/Concurrent_compact_container.h +++ b/STL_Extension/include/CGAL/Concurrent_compact_container.h @@ -31,7 +31,6 @@ #include #include #include -#include #include #include diff --git a/STL_Extension/include/CGAL/Handle.h b/STL_Extension/include/CGAL/Handle.h index e39f538742c..744d4392cbe 100644 --- a/STL_Extension/include/CGAL/Handle.h +++ b/STL_Extension/include/CGAL/Handle.h @@ -46,8 +46,7 @@ class Handle Handle() noexcept : PTR(static_cast(0)) {} - // FIXME: if the precondition throws in a noexcept function, the program terminates - Handle(const Handle& x) noexcept + Handle(const Handle& x) noexcept(!(CGAL_PRECONDITIONS_ENABLED || CGAL_ASSERTIONS_ENABLED)) { CGAL_precondition( x.PTR != static_cast(0) ); PTR = x.PTR; @@ -68,7 +67,7 @@ class Handle } Handle& - operator=(const Handle& x) noexcept + operator=(const Handle& x) noexcept(!CGAL_PRECONDITIONS_ENABLED) { CGAL_precondition( x.PTR != static_cast(0) ); x.PTR->count++; diff --git a/STL_Extension/include/CGAL/Handle_for.h b/STL_Extension/include/CGAL/Handle_for.h index 97543f58db8..71ac6739e36 100644 --- a/STL_Extension/include/CGAL/Handle_for.h +++ b/STL_Extension/include/CGAL/Handle_for.h @@ -102,7 +102,7 @@ public: ptr_ = p; } - Handle_for(const Handle_for& h) noexcept + Handle_for(const Handle_for& h) noexcept(!CGAL_ASSERTIONS_ENABLED) : ptr_(h.ptr_) { CGAL_assume (ptr_->count > 0); @@ -110,7 +110,7 @@ public: } Handle_for& - operator=(const Handle_for& h) noexcept + operator=(const Handle_for& h) noexcept(!CGAL_ASSERTIONS_ENABLED) { Handle_for tmp = h; swap(tmp); @@ -149,9 +149,9 @@ public: return *this; } - ~Handle_for() noexcept + ~Handle_for() { - try{ + try { if (--(ptr_->count) == 0) { Allocator_traits::destroy(allocator, ptr_); allocator.deallocate( ptr_, 1); diff --git a/STL_Extension/include/CGAL/In_place_list.h b/STL_Extension/include/CGAL/In_place_list.h index e19c8ca5e4d..3266d1ae674 100644 --- a/STL_Extension/include/CGAL/In_place_list.h +++ b/STL_Extension/include/CGAL/In_place_list.h @@ -86,6 +86,8 @@ namespace internal { bool operator==( const Self& x) const { return node == x.node; } bool operator!=( const Self& x) const { return node != x.node; } + bool operator==( std::nullptr_t) const { return node == nullptr; } + bool operator!=( std::nullptr_t) const { return node != nullptr; } bool operator< ( const Self& x) const { return node< x.node; } bool operator<=( const Self& x) const { return node<= x.node; } bool operator> ( const Self& x) const { return node> x.node; } @@ -139,6 +141,8 @@ namespace internal { bool operator==( const Self& x) const { return node == x.node; } bool operator!=( const Self& x) const { return node != x.node; } + bool operator==( std::nullptr_t) const { return node == nullptr; } + bool operator!=( std::nullptr_t) const { return node != nullptr; } bool operator< ( const Self& x) const { return node< x.node; } bool operator<=( const Self& x) const { return node<= x.node; } bool operator> ( const Self& x) const { return node> x.node; } diff --git a/STL_Extension/include/CGAL/Multiset.h b/STL_Extension/include/CGAL/Multiset.h index 5be3bc3b41c..3ef21028cd6 100644 --- a/STL_Extension/include/CGAL/Multiset.h +++ b/STL_Extension/include/CGAL/Multiset.h @@ -590,7 +590,7 @@ public: /*! * Destructor. [takes O(n) operations] */ - virtual ~Multiset (); + virtual ~Multiset () noexcept(!CGAL_ASSERTIONS_ENABLED); /*! * Assignment operator. [takes O(n) operations] @@ -1565,14 +1565,16 @@ Multiset::Multiset (const Self& t // Destructor. // template -Multiset::~Multiset () +Multiset::~Multiset () noexcept(!CGAL_ASSERTIONS_ENABLED) { if (UseCompactContainer::value) return; // Delete the entire tree recursively. - if (rootP != nullptr) - _destroy (rootP); + CGAL_destructor_assertion_catch( + if (rootP != nullptr) + _destroy (rootP); + ); rootP = nullptr; beginNode.parentP = nullptr; diff --git a/STL_Extension/include/CGAL/Object.h b/STL_Extension/include/CGAL/Object.h index 59112fe2959..6046e22552a 100644 --- a/STL_Extension/include/CGAL/Object.h +++ b/STL_Extension/include/CGAL/Object.h @@ -30,13 +30,13 @@ #include #include #include -#include +#include namespace CGAL { class Object { - boost::shared_ptr obj; + std::shared_ptr obj; // returns an any pointer from a variant struct Any_from_variant : public boost::static_visitor { diff --git a/STL_Extension/include/CGAL/Time_stamper.h b/STL_Extension/include/CGAL/Time_stamper.h index f0cfe44a574..8d346516a27 100644 --- a/STL_Extension/include/CGAL/Time_stamper.h +++ b/STL_Extension/include/CGAL/Time_stamper.h @@ -13,7 +13,6 @@ #define CGAL_TIME_STAMPER_H #include -#include namespace CGAL { diff --git a/STL_Extension/include/CGAL/algorithm.h b/STL_Extension/include/CGAL/algorithm.h index d55a6d01b87..34ca7c58cf5 100644 --- a/STL_Extension/include/CGAL/algorithm.h +++ b/STL_Extension/include/CGAL/algorithm.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -280,8 +281,8 @@ output_range(std::ostream& os, { InputIterator it = first; if (it != beyond) { - os << pre << oformat(*it) << post; - while (++it != beyond) os << sep << pre << oformat(*it) << post; + os << pre << CGAL::IO::oformat(*it) << post; + while (++it != beyond) os << sep << pre << CGAL::IO::oformat(*it) << post; } return os; } diff --git a/STL_Extension/include/CGAL/assertions.h b/STL_Extension/include/CGAL/assertions.h index e13f181f970..f3de2c1e8b2 100644 --- a/STL_Extension/include/CGAL/assertions.h +++ b/STL_Extension/include/CGAL/assertions.h @@ -77,6 +77,7 @@ inline bool possibly(Uncertain c); // ---------- #if defined(CGAL_NO_ASSERTIONS) +# define CGAL_ASSERTIONS_ENABLED false # define CGAL_assertion(EX) (static_cast(0)) # define CGAL_destructor_assertion(EX) (static_cast(0)) # define CGAL_destructor_assertion_catch(CODE) CODE @@ -90,6 +91,7 @@ inline bool possibly(Uncertain c); # define CGAL_assume_code(CODE) CGAL_assertion_code(CODE) # endif // not def CGAL_ASSUME #else // no CGAL_NO_ASSERTIONS +# define CGAL_ASSERTIONS_ENABLED true # define CGAL_assertion(EX) \ (CGAL::possibly(EX)?(static_cast(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__)) # if __cpp_lib_uncaught_exceptions || ( _MSVC_LANG >= 201703L ) // C++17 @@ -191,10 +193,12 @@ inline bool possibly(Uncertain c); // ------------- #if defined(CGAL_NO_PRECONDITIONS) +# define CGAL_PRECONDITIONS_ENABLED false # define CGAL_precondition(EX) (static_cast(0)) # define CGAL_precondition_msg(EX,MSG) (static_cast(0)) # define CGAL_precondition_code(CODE) #else +# define CGAL_PRECONDITIONS_ENABLED true # define CGAL_precondition(EX) \ (CGAL::possibly(EX)?(static_cast(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__)) # define CGAL_precondition_msg(EX,MSG) \ diff --git a/STL_Extension/include/CGAL/result_of.h b/STL_Extension/include/CGAL/result_of.h index 863ddb90806..87329e362b7 100644 --- a/STL_Extension/include/CGAL/result_of.h +++ b/STL_Extension/include/CGAL/result_of.h @@ -18,6 +18,9 @@ #ifndef CGAL_RESULT_OF_H #define CGAL_RESULT_OF_H +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_REPLACEMENT_HEADER "" + #include #include diff --git a/STL_Extension/include/CGAL/thread.h b/STL_Extension/include/CGAL/thread.h index fb5a7ca1310..7d163964cf7 100644 --- a/STL_Extension/include/CGAL/thread.h +++ b/STL_Extension/include/CGAL/thread.h @@ -12,6 +12,9 @@ #ifndef CGAL_THREAD_H #define CGAL_THREAD_H +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_REPLACEMENT_HEADER "" + #include /* diff --git a/STL_Extension/include/CGAL/vector.h b/STL_Extension/include/CGAL/vector.h index e4c1a5bca28..c10a8fdd53a 100644 --- a/STL_Extension/include/CGAL/vector.h +++ b/STL_Extension/include/CGAL/vector.h @@ -109,6 +109,8 @@ public: tmp += n; return tmp.operator*(); } + bool operator==( std::nullptr_t) const { return ptr == nullptr; } + bool operator!=( std::nullptr_t) const { return ptr != nullptr; } bool operator< ( const Self& i) const { return ( ptr < i.ptr); } bool operator> ( const Self& i) const { return i < *this; } bool operator<=( const Self& i) const { return !(i < *this); } diff --git a/STL_Extension/test/STL_Extension/test_lexcompare_outputrange.cpp b/STL_Extension/test/STL_Extension/test_lexcompare_outputrange.cpp index 2ec6be68f18..7e316f70bbc 100644 --- a/STL_Extension/test/STL_Extension/test_lexcompare_outputrange.cpp +++ b/STL_Extension/test/STL_Extension/test_lexcompare_outputrange.cpp @@ -45,7 +45,7 @@ void test_lex_compare() { void test_output_range() { std::ostringstream os; std::ostream* sp; - CGAL::set_ascii_mode(os); + CGAL::IO::set_ascii_mode(os); assert(os.str() == ""); diff --git a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space.cpp b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space.cpp index be02efbc6a2..26952258243 100644 --- a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space.cpp +++ b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space.cpp @@ -24,7 +24,7 @@ int main(int argc, char** argv) std::cerr << "Reading " << std::flush; std::vector points; - if(!CGAL::read_points(argv[1], std::back_inserter(points))) + if(!CGAL::IO::read_points(argv[1], std::back_inserter(points))) { std::cerr << "Error: cannot read file" << std::endl; return EXIT_FAILURE; diff --git a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_advancing_front.cpp b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_advancing_front.cpp index 23a392617a0..aa34edd6441 100644 --- a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_advancing_front.cpp +++ b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_advancing_front.cpp @@ -32,7 +32,7 @@ int main(int argc, char** argv) // Read the data. std::cerr << "Reading " << std::flush; Point_set points; - if(!CGAL::read_point_set(argv[1], points)) + if(!CGAL::IO::read_point_set(argv[1], points)) { std::cerr << "Error: cannot read file" << std::endl; return EXIT_FAILURE; diff --git a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_incremental.cpp b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_incremental.cpp index 0adee0d8fda..ce2aa4d670c 100644 --- a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_incremental.cpp +++ b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_incremental.cpp @@ -40,7 +40,7 @@ int main(int argc, char* argv[]) std::cout << "Reading " << std::flush; std::vector points; - if(!CGAL::read_points(argv[1], std::back_inserter(points))) + if(!CGAL::IO::read_points(argv[1], std::back_inserter(points))) { std::cerr << "Error: cannot read file" << std::endl; return EXIT_FAILURE; diff --git a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_manifold.cpp b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_manifold.cpp index cfa6f39723c..abf1920fcd7 100644 --- a/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_manifold.cpp +++ b/Scale_space_reconstruction_3/examples/Scale_space_reconstruction_3/scale_space_manifold.cpp @@ -30,7 +30,7 @@ int main(int argc, char* argv[]) std::cerr << "Reading " << std::flush; std::vector points; - if(!CGAL::read_points(argv[1], std::back_inserter(points))) + if(!CGAL::IO::read_points(argv[1], std::back_inserter(points))) { std::cerr << "Error: cannot read file" << std::endl; return EXIT_FAILURE; diff --git a/Scripts/developer_scripts/autotest_cgal b/Scripts/developer_scripts/autotest_cgal index 3948ceda80d..619f9fea761 100755 --- a/Scripts/developer_scripts/autotest_cgal +++ b/Scripts/developer_scripts/autotest_cgal @@ -661,7 +661,20 @@ echo 'COLLECTING RESULTS'; ./collect_cgal_testresults_from_cmake; if [ -n "\$COLLECT_DEMOS_BINARIES" ]; then echo 'COLLECTING DEMOS BINARIES'; - tar czvf '${CGAL_TEST_DIR}/demos_${CGAL_TESTER}_${PLATFORM}.tar.gz' *_Demo/*.exe *_Demo/*.dll *_Demo/*/*.dll *_Demo/*/*/*.dll + echo "cp ${CGAL_TEST_DIR}/../developer_scripts/cgal_demo_copy_all_dlls_cygwin.sh ${CGAL_BINARY_DIR}/test" + cp "${CGAL_TEST_DIR}/../developer_scripts/cgal_demo_copy_all_dlls_cygwin.sh" "${CGAL_BINARY_DIR}/test" +EOF + cat >> "$file" <<'EOF' + for demo_dir in *_Demo; do + echo "pushd ${demo_dir}" + pushd "${demo_dir}" + bash ../cgal_demo_copy_all_dlls_cygwin.sh "${demo_dir}_with_dlls" "" + mv "${demo_dir}_with_dlls" .. + popd + done +EOF +cat >> "$file" </lib/cmake/Qt5 + +#No config : in autotest_cgal we use NMake as generator +#If using MSVC Generator, declare config="Release" + + +declare config="$2" +declare target_directory="$1" + +if [[ ! -d "$target_directory" ]] +then + mkdir $target_directory +fi + +copy_dll() +{ + local dll_full_path=$(cygpath --unix --absolute "$1") + echo "copy $dll_full_path to $2" + #remove all dlls from system and Visual + if ! [[ "$dll_full_path" =~ "api-ms-win" ]] && ! [[ "$dll_full_path" =~ "system32" ]]; then + cp "$dll_full_path" "$2" + fi +} + + +files=($PWD/$config/*.exe) +files+=($PWD/$config/*.dll) +files+=($PWD/Plugins/*/$config/*.dll) + +for file in "${files[@]}"; do + + # copy exe or dll + copy_dll "$file" "$target_directory" + + # list and copy dependencies + cygcheck "$file" | while read -r dll ; do + + copy_dll "$dll" "$target_directory" + + done; #check dependencies +done #loop over directories +mkdir -p "$target_directory/platforms" +cp "$Qt5_DIR/../../../plugins/platforms/qwindows.dll" "$target_directory/platforms" diff --git a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_2_impl.h b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_2_impl.h index 846e4ad80a2..43c1ca7b1ef 100644 --- a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_2_impl.h +++ b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_2_impl.h @@ -2975,71 +2975,71 @@ file_output(std::ostream& os, const Storage_site_2& t, if ( t.is_point() ) { // 0 for point os << 0; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } if ( t.is_input() ) { // 0 for input os << 0; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.point()]; } else { // 1 for non-input os << 1; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_supporting_site(0)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_supporting_site(0)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_supporting_site(1)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_supporting_site(1)]; } } else { // t is a segment // 1 for segment os << 1; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } if ( t.is_input() ) { // 0 for input os << 0; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_supporting_site()]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_supporting_site()]; } else if ( t.is_input(0) ) { // 1 for input source os << 1; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_supporting_site()]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_supporting_site()]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_crossing_site(1)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_crossing_site(1)]; } else if ( t.is_input(1) ) { // 2 for input target os << 2; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_supporting_site()]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_supporting_site()]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_crossing_site(0)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_crossing_site(0)]; } else { // 3 for non-input src & trg os << 3; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_supporting_site()]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_supporting_site()]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_crossing_site(0)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_crossing_site(0)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.source_of_crossing_site(1)]; - if ( is_ascii(os) ) { os << ' '; } + if ( IO::is_ascii(os) ) { os << ' '; } os << P[t.target_of_crossing_site(1)]; } } @@ -3133,7 +3133,7 @@ file_output(std::ostream& os, Point_handle_mapper& P, CGAL_assertion( n >= 1 ); - if( is_ascii(os) ) { + if( IO::is_ascii(os) ) { os << n << ' ' << m << ' ' << dimension() << std::endl; } else { os << n << m << dimension(); @@ -3141,24 +3141,24 @@ file_output(std::ostream& os, Point_handle_mapper& P, // points in point container and input sites container if ( print_point_container ) { - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } os << pc_.size(); - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } for (const_Point_handle ph = pc_.begin(); ph != pc_.end(); ++ph) { os << *ph; - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } // print the input sites container - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } os << isc_.size(); - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } for (typename Input_sites_container::const_iterator it = isc_.begin(); it != isc_.end(); ++it) { os << P[boost::tuples::get<0>(*it)]; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << P[boost::tuples::get<1>(*it)]; - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } } @@ -3170,7 +3170,7 @@ file_output(std::ostream& os, Point_handle_mapper& P, V[infinite_vertex()] = inum++; // finite vertices - if (is_ascii(os)) os << std::endl; + if (IO::is_ascii(os)) os << std::endl; for (Finite_vertices_iterator vit = finite_vertices_begin(); vit != finite_vertices_end(); ++vit) { V[vit] = inum++; @@ -3178,9 +3178,9 @@ file_output(std::ostream& os, Point_handle_mapper& P, file_output(os, vit->storage_site(), P); // write non-combinatorial info of the vertex // os << *vit ; - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } // vertices of the faces inum = 0; @@ -3190,25 +3190,25 @@ file_output(std::ostream& os, Point_handle_mapper& P, F[fit] = inum++; for(int j = 0; j < dim ; ++j) { os << V[ fit->vertex(j) ]; - if( is_ascii(os) ) { os << ' '; } + if( IO::is_ascii(os) ) { os << ' '; } } // write non-combinatorial info of the face // os << *fit ; - if( is_ascii(os) ) { os << std::endl; } + if( IO::is_ascii(os) ) { os << std::endl; } } - if( is_ascii(os) ) { os << std::endl; } + if( IO::is_ascii(os) ) { os << std::endl; } // neighbor pointers of the faces for( All_faces_iterator it = all_faces_begin(); it != all_faces_end(); ++it) { for(int j = 0; j < dimension()+1; ++j){ os << F[ it->neighbor(j) ]; - if( is_ascii(os) ) { os << ' '; } + if( IO::is_ascii(os) ) { os << ' '; } } - if( is_ascii(os) ) { os << std::endl; } + if( IO::is_ascii(os) ) { os << std::endl; } } - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } diff --git a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h index b145c0b2b7f..14697569e3c 100644 --- a/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h +++ b/Segment_Delaunay_graph_2/include/CGAL/Segment_Delaunay_graph_2/Segment_Delaunay_graph_hierarchy_2_impl.h @@ -1031,10 +1031,10 @@ file_output(std::ostream& os) const // write each level of the hierarchy hierarchy[0]->file_output(os, P, true); - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } for (unsigned int i = 1; i < sdg_hierarchy_2__maxlevel; ++i) { hierarchy[i]->file_output(os, P, false); - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } } Vertex_map* V = new Vertex_map[sdg_hierarchy_2__maxlevel]; @@ -1070,22 +1070,22 @@ file_output(std::ostream& os) const } // write up and down pointer info - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } for (unsigned int i = 0; i < sdg_hierarchy_2__maxlevel; ++i) { os << i; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << hierarchy[i]->number_of_vertices(); - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } for (Finite_vertices_iterator vit = hierarchy[i]->finite_vertices_begin(); vit != hierarchy[i]->finite_vertices_end(); ++vit) { os << V[i][vit]; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << V_down[i][vit]; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << V_up[i][vit]; - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } } delete[] V; diff --git a/Segment_Delaunay_graph_Linf_2/include/CGAL/Polychain_2.h b/Segment_Delaunay_graph_Linf_2/include/CGAL/Polychain_2.h index 97c79b448ff..ad110495054 100644 --- a/Segment_Delaunay_graph_Linf_2/include/CGAL/Polychain_2.h +++ b/Segment_Delaunay_graph_Linf_2/include/CGAL/Polychain_2.h @@ -97,7 +97,7 @@ operator<<(std::ostream &os, ::Vertex_const_iterator i; - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << p.size() << ' '; for (i = p.vertices_begin(); i != p.vertices_end(); ++i) { @@ -268,7 +268,7 @@ operator<<(std::ostream &os, { typename Polychainray_2::Vertex_const_iterator i; - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << p.size() << ' '; for (i = p.vertices_begin(); i != p.vertices_end(); ++i) { @@ -779,7 +779,7 @@ operator<<(std::ostream &os, { typename Polychainline_2::Vertex_const_iterator i; - switch(get_mode(os)) { + switch(IO::get_mode(os)) { case IO::ASCII : os << p.size() << ' '; os << ", dinc=" << p.get_incoming() << ", "; diff --git a/Segment_Delaunay_graph_Linf_2/include/CGAL/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_hierarchy_2_impl.h b/Segment_Delaunay_graph_Linf_2/include/CGAL/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_hierarchy_2_impl.h index 38fbec9d6ab..2dcc22dc739 100644 --- a/Segment_Delaunay_graph_Linf_2/include/CGAL/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_hierarchy_2_impl.h +++ b/Segment_Delaunay_graph_Linf_2/include/CGAL/Segment_Delaunay_graph_Linf_2/Segment_Delaunay_graph_Linf_hierarchy_2_impl.h @@ -1097,10 +1097,10 @@ file_output(std::ostream& os) const // write each level of the hierarchy hierarchy[0]->file_output(os, P, true); - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } for (unsigned int i = 1; i < sdg_hierarchy_2__maxlevel; ++i) { hierarchy[i]->file_output(os, P, false); - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } } Vertex_map* V = new Vertex_map[sdg_hierarchy_2__maxlevel]; @@ -1136,22 +1136,22 @@ file_output(std::ostream& os) const } // write up and down pointer info - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } for (unsigned int i = 0; i < sdg_hierarchy_2__maxlevel; ++i) { os << i; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << hierarchy[i]->number_of_vertices(); - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } for (Finite_vertices_iterator vit = hierarchy[i]->finite_vertices_begin(); vit != hierarchy[i]->finite_vertices_end(); ++vit) { os << V[i][vit]; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << V_down[i][vit]; - if ( is_ascii(os) ) { os << " "; } + if ( IO::is_ascii(os) ) { os << " "; } os << V_up[i][vit]; - if ( is_ascii(os) ) { os << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl; } } - if ( is_ascii(os) ) { os << std::endl << std::endl; } + if ( IO::is_ascii(os) ) { os << std::endl << std::endl; } } delete[] V; diff --git a/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_2.cpp b/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_2.cpp index f6e20bd24fe..f1886f0d286 100644 --- a/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_2.cpp +++ b/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_2.cpp @@ -90,7 +90,7 @@ int main(int argc, char *argv[]) { // Load xyz data either from a local folder or a user-provided file. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_2.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_3.cpp b/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_3.cpp index 8ab4ef6e56d..2660463dbc0 100644 --- a/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_3.cpp +++ b/Shape_detection/benchmark/Shape_detection/benchmark_region_growing_on_point_set_3.cpp @@ -126,7 +126,7 @@ int main(int argc, char *argv[]) { // Load xyz data either from a local folder or a user-provided file. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_3.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/examples/Shape_detection/efficient_RANSAC_and_plane_regularization.cpp b/Shape_detection/examples/Shape_detection/efficient_RANSAC_and_plane_regularization.cpp index aa7022bbcf4..08d3d5d79e4 100644 --- a/Shape_detection/examples/Shape_detection/efficient_RANSAC_and_plane_regularization.cpp +++ b/Shape_detection/examples/Shape_detection/efficient_RANSAC_and_plane_regularization.cpp @@ -30,7 +30,7 @@ int main(int argc, char** argv) { Pwn_vector points; - if (!CGAL::read_points( + if (!CGAL::IO::read_points( (argc > 1 ? argv[1] : "data/cube.pwn"), std::back_inserter(points), CGAL::parameters::point_map(Point_map()). diff --git a/Shape_detection/examples/Shape_detection/efficient_RANSAC_basic.cpp b/Shape_detection/examples/Shape_detection/efficient_RANSAC_basic.cpp index 548229e42b6..f6e422702ea 100644 --- a/Shape_detection/examples/Shape_detection/efficient_RANSAC_basic.cpp +++ b/Shape_detection/examples/Shape_detection/efficient_RANSAC_basic.cpp @@ -35,7 +35,7 @@ int main (int argc, char** argv) { // Load point set from a file. - if (!CGAL::read_points( + if (!CGAL::IO::read_points( filename, std::back_inserter(points), CGAL::parameters::point_map(Point_map()). diff --git a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_callback.cpp b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_callback.cpp index 2a946a3c312..e17aae6482b 100644 --- a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_callback.cpp +++ b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_callback.cpp @@ -62,7 +62,7 @@ int main (int argc, char** argv) { Pwn_vector points; - if (!CGAL::read_points( + if (!CGAL::IO::read_points( filename, std::back_inserter(points), CGAL::parameters::point_map(Point_map()). diff --git a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_custom_shape.cpp b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_custom_shape.cpp index cc9e6b1f5b8..4bd26cb2169 100644 --- a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_custom_shape.cpp +++ b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_custom_shape.cpp @@ -28,9 +28,9 @@ int main(int argc, char** argv) { // Load point set from a file. - if (!CGAL::read_points(((argc > 1) ? argv[1] : "data/cube.pwn"), std::back_inserter(points), - CGAL::parameters::point_map(Point_map()) - .normal_map(Normal_map()))) + if (!CGAL::IO::read_points(((argc > 1) ? argv[1] : "data/cube.pwn"), std::back_inserter(points), + CGAL::parameters::point_map(Point_map()) + .normal_map(Normal_map()))) { std::cerr << "Error: cannot read input file!" << std::endl; return EXIT_FAILURE; diff --git a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_parameters.cpp b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_parameters.cpp index 18da3c0fa59..2d0280be98a 100644 --- a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_parameters.cpp +++ b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_parameters.cpp @@ -32,7 +32,7 @@ int main(int argc, char** argv) { // Load point set from a file. - if (!CGAL::read_points( + if (!CGAL::IO::read_points( ((argc > 1) ? argv[1] : "data/cube.pwn"), std::back_inserter(points), CGAL::parameters::point_map(Point_map()). diff --git a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_point_access.cpp b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_point_access.cpp index 1feda5d0684..21e2ef6e531 100644 --- a/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_point_access.cpp +++ b/Shape_detection/examples/Shape_detection/efficient_RANSAC_with_point_access.cpp @@ -29,7 +29,7 @@ int main(int argc, char** argv) { // Load point set from a file. - if (!CGAL::read_points( + if (!CGAL::IO::read_points( ((argc > 1) ? argv[1] : "data/cube.pwn"), std::back_inserter(points), CGAL::parameters::point_map(Point_map()). diff --git a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_2.cpp b/Shape_detection/examples/Shape_detection/region_growing_on_point_set_2.cpp index a7359da29ee..a5c34a74897 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_2.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_on_point_set_2.cpp @@ -55,7 +55,7 @@ namespace CGAL { std::ostream& operator()(std::ostream& out) const { - if (is_ascii(out)) + if (IO::is_ascii(out)) out << int(c[0]) << " " << int(c[1]) << " " << int(c[2]); else out.write(reinterpret_cast(&c), sizeof(c)); @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) { // Load xyz data either from a local folder or a user-provided file. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_2.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << @@ -161,8 +161,8 @@ int main(int argc, char *argv[]) { std::ofstream out(fullpath); - CGAL::set_ascii_mode(out); - CGAL::write_PLY_with_properties( + CGAL::IO::set_ascii_mode(out); + CGAL::IO::write_PLY_with_properties( out, pwc, CGAL::make_ply_point_writer(PLY_Point_map()), std::make_tuple( diff --git a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_3.cpp b/Shape_detection/examples/Shape_detection/region_growing_on_point_set_3.cpp index 10b6a9ab006..cea02376e11 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_on_point_set_3.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_on_point_set_3.cpp @@ -109,7 +109,7 @@ int main(int argc, char *argv[]) { // Load xyz data either from a local folder or a user-provided file. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_3.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/examples/Shape_detection/region_growing_on_polygon_mesh.cpp b/Shape_detection/examples/Shape_detection/region_growing_on_polygon_mesh.cpp index 9fd7ff44639..152b8826889 100644 --- a/Shape_detection/examples/Shape_detection/region_growing_on_polygon_mesh.cpp +++ b/Shape_detection/examples/Shape_detection/region_growing_on_polygon_mesh.cpp @@ -25,7 +25,7 @@ using Kernel = CGAL::Exact_predicates_exact_constructions_kernel; using FT = typename Kernel::FT; using Point_3 = typename Kernel::Point_3; -using Color = CGAL::Color; +using Color = CGAL::IO::Color; // Choose the type of a container for a polygon mesh. #define USE_SURFACE_MESH @@ -65,7 +65,7 @@ int main(int argc, char *argv[]) { // Load off data either from a local folder or a user-provided file. std::ifstream in(argc > 1 ? argv[1] : "data/polygon_mesh.off"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/examples/Shape_detection/shape_detection_basic_deprecated.cpp b/Shape_detection/examples/Shape_detection/shape_detection_basic_deprecated.cpp index 531709d4ec5..a134f355f0b 100644 --- a/Shape_detection/examples/Shape_detection/shape_detection_basic_deprecated.cpp +++ b/Shape_detection/examples/Shape_detection/shape_detection_basic_deprecated.cpp @@ -41,10 +41,10 @@ int run(const char* filename) { // read_points takes an OutputIterator for storing the points // and a property map to store the normal vector with each point. - if (!CGAL::read_points(filename, - std::back_inserter(points), - CGAL::parameters::point_map(Point_map()). - normal_map(Normal_map()))) { + if (!CGAL::IO::read_points(filename, + std::back_inserter(points), + CGAL::parameters::point_map(Point_map()). + normal_map(Normal_map()))) { std::cout << "Error: cannot read the file cube.pwn" << std::endl; return EXIT_FAILURE; diff --git a/Shape_detection/test/Shape_detection/test_efficient_RANSAC_scene.cpp b/Shape_detection/test/Shape_detection/test_efficient_RANSAC_scene.cpp index ff2e341b93d..d46cffbaa61 100644 --- a/Shape_detection/test/Shape_detection/test_efficient_RANSAC_scene.cpp +++ b/Shape_detection/test/Shape_detection/test_efficient_RANSAC_scene.cpp @@ -36,7 +36,7 @@ bool test_scene(int argc, char** argv) { // and a property map to store the normal vector with each point. const char* filename = (argc > 1) ? argv[1] : "data/cube.pwn"; - if (!CGAL::read_points(filename, std::back_inserter(points), + if (!CGAL::IO::read_points(filename, std::back_inserter(points), CGAL::parameters::point_map(Point_map()) .normal_map(Normal_map()))) { diff --git a/Shape_detection/test/Shape_detection/test_region_growing_basic.cpp b/Shape_detection/test/Shape_detection/test_region_growing_basic.cpp index ddb88052d49..0a91ffefc76 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_basic.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_basic.cpp @@ -35,7 +35,7 @@ int main(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_2.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_cube.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_cube.cpp index b91d80fdaec..e3ea45870ad 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_cube.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_cube.cpp @@ -40,7 +40,7 @@ bool test_region_growing_on_cube(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/cube.off"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_degenerated_mesh.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_degenerated_mesh.cpp index 70fddd80347..155db88d445 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_degenerated_mesh.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_degenerated_mesh.cpp @@ -39,7 +39,7 @@ bool test_region_growing_on_degenerated_mesh(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/degenerated.off"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2.cpp index e43ec1d60d0..ec1061d85cd 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2.cpp @@ -44,7 +44,7 @@ bool test_region_growing_on_point_set_2(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_2.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2_with_sorting.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2_with_sorting.cpp index 27bf5584907..902e3f9b9a0 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2_with_sorting.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_2_with_sorting.cpp @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_2.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3.cpp index 95a49104927..b8b2e804b9a 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3.cpp @@ -43,7 +43,7 @@ bool test_region_growing_on_point_set_3(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_3.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3_with_sorting.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3_with_sorting.cpp index 8b23d9acc50..029a7072dd7 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3_with_sorting.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_point_set_3_with_sorting.cpp @@ -39,7 +39,7 @@ int main(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/point_set_3.xyz"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh.cpp index c3e6142f6f9..e7cf528ef18 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh.cpp @@ -38,7 +38,7 @@ bool test_region_growing_on_polygon_mesh(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/polygon_mesh.off"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh_with_sorting.cpp b/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh_with_sorting.cpp index 44e457460af..ff8b20ccae9 100644 --- a/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh_with_sorting.cpp +++ b/Shape_detection/test/Shape_detection/test_region_growing_on_polygon_mesh_with_sorting.cpp @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) { // Load data. std::ifstream in(argc > 1 ? argv[1] : "data/polygon_mesh.off"); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); if (!in) { std::cout << diff --git a/Shape_detection/test/Shape_detection/test_validity_sampled_data.cpp b/Shape_detection/test/Shape_detection/test_validity_sampled_data.cpp index eccb69cd07d..e13aae67dfc 100644 --- a/Shape_detection/test/Shape_detection/test_validity_sampled_data.cpp +++ b/Shape_detection/test/Shape_detection/test_validity_sampled_data.cpp @@ -49,7 +49,7 @@ int main (int argc, char** argv) std::ifstream ifile(ifilename); if (!ifile || - !CGAL::read_XYZ( + !CGAL::IO::read_XYZ( ifile, std::back_inserter(points), CGAL::parameters::point_map(Point_map()). diff --git a/Skin_surface_3/include/CGAL/Skin_surface_base_3.h b/Skin_surface_3/include/CGAL/Skin_surface_base_3.h index 108b8ff2b25..836671a496b 100644 --- a/Skin_surface_3/include/CGAL/Skin_surface_base_3.h +++ b/Skin_surface_3/include/CGAL/Skin_surface_base_3.h @@ -24,7 +24,7 @@ #include #include #include -#include +#include // Used for the triangulated mixed complex / Voronoi diagram #include @@ -93,7 +93,7 @@ private: public: typedef Anchor_point Vertex_info; - typedef std::pair > Cell_info; + typedef std::pair > Cell_info; private: // Triangulated_mixed_complex: diff --git a/Skin_surface_3/include/CGAL/Triangulated_mixed_complex_observer_3.h b/Skin_surface_3/include/CGAL/Triangulated_mixed_complex_observer_3.h index baf74b7e19c..c519448c672 100644 --- a/Skin_surface_3/include/CGAL/Triangulated_mixed_complex_observer_3.h +++ b/Skin_surface_3/include/CGAL/Triangulated_mixed_complex_observer_3.h @@ -18,7 +18,7 @@ #include #include -#include +#include namespace CGAL { @@ -163,7 +163,7 @@ public: FT shrink; Rt_Simplex prev_s; - boost::shared_ptr surf; + std::shared_ptr surf; // c is the center of the orthogonal sphere // w is the weight of the orthogonal sphere @@ -179,14 +179,14 @@ public: Q[1] = Q[3] = Q[4] = 0; Q[0] = Q[2] = Q[5] = orient; - surf = boost::shared_ptr(new Quadratic_surface(Q, c, s*w, (orient==1? 0 : 3))); + surf = std::shared_ptr(new Quadratic_surface(Q, c, s*w, (orient==1? 0 : 3))); } else { // Multiply with 1-s to make the function defining the // skin surface implicitly continuous Q[1] = Q[3] = Q[4] = 0; Q[0] = Q[2] = Q[5] = orient*(1-s); - surf = boost::shared_ptr(new Quadratic_surface(Q, c, s*(1-s)*w, (orient==1? 0 : 3))); + surf = std::shared_ptr(new Quadratic_surface(Q, c, s*(1-s)*w, (orient==1? 0 : 3))); } } @@ -207,7 +207,7 @@ public: Q[4] = orient*(-2*t.z()*t.y()/den); Q[5] = orient*(- t.z()*t.z()/den + (1-s)); - surf = boost::shared_ptr(new Quadratic_surface(Q, c, s*(1-s)*w, (orient==1? 1 : 2))); + surf = std::shared_ptr(new Quadratic_surface(Q, c, s*(1-s)*w, (orient==1? 1 : 2))); } Surface_RT Q[6]; diff --git a/Skin_surface_3/include/CGAL/make_skin_surface_mesh_3.h b/Skin_surface_3/include/CGAL/make_skin_surface_mesh_3.h index fe80be03d19..61fc786655e 100644 --- a/Skin_surface_3/include/CGAL/make_skin_surface_mesh_3.h +++ b/Skin_surface_3/include/CGAL/make_skin_surface_mesh_3.h @@ -33,8 +33,9 @@ void make_skin_surface_mesh_3(Polyhedron_3 &p, int nSubdivisions=0, bool grow_balls=true) { - if (shrink_factor == 1) { + if (shrink_factor >= 1) { make_union_of_balls_mesh_3(p,begin,end,nSubdivisions); + return; } typedef typename WP_iterator::value_type Weighted_point; diff --git a/Solver_interface/include/CGAL/Eigen_solver_traits.h b/Solver_interface/include/CGAL/Eigen_solver_traits.h index ecedf0ed89b..c7efdfda81d 100644 --- a/Solver_interface/include/CGAL/Eigen_solver_traits.h +++ b/Solver_interface/include/CGAL/Eigen_solver_traits.h @@ -29,7 +29,7 @@ #include #include -#include +#include namespace CGAL { namespace internal { @@ -226,7 +226,7 @@ public: protected: const typename Matrix::EigenType* m_mat; - boost::shared_ptr m_solver_sptr; + std::shared_ptr m_solver_sptr; }; // Specialization of the solver for BiCGSTAB as for surface parameterization, @@ -275,7 +275,7 @@ public: } protected: - boost::shared_ptr m_solver_sptr; + std::shared_ptr m_solver_sptr; }; } // namespace CGAL diff --git a/Spatial_searching/benchmark/Spatial_searching/binary.cpp b/Spatial_searching/benchmark/Spatial_searching/binary.cpp index 00ec5cc97ad..fa04ed04b2c 100644 --- a/Spatial_searching/benchmark/Spatial_searching/binary.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/binary.cpp @@ -20,7 +20,7 @@ int main(int argc, char* argv[]) std::ifstream ascii(argv[1]); ascii >> d >> N; std::ofstream binary(argv[2], std::ios::out | std::ios::binary); - CGAL::set_binary_mode(binary); + CGAL::IO::set_binary_mode(binary); CGAL::write(binary, d); CGAL::write(binary, N); for(int i=0; i < N; i++){ @@ -36,8 +36,8 @@ int main(int argc, char* argv[]) std::ifstream binary(argv[1], std::ios::in | std::ios::binary); std::ofstream bbox(argv[2], std::ios::out | std::ios::binary); - CGAL::set_binary_mode(binary); - CGAL::set_binary_mode(bbox); + CGAL::IO::set_binary_mode(binary); + CGAL::IO::set_binary_mode(bbox); CGAL::read(binary,d); CGAL::read(binary,N); CGAL::write(bbox, d); @@ -74,7 +74,7 @@ int main(int argc, char* argv[]) std::ifstream binary(argv[1], std::ios::in | std::ios::binary); std::ofstream ascii(argv[2]); - CGAL::set_binary_mode(binary); + CGAL::IO::set_binary_mode(binary); CGAL::read(binary,d); CGAL::read(binary,N); ascii << d << std::endl << N << std::endl; diff --git a/Spatial_searching/benchmark/Spatial_searching/nn3cgal.cpp b/Spatial_searching/benchmark/Spatial_searching/nn3cgal.cpp index 5df37fe8632..58fba65de4d 100644 --- a/Spatial_searching/benchmark/Spatial_searching/nn3cgal.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/nn3cgal.cpp @@ -39,7 +39,7 @@ void read(Points& points, char* argv) #else std::ifstream data(argv, std::ios::in | std::ios::binary); - CGAL::set_binary_mode(data); + CGAL::IO::set_binary_mode(data); CGAL::read(data,d); CGAL::read(data,n); diff --git a/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp b/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp index a2510e2187b..63da87f0128 100644 --- a/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp +++ b/Spatial_searching/benchmark/Spatial_searching/nn3nanoflan.cpp @@ -90,7 +90,7 @@ void kdtree_demo(int argc, char** argv) // Generate points: std::ifstream input(argv[1], std::ios::in | std::ios::binary); - CGAL::set_binary_mode(input); + CGAL::IO::set_binary_mode(input); // input >> n >> n; // dimension and # of points CGAL::read(input,n); CGAL::read(input,n); @@ -98,7 +98,7 @@ void kdtree_demo(int argc, char** argv) std::vector > queries; std::ifstream queries_stream(argv[2], std::ios::in | std::ios::binary); - CGAL::set_binary_mode(queries_stream); + CGAL::IO::set_binary_mode(queries_stream); CGAL::read(queries_stream,n); CGAL::read(queries_stream,n); // queries_stream >> n >> n; diff --git a/Spatial_searching/examples/Spatial_searching/searching_surface_mesh_vertices.cpp b/Spatial_searching/examples/Spatial_searching/searching_surface_mesh_vertices.cpp index b9faabfeb64..b377bf083ec 100644 --- a/Spatial_searching/examples/Spatial_searching/searching_surface_mesh_vertices.cpp +++ b/Spatial_searching/examples/Spatial_searching/searching_surface_mesh_vertices.cpp @@ -28,7 +28,7 @@ int main(int argc, char* argv[]) const char* filename = (argc>1) ? argv[1] : "data/tripod.off"; Mesh mesh; - if(!CGAL::read_polygon_mesh(filename, mesh)) + if(!CGAL::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input." << std::endl; return 1; diff --git a/Spatial_searching/include/CGAL/Manhattan_distance_iso_box_point.h b/Spatial_searching/include/CGAL/Manhattan_distance_iso_box_point.h index 16ffe439eaa..cd348d178e3 100644 --- a/Spatial_searching/include/CGAL/Manhattan_distance_iso_box_point.h +++ b/Spatial_searching/include/CGAL/Manhattan_distance_iso_box_point.h @@ -17,7 +17,6 @@ #include -#include #include #include #include diff --git a/Spatial_searching/include/CGAL/Search_traits_adapter.h b/Spatial_searching/include/CGAL/Search_traits_adapter.h index d3c6b49fd60..7fc4c174572 100644 --- a/Spatial_searching/include/CGAL/Search_traits_adapter.h +++ b/Spatial_searching/include/CGAL/Search_traits_adapter.h @@ -142,7 +142,7 @@ public: typedef typename boost::property_traits::value_type Point; - boost::shared_ptr point; + std::shared_ptr point; std::size_t idx; public: @@ -157,18 +157,18 @@ public: void increment() { ++idx; - CGAL_assertion(point != boost::shared_ptr()); + CGAL_assertion(point != std::shared_ptr()); } void decrement() { --idx; - CGAL_assertion(point != boost::shared_ptr()); + CGAL_assertion(point != std::shared_ptr()); } void advance(std::ptrdiff_t n) { idx += n; - CGAL_assertion(point != boost::shared_ptr()); + CGAL_assertion(point != std::shared_ptr()); } std::ptrdiff_t distance_to(const No_lvalue_iterator& other) const diff --git a/Straight_skeleton_2/include/CGAL/IO/Dxf_stream.h b/Straight_skeleton_2/include/CGAL/IO/Dxf_stream.h index 78a29f7f1d3..ed0dceb3efe 100644 --- a/Straight_skeleton_2/include/CGAL/IO/Dxf_stream.h +++ b/Straight_skeleton_2/include/CGAL/IO/Dxf_stream.h @@ -63,23 +63,23 @@ protected: Dxf_writer mWriter ; int mDefaultDxfColor; int mDxfColor; - Color mCgalColor ; + IO::Color mCgalColor ; std::string mLayer ; struct Color_less { - bool operator() ( Color const& a, Color const& b ) const + bool operator() ( IO::Color const& a, IO::Color const& b ) const { return Color_value(a) < Color_value(b); } - static int Color_value ( Color const& c ) + static int Color_value ( IO::Color const& c ) { return ( int(c.r()) << 16 ) + ( int(c.g()) << 8 ) + ( int(c.b()) ) ; } } ; - typedef std::map Color_table ; + typedef std::map Color_table ; typedef typename Color_table::const_iterator Color_table_iterator ; Color_table mColorTable ; @@ -103,7 +103,7 @@ public: mWriter (out) ,mDefaultDxfColor (255) ,mDxfColor (255) - ,mCgalColor (white()) + ,mCgalColor (IO::white()) ,mLayer ("0") { setup_initial_color_table(); @@ -126,7 +126,7 @@ public: /*! * Get the current CGAL color. */ - Color color () const { return mCgalColor ; } + IO::Color color () const { return mCgalColor ; } /*! * Get the current DXF color. @@ -152,7 +152,7 @@ public: * Set the current color. * \pre The color must be defined. */ - void set_color ( Color aColor ) + void set_color ( IO::Color aColor ) { mCgalColor = aColor ; @@ -177,7 +177,7 @@ public: * \param aCgalColor The CGAL color. * \param aDxfColor The DXF color. */ - void define_color ( Color const& aCgalColor, int aDxfColor ) + void define_color ( IO::Color const& aCgalColor, int aDxfColor ) { mColorTable.insert( std::make_pair(aCgalColor,aDxfColor) ) ; } @@ -265,7 +265,7 @@ public: /*! * Set the current color. */ - Dxf_stream& operator<< ( Color const& aColor ) + Dxf_stream& operator<< ( IO::Color const& aColor ) { set_color (aColor); return (*this); @@ -300,15 +300,15 @@ protected: void setup_initial_color_table() { - define_color(black(),0); - define_color(red(),1); - define_color(yellow(),2); - define_color(green(),3); - define_color(purple(),4); - define_color(blue(),5); - define_color(violet(),6); - define_color(white(),7); - define_color(gray(),8); + define_color(IO::black(),0); + define_color(IO::red(),1); + define_color(IO::yellow(),2); + define_color(IO::green(),3); + define_color(IO::purple(),4); + define_color(IO::blue(),5); + define_color(IO::violet(),6); + define_color(IO::white(),7); + define_color(IO::gray(),8); } }; diff --git a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h index 7e642e8b10b..e22b0bbe422 100644 --- a/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h +++ b/Straight_skeleton_2/include/CGAL/Straight_skeleton_2/Straight_skeleton_aux.h @@ -164,7 +164,7 @@ private: Ref_counted_base& operator=( Ref_counted_base const &); protected: Ref_counted_base(): mCount(0) {} - virtual ~Ref_counted_base() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) {} + virtual ~Ref_counted_base() noexcept(!CGAL_ASSERTIONS_ENABLED) {} public: void AddRef() const { ++mCount; } void Release() const diff --git a/Straight_skeleton_2/include/CGAL/draw_straight_skeleton_2.h b/Straight_skeleton_2/include/CGAL/draw_straight_skeleton_2.h index 02956b3d686..8bf2a8bf393 100644 --- a/Straight_skeleton_2/include/CGAL/draw_straight_skeleton_2.h +++ b/Straight_skeleton_2/include/CGAL/draw_straight_skeleton_2.h @@ -28,7 +28,7 @@ namespace CGAL { struct DefaultColorFunctorSS2 { template - static CGAL::Color run(const SS2&, + static CGAL::IO::Color run(const SS2&, const typename SS2::Finite_faces_iterator fh) { CGAL::Random random((unsigned int)(std::size_t)(&*fh)); @@ -65,7 +65,7 @@ protected: /* void compute_face(Facet_const_handle fh) { - CGAL::Color c=m_fcolor.run(ss2, fh); + CGAL::IO::Color c=m_fcolor.run(ss2, fh); face_begin(c); add_point_in_face(fh->vertex(0)->point()); @@ -78,9 +78,9 @@ protected: void compute_edge(Halfedge_const_handle eh) { if(eh->is_bisector()) - add_segment(eh->opposite()->vertex()->point(), eh->vertex()->point(), CGAL::red()); + add_segment(eh->opposite()->vertex()->point(), eh->vertex()->point(), CGAL::IO::red()); else - add_segment(eh->opposite()->vertex()->point(), eh->vertex()->point(), CGAL::black()); + add_segment(eh->opposite()->vertex()->point(), eh->vertex()->point(), CGAL::IO::black()); } void print_halfedge_labels(Halfedge_const_handle h) { @@ -93,11 +93,11 @@ protected: void compute_vertex(Vertex_const_handle vh) { if(vh->is_split()) - add_point(vh->point(), CGAL::Color(10,10,180)); // blue, but not flashy + add_point(vh->point(), CGAL::IO::Color(10,10,180)); // blue, but not flashy else if(vh->has_infinite_time()) - add_point(vh->point(), CGAL::orange()); + add_point(vh->point(), CGAL::IO::orange()); else - add_point(vh->point(), CGAL::Color(10,180,10)); // green, but not flashy + add_point(vh->point(), CGAL::IO::Color(10,180,10)); // green, but not flashy } void print_vertex_label(Vertex_const_handle vh) { diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp index 6cf6dbb2f7d..709158ffbc2 100644 --- a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp +++ b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls.cpp @@ -121,6 +121,7 @@ typedef CGAL::Dxf_stream DxfStream ; using namespace std ; using namespace CGAL ; +using namespace CGAL::IO ; inline string to_string( double n ) { ostringstream ss ; ss << n ; return ss.str(); } inline bool is_even ( int n ) { return n % 2 == 0 ; } @@ -222,7 +223,7 @@ IRegionPtr load_region( string file, int aShift, int& rStatus ) ifstream in(file.c_str()); if ( in ) { - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); rRegion = IRegionPtr( new IRegion() ) ; @@ -458,7 +459,7 @@ void dump_to_eps ( TestCase const& aCase ) } template -void dump_polygon_to_dxf( Polygon const& aPolygon, Color aColor, string aLayer, DxfStream& rDXF ) +void dump_polygon_to_dxf( Polygon const& aPolygon, IO::Color aColor, string aLayer, DxfStream& rDXF ) { rDXF << aColor << Dxf_layer(aLayer) ; @@ -467,7 +468,7 @@ void dump_polygon_to_dxf( Polygon const& aPolygon, Color aColor, string aLayer, template -void dump_region_to_dxf( Region const& aRegion, Color aColor, string aBaseLayer, DxfStream& rDXF ) +void dump_region_to_dxf( Region const& aRegion, IO::Color aColor, string aBaseLayer, DxfStream& rDXF ) { int lN = 0 ; for ( typename Region::const_iterator bit = aRegion.begin() ; bit != aRegion.end() ; ++ bit ) @@ -480,10 +481,10 @@ void dump_region_to_dxf( Region const& aRegion, Color aColor, string aBaseLayer, } void dump_skeleton_to_dxf( ISls const& aSkeleton - , Color aContourBisectorColor - , Color aSkeletonBisectorColor - , Color aPeakBisectorColor - , Color /*aInfiniteBisectorColor*/ + , IO::Color aContourBisectorColor + , IO::Color aSkeletonBisectorColor + , IO::Color aPeakBisectorColor + , IO::Color /*aInfiniteBisectorColor*/ , string aLayer , DxfStream& rDXF ) diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_offset.cpp b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_offset.cpp index 240bc06ab49..0bbfd140895 100644 --- a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_offset.cpp +++ b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_offset.cpp @@ -833,7 +833,7 @@ void test_offset(const char* filename) std::ifstream in(filename); assert(in); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); std::vector points; std::vector polys; diff --git a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_simple.cpp b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_simple.cpp index 3153eae74e4..4bddf279d39 100644 --- a/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_simple.cpp +++ b/Straight_skeleton_2/test/Straight_skeleton_2/test_sls_simple.cpp @@ -141,7 +141,7 @@ void test_skeleton(const char* filename, std::ifstream in(filename); assert(in); - CGAL::set_ascii_mode(in); + CGAL::IO::set_ascii_mode(in); std::vector polys; diff --git a/Stream_lines_2/include/CGAL/Regular_grid_2.h b/Stream_lines_2/include/CGAL/Regular_grid_2.h index 4cce300d35a..57b69a00e41 100644 --- a/Stream_lines_2/include/CGAL/Regular_grid_2.h +++ b/Stream_lines_2/include/CGAL/Regular_grid_2.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include @@ -39,7 +39,7 @@ public: typedef typename StreamLinesTraits_2::Point_2 Point_2; typedef typename StreamLinesTraits_2::Vector_2 Vector_2; protected: - boost::shared_ptr< std::vector > vector_field; + std::shared_ptr< std::vector > vector_field; inline int get_index(int i,int j) const; int number_of_samples_x; int number_of_samples_y; @@ -118,7 +118,7 @@ Regular_grid_2::Regular_grid_2(int m, number_of_samples_y = n; domain_size_x = x; domain_size_y = y; - vector_field = boost::shared_ptr >(new std::vector(number_of_samples_x*number_of_samples_y* 2)); + vector_field = std::shared_ptr >(new std::vector(number_of_samples_x*number_of_samples_y* 2)); } diff --git a/Stream_lines_2/include/CGAL/Stream_lines_2.h b/Stream_lines_2/include/CGAL/Stream_lines_2.h index 25458c7aa08..a000bbf684f 100644 --- a/Stream_lines_2/include/CGAL/Stream_lines_2.h +++ b/Stream_lines_2/include/CGAL/Stream_lines_2.h @@ -32,7 +32,7 @@ #include // undocumented class #include #include -#include +#include namespace CGAL { @@ -96,8 +96,8 @@ protected: Point_2 seed_point; int samp_step; unsigned int _number_of_lines; - boost::shared_ptr vf_2; - boost::shared_ptr int_2; + std::shared_ptr vf_2; + std::shared_ptr int_2; public: void set_separating_distance(FT new_value){separating_distance = new_value;} void set_saturation_ratio(FT new_value){ saturation_ratio = new_value;} @@ -241,8 +241,8 @@ vector_field_2, const Integrator_2 & m_integrator, const FT & m_separating_dista m_DT.insert(pPoint); } _number_of_lines = 0; - vf_2 = boost::shared_ptr(new Vector_field_2(vector_field_2)); - int_2 = boost::shared_ptr(new Integrator_2(m_integrator)); + vf_2 = std::shared_ptr(new Vector_field_2(vector_field_2)); + int_2 = std::shared_ptr(new Integrator_2(m_integrator)); samp_step = sampling_step; stl_container.clear(); place_stream_lines(vector_field_2, m_integrator, diff --git a/Stream_support/benchmark/Stream_support/read_doubles.cpp b/Stream_support/benchmark/Stream_support/read_doubles.cpp index ce14a76f97e..52014f67637 100644 --- a/Stream_support/benchmark/Stream_support/read_doubles.cpp +++ b/Stream_support/benchmark/Stream_support/read_doubles.cpp @@ -76,7 +76,7 @@ int main(int argc, char* argv[]) std::cerr << "iformat"<< std::endl; t.start(); for(int i=0; i> CGAL::iformat(d); + in >> CGAL::IO::iformat(d); sum+= d; } t.stop(); diff --git a/Stream_support/doc/Stream_support/File_formats/Supported_file_formats.txt b/Stream_support/doc/Stream_support/File_formats/Supported_file_formats.txt index d0644f0d513..a29b2c915be 100644 --- a/Stream_support/doc/Stream_support/File_formats/Supported_file_formats.txt +++ b/Stream_support/doc/Stream_support/File_formats/Supported_file_formats.txt @@ -43,62 +43,62 @@ The following table lists some \cgal data structures that have I/O functions com Input Polygon Mesh `CGAL::Surface_mesh` - \link PkgSurfaceMeshIOFuncOFF CGAL::read_OFF(const char*, CGAL::Surface_mesh&)\endlink + \link PkgSurfaceMeshIOFuncOFF CGAL::IO::read_OFF(const char*, CGAL::Surface_mesh&)\endlink `CGAL::Polyhedron_3` - \link PkgPolyhedronIOFunc CGAL::read_OFF(const char*, CGAL::Polyhedron_3&)\endlink + \link PkgPolyhedronIOFunc CGAL::IO::read_OFF(const char*, CGAL::Polyhedron_3&)\endlink Any model of `MutableFaceGraph` - \link PkgBGLIoFuncsOFF CGAL::read_OFF(const char*, Graph&)\endlink + \link PkgBGLIoFuncsOFF CGAL::IO::read_OFF(const char*, Graph&)\endlink Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOOFF CGAL::read_OFF(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOOFF CGAL::IO::read_OFF(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOOff CGAL::read_OFF(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOOff CGAL::IO::read_OFF(const char*, PointRange&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsOFF CGAL::read_OFF(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsOFF CGAL::IO::read_OFF(const char*, PointRange&, PolygonRange&)\endlink Output Polygon Mesh `CGAL::Surface_mesh` - \link PkgSurfaceMeshIOFuncOFF CGAL::write_OFF(const char*, CGAL::Surface_mesh&)\endlink + \link PkgSurfaceMeshIOFuncOFF CGAL::IO::write_OFF(const char*, CGAL::Surface_mesh&)\endlink `CGAL::Polyhedron_3` - \link PkgPolyhedronIOFunc CGAL::write_OFF(const char*, CGAL::Polyhedron_3&)\endlink + \link PkgPolyhedronIOFunc CGAL::IO::write_OFF(const char*, CGAL::Polyhedron_3&)\endlink Any model of `FaceGraph` - \link PkgBGLIoFuncsOFF CGAL::write_OFF(const char*, Graph&)\endlink + \link PkgBGLIoFuncsOFF CGAL::IO::write_OFF(const char*, Graph&)\endlink Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOOFF CGAL::write_OFF(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOOFF CGAL::IO::write_OFF(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOOff CGAL::write_OFF(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOOff CGAL::IO::write_OFF(const char*, PointRange&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsOFF CGAL::write_OFF(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsOFF CGAL::IO::write_OFF(const char*, PointRange&, PolygonRange&)\endlink If the data of a polygon mesh cannot be read in a `FaceGraph` due to bad orientation or -manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()` \endlink, +manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()` \endlink, which offers combinatorial repairing while reading bad inputs. @@ -117,28 +117,28 @@ A precise specification of the format is available Input Polygon Mesh Any model of `MutableFaceGraph` - \link PkgBGLIoFuncsOBJ CGAL::read_OBJ(const char*, Graph&)\endlink + \link PkgBGLIoFuncsOBJ CGAL::IO::read_OBJ(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsOBJ CGAL::read_OBJ(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsOBJ CGAL::IO::read_OBJ(const char*, PointRange&, PolygonRange&)\endlink Output Polygon Mesh Any model of `FaceGraph` - \link PkgBGLIoFuncsOBJ CGAL::write_OBJ(const char*, Graph&)\endlink + \link PkgBGLIoFuncsOBJ CGAL::IO::write_OBJ(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsOBJ CGAL::write_OBJ(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsOBJ CGAL::IO::write_OBJ(const char*, PointRange&, PolygonRange&)\endlink If the data of a polygon mesh cannot be read in a `FaceGraph` due to bad orientation or -manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()` \endlink, +manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()` \endlink, which offers combinatorial repairing while reading bad inputs. @@ -158,23 +158,23 @@ A precise specification of those formats is available Input Polygon Mesh Any model of `MutableFaceGraph` - \link PkgBGLIoFuncsSTL CGAL::read_STL(const char*, Graph&)\endlink + \link PkgBGLIoFuncsSTL CGAL::IO::read_STL(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsSTL CGAL::read_STL(const char*, PointRange&, TriangleRange&)\endlink + \link PkgStreamSupportIoFuncsSTL CGAL::IO::read_STL(const char*, PointRange&, TriangleRange&)\endlink Output Polygon Mesh Any model of `FaceGraph` - \link PkgBGLIoFuncsSTL CGAL::write_STL(const char*, Graph&)\endlink + \link PkgBGLIoFuncsSTL CGAL::IO::write_STL(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsSTL CGAL::write_STL(const char*, PointRange&, TriangleRange&)\endlink + \link PkgStreamSupportIoFuncsSTL CGAL::IO::write_STL(const char*, PointRange&, TriangleRange&)\endlink @@ -182,7 +182,7 @@ Note that the STL file format exports triangular faces as geometric triangles an combinatorial information is lost. If the data of a polygon mesh cannot be read in a `FaceGraph` due to bad orientation or -manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()` \endlink, +manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()` \endlink, which offers combinatorial repairing while reading bad inputs. @@ -202,54 +202,54 @@ A precise specification of those formats is available Input Polygon Mesh `CGAL::Surface_mesh` - \link PkgSurfaceMeshIOFuncPLY CGAL::read_PLY(const char*, CGAL::Surface_mesh&)\endlink + \link PkgSurfaceMeshIOFuncPLY CGAL::IO::read_PLY(const char*, CGAL::Surface_mesh&)\endlink Any model of `MutableFaceGraph` - \link PkgBGLIoFuncsPLY CGAL::read_PLY(const char*, Graph&)\endlink + \link PkgBGLIoFuncsPLY CGAL::IO::read_PLY(const char*, Graph&)\endlink Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOPLY CGAL::read_PLY(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOPLY CGAL::IO::read_PLY(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOPly CGAL::read_PLY(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOPly CGAL::IO::read_PLY(const char*, PointRange&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsPLY CGAL::read_PLY(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsPLY CGAL::IO::read_PLY(const char*, PointRange&, PolygonRange&)\endlink Output Polygon Mesh `CGAL::Surface_mesh` - \link PkgSurfaceMeshIOFuncPLY CGAL::write_PLY(const char*, CGAL::Surface_mesh&)\endlink + \link PkgSurfaceMeshIOFuncPLY CGAL::IO::write_PLY(const char*, CGAL::Surface_mesh&)\endlink Any model of `FaceGraph` - \link PkgBGLIoFuncsPLY CGAL::write_PLY(const char*, Graph&)\endlink + \link PkgBGLIoFuncsPLY CGAL::IO::write_PLY(const char*, Graph&)\endlink Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOPLY CGAL::write_PLY(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOPLY CGAL::IO::write_PLY(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOPly CGAL::write_PLY(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOPly CGAL::IO::write_PLY(const char*, PointRange&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsPLY CGAL::write_PLY(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsPLY CGAL::IO::write_PLY(const char*, PointRange&, PolygonRange&)\endlink If the data of a polygon mesh cannot be read in a `FaceGraph` due to bad orientation or -manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()` \endlink, +manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()` \endlink, which offers combinatorial repairing while reading bad inputs. @@ -270,21 +270,21 @@ A precise specification of those formats is available Input Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOLAS CGAL::read_LAS(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOLAS CGAL::IO::read_LAS(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOLas CGAL::read_LAS(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOLas CGAL::IO::read_LAS(const char*, PointRange&)\endlink Output Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOLAS CGAL::write_LAS(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOLAS CGAL::IO::write_LAS(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOLas CGAL::write_LAS(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOLas CGAL::IO::write_LAS(const char*, PointRange&)\endlink @@ -303,21 +303,21 @@ of its coordinates and other properties. Only coordinates and normals are curren Input Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOXYZ CGAL::read_XYZ(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOXYZ CGAL::IO::read_XYZ(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOXyz CGAL::read_XYZ(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOXyz CGAL::IO::read_XYZ(const char*, PointRange&)\endlink Output Point Set `CGAL::Point_set_3` - \link PkgPointSet3IOXYZ CGAL::write_XYZ(const char*, CGAL::Point_set_3&)\endlink + \link PkgPointSet3IOXYZ CGAL::IO::write_XYZ(const char*, CGAL::Point_set_3&)\endlink Any point range - \link PkgPointSetProcessing3IOXyz CGAL::write_XYZ(const char*, PointRange&)\endlink + \link PkgPointSetProcessing3IOXyz CGAL::IO::write_XYZ(const char*, PointRange&)\endlink @@ -337,28 +337,28 @@ A precise specification of the format is available Input Polygon Mesh Any model of `MutableFaceGraph` - \link PkgBGLIoFuncsGOCAD CGAL::read_GOCAD(const char*, Graph&)\endlink + \link PkgBGLIoFuncsGOCAD CGAL::IO::read_GOCAD(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsGOCAD CGAL::read_GOCAD(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsGOCAD CGAL::IO::read_GOCAD(const char*, PointRange&, PolygonRange&)\endlink Output Polygon Mesh Any model of `FaceGraph` - \link PkgBGLIoFuncsGOCAD CGAL::write_GOCAD(const char*, Graph&)\endlink + \link PkgBGLIoFuncsGOCAD CGAL::IO::write_GOCAD(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsGOCAD CGAL::write_GOCAD(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsGOCAD CGAL::IO::write_GOCAD(const char*, PointRange&, PolygonRange&)\endlink If the data of a polygon mesh cannot be read in a `FaceGraph` due to bad orientation or -manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()` \endlink, +manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()` \endlink, which offers combinatorial repairing while reading bad inputs. @@ -381,28 +381,28 @@ note that only versions `1.x` are currently supported in \cgal. Input Polygon Mesh `CGAL::Surface_mesh` - \link PkgSurfaceMeshIOFunc3MF CGAL::read_3MF(const char*, Surface_meshRange&)\endlink + \link PkgSurfaceMeshIOFunc3MF CGAL::IO::read_3MF(const char*, Surface_meshRange&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncs3MF CGAL::read_3MF(const char*, PointRanges&, PolygonRanges&)\endlink + \link PkgStreamSupportIoFuncs3MF CGAL::IO::read_3MF(const char*, PointRanges&, PolygonRanges&)\endlink Output Polygon Mesh Any model of `FaceGraph` - \link PkgBGLIoFuncs3MF CGAL::write_3MF(const char*, GraphRange&)\endlink + \link PkgBGLIoFuncs3MF CGAL::IO::write_3MF(const char*, GraphRange&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncs3MF CGAL::write_3MF(const char*, PointRanges&, PolygonRanges&)\endlink + \link PkgStreamSupportIoFuncs3MF CGAL::IO::write_3MF(const char*, PointRanges&, PolygonRanges&)\endlink If the data of a polygon mesh cannot be read in a `FaceGraph` due to bad orientation or -manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()` \endlink, +manifoldness issues, consider using \link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()` \endlink, which offers combinatorial repairing while reading bad inputs. @@ -422,7 +422,7 @@ A precise specification of the format is available Output Polygon Mesh Any model of `FaceGraph` - \link PkgBGLIoFuncsWRL CGAL::write_WRL(const char*, Graph&)\endlink + \link PkgBGLIoFuncsWRL CGAL::IO::write_WRL(const char*, Graph&)\endlink @@ -451,30 +451,30 @@ A precise specification of those formats is available at Input Polygon Mesh Any model of `MutableFaceGraph` - \link PkgBGLIoFuncsVTP CGAL::read_VTP(const char*, Graph&)\endlink + \link PkgBGLIoFuncsVTP CGAL::IO::read_VTP(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsVTP CGAL::read_VTP(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsVTP CGAL::IO::read_VTP(const char*, PointRange&, PolygonRange&)\endlink Output Polygon Mesh Any model of `FaceGraph` - \link PkgBGLIoFuncsVTP CGAL::write_VTP(const char*, Graph&)\endlink + \link PkgBGLIoFuncsVTP CGAL::IO::write_VTP(const char*, Graph&)\endlink Polygon Soup Any point + polygon range - \link PkgStreamSupportIoFuncsVTP CGAL::write_VTP(const char*, PointRange&, PolygonRange&)\endlink + \link PkgStreamSupportIoFuncsVTP CGAL::IO::write_VTP(const char*, PointRange&, PolygonRange&)\endlink The following \cgal data structures can be exported into the `.VTU` file format: -- `CGAL::Mesh_complex_3_in_triangulation_3`, using \link PkgMesh3IOFunctions `CGAL::output_to_vtu()` \endlink -- `CGAL::Constrained_Delaunay_triangulation_2`, using the function \link PkgMesh2IO `CGAL::write_vtu()` \endlink +- `CGAL::Mesh_complex_3_in_triangulation_3`, using \link PkgMesh3IOFunctions `CGAL::IO::output_to_vtu()` \endlink +- `CGAL::Constrained_Delaunay_triangulation_2`, using the function \link PkgMesh2IO `CGAL::IO::write_VTU()` \endlink \section IOStreamAvizo Avizo File Format @@ -483,7 +483,7 @@ The AmiraMesh format, using file extension `.am`, is used by the Avizo software to read 3D geometry. A single \cgal data structure, `CGAL::Mesh_complex_3_in_triangulation_3`, can be exported into `.am` files. -This can be done using the function `CGAL::output_to_avizo()`. +This can be done using the function `CGAL::IO::output_to_avizo()`. A precise specification of the format is available in this guide. @@ -497,7 +497,7 @@ A precise specification of the format is available Ascii mode. \code{.cpp} IO::Mode set_mode(std::ios& s, IO::Mode m); -IO::Mode set_ascii_mode(std::ios& s); -IO::Mode set_binary_mode(std::ios& s); -IO::Mode set_pretty_mode(std::ios& s); +IO::Mode IO::set_ascii_mode(std::ios& s); +IO::Mode IO::set_binary_mode(std::ios& s); +IO::Mode IO::set_pretty_mode(std::ios& s); \endcode The following functions enable testing whether a stream is in a certain mode: @@ -120,11 +120,11 @@ main() Point p, q; Segment s; - CGAL::set_ascii_mode(std::cin); + CGAL::IO::set_ascii_mode(std::cin); std::cin >> p >> q; std::ifstream f("data.txt"); - CGAL::set_binary_mode(f); + CGAL::IO::set_binary_mode(f); f >> s >> p; return 1; @@ -161,11 +161,11 @@ int main() Point p(0,1), q(2,2); Segment s(p,q); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); std::cout << p << std::endl << q << std::endl; std::ofstream f("data.txt"); - CGAL::set_binary_mode(f); + CGAL::IO::set_binary_mode(f); f << s << p ; return 1; @@ -181,12 +181,12 @@ For types with a `Output_rep` specialization, the respective output routine of ` will be called by `oformat()`. Otherwise, the stream output operator will be called. \code{.cpp} -std::cout << CGAL::oformat( myobject ); +std::cout << CGAL::IO::oformat( myobject ); \endcode Optionally, you can provide a second template parameter `F` as a formatting tag: \code{.cpp} -std::cout << CGAL::oformat( myobject, My_formatting_tag() ); +std::cout << CGAL::IO::oformat( myobject, My_formatting_tag() ); \endcode For a list of formatting tags supported by the type `T`, please @@ -448,7 +448,7 @@ See the reference manual of each data structure for more information. The functions above require the input to represent a 2-manifold surface (possibly with boundaries). If this is not the case, the package \ref PkgPolygonMeshProcessing offers the function -\link PMP_IO_grp `CGAL::Polygon_mesh_processing::read_polygon_mesh()` \endlink +\link PMP_IO_grp `CGAL::Polygon_mesh_processing::IO::read_polygon_mesh()` \endlink which can perform some combinatorial repairing to ensure the input data is a 2-manifold. \subsection IOstream2DGeo Simple 2D Geometry IO diff --git a/Stream_support/doc/Stream_support/PackageDescription.txt b/Stream_support/doc/Stream_support/PackageDescription.txt index ce937e817f1..cb40fcd8607 100644 --- a/Stream_support/doc/Stream_support/PackageDescription.txt +++ b/Stream_support/doc/Stream_support/PackageDescription.txt @@ -67,7 +67,7 @@ the printing mode. - \link PkgStreamSupportEnumRef `CGAL::IO::Mode` \endlink \cgalCRPSection{Classes} -- `CGAL::Color` +- `CGAL::IO::Color` - `CGAL::Istream_iterator` - `CGAL::Ostream_iterator` - `CGAL::Verbose_ostream` @@ -75,22 +75,22 @@ the printing mode. - `CGAL::Output_rep` \cgalCRPSection{Functions} -- `CGAL::get_mode()` -- `CGAL::is_ascii()` -- `CGAL::is_binary()` -- `CGAL::is_pretty()` -- `CGAL::set_mode()` -- `CGAL::set_ascii_mode()` -- `CGAL::set_binary_mode()` -- `CGAL::set_pretty_mode()` +- `CGAL::IO::get_mode()` +- `CGAL::IO::is_ascii()` +- `CGAL::IO::is_binary()` +- `CGAL::IO::is_pretty()` +- `CGAL::IO::set_mode()` +- `CGAL::IO::set_ascii_mode()` +- `CGAL::IO::set_binary_mode()` +- `CGAL::IO::set_pretty_mode()` - \link IOstreamOperators `CGAL::operator>>()` \endlink - \link IOstreamOperators `CGAL::operator<<()` \endlink -- `CGAL::iformat()` -- `CGAL::oformat()` +- `CGAL::IO::iformat()` +- `CGAL::IO::oformat()` \cgalCRPSection{I/O Functions} -- `CGAL::read_polygon_soup()` -- `CGAL::write_polygon_soup()` +- `CGAL::IO::read_polygon_soup()` +- `CGAL::IO::write_polygon_soup()` - \link PkgStreamSupportIoFuncsSTL I/O for STL files \endlink - \link PkgStreamSupportIoFuncsPLY I/O for PLY files \endlink - \link PkgStreamSupportIoFuncsOBJ I/O for OBJ files \endlink diff --git a/Stream_support/examples/Stream_support/Linestring_WKT.cpp b/Stream_support/examples/Stream_support/Linestring_WKT.cpp index 6988a1d0ad7..597f871353b 100644 --- a/Stream_support/examples/Stream_support/Linestring_WKT.cpp +++ b/Stream_support/examples/Stream_support/Linestring_WKT.cpp @@ -23,7 +23,7 @@ int main(int argc, char* argv[]) LineString ls; { std::ifstream is((argc>1)?argv[1]:"data/linestring.wkt"); - CGAL::read_linestring_WKT(is, ls); + CGAL::IO::read_linestring_WKT(is, ls); is.close(); } for(Point p : ls) @@ -32,7 +32,7 @@ int main(int argc, char* argv[]) MultiLineString mls; { std::ifstream is((argc>2)?argv[2]:"data/multilinestring.wkt"); - CGAL::read_multi_linestring_WKT(is, mls); + CGAL::IO::read_multi_linestring_WKT(is, mls); is.close(); } for(LineString l : mls) diff --git a/Stream_support/examples/Stream_support/Point_WKT.cpp b/Stream_support/examples/Stream_support/Point_WKT.cpp index ce6020f4e23..768b3d20099 100644 --- a/Stream_support/examples/Stream_support/Point_WKT.cpp +++ b/Stream_support/examples/Stream_support/Point_WKT.cpp @@ -21,7 +21,7 @@ int main(int argc, char* argv[]) std::ifstream is((argc>1)?argv[1]:"data/multipoint.wkt"); MultiPoint mp; - CGAL::read_multi_point_WKT(is, mp); + CGAL::IO::read_multi_point_WKT(is, mp); for(const Point& p : mp) { std::cout<2)?argv[2]:"data/multipolygon.wkt"); MultiPolygon mp; - CGAL::read_multi_polygon_WKT(is, mp); + CGAL::IO::read_multi_polygon_WKT(is, mp); for(Polygon p : mp) std::cout< colors(all_triangles[id].size()); + std::vector colors(all_triangles[id].size()); IO::write_mesh_to_model(all_points[id], all_triangles[id], colors, name, &pMeshObject, pModel); } @@ -502,13 +504,15 @@ bool write_3MF(const std::string& fname, template bool write_3MF(const std::string& fname, const PointRange& points, const TriangleRange& triangles, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_triangle_soup_to_3mf(fname, points, triangles, "anonymous"); } /// \endcond +} // namespace IO + } // namespace CGAL #endif // defined(CGAL_LINKED_WITH_3MF) || defined(DOXYGEN_RUNNING) diff --git a/Stream_support/include/CGAL/IO/3MF/read_3mf.h b/Stream_support/include/CGAL/IO/3MF/read_3mf.h index 6c81f124380..ca4d64af3d0 100644 --- a/Stream_support/include/CGAL/IO/3MF/read_3mf.h +++ b/Stream_support/include/CGAL/IO/3MF/read_3mf.h @@ -128,7 +128,7 @@ bool extract_soups (NMR::PLib3MFModelMeshObject *pMeshObject, NMR::MODELMESH_TRIANGLECOLOR_SRGB pColor; NMR::lib3mf_propertyhandler_getcolor(pPropertyHandler, pid, &pColor); NMR::MODELMESHCOLOR_SRGB mColor = pColor.m_Colors[0]; - colors[pid]=CGAL::Color(mColor.m_Red, mColor.m_Green, + colors[pid]=CGAL::IO::Color(mColor.m_Red, mColor.m_Green, mColor.m_Blue, mColor.m_Alpha); } diff --git a/Stream_support/include/CGAL/IO/Color.h b/Stream_support/include/CGAL/IO/Color.h index 10754d9979a..12bdd320e28 100644 --- a/Stream_support/include/CGAL/IO/Color.h +++ b/Stream_support/include/CGAL/IO/Color.h @@ -27,6 +27,7 @@ namespace CGAL { +namespace IO { /*! \ingroup PkgStreamSupportRef @@ -350,6 +351,22 @@ inline Color white() { return Color(255,255,255); } */ inline Color yellow() { return Color(255,255,0); } +} //namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::Color; +using IO::black; +using IO::blue; +using IO::deep_blue; +using IO::gray; +using IO::green; +using IO::orange; +using IO::purple; +using IO::red; +using IO::violet; +using IO::white; +using IO::yellow; +#endif } //namespace CGAL diff --git a/Stream_support/include/CGAL/IO/GOCAD.h b/Stream_support/include/CGAL/IO/GOCAD.h index 104a3c6cc54..bf5af235cb3 100644 --- a/Stream_support/include/CGAL/IO/GOCAD.h +++ b/Stream_support/include/CGAL/IO/GOCAD.h @@ -32,6 +32,8 @@ namespace CGAL { +namespace IO { + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Read @@ -192,7 +194,7 @@ bool read_GOCAD(std::istream& is, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -204,7 +206,7 @@ bool read_GOCAD(std::istream& is, template bool read_GOCAD(std::istream& is, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { std::pair dummy; return read_GOCAD(is, dummy, points, polygons, parameters::all_default()); @@ -249,12 +251,12 @@ bool read_GOCAD(const std::string& fname, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); std::pair dummy; return read_GOCAD(is, dummy, points, polygons, np); } @@ -263,7 +265,7 @@ bool read_GOCAD(const std::string& fname, template bool read_GOCAD(const std::string& fname, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_GOCAD(fname, points, polygons, parameters::all_default()); } @@ -274,7 +276,6 @@ bool read_GOCAD(const std::string& fname, PointRange& points, PolygonRange& poly //////////////////////////////////////////////////////////////////////////////////////////////////// // Write -namespace IO { namespace internal { template >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { - return IO::internal::write_GOCAD(os, "anonymous", points, polygons, np); + return internal::write_GOCAD(os, "anonymous", points, polygons, np); } /// \cond SKIP_IN_MANUAL template bool write_GOCAD(std::ostream& os, const PointRange& points, const PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { - return IO::internal::write_GOCAD(os, "anonymous", points, polygons, parameters::all_default()); + return internal::write_GOCAD(os, "anonymous", points, polygons, parameters::all_default()); } /// \endcond @@ -423,13 +423,13 @@ bool write_GOCAD(const std::string& fname, const PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); - return IO::internal::write_GOCAD(os, fname.c_str(), points, polygons, np); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); + return internal::write_GOCAD(os, fname.c_str(), points, polygons, np); } /// \cond SKIP_IN_MANUAL @@ -437,13 +437,15 @@ bool write_GOCAD(const std::string& fname, template bool write_GOCAD(const std::string& fname, const PointRange& points, const PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_GOCAD(fname, points, polygons, parameters::all_default()); } /// \endcond +} // namespace IO + } // namespace CGAL #endif // CGAL_IO_GOCAD_H diff --git a/Stream_support/include/CGAL/IO/OBJ.h b/Stream_support/include/CGAL/IO/OBJ.h index ea3abc8075f..c886fd69c9a 100644 --- a/Stream_support/include/CGAL/IO/OBJ.h +++ b/Stream_support/include/CGAL/IO/OBJ.h @@ -181,7 +181,6 @@ bool read_OBJ(std::istream& is, } } // namespace internal -} // namespace IO /// \ingroup PkgStreamSupportIoFuncsOBJ /// @@ -218,22 +217,22 @@ bool read_OBJ(std::istream& is, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { const bool verbose = parameters::choose_parameter(parameters::get_parameter(np, internal_np::verbose), false); - return IO::internal::read_OBJ(is, points, polygons, - CGAL::Emptyset_iterator(), CGAL::Emptyset_iterator(), - verbose); + return internal::read_OBJ(is, points, polygons, + CGAL::Emptyset_iterator(), CGAL::Emptyset_iterator(), + verbose); } /// \cond SKIP_IN_MANUAL template bool read_OBJ(std::istream& is, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_OBJ(is, points, polygons, parameters::all_default()); } @@ -274,12 +273,12 @@ bool read_OBJ(const std::string& fname, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); return read_OBJ(is, points, polygons, np); } @@ -287,7 +286,7 @@ bool read_OBJ(const std::string& fname, template bool read_OBJ(const std::string& fname, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_OBJ(fname, points, polygons, parameters::all_default()); } @@ -333,7 +332,7 @@ bool write_OBJ(std::ostream& os, const PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -346,7 +345,7 @@ bool write_OBJ(std::ostream& os, template bool write_OBJ(std::ostream& os, const PointRange& points, const PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_OBJ(os, points, polygons, parameters::all_default()); } @@ -388,12 +387,12 @@ bool write_OBJ(const std::string& fname, const PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_OBJ(os, points, polygons, np); } @@ -402,13 +401,15 @@ bool write_OBJ(const std::string& fname, template bool write_OBJ(const std::string& fname, const PointRange& points, const PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_OBJ(fname, points, polygons, parameters::all_default()); } /// \endcond +} // namespace IO + } // namespace CGAL #endif // CGAL_IO_OBJ_H diff --git a/Stream_support/include/CGAL/IO/OBJ/File_writer_wavefront.h b/Stream_support/include/CGAL/IO/OBJ/File_writer_wavefront.h index 4736a201753..941fc1d9eae 100644 --- a/Stream_support/include/CGAL/IO/OBJ/File_writer_wavefront.h +++ b/Stream_support/include/CGAL/IO/OBJ/File_writer_wavefront.h @@ -56,11 +56,11 @@ public: void write_footer() const { out() << "\n# End of Wavefront obj format #" << std::endl; } void write_vertex(const double x, const double y, const double z) { - out() << "v " << oformat(x) << ' ' << oformat(y) << ' ' << oformat(z) << '\n'; + out() << "v " << IO::oformat(x) << ' ' << IO::oformat(y) << ' ' << IO::oformat(z) << '\n'; } void write_vertex_normal(const double x, const double y, const double z) { - out() << "vn " << oformat(x) << ' ' << oformat(y) << ' ' << oformat(z) << '\n'; + out() << "vn " << IO::oformat(x) << ' ' << IO::oformat(y) << ' ' << IO::oformat(z) << '\n'; } void write_vertex_color(const double, const double, const double) { } diff --git a/Stream_support/include/CGAL/IO/OFF.h b/Stream_support/include/CGAL/IO/OFF.h index 645ecf6e15f..ceb9d7db40b 100644 --- a/Stream_support/include/CGAL/IO/OFF.h +++ b/Stream_support/include/CGAL/IO/OFF.h @@ -72,7 +72,7 @@ bool read_OFF(std::istream& is, typedef typename Kernel::Point_2 Texture; typedef typename Kernel::Vector_3 Normal; typedef typename Kernel::FT FT; - typedef CGAL::Color Color; + typedef CGAL::IO::Color Color; if(!is.good()){ @@ -92,7 +92,7 @@ bool read_OFF(std::istream& is, double x(0), y(0), z(0), w(0); scanner.scan_vertex(x, y, z, w); CGAL_assertion(w != 0); - IO::internal::fill_point(x, y, z, w, points[i]); + internal::fill_point(x, y, z, w, points[i]); if(scanner.has_normals()) { @@ -153,7 +153,6 @@ bool read_OFF(std::istream& is, } } // namespace internal -} // namespace IO /*! * \ingroup PkgStreamSupportIoFuncsOFF @@ -190,30 +189,30 @@ bool read_OFF(std::istream& is, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { using parameters::choose_parameter; using parameters::get_parameter; - return IO::internal::read_OFF(is, points, polygons, - choose_parameter(get_parameter(np, internal_np::vertex_normal_output_iterator), - CGAL::Emptyset_iterator()), - choose_parameter(get_parameter(np, internal_np::vertex_color_output_iterator), - CGAL::Emptyset_iterator()), - choose_parameter(get_parameter(np, internal_np::vertex_texture_output_iterator), - CGAL::Emptyset_iterator()), - choose_parameter(get_parameter(np, internal_np::face_color_output_iterator), - CGAL::Emptyset_iterator()), - choose_parameter(get_parameter(np, internal_np::verbose), true)); + return internal::read_OFF(is, points, polygons, + choose_parameter(get_parameter(np, internal_np::vertex_normal_output_iterator), + CGAL::Emptyset_iterator()), + choose_parameter(get_parameter(np, internal_np::vertex_color_output_iterator), + CGAL::Emptyset_iterator()), + choose_parameter(get_parameter(np, internal_np::vertex_texture_output_iterator), + CGAL::Emptyset_iterator()), + choose_parameter(get_parameter(np, internal_np::face_color_output_iterator), + CGAL::Emptyset_iterator()), + choose_parameter(get_parameter(np, internal_np::verbose), true)); } /// \cond SKIP_IN_MANUAL template bool read_OFF(std::istream& is, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_OFF(is, points, polygons, parameters::all_default()); } @@ -254,7 +253,7 @@ bool read_OFF(const std::string& fname, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -266,7 +265,7 @@ bool read_OFF(const std::string& fname, template bool read_OFF(const std::string& fname, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_OFF(fname, points, polygons, parameters::all_default()); } @@ -310,7 +309,7 @@ bool write_OFF(std::ostream& os, const PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -322,7 +321,7 @@ bool write_OFF(std::ostream& os, template bool write_OFF(std::ostream& os, const PointRange& points, const PolygonRange& polygons - , typename boost::enable_if >::type* = nullptr) + , typename boost::enable_if >::type* = nullptr) { return write_OFF(os, points, polygons, parameters::all_default()); } @@ -362,7 +361,7 @@ bool write_OFF(const std::string& fname, const PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -375,13 +374,15 @@ bool write_OFF(const std::string& fname, template bool write_OFF(const std::string& fname, const PointRange& points, const PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_OFF(fname, points, polygons, parameters::all_default()); } /// \endcond +} // namespace IO + } // namespace CGAL #endif // CGAL_IO_OFF_H diff --git a/Stream_support/include/CGAL/IO/OFF/File_scanner_OFF.h b/Stream_support/include/CGAL/IO/OFF/File_scanner_OFF.h index 89bb14656ef..90c1ed4305f 100644 --- a/Stream_support/include/CGAL/IO/OFF/File_scanner_OFF.h +++ b/Stream_support/include/CGAL/IO/OFF/File_scanner_OFF.h @@ -90,7 +90,7 @@ public: std::istringstream issline(line); entries.clear(); double d; - while(issline >> iformat(d)){ + while(issline >> IO::iformat(d)){ entries.push_back(d); } @@ -372,163 +372,163 @@ public: z = static_cast(dz); } - static const Color& get_indexed_color(int id) + static const IO::Color& get_indexed_color(int id) { - static const Color color[149] = { - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(178, 38, 25, 191), - Color(51, 51, 204, 191), - Color(229, 153, 5, 191), - Color(25, 76, 204, 191), - Color(25, 178, 51, 191), - Color(204, 204, 102, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 51, 191), - Color(51, 229, 0, 191), - Color(0, 51, 229, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(204, 102, 0, 191), - Color(0, 102, 204, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(204, 0, 102, 191), - Color(178, 127, 51, 191), - Color(178, 127, 51, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 0, 191), - Color(0, 229, 0, 191), - Color(0, 0, 229, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(102, 204, 0, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 0, 191), - Color(0, 229, 0, 191), - Color(0, 0, 229, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(102, 204, 0, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 0, 191), - Color(0, 229, 0, 191), - Color(0, 0, 229, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(102, 204, 0, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(255, 255, 255, 191), - Color(12, 76, 25, 191), - Color(178, 2, 25, 191), - Color(51, 12, 153, 191), - Color(229, 229, 5, 191), - Color(0, 51, 102, 191), - Color(25, 102, 102, 191), - Color(204, 204, 204, 191), - Color(178, 178, 0, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 0, 191), - Color(229, 0, 0, 191), - Color(0, 229, 0, 191), - Color(0, 229, 0, 191), - Color(0, 0, 229, 191), - Color(0, 0, 229, 191), - Color(191, 191, 191, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(204, 102, 0, 191), - Color(0, 102, 204, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(204, 0, 102, 191), - Color(178, 127, 51, 191), - Color(178, 127, 51, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 0, 191), - Color(0, 229, 0, 191), - Color(0, 0, 229, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(102, 204, 0, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 0, 191), - Color(0, 229, 0, 191), - Color(0, 0, 229, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(102, 204, 0, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(178, 178, 0, 191), - Color(178, 0, 178, 191), - Color(0, 178, 178, 191), - Color(229, 0, 0, 191), - Color(0, 229, 0, 191), - Color(0, 0, 229, 191), - Color(191, 191, 191, 191), - Color(204, 102, 0, 191), - Color(102, 204, 0, 191), - Color(0, 102, 204, 191), - Color(0, 204, 102, 191), - Color(102, 0, 204, 191), - Color(204, 0, 102, 191), - Color(120, 120, 120, 120) }; + static const IO::Color color[149] = { + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(178, 38, 25, 191), + IO::Color(51, 51, 204, 191), + IO::Color(229, 153, 5, 191), + IO::Color(25, 76, 204, 191), + IO::Color(25, 178, 51, 191), + IO::Color(204, 204, 102, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 51, 191), + IO::Color(51, 229, 0, 191), + IO::Color(0, 51, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(204, 102, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(204, 0, 102, 191), + IO::Color(178, 127, 51, 191), + IO::Color(178, 127, 51, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 0, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(102, 204, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 0, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(102, 204, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 0, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(102, 204, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(255, 255, 255, 191), + IO::Color(12, 76, 25, 191), + IO::Color(178, 2, 25, 191), + IO::Color(51, 12, 153, 191), + IO::Color(229, 229, 5, 191), + IO::Color(0, 51, 102, 191), + IO::Color(25, 102, 102, 191), + IO::Color(204, 204, 204, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 0, 191), + IO::Color(229, 0, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 0, 229, 191), + IO::Color(0, 0, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(204, 102, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(204, 0, 102, 191), + IO::Color(178, 127, 51, 191), + IO::Color(178, 127, 51, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 0, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(102, 204, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 0, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(102, 204, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(178, 178, 0, 191), + IO::Color(178, 0, 178, 191), + IO::Color(0, 178, 178, 191), + IO::Color(229, 0, 0, 191), + IO::Color(0, 229, 0, 191), + IO::Color(0, 0, 229, 191), + IO::Color(191, 191, 191, 191), + IO::Color(204, 102, 0, 191), + IO::Color(102, 204, 0, 191), + IO::Color(0, 102, 204, 191), + IO::Color(0, 204, 102, 191), + IO::Color(102, 0, 204, 191), + IO::Color(204, 0, 102, 191), + IO::Color(120, 120, 120, 120) }; if(id > 148) id =148; return color[id]; } - static CGAL::Color get_color_from_line(std::istream &is) + static CGAL::IO::Color get_color_from_line(std::istream &is) { std::string color_info; bool is_float = false; @@ -573,7 +573,7 @@ public: if(index == 3) break; } - CGAL::Color color; + CGAL::IO::Color color; //if there were only one number, fetch the color in the color map if(index < 2) { @@ -581,7 +581,7 @@ public: //else create the color with the 3 values; } else{ - color = CGAL::Color(rgb[0], rgb[1], rgb[2]); + color = CGAL::IO::Color(rgb[0], rgb[1], rgb[2]); } std::iostream::pos_type ss_pos = iss.tellg(); if(ss_pos != std::iostream::pos_type(-1)) @@ -607,7 +607,7 @@ public: } else { - CGAL::Color color; + CGAL::IO::Color color; if(color_entries == 1){ color = get_indexed_color(static_cast(entries[first_color_index])); // the index in the color map r = color.red(); @@ -704,7 +704,7 @@ public: std::istringstream issline(line); entries.clear(); double d; - while(issline >> iformat(d)){ + while(issline >> IO::iformat(d)){ entries.push_back(d); } if(entries.empty()) diff --git a/Stream_support/include/CGAL/IO/OFF/File_writer_OFF.h b/Stream_support/include/CGAL/IO/OFF/File_writer_OFF.h index 56edbf80fdf..91860254f47 100644 --- a/Stream_support/include/CGAL/IO/OFF/File_writer_OFF.h +++ b/Stream_support/include/CGAL/IO/OFF/File_writer_OFF.h @@ -73,7 +73,7 @@ public: } else { - out() << '\n' << oformat(x) << ' ' << oformat(y) << ' ' << oformat(z); + out() << '\n' << IO::oformat(x) << ' ' << IO::oformat(y) << ' ' << IO::oformat(z); } } @@ -87,7 +87,7 @@ public: } else { - out() << ' ' << ' ' << oformat(x) << ' ' << oformat(y) << ' ' << oformat(z); + out() << ' ' << ' ' << IO::oformat(x) << ' ' << IO::oformat(y) << ' ' << IO::oformat(z); } } @@ -101,7 +101,7 @@ public: } else { - out() << ' ' << ' ' << oformat(r) << ' ' << oformat(g) << ' ' << oformat(b); + out() << ' ' << ' ' << IO::oformat(r) << ' ' << IO::oformat(g) << ' ' << IO::oformat(b); } } @@ -114,7 +114,7 @@ public: } else { - out() << ' ' << ' ' << oformat(tx) << ' ' << oformat(ty); + out() << ' ' << ' ' << IO::oformat(tx) << ' ' << IO::oformat(ty); } } diff --git a/Stream_support/include/CGAL/IO/OI/File_writer_inventor.h b/Stream_support/include/CGAL/IO/OI/File_writer_inventor.h index 587e4f14800..c10a9b7df9a 100644 --- a/Stream_support/include/CGAL/IO/OI/File_writer_inventor.h +++ b/Stream_support/include/CGAL/IO/OI/File_writer_inventor.h @@ -60,7 +60,7 @@ public: void write_vertex( const double x, const double y, const double z) { - out() << " " << oformat(x) << ' ' << oformat(y) << ' ' << oformat(z) << ',' <<'\n'; + out() << " " << IO::oformat(x) << ' ' << IO::oformat(y) << ' ' << IO::oformat(z) << ',' <<'\n'; } void write_vertex_normal(const double, const double, const double) { } diff --git a/Stream_support/include/CGAL/IO/PLY.h b/Stream_support/include/CGAL/IO/PLY.h index bfcebbf8d7c..6c38859388d 100644 --- a/Stream_support/include/CGAL/IO/PLY.h +++ b/Stream_support/include/CGAL/IO/PLY.h @@ -60,7 +60,7 @@ bool read_PLY(std::istream& is, typename std::enable_if::value>::type* = nullptr) { typedef typename boost::range_value::type Point_3; - typedef CGAL::Color Color_rgb; + typedef CGAL::IO::Color Color_rgb; if(!is.good()) { @@ -69,7 +69,7 @@ bool read_PLY(std::istream& is, return false; } - IO::internal::PLY_reader reader(verbose); + internal::PLY_reader reader(verbose); if(!(reader.init(is))) { @@ -79,7 +79,7 @@ bool read_PLY(std::istream& is, for(std::size_t i=0; iget(is); if(is.fail()) @@ -114,21 +114,21 @@ bool read_PLY(std::istream& is, std::tuple new_vertex; if(has_colors) { - IO::internal::process_properties(element, new_vertex, - make_ply_point_reader(CGAL::make_nth_of_tuple_property_map<0>(new_vertex)), - std::make_pair(CGAL::make_nth_of_tuple_property_map<1>(new_vertex), - PLY_property(rtag.c_str())), - std::make_pair(CGAL::make_nth_of_tuple_property_map<2>(new_vertex), - PLY_property(gtag.c_str())), - std::make_pair(CGAL::make_nth_of_tuple_property_map<3>(new_vertex), - PLY_property(btag.c_str()))); + internal::process_properties(element, new_vertex, + make_ply_point_reader(CGAL::make_nth_of_tuple_property_map<0>(new_vertex)), + std::make_pair(CGAL::make_nth_of_tuple_property_map<1>(new_vertex), + PLY_property(rtag.c_str())), + std::make_pair(CGAL::make_nth_of_tuple_property_map<2>(new_vertex), + PLY_property(gtag.c_str())), + std::make_pair(CGAL::make_nth_of_tuple_property_map<3>(new_vertex), + PLY_property(btag.c_str()))); *vc_out++ = Color_rgb(get<1>(new_vertex), get<2>(new_vertex), get<3>(new_vertex)); } else { - IO::internal::process_properties(element, new_vertex, - make_ply_point_reader(CGAL::make_nth_of_tuple_property_map<0>(new_vertex))); + internal::process_properties(element, new_vertex, + make_ply_point_reader(CGAL::make_nth_of_tuple_property_map<0>(new_vertex))); } points.push_back(get<0>(new_vertex)); @@ -138,19 +138,19 @@ bool read_PLY(std::istream& is, { if(element.has_property >("vertex_indices")) { - IO::internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_indices"); + internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_indices"); } else if(element.has_property >("vertex_indices")) { - IO::internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_indices"); + internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_indices"); } else if(element.has_property >("vertex_index")) { - IO::internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_index"); + internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_index"); } else if(element.has_property >("vertex_index")) { - IO::internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_index"); + internal::read_PLY_faces(is, element, polygons, fc_out, "vertex_index"); } else { @@ -176,7 +176,7 @@ bool read_PLY(std::istream& is, { for(std::size_t k=0; kget(is); if(is.fail()) @@ -185,26 +185,26 @@ bool read_PLY(std::istream& is, if(has_uv) { - IO::internal::process_properties(element, new_hedge, - std::make_pair(CGAL::make_nth_of_tuple_property_map<0>(new_hedge), - PLY_property(stag.c_str())), - std::make_pair(CGAL::make_nth_of_tuple_property_map<1>(new_hedge), - PLY_property(ttag.c_str())), - std::make_pair(CGAL::make_nth_of_tuple_property_map<2>(new_hedge), - PLY_property(utag.c_str())), - std::make_pair(CGAL::make_nth_of_tuple_property_map<3>(new_hedge), - PLY_property(vtag.c_str()))); + internal::process_properties(element, new_hedge, + std::make_pair(CGAL::make_nth_of_tuple_property_map<0>(new_hedge), + PLY_property(stag.c_str())), + std::make_pair(CGAL::make_nth_of_tuple_property_map<1>(new_hedge), + PLY_property(ttag.c_str())), + std::make_pair(CGAL::make_nth_of_tuple_property_map<2>(new_hedge), + PLY_property(utag.c_str())), + std::make_pair(CGAL::make_nth_of_tuple_property_map<3>(new_hedge), + PLY_property(vtag.c_str()))); *hedges_out++ = std::make_pair(get<0>(new_hedge), get<1>(new_hedge)); *huvs_out++ = std::make_pair(get<2>(new_hedge), get<3>(new_hedge)); } else { - IO::internal::process_properties(element, new_hedge, - std::make_pair(CGAL::make_nth_of_tuple_property_map<0>(new_hedge), - PLY_property(stag.c_str())), - std::make_pair(CGAL::make_nth_of_tuple_property_map<1>(new_hedge), - PLY_property(ttag.c_str()))); + internal::process_properties(element, new_hedge, + std::make_pair(CGAL::make_nth_of_tuple_property_map<0>(new_hedge), + PLY_property(stag.c_str())), + std::make_pair(CGAL::make_nth_of_tuple_property_map<1>(new_hedge), + PLY_property(ttag.c_str()))); } } } @@ -214,7 +214,7 @@ bool read_PLY(std::istream& is, { for(std::size_t k=0; kget(is); if(is.fail()) return false; @@ -226,7 +226,6 @@ bool read_PLY(std::istream& is, } } // namespace internal -} // namespace IO /// \cond SKIP_IN_MANUAL @@ -239,14 +238,14 @@ bool read_PLY(std::istream& is, ColorRange& vcolors, HUVRange& huvs, const bool verbose = false, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { - return IO::internal::read_PLY(is, points, polygons, - std::back_inserter(hedges), - std::back_inserter(fcolors), - std::back_inserter(vcolors), - std::back_inserter(huvs), - verbose); + return internal::read_PLY(is, points, polygons, + std::back_inserter(hedges), + std::back_inserter(fcolors), + std::back_inserter(vcolors), + std::back_inserter(huvs), + verbose); } template @@ -260,12 +259,12 @@ bool read_PLY(std::istream& is, std::vector > dummy_pui; std::vector > dummy_pf; - return IO::internal::read_PLY(is, points, polygons, - std::back_inserter(dummy_pui), - std::back_inserter(fcolors), - std::back_inserter(vcolors), - std::back_inserter(dummy_pf), - verbose); + return internal::read_PLY(is, points, polygons, + std::back_inserter(dummy_pui), + std::back_inserter(fcolors), + std::back_inserter(vcolors), + std::back_inserter(dummy_pf), + verbose); } /// \endcond @@ -315,7 +314,7 @@ bool read_PLY(std::istream& is, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -325,20 +324,20 @@ bool read_PLY(std::istream& is, std::vector > dummy_pui; std::vector > dummy_pf; - return IO::internal::read_PLY(is, points, polygons, std::back_inserter(dummy_pui), - choose_parameter(get_parameter(np, internal_np::face_color_output_iterator), - CGAL::Emptyset_iterator()), - choose_parameter(get_parameter(np, internal_np::vertex_color_output_iterator), - CGAL::Emptyset_iterator()), - std::back_inserter(dummy_pf), - choose_parameter(get_parameter(np, internal_np::verbose), true)); + return internal::read_PLY(is, points, polygons, std::back_inserter(dummy_pui), + choose_parameter(get_parameter(np, internal_np::face_color_output_iterator), + CGAL::Emptyset_iterator()), + choose_parameter(get_parameter(np, internal_np::vertex_color_output_iterator), + CGAL::Emptyset_iterator()), + std::back_inserter(dummy_pf), + choose_parameter(get_parameter(np, internal_np::verbose), true)); } /// \cond SKIP_IN_MANUAL template bool read_PLY(std::istream& is, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_PLY(is, points, polygons, parameters::all_default()); } @@ -386,7 +385,7 @@ bool read_PLY(const std::string& fname, PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -394,13 +393,13 @@ bool read_PLY(const std::string& fname, if(binary) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, CGAL::IO::BINARY); return read_PLY(is, points, polygons, np); } else { std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); return read_PLY(is, points, polygons, np); } } @@ -409,7 +408,7 @@ bool read_PLY(const std::string& fname, template bool read_PLY(const std::string& fname, PointRange& points, PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_PLY(fname, points, polygons, parameters::all_default()); } @@ -458,7 +457,7 @@ bool write_PLY(std::ostream& out, const PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -472,27 +471,27 @@ bool write_PLY(std::ostream& out, // Write header out << "ply" << std::endl - << ((get_mode(out) == IO::BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl + << ((get_mode(out) == BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl << "comment Generated by the CGAL library" << std::endl << "element vertex " << points.size() << std::endl; - IO::internal::output_property_header(out, make_ply_point_writer(CGAL::Identity_property_map())); + internal::output_property_header(out, make_ply_point_writer(CGAL::Identity_property_map())); out << "element face " << polygons.size() << std::endl; - IO::internal::output_property_header(out, std::make_pair(CGAL::Identity_property_map(), - PLY_property >("vertex_indices"))); + internal::output_property_header(out, std::make_pair(CGAL::Identity_property_map(), + PLY_property >("vertex_indices"))); out << "end_header" << std::endl; for(std::size_t i=0; i())); + internal::output_properties(out, points.begin() + i, + make_ply_point_writer(CGAL::Identity_property_map())); for(std::size_t i=0; i(), - PLY_property >("vertex_indices"))); + internal::output_properties(out, polygons.begin() + i, + std::make_pair(CGAL::Identity_property_map(), + PLY_property >("vertex_indices"))); return out.good(); } @@ -501,7 +500,7 @@ bool write_PLY(std::ostream& out, template bool write_PLY(std::ostream& out, const PointRange& points, const PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_PLY(out, points, polygons, parameters::all_default()); } @@ -548,7 +547,7 @@ bool write_PLY(const std::string& fname, const PolygonRange& polygons, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -556,13 +555,13 @@ bool write_PLY(const std::string& fname, if(binary) { std::ofstream os(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_PLY(os, points, polygons, np); } else { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_PLY(os, points, polygons, np); } } @@ -571,13 +570,15 @@ bool write_PLY(const std::string& fname, template bool write_PLY(const std::string& fname, const PointRange& points, const PolygonRange& polygons, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_PLY(fname, points, polygons, parameters::all_default()); } /// \endcond +} // namespace IO + } // namespace CGAL #endif // CGAL_IO_PLY_H diff --git a/Stream_support/include/CGAL/IO/PLY/PLY_reader.h b/Stream_support/include/CGAL/IO/PLY/PLY_reader.h index 62330c24e60..98c2fc0268d 100644 --- a/Stream_support/include/CGAL/IO/PLY/PLY_reader.h +++ b/Stream_support/include/CGAL/IO/PLY/PLY_reader.h @@ -46,6 +46,8 @@ namespace CGAL { +namespace IO { + /// \cond SKIP_IN_MANUAL // PLY types: @@ -135,7 +137,6 @@ make_ply_normal_writer(VectorMap normal_map) PLY_property::type>("nz")); } -namespace IO { namespace internal { class PLY_read_number @@ -194,7 +195,7 @@ public: void read_ascii(std::istream& stream, float& t) const { - if(!(stream >> iformat(t))) + if(!(stream >> IO::iformat(t))) stream.clear(std::ios::badbit); } @@ -707,7 +708,7 @@ bool read_PLY_faces(std::istream& in, CGAL::is_iterator::value >::type* = nullptr) { - typedef CGAL::Color Color_rgb; + typedef CGAL::IO::Color Color_rgb; bool has_colors = false; std::string rtag = "r", gtag = "g", btag = "b"; @@ -784,6 +785,14 @@ bool read_PLY_faces(std::istream& in, } // namespace PLY } // namespace internal +#ifndef CGAL_NO_DEPREACTED_CODE +using IO::PLY_property; +using IO::make_ply_normal_reader; +using IO::make_ply_normal_writer; +using IO::make_ply_point_reader; +using IO::make_ply_point_writer; +#endif + /// \endcond } // namespace CGAL diff --git a/Stream_support/include/CGAL/IO/PLY/PLY_writer.h b/Stream_support/include/CGAL/IO/PLY/PLY_writer.h index 901fdd63044..225aa740a3f 100644 --- a/Stream_support/include/CGAL/IO/PLY/PLY_writer.h +++ b/Stream_support/include/CGAL/IO/PLY/PLY_writer.h @@ -116,7 +116,7 @@ template void property_write(std::ostream& stream, ForwardIterator it, PropertyMap map) { - stream << CGAL::oformat(get(map, *it)); + stream << CGAL::IO::oformat(get(map, *it)); } template @@ -132,7 +132,7 @@ void simple_property_write(std::ostream& stream, ForwardIterator it, std::pair > map) { - if(CGAL::get_mode(stream) == CGAL::IO::ASCII) + if(CGAL::IO::get_mode(stream) == CGAL::IO::ASCII) stream << no_char_character(get(map.first, *it)); else { @@ -150,7 +150,7 @@ void simple_property_write(std::ostream& stream, { const typename PropertyMap::reference value = get(map.first, *it); - if(CGAL::get_mode(stream) == CGAL::IO::ASCII) + if(CGAL::IO::get_mode(stream) == CGAL::IO::ASCII) { stream << value.size(); for(std::size_t i = 0; i < value.size(); ++ i) @@ -176,7 +176,7 @@ void output_properties(std::ostream& stream, std::tuple... >&& current) { property_write(stream, it, std::get<0>(current)); - if(get_mode(stream) == CGAL::IO::ASCII) + if(CGAL::IO::get_mode(stream) == CGAL::IO::ASCII) stream << std::endl; } diff --git a/Stream_support/include/CGAL/IO/STL.h b/Stream_support/include/CGAL/IO/STL.h index 009e90b1ad4..52507655d33 100644 --- a/Stream_support/include/CGAL/IO/STL.h +++ b/Stream_support/include/CGAL/IO/STL.h @@ -36,6 +36,8 @@ namespace CGAL { +namespace IO { + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Read @@ -77,7 +79,7 @@ bool read_STL(std::istream& is, TriangleRange& facets, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -114,7 +116,7 @@ bool read_STL(std::istream& is, { if(binary) return false; - return IO::internal::parse_ASCII_STL(is, points, facets, verbose); + return internal::parse_ASCII_STL(is, points, facets, verbose); } // We are within the first 80 characters, both ASCII and binary are possible @@ -141,7 +143,7 @@ bool read_STL(std::istream& is, // If the first word is not 'solid', the file must be binary if(s != "solid" || (word[5] !='\n' && word[5] !='\r' && word[5] != ' ')) { - if(IO::internal::parse_binary_STL(is, points, facets, verbose)) + if(internal::parse_binary_STL(is, points, facets, verbose)) { return true; } @@ -151,14 +153,14 @@ bool read_STL(std::istream& is, // The file does not start with 'solid' anyway, so it's fine to reset it. is.clear(); is.seekg(0, std::ios::beg); - return IO::internal::parse_ASCII_STL(is, points, facets, verbose); + return internal::parse_ASCII_STL(is, points, facets, verbose); } } // Now, we have found the keyword "solid" which is supposed to indicate that the file is ASCII is.clear(); is.seekg(0, std::ios::beg); // the parser needs to read all "solid" to work correctly. - if(IO::internal::parse_ASCII_STL(is, points, facets, verbose)) + if(internal::parse_ASCII_STL(is, points, facets, verbose)) { // correctly read the input as an ASCII file return true; @@ -166,7 +168,7 @@ bool read_STL(std::istream& is, else// Failed to read the ASCII file { // It might have actually have been a binary file... ? - return IO::internal::parse_binary_STL(is, points, facets, verbose); + return internal::parse_binary_STL(is, points, facets, verbose); } } @@ -174,7 +176,7 @@ bool read_STL(std::istream& is, template bool read_STL(std::istream& is, PointRange& points, TriangleRange& facets, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_STL(is, points, facets, parameters::all_default()); } @@ -222,7 +224,7 @@ bool read_STL(const std::string& fname, TriangleRange& facets, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -232,7 +234,7 @@ bool read_STL(const std::string& fname, if(binary) { std::ifstream is(fname, std::ios::binary); - CGAL::set_mode(is, CGAL::IO::BINARY); + CGAL::IO::set_mode(is, BINARY); if(read_STL(is, points, facets, np)) { return true; @@ -241,7 +243,7 @@ bool read_STL(const std::string& fname, facets.clear(); } std::ifstream is(fname); - CGAL::set_mode(is, CGAL::IO::ASCII); + CGAL::IO::set_mode(is, CGAL::IO::ASCII); bool v = choose_parameter(get_parameter(np, internal_np::verbose), false); return read_STL(is, points, facets, CGAL::parameters::verbose(v).use_binary_mode(false)); @@ -251,7 +253,7 @@ bool read_STL(const std::string& fname, template bool read_STL(const std::string& fname, PointRange& points, TriangleRange& facets, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return read_STL(fname, points, facets, parameters::all_default()); } @@ -297,7 +299,7 @@ bool write_STL(std::ostream& os, const TriangleRange& facets, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -319,7 +321,7 @@ bool write_STL(std::ostream& os, set_stream_precision_from_NP(os, np); - if(get_mode(os) == IO::BINARY) + if(get_mode(os) == BINARY) { os << "FileType: Binary "; const boost::uint32_t N32 = static_cast(facets.size()); @@ -369,7 +371,7 @@ bool write_STL(std::ostream& os, template bool write_STL(std::ostream& os, const PointRange& points, const TriangleRange& facets, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_STL(os, points, facets, parameters::all_default()); } @@ -417,7 +419,7 @@ bool write_STL(const std::string& fname, const TriangleRange& facets, const CGAL_BGL_NP_CLASS& np #ifndef DOXYGEN_RUNNING - , typename boost::enable_if >::type* = nullptr + , typename boost::enable_if >::type* = nullptr #endif ) { @@ -425,13 +427,13 @@ bool write_STL(const std::string& fname, if(binary) { std::ofstream os(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_STL(os, points, facets, np); } else { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_STL(os, points, facets, np); } } @@ -440,13 +442,15 @@ bool write_STL(const std::string& fname, template bool write_STL(const std::string& fname, const PointRange& points, const TriangleRange& facets, - typename boost::enable_if >::type* = nullptr) + typename boost::enable_if >::type* = nullptr) { return write_STL(fname, points, facets, parameters::all_default()); } /// \endcond +} // namespace IO + } // namespace CGAL #endif // CGAL_IO_STL_H diff --git a/Stream_support/include/CGAL/IO/STL/STL_reader.h b/Stream_support/include/CGAL/IO/STL/STL_reader.h index 09aaf71f4ab..919ceeddd56 100644 --- a/Stream_support/include/CGAL/IO/STL/STL_reader.h +++ b/Stream_support/include/CGAL/IO/STL/STL_reader.h @@ -84,7 +84,7 @@ bool read_ASCII_facet(std::istream& is, } else { - IO::internal::fill_point(x, y, z, 1 /*w*/, p); + fill_point(x, y, z, 1 /*w*/, p); typename std::map::iterator iti = index_map.insert(std::make_pair(p, -1)).first; if(iti->second == -1) @@ -252,7 +252,7 @@ bool parse_binary_STL(std::istream& is, } Point p; - IO::internal::fill_point(x, y, z, 1 /*w*/, p); + fill_point(x, y, z, 1 /*w*/, p); typename std::map::iterator iti = index_map.insert(std::make_pair(p, -1)).first; diff --git a/Stream_support/include/CGAL/IO/VRML/File_writer_VRML_2.h b/Stream_support/include/CGAL/IO/VRML/File_writer_VRML_2.h index 48e58fa64ec..e95c5c2467d 100644 --- a/Stream_support/include/CGAL/IO/VRML/File_writer_VRML_2.h +++ b/Stream_support/include/CGAL/IO/VRML/File_writer_VRML_2.h @@ -74,7 +74,7 @@ public: void write_vertex( const double x, const double y, const double z) { out() << " " - << oformat(x) << ' ' << oformat(y) << ' ' << oformat(z) << ',' << '\n'; + << IO::oformat(x) << ' ' << IO::oformat(y) << ' ' << IO::oformat(z) << ',' << '\n'; } void write_vertex_normal(const double, const double, const double) { } void write_vertex_color(const double, const double, const double) { } diff --git a/Stream_support/include/CGAL/IO/VRML/VRML_2_ostream.h b/Stream_support/include/CGAL/IO/VRML/VRML_2_ostream.h index d200643068d..d664810e8ee 100644 --- a/Stream_support/include/CGAL/IO/VRML/VRML_2_ostream.h +++ b/Stream_support/include/CGAL/IO/VRML/VRML_2_ostream.h @@ -30,7 +30,7 @@ class VRML_2_ostream public: VRML_2_ostream() : m_os(nullptr) {} VRML_2_ostream(std::ostream& o) : m_os(&o) { header(); } - ~VRML_2_ostream() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + ~VRML_2_ostream() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_destructor_assertion_catch( close(); diff --git a/Stream_support/include/CGAL/IO/VTK.h b/Stream_support/include/CGAL/IO/VTK.h index d56dd2f0d11..68fed07bef2 100644 --- a/Stream_support/include/CGAL/IO/VTK.h +++ b/Stream_support/include/CGAL/IO/VTK.h @@ -89,7 +89,6 @@ bool vtkPointSet_to_polygon_soup(vtkPointSet* poly_data, return true; } } // namespace internal -} // namespace IO //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -109,14 +108,14 @@ bool read_VTP(const std::string& fname, } vtkSmartPointer data; - vtkSmartPointer obs = - vtkSmartPointer::New(); + vtkSmartPointer obs = + vtkSmartPointer::New(); - data = vtkPolyData::SafeDownCast(IO::internal::read_vtk_file(fname, obs)->GetOutput()); + data = vtkPolyData::SafeDownCast(internal::read_vtk_file(fname, obs)->GetOutput()); if (obs->GetError()) return false; - return IO::internal::vtkPointSet_to_polygon_soup(data, points, polygons, np); + return internal::vtkPointSet_to_polygon_soup(data, points, polygons, np); } /*! @@ -150,7 +149,6 @@ bool read_VTP(const std::string& fname, PointRange& points, PolygonRange& polygo //////////////////////////////////////////////////////////////////////////////////////////////////// // Write -namespace IO { namespace internal { // writes the polys appended data at the end of the .vtp file @@ -345,7 +343,6 @@ void write_soup_polys_points(std::ostream& os, } } // namespace internal -} // namespace IO /*! * \ingroup PkgStreamSupportIoFuncsVTP @@ -421,16 +418,16 @@ bool write_VTP(std::ostream& os, const bool binary = choose_parameter(get_parameter(np, internal_np::use_binary_mode), true); std::vector size_map; std::vector cell_type; - IO::internal::write_soup_points_tag(os, points, binary, offset); - IO::internal::write_soup_polys_tag(os, polygons, binary, offset, size_map, cell_type); + internal::write_soup_points_tag(os, points, binary, offset); + internal::write_soup_polys_tag(os, polygons, binary, offset, size_map, cell_type); os << " \n" << " \n"; if(binary) { os << "\n_"; - IO::internal::write_soup_polys_points(os, points); - IO::internal::write_soup_polys(os, polygons,size_map, cell_type); + internal::write_soup_polys_points(os, points); + internal::write_soup_polys(os, polygons,size_map, cell_type); } os << "" << std::endl; } @@ -488,13 +485,13 @@ bool write_VTP(const std::string& fname, if(binary) { std::ofstream os(fname, std::ios::binary); - CGAL::set_mode(os, CGAL::IO::BINARY); + CGAL::IO::set_mode(os, CGAL::IO::BINARY); return write_VTP(os, points, polygons, np); } else { std::ofstream os(fname); - CGAL::set_mode(os, CGAL::IO::ASCII); + CGAL::IO::set_mode(os, CGAL::IO::ASCII); return write_VTP(os, points, polygons, np); } } @@ -509,6 +506,8 @@ bool write_VTP(const std::string& fname, const PointRange& points, const Polygon /// \endcond +} // namespace IO + } // namespace CGAL #endif // defined(CGAL_USE_VTK) || defined(DOXYGEN_RUNNING) diff --git a/Stream_support/include/CGAL/IO/WKT.h b/Stream_support/include/CGAL/IO/WKT.h index 9f81d43f7a9..3c1cadc849d 100644 --- a/Stream_support/include/CGAL/IO/WKT.h +++ b/Stream_support/include/CGAL/IO/WKT.h @@ -39,6 +39,7 @@ #include namespace CGAL { +namespace IO { namespace internal { template @@ -127,7 +128,7 @@ bool read_multi_point_WKT(std::istream& in, if(!in.good()) return false; - internal::Geometry_container gc(mp); + CGAL::internal::Geometry_container gc(mp); std::string line; while(std::getline(in, line)) { @@ -173,7 +174,7 @@ bool read_linestring_WKT(std::istream& in, if(!in.good()) return false; - internal::Geometry_container gc(polyline); + CGAL::internal::Geometry_container gc(polyline); std::string line; while(std::getline(in, line)) { @@ -218,10 +219,10 @@ bool read_multi_linestring_WKT(std::istream& in, return false; typedef typename MultiLineString::value_type PointRange; - typedef internal::Geometry_container LineString; + typedef CGAL::internal::Geometry_container LineString; std::vector pr_range; - internal::Geometry_container, boost::geometry::multi_linestring_tag> gc(pr_range); + CGAL::internal::Geometry_container, boost::geometry::multi_linestring_tag> gc(pr_range); std::string line; while(std::getline(in, line)) { @@ -316,7 +317,7 @@ bool read_multi_polygon_WKT(std::istream& in, if(!in.good()) return false; - internal::Geometry_container gc(polygons); + CGAL::internal::Geometry_container gc(polygons); std::string line; while(std::getline(in, line)) { @@ -336,7 +337,7 @@ bool read_multi_polygon_WKT(std::istream& in, return false; }; - for(typename internal::Geometry_container::iterator it = gc.begin(); it != gc.end(); ++it) + for(typename CGAL::internal::Geometry_container::iterator it = gc.begin(); it != gc.end(); ++it) internal::pop_back_if_equal_to_front(*it); break; @@ -402,7 +403,7 @@ std::ostream& write_linestring_WKT(std::ostream& out, if(!out.good()) return out; - internal::Geometry_container gc(ls); + CGAL::internal::Geometry_container gc(ls); out << boost::geometry::wkt(gc) << std::endl; return out; } @@ -423,7 +424,7 @@ std::ostream& write_multi_point_WKT(std::ostream& out, if(!out.good()) return out; - internal::Geometry_container gc(mp); + CGAL::internal::Geometry_container gc(mp); out << boost::geometry::wkt(gc) << std::endl; return out; } @@ -444,7 +445,7 @@ std::ostream& write_multi_polygon_WKT(std::ostream& out, if(!out.good()) return out; - internal::Geometry_container gc(polygons); + CGAL::internal::Geometry_container gc(polygons); out << boost::geometry::wkt(gc) << std::endl; return out; } @@ -457,7 +458,7 @@ std::ostream& write_multi_polygon_WKT(std::ostream& out, //! //! \attention Only Cartesian Kernels with double or float as `FT` are supported. //! -//! \see `CGAL::write_linestring_WKT()` +//! \see `CGAL::IO::write_linestring_WKT()` template std::ostream& write_multi_linestring_WKT(std::ostream& out, MultiLineString& mls) @@ -466,7 +467,7 @@ std::ostream& write_multi_linestring_WKT(std::ostream& out, return out; typedef typename MultiLineString::value_type PointRange; - typedef internal::Geometry_container LineString; + typedef CGAL::internal::Geometry_container LineString; std::vector pr_range; for(PointRange& pr : mls) @@ -475,7 +476,7 @@ std::ostream& write_multi_linestring_WKT(std::ostream& out, pr_range.push_back(ls); } - internal::Geometry_container, boost::geometry::multi_linestring_tag> gc(pr_range); + CGAL::internal::Geometry_container, boost::geometry::multi_linestring_tag> gc(pr_range); out << boost::geometry::wkt(gc) << std::endl; return out; @@ -492,7 +493,7 @@ std::ostream& write_multi_linestring_WKT(std::ostream& out, //! //! \attention Only Cartesian Kernels with double or float as `FT` are supported. //! -//! \see `CGAL::read_linestring_WKT()` +//! \see `CGAL::IO::read_linestring_WKT()` template @@ -531,40 +532,40 @@ bool read_WKT(std::istream& is, if(type == "POINT") { Point p; - CGAL::read_point_WKT(is, p); + CGAL::IO::read_point_WKT(is, p); points.push_back(p); } else if(type == "LINESTRING") { LineString l; - CGAL::read_linestring_WKT(is, l); + CGAL::IO::read_linestring_WKT(is, l); polylines.push_back(l); } else if(type == "POLYGON") { Polygon p; - CGAL::read_polygon_WKT(is, p); + CGAL::IO::read_polygon_WKT(is, p); if(!p.outer_boundary().is_empty()) polygons.push_back(p); } else if(type == "MULTIPOINT") { MultiPoint mp; - CGAL::read_multi_point_WKT(is, mp); + CGAL::IO::read_multi_point_WKT(is, mp); for(const Point& point : mp) points.push_back(point); } else if(type == "MULTILINESTRING") { MultiLineString mls; - CGAL::read_multi_linestring_WKT(is, mls); + CGAL::IO::read_multi_linestring_WKT(is, mls); for(const LineString& ls : mls) polylines.push_back(ls); } else if(type == "MULTIPOLYGON") { MultiPolygon mp; - CGAL::read_multi_polygon_WKT(is, mp); + CGAL::IO::read_multi_polygon_WKT(is, mp); for(const Polygon& poly : mp) polygons.push_back(poly); } @@ -574,6 +575,24 @@ bool read_WKT(std::istream& is, return !is.fail(); } +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::read_linestring_WKT; +using IO::read_multi_linestring_WKT; +using IO::read_multi_point_WKT; +using IO::read_multi_polygon_WKT; +using IO::read_point_WKT; +using IO::read_polygon_WKT; +using IO::read_WKT; +using IO::write_linestring_WKT; +using IO::write_multi_linestring_WKT; +using IO::write_multi_point_WKT; +using IO::write_multi_polygon_WKT; +using IO::write_point_WKT; +using IO::write_polygon_WKT; +#endif + } // namespace CGAL #endif // BOOST VERSION CHECKS diff --git a/Stream_support/include/CGAL/IO/io.h b/Stream_support/include/CGAL/IO/io.h index 9de4c84e962..7b103f9b9cf 100644 --- a/Stream_support/include/CGAL/IO/io.h +++ b/Stream_support/include/CGAL/IO/io.h @@ -70,14 +70,14 @@ would be `PointC2(0.0, 0.0)`. At the moment \cgal does not provide input operations for pretty printed data. By default a stream is in Ascii mode. -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ enum Mode {ASCII = 0, PRETTY, BINARY}; @@ -94,14 +94,14 @@ as `cout` or `cerr`, as well as to `std::ostringstream` and `std::ofstream`. The output operator is defined for all classes in the \cgal `Kernel` and for the class `Color` as well. -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ ostream& operator<<(ostream& os, Class c); @@ -113,14 +113,14 @@ from the class `istream`. This allows to read from istreams as `std::cin`, as well as from `std::istringstream` and `std::ifstream`. The input operator is defined for all classes in the \cgal `Kernel`. -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ istream& operator>>(istream& is, Class c); #endif @@ -199,6 +199,8 @@ public: template std::ostream& operator<<( std::ostream& out, Output_rep rep) { return rep( out); } +namespace IO { + /*! \ingroup PkgStreamSupportRef @@ -219,6 +221,8 @@ Generic IO for type `T` with formatting tag. template Output_rep oformat( const T& t, F) { return Output_rep(t); } +} // namespace IO + /*! \ingroup PkgStreamSupportRef @@ -394,6 +398,8 @@ The input operator is defined for all classes in the \cgal `Kernel`. template std::istream& operator>>( std::istream& in, Input_rep rep) { return rep(in); } +namespace IO { + /*! \ingroup PkgStreamSupportRef @@ -402,6 +408,8 @@ The definition of this function is completely symmetric to `oformat()`. template Input_rep iformat( T& t) { return Input_rep(t); } +} // namespace IO + template class Benchmark_rep { @@ -420,6 +428,8 @@ public: template std::ostream& operator<<( std::ostream& out, Benchmark_rep rep) { return rep( out); } +namespace IO { + template Benchmark_rep bmformat( const T& t) { return Benchmark_rep(t); } @@ -432,82 +442,82 @@ Benchmark_rep bmformat( const T& t, F) { return Benchmark_rep(t); } returns the printing mode of the %IO stream `s`. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ -inline IO::Mode get_mode(std::ios& i) +inline Mode get_mode(std::ios& i) { - return static_cast(i.iword(IO::Static::get_mode())); + return static_cast(i.iword(Static::get_mode())); } /*! \ingroup PkgStreamSupportRef -sets the mode of the %IO stream `s` to be the `IO::ASCII` mode. +sets the mode of the %IO stream `s` to be the `ASCII` mode. Returns the previous mode of `s`. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ -inline IO::Mode set_ascii_mode(std::ios& i) +inline Mode set_ascii_mode(std::ios& i) { - IO::Mode m = get_mode(i); - i.iword(IO::Static::get_mode()) = IO::ASCII; + Mode m = get_mode(i); + i.iword(Static::get_mode()) = ASCII; return m; } /*! \ingroup PkgStreamSupportRef -sets the mode of the %IO stream `s` to be the `IO::BINARY` mode. +sets the mode of the %IO stream `s` to be the `BINARY` mode. Returns the previous mode of `s`. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ -inline IO::Mode set_binary_mode(std::ios& i) +inline Mode set_binary_mode(std::ios& i) { - IO::Mode m = get_mode(i); - i.iword(IO::Static::get_mode()) = IO::BINARY; + Mode m = get_mode(i); + i.iword(Static::get_mode()) = BINARY; return m; } /*! \ingroup PkgStreamSupportRef -sets the mode of the %IO stream `s` to be the `IO::PRETTY` mode. +sets the mode of the %IO stream `s` to be the `PRETTY` mode. Returns the previous mode of `s`. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ -inline IO::Mode set_pretty_mode(std::ios& i) +inline Mode set_pretty_mode(std::ios& i) { - IO::Mode m = get_mode(i); - i.iword(IO::Static::get_mode()) = IO::PRETTY; + Mode m = get_mode(i); + i.iword(Static::get_mode()) = PRETTY; return m; } @@ -517,68 +527,70 @@ inline IO::Mode set_pretty_mode(std::ios& i) sets the printing mode of the %IO stream `s`. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ -inline IO::Mode set_mode(std::ios& i, IO::Mode m) +inline Mode set_mode(std::ios& i, Mode m) { - IO::Mode old = get_mode(i); - i.iword(IO::Static::get_mode()) = m; + Mode old = get_mode(i); + i.iword(Static::get_mode()) = m; return old; } /*! \ingroup PkgStreamSupportRef -checks if the %IO stream `s` is in `IO::PRETTY` mode. +checks if the %IO stream `s` is in `PRETTY` mode. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_binary()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_binary()` */ -inline bool is_pretty(std::ios& i) { return i.iword(IO::Static::get_mode()) == IO::PRETTY; } +inline bool is_pretty(std::ios& i) { return i.iword(Static::get_mode()) == PRETTY; } /*! \ingroup PkgStreamSupportRef -checks if the %IO stream `s` is in `IO::ASCII` mode. +checks if the %IO stream `s` is in `ASCII` mode. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_binary()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_binary()` +\sa `CGAL::IO::is_pretty()` */ -inline bool is_ascii(std::ios& i) { return i.iword(IO::Static::get_mode()) == IO::ASCII; } +inline bool is_ascii(std::ios& i) { return i.iword(Static::get_mode()) == ASCII; } /*! \ingroup PkgStreamSupportRef -checks if the %IO stream `s` is in `IO::BINARY` mode. +checks if the %IO stream `s` is in `BINARY` mode. \link PkgStreamSupportEnumRef `CGAL::IO::Mode`\endlink -\sa `CGAL::set_mode()` -\sa `CGAL::set_ascii_mode()` -\sa `CGAL::set_binary_mode()` -\sa `CGAL::set_pretty_mode()` -\sa `CGAL::get_mode()` -\sa `CGAL::is_ascii()` -\sa `CGAL::is_pretty()` +\sa `CGAL::IO::set_mode()` +\sa `CGAL::IO::set_ascii_mode()` +\sa `CGAL::IO::set_binary_mode()` +\sa `CGAL::IO::set_pretty_mode()` +\sa `CGAL::IO::get_mode()` +\sa `CGAL::IO::is_ascii()` +\sa `CGAL::IO::is_pretty()` */ -inline bool is_binary(std::ios& i) { return i.iword(IO::Static::get_mode()) == IO::BINARY; } +inline bool is_binary(std::ios& i) { return i.iword(Static::get_mode()) == BINARY; } + +} // namespace IO template < class T > inline void write(std::ostream& os, const T& t, const io_Read_write&) @@ -589,7 +601,7 @@ inline void write(std::ostream& os, const T& t, const io_Read_write&) template < class T > inline void write(std::ostream& os, const T& t, const io_Operator&) { - os << oformat(t); + os << IO::oformat(t); } template < class T > @@ -613,7 +625,7 @@ inline void read(std::istream& is, T& t, const io_Read_write&) template < class T > inline void read(std::istream& is, T& t, const io_Operator&) { - is >> iformat(t); + is >> IO::iformat(t); } template < class T > @@ -628,16 +640,18 @@ inline void read(std::istream& is, T& t) read(is, t, typename Io_traits::Io_tag()); } +namespace IO { + inline std::ostream& operator<<( std::ostream& out, const Color& col) { switch(get_mode(out)) { - case IO::ASCII : + case ASCII : return out << static_cast(col.red()) << ' ' << static_cast(col.green()) << ' ' << static_cast(col.blue()) << ' ' << static_cast(col.alpha()); - case IO::BINARY : + case BINARY : out.write(reinterpret_cast(col.to_rgba().data()), 4); return out; default: @@ -655,14 +669,14 @@ inline std::istream &operator>>(std::istream &is, Color& col) switch(get_mode(is)) { - case IO::ASCII : + case ASCII : is >> ir >> ig >> ib >> ia; r = (unsigned char)ir; g = (unsigned char)ig; b = (unsigned char)ib; a = (unsigned char)ia; break; - case IO::BINARY : + case BINARY : read(is, r); read(is, g); read(is, b); @@ -685,6 +699,23 @@ inline const char* mode_name( IO::Mode m ) return names[m]; } +} // IO namespace + +#ifndef CGAL_NO_DEPRECATED_CODE +using IO::oformat; +using IO::iformat; +using IO::bmformat; +using IO::get_mode; +using IO::set_ascii_mode; +using IO::set_binary_mode; +using IO::set_pretty_mode; +using IO::set_mode; +using IO::is_pretty; +using IO::is_ascii; +using IO::is_binary; +using IO::mode_name; +#endif + // From polynomial.h TODO: Where to put this? inline void swallow(std::istream &is, char d) { diff --git a/Stream_support/include/CGAL/IO/polygon_soup_io.h b/Stream_support/include/CGAL/IO/polygon_soup_io.h index 718e95f317a..4934720e26a 100644 --- a/Stream_support/include/CGAL/IO/polygon_soup_io.h +++ b/Stream_support/include/CGAL/IO/polygon_soup_io.h @@ -30,6 +30,8 @@ namespace CGAL { +namespace IO { + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Read @@ -79,7 +81,7 @@ bool read_polygon_soup(const std::string& fname, { const bool verbose = parameters::choose_parameter(parameters::get_parameter(np, internal_np::verbose), false); - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == std::string()) { if(verbose) @@ -169,7 +171,7 @@ bool write_polygon_soup(const std::string& fname, { const bool verbose = parameters::choose_parameter(parameters::get_parameter(np, internal_np::verbose), false); - const std::string ext = IO::internal::get_file_extension(fname); + const std::string ext = internal::get_file_extension(fname); if(ext == std::string()) { if(verbose) @@ -215,6 +217,8 @@ bool write_polygon_soup(const std::string& fname, PointRange& points, PolygonRan /// \endcond +} // namespace IO + } // namespace CGAL #endif // CGAL_IO_READ_POLYGON_SOUP_H diff --git a/Stream_support/test/Stream_support/test_GOCAD.cpp b/Stream_support/test/Stream_support/test_GOCAD.cpp index 5d5838651fc..3ea0044bdb3 100644 --- a/Stream_support/test/Stream_support/test_GOCAD.cpp +++ b/Stream_support/test/Stream_support/test_GOCAD.cpp @@ -18,7 +18,7 @@ int main(int argc, char** argv) std::vector points; std::vector polygons; - bool ok = CGAL::read_GOCAD(gocad_file, points, polygons); + bool ok = CGAL::IO::read_GOCAD(gocad_file, points, polygons); assert(ok); std::cout << points.size() << " points and " << polygons.size() << " polygons" << std::endl; @@ -28,37 +28,37 @@ int main(int argc, char** argv) points.clear(); polygons.clear(); std::string gocad_string(gocad_file); - ok = CGAL::read_GOCAD(gocad_string, points, polygons); + ok = CGAL::IO::read_GOCAD(gocad_string, points, polygons); assert(ok); points.clear(); polygons.clear(); std::ifstream is(gocad_file); - ok = CGAL::read_GOCAD(is, points, polygons); + ok = CGAL::IO::read_GOCAD(is, points, polygons); assert(ok); is.close(); - ok = CGAL::write_GOCAD(gocad_file, points, polygons); + ok = CGAL::IO::write_GOCAD(gocad_file, points, polygons); assert(ok); std::ofstream os("tmp.ts"); - ok = CGAL::write_GOCAD(os, points, polygons); + ok = CGAL::IO::write_GOCAD(os, points, polygons); assert(ok); os.close(); - ok = CGAL::write_GOCAD("tmp.ts", points, polygons); + ok = CGAL::IO::write_GOCAD("tmp.ts", points, polygons); assert(ok); const std::size_t ptn = points.size(); const std::size_t pln = polygons.size(); - ok = CGAL::write_polygon_soup("tmp.ts", points, polygons); + ok = CGAL::IO::write_polygon_soup("tmp.ts", points, polygons); assert(ok); points.clear(); polygons.clear(); - ok = CGAL::read_polygon_soup("tmp.ts", points, polygons); + ok = CGAL::IO::read_polygon_soup("tmp.ts", points, polygons); assert(ok); assert(points.size() == ptn); diff --git a/Stream_support/test/Stream_support/test_OBJ.cpp b/Stream_support/test/Stream_support/test_OBJ.cpp index 1d37863dca5..e72960ecf43 100644 --- a/Stream_support/test/Stream_support/test_OBJ.cpp +++ b/Stream_support/test/Stream_support/test_OBJ.cpp @@ -18,7 +18,7 @@ int main(int argc, char** argv) std::vector points; std::vector polygons; - bool ok = CGAL::read_OBJ(obj_file, points, polygons, CGAL::parameters::verbose(true)); + bool ok = CGAL::IO::read_OBJ(obj_file, points, polygons, CGAL::parameters::verbose(true)); assert(ok); std::cout << points.size() << " points and " << polygons.size() << " polygons" << std::endl; @@ -28,40 +28,40 @@ int main(int argc, char** argv) points.clear(); polygons.clear(); std::string obj_string(obj_file); - ok = CGAL::read_OBJ(obj_string, points, polygons); + ok = CGAL::IO::read_OBJ(obj_string, points, polygons); assert(ok); points.clear(); polygons.clear(); std::ifstream is(obj_file); - ok = CGAL::read_OBJ(is, points, polygons); + ok = CGAL::IO::read_OBJ(is, points, polygons); assert(ok); is.close(); is.open(obj_file, std::ios::binary); - ok = CGAL::read_OBJ(is, points, polygons); + ok = CGAL::IO::read_OBJ(is, points, polygons); assert(ok); is.close(); std::ofstream os("tmp.obj"); - ok = CGAL::write_OBJ(os, points, polygons); + ok = CGAL::IO::write_OBJ(os, points, polygons); assert(ok); os.close(); - ok = CGAL::write_OBJ("tmp.obj", points, polygons); + ok = CGAL::IO::write_OBJ("tmp.obj", points, polygons); assert(ok); std::vector pts_backup = points; std::vector pls_backup = polygons; - ok = CGAL::write_polygon_soup("tmp.obj", points, polygons); + ok = CGAL::IO::write_polygon_soup("tmp.obj", points, polygons); assert(ok); points.clear(); polygons.clear(); - ok = CGAL::read_polygon_soup("tmp.obj", points, polygons); + ok = CGAL::IO::read_polygon_soup("tmp.obj", points, polygons); assert(ok); assert(points.size() == pts_backup.size()); diff --git a/Stream_support/test/Stream_support/test_OFF.cpp b/Stream_support/test/Stream_support/test_OFF.cpp index c0e21adc399..fe38b75e6dc 100644 --- a/Stream_support/test/Stream_support/test_OFF.cpp +++ b/Stream_support/test/Stream_support/test_OFF.cpp @@ -18,7 +18,7 @@ int main(int argc, char** argv) std::vector points; std::vector polygons; - bool ok = CGAL::read_OFF(off_file, points, polygons); + bool ok = CGAL::IO::read_OFF(off_file, points, polygons); assert(ok); std::cout << points.size() << " points and " << polygons.size() << " polygons" << std::endl; @@ -28,41 +28,41 @@ int main(int argc, char** argv) points.clear(); polygons.clear(); std::string off_string(off_file); - ok = CGAL::read_OFF(off_string, points, polygons); + ok = CGAL::IO::read_OFF(off_string, points, polygons); assert(ok); points.clear(); polygons.clear(); std::ifstream is(off_file); - ok = CGAL::read_OFF(is, points, polygons); + ok = CGAL::IO::read_OFF(is, points, polygons); assert(ok); is.close(); points.clear(); polygons.clear(); is.open(off_file, std::ios::binary); - ok = CGAL::read_OFF(is, points, polygons); + ok = CGAL::IO::read_OFF(is, points, polygons); assert(ok); is.close(); std::ofstream os("tmp.off", std::ios::binary); - ok = CGAL::write_OFF(os, points, polygons); + ok = CGAL::IO::write_OFF(os, points, polygons); assert(ok); os.close(); - ok = CGAL::write_OFF("tmp.off", points, polygons); + ok = CGAL::IO::write_OFF("tmp.off", points, polygons); assert(ok); std::vector pts_backup = points; std::vector pls_backup = polygons; - ok = CGAL::write_polygon_soup("tmp.off", points, polygons); + ok = CGAL::IO::write_polygon_soup("tmp.off", points, polygons); assert(ok); points.clear(); polygons.clear(); - ok = CGAL::read_polygon_soup("tmp.off", points, polygons); + ok = CGAL::IO::read_polygon_soup("tmp.off", points, polygons); assert(ok); assert(points.size() == pts_backup.size()); diff --git a/Stream_support/test/Stream_support/test_PLY.cpp b/Stream_support/test/Stream_support/test_PLY.cpp index f33d307ecb7..6a727f2dbbb 100644 --- a/Stream_support/test/Stream_support/test_PLY.cpp +++ b/Stream_support/test/Stream_support/test_PLY.cpp @@ -18,7 +18,7 @@ int main(int argc, char** argv) std::vector points; std::vector polygons; - bool ok = CGAL::read_PLY(ply_file, points, polygons); + bool ok = CGAL::IO::read_PLY(ply_file, points, polygons); assert(ok); std::cout << points.size() << " points and " << polygons.size() << " polygons" << std::endl; @@ -28,33 +28,33 @@ int main(int argc, char** argv) points.clear(); polygons.clear(); std::string ply_string(ply_file); - ok = CGAL::read_PLY(ply_string, points, polygons); + ok = CGAL::IO::read_PLY(ply_string, points, polygons); assert(ok); points.clear(); polygons.clear(); std::ifstream is(ply_file); - ok = CGAL::read_PLY(is, points, polygons); + ok = CGAL::IO::read_PLY(is, points, polygons); assert(ok); is.close(); points.clear(); polygons.clear(); is.open(ply_file, std::ios::binary); - ok = CGAL::read_PLY(is, points, polygons); + ok = CGAL::IO::read_PLY(is, points, polygons); assert(ok); is.close(); - ok = CGAL::write_PLY("tmp.ply", points, polygons); + ok = CGAL::IO::write_PLY("tmp.ply", points, polygons); assert(ok); - ok = CGAL::write_polygon_soup("tmp.ply", points, polygons); + ok = CGAL::IO::write_polygon_soup("tmp.ply", points, polygons); assert(ok); std::ofstream os("tmp.ply"); - CGAL::set_binary_mode(os); - ok = CGAL::write_PLY(os, points, polygons); + CGAL::IO::set_binary_mode(os); + ok = CGAL::IO::write_PLY(os, points, polygons); assert(ok); os.close(); @@ -63,7 +63,7 @@ int main(int argc, char** argv) points.clear(); polygons.clear(); - ok = CGAL::read_polygon_soup("tmp.ply", points, polygons); + ok = CGAL::IO::read_polygon_soup("tmp.ply", points, polygons); assert(ok); assert(points.size() == pts_backup.size()); diff --git a/Stream_support/test/Stream_support/test_STL.cpp b/Stream_support/test/Stream_support/test_STL.cpp index 4e201eb0882..9fd3dffe5f0 100644 --- a/Stream_support/test/Stream_support/test_STL.cpp +++ b/Stream_support/test/Stream_support/test_STL.cpp @@ -27,7 +27,7 @@ void read(const char* fname, std::size_t v, std::size_t f, std::vector points; std::vector faces; - bool ok = CGAL::read_STL(input, points, faces, CGAL::parameters::use_binary_mode(is_binary)); + bool ok = CGAL::IO::read_STL(input, points, faces, CGAL::parameters::use_binary_mode(is_binary)); assert(ok != should_fail); if(!should_fail) { @@ -75,7 +75,7 @@ int main(int argc, char** argv) std::vector points; std::vector polygons; - bool ok = CGAL::read_STL(stl_file, points, polygons, CGAL::parameters::verbose(true)); + bool ok = CGAL::IO::read_STL(stl_file, points, polygons, CGAL::parameters::verbose(true)); assert(ok); std::cout << points.size() << " points and " << polygons.size() << " polygons" << std::endl; @@ -85,31 +85,31 @@ int main(int argc, char** argv) points.clear(); polygons.clear(); std::string stl_string(stl_file); - ok = CGAL::read_STL(stl_string, points, polygons); + ok = CGAL::IO::read_STL(stl_string, points, polygons); assert(ok); points.clear(); polygons.clear(); std::ifstream is(stl_file); - ok = CGAL::read_STL(is, points, polygons); + ok = CGAL::IO::read_STL(is, points, polygons); assert(ok); points.clear(); polygons.clear(); is.clear(); is.seekg(0, is.beg); - ok = CGAL::read_STL(is, points, polygons, CGAL::parameters::use_binary_mode(false)); + ok = CGAL::IO::read_STL(is, points, polygons, CGAL::parameters::use_binary_mode(false)); assert(ok); is.close(); - ok = CGAL::write_STL("tmp.stl", points, polygons); + ok = CGAL::IO::write_STL("tmp.stl", points, polygons); assert(ok); - ok = CGAL::write_polygon_soup("tmp.stl", points, polygons); + ok = CGAL::IO::write_polygon_soup("tmp.stl", points, polygons); assert(ok); std::ofstream os("tmp.stl"); - CGAL::set_binary_mode(os); - ok = CGAL::write_STL(os, points, polygons); + CGAL::IO::set_binary_mode(os); + ok = CGAL::IO::write_STL(os, points, polygons); assert(ok); os.close(); @@ -119,7 +119,7 @@ int main(int argc, char** argv) points.clear(); polygons.clear(); - ok = CGAL::read_polygon_soup("tmp.stl", points, polygons); + ok = CGAL::IO::read_polygon_soup("tmp.stl", points, polygons); assert(ok); assert(points.size() == pts_backup.size()); diff --git a/Stream_support/test/Stream_support/test_WKT.cpp b/Stream_support/test/Stream_support/test_WKT.cpp index 426469bff3b..31171b7e822 100644 --- a/Stream_support/test/Stream_support/test_WKT.cpp +++ b/Stream_support/test/Stream_support/test_WKT.cpp @@ -29,42 +29,42 @@ bool test_read_WKT() Point p; { std::ifstream in("data/point.wkt"); - if(!CGAL::read_point_WKT(in, p)) + if(!CGAL::IO::read_point_WKT(in, p)) return false; CGAL_assertion(p == Point(2,3)); } { std::ifstream in("data/linestring.wkt"); Linestring ls; - if(!CGAL::read_linestring_WKT(in, ls)) + if(!CGAL::IO::read_linestring_WKT(in, ls)) return false; CGAL_assertion(ls.size() == 3); } { Poly poly; std::ifstream in("data/polygon.wkt"); - if(!CGAL::read_polygon_WKT(in, poly)) + if(!CGAL::IO::read_polygon_WKT(in, poly)) return false; CGAL_assertion(poly.outer_boundary().size() == 3); } { MultiPoint pees; std::ifstream in("data/multipoint.wkt"); - if(!CGAL::read_multi_point_WKT(in, pees)) + if(!CGAL::IO::read_multi_point_WKT(in, pees)) return false; CGAL_assertion(pees.size() == 4); } { std::ifstream in("data/multilinestring.wkt"); MultiLinestring mls; - if(!CGAL::read_multi_linestring_WKT(in, mls)) + if(!CGAL::IO::read_multi_linestring_WKT(in, mls)) return false; CGAL_assertion(mls.size() == 2); } { MultiPolygon polies; std::ifstream in("data/multipolygon.wkt"); - if(!CGAL::read_multi_polygon_WKT(in, polies)) + if(!CGAL::IO::read_multi_polygon_WKT(in, polies)) return false; CGAL_assertion(polies.size() == 2); } @@ -176,13 +176,13 @@ bool test_write_WKT() { std::ofstream os("test.wkt"); os.precision(17); - CGAL::write_point_WKT(os, p); + CGAL::IO::write_point_WKT(os, p); os.close(); } Point test_p; { std::ifstream is("test.wkt"); - CGAL::read_point_WKT(is, test_p); + CGAL::IO::read_point_WKT(is, test_p); is.close(); } CGAL_assertion(p == test_p); @@ -191,13 +191,13 @@ bool test_write_WKT() { std::ofstream os("test.wkt"); os.precision(17); - CGAL::write_linestring_WKT(os, ls); + CGAL::IO::write_linestring_WKT(os, ls); os.close(); } Linestring test_ls; { std::ifstream is("test.wkt"); - CGAL::read_linestring_WKT(is, test_ls); + CGAL::IO::read_linestring_WKT(is, test_ls); is.close(); } CGAL_assertion(ls == test_ls); @@ -206,13 +206,13 @@ bool test_write_WKT() { std::ofstream os("test.wkt"); os.precision(17); - CGAL::write_polygon_WKT(os, poly); + CGAL::IO::write_polygon_WKT(os, poly); os.close(); } Poly test_poly; { std::ifstream is("test.wkt"); - CGAL::read_polygon_WKT(is, test_poly); + CGAL::IO::read_polygon_WKT(is, test_poly); is.close(); } @@ -222,13 +222,13 @@ bool test_write_WKT() { std::ofstream os("test.wkt"); os.precision(17); - CGAL::write_multi_point_WKT(os, pees); + CGAL::IO::write_multi_point_WKT(os, pees); os.close(); } MultiPoint test_pees; { std::ifstream is("test.wkt"); - CGAL::read_multi_point_WKT(is, test_pees); + CGAL::IO::read_multi_point_WKT(is, test_pees); is.close(); } CGAL_assertion(pees== test_pees); @@ -237,13 +237,13 @@ bool test_write_WKT() { std::ofstream os("test.wkt"); os.precision(17); - CGAL::write_multi_linestring_WKT(os, mls); + CGAL::IO::write_multi_linestring_WKT(os, mls); os.close(); } MultiLinestring test_mls; { std::ifstream is("test.wkt"); - CGAL::read_multi_linestring_WKT(is, test_mls); + CGAL::IO::read_multi_linestring_WKT(is, test_mls); is.close(); } bool ok = true; @@ -255,13 +255,13 @@ bool test_write_WKT() { std::ofstream os("test.wkt"); os.precision(17); - CGAL::write_multi_polygon_WKT(os, polies); + CGAL::IO::write_multi_polygon_WKT(os, polies); os.close(); } MultiPolygon test_polies; { std::ifstream is("test.wkt"); - CGAL::read_multi_polygon_WKT(is, test_polies); + CGAL::IO::read_multi_polygon_WKT(is, test_polies); is.close(); } CGAL_assertion(polies == test_polies); diff --git a/Stream_support/test/Stream_support/test_ioformat.cpp b/Stream_support/test/Stream_support/test_ioformat.cpp index 6c4ba850e80..e4e4e13e67e 100644 --- a/Stream_support/test/Stream_support/test_ioformat.cpp +++ b/Stream_support/test/Stream_support/test_ioformat.cpp @@ -36,9 +36,9 @@ void test_io(const NT& x){ assert( x == tmp ); }{ std::ostringstream os; - os << ::CGAL::oformat(x); + os << ::CGAL::IO::oformat(x); std::istringstream is(os.str()); - is >> ::CGAL::iformat(tmp); + is >> ::CGAL::IO::iformat(tmp); assert( x == tmp ); }{ std::ostringstream os; diff --git a/Stream_support/test/Stream_support/test_support.cpp b/Stream_support/test/Stream_support/test_support.cpp index 46fe0e01560..95548ee2d5e 100644 --- a/Stream_support/test/Stream_support/test_support.cpp +++ b/Stream_support/test/Stream_support/test_support.cpp @@ -38,24 +38,24 @@ int main() typedef CGAL::Istream_iterator IteratorI; { std::ostringstream out; - CGAL::set_ascii_mode( out); - assert( CGAL::is_ascii( out)); + CGAL::IO::set_ascii_mode( out); + assert( CGAL::IO::is_ascii( out)); out << Point( 1, 2) << '\0'; std::istringstream in( out.str() ); - CGAL::set_ascii_mode(in); - assert( CGAL::is_ascii(in)); + CGAL::IO::set_ascii_mode(in); + assert( CGAL::IO::is_ascii(in)); Point p; in >> p; assert( p == Point( 1, 2)); } { std::ostringstream out; - CGAL::set_ascii_mode( out); + CGAL::IO::set_ascii_mode( out); IteratorO o(out); *o = Point( 1, 2); out << '\0'; std::istringstream in( out.str() ); - CGAL::set_ascii_mode( in); + CGAL::IO::set_ascii_mode( in); IteratorI i(in); Point p = *i; assert( p == Point( 1, 2)); diff --git a/Surface_mesh/benchmark/lcc_performance_2.h b/Surface_mesh/benchmark/lcc_performance_2.h index 849467b27d5..a230cac75db 100644 --- a/Surface_mesh/benchmark/lcc_performance_2.h +++ b/Surface_mesh/benchmark/lcc_performance_2.h @@ -95,7 +95,7 @@ private: virtual bool write_mesh(const char* _filename) { std::ofstream ofs(_filename); - CGAL::write_off(lcc, ofs); + CGAL::IO::write_OFF(lcc, ofs); return true; } diff --git a/Surface_mesh/benchmark/surface_mesh_performance.h b/Surface_mesh/benchmark/surface_mesh_performance.h index e114d73c45e..9ab57e28c9a 100644 --- a/Surface_mesh/benchmark/surface_mesh_performance.h +++ b/Surface_mesh/benchmark/surface_mesh_performance.h @@ -53,7 +53,7 @@ private: virtual bool read_mesh(const char* _filename) { CGAL::Memory_sizer ms; - bool b = CGAL::read_OFF(mesh, _filename); + bool b = CGAL::IO::read_OFF(mesh, _filename); std::cout << "memory consumption: " << ms.virtual_size() << " " << ms.resident_size() << std::endl; return b; } @@ -61,7 +61,7 @@ private: virtual bool write_mesh(const char* _filename) { - return CGAL::write_OFF(mesh, _filename); + return CGAL::IO::write_OFF(mesh, _filename); } @@ -283,7 +283,7 @@ private: namespace SMS = CGAL::Surface_mesh_simplification ; mesh.clear(); - bool b = CGAL::read_OFF(_filename, mesh); + bool b = CGAL::IO::read_OFF(_filename, mesh); SMS::Count_ratio_stop_predicate stop(0.1); int r = SMS::edge_collapse(mesh, stop); } diff --git a/Surface_mesh/examples/Surface_mesh/draw_surface_mesh.cpp b/Surface_mesh/examples/Surface_mesh/draw_surface_mesh.cpp index 60e390b95c8..143501a70f6 100644 --- a/Surface_mesh/examples/Surface_mesh/draw_surface_mesh.cpp +++ b/Surface_mesh/examples/Surface_mesh/draw_surface_mesh.cpp @@ -14,7 +14,7 @@ int main(int argc, char* argv[]) const char* filename = (argc>1) ? argv[1] : "data/elephant.off"; Mesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh/examples/Surface_mesh/draw_surface_mesh_small_faces.h b/Surface_mesh/examples/Surface_mesh/draw_surface_mesh_small_faces.h index a574c2d738d..39a89eac77c 100644 --- a/Surface_mesh/examples/Surface_mesh/draw_surface_mesh_small_faces.h +++ b/Surface_mesh/examples/Surface_mesh/draw_surface_mesh_small_faces.h @@ -78,7 +78,7 @@ protected: bool issmall=false; // Default color of faces - CGAL::Color c(75,160,255); + CGAL::IO::Color c(75,160,255); // Compare the size of the face with the % m_threshold bool exist; @@ -89,7 +89,7 @@ protected: // It it is smaller, color the face in red. if (get(faces_size, fh)::vertex_descriptor vertex_descriptor; int main(int /* argc */, char* argv[]) { Mesh sm; - if(!CGAL::read_polygon_mesh(argv[1], sm)) + if(!CGAL::IO::read_polygon_mesh(argv[1], sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh/examples/Surface_mesh/sm_do_intersect.cpp b/Surface_mesh/examples/Surface_mesh/sm_do_intersect.cpp index c6583404588..974394a27dc 100644 --- a/Surface_mesh/examples/Surface_mesh/sm_do_intersect.cpp +++ b/Surface_mesh/examples/Surface_mesh/sm_do_intersect.cpp @@ -113,7 +113,7 @@ int main(int argc, char* argv[]) std::cout.precision(17); Mesh P, Q; - if(!CGAL::read_polygon_mesh(argv[1], P) || !CGAL::read_polygon_mesh(argv[2], Q)) + if(!CGAL::IO::read_polygon_mesh(argv[1], P) || !CGAL::IO::read_polygon_mesh(argv[2], Q)) { std::cerr << "Invalid input files." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh/examples/Surface_mesh/sm_draw_small_faces.cpp b/Surface_mesh/examples/Surface_mesh/sm_draw_small_faces.cpp index a243b14e4f3..694e0cd995d 100644 --- a/Surface_mesh/examples/Surface_mesh/sm_draw_small_faces.cpp +++ b/Surface_mesh/examples/Surface_mesh/sm_draw_small_faces.cpp @@ -17,7 +17,7 @@ int main(int argc, char* argv[]) const char* filename = (argc>1) ? argv[1] : "data/elephant.off"; Mesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh/examples/Surface_mesh/sm_join.cpp b/Surface_mesh/examples/Surface_mesh/sm_join.cpp index 187c816e142..12770121943 100644 --- a/Surface_mesh/examples/Surface_mesh/sm_join.cpp +++ b/Surface_mesh/examples/Surface_mesh/sm_join.cpp @@ -16,7 +16,7 @@ int main(int argc, char* argv[]) const char* filename2 = (argc>2) ? argv[2] : "data/quad.off"; Mesh sm1, sm2; - if(!CGAL::read_polygon_mesh(filename1, sm1) || !CGAL::read_polygon_mesh(filename2, sm2)) + if(!CGAL::IO::read_polygon_mesh(filename1, sm1) || !CGAL::IO::read_polygon_mesh(filename2, sm2)) { std::cerr << "Invalid input files." << std::endl; return EXIT_FAILURE; @@ -33,5 +33,5 @@ int main(int argc, char* argv[]) for(vertex_descriptor vd : vertices(sm1)) std::cerr << vd << " " << name1[vd] < CGAL_DEPRECATED bool read_mesh(Surface_mesh& sm, const std::string& filename) { - return read_polygon_mesh(filename, sm); + return IO::read_polygon_mesh(filename, sm); } /*! \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_polygon_mesh()` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_polygon_mesh()` should be used instead. */ template CGAL_DEPRECATED bool write_mesh(const Surface_mesh& mesh, const std::string& filename) { - return write_polygon_mesh(filename, mesh); + return IO::write_polygon_mesh(filename, mesh); } #endif // CGAL_NO_DEPRECATED_CODE diff --git a/Surface_mesh/include/CGAL/Surface_mesh/IO/3MF.h b/Surface_mesh/include/CGAL/Surface_mesh/IO/3MF.h index 2f0b1d83f0c..227d0c9ec06 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/IO/3MF.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/IO/3MF.h @@ -30,6 +30,8 @@ namespace CGAL { +namespace IO { + // @todo generalize it to any model of `FaceGraph` and put it in BGL/IO (see read_OFF for the face color map) /*! @@ -60,9 +62,9 @@ bool read_3MF(const std::string& filename, std::vector all_points; std::vector all_triangles; std::vector names; - std::vector > all_colors; + std::vector > all_colors; - const bool success = CGAL::read_3MF(filename, all_points, all_triangles, all_colors, names); + const bool success = CGAL::IO::read_3MF(filename, all_points, all_triangles, all_colors, names); if(!success) { std::cerr << "Error in reading meshes." << std::endl; @@ -79,7 +81,7 @@ bool read_3MF(const std::string& filename, SMesh sm; TriangleRange triangles = all_triangles[i]; PointRange points = all_points[i]; - std::vector colors = all_colors[i]; + std::vector colors = all_colors[i]; // Create the surface mesh from scratch std::size_t n(points.size()); @@ -119,8 +121,8 @@ bool read_3MF(const std::string& filename, if(need_pmap) { - typename SMesh::template Property_map fcolor = - sm.template add_property_map("f:color", first).first; + typename SMesh::template Property_map fcolor = + sm.template add_property_map("f:color", first).first; for(std::size_t pid=0, cs=colors.size(); pid CGAL_DEPRECATED int read_3mf(const std::string& filename, std::vector >& output) { - return read_3MF(filename, output); + return IO::read_3MF(filename, output); } #endif // CGAL_NO_DEPRECATED_CODE diff --git a/Surface_mesh/include/CGAL/Surface_mesh/IO/OFF.h b/Surface_mesh/include/CGAL/Surface_mesh/IO/OFF.h index d8200a7592e..eea075e92ac 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/IO/OFF.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/IO/OFF.h @@ -36,9 +36,8 @@ namespace CGAL { //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// // Read - -namespace internal { namespace IO { +namespace internal { template > @@ -60,7 +59,7 @@ template DefaultMap; + CGAL::IO::Color> DefaultMap; typedef DefaultMap DefaultMap_const; public: typedef typename internal_np::Lookup_named_param_def DefaultMap; + CGAL::IO::Color> DefaultMap; typedef DefaultMap DefaultMap_const; public: @@ -107,9 +106,9 @@ bool read_OFF_with_or_without_fcolors(std::istream& is, { typedef Surface_mesh Mesh; typedef typename Mesh::Face_index Face_index; - typedef CGAL::Color Color; + typedef CGAL::IO::Color Color; - typedef typename CGAL::internal::IO::GetFaceColorMap::type FCM; + typedef typename GetFaceColorMap::type FCM; using parameters::choose_parameter; using parameters::is_default_parameter; @@ -148,7 +147,7 @@ bool read_OFF_with_or_without_vtextures(std::istream& is, typedef typename GetK, CGAL_BGL_NP_CLASS>::Kernel K; typedef typename K::Point_2 Texture; - typedef typename CGAL::internal::IO::GetVertexTextureMap::type VTM; + typedef typename GetVertexTextureMap::type VTM; using parameters::choose_parameter; using parameters::is_default_parameter; @@ -185,8 +184,8 @@ bool read_OFF_with_or_without_vcolors(std::istream& is, typedef Surface_mesh Mesh; typedef typename Mesh::Vertex_index Vertex_index; - typedef CGAL::Color Color; - typedef typename CGAL::internal::IO::GetVertexColorMap::type VCM; + typedef CGAL::IO::Color Color; + typedef typename GetVertexColorMap::type VCM; using parameters::choose_parameter; using parameters::is_default_parameter; @@ -225,7 +224,7 @@ bool read_OFF_with_or_without_vnormals(std::istream& is, typedef typename GetK, CGAL_BGL_NP_CLASS>::Kernel K; typedef typename K::Vector_3 Normal; - typedef typename CGAL::internal::IO::GetVertexNormalMap::type VNM; + typedef typename GetVertexNormalMap::type VNM; using parameters::choose_parameter; using parameters::is_default_parameter; @@ -253,7 +252,6 @@ bool read_OFF_with_or_without_vnormals(std::istream& is, } } -} // namespace IO } // namespace internal /// \ingroup PkgSurfaceMeshIOFuncOFF @@ -301,7 +299,7 @@ bool read_OFF_with_or_without_vnormals(std::istream& is, /// \cgalParamNBegin{vertex_color_map} /// \cgalParamDescription{a property map associating colors to the vertices of `sm`} /// \cgalParamType{a class model of `WritablePropertyMap` with `Surface_mesh::Vertex_index` -/// as key type and `CGAL::Color` as value type} +/// as key type and `CGAL::IO::Color` as value type} /// \cgalParamDefault{If this parameter is unsused, vertex colors (if they exist) /// will be written in an internal property map called `v:color`.} /// \cgalParamNEnd @@ -317,7 +315,7 @@ bool read_OFF_with_or_without_vnormals(std::istream& is, /// \cgalParamNBegin{face_color_map} /// \cgalParamDescription{a property map associating colors to the faces of `sm`} /// \cgalParamType{a class model of `WritablePropertyMap` with `Surface_mesh::Face_index` -/// as key type and `CGAL::Color` as value type} +/// as key type and `CGAL::IO::Color` as value type} /// \cgalParamDefault{If this parameter is unsused, face colors (if they exist) /// will be written in an internal property map called `f:color`.} /// \cgalParamNEnd @@ -340,43 +338,70 @@ bool read_OFF(std::istream& is, CGAL::File_scanner_OFF scanner(is, false); is.seekg(pos); - bool res = internal::IO::read_OFF_with_or_without_vnormals(is, sm, scanner, np); + bool res = internal::read_OFF_with_or_without_vnormals(is, sm, scanner, np); if(!res) sm.clear(); return res; } -#ifndef CGAL_NO_DEPRECATED_CODE - -/*! - \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::read_OFF(std::istream&, const Surface_mesh&)` should be used instead. -*/ -template -CGAL_DEPRECATED bool read_off(std::istream& is, Surface_mesh& sm, const CGAL_BGL_NP_CLASS& np) -{ - return read_OFF(is, sm, np); -} - -/*! - \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::read_OFF(std::istream&, const Surface_mesh&)` should be used instead. -*/ template -CGAL_DEPRECATED bool read_off(std::istream& is, Surface_mesh& sm) +bool read_OFF(std::istream& is, + Surface_mesh& sm) { return read_OFF(is, sm, parameters::all_default()); } +template +bool read_OFF(const std::string& fname, + Surface_mesh& sm, + const CGAL_BGL_NP_CLASS& np) +{ + std::ifstream in(fname.c_str()); + return read_OFF(in, sm, np); +} + +template +bool read_OFF(const std::string& fname, + Surface_mesh& sm) +{ + return read_OFF(fname, sm, parameters::all_default()); +} + +} // namespace IO + +#ifndef CGAL_NO_DEPRECATED_CODE + /*! \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::read_OFF(std::istream&, const Surface_mesh&)` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_OFF(std::istream&, const Surface_mesh&)` should be used instead. +*/ +template +CGAL_DEPRECATED bool read_off(std::istream& is, Surface_mesh& sm, const CGAL_BGL_NP_CLASS& np) +{ + return IO::read_OFF(is, sm, np); +} + +/*! + \ingroup PkgSurfaceMeshIOFuncDeprecated + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_OFF(std::istream&, const Surface_mesh&)` should be used instead. +*/ +template +CGAL_DEPRECATED bool read_off(std::istream& is, Surface_mesh& sm) +{ + return IO::read_OFF(is, sm, parameters::all_default()); +} + +/*! + \ingroup PkgSurfaceMeshIOFuncDeprecated + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_OFF(std::istream&, const Surface_mesh&)` should be used instead. */ template CGAL_DEPRECATED bool read_off(Surface_mesh& sm, const std::string& filename) { - return read_OFF(filename, sm, parameters::all_default()); + return IO::read_OFF(filename, sm, parameters::all_default()); } #endif // CGAL_NO_DEPRECATED_CODE @@ -395,7 +420,7 @@ bool write_OFF_with_or_without_fcolors(std::ostream& os, { typedef Surface_mesh Mesh; typedef typename Mesh::Face_index Face_index; - typedef CGAL::Color Color; + typedef CGAL::IO::Color Color; using parameters::choose_parameter; using parameters::is_default_parameter; @@ -405,7 +430,7 @@ bool write_OFF_with_or_without_fcolors(std::ostream& os, typename Mesh::template Property_map fcolors; bool has_internal_fcolors; - std::tie(fcolors, has_internal_fcolors) = sm.template property_map("f:color"); + std::tie(fcolors, has_internal_fcolors) = sm.template property_map("f:color"); if(!has_fcolors && has_internal_fcolors && std::distance(fcolors.begin(), fcolors.end()) > 0) return write_OFF_BGL(os, sm, np.face_color_map(fcolors)); @@ -447,7 +472,7 @@ bool write_OFF_with_or_without_vcolors(std::ostream& os, { typedef Surface_mesh Mesh; typedef typename Mesh::Vertex_index Vertex_index; - typedef CGAL::Color Color; + typedef CGAL::IO::Color Color; using parameters::choose_parameter; using parameters::is_default_parameter; @@ -457,7 +482,7 @@ bool write_OFF_with_or_without_vcolors(std::ostream& os, typename Mesh::template Property_map vcolors; bool has_internal_vcolors; - std::tie(vcolors, has_internal_vcolors) = sm.template property_map("v:color"); + std::tie(vcolors, has_internal_vcolors) = sm.template property_map("v:color"); if(!has_vcolors && has_internal_vcolors && std::distance(vcolors.begin(), vcolors.end()) > 0) return write_OFF_with_or_without_vtextures(os, sm, np.vertex_color_map(vcolors)); @@ -493,7 +518,6 @@ bool write_OFF_with_or_without_vnormals(std::ostream& os, } } // namespace internal -} // namespace IO /// \ingroup PkgSurfaceMeshIOFuncOFF /// @@ -535,7 +559,7 @@ bool write_OFF_with_or_without_vnormals(std::ostream& os, /// \cgalParamNBegin{vertex_color_map} /// \cgalParamDescription{a property map associating colors to the vertices of `sm`} /// \cgalParamType{a class model of `ReadablePropertyMap` with `Surface_mesh::Vertex_index` -/// as key type and `CGAL::Color` as value type} +/// as key type and `CGAL::IO::Color` as value type} /// \cgalParamDefault{vertex colors will be output using the internal property map, if it exists.} /// \cgalParamNEnd /// @@ -549,7 +573,7 @@ bool write_OFF_with_or_without_vnormals(std::ostream& os, /// \cgalParamNBegin{face_color_map} /// \cgalParamDescription{a property map associating colors to the faces of `sm`} /// \cgalParamType{a class model of `ReadablePropertyMap` with `Surface_mesh::Face_index` -/// as key type and `CGAL::Color` as value type} +/// as key type and `CGAL::IO::Color` as value type} /// \cgalParamDefault{face colors will be output using the internal property map, if it exists.} /// \cgalParamNEnd /// @@ -573,41 +597,43 @@ bool write_OFF(std::ostream& os, const bool has_vpoints = !(is_default_parameter(get_parameter(np, internal_np::vertex_point))); if(has_vpoints) - return IO::internal::write_OFF_with_or_without_vnormals(os, sm, np); + return internal::write_OFF_with_or_without_vnormals(os, sm, np); - return IO::internal::write_OFF_with_or_without_vnormals(os, sm, np.vertex_point_map(get_const_property_map(CGAL::vertex_point, sm))); + return internal::write_OFF_with_or_without_vnormals(os, sm, np.vertex_point_map(get_const_property_map(CGAL::vertex_point, sm))); } +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_OFF(std::ostream&, const Surface_mesh&)` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_OFF(std::ostream&, const Surface_mesh&)` should be used instead. */ template CGAL_DEPRECATED bool write_off(std::ostream& os, const Surface_mesh& sm, const CGAL_BGL_NP_CLASS& np) { - return write_OFF(os, sm, np); + return IO::write_OFF(os, sm, np); } /*! \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_OFF(std::ostream&, const Surface_mesh&)` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_OFF(std::ostream&, const Surface_mesh&)` should be used instead. */ template CGAL_DEPRECATED bool write_off(std::ostream& os, const Surface_mesh& sm) { - return write_OFF(os, sm, parameters::all_default()); + return IO::write_OFF(os, sm, parameters::all_default()); } /*! \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_OFF(std::ostream&, const Surface_mesh&)` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_OFF(std::ostream&, const Surface_mesh&)` should be used instead. */ template CGAL_DEPRECATED bool write_off(const Surface_mesh& sm, const std::string& filename) { - return write_OFF(filename, sm, parameters::all_default()); + return IO::write_OFF(filename, sm, parameters::all_default()); } #endif // CGAL_NO_DEPRECATED_CODE diff --git a/Surface_mesh/include/CGAL/Surface_mesh/IO/PLY.h b/Surface_mesh/include/CGAL/Surface_mesh/IO/PLY.h index f19a3b9d9b2..b6196d5908c 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/IO/PLY.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/IO/PLY.h @@ -89,9 +89,9 @@ private: int m_normals; typename Surface_mesh::template Property_map m_normal_map; int m_vcolors; - typename Surface_mesh::template Property_map m_vcolor_map; + typename Surface_mesh::template Property_map m_vcolor_map; int m_fcolors; - typename Surface_mesh::template Property_map m_fcolor_map; + typename Surface_mesh::template Property_map m_fcolor_map; bool m_use_int32_t; std::string m_index_tag; std::vector m_vertex_properties; @@ -116,7 +116,7 @@ public: delete m_halfedge_properties[i]; } - bool has_simplex_specific_property(IO::internal::PLY_read_number* property, Vertex_index) + bool has_simplex_specific_property(internal::PLY_read_number* property, Vertex_index) { const std::string& name = property->name(); if(name == "x" || @@ -142,13 +142,13 @@ public: { ++ m_vcolors; if(m_vcolors == 3) - m_vcolor_map = m_mesh.template add_property_map("v:color").first; + m_vcolor_map = m_mesh.template add_property_map("v:color").first; return true; } return false; } - bool has_simplex_specific_property(IO::internal::PLY_read_number* property, Face_index) + bool has_simplex_specific_property(internal::PLY_read_number* property, Face_index) { const std::string& name = property->name(); if(name == "vertex_indices" || name == "vertex_index") @@ -165,14 +165,14 @@ public: { ++ m_fcolors; if(m_fcolors == 3) - m_fcolor_map = m_mesh.template add_property_map("f:color").first; + m_fcolor_map = m_mesh.template add_property_map("f:color").first; return true; } return false; } - bool has_simplex_specific_property(IO::internal::PLY_read_number* property, Edge_index) + bool has_simplex_specific_property(internal::PLY_read_number* property, Edge_index) { const std::string& name = property->name(); if(name == "v0" || name == "v1") @@ -180,7 +180,7 @@ public: return false; } - bool has_simplex_specific_property(IO::internal::PLY_read_number* property, Halfedge_index) + bool has_simplex_specific_property(internal::PLY_read_number* property, Halfedge_index) { const std::string& name = property->name(); if(name == "source" || name == "target") @@ -215,7 +215,7 @@ public: { for(std::size_t j = 0; j < element.number_of_properties(); ++ j) { - IO::internal::PLY_read_number* property = element.property(j); + internal::PLY_read_number* property = element.property(j); if(has_simplex_specific_property(property, Simplex())) continue; @@ -297,7 +297,7 @@ public: element.assign(r, "red"); element.assign(g, "green"); element.assign(b, "blue"); - m_vcolor_map[vi] = CGAL::Color(r, g, b); + m_vcolor_map[vi] = CGAL::IO::Color(r, g, b); } } @@ -339,7 +339,7 @@ public: element.assign(r, "red"); element.assign(g, "green"); element.assign(b, "blue"); - m_fcolor_map[fi] = CGAL::Color(r, g, b); + m_fcolor_map[fi] = CGAL::IO::Color(r, g, b); } } @@ -612,7 +612,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property char " << name << std::endl; - printers.push_back(new IO::internal::Char_property_printer(pmap)); + printers.push_back(new internal::Char_property_printer(pmap)); continue; } } @@ -622,7 +622,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property uchar " << name << std::endl; - printers.push_back(new IO::internal::Char_property_printer(pmap)); + printers.push_back(new internal::Char_property_printer(pmap)); continue; } } @@ -632,7 +632,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property short " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -642,7 +642,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property ushort " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -652,7 +652,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property int " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -662,7 +662,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property uint " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -672,7 +672,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property int " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -682,7 +682,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property uint " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -692,7 +692,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property float " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -702,7 +702,7 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, if(okay) { os << "property double " << name << std::endl; - printers.push_back(new IO::internal::Simple_property_printer(pmap)); + printers.push_back(new internal::Simple_property_printer(pmap)); continue; } } @@ -710,7 +710,6 @@ void fill_header(std::ostream& os, const Surface_mesh& sm, } } // namespace internal -} // namespace IO /// \ingroup PkgSurfaceMeshIOFuncPLY /// @@ -765,8 +764,8 @@ bool read_PLY(std::istream& is, return false; } - IO::internal::PLY_reader reader(verbose); - IO::internal::Surface_mesh_filler

filler(sm); + internal::PLY_reader reader(verbose); + internal::Surface_mesh_filler

filler(sm); if(!(reader.init(is))) { @@ -778,7 +777,7 @@ bool read_PLY(std::istream& is, for(std::size_t i = 0; i < reader.number_of_elements(); ++ i) { - IO::internal::PLY_element& element = reader.element(i); + internal::PLY_element& element = reader.element(i); bool is_vertex =(element.name() == "vertex" || element.name() == "vertices"); bool is_face = false; @@ -816,7 +815,7 @@ bool read_PLY(std::istream& is, { for(std::size_t k = 0; k < element.number_of_properties(); ++ k) { - IO::internal::PLY_read_number* property = element.property(k); + internal::PLY_read_number* property = element.property(k); property->get(is); if(is.fail()) return false; @@ -853,16 +852,18 @@ bool read_PLY(std::istream& is, Surface_mesh

& sm) /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::read_PLY(std::ostream&, const Surface_mesh&)` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::read_PLY(std::ostream&, const Surface_mesh&)` should be used instead. */ template CGAL_DEPRECATED bool read_ply(std::istream& is, Surface_mesh

& sm, std::string& comments) { - return read_PLY(is, sm, comments); + return IO::read_PLY(is, sm, comments); } #endif // CGAL_NO_DEPRECATED_CODE @@ -871,6 +872,8 @@ CGAL_DEPRECATED bool read_ply(std::istream& is, Surface_mesh

& sm, std::string //////////////////////////////////////////////////////////////////////////////////////////////////// // Write +namespace IO { + /// \ingroup PkgSurfaceMeshIOFuncPLY /// /// \brief inserts the surface mesh in an output stream in the \ref IOStreamPLY. @@ -924,7 +927,7 @@ bool write_PLY(std::ostream& os, set_stream_precision_from_NP(os, np); os << "ply" << std::endl - << ((get_mode(os) == IO::BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl + << ((get_mode(os) == BINARY) ? "format binary_little_endian 1.0" : "format ascii 1.0") << std::endl << "comment Generated by the CGAL library" << std::endl; if(comments != std::string()) @@ -940,20 +943,20 @@ bool write_PLY(std::ostream& os, os << "element vertex " << sm.number_of_vertices() << std::endl; - std::vector*> vprinters; - IO::internal::fill_header(os, sm, vprinters); + std::vector*> vprinters; + internal::fill_header(os, sm, vprinters); os << "element face " << sm.number_of_faces() << std::endl; os << "property list uchar int vertex_indices" << std::endl; - std::vector*> fprinters; - IO::internal::fill_header(os, sm, fprinters); + std::vector*> fprinters; + internal::fill_header(os, sm, fprinters); - std::vector*> eprinters; + std::vector*> eprinters; if(sm.template properties().size() > 1) { std::ostringstream oss; - IO::internal::fill_header(oss, sm, eprinters); + internal::fill_header(oss, sm, eprinters); if(!eprinters.empty()) { @@ -964,11 +967,11 @@ bool write_PLY(std::ostream& os, } } - std::vector*> hprinters; + std::vector*> hprinters; if(sm.template properties().size() > 1) { std::ostringstream oss; - IO::internal::fill_header(oss, sm, hprinters); + internal::fill_header(oss, sm, hprinters); if(!hprinters.empty()) { @@ -989,10 +992,10 @@ bool write_PLY(std::ostream& os, for(std::size_t i = 0; i < vprinters.size(); ++ i) { vprinters[i]->print(os, vi); - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << " "; } - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << std::endl; reindex[std::size_t(vi)] = n++; @@ -1007,7 +1010,7 @@ bool write_PLY(std::ostream& os, for(VIndex vi : CGAL::vertices_around_face(sm.halfedge(fi), sm)) polygon.push_back(reindex[std::size_t(vi)]); - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) { os << polygon.size() << " "; for(std::size_t i = 0; i < polygon.size(); ++ i) @@ -1027,11 +1030,11 @@ bool write_PLY(std::ostream& os, for(std::size_t i = 0; i < fprinters.size(); ++ i) { fprinters[i]->print(os, fi); - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << " "; } - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << std::endl; } @@ -1041,7 +1044,7 @@ bool write_PLY(std::ostream& os, { int v0 = reindex[std::size_t(sm.vertex(ei, 0))]; int v1 = reindex[std::size_t(sm.vertex(ei, 1))]; - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) { os << v0 << " " << v1 << " "; } @@ -1054,11 +1057,11 @@ bool write_PLY(std::ostream& os, for(std::size_t i = 0; i < eprinters.size(); ++ i) { eprinters[i]->print(os, ei); - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << " "; } - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << std::endl; } } @@ -1069,7 +1072,7 @@ bool write_PLY(std::ostream& os, { int source = reindex[std::size_t(sm.source(hi))]; int target = reindex[std::size_t(sm.target(hi))]; - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) { os << source << " " << target << " "; } @@ -1082,11 +1085,11 @@ bool write_PLY(std::ostream& os, for(std::size_t i = 0; i < hprinters.size(); ++ i) { hprinters[i]->print(os, hi); - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << " "; } - if(get_mode(os) == IO::ASCII) + if(get_mode(os) == ASCII) os << std::endl; } } @@ -1127,19 +1130,26 @@ bool write_PLY(std::ostream& os, const Surface_mesh

& sm) /// \endcond +} // namespace IO + #ifndef CGAL_NO_DEPRECATED_CODE /*! \ingroup PkgSurfaceMeshIOFuncDeprecated - \deprecated This function is deprecated since \cgal 5.2, `CGAL::write_PLY(std::ostream&, const Surface_mesh&)` should be used instead. + \deprecated This function is deprecated since \cgal 5.3, `CGAL::IO::write_PLY(std::ostream&, const Surface_mesh&)` should be used instead. */ template CGAL_DEPRECATED bool write_ply(std::ostream& os, const Surface_mesh

& sm, const std::string& comments) { - return write_PLY(os, sm, comments); + return IO::write_PLY(os, sm, comments); } +template +CGAL_DEPRECATED bool write_ply(std::ostream& os, const Surface_mesh

& sm) +{ + return write_PLY(os, sm, ""); +} #endif // CGAL_NO_DEPRECATED_CODE } // namespace CGAL diff --git a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h index da54a33d7a4..75a01cc8be5 100644 --- a/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h +++ b/Surface_mesh/include/CGAL/Surface_mesh/Surface_mesh.h @@ -2171,7 +2171,7 @@ private: //------------------------------------------------------- private data template std::ostream& operator<<(std::ostream& os, const Surface_mesh

& sm) { - write_OFF(os, sm); + IO::write_OFF(os, sm); return os; } @@ -2183,7 +2183,7 @@ private: //------------------------------------------------------- private data template std::istream& operator>>(std::istream& is, Surface_mesh

& sm) { - read_OFF(is, sm); + IO::read_OFF(is, sm); return is; } diff --git a/Surface_mesh/test/Surface_mesh/SM_common.h b/Surface_mesh/test/Surface_mesh/SM_common.h index 1dc68f0094d..f0f9d1e0988 100644 --- a/Surface_mesh/test/Surface_mesh/SM_common.h +++ b/Surface_mesh/test/Surface_mesh/SM_common.h @@ -117,7 +117,7 @@ struct Surface_fixture_3 { struct Cube_fixture { - Cube_fixture() { CGAL::read_polygon_mesh("cube.off", m); } + Cube_fixture() { CGAL::IO::read_polygon_mesh("cube.off", m); } Sm m; diff --git a/Surface_mesh/test/Surface_mesh/sm_open_colored_off.cpp b/Surface_mesh/test/Surface_mesh/sm_open_colored_off.cpp index b76191918d7..35ff58cafb9 100644 --- a/Surface_mesh/test/Surface_mesh/sm_open_colored_off.cpp +++ b/Surface_mesh/test/Surface_mesh/sm_open_colored_off.cpp @@ -31,20 +31,20 @@ void OpenOFF(int i) CGAL_assertion(in && !surface_mesh.is_empty()); - SMesh::Property_map fcolors = - surface_mesh.property_map("f:color").first; + SMesh::Property_map fcolors = + surface_mesh.property_map("f:color").first; - SMesh::Property_map vcolors = - surface_mesh.property_map("v:color").first; - CGAL::Color c = fcolors[*(surface_mesh.faces().begin())]; - CGAL_assertion(c== CGAL::Color(229,0,0)); + SMesh::Property_map vcolors = + surface_mesh.property_map("v:color").first; + CGAL::IO::Color c = fcolors[*(surface_mesh.faces().begin())]; + CGAL_assertion(c== CGAL::IO::Color(229,0,0)); c = fcolors[*(--surface_mesh.faces().end())]; - CGAL_assertion(c== CGAL::Color(0,0,229)); + CGAL_assertion(c== CGAL::IO::Color(0,0,229)); c = vcolors[*(surface_mesh.vertices().begin())]; - CGAL_assertion((c== CGAL::Color(229,0,0))); + CGAL_assertion((c== CGAL::IO::Color(229,0,0))); c = vcolors[*(--surface_mesh.vertices().end())]; - CGAL_assertion((c== CGAL::Color(0,0,229))); + CGAL_assertion((c== CGAL::IO::Color(0,0,229))); } diff --git a/Surface_mesh/test/Surface_mesh/sm_ply_io.cpp b/Surface_mesh/test/Surface_mesh/sm_ply_io.cpp index 942fe50b965..d26aca67d68 100644 --- a/Surface_mesh/test/Surface_mesh/sm_ply_io.cpp +++ b/Surface_mesh/test/Surface_mesh/sm_ply_io.cpp @@ -16,7 +16,7 @@ int main() { std::ifstream in("colored_tetra.ply"); SMesh mesh; - CGAL::read_PLY(in, mesh); + CGAL::IO::read_PLY(in, mesh); std::cerr << "Read mesh with " << mesh.number_of_vertices() << " vertices and " << mesh.number_of_faces() << " faces" << std::endl; @@ -37,11 +37,11 @@ int main() // Append second mesh std::ifstream in2("tetra.ply"); - CGAL::read_PLY(in2, mesh); + CGAL::IO::read_PLY(in2, mesh); std::ofstream out("out.ply"); -// CGAL::set_binary_mode(out); - CGAL::write_PLY(out, mesh); +// CGAL::IO::set_binary_mode(out); + CGAL::IO::write_PLY(out, mesh); return 0; } diff --git a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_2_example.cpp b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_2_example.cpp index 30781891e59..8f2687ffe69 100644 --- a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_2_example.cpp +++ b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_2_example.cpp @@ -20,7 +20,7 @@ int main(int argc, char** argv) // read input surface triangle mesh Mesh mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_example.cpp b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_example.cpp index bf12a72cc6f..ebaa4be8582 100644 --- a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_example.cpp +++ b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_approximation_example.cpp @@ -23,7 +23,7 @@ int main(int argc, char** argv) // read input surface triangle mesh Mesh mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_class_interface_example.cpp b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_class_interface_example.cpp index 2a61fab2f81..885bfcd3de9 100644 --- a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_class_interface_example.cpp +++ b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_class_interface_example.cpp @@ -24,7 +24,7 @@ int main(int argc, char** argv) // reads input surface triangle mesh Mesh mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_isotropic_metric_example.cpp b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_isotropic_metric_example.cpp index 116f53dfbd9..f2a62bf1fac 100644 --- a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_isotropic_metric_example.cpp +++ b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_isotropic_metric_example.cpp @@ -79,7 +79,7 @@ int main(int argc, char** argv) // reads input surface triangle mesh Mesh mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_segmentation_example.cpp b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_segmentation_example.cpp index dc3c5a57b8a..ef6af2112c2 100644 --- a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_segmentation_example.cpp +++ b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_segmentation_example.cpp @@ -20,7 +20,7 @@ int main(int argc, char** argv) // reads input surface triangle mesh Mesh mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_simple_approximation_example.cpp b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_simple_approximation_example.cpp index 81f326e4573..8baa4f1b6a3 100644 --- a/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_simple_approximation_example.cpp +++ b/Surface_mesh_approximation/examples/Surface_mesh_approximation/vsa_simple_approximation_example.cpp @@ -18,7 +18,7 @@ int main(int argc, char** argv) // reads input surface triangle mesh Mesh mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_deformation/examples/Surface_mesh_deformation/all_roi_assign_example_Surface_mesh.cpp b/Surface_mesh_deformation/examples/Surface_mesh_deformation/all_roi_assign_example_Surface_mesh.cpp index a66e4152b3c..e7e97aaa051 100644 --- a/Surface_mesh_deformation/examples/Surface_mesh_deformation/all_roi_assign_example_Surface_mesh.cpp +++ b/Surface_mesh_deformation/examples/Surface_mesh_deformation/all_roi_assign_example_Surface_mesh.cpp @@ -18,7 +18,7 @@ int main(int argc, char** argv) const char* filename = (argc > 1) ? argv[1] : "data/plane.off"; Mesh mesh; - if(!CGAL::read_polygon_mesh(filename, mesh)) + if(!CGAL::IO::read_polygon_mesh(filename, mesh)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh_deformation/examples/Surface_mesh_deformation/k_ring_roi_translate_rotate_Surface_mesh.cpp b/Surface_mesh_deformation/examples/Surface_mesh_deformation/k_ring_roi_translate_rotate_Surface_mesh.cpp index a881936c32b..6d807a09ce2 100644 --- a/Surface_mesh_deformation/examples/Surface_mesh_deformation/k_ring_roi_translate_rotate_Surface_mesh.cpp +++ b/Surface_mesh_deformation/examples/Surface_mesh_deformation/k_ring_roi_translate_rotate_Surface_mesh.cpp @@ -49,7 +49,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/plane.off"; Mesh mesh; - if(!CGAL::read_polygon_mesh(filename, mesh)) + if(!CGAL::IO::read_polygon_mesh(filename, mesh)) { std::cerr<< "Cannot open data/plane.off"; return 1; diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/discrete_authalic.cpp b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/discrete_authalic.cpp index 1f71c6e1d69..6ed0453a3f4 100644 --- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/discrete_authalic.cpp +++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/discrete_authalic.cpp @@ -31,7 +31,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/three_peaks.off"; SurfaceMesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/lscm.cpp b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/lscm.cpp index 43fb06a8785..e44f6545017 100644 --- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/lscm.cpp +++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/lscm.cpp @@ -41,7 +41,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/lion.off"; SurfaceMesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/orbifold.cpp b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/orbifold.cpp index 44eaf8f6ec5..ce1610568d4 100644 --- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/orbifold.cpp +++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/orbifold.cpp @@ -48,7 +48,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/bear.off"; SurfaceMesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/simple_parameterization.cpp b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/simple_parameterization.cpp index b40a8bf48cc..c9eabe71a45 100644 --- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/simple_parameterization.cpp +++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/simple_parameterization.cpp @@ -26,7 +26,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/nefertiti.off"; SurfaceMesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cerr << "Invalid input file." << std::endl; return EXIT_FAILURE; diff --git a/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp b/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp index 79187d8c4d7..d25e1b83954 100644 --- a/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp +++ b/Surface_mesh_parameterization/test/Surface_mesh_parameterization/extensive_parameterization_test.cpp @@ -79,7 +79,7 @@ typedef boost::graph_traits::halfedge_descriptor SM_SE_halfedge int main(int, char**) { std::cout.precision(17); - CGAL::set_pretty_mode(std::cout); + CGAL::IO::set_pretty_mode(std::cout); // *************************************************************************** // Default case diff --git a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/extract_segmentation_into_mesh_example.cpp b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/extract_segmentation_into_mesh_example.cpp index 189f068b136..74d48718f72 100644 --- a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/extract_segmentation_into_mesh_example.cpp +++ b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/extract_segmentation_into_mesh_example.cpp @@ -20,7 +20,7 @@ int main(int argc, char** argv ) const char* filename = (argc > 1) ? argv[1] : "data/cactus.off"; SM mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_LCC_example.cpp b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_LCC_example.cpp index 543e8563155..b21941ac293 100644 --- a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_LCC_example.cpp +++ b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_LCC_example.cpp @@ -21,7 +21,7 @@ int main(int argc, char** argv) // create and read LCC LCC mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_SM_example.cpp b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_SM_example.cpp index 9aebc8cb0fa..2d8391fa781 100644 --- a/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_SM_example.cpp +++ b/Surface_mesh_segmentation/examples/Surface_mesh_segmentation/segmentation_from_sdf_values_SM_example.cpp @@ -21,7 +21,7 @@ int main(int argc, char** argv ) const char* filename = (argc > 1) ? argv[1] : "data/cactus.off"; Mesh mesh; - if(!CGAL::Polygon_mesh_processing::read_polygon_mesh(filename, mesh) || + if(!CGAL::Polygon_mesh_processing::IO::read_polygon_mesh(filename, mesh) || !CGAL::is_triangle_mesh(mesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_sequence.cpp b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_sequence.cpp index 512b2882ae0..e4d6b38763b 100644 --- a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_sequence.cpp +++ b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_sequence.cpp @@ -82,7 +82,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/elephant.off"; Triangle_mesh tmesh; - if(!CGAL::read_polygon_mesh(filename, tmesh) || + if(!CGAL::IO::read_polygon_mesh(filename, tmesh) || !CGAL::is_triangle_mesh(tmesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_with_locate.cpp b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_with_locate.cpp index 5ce5baa5733..12bc9c64b95 100644 --- a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_with_locate.cpp +++ b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_path_with_locate.cpp @@ -37,7 +37,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/elephant.off"; Triangle_mesh tmesh; - if(!CGAL::read_polygon_mesh(filename, tmesh) || + if(!CGAL::IO::read_polygon_mesh(filename, tmesh) || !CGAL::is_triangle_mesh(tmesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths.cpp b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths.cpp index 14109508355..09fa0cd6ac9 100644 --- a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths.cpp +++ b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths.cpp @@ -23,7 +23,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/elephant.off"; Triangle_mesh tmesh; - if(!CGAL::read_polygon_mesh(filename, tmesh) || + if(!CGAL::IO::read_polygon_mesh(filename, tmesh) || !CGAL::is_triangle_mesh(tmesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths_multiple_sources.cpp b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths_multiple_sources.cpp index d543da6abde..38143178e3c 100644 --- a/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths_multiple_sources.cpp +++ b/Surface_mesh_shortest_path/examples/Surface_mesh_shortest_path/shortest_paths_multiple_sources.cpp @@ -24,7 +24,7 @@ int main(int argc, char** argv) const char* filename = (argc>1) ? argv[1] : "data/elephant.off"; Triangle_mesh tmesh; - if(!CGAL::read_polygon_mesh(filename, tmesh) || + if(!CGAL::IO::read_polygon_mesh(filename, tmesh) || !CGAL::is_triangle_mesh(tmesh)) { std::cerr << "Invalid input file." << std::endl; diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_bounded_normal_change.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_bounded_normal_change.cpp index 70f9e16be24..cf15718d3df 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_bounded_normal_change.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_bounded_normal_change.cpp @@ -71,7 +71,7 @@ int main(int argc, char** argv) .get_placement(Placement())); std::cout << t.time() << " sec" << std::endl; - CGAL::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_surface_mesh.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_surface_mesh.cpp index eaba77051d5..04c59231c85 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_surface_mesh.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_constrained_border_surface_mesh.cpp @@ -90,7 +90,7 @@ int main(int argc, char** argv) std::cout << "\nFinished!\n" << r << " edges removed.\n" << surface_mesh.number_of_edges() << " final edges.\n"; - CGAL::write_polygon_mesh((argc > 2) ? argv[2] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh((argc > 2) ? argv[2] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); // now check! for(halfedge_descriptor hd : halfedges(surface_mesh)) diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp index 338a17aed37..b7fe2fe732e 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_garland_heckbert.cpp @@ -68,7 +68,7 @@ int main(int argc, char** argv) std::cout << "\nFinished!\n" << r << " edges removed.\n" << surface_mesh.number_of_edges() << " final edges.\n"; - CGAL::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_linear_cell_complex.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_linear_cell_complex.cpp index 8fbc1763b86..c9551fc0419 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_linear_cell_complex.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_linear_cell_complex.cpp @@ -24,7 +24,7 @@ int main(int argc, char** argv) LCC lcc; const char* filename = (argc > 1) ? argv[1] : "data/cube-meshed.off"; - if(!CGAL::read_polygon_mesh(filename, lcc)) + if(!CGAL::IO::read_polygon_mesh(filename, lcc)) { std::cerr << "Failed to read input mesh: " << filename << std::endl; return EXIT_FAILURE; @@ -60,7 +60,7 @@ int main(int argc, char** argv) lcc.display_characteristics(std::cout) << ", is_valid=" << CGAL::is_valid(lcc) << std::endl; - CGAL::write_polygon_mesh((argc > 3 ? argv[3] : "out.off"), lcc); + CGAL::IO::write_polygon_mesh((argc > 3 ? argv[3] : "out.off"), lcc); return EXIT_SUCCESS; } diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_surface_mesh.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_surface_mesh.cpp index 063e6fd63c1..b40ae60efcc 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_surface_mesh.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_surface_mesh.cpp @@ -45,7 +45,7 @@ int main(int argc, char** argv) std::cout << "\nFinished!\n" << r << " edges removed.\n" << surface_mesh.number_of_edges() << " final edges.\n"; std::cout << "Time elapsed: " << std::chrono::duration_cast(end_time - start_time).count() << "ms" << std::endl; - CGAL::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_visitor_surface_mesh.cpp b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_visitor_surface_mesh.cpp index ffbe9574fe2..a85bab7aa0a 100644 --- a/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_visitor_surface_mesh.cpp +++ b/Surface_mesh_simplification/examples/Surface_mesh_simplification/edge_collapse_visitor_surface_mesh.cpp @@ -136,7 +136,7 @@ int main(int argc, char** argv) std::cout << "\nFinished!\n" << r << " edges removed.\n" << surface_mesh.number_of_edges() << " final edges.\n"; - CGAL::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_polygon_mesh((argc > 3) ? argv[3] : "out.off", surface_mesh, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp index 1c84930d608..ca29638a015 100644 --- a/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp +++ b/Surface_mesh_simplification/test/Surface_mesh_simplification/test_edge_collapse_Polyhedron_3.cpp @@ -17,7 +17,7 @@ #include "basics.h" #include "test_self_intersection.h" -#include +#include //#define TEST_TEST_TRACE_ENABLED @@ -48,7 +48,7 @@ namespace SMS = CGAL::Surface_mesh_simplification; typedef SMS::Edge_profile Profile; -typedef boost::shared_ptr SurfaceSP; +typedef std::shared_ptr SurfaceSP; // Constructs a flat polyhedron containing just the link of an edge or vertex. class Link_builder : public CGAL::Modifier_base diff --git a/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/MCF_Skeleton_LCC_example.cpp b/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/MCF_Skeleton_LCC_example.cpp index 881faad7fe7..491ebf21d91 100644 --- a/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/MCF_Skeleton_LCC_example.cpp +++ b/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/MCF_Skeleton_LCC_example.cpp @@ -24,7 +24,7 @@ typedef Skeleton::edge_descriptor Skeleton_edge; int main() { LCC lcc; - CGAL::read_polygon_mesh("data/elephant.off", lcc); + CGAL::IO::read_polygon_mesh("data/elephant.off", lcc); Skeleton skeleton; Skeletonization mcs(lcc); diff --git a/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/simple_mcfskel_LCC_example.cpp b/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/simple_mcfskel_LCC_example.cpp index dca0967772e..81169ddea8d 100644 --- a/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/simple_mcfskel_LCC_example.cpp +++ b/Surface_mesh_skeletonization/examples/Surface_mesh_skeletonization/simple_mcfskel_LCC_example.cpp @@ -53,7 +53,7 @@ struct Display_polylines{ int main() { LCC lcc; - CGAL::read_polygon_mesh("data/elephant.off", lcc); + CGAL::IO::read_polygon_mesh("data/elephant.off", lcc); Skeleton skeleton; diff --git a/Surface_mesh_topology/examples/Surface_mesh_topology/draw_facewidth.h b/Surface_mesh_topology/examples/Surface_mesh_topology/draw_facewidth.h index 520fffe69cf..c23906f10b3 100644 --- a/Surface_mesh_topology/examples/Surface_mesh_topology/draw_facewidth.h +++ b/Surface_mesh_topology/examples/Surface_mesh_topology/draw_facewidth.h @@ -19,18 +19,18 @@ struct Facewidth_draw_functor : public CGAL::DefaultDrawingFunctorLCC { return alcc.is_marked(dh, m_vertex_mark); } template - CGAL::Color vertex_color(const LCC& /* alcc */, + CGAL::IO::Color vertex_color(const LCC& /* alcc */, typename LCC::Dart_const_handle /* dh */) const - { return CGAL::Color(0, 255, 0); } + { return CGAL::IO::Color(0, 255, 0); } template bool colored_edge(const LCC& /*alcc*/, typename LCC::Dart_const_handle /*dh*/) const { return false; } template - CGAL::Color edge_color(const LCC& /* alcc*/, + CGAL::IO::Color edge_color(const LCC& /* alcc*/, typename LCC::Dart_const_handle /* dh */) const - { return CGAL::Color(0, 0, 255); } + { return CGAL::IO::Color(0, 0, 255); } template bool colored_face(const LCC& /* alcc */, @@ -38,9 +38,9 @@ struct Facewidth_draw_functor : public CGAL::DefaultDrawingFunctorLCC {return true;} template - CGAL::Color face_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const - { return alcc.is_marked(dh, m_face_mark)?CGAL::Color(255, 0, 0) - :CGAL::Color(211, 211, 211); } + CGAL::IO::Color face_color(const LCC& alcc, typename LCC::Dart_const_handle dh) const + { return alcc.is_marked(dh, m_face_mark)?CGAL::IO::Color(255, 0, 0) + :CGAL::IO::Color(211, 211, 211); } template bool colored_volume(const LCC& /* alcc */, diff --git a/Surface_mesh_topology/examples/Surface_mesh_topology/edgewidth_surface_mesh.cpp b/Surface_mesh_topology/examples/Surface_mesh_topology/edgewidth_surface_mesh.cpp index a78ffce8e4f..ce80de070e5 100644 --- a/Surface_mesh_topology/examples/Surface_mesh_topology/edgewidth_surface_mesh.cpp +++ b/Surface_mesh_topology/examples/Surface_mesh_topology/edgewidth_surface_mesh.cpp @@ -35,7 +35,7 @@ int main(int argc, char* argv[]) bool draw=(argc<3?false:(std::string(argv[2])=="-draw")); Mesh sm; - if(!CGAL::read_polygon_mesh(filename, sm)) + if(!CGAL::IO::read_polygon_mesh(filename, sm)) { std::cout<<"Cannot read file '"< - CGAL::Color vertex_color(const LCC& /* alcc */, + CGAL::IO::Color vertex_color(const LCC& /* alcc */, typename LCC::Dart_const_handle /* dh */) const - { return CGAL::Color(0,255,0); } + { return CGAL::IO::Color(0,255,0); } template bool colored_edge(const LCC& alcc, typename LCC::Dart_const_handle dh) const { return alcc.is_marked(dh, belong_to_cycle); } template - CGAL::Color edge_color(const LCC& /* alcc*/, + CGAL::IO::Color edge_color(const LCC& /* alcc*/, typename LCC::Dart_const_handle /* dh */) const - { return CGAL::Color(0, 0, 255); } + { return CGAL::IO::Color(0, 0, 255); } template bool colored_face(const LCC& /* alcc */, typename LCC::Dart_const_handle /* dh */) const {return true;} template - CGAL::Color face_color(const LCC& /* alcc */, + CGAL::IO::Color face_color(const LCC& /* alcc */, typename LCC::Dart_const_handle /* dh */) const - {return CGAL::Color(211, 211, 211);} + {return CGAL::IO::Color(211, 211, 211);} template bool colored_volume(const LCC& /* alcc */, diff --git a/Surface_mesh_topology/include/CGAL/Path_on_surface.h b/Surface_mesh_topology/include/CGAL/Path_on_surface.h index 7a56a82156a..71b4156eaec 100644 --- a/Surface_mesh_topology/include/CGAL/Path_on_surface.h +++ b/Surface_mesh_topology/include/CGAL/Path_on_surface.h @@ -1129,7 +1129,7 @@ public: CGAL_assertion(pp1.length() % primitiveSize == 0); pp1.cut(primitiveSize); CGAL_assertion(pp1.is_closed()); - return std::make_pair(pp1, originalLength / primitiveSize); + return std::make_pair(pp1, int(originalLength / primitiveSize)); } /// @return the turn between dart number i and dart number i+1. diff --git a/Surface_mesh_topology/include/CGAL/draw_face_graph_with_paths.h b/Surface_mesh_topology/include/CGAL/draw_face_graph_with_paths.h index 726cf03efd1..981cc54ca22 100644 --- a/Surface_mesh_topology/include/CGAL/draw_face_graph_with_paths.h +++ b/Surface_mesh_topology/include/CGAL/draw_face_graph_with_paths.h @@ -148,7 +148,7 @@ protected: if (m_current_dart!=lcc.darts().end()) { // We want to draw only one dart Dart_const_handle selected_dart=m_current_dart; //lcc.dart_handle(m_current_dart); - compute_edge(selected_dart, CGAL::Color(255,0,0)); + compute_edge(selected_dart, CGAL::IO::Color(255,0,0)); lcc.template mark_cell<1>(selected_dart, markedges); compute_vertex(selected_dart); @@ -217,7 +217,7 @@ protected: } while(cur!=dh); - // CGAL::Color c=m_fcolor.run(*lcc, dh); + // CGAL::IO::Color c=m_fcolor.run(*lcc, dh); face_begin(); //c); cur=dh; @@ -241,13 +241,13 @@ protected: { if (m_draw_marked_darts && m_amark!=LCC::INVALID_MARK && (lcc.is_marked(dh, m_amark) || lcc.is_marked(lcc.opposite2(dh), m_amark))) - { add_segment(p1, get_point(d2), CGAL::Color(0, 0, 255)); } + { add_segment(p1, get_point(d2), CGAL::IO::Color(0, 0, 255)); } else { add_segment(p1, get_point(d2)); } } } - void compute_edge(Dart_const_handle dh, const CGAL::Color& color) + void compute_edge(Dart_const_handle dh, const CGAL::IO::Color& color) { Point p1 = get_point(dh); Dart_const_handle d2 = lcc.other_extremity(dh); @@ -367,7 +367,7 @@ protected: { return; } CGAL::Random random(static_cast(i)); - CGAL::Color color=get_random_color(random); + CGAL::IO::Color color=get_random_color(random); add_point(get_point((*m_paths)[i].get_ith_dart(0)), color); for (std::size_t j=0; j<(*m_paths)[i].length(); ++j) diff --git a/Surface_mesher/archive/include/CGAL/Polyhedral_surface_3.h b/Surface_mesher/archive/include/CGAL/Polyhedral_surface_3.h index 2ef3e333cce..4ba75cb5959 100644 --- a/Surface_mesher/archive/include/CGAL/Polyhedral_surface_3.h +++ b/Surface_mesher/archive/include/CGAL/Polyhedral_surface_3.h @@ -31,7 +31,7 @@ #include #include -#include +#include #include #include @@ -274,8 +274,8 @@ public: typedef Intersection_data_structure_3 Subsegments_tree; #endif - typedef boost::shared_ptr Subfacets_tree_ptr; - typedef boost::shared_ptr Subsegments_tree_ptr; + typedef std::shared_ptr Subfacets_tree_ptr; + typedef std::shared_ptr Subsegments_tree_ptr; // typedef typename Subsegments_tree::Point_with_index // Intersection_point; @@ -1252,13 +1252,13 @@ public: Subfacets_tree_ptr subfacets_tree_ptr; Subsegments_tree_ptr subsegments_tree_ptr; typedef std::set Input_vertices; - boost::shared_ptr input_vertices_ptr; + std::shared_ptr input_vertices_ptr; typedef std::vector Corner_vertices; - boost::shared_ptr corner_vertices_ptr; + std::shared_ptr corner_vertices_ptr; typedef std::vector Edges_vertices; - boost::shared_ptr edges_vertices_ptr; + std::shared_ptr edges_vertices_ptr; #ifdef CGAL_SURFACE_MESHER_POLYHEDRAL_SURFACE_USE_PINPOLYHEDRON - typedef boost::shared_ptr PointInPolyhedron_ptr; + typedef std::shared_ptr PointInPolyhedron_ptr; PointInPolyhedron_ptr pinpolyhedron_ptr; #endif diff --git a/Surface_mesher/archive/include/CGAL/builder.h b/Surface_mesher/archive/include/CGAL/builder.h index fc0cd01ab6b..7984469e674 100644 --- a/Surface_mesher/archive/include/CGAL/builder.h +++ b/Surface_mesher/archive/include/CGAL/builder.h @@ -175,7 +175,7 @@ public: CGAL_assertion_code(check_protocoll = 0;) } - ~Enriched_polyhedron_incremental_builder_3() CGAL_NOEXCEPT(CGAL_NO_ASSERTIONS_BOOL) + ~Enriched_polyhedron_incremental_builder_3() noexcept(!CGAL_ASSERTIONS_ENABLED) { CGAL_destructor_assertion( check_protocoll == 0); } diff --git a/Surface_mesher/include/CGAL/AABB_polyhedral_oracle.h b/Surface_mesher/include/CGAL/AABB_polyhedral_oracle.h index 04c0d90ceaa..a57dc122563 100644 --- a/Surface_mesher/include/CGAL/AABB_polyhedral_oracle.h +++ b/Surface_mesher/include/CGAL/AABB_polyhedral_oracle.h @@ -25,7 +25,7 @@ #include #include -#include +#include namespace CGAL { @@ -50,7 +50,7 @@ namespace CGAL { typedef AABB_tree Tree; typedef typename AABB_traits::Bounding_box Bounding_box; - typedef boost::shared_ptr Tree_shared_ptr; + typedef std::shared_ptr Tree_shared_ptr; Tree_shared_ptr m_pTree; public: diff --git a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h index bf6d2c30049..af757f8365e 100644 --- a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h +++ b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h @@ -120,7 +120,7 @@ operator>>(std::istream &is, Complex_2_in_triangulation_cell_base_3 &c) is >> static_cast(c); for(int i = 0; i < 4; ++i) { - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> b; else { @@ -142,7 +142,7 @@ operator<<(std::ostream &os, os << static_cast(c); for(int i = 0; i < 4; ++i) { - if(is_ascii(os)) + if(IO::is_ascii(os)) os << ' ' << c.is_facet_on_surface(i); else write(os, static_cast(c.is_facet_on_surface(i))); diff --git a/Surface_mesher/include/CGAL/Gray_level_image_3.h b/Surface_mesher/include/CGAL/Gray_level_image_3.h index c9e7df7954b..5cf37cd2c28 100644 --- a/Surface_mesher/include/CGAL/Gray_level_image_3.h +++ b/Surface_mesher/include/CGAL/Gray_level_image_3.h @@ -19,7 +19,7 @@ #include -#include +#include #ifdef CGAL_SURFACE_MESHER_DEBUG_GRAY_LEVEL_IMAGE_3_CONSTRUCTOR #include diff --git a/Surface_mesher/include/CGAL/Point_with_psc_localisation.h b/Surface_mesher/include/CGAL/Point_with_psc_localisation.h index 830ccae8b56..24122b515cc 100644 --- a/Surface_mesher/include/CGAL/Point_with_psc_localisation.h +++ b/Surface_mesher/include/CGAL/Point_with_psc_localisation.h @@ -116,7 +116,7 @@ std::ostream& operator<<(std::ostream &os, const Point_with_psc_localisation& p) { os << static_cast(p); - if(is_ascii(os)) + if(IO::is_ascii(os)) os << ' ' << p.dimension() << ' ' << p.element_index(); else { write(os, p.dimension()); @@ -131,7 +131,7 @@ operator>>(std::istream &is, Point_with_psc_localisation& p) { is >> static_cast(p); int index, dim; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> dim >> index; else { read(is, dim); diff --git a/Surface_mesher/include/CGAL/Point_with_surface_index.h b/Surface_mesher/include/CGAL/Point_with_surface_index.h index 7a9df119c60..a4adc974429 100644 --- a/Surface_mesher/include/CGAL/Point_with_surface_index.h +++ b/Surface_mesher/include/CGAL/Point_with_surface_index.h @@ -64,7 +64,7 @@ std::ostream& operator<<(std::ostream &os, const Point_with_surface_index& p) { os << static_cast(p); - if(is_ascii(os)) + if(IO::is_ascii(os)) os << ' ' << p.surface_index(); else write(os, p.surface_index()); @@ -77,7 +77,7 @@ operator>>(std::istream &is, Point_with_surface_index& p) { is >> static_cast(p); int index; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> index; else read(is, index); diff --git a/TDS_2/include/CGAL/Triangulation_data_structure_2.h b/TDS_2/include/CGAL/Triangulation_data_structure_2.h index 2d7dbc59261..6f32473c744 100644 --- a/TDS_2/include/CGAL/Triangulation_data_structure_2.h +++ b/TDS_2/include/CGAL/Triangulation_data_structure_2.h @@ -2113,7 +2113,7 @@ file_output( std::ostream& os, Vertex_handle v, bool skip_first) const size_type n = number_of_vertices(); size_type m = number_of_full_dim_faces(); - if(is_ascii(os)) os << n << ' ' << m << ' ' << dimension() << std::endl; + if(IO::is_ascii(os)) os << n << ' ' << m << ' ' << dimension() << std::endl; else os << n << m << dimension(); if (n==0) return; @@ -2128,7 +2128,7 @@ file_output( std::ostream& os, Vertex_handle v, bool skip_first) const if( ! skip_first){ // os << v->point(); os << *v ; - if(is_ascii(os)) os << std::endl; + if(IO::is_ascii(os)) os << std::endl; } } @@ -2138,10 +2138,10 @@ file_output( std::ostream& os, Vertex_handle v, bool skip_first) const V[vit] = inum++; // os << vit->point(); os << *vit; - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; } } - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; // vertices of the faces inum = 0; @@ -2151,21 +2151,21 @@ file_output( std::ostream& os, Vertex_handle v, bool skip_first) const F[ib] = inum++; for(int j = 0; j < dim ; ++j) { os << V[ib->vertex(j)]; - if(is_ascii(os)) os << " "; + if(IO::is_ascii(os)) os << " "; } os << *ib ; - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; } - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; // neighbor pointers of the faces for( Face_iterator it = face_iterator_base_begin(); it != face_iterator_base_end(); ++it) { for(int j = 0; j < dimension()+1; ++j){ os << F[it->neighbor(j)]; - if(is_ascii(os)) os << " "; + if(IO::is_ascii(os)) os << " "; } - if(is_ascii(os)) os << "\n"; + if(IO::is_ascii(os)) os << "\n"; } return ; diff --git a/TDS_2/test/TDS_2/include/CGAL/_test_cls_tds_2.h b/TDS_2/test/TDS_2/include/CGAL/_test_cls_tds_2.h index 619b959937e..0545aa79748 100644 --- a/TDS_2/test/TDS_2/include/CGAL/_test_cls_tds_2.h +++ b/TDS_2/test/TDS_2/include/CGAL/_test_cls_tds_2.h @@ -465,48 +465,48 @@ _test_cls_tds_2( const Tds &) std::cout << " output to a file" << std::endl; std::ofstream of0("file_tds0"); - CGAL::set_ascii_mode(of0); + CGAL::IO::set_ascii_mode(of0); of0 << tds0 ; of0.close(); std::ofstream of1("file_tds1"); - CGAL::set_ascii_mode(of1); + CGAL::IO::set_ascii_mode(of1); of1 << tds1 ; of1.close(); std::ofstream of2("file_tds2"); - CGAL::set_ascii_mode(of2); + CGAL::IO::set_ascii_mode(of2); of2 << tds2 ; of2.close(); std::ofstream of3("file_tds3"); - CGAL::set_ascii_mode(of3); + CGAL::IO::set_ascii_mode(of3); of3 << tds3 ; of3.close(); std::ofstream of4("file_tds4"); - CGAL::set_ascii_mode(of4); + CGAL::IO::set_ascii_mode(of4); of4 << tds4 ; of4.close(); std::cout << " input from a file" << std::endl; - std::ifstream if0("file_tds0"); CGAL::set_ascii_mode(if0); + std::ifstream if0("file_tds0"); CGAL::IO::set_ascii_mode(if0); Tds tds0f; if0 >> tds0f ; assert( tds0f.is_valid()); - std::ifstream if1("file_tds1"); CGAL::set_ascii_mode(if1); + std::ifstream if1("file_tds1"); CGAL::IO::set_ascii_mode(if1); Tds tds1f; if1 >> tds1f; assert( tds1f.is_valid()); std::ifstream if2("file_tds2"); - CGAL::set_ascii_mode(if2); + CGAL::IO::set_ascii_mode(if2); Tds tds2f; if2 >> tds2f ; assert( tds2f.is_valid()); std::ifstream if3("file_tds3"); - CGAL::set_ascii_mode(if3); + CGAL::IO::set_ascii_mode(if3); Tds tds3f; if3 >> tds3f ; assert( tds3f.is_valid()); std::ifstream if4("file_tds4"); - CGAL::set_ascii_mode(if4); + CGAL::IO::set_ascii_mode(if4); Tds tds4f; if4 >> tds4f ; assert( tds4f.is_valid()); // vrml input-output std::ofstream os("vrml_tds4"); - CGAL::set_ascii_mode(os); + CGAL::IO::set_ascii_mode(os); tds4.vrml_output(os); // test destructor and return diff --git a/TDS_3/include/CGAL/Triangulation_data_structure_3.h b/TDS_3/include/CGAL/Triangulation_data_structure_3.h index b3927cf03ae..0e937ef4cee 100644 --- a/TDS_3/include/CGAL/Triangulation_data_structure_3.h +++ b/TDS_3/include/CGAL/Triangulation_data_structure_3.h @@ -1626,7 +1626,7 @@ public: std::size_t n; int d; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> d >> n; else { read(is, d); @@ -1924,7 +1924,7 @@ create_star_2(Vertex_handle v, Cell_handle c, int li ) // pnew is null at the first iteration v1->set_cell(cnew); //pnew->set_neighbor( cw(pnew->index(v1)), cnew ); - if (pnew != Cell_handle()) { pnew->set_neighbor( 1, cnew );} + if (pnew != nullptr) { pnew->set_neighbor( 1, cnew );} bound = cur; i1 = ccw(i1); @@ -1957,7 +1957,7 @@ operator>>(std::istream& is, Triangulation_data_structure_3& tds) std::size_t n; int d; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> d >> n; else { read(is, n); @@ -2008,7 +2008,7 @@ operator<<(std::ostream& os, const Triangulation_data_structure_3 &tds // outputs dimension and number of vertices size_type n = tds.number_of_vertices(); - if (is_ascii(os)) + if (IO::is_ascii(os)) os << tds.dimension() << std::endl << n << std::endl; else { @@ -2524,7 +2524,7 @@ read_cells(std::istream& is, const std::vector< Vertex_handle > &V, case 2: case 1: { - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> m; else read(is, m); @@ -2535,7 +2535,7 @@ read_cells(std::istream& is, const std::vector< Vertex_handle > &V, Cell_handle c = create_cell(); for (int k=0; k<=dimension(); ++k) { std::size_t ik; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> ik; else read(is, ik); @@ -2548,7 +2548,7 @@ read_cells(std::istream& is, const std::vector< Vertex_handle > &V, Cell_handle c = C[j]; for (int k=0; k<=dimension(); ++k) { std::size_t ik; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> ik; else read(is, ik); @@ -2598,7 +2598,7 @@ print_cells(std::ostream& os, const Unique_hash_map case 3: { std::size_t m = number_of_cells(); - if(is_ascii(os)) + if(IO::is_ascii(os)) os << m << std::endl; else write(os, m); @@ -2608,7 +2608,7 @@ print_cells(std::ostream& os, const Unique_hash_map for(it = cells_begin(); it != cells_end(); ++it) { C[it] = i++; for(int j = 0; j < 4; j++){ - if(is_ascii(os)) { + if(IO::is_ascii(os)) { os << V[it->vertex(j)]; if ( j==3 ) os << '\n'; @@ -2624,7 +2624,7 @@ print_cells(std::ostream& os, const Unique_hash_map // write the neighbors for(it = cells_begin(); it != cells_end(); ++it) { for (int j = 0; j < 4; j++) { - if(is_ascii(os)){ + if(IO::is_ascii(os)){ os << C[it->neighbor(j)]; if(j==3) os << '\n'; @@ -2640,7 +2640,7 @@ print_cells(std::ostream& os, const Unique_hash_map case 2: { size_type m = number_of_facets(); - if(is_ascii(os)) + if(IO::is_ascii(os)) os << m << '\n'; else write(os, m); @@ -2650,7 +2650,7 @@ print_cells(std::ostream& os, const Unique_hash_map for(it = facets_begin(); it != facets_end(); ++it) { C[(*it).first] = i++; for(int j = 0; j < 3; j++){ - if(is_ascii(os)) { + if(IO::is_ascii(os)) { os << V[(*it).first->vertex(j)]; if ( j==2 ) os << '\n'; @@ -2667,7 +2667,7 @@ print_cells(std::ostream& os, const Unique_hash_map // write the neighbors for(it = facets_begin(); it != facets_end(); ++it) { for (int j = 0; j < 3; j++) { - if(is_ascii(os)){ + if(IO::is_ascii(os)){ os << C[(*it).first->neighbor(j)]; if(j==2) os << '\n'; @@ -2684,7 +2684,7 @@ print_cells(std::ostream& os, const Unique_hash_map case 1: { size_type m = number_of_edges(); - if(is_ascii(os)) + if(IO::is_ascii(os)) os << m << '\n'; else write(os, m); @@ -2693,7 +2693,7 @@ print_cells(std::ostream& os, const Unique_hash_map for(it = edges_begin(); it != edges_end(); ++it) { C[(*it).first] = i++; for(int j = 0; j < 2; j++){ - if(is_ascii(os)) { + if(IO::is_ascii(os)) { os << V[(*it).first->vertex(j)]; if ( j==1 ) os << '\n'; @@ -2710,7 +2710,7 @@ print_cells(std::ostream& os, const Unique_hash_map // write the neighbors for(it = edges_begin(); it != edges_end(); ++it) { for (int j = 0; j < 2; j++) { - if(is_ascii(os)){ + if(IO::is_ascii(os)){ os << C[(*it).first->neighbor(j)]; if(j==1) os << '\n'; diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp index 83565e56341..4ea0c1ddc54 100644 --- a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_from_mesh.cpp @@ -19,12 +19,12 @@ int main(int argc, char* argv[]) Remeshing_triangulation tr; std::ifstream is(filename, std::ios_base::in); - CGAL::read_MEDIT(is, tr); + CGAL::IO::read_MEDIT(is, tr); CGAL::tetrahedral_isotropic_remeshing(tr, target_edge_length); std::ofstream os("after_remeshing.mesh"); - CGAL::write_MEDIT(os, tr); + CGAL::IO::write_MEDIT(os, tr); return EXIT_SUCCESS; } diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h index 5a1ca163d67..2b348e4574b 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/internal/tetrahedral_remeshing_helpers.h @@ -1671,7 +1671,7 @@ template void dump_binary(const C3t3& c3t3, const char* filename) { std::ofstream os(filename, std::ios::binary | std::ios::out); - CGAL::Mesh_3::save_binary_file(os, c3t3); + CGAL::IO::save_binary_file(os, c3t3); os.close(); } diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/tetrahedral_remeshing_io.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/tetrahedral_remeshing_io.h index d09a0f42edf..3d3b7c142f1 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/tetrahedral_remeshing_io.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/tetrahedral_remeshing_io.h @@ -35,8 +35,8 @@ bool load_triangulation(std::istream& is, T3& t3) return false; std::getline(is, s); - if (binary) CGAL::set_binary_mode(is); - else CGAL::set_ascii_mode(is); + if (binary) CGAL::IO::set_binary_mode(is); + else CGAL::IO::set_ascii_mode(is); is >> t3; return bool(is); } @@ -45,7 +45,7 @@ template bool save_binary_triangulation(std::ostream& os, const T3& t3) { os << "binary CGAL c3t3\n"; - CGAL::set_binary_mode(os); + CGAL::IO::set_binary_mode(os); return !!(os << t3); } @@ -53,7 +53,7 @@ template bool save_ascii_triangulation(std::ostream& os, const T3& t3) { os << "CGAL c3t3\n"; - CGAL::set_ascii_mode(os); + CGAL::IO::set_ascii_mode(os); return !!(os << t3); } diff --git a/Triangulation/include/CGAL/Triangulation.h b/Triangulation/include/CGAL/Triangulation.h index d59eba33c8c..dc3f062c16f 100644 --- a/Triangulation/include/CGAL/Triangulation.h +++ b/Triangulation/include/CGAL/Triangulation.h @@ -1336,7 +1336,7 @@ operator>>(std::istream & is, Triangulation & tr) // read current dimension and number of vertices size_t n; int cd; - if( is_ascii(is) ) + if( IO::is_ascii(is) ) is >> cd >> n; else { @@ -1388,7 +1388,7 @@ operator<<(std::ostream & os, const Triangulation & tr) // outputs dimensions and number of vertices size_t n = tr.number_of_vertices(); - if( is_ascii(os) ) + if( IO::is_ascii(os) ) os << tr.current_dimension() << std::endl << n << std::endl; else { @@ -1405,7 +1405,7 @@ operator<<(std::ostream & os, const Triangulation & tr) // infinite vertex has index 0 (among all the vertices) index_of_vertex[tr.infinite_vertex()] = i++; - if(is_ascii(os)) + if(IO::is_ascii(os)) os << *tr.infinite_vertex() <<"\n"; else write(os, *tr.infinite_vertex()); @@ -1414,7 +1414,7 @@ operator<<(std::ostream & os, const Triangulation & tr) { if( tr.is_infinite(it) ) continue; - if(is_ascii(os)) + if(IO::is_ascii(os)) os << *it <<"\n"; // write the vertex else write(os, *it); diff --git a/Triangulation/include/CGAL/Triangulation_data_structure.h b/Triangulation/include/CGAL/Triangulation_data_structure.h index 1a43794f47a..7dd775a42cf 100644 --- a/Triangulation/include/CGAL/Triangulation_data_structure.h +++ b/Triangulation/include/CGAL/Triangulation_data_structure.h @@ -1342,7 +1342,7 @@ Triangulation_data_structure std::size_t m; // number of full_cells int index; const int cd = current_dimension(); - if( is_ascii(is) ) + if( IO::is_ascii(is) ) is >> m; else read(is, m, io_Read_write()); @@ -1359,7 +1359,7 @@ Triangulation_data_structure full_cells.push_back(s); for( int j = 0; j <= cd; ++j ) { - if( is_ascii(is) ) + if( IO::is_ascii(is) ) is >> index; else read(is, index); @@ -1372,7 +1372,7 @@ Triangulation_data_structure // read the neighbors of each full_cell i = 0; - if( is_ascii(is) ) + if( IO::is_ascii(is) ) while( i < m ) { for( int j = 0; j <= cd; ++j ) @@ -1423,7 +1423,7 @@ Triangulation_data_structure std::size_t m = number_of_full_cells(); - if( is_ascii(os) ) + if( IO::is_ascii(os) ) os << std::endl << m; else write(os, m, io_Read_write()); @@ -1434,11 +1434,11 @@ Triangulation_data_structure for( Full_cell_const_iterator it = full_cells_begin(); it != full_cells_end(); ++it ) { index_of_full_cell[it] = i++; - if( is_ascii(os) ) + if( IO::is_ascii(os) ) os << std::endl; for( int j = 0; j <= cur_dim; ++j ) { - if( is_ascii(os) ) + if( IO::is_ascii(os) ) os << ' ' << index_of_vertex[it->vertex(j)]; else write(os, index_of_vertex[it->vertex(j)]); @@ -1450,7 +1450,7 @@ Triangulation_data_structure CGAL_assertion( (std::size_t) i == m ); // write the neighbors of each full_cell - if( is_ascii(os) ) + if( IO::is_ascii(os) ) for( Full_cell_const_iterator it = full_cells_begin(); it != full_cells_end(); ++it ) { os << std::endl; @@ -1489,7 +1489,7 @@ operator>>(std::istream & is, Triangulation_data_structure & tr) // read current dimension and number of vertices std::size_t n; int cd; - if( is_ascii(is) ) + if( IO::is_ascii(is) ) is >> cd >> n; else { @@ -1539,7 +1539,7 @@ operator<<(std::ostream & os, const Triangulation_data_structure // outputs dimension and number of vertices std::size_t n = tr.number_of_vertices(); - if( is_ascii(os) ) + if( IO::is_ascii(os) ) os << tr.current_dimension() << std::endl << n; else { @@ -1556,7 +1556,7 @@ operator<<(std::ostream & os, const Triangulation_data_structure for( Vertex_iterator it = tr.vertices_begin(); it != tr.vertices_end(); ++it, ++i ) { os << *it; // write the vertex - if (is_ascii(os)) + if (IO::is_ascii(os)) os << std::endl; index_of_vertex[it] = i; } diff --git a/Triangulation/include/CGAL/Triangulation_ds_full_cell.h b/Triangulation/include/CGAL/Triangulation_ds_full_cell.h index 83b48a441d5..cf897825b6e 100644 --- a/Triangulation/include/CGAL/Triangulation_ds_full_cell.h +++ b/Triangulation/include/CGAL/Triangulation_ds_full_cell.h @@ -259,7 +259,7 @@ template < typename TDS, typename SSP > std::ostream & operator<<(std::ostream & O, const Triangulation_ds_full_cell &) /* Concept */ { - /*if( is_ascii(O) ) + /*if( IO::is_ascii(O) ) { // os << '\n'; } @@ -271,7 +271,7 @@ template < typename TDS, typename SSP > std::istream & operator>>(std::istream & I, Triangulation_ds_full_cell &) /* Concept */ { - /*if( is_ascii(I) ) + /*if( IO::is_ascii(I) ) {} else {}*/ return I; diff --git a/Triangulation/include/CGAL/Triangulation_ds_vertex.h b/Triangulation/include/CGAL/Triangulation_ds_vertex.h index aaa1e2067fc..3ed1ef48786 100644 --- a/Triangulation/include/CGAL/Triangulation_ds_vertex.h +++ b/Triangulation/include/CGAL/Triangulation_ds_vertex.h @@ -112,7 +112,7 @@ template < class TDS > std::istream & operator>>(std::istream & is, Triangulation_ds_vertex &) /* Concept */ { - /*if( is_ascii(is) ) + /*if( IO::is_ascii(is) ) {} else {}*/ return is; @@ -122,7 +122,7 @@ template< class TDS > std::ostream & operator<<(std::ostream & os, const Triangulation_ds_vertex &) /* Concept */ { - /*if( is_ascii(os) ) + /*if( IO::is_ascii(os) ) { os << '\n'; } diff --git a/Triangulation/include/CGAL/Triangulation_full_cell.h b/Triangulation/include/CGAL/Triangulation_full_cell.h index b806ab6baf4..18792172ce3 100644 --- a/Triangulation/include/CGAL/Triangulation_full_cell.h +++ b/Triangulation/include/CGAL/Triangulation_full_cell.h @@ -119,7 +119,7 @@ template < typename TDS, typename Data, typename SSP > std::ostream & operator<<(std::ostream & O, const Triangulation_full_cell & s) { - /*if( is_ascii(O) ) + /*if( IO::is_ascii(O) ) { // os << '\n'; } @@ -132,7 +132,7 @@ template < typename TDS, typename Data, typename SSP > std::istream & operator>>(std::istream & I, Triangulation_full_cell & s) { - /*if( is_ascii(I) ) + /*if( IO::is_ascii(I) ) {} else {}*/ I >> s.data(); diff --git a/Triangulation/test/Triangulation/test_tds.cpp b/Triangulation/test/Triangulation/test_tds.cpp index 30774f94e5b..e1d4ceeb54b 100644 --- a/Triangulation/test/Triangulation/test_tds.cpp +++ b/Triangulation/test/Triangulation/test_tds.cpp @@ -95,13 +95,13 @@ void test(const int d, const string & type) // TEST File I/O std::ofstream fo((string("output-tds-")+type).c_str()); if( d % 2 ) - CGAL::set_binary_mode(fo); + CGAL::IO::set_binary_mode(fo); fo << tds; fo.close(); std::ifstream fi((string("output-tds-")+type).c_str()); if( d % 2 ) - CGAL::set_binary_mode(fi); + CGAL::IO::set_binary_mode(fi); TDS input_tds(d); fi >> input_tds; fi.close(); diff --git a/Triangulation_2/examples/Triangulation_2/colored_face.cpp b/Triangulation_2/examples/Triangulation_2/colored_face.cpp index 820daa4cfe5..0f290a796be 100644 --- a/Triangulation_2/examples/Triangulation_2/colored_face.cpp +++ b/Triangulation_2/examples/Triangulation_2/colored_face.cpp @@ -6,7 +6,7 @@ typedef CGAL::Exact_predicates_inexact_constructions_kernel K; typedef CGAL::Triangulation_vertex_base_2 Vb; -typedef CGAL::Triangulation_face_base_with_info_2 Fb; +typedef CGAL::Triangulation_face_base_with_info_2 Fb; typedef CGAL::Triangulation_data_structure_2 Tds; typedef CGAL::Triangulation_2 Triangulation; @@ -21,11 +21,11 @@ int main() { t.insert(Point(2,2)); for(Face_handle f : t.finite_face_handles()) - f->info() = CGAL::blue(); + f->info() = CGAL::IO::blue(); Point p(0.5,0.5); Face_handle fh = t.locate(p); - fh->info() = CGAL::red(); + fh->info() = CGAL::IO::red(); return 0; } diff --git a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h index 32317818174..00490b338a8 100644 --- a/Triangulation_2/include/CGAL/Constrained_triangulation_2.h +++ b/Triangulation_2/include/CGAL/Constrained_triangulation_2.h @@ -1544,7 +1544,7 @@ file_output(std::ostream& os) const for(int j = 0; j < 3; ++j){ if (ib->is_constrained(j)) { os << "C";} else { os << "N";} - if(is_ascii(os)){ + if(IO::is_ascii(os)){ if(j==2) { os << "\n"; } else { diff --git a/Triangulation_2/include/CGAL/draw_triangulation_2.h b/Triangulation_2/include/CGAL/draw_triangulation_2.h index fef579d2ff0..3561dbbc04a 100644 --- a/Triangulation_2/include/CGAL/draw_triangulation_2.h +++ b/Triangulation_2/include/CGAL/draw_triangulation_2.h @@ -28,7 +28,7 @@ namespace CGAL struct DefaultColorFunctorT2 { template - static CGAL::Color run(const T2&, + static CGAL::IO::Color run(const T2&, const typename T2::Finite_faces_iterator fh) { CGAL::Random random((unsigned int)(std::size_t)(&*fh)); @@ -68,7 +68,7 @@ public: protected: void compute_face(Facet_const_handle fh) { - CGAL::Color c=m_fcolor.run(t2, fh); + CGAL::IO::Color c=m_fcolor.run(t2, fh); face_begin(c); add_point_in_face(fh->vertex(0)->point()); diff --git a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_constrained_triangulation_2.h b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_constrained_triangulation_2.h index fb62d70e19b..7aab8e70ff0 100644 --- a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_constrained_triangulation_2.h +++ b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_constrained_triangulation_2.h @@ -223,52 +223,52 @@ _test_cls_constrained_triangulation(const Triang &) std::cout << "output to a file" << std::endl; std::ofstream of0_1("T01.triangulation", std::ios::out); - CGAL::set_ascii_mode(of0_1); + CGAL::IO::set_ascii_mode(of0_1); of0_1 << T0_1; of0_1.close(); std::ofstream of0_2("T02.triangulation"); - CGAL::set_ascii_mode(of0_2); + CGAL::IO::set_ascii_mode(of0_2); of0_2 << T0_2; of0_2.close(); std::ofstream of1_1("T11.triangulation"); - CGAL::set_ascii_mode(of1_1); + CGAL::IO::set_ascii_mode(of1_1); of1_1 << T1_1; of1_1.close(); std::ofstream of1_2("T12.triangulation"); - CGAL::set_ascii_mode(of1_2); + CGAL::IO::set_ascii_mode(of1_2); of1_2 << T1_2; of1_2.close(); std::ofstream of2_1("T21.triangulation"); - CGAL::set_ascii_mode(of2_1); + CGAL::IO::set_ascii_mode(of2_1); of2_1 << T2_1; of2_1.close(); std::ofstream of2_2("T22.triangulation"); - CGAL::set_ascii_mode(of2_2); + CGAL::IO::set_ascii_mode(of2_2); of2_2 << T2_2; of2_2.close(); std::cout << "input from a file" << std::endl; - std::ifstream if0_1("T01.triangulation"); CGAL::set_ascii_mode(if0_1); + std::ifstream if0_1("T01.triangulation"); CGAL::IO::set_ascii_mode(if0_1); Triang T0_1_copy; if0_1 >> T0_1_copy; - std::ifstream if0_2("T02.triangulation"); CGAL::set_ascii_mode(if0_2); + std::ifstream if0_2("T02.triangulation"); CGAL::IO::set_ascii_mode(if0_2); Triang T0_2_copy; if0_2 >> T0_2_copy; - std::ifstream if1_1("T11.triangulation"); CGAL::set_ascii_mode(if1_1); + std::ifstream if1_1("T11.triangulation"); CGAL::IO::set_ascii_mode(if1_1); Triang T1_1_copy; if1_1 >> T1_1_copy; - std::ifstream if1_2("T12.triangulation"); CGAL::set_ascii_mode(if1_2); + std::ifstream if1_2("T12.triangulation"); CGAL::IO::set_ascii_mode(if1_2); Triang T1_2_copy; if1_2 >> T1_2_copy; - std::ifstream if2_1("T21.triangulation"); CGAL::set_ascii_mode(if2_1); + std::ifstream if2_1("T21.triangulation"); CGAL::IO::set_ascii_mode(if2_1); Triang T2_1_copy; if2_1 >> T2_1_copy; - std::ifstream if2_2("T22.triangulation"); CGAL::set_ascii_mode(if2_2); + std::ifstream if2_2("T22.triangulation"); CGAL::IO::set_ascii_mode(if2_2); Triang T2_2_copy; if2_2 >> T2_2_copy; // test copy of constrained Triangulation Triang T2_4(T2_2); std::ofstream of2_2_bis("T22.triangulation"); - CGAL::set_ascii_mode(of2_2_bis); + CGAL::IO::set_ascii_mode(of2_2_bis); of2_2_bis << T2_4; of2_2_bis.close(); All_faces_iterator fit2 = T2_2.all_faces_begin(); All_faces_iterator fit2_bis = T2_4.all_faces_begin(); diff --git a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h index 3a60570bd00..16c98935104 100644 --- a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h +++ b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_hierarchy_2.h @@ -20,7 +20,7 @@ _test_cls_regular_hierarchy_2( const Rh & ) Regular_hierarchy rh; CGAL::Random rand; - // std::ofstream output("data"); CGAL::set_binary_mode(output); + // std::ofstream output("data"); CGAL::IO::set_binary_mode(output); for(int i = 0; i < nn ; i++){ Bare_point p( rand.get_double(), rand.get_double()); Weighted_point wp(p, (rand.get_double())*100); @@ -32,7 +32,7 @@ _test_cls_regular_hierarchy_2( const Rh & ) std::cerr << std::endl; rh.is_valid(true); -// std::ifstream input("data"); CGAL::set_binary_mode(input); +// std::ifstream input("data"); CGAL::IO::set_binary_mode(input); // Weighted_point wp; // int inr = 0; // while(input) { diff --git a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_triangulation_2.h b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_triangulation_2.h index e189e4b8cb8..26c097e2f91 100644 --- a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_triangulation_2.h +++ b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_regular_triangulation_2.h @@ -477,7 +477,7 @@ _test_cls_regular_triangulation_2( const Triangulation & ) // tr.clear(); // Cls tr; // Weighted_point wp; -// std::ifstream input("data"); CGAL::set_ascii_mode(input); +// std::ifstream input("data"); CGAL::IO::set_ascii_mode(input); // int in = 0; // while(input){ // in = in+1; @@ -750,22 +750,22 @@ _test_cls_regular_triangulation_2( const Triangulation & ) // so they do not input output hidden vertices std::cout << " output to a file" << std::endl; std::ofstream of1_5("T15.triangulation"); - CGAL::set_ascii_mode(of1_5); + CGAL::IO::set_ascii_mode(of1_5); of1_5 << T1_5; of1_5.close(); std::ofstream of2_3("T23.triangulation"); - CGAL::set_ascii_mode(of2_3); + CGAL::IO::set_ascii_mode(of2_3); of2_3 << T2_3; of2_3.close(); // std::cout << " input from a file" << std::endl; -// std::ifstream if1_5("T15.triangulation"); CGAL::set_ascii_mode(if1_5); +// std::ifstream if1_5("T15.triangulation"); CGAL::IO::set_ascii_mode(if1_5); // Cls T1_5_copy; if1_5 >> T1_5_copy; // assert( T1_5_copy.is_valid(verbose) && // T1_5_copy.number_of_vertices() == // T1_5.number_of_vertices() - T1_5.number_of_hidden_vertices()); -// std::ifstream if2_3("T23.triangulation"); CGAL::set_ascii_mode(if2_3); +// std::ifstream if2_3("T23.triangulation"); CGAL::IO::set_ascii_mode(if2_3); // Cls T2_3_copy; if2_3 >> T2_3_copy; // assert( T2_3_copy.is_valid(verbose) && // T2_3_copy.number_of_vertices() == diff --git a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_2.h b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_2.h index b14c998d5a9..c8c982b38bc 100644 --- a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_2.h +++ b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_2.h @@ -775,67 +775,67 @@ _test_cls_triangulation_2( const Triangul & ) /******** I/O *******/ std::cout << " output to a file" << std::endl; std::ofstream of0_0("T00.triangulation", std::ios::out); - CGAL::set_ascii_mode(of0_0); + CGAL::IO::set_ascii_mode(of0_0); of0_0 << T0_0; of0_0.close(); std::ofstream of0_1("T01.triangulation"); - CGAL::set_ascii_mode(of0_1); + CGAL::IO::set_ascii_mode(of0_1); of0_1 << T0_1; of0_1.close(); std::ofstream of1_2("T12.triangulation"); - CGAL::set_ascii_mode(of1_2); + CGAL::IO::set_ascii_mode(of1_2); of1_2 << T1_2; of1_2.close(); std::ofstream of1_5("T15.triangulation"); - CGAL::set_ascii_mode(of1_5); + CGAL::IO::set_ascii_mode(of1_5); of1_5 << T1_5; of1_5.close(); std::ofstream of1_6("T16.triangulation"); - CGAL::set_ascii_mode(of1_6); + CGAL::IO::set_ascii_mode(of1_6); of1_6 << T1_6; of1_6.close(); std::ofstream of2_1("T21.triangulation"); - CGAL::set_ascii_mode(of2_1); + CGAL::IO::set_ascii_mode(of2_1); of2_1 << T2_1; of2_1.close(); std::ofstream of2_3("T23.triangulation"); - CGAL::set_ascii_mode(of2_3); + CGAL::IO::set_ascii_mode(of2_3); of2_3 << T2_3; of2_3.close(); std::ofstream of2_5("T25.triangulation"); - CGAL::set_ascii_mode(of2_5); + CGAL::IO::set_ascii_mode(of2_5); of2_5 << T2_5; of2_5.close(); std::ofstream of2_6("T26.triangulation"); - CGAL::set_ascii_mode(of2_6); + CGAL::IO::set_ascii_mode(of2_6); of2_6 << T2_6; of2_6.close(); std::cout << " input from a file" << std::endl; - std::ifstream if0_0("T00.triangulation"); CGAL::set_ascii_mode(if0_0); + std::ifstream if0_0("T00.triangulation"); CGAL::IO::set_ascii_mode(if0_0); Triangul T0_0_copy; if0_0 >> T0_0_copy; assert( T0_0_copy.is_valid() && T0_0_copy.number_of_vertices() == T0_0.number_of_vertices() ); - std::ifstream if0_1("T01.triangulation"); CGAL::set_ascii_mode(if0_1); + std::ifstream if0_1("T01.triangulation"); CGAL::IO::set_ascii_mode(if0_1); Triangul T0_1_copy; if0_1 >> T0_1_copy; assert( T0_1_copy.is_valid() && T0_1_copy.number_of_vertices() == T0_1.number_of_vertices() ); - std::ifstream if1_2("T12.triangulation"); CGAL::set_ascii_mode(if1_2); + std::ifstream if1_2("T12.triangulation"); CGAL::IO::set_ascii_mode(if1_2); Triangul T1_2_copy; if1_2 >> T1_2_copy; assert( T1_2_copy.is_valid() && T1_2_copy.number_of_vertices() == T1_2.number_of_vertices() ); - std::ifstream if1_5("T15.triangulation"); CGAL::set_ascii_mode(if1_5); + std::ifstream if1_5("T15.triangulation"); CGAL::IO::set_ascii_mode(if1_5); Triangul T1_5_copy; if1_5 >> T1_5_copy; assert( T1_5_copy.is_valid() && T1_5_copy.number_of_vertices() == T1_5.number_of_vertices() ); - std::ifstream if1_6("T16.triangulation"); CGAL::set_ascii_mode(if1_6); + std::ifstream if1_6("T16.triangulation"); CGAL::IO::set_ascii_mode(if1_6); Triangul T1_6_copy; if1_6 >> T1_6_copy; assert( T1_6_copy.is_valid() && T1_6_copy.number_of_vertices() == T1_6.number_of_vertices() ); - std::ifstream if2_1("T21.triangulation"); CGAL::set_ascii_mode(if2_1); + std::ifstream if2_1("T21.triangulation"); CGAL::IO::set_ascii_mode(if2_1); Triangul T2_1_copy; if2_1 >> T2_1_copy; assert( T2_1_copy.is_valid() && T2_1_copy.number_of_vertices() == T2_1.number_of_vertices() ); - std::ifstream if2_3("T23.triangulation"); CGAL::set_ascii_mode(if2_3); + std::ifstream if2_3("T23.triangulation"); CGAL::IO::set_ascii_mode(if2_3); Triangul T2_3_copy; if2_3 >> T2_3_copy; assert( T2_3_copy.is_valid() && T2_3_copy.number_of_vertices() == T2_3.number_of_vertices() ); - std::ifstream if2_5("T25.triangulation"); CGAL::set_ascii_mode(if2_5); + std::ifstream if2_5("T25.triangulation"); CGAL::IO::set_ascii_mode(if2_5); Triangul T2_5_copy; if2_5 >> T2_5_copy; assert( T2_5_copy.is_valid() && T2_5_copy.number_of_vertices() == T2_5.number_of_vertices() ); - std::ifstream if2_6("T26.triangulation"); CGAL::set_ascii_mode(if2_6); + std::ifstream if2_6("T26.triangulation"); CGAL::IO::set_ascii_mode(if2_6); Triangul T2_6_copy; if2_6 >> T2_6_copy; assert( T2_6_copy.is_valid() && T2_6_copy.number_of_vertices() == T2_6.number_of_vertices() ); diff --git a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_short_2.h b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_short_2.h index bb5bbd8a603..61fbb042389 100644 --- a/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_short_2.h +++ b/Triangulation_2/test/Triangulation_2/include/CGAL/_test_cls_triangulation_short_2.h @@ -477,21 +477,21 @@ _test_cls_triangulation_short_2( const Triangul &) /******** I/O *******/ std::cout << " output to a file" << std::endl; std::ofstream of1_5("T15.triangulation"); - CGAL::set_ascii_mode(of1_5); + CGAL::IO::set_ascii_mode(of1_5); of1_5 << T1_5; of1_5.close(); std::ofstream of2_3("T23.triangulation"); - CGAL::set_ascii_mode(of2_3); + CGAL::IO::set_ascii_mode(of2_3); of2_3 << T2_3; of2_3.close(); std::cout << " input from a file" << std::endl; - std::ifstream if1_5("T15.triangulation"); CGAL::set_ascii_mode(if1_5); + std::ifstream if1_5("T15.triangulation"); CGAL::IO::set_ascii_mode(if1_5); Triangul T1_5_copy; if1_5 >> T1_5_copy; assert( T1_5_copy.is_valid() && T1_5_copy.number_of_vertices() == T1_5.number_of_vertices() ); - std::ifstream if2_3("T23.triangulation"); CGAL::set_ascii_mode(if2_3); + std::ifstream if2_3("T23.triangulation"); CGAL::IO::set_ascii_mode(if2_3); Triangul T2_3_copy; if2_3 >> T2_3_copy; assert( T2_3_copy.is_valid() && T2_3_copy.number_of_vertices() == T2_3.number_of_vertices() ); diff --git a/Triangulation_3/demo/Triangulation_3/Scene.cpp b/Triangulation_3/demo/Triangulation_3/Scene.cpp index dfab5a6d210..c56c3cd269b 100644 --- a/Triangulation_3/demo/Triangulation_3/Scene.cpp +++ b/Triangulation_3/demo/Triangulation_3/Scene.cpp @@ -123,12 +123,12 @@ void Scene::loadPointsOFF(const char* filename) void Scene::loadPointsXYZ(const char* filename) { - /* Use CGAL::read_XYZ to read in data -- tested */ + /* Use CGAL::IO::read_XYZ to read in data -- tested */ /* Note: this function reads in points only (normals are ignored) */ /* Note: this function can NOT omit comments (starting with '#') */ list pts; - if( !CGAL::read_XYZ( filename, // input ifstream - back_inserter(pts) ) ) { // output iterator over points + if( !CGAL::IO::read_XYZ( filename, // input ifstream + back_inserter(pts) ) ) { // output iterator over points showError( QObject::tr("Error: cannot read file %1.").arg(filename) ); } @@ -199,11 +199,11 @@ void Scene::savePointsXYZ(const char* filename) return; } - /* Use CGAL::write_xyz_points to write out data */ + /* Use CGAL::IO::write_xyz_points to write out data */ /* Note: this function writes out points only (normals are ignored) */ - if( !CGAL::write_XYZ( fout, // output ofstream - CGAL::make_range( m_dt.points_begin(), // first output point - m_dt.points_end()) ) ) { // past-the-end output point + if( !CGAL::IO::write_XYZ( fout, // output ofstream + CGAL::make_range( m_dt.points_begin(), // first output point + m_dt.points_end()) ) ) { // past-the-end output point showError( QObject::tr("Error: cannot read file %1.").arg(filename) ); } } diff --git a/Triangulation_3/demo/Triangulation_3/Scene.h b/Triangulation_3/demo/Triangulation_3/Scene.h index 45d2e1887d1..4588fae8475 100644 --- a/Triangulation_3/demo/Triangulation_3/Scene.h +++ b/Triangulation_3/demo/Triangulation_3/Scene.h @@ -16,7 +16,7 @@ public: public: inline void setViewer(CGAL::QGLViewer* v) { m_viewer = v; } inline void showError(const QString & msg) { - if(!m_viewer) m_viewer->displayMessage( msg ); + if(m_viewer != nullptr) m_viewer->displayMessage( msg ); } inline bool isDTEmpty() { return m_dt.number_of_vertices()==0; } inline void eraseOldData() { m_dt.clear(); m_vhArray.clear(); } diff --git a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_color_demo.cpp b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_color_demo.cpp index f5f8f09b9ba..010bf0465d8 100644 --- a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_color_demo.cpp +++ b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_color_demo.cpp @@ -31,7 +31,7 @@ int main() typedef CGAL::Exact_predicates_inexact_constructions_kernel K; -typedef CGAL::Triangulation_vertex_base_with_info_3 Vb; +typedef CGAL::Triangulation_vertex_base_with_info_3 Vb; typedef CGAL::Delaunay_triangulation_cell_base_3 Cb; typedef CGAL::Triangulation_data_structure_3 Tds; typedef CGAL::Delaunay_triangulation_3 Delaunay; @@ -41,7 +41,7 @@ typedef Delaunay::Point Point; int main() { CGAL::Geomview_stream gv(CGAL::Bbox_3(0,0,0, 2, 2, 2)); - gv.set_bg_color(CGAL::Color(0, 200, 200)); + gv.set_bg_color(CGAL::IO::Color(0, 200, 200)); gv.clear(); Delaunay T; @@ -57,7 +57,7 @@ int main() Delaunay::Finite_vertices_iterator vit; for (vit = T.finite_vertices_begin(); vit != T.finite_vertices_end(); ++vit) if (T.degree(vit) == 6) - vit->info() = CGAL::red(); + vit->info() = CGAL::IO::red(); std::cout << " Visualization of T" << std::endl; gv.set_wired(true); diff --git a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_demo.cpp b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_demo.cpp index f552d48c5cf..b34b666422d 100644 --- a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_demo.cpp +++ b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_demo.cpp @@ -95,7 +95,7 @@ void visu_vertex(CGAL::Geomview_stream & os, const TRIANGULATION & T, int main() { CGAL::Geomview_stream gv(CGAL::Bbox_3(0,0,0, 2, 2, 2)); - gv.set_bg_color(CGAL::Color(0, 200, 200)); + gv.set_bg_color(CGAL::IO::Color(0, 200, 200)); gv.clear(); Triangulation T; diff --git a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_remove_demo.cpp b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_remove_demo.cpp index 538a33b8bf3..4b1ab9e2f08 100644 --- a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_remove_demo.cpp +++ b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_remove_demo.cpp @@ -94,7 +94,7 @@ void visu_vertex(CGAL::Geomview_stream & os, const TRIANGULATION & T, int main() { CGAL::Geomview_stream gv(CGAL::Bbox_3(0,0,0, 5, 5, 5)); - gv.set_bg_color(CGAL::Color(0, 200, 200)); + gv.set_bg_color(CGAL::IO::Color(0, 200, 200)); gv.set_wired(true); gv.clear(); diff --git a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_voronoi_demo.cpp b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_voronoi_demo.cpp index e2d52232cf6..3fccb43099e 100644 --- a/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_voronoi_demo.cpp +++ b/Triangulation_3/demo/Triangulation_3_Geomview_demos/Triangulation_3_voronoi_demo.cpp @@ -47,7 +47,7 @@ typedef Triangulation::Point Point; int main() { CGAL::Geomview_stream gv(CGAL::Bbox_3(0,0,0, 3, 3, 3)); - gv.set_bg_color(CGAL::Color(0, 200, 200)); + gv.set_bg_color(CGAL::IO::Color(0, 200, 200)); gv.clear(); Triangulation T; @@ -65,7 +65,7 @@ int main() gv << T; std::cout <<" Visualizing the Voronoi edges" << std::endl; - gv << CGAL::red(); + gv << CGAL::IO::red(); T.draw_dual(gv); char ch; diff --git a/Triangulation_3/examples/Triangulation_3/color.cpp b/Triangulation_3/examples/Triangulation_3/color.cpp index c61bf335689..88be5a11a23 100644 --- a/Triangulation_3/examples/Triangulation_3/color.cpp +++ b/Triangulation_3/examples/Triangulation_3/color.cpp @@ -8,7 +8,7 @@ typedef CGAL::Exact_predicates_inexact_constructions_kernel K; -typedef CGAL::Triangulation_vertex_base_with_info_3 Vb; +typedef CGAL::Triangulation_vertex_base_with_info_3 Vb; typedef CGAL::Delaunay_triangulation_cell_base_3 Cb; typedef CGAL::Triangulation_data_structure_3 Tds; typedef CGAL::Delaunay_triangulation_3 Delaunay; @@ -30,7 +30,7 @@ int main() Delaunay::Finite_vertices_iterator vit; for (Delaunay::Vertex_handle v : T.finite_vertex_handles()) if (T.degree(v) == 6) - v->info() = CGAL::red(); + v->info() = CGAL::IO::red(); return 0; } diff --git a/Triangulation_3/examples/Triangulation_3/segment_cell_traverser_3.cpp b/Triangulation_3/examples/Triangulation_3/segment_cell_traverser_3.cpp index e9a675ff7e0..cb0eb2c855d 100644 --- a/Triangulation_3/examples/Triangulation_3/segment_cell_traverser_3.cpp +++ b/Triangulation_3/examples/Triangulation_3/segment_cell_traverser_3.cpp @@ -25,7 +25,7 @@ int main(int argc, char* argv[]) const char* fname = (argc>1) ? argv[1] : "data/blobby.xyz"; std::vector points; - if (!CGAL::read_points(fname, std::back_inserter(points))) + if (!CGAL::IO::read_points(fname, std::back_inserter(points))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Triangulation_3/examples/Triangulation_3/segment_simplex_traverser_3.cpp b/Triangulation_3/examples/Triangulation_3/segment_simplex_traverser_3.cpp index 14c2fb7a7b2..f32ad6859bd 100644 --- a/Triangulation_3/examples/Triangulation_3/segment_simplex_traverser_3.cpp +++ b/Triangulation_3/examples/Triangulation_3/segment_simplex_traverser_3.cpp @@ -27,7 +27,7 @@ int main(int argc, char* argv[]) std::vector points; std::ifstream stream(fname); if (!stream || - !CGAL::read_XYZ(stream, std::back_inserter(points))) + !CGAL::IO::read_XYZ(stream, std::back_inserter(points))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Triangulation_3/include/CGAL/Regular_triangulation_3.h b/Triangulation_3/include/CGAL/Regular_triangulation_3.h index 34186b034a0..c65d42e9bf8 100644 --- a/Triangulation_3/include/CGAL/Regular_triangulation_3.h +++ b/Triangulation_3/include/CGAL/Regular_triangulation_3.h @@ -38,7 +38,6 @@ #include #include #include -#include #ifndef CGAL_TRIANGULATION_3_DONT_INSERT_RANGE_OF_POINTS_WITH_INFO #include diff --git a/Triangulation_3/include/CGAL/Triangulation_3.h b/Triangulation_3/include/CGAL/Triangulation_3.h index df69bf1f1b6..c59b5508a2f 100644 --- a/Triangulation_3/include/CGAL/Triangulation_3.h +++ b/Triangulation_3/include/CGAL/Triangulation_3.h @@ -2313,7 +2313,7 @@ public: std::size_t n; int d; - if(is_ascii(is)) + if(IO::is_ascii(is)) is >> d >> n; else { read(is, d); @@ -2375,7 +2375,7 @@ std::istream& operator>> (std::istream& is, Triangulation_3& tr) std::size_t n; int d; - if(is_ascii(is)) + if(IO::is_ascii(is)) { is >> d >> n; } @@ -2435,7 +2435,7 @@ std::ostream& operator<< (std::ostream& os, const Triangulation_3& // outputs dimension and number of vertices size_type n = tr.number_of_vertices(); - if(is_ascii(os)) + if(IO::is_ascii(os)) { os << tr.dimension() << std::endl << n << std::endl; } @@ -2464,7 +2464,7 @@ std::ostream& operator<< (std::ostream& os, const Triangulation_3& { os << *TV[i]; V[TV[i]] = i; - if(is_ascii(os)) + if(IO::is_ascii(os)) os << std::endl; } @@ -2482,7 +2482,7 @@ std::ostream& operator<< (std::ostream& os, const Triangulation_3& for(Cell_iterator it = tr.cells_begin(), end = tr.cells_end(); it != end; ++it) { os << *it; // other information - if(is_ascii(os)) + if(IO::is_ascii(os)) os << std::endl; } break; @@ -2492,7 +2492,7 @@ std::ostream& operator<< (std::ostream& os, const Triangulation_3& for(Facet_iterator it = tr.facets_begin(), end = tr.facets_end(); it != end; ++it) { os << *((*it).first); // other information - if(is_ascii(os)) + if(IO::is_ascii(os)) os << std::endl; } break; @@ -2502,7 +2502,7 @@ std::ostream& operator<< (std::ostream& os, const Triangulation_3& for(Edge_iterator it = tr.edges_begin(), end = tr.edges_end(); it != end; ++it) { os << *((*it).first); // other information - if(is_ascii(os)) + if(IO::is_ascii(os)) os << std::endl; } break; diff --git a/Triangulation_3/include/CGAL/draw_triangulation_3.h b/Triangulation_3/include/CGAL/draw_triangulation_3.h index 0c778ca08a7..3e5bbaec9f5 100644 --- a/Triangulation_3/include/CGAL/draw_triangulation_3.h +++ b/Triangulation_3/include/CGAL/draw_triangulation_3.h @@ -28,11 +28,11 @@ namespace CGAL struct DefaultColorFunctorT3 { template - static CGAL::Color run(const T3&, + static CGAL::IO::Color run(const T3&, const typename T3::Finite_facets_iterator* fh) { if (fh==nullptr) // use to get the mono color - return CGAL::Color(100, 125, 200); // R G B between 0-255 + return CGAL::IO::Color(100, 125, 200); // R G B between 0-255 CGAL::Random random((unsigned int)((std::size_t)(&*((*fh)->first))+ (std::size_t)((*fh)->second))); @@ -74,7 +74,7 @@ public: protected: void compute_face(Facet_const_handle fh) { - CGAL::Color c=m_fcolor.run(t3, &fh); + CGAL::IO::Color c=m_fcolor.run(t3, &fh); face_begin(c); add_point_in_face(fh->first->vertex((fh->second+1)%4)->point()); diff --git a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_triangulation_3.h b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_triangulation_3.h index a2afe749131..8c63a6cd09b 100644 --- a/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_triangulation_3.h +++ b/Triangulation_3/test/Triangulation_3/include/CGAL/_test_cls_triangulation_3.h @@ -63,11 +63,11 @@ _test_cls_triangulation_3_input_output(const Triangulation & T, std::cout << " I/O (binary)" << std::endl; { std::ofstream oFileBin(filename2, std::ios::out|std::ios::binary); - CGAL::set_binary_mode(oFileBin); + CGAL::IO::set_binary_mode(oFileBin); oFileBin << T; } std::ifstream iFileBin(filename2, std::ios::in|std::ios::binary); - CGAL::set_binary_mode(iFileBin); + CGAL::IO::set_binary_mode(iFileBin); Triangulation Tfromfile_binary; iFileBin >> Tfromfile_binary; assert(Tfromfile_binary.is_valid()); diff --git a/Triangulation_3/test/Triangulation_3/test_simplex_iterator_3.cpp b/Triangulation_3/test/Triangulation_3/test_simplex_iterator_3.cpp index 9ef1b068212..a2340ade3dd 100644 --- a/Triangulation_3/test/Triangulation_3/test_simplex_iterator_3.cpp +++ b/Triangulation_3/test/Triangulation_3/test_simplex_iterator_3.cpp @@ -333,7 +333,7 @@ int main(int argc, char* argv[]) std::vector points; std::ifstream stream(fname); if (!stream || - !CGAL::read_XYZ(stream, std::back_inserter(points))) + !CGAL::IO::read_XYZ(stream, std::back_inserter(points))) { std::cerr << "Error: cannot read file " << fname << std::endl; return EXIT_FAILURE; diff --git a/Triangulation_on_sphere_2/benchmark/CMakeLists.txt b/Triangulation_on_sphere_2/benchmark/Triangulation_on_sphere_2/CMakeLists.txt similarity index 100% rename from Triangulation_on_sphere_2/benchmark/CMakeLists.txt rename to Triangulation_on_sphere_2/benchmark/Triangulation_on_sphere_2/CMakeLists.txt diff --git a/Triangulation_on_sphere_2/benchmark/bench_dtos2.cpp b/Triangulation_on_sphere_2/benchmark/Triangulation_on_sphere_2/bench_dtos2.cpp similarity index 100% rename from Triangulation_on_sphere_2/benchmark/bench_dtos2.cpp rename to Triangulation_on_sphere_2/benchmark/Triangulation_on_sphere_2/bench_dtos2.cpp diff --git a/Triangulation_on_sphere_2/benchmark/generate_points.cpp b/Triangulation_on_sphere_2/benchmark/Triangulation_on_sphere_2/generate_points.cpp similarity index 100% rename from Triangulation_on_sphere_2/benchmark/generate_points.cpp rename to Triangulation_on_sphere_2/benchmark/Triangulation_on_sphere_2/generate_points.cpp diff --git a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere.cpp b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere.cpp index ca161c357f1..05a9135b26c 100644 --- a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere.cpp +++ b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere.cpp @@ -40,7 +40,7 @@ int main(int, char**) std::cout << dtos.number_of_ghost_faces() << " ghost faces\n" << std::endl; } - CGAL::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_geo.cpp b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_geo.cpp index 5f3d9c21040..a4989188773 100644 --- a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_geo.cpp +++ b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_geo.cpp @@ -57,7 +57,7 @@ int main(int argc, char** argv) std::cout << dtos.number_of_faces() << " solid faces" << std::endl; std::cout << dtos.number_of_ghost_faces() << " ghost faces" << std::endl; - CGAL::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_proj.cpp b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_proj.cpp index a50f6fde1e5..814c36b7089 100644 --- a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_proj.cpp +++ b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_proj.cpp @@ -40,7 +40,7 @@ int main(int, char**) std::cout << dtos.number_of_ghost_faces() << " ghost faces" << std::endl; } - CGAL::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_range.cpp b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_range.cpp index 7ae1621c3c1..d3a9137fee3 100644 --- a/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_range.cpp +++ b/Triangulation_on_sphere_2/examples/Triangulation_on_sphere_2/triang_on_sphere_range.cpp @@ -40,7 +40,7 @@ int main(int argc, char** argv) std::cout << dtos.number_of_vertices() << " vertices" << std::endl; std::cout << dtos.number_of_faces() << " solid faces" << std::endl; - CGAL::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_OFF("result.off", dtos, CGAL::parameters::stream_precision(17)); return EXIT_SUCCESS; } diff --git a/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_2.h b/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_2.h index b883507a5e0..33a14b828e7 100644 --- a/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_2.h +++ b/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_2.h @@ -1051,7 +1051,7 @@ Delaunay_triangulation_on_sphere_2:: circumcenter_on_sphere(const Face_handle f) const { CGAL_precondition(dimension() == 2); - CGAL_precondition(!is_ghost(f)); +// CGAL_precondition(!is_ghost(f)); return circumcenter_on_sphere(point(f, 0), point(f, 1), point(f, 2)); } @@ -1062,7 +1062,7 @@ Delaunay_triangulation_on_sphere_2:: dual_on_sphere(const Face_handle f) const { CGAL_precondition(dimension() == 2); - CGAL_precondition(!is_ghost(f)); +// CGAL_precondition(!is_ghost(f)); return circumcenter_on_sphere(f); } @@ -1073,7 +1073,7 @@ Delaunay_triangulation_on_sphere_2:: dual_on_sphere(const Edge& e) const { CGAL_precondition(dimension() == 2); - CGAL_precondition(!is_ghost(e)); +// CGAL_precondition(!is_ghost(e)); return geom_traits().construct_arc_on_sphere_2_object()(dual_on_sphere(e.first), dual_on_sphere(e.first->neighbor(e.second))); diff --git a/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_traits_2.h b/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_traits_2.h index 5e452819cd3..95c12831583 100644 --- a/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_traits_2.h +++ b/Triangulation_on_sphere_2/include/CGAL/Delaunay_triangulation_on_sphere_traits_2.h @@ -305,6 +305,17 @@ public: initialize_bounds(); } + friend void swap(Self& l, Self& r) + { + using std::swap; + swap(static_cast(l), static_cast(r)); + swap(static_cast(l), static_cast(r)); + swap(l._center, r._center); + swap(l._radius, r._radius); + l.initialize_bounds(); + r.initialize_bounds(); + } + public: const LK& lk() const { return static_cast(*this); } const SK& sk() const { return static_cast(*this); } diff --git a/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2.h b/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2.h index 6f449381eac..9d8aac545a7 100644 --- a/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2.h +++ b/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2.h @@ -200,12 +200,23 @@ public: return is_contour(e.first, e.second); } + template + bool is_infinite(const T&, int = 0) const + { + return false; + } + //-----------------------TRAVERSING : ITERATORS AND CIRCULATORS----------------------------------- typedef typename Tds::Vertex_iterator Vertices_iterator; + typedef typename Tds::Vertex_iterator All_vertices_iterator; typedef typename Tds::Edge_iterator All_edges_iterator; typedef typename Tds::Face_iterator All_faces_iterator; + typedef typename Tds::Vertex_iterator Finite_vertices_iterator; + typedef typename Tds::Edge_iterator Finite_edges_iterator; + typedef typename Tds::Face_iterator Finite_faces_iterator; + typedef typename Tds::Vertex_circulator Vertex_circulator; typedef typename Tds::Edge_circulator Edge_circulator; typedef typename Tds::Face_circulator Face_circulator; @@ -267,14 +278,18 @@ public: typedef boost::transform_iterator Point_iterator; typedef Iterator_range Points; + // -- faces All_faces_iterator all_faces_begin() const { return _tds.faces_begin(); } All_faces_iterator all_faces_end() const { return _tds.faces_end(); } + Finite_faces_iterator finite_faces_begin() const { return _tds.faces_begin(); } + Finite_faces_iterator finite_faces_end() const { return _tds.faces_end(); } All_face_handles all_face_handles() const { return make_prevent_deref_range(all_faces_begin(), all_faces_end()); } + // -- edges Contour_edges_iterator contour_edges_begin() const { if(dimension() < 1) @@ -326,10 +341,19 @@ public: All_edges_iterator all_edges_begin() const { return _tds.edges_begin(); } All_edges_iterator all_edges_end() const { return _tds.edges_end(); } + Finite_edges_iterator finite_edges_begin() const { return _tds.edges_begin(); } + Finite_edges_iterator finite_edges_end() const { return _tds.edges_end(); } + All_edges all_edges() const { return _tds.edges(); } + // -- vertices Vertices_iterator vertices_begin() const { return _tds.vertices_begin(); } Vertices_iterator vertices_end() const { return _tds.vertices_end(); } + All_vertices_iterator all_vertices_begin() const { return _tds.vertices_begin(); } + All_vertices_iterator all_vertices_end() const { return _tds.vertices_end(); } + Finite_vertices_iterator finite_vertices_begin() const { return _tds.vertices_begin(); } + Finite_vertices_iterator finite_vertices_end() const { return _tds.vertices_end(); } + Vertex_handles vertex_handles() const { return make_prevent_deref_range(vertices_begin(), vertices_end()); @@ -491,8 +515,9 @@ void Triangulation_on_sphere_2:: swap(Triangulation_on_sphere_2& tr) { + using std::swap; _tds.swap(tr._tds); - std::swap(tr.geom_traits(), geom_traits()); + swap(_gt, tr._gt); } template diff --git a/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2/IO/OFF.h b/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2/IO/OFF.h index 13fc0a329ab..b939db6e843 100644 --- a/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2/IO/OFF.h +++ b/Triangulation_on_sphere_2/include/CGAL/Triangulation_on_sphere_2/IO/OFF.h @@ -43,6 +43,8 @@ class Triangulation_on_sphere_2; //////////////////////////////////////////////////////////////////////////////////////////////////// // Write +namespace IO { + /*! \ingroup PkgPointSet3IOOFF @@ -187,6 +189,6 @@ bool write_OFF(const std::string& fname, const CGAL::Triangulation_on_sphere_2 -#ifdef CGAL_EIGEN3_ENABLED +#include +#include +#ifdef CGAL_EIGEN3_ENABLED #include +#endif #include #include @@ -26,16 +29,35 @@ namespace CGAL { namespace Triangulations_on_sphere_2 { namespace internal { -template -double get_theta( typename Kernel::Point_3& pt, - typename Kernel::Vector_3& V1, - typename Kernel::Vector_3& V2, - typename Kernel::Vector_3& V3) +template +double get_theta(typename Kernel::Point_3& pt, + typename Kernel::Vector_3& V1, + typename Kernel::Vector_3& V2, + typename Kernel::Vector_3& V3) { typedef typename Kernel::FT FT; - typedef Eigen::Matrix Matrix; - typedef Eigen::Matrix Col; + typedef typename Default::Get +#else + EigenlessDefault +#endif + >::type Matrix; + + typedef typename Default::Get +#else + EigenlessDefault +#endif + >::type Col; + + CGAL_static_assertion_msg(!(std::is_same::value), + "Eigen is required to perform arc subsampling!"); auto V1c = V1.cartesian_begin(), V2c = V2.cartesian_begin(), V3c = V3.cartesian_begin(); @@ -154,6 +176,4 @@ void subsample_arc_on_sphere_2(const ArcOnSphere& arc, } // namespace Triangulations_on_sphere_2 } // namespace CGAL -#endif // CGAL_EIGEN3_ENABLED - #endif // CGAL_TOS2_INTERNAL_ARC_ON_SPHERE_SUBSAMPLING_H diff --git a/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos.cpp b/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos.cpp index 9cec6e8b2ac..e3c66570792 100644 --- a/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos.cpp +++ b/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos.cpp @@ -79,7 +79,7 @@ int main(int, char**) assert(tr.geom_traits().radius() == 1); tr.insert(points.begin(), points.end()); - write_OFF("test_dtos.off", tr); + CGAL::IO::write_OFF("test_dtos.off", tr); assert(tr.is_valid()); ////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos_dual.cpp b/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos_dual.cpp index bd617d65e10..7acf8ae61f2 100644 --- a/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos_dual.cpp +++ b/Triangulation_on_sphere_2/test/Triangulation_on_sphere_2/test_dtos_dual.cpp @@ -33,7 +33,7 @@ void test(const PointRange& points) dt.insert(points.begin(), points.end()); // The triangulation, using straight edges - write_OFF("result.off", dt, CGAL::parameters::stream_precision(17)); + CGAL::IO::write_OFF("result.off", dt, CGAL::parameters::stream_precision(17)); std::ofstream out_primal("edges_primal.polylines.cgal"); out_primal.precision(17); diff --git a/Union_find/test/Union_find/include/CGAL/test_macros.h b/Union_find/test/Union_find/include/CGAL/test_macros.h index 7ba8334b2f1..369323eab84 100644 --- a/Union_find/test/Union_find/include/CGAL/test_macros.h +++ b/Union_find/test/Union_find/include/CGAL/test_macros.h @@ -14,7 +14,7 @@ else {} #define CGAL_IO_TEST(datao,datai,iomode) { \ std::stringstream S; \ - CGAL::set_mode(S,iomode); \ + CGAL::IO::set_mode(S,iomode); \ S << datao; \ if ( iomode != CGAL::IO::BINARY) \ S << '\n'; \ diff --git a/Visibility_2/include/CGAL/Triangular_expansion_visibility_2.h b/Visibility_2/include/CGAL/Triangular_expansion_visibility_2.h index 43a66c0fbd0..f8a723265d5 100644 --- a/Visibility_2/include/CGAL/Triangular_expansion_visibility_2.h +++ b/Visibility_2/include/CGAL/Triangular_expansion_visibility_2.h @@ -18,7 +18,7 @@ #include -#include +#include #include #include #include @@ -151,7 +151,7 @@ private: // May change during visibility computation mutable Observer observer; - mutable boost::shared_ptr p_cdt; + mutable std::shared_ptr p_cdt; mutable std::vector needles; // Copy constructor and assignment not supported @@ -696,7 +696,7 @@ private: Make_constraint()); //std::cout << "init_cdt new CDT" << std::endl; - p_cdt = boost::shared_ptr(new CDT(begin, end)); + p_cdt = std::shared_ptr(new CDT(begin, end)); observer.has_changed = false; //std::cout << "init_cdt done" << std::endl; //std::cout << std::endl; diff --git a/Voronoi_diagram_2/include/CGAL/Delaunay_triangulation_on_sphere_adaptation_traits_2.h b/Voronoi_diagram_2/include/CGAL/Delaunay_triangulation_on_sphere_adaptation_traits_2.h new file mode 100644 index 00000000000..3a4023d7455 --- /dev/null +++ b/Voronoi_diagram_2/include/CGAL/Delaunay_triangulation_on_sphere_adaptation_traits_2.h @@ -0,0 +1,61 @@ +// Copyright (c) 2021 GeometryFactory +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Mael Rouxel-Labbé + +#ifndef CGAL_DELAUNAY_TRIANGULATION_ADAPTATION_TRAITS_2_H +#define CGAL_DELAUNAY_TRIANGULATION_ADAPTATION_TRAITS_2_H 1 + +#include + +#include +#include +#include +#include + +namespace CGAL { + +template +struct Delaunay_triangulation_on_sphere_adaptation_traits_2 +{ +public: + typedef DToS2 Delaunay_graph; + typedef typename DToS2::Geom_traits Geom_traits; + typedef typename Geom_traits::Point_on_sphere_2 Point_2; + typedef Point_2 Site_2; + + typedef CGAL_VORONOI_DIAGRAM_2_INS::Point_accessor Access_site_2; + typedef CGAL_VORONOI_DIAGRAM_2_INS::DToS2_Voronoi_point_2 Construct_Voronoi_point_2; + + typedef typename Delaunay_graph::Vertex_handle Delaunay_vertex_handle; + typedef typename Delaunay_graph::Edge Delaunay_edge; + typedef typename Delaunay_graph::Face_handle Delaunay_face_handle; + + typedef CGAL::Tag_false Has_nearest_site_2; + typedef CGAL_VORONOI_DIAGRAM_2_INS::Null_functor Nearest_site_2; + + Delaunay_triangulation_on_sphere_adaptation_traits_2(const Geom_traits& gt) : gt(gt) { } + + Access_site_2 access_site_2_object() const + { return Access_site_2(gt); } + + Construct_Voronoi_point_2 construct_Voronoi_point_2_object() const + { return Construct_Voronoi_point_2(gt); } + + Nearest_site_2 nearest_site_2_object() const + { return Nearest_site_2(); } + +private: + const Geom_traits gt; // intentional copy +}; + +} //namespace CGAL + +#endif // CGAL_DELAUNAY_TRIANGULATION_ADAPTATION_TRAITS_2_H diff --git a/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Construct_dual_points.h b/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Construct_dual_points.h index 993dacbeae9..a0ff91ad5d5 100644 --- a/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Construct_dual_points.h +++ b/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Construct_dual_points.h @@ -77,6 +77,31 @@ public: //========================================================================= +template +struct DToS2_Voronoi_point_2 +{ +private: + typedef typename DToS2::Geom_traits Geom_traits; + typedef typename Geom_traits::Point_on_sphere_2 Point_on_sphere_2; + +public: + typedef typename DToS2::Face_handle Face_handle; + typedef Point_on_sphere_2 result_type; + + DToS2_Voronoi_point_2(const Geom_traits& gt) : gt(gt) { } + + result_type operator()(const Face_handle f) const + { + return gt.construct_circumcenter_on_sphere_2_object()( + f->vertex(0)->point(), f->vertex(1)->point(), f->vertex(2)->point()); + } + +private: + const Geom_traits& gt; +}; + +//========================================================================= + template class Segment_Voronoi_diagram_Voronoi_point_2 { diff --git a/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Identity_rejectors.h b/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Identity_rejectors.h index 4bbf7c67b44..5e1e2903af4 100644 --- a/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Identity_rejectors.h +++ b/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Identity_rejectors.h @@ -53,22 +53,12 @@ struct Identity_edge_rejector return false; } - bool operator()(const Delaunay_graph& , const Edge& ) const { - return false; - } + // handles Edge, All_edges_iterator, Finite_edges_iterator, Edge_circulator... + // use a single template in case some of these types (typically All_edges_iterator + // and Finite_edges_iterator) are equal - bool operator()(const Delaunay_graph& , - const All_edges_iterator& ) const { - return false; - } - - bool operator()(const Delaunay_graph& , - const Finite_edges_iterator& ) const { - return false; - } - - bool operator()(const Delaunay_graph& , - const Edge_circulator& ) const { + template + bool operator()(const Delaunay_graph& , const E& ) const { return false; } }; diff --git a/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Site_accessors.h b/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Site_accessors.h index 50f7a347f56..fdf92ffa573 100644 --- a/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Site_accessors.h +++ b/Voronoi_diagram_2/include/CGAL/Voronoi_diagram_2/Site_accessors.h @@ -15,12 +15,11 @@ #include - #include namespace CGAL { - -namespace VoronoiDiagram_2 { namespace Internal { +namespace VoronoiDiagram_2 { +namespace Internal { //========================================================================= //========================================================================= @@ -70,11 +69,10 @@ struct Point_accessor } }; -//========================================================================= //========================================================================= -} } //namespace VoronoiDiagram_2::Internal - -} //namespace CGAL +} // namespace Internal +} // namespace VoronoiDiagram_2 +} // namespace CGAL #endif // CGAL_VORONOI_DIAGRAM_2_SITE_ACCESSORS_H diff --git a/Voronoi_diagram_2/include/CGAL/draw_voronoi_diagram_2.h b/Voronoi_diagram_2/include/CGAL/draw_voronoi_diagram_2.h index 66f7d364293..3ccb450b14f 100644 --- a/Voronoi_diagram_2/include/CGAL/draw_voronoi_diagram_2.h +++ b/Voronoi_diagram_2/include/CGAL/draw_voronoi_diagram_2.h @@ -32,10 +32,10 @@ namespace CGAL { struct DefaultColorFunctorV2 { template - static CGAL::Color run(const V2 &, const typename V2::Face_iterator /*fh*/) { + static CGAL::IO::Color run(const V2 &, const typename V2::Face_iterator /*fh*/) { //CGAL::Random random((unsigned int)(std::size_t)(&*fh)); //return get_random_color(random); - return CGAL::Color(73, 250, 117); + return CGAL::IO::Color(73, 250, 117); } }; @@ -88,7 +88,7 @@ protected: void compute_dual_vertex(Dual_vertices_iterator vi) { - add_point(vi->point(), CGAL::Color(50, 100, 180)); + add_point(vi->point(), CGAL::IO::Color(50, 100, 180)); } void add_segments_and_update_bounding_box(Halfedge_handle he) @@ -187,7 +187,7 @@ protected: if (he->is_ray()) { if (he->has_source()) { // add_ray_segment(he->source()->point(), get_second_point(he)); - add_ray(he->source()->point(), direction, CGAL::Color(100, 0, 0)); + add_ray(he->source()->point(), direction, CGAL::IO::Color(100, 0, 0)); } } else if (he->is_bisector()) { Kernel::Point_2 pointOnLine((v1->point().x() + v2->point().x()) / 2, @@ -198,7 +198,7 @@ protected: void compute_face(Face_const_handle fh) { - CGAL::Color c = m_fcolor.run(v2, fh); + CGAL::IO::Color c = m_fcolor.run(v2, fh); Ccb_halfedge_circulator ec_start = fh->ccb(); Ccb_halfedge_circulator ec = ec_start;