diff --git a/.gitattributes b/.gitattributes index fa0e3ffdd7b..38d7151d460 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3219,12 +3219,17 @@ Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet.pdf -text svneol=unset#applicati Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet1.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/add_facet2.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/euler.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler_center.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/euler_center.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.gif -text svneol=unset#image/gif +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/euler_loop.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/euler_loop.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.gif -text svneol=unset#image/gif +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.pdf -text svneol=unset#application/pdf +Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.svg -text Polyhedron/doc_tex/Polyhedron_ref/fig/halfedge.gif -text svneol=unset#image/gif Polyhedron/doc_tex/Polyhedron_ref/fig/halfedge.pdf -text svneol=unset#application/pdf Polyhedron/doc_tex/Polyhedron_ref/fig/halfedge_small.gif -text svneol=unset#image/gif diff --git a/Installation/INSTALL b/Installation/INSTALL index f35323a25a2..4b5b45a7f1d 100644 --- a/Installation/INSTALL +++ b/Installation/INSTALL @@ -11,7 +11,7 @@ are for the most common use cases, and cover the command line tools. For further information, or in case of problems, please see the detailed installation instructions, which can be found in this distribution in the file ./doc_html/index.html or on the CGAL website -http://www.cgal.org/Manual/beta/doc_html/cgal_manual/Installation/Chapter_main.html +http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Installation/Chapter_main.html The documentation of CGAL is available in PDF and HTML formats. It is not bundled with the software but can be downloaded separately diff --git a/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp b/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp index 016e772b0b5..6f29a180e18 100644 --- a/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp +++ b/Intersections_3/test/Intersections_3/triangle_other_intersection_test.cpp @@ -216,15 +216,20 @@ void random_test() // Precomputed results test // ----------------------------------- template -bool test_aux(const Triangle t, +bool test_aux(bool is_kernel_exact, + const Triangle t, const Query& q, const std::string& name, - const Result& expected) + const Result& expected, + double sq_espilon = 1e-20) { CGAL::Object object = CGAL::intersection(t,q); const Result* pr = CGAL::object_cast(&object); - if ( (NULL != pr) && (expected == *pr) ) + if ( (NULL != pr) && + (is_kernel_exact ? + (expected == *pr) : + CGAL::to_double(CGAL::squared_distance(expected, *pr)) < sq_espilon ) ) { return true; } @@ -243,7 +248,7 @@ bool test_aux(const Triangle t, } template -bool test() +bool test(bool is_kernel_exact = true) { // types typedef typename K::FT FT; @@ -281,10 +286,10 @@ bool test() Segment s32(p3,p2); Segment s31(p3,p1); - bool b = test_aux(t,s12,"t-s12",s12); - b &= test_aux(t,s21,"t-s21",s21); - b &= test_aux(t,s13,"t-s13",s13); - b &= test_aux(t,s23,"t-s23",s23); + bool b = test_aux(is_kernel_exact,t,s12,"t-s12",s12); + b &= test_aux(is_kernel_exact,t,s21,"t-s21",s21); + b &= test_aux(is_kernel_exact,t,s13,"t-s13",s13); + b &= test_aux(is_kernel_exact,t,s23,"t-s23",s23); // Inside points Point p4(FT(0.5), FT(0.5), FT(0.)); @@ -318,30 +323,30 @@ bool test() Segment s78(p7,p8); Segment s87(p8,p7); - b &= test_aux(t,s14,"t-s14",s14); - b &= test_aux(t,s41,"t-s41",s41); - b &= test_aux(t,s24,"t-s24",s24); - b &= test_aux(t,s42,"t-s42",s42); - b &= test_aux(t,s15,"t-s15",s15); - b &= test_aux(t,s25,"t-s25",s25); - b &= test_aux(t,s34,"t-s34",s34); - b &= test_aux(t,s35,"t-s35",s35); - b &= test_aux(t,s36,"t-s36",s36); - b &= test_aux(t,s45,"t-s45",s45); - b &= test_aux(t,s16,"t-s16",s16); - b &= test_aux(t,s26,"t-s26",s26); - b &= test_aux(t,s62,"t-s62",s62); - b &= test_aux(t,s46,"t-s46",s46); - b &= test_aux(t,s65,"t-s65",s65); - b &= test_aux(t,s64,"t-s64",s64); - b &= test_aux(t,s48,"t-s48",s48); - b &= test_aux(t,s56,"t-s56",s56); - b &= test_aux(t,s17,"t-t17",s17); - b &= test_aux(t,s67,"t-t67",s67); - b &= test_aux(t,s68,"t-s68",s68); - b &= test_aux(t,s86,"t-s86",s86); - b &= test_aux(t,s78,"t-t78",s78); - b &= test_aux(t,s87,"t-t87",s87); + b &= test_aux(is_kernel_exact,t,s14,"t-s14",s14); + b &= test_aux(is_kernel_exact,t,s41,"t-s41",s41); + b &= test_aux(is_kernel_exact,t,s24,"t-s24",s24); + b &= test_aux(is_kernel_exact,t,s42,"t-s42",s42); + b &= test_aux(is_kernel_exact,t,s15,"t-s15",s15); + b &= test_aux(is_kernel_exact,t,s25,"t-s25",s25); + b &= test_aux(is_kernel_exact,t,s34,"t-s34",s34); + b &= test_aux(is_kernel_exact,t,s35,"t-s35",s35); + b &= test_aux(is_kernel_exact,t,s36,"t-s36",s36); + b &= test_aux(is_kernel_exact,t,s45,"t-s45",s45); + b &= test_aux(is_kernel_exact,t,s16,"t-s16",s16); + b &= test_aux(is_kernel_exact,t,s26,"t-s26",s26); + b &= test_aux(is_kernel_exact,t,s62,"t-s62",s62); + b &= test_aux(is_kernel_exact,t,s46,"t-s46",s46); + b &= test_aux(is_kernel_exact,t,s65,"t-s65",s65); + b &= test_aux(is_kernel_exact,t,s64,"t-s64",s64); + b &= test_aux(is_kernel_exact,t,s48,"t-s48",s48); + b &= test_aux(is_kernel_exact,t,s56,"t-s56",s56); + b &= test_aux(is_kernel_exact,t,s17,"t-t17",s17); + b &= test_aux(is_kernel_exact,t,s67,"t-t67",s67); + b &= test_aux(is_kernel_exact,t,s68,"t-s68",s68); + b &= test_aux(is_kernel_exact,t,s86,"t-s86",s86); + b &= test_aux(is_kernel_exact,t,s78,"t-t78",s78); + b &= test_aux(is_kernel_exact,t,s87,"t-t87",s87); // Outside points (in triangle plane) Point pA(FT(-0.5), FT(1.), FT(0.5)); @@ -362,17 +367,17 @@ bool test() Segment s1F(p1,pF); Segment sF6(pF,p6); - b &= test_aux(t,sAB,"t-sAB",p2); - b &= test_aux(t,sBC,"t-sBC",s46); - b &= test_aux(t,s2E,"t-s2E",s26); - b &= test_aux(t,sE2,"t-sE2",s62); - b &= test_aux(t,s2A,"t-s2A",p2); - b &= test_aux(t,s6E,"t-s6E",p6); - b &= test_aux(t,sB8,"t-sB8",s48); - b &= test_aux(t,sC8,"t-sC8",s68); - b &= test_aux(t,s8C,"t-s8C",s86); - b &= test_aux(t,s1F,"t-s1F",s13); - b &= test_aux(t,sF6,"t-sF6",s36); + b &= test_aux(is_kernel_exact,t,sAB,"t-sAB",p2); + b &= test_aux(is_kernel_exact,t,sBC,"t-sBC",s46); + b &= test_aux(is_kernel_exact,t,s2E,"t-s2E",s26); + b &= test_aux(is_kernel_exact,t,sE2,"t-sE2",s62); + b &= test_aux(is_kernel_exact,t,s2A,"t-s2A",p2); + b &= test_aux(is_kernel_exact,t,s6E,"t-s6E",p6); + b &= test_aux(is_kernel_exact,t,sB8,"t-sB8",s48); + b &= test_aux(is_kernel_exact,t,sC8,"t-sC8",s68); + b &= test_aux(is_kernel_exact,t,s8C,"t-s8C",s86); + b &= test_aux(is_kernel_exact,t,s1F,"t-s1F",s13); + b &= test_aux(is_kernel_exact,t,sF6,"t-sF6",s36); // Outside triangle plane Point pa(FT(0.), FT(0.), FT(0.)); @@ -386,11 +391,11 @@ bool test() Segment sa8(pa,p8); Segment sb2(pb,p2); - b &= test_aux(t,sab,"t-sab",p1); - b &= test_aux(t,sac,"t-sac",p6); - b &= test_aux(t,sae,"t-sae",p8); - b &= test_aux(t,sa8,"t-sa8",p8); - b &= test_aux(t,sb2,"t-sb2",p2); + b &= test_aux(is_kernel_exact,t,sab,"t-sab",p1); + b &= test_aux(is_kernel_exact,t,sac,"t-sac",p6); + b &= test_aux(is_kernel_exact,t,sae,"t-sae",p8); + b &= test_aux(is_kernel_exact,t,sa8,"t-sa8",p8); + b &= test_aux(is_kernel_exact,t,sb2,"t-sb2",p2); // ----------------------------------- // ray queries @@ -401,10 +406,10 @@ bool test() Ray r13(p1,p3); Ray r23(p2,p3); - b &= test_aux(t,r12,"t-r12",s12); - b &= test_aux(t,r21,"t-r21",s21); - b &= test_aux(t,r13,"t-r13",s13); - b &= test_aux(t,r23,"t-r23",s23); + b &= test_aux(is_kernel_exact,t,r12,"t-r12",s12); + b &= test_aux(is_kernel_exact,t,r21,"t-r21",s21); + b &= test_aux(is_kernel_exact,t,r13,"t-r13",s13); + b &= test_aux(is_kernel_exact,t,r23,"t-r23",s23); // In triangle Point p9_(FT(0.), FT(0.5), FT(0.5)); @@ -432,26 +437,26 @@ bool test() Ray r68(p6,p8); Segment r89_res(p8,p9_); - b &= test_aux(t,r14,"t-r14",s12); - b &= test_aux(t,r41,"t-r41",s41); - b &= test_aux(t,r24,"t-r24",s21); - b &= test_aux(t,r42,"t-r42",s42); - b &= test_aux(t,r15,"t-r15",s15); - b &= test_aux(t,r25,"t-r25",s23); - b &= test_aux(t,r34,"t-r34",s34); - b &= test_aux(t,r35,"t-r35",s32); - b &= test_aux(t,r36,"t-r36",s31); - b &= test_aux(t,r45,"t-r45",s45); - b &= test_aux(t,r16,"t-r16",s13); - b &= test_aux(t,r26,"t-r26",s26); - b &= test_aux(t,r62,"t-r62",s62); - b &= test_aux(t,r46,"t-r46",s46); - b &= test_aux(t,r48,"t-r48",s46); - b &= test_aux(t,r56,"t-r56",s56); - b &= test_aux(t,r47,"t-r47",s45); - b &= test_aux(t,r89,"t-t89",r89_res); - b &= test_aux(t,r68,"t-r68",s64); - b &= test_aux(t,r86,"t-r86",s86); + b &= test_aux(is_kernel_exact,t,r14,"t-r14",s12); + b &= test_aux(is_kernel_exact,t,r41,"t-r41",s41); + b &= test_aux(is_kernel_exact,t,r24,"t-r24",s21); + b &= test_aux(is_kernel_exact,t,r42,"t-r42",s42); + b &= test_aux(is_kernel_exact,t,r15,"t-r15",s15); + b &= test_aux(is_kernel_exact,t,r25,"t-r25",s23); + b &= test_aux(is_kernel_exact,t,r34,"t-r34",s34); + b &= test_aux(is_kernel_exact,t,r35,"t-r35",s32); + b &= test_aux(is_kernel_exact,t,r36,"t-r36",s31); + b &= test_aux(is_kernel_exact,t,r45,"t-r45",s45); + b &= test_aux(is_kernel_exact,t,r16,"t-r16",s13); + b &= test_aux(is_kernel_exact,t,r26,"t-r26",s26); + b &= test_aux(is_kernel_exact,t,r62,"t-r62",s62); + b &= test_aux(is_kernel_exact,t,r46,"t-r46",s46); + b &= test_aux(is_kernel_exact,t,r48,"t-r48",s46); + b &= test_aux(is_kernel_exact,t,r56,"t-r56",s56); + b &= test_aux(is_kernel_exact,t,r47,"t-r47",s45); + b &= test_aux(is_kernel_exact,t,r89,"t-t89",r89_res); + b &= test_aux(is_kernel_exact,t,r68,"t-r68",s64); + b &= test_aux(is_kernel_exact,t,r86,"t-r86",s86); // Outside points (in triangre prane) @@ -467,17 +472,17 @@ bool test() Ray r1F(p1,pF); Ray rF6(pF,p6); - b &= test_aux(t,rAB,"t-rAB",p2); - b &= test_aux(t,rBC,"t-rBC",s46); - b &= test_aux(t,r2E,"t-r2E",s26); - b &= test_aux(t,rE2,"t-rE2",s62); - b &= test_aux(t,r2A,"t-r2A",p2); - b &= test_aux(t,r6E,"t-r6E",p6); - b &= test_aux(t,rB8,"t-rB8",s46); - b &= test_aux(t,rC8,"t-rC8",s64); - b &= test_aux(t,r8C,"t-r8C",s86); - b &= test_aux(t,r1F,"t-r1F",s13); - b &= test_aux(t,rF6,"t-rF6",s31); + b &= test_aux(is_kernel_exact,t,rAB,"t-rAB",p2); + b &= test_aux(is_kernel_exact,t,rBC,"t-rBC",s46); + b &= test_aux(is_kernel_exact,t,r2E,"t-r2E",s26); + b &= test_aux(is_kernel_exact,t,rE2,"t-rE2",s62); + b &= test_aux(is_kernel_exact,t,r2A,"t-r2A",p2); + b &= test_aux(is_kernel_exact,t,r6E,"t-r6E",p6); + b &= test_aux(is_kernel_exact,t,rB8,"t-rB8",s46); + b &= test_aux(is_kernel_exact,t,rC8,"t-rC8",s64); + b &= test_aux(is_kernel_exact,t,r8C,"t-r8C",s86); + b &= test_aux(is_kernel_exact,t,r1F,"t-r1F",s13); + b &= test_aux(is_kernel_exact,t,rF6,"t-rF6",s31); // Outside triangle plane Ray rab(pa,pb); @@ -486,11 +491,11 @@ bool test() Ray ra8(pa,p8); Ray rb2(pb,p2); - b &= test_aux(t,rab,"t-rab",p1); - b &= test_aux(t,rac,"t-rac",p6); - b &= test_aux(t,rae,"t-rae",p8); - b &= test_aux(t,ra8,"t-ra8",p8); - b &= test_aux(t,rb2,"t-rb2",p2); + b &= test_aux(is_kernel_exact,t,rab,"t-rab",p1); + b &= test_aux(is_kernel_exact,t,rac,"t-rac",p6); + b &= test_aux(is_kernel_exact,t,rae,"t-rae",p8); + b &= test_aux(is_kernel_exact,t,ra8,"t-ra8",p8); + b &= test_aux(is_kernel_exact,t,rb2,"t-rb2",p2); // ----------------------------------- // Line queries @@ -501,10 +506,10 @@ bool test() Line l13(p1,p3); Line l23(p2,p3); - b &= test_aux(t,l12,"t-l12",s12); - b &= test_aux(t,l21,"t-l21",s21); - b &= test_aux(t,l13,"t-l13",s13); - b &= test_aux(t,l23,"t-l23",s23); + b &= test_aux(is_kernel_exact,t,l12,"t-l12",s12); + b &= test_aux(is_kernel_exact,t,l21,"t-l21",s21); + b &= test_aux(is_kernel_exact,t,l13,"t-l13",s13); + b &= test_aux(is_kernel_exact,t,l23,"t-l23",s23); // In triangle Line l14(p1,p4); @@ -530,26 +535,26 @@ bool test() Segment l89_res(p1,p9_); - b &= test_aux(t,l14,"t-l14",s12); - b &= test_aux(t,l41,"t-l41",s21); - b &= test_aux(t,l24,"t-l24",s21); - b &= test_aux(t,l42,"t-l42",s12); - b &= test_aux(t,l15,"t-l15",s15); - b &= test_aux(t,l25,"t-l25",s23); - b &= test_aux(t,l34,"t-l34",s34); - b &= test_aux(t,l35,"t-l35",s32); - b &= test_aux(t,l36,"t-l36",s31); - b &= test_aux(t,l45,"t-l45",s45); - b &= test_aux(t,l16,"t-l16",s13); - b &= test_aux(t,l26,"t-l26",s26); - b &= test_aux(t,l62,"t-l62",s62); - b &= test_aux(t,l46,"t-l46",s46); - b &= test_aux(t,l48,"t-l48",s46); - b &= test_aux(t,l56,"t-l56",s56); - b &= test_aux(t,l47,"t-l47",s45); - b &= test_aux(t,l89,"t-t89",l89_res); - b &= test_aux(t,l68,"t-l68",s64); - b &= test_aux(t,l86,"t-l86",s46); + b &= test_aux(is_kernel_exact,t,l14,"t-l14",s12); + b &= test_aux(is_kernel_exact,t,l41,"t-l41",s21); + b &= test_aux(is_kernel_exact,t,l24,"t-l24",s21); + b &= test_aux(is_kernel_exact,t,l42,"t-l42",s12); + b &= test_aux(is_kernel_exact,t,l15,"t-l15",s15); + b &= test_aux(is_kernel_exact,t,l25,"t-l25",s23); + b &= test_aux(is_kernel_exact,t,l34,"t-l34",s34); + b &= test_aux(is_kernel_exact,t,l35,"t-l35",s32); + b &= test_aux(is_kernel_exact,t,l36,"t-l36",s31); + b &= test_aux(is_kernel_exact,t,l45,"t-l45",s45); + b &= test_aux(is_kernel_exact,t,l16,"t-l16",s13); + b &= test_aux(is_kernel_exact,t,l26,"t-l26",s26); + b &= test_aux(is_kernel_exact,t,l62,"t-l62",s62); + b &= test_aux(is_kernel_exact,t,l46,"t-l46",s46); + b &= test_aux(is_kernel_exact,t,l48,"t-l48",s46); + b &= test_aux(is_kernel_exact,t,l56,"t-l56",s56); + b &= test_aux(is_kernel_exact,t,l47,"t-l47",s45); + b &= test_aux(is_kernel_exact,t,l89,"t-t89",l89_res); + b &= test_aux(is_kernel_exact,t,l68,"t-l68",s64); + b &= test_aux(is_kernel_exact,t,l86,"t-l86",s46); // Outside points (in triangle plane) @@ -565,17 +570,17 @@ bool test() Line l1F(p1,pF); Line lF6(pF,p6); - b &= test_aux(t,lAB,"t-lAB",p2); - b &= test_aux(t,lBC,"t-lBC",s46); - b &= test_aux(t,l2E,"t-l2E",s26); - b &= test_aux(t,lE2,"t-lE2",s62); - b &= test_aux(t,l2A,"t-l2A",p2); - b &= test_aux(t,l6E,"t-l6E",s26); - b &= test_aux(t,lB8,"t-lB8",s46); - b &= test_aux(t,lC8,"t-lC8",s64); - b &= test_aux(t,l8C,"t-l8C",s46); - b &= test_aux(t,l1F,"t-l1F",s13); - b &= test_aux(t,lF6,"t-lF6",s31); + b &= test_aux(is_kernel_exact,t,lAB,"t-lAB",p2); + b &= test_aux(is_kernel_exact,t,lBC,"t-lBC",s46); + b &= test_aux(is_kernel_exact,t,l2E,"t-l2E",s26); + b &= test_aux(is_kernel_exact,t,lE2,"t-lE2",s62); + b &= test_aux(is_kernel_exact,t,l2A,"t-l2A",p2); + b &= test_aux(is_kernel_exact,t,l6E,"t-l6E",s26); + b &= test_aux(is_kernel_exact,t,lB8,"t-lB8",s46); + b &= test_aux(is_kernel_exact,t,lC8,"t-lC8",s64); + b &= test_aux(is_kernel_exact,t,l8C,"t-l8C",s46); + b &= test_aux(is_kernel_exact,t,l1F,"t-l1F",s13); + b &= test_aux(is_kernel_exact,t,lF6,"t-lF6",s31); // Outside triangle plane Line lab(pa,pb); @@ -584,11 +589,11 @@ bool test() Line la8(pa,p8); Line lb2(pb,p2); - b &= test_aux(t,lab,"t-lab",p1); - b &= test_aux(t,lac,"t-lac",p6); - b &= test_aux(t,lae,"t-lae",p8); - b &= test_aux(t,la8,"t-la8",p8); - b &= test_aux(t,lb2,"t-lb2",p2); + b &= test_aux(is_kernel_exact,t,lab,"t-lab",p1); + b &= test_aux(is_kernel_exact,t,lac,"t-lac",p6); + b &= test_aux(is_kernel_exact,t,lae,"t-lae",p8); + b &= test_aux(is_kernel_exact,t,la8,"t-la8",p8); + b &= test_aux(is_kernel_exact,t,lb2,"t-lb2",p2); return b; @@ -606,22 +611,22 @@ int main() // ----------------------------------- std::cout << "Test precomputed intersection results" << std::endl; std::cout << "\tTesting with Simple_cartesian..." << std::endl ; - bool b = test(); + bool b = test(false); std::cout << "\tTesting with Simple_cartesian..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Cartesian..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Cartesian..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Exact_predicates_inexact_constructions_kernel..." << std::endl ; - b &= test(); + b &= test(false); std::cout << "\tTesting with Exact_predicates_exact_constructions_kernel..." << std::endl ; - b &= test(); + b &= test(true); //test with a coplanar segment b &= CGAL::intersection( Epec::Segment_3(Epec::Point_3(0.125, 0, -0.125),Epec::Point_3(0.25, 0, -0.125) ), diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab index 175d6bc0540..19e04f3930f 100644 --- a/Maintenance/infrastructure/cgal.geometryfactory.com/crontab +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/crontab @@ -11,14 +11,13 @@ # Update testsuite result pages -5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection +#5,15,25,35,45,55 * * * * cd $HOME/CGAL/collect_and_public_testresults; ./treat_result_collection # Create internal release # The script also updates the manual tools. # "next" alone -#0 21 * * Mon,Tue,Wed,Thu,Fri,Sun cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next --public --do-it +0 21 * * Fri,Sat cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next --public --do-it -0 21 * * Fri cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next --public --do-it # "next" + candidates 0 21 * * Mon,Tue,Wed,Thu,Sun cd $HOME/CGAL/create_internal_release; $HOME/bin/create_release $HOME/CGAL/next $HOME/CGAL/candidate-packages --public --do-it diff --git a/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex b/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex index 836aff7874a..d88a91a6168 100644 --- a/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex +++ b/Mesh_3/doc_tex/Mesh_3_ref/Mesh_polyhedron_3.tex @@ -12,7 +12,7 @@ % +------------------------------------------------------------------------+ -\begin{ccRefClass}{Mesh_polyhedron_3} %% add template arg's if necessary +\begin{ccRefClass}{Mesh_polyhedron_3} %% add template arg's if necessary %% \ccHtmlCrossLink{} %% add further rules for cross referencing links %% \ccHtmlIndexC[class]{} %% add further index entries @@ -28,16 +28,18 @@ detection algorithm. \ccParameters -Template parameter \ccc{Gt} stands for the geometric traits associated -to the meshing process. It should be a model of concept \ccc{PolyhedronTraits_3}. +Template parameter \ccc{IGT} stands for the geometric traits associated +to the meshing process. It should be a model of the two concepts +\ccc{PolyhedronTraits_3} and \ccc{IntersectionGeometricTraits_3}. \ccTypes -\ccNestedType{type}{\ccc{CGAL::Polyhedron_3} type with customized \ccc{PolyhedronItems_3} +\ccNestedType{type}{\ccc{CGAL::Polyhedron_3} type with customized \ccc{PolyhedronItems_3} designed to handle sharp feature detection.} \ccSeeAlso +\ccRefIdfierPage{CGAL::Polyhedron_3} \ccRefIdfierPage{CGAL::Polyhedral_mesh_domain_with_features_3} \end{ccRefClass} diff --git a/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex b/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex index 3c7ccb9f9cf..ff07014507c 100644 --- a/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex +++ b/Mesh_3/doc_tex/Mesh_3_ref/Polyhedral_mesh_domain_with_features_3.tex @@ -53,7 +53,7 @@ instantiated with a model of the concept \ccc{IntersectionGeometricTraits_3}. \ccConstructor{template Polyhedral_mesh_domain_with_features_3(const Polyhedron& p);}{ Constructs a \ccc{Polyhedral_mesh_domain_with_features_3} from a \ccc{Polyhedron}. -The only requirement on type \ccc{Polyhedron} is that \ccc{CGAL::Polyhedron_3} should +The only requirement on type \ccc{Polyhedron} is that \ccc{CGAL::Mesh_polyhedron_3::type} should be constructible from \ccc{Polyhedron}. No feature detection is done at this level. Note that a copy of \ccc{p} will be done.} @@ -73,7 +73,7 @@ those triangles is a feature edge.} \ccRefConceptPage{MeshDomainWithFeatures_3} \\ \ccRefIdfierPage{CGAL::Mesh_domain_with_polyline_features_3} \\ \ccRefIdfierPage{CGAL::Polyhedral_mesh_domain_3} \\ -\ccRefConceptPage{Mesh_polyhedron_3} +\ccRefIdfierPage{CGAL::Mesh_polyhedron_3} \end{ccRefClass} diff --git a/Mesh_3/doc_tex/Mesh_3_ref/intro.tex b/Mesh_3/doc_tex/Mesh_3_ref/intro.tex index dd1b5e63f7f..62b6ec7868c 100644 --- a/Mesh_3/doc_tex/Mesh_3_ref/intro.tex +++ b/Mesh_3/doc_tex/Mesh_3_ref/intro.tex @@ -51,7 +51,7 @@ and their associated classes: \ccRefIdfierPage{CGAL::Polyhedral_mesh_domain_with_features_3} \\ \ccRefIdfierPage{CGAL::Labeled_image_mesh_domain_3} \\ \ccRefIdfierPage{CGAL::Mesh_domain_with_polyline_features_3} \\ -\ccRefIdfierPage{CGAL::Mesh_polyhedron_3} \\ +\ccRefIdfierPage{CGAL::Mesh_polyhedron_3} \\ \ccRefIdfierPage{CGAL::Triangle_accessor_3,K>} \\ diff --git a/Number_types/test/Number_types/Root_of_traits.cpp b/Number_types/test/Number_types/Root_of_traits.cpp index 86d1ef54716..a9cb2f5c2a2 100644 --- a/Number_types/test/Number_types/Root_of_traits.cpp +++ b/Number_types/test/Number_types/Root_of_traits.cpp @@ -46,6 +46,7 @@ void test_root_of_traits_for_set(Integer, Rational, FWS){ } int main(){ + std::cout << "Testing with double" << std::endl; CGAL::Test::test_root_of_traits< double , double , double >(); try{// just compile and try to get as far as you can go. @@ -56,6 +57,7 @@ int main(){ #ifdef CGAL_HAS_GMP_ARITHMETIC_KERNEL //TODO: switch to Gmpq { + std::cout << "Testing with GMP" << std::endl; typedef CGAL::GMP_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; @@ -65,6 +67,7 @@ int main(){ #endif #ifdef CGAL_HAS_LEDA_ARITHMETIC_KERNEL { + std::cout << "Testing with LEDA" << std::endl; typedef CGAL::LEDA_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; @@ -74,6 +77,7 @@ int main(){ #endif #ifdef CGAL_HAS_CORE_ARITHMETIC_KERNEL { + std::cout << "Testing with CORE" << std::endl; typedef CGAL::CORE_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; @@ -82,6 +86,7 @@ int main(){ } #endif { + std::cout << "Testing with MP_Float" << std::endl; typedef CGAL::MP_Float_arithmetic_kernel AK; typedef AK::Integer Integer; typedef AK::Rational Rational; diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg new file mode 100644 index 00000000000..84dbd660f59 --- /dev/null +++ b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler.svg @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.pdf b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.pdf new file mode 100644 index 00000000000..259c5fb3a48 Binary files /dev/null and b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.pdf differ diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.svg new file mode 100644 index 00000000000..cde3e4a3371 --- /dev/null +++ b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_facet.svg @@ -0,0 +1,929 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.pdf b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.pdf new file mode 100644 index 00000000000..baca524996d Binary files /dev/null and b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.pdf differ diff --git a/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.svg b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.svg new file mode 100644 index 00000000000..5201ecd87e1 --- /dev/null +++ b/Polyhedron/doc_tex/Polyhedron_ref/fig/euler_vertex.svg @@ -0,0 +1,938 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex b/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex index b366e999da4..8689874bea1 100644 --- a/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex +++ b/STL_Extension/doc_tex/STL_Extension_ref/tuple.tex @@ -33,7 +33,8 @@ is taken from Boost. Some free functions part of the standard interface of \ccc{tuple} are also brought in namespace \ccc{CGAL::cpp0x} with using declarations, these are \ccc{make_tuple}, -\ccc{get}, \ccc{tie}. +\ccc{get}, \ccc{tie}. Like in C++0x, the \ccc{get} function template is +specialized so that it can take \ccc{std::pair} as argument. Two standard helper classes are also provided for convenience (\ccc{tuple_size} and \ccc{tuple_element}). \end{ccRefClass} diff --git a/STL_Extension/include/CGAL/tuple.h b/STL_Extension/include/CGAL/tuple.h index 65699b3c76e..698df419e55 100644 --- a/STL_Extension/include/CGAL/tuple.h +++ b/STL_Extension/include/CGAL/tuple.h @@ -27,12 +27,15 @@ #ifndef CGAL_CFG_NO_CPP0X_TUPLE # include -#elif !defined CGAL_CFG_NO_TR1_TUPLE -# include -#else -# include -# include #endif +#ifndef CGAL_CFG_NO_TR1_TUPLE +# include +# include +#endif + +#include +#include +#include namespace CGAL { @@ -68,6 +71,47 @@ struct tuple_element: public boost::tuples::element{}; #endif + +#if defined(CGAL_CFG_NO_CPP0X_TUPLE) && defined(CGAL_CFG_NO_TR1_TUPLE) +// If not TR1 or C++11 tuple, we need to add get(std::pair). + +//////////////////////////////////////////////////////////// +// // +// Allow CGAL::cpp0x::get(std::pair), if N==0 or N==1. // +// // +// That is already in TR1 and C++11, but not in Boost. // +// // +//////////////////////////////////////////////////////////// +template +struct pair_get; + +template +struct pair_get<0, T1, T2> { + static T1& get(std::pair& pair) { return pair.first; } + static const T1& get(const std::pair& pair) { return pair.first; } +}; // end specialization struct pair_get<0, T2, T2> + +template +struct pair_get<1, T1, T2> { + static T2& get(std::pair& pair) { return pair.second; } + static const T2& get(const std::pair& pair) { return pair.second; } +}; // end specialization struct pair_get<0, T2, T2> + +template +inline typename boost::tuples::element >::type& +get(std::pair& pair) { + return pair_get::get(pair); +} + +template +inline const typename boost::tuples::element >::type& +get(const std::pair& pair) { + return pair_get::get(pair); +} + +#endif // end if not C++11 tuple + + } // cpp0x #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES diff --git a/STL_Extension/test/STL_Extension/test_stl_extension.cpp b/STL_Extension/test/STL_Extension/test_stl_extension.cpp index a7ab589d457..75e8bbbb05e 100644 --- a/STL_Extension/test/STL_Extension/test_stl_extension.cpp +++ b/STL_Extension/test/STL_Extension/test_stl_extension.cpp @@ -8110,13 +8110,31 @@ void test_tuple(){ T1 t1=CGAL::cpp0x::make_tuple(1,2); T1 t1_2=CGAL::cpp0x::make_tuple(1,2); + + CGAL_assertion(t1==t1_2); // test the equality operator + + // T2 t2 = T2(); + // CGAL_assertion( t2 == T2() ); + // + // Do not test equality between default initialized tuples, because + // GNU/g++ version 4.1.2 does not default-initialize correctly + // std::tr1::tuple. + + // Test CGAL::cpp0x::tie int i1=-1,i2=-1; CGAL::cpp0x::tie(i1,i2)=t1; CGAL_assertion( CGAL::cpp0x::get<0>(t1)==i1 ); CGAL_assertion( CGAL::cpp0x::get<1>(t1)==i2 ); - CGAL_assertion(t1==t1_2); // test the equality operator - T2 t2 = T2(); - CGAL_assertion( t2 == T2() ); + + // Test CGAL::cpp0x::get for a pair + double d = 1; + std::pair pair(-3, &d); + const std::pair const_pair(2, &d); + + assert(CGAL::cpp0x::get<0>(pair) == -3); + assert(CGAL::cpp0x::get<1>(pair) == &d); + assert(CGAL::cpp0x::get<0>(const_pair) == 2); + assert(CGAL::cpp0x::get<1>(const_pair) == &d); } void test_prev_next() diff --git a/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h b/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h index 7994b531c21..ded63d4ab9f 100644 --- a/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h +++ b/Straight_skeleton_2/include/CGAL/create_straight_skeleton_2.h @@ -135,6 +135,7 @@ boost::shared_ptr< Straight_skeleton_2 > inline create_interior_straight_skeleton_2 ( Polygon const& aOutContour, K const& k ) { + CGAL_precondition(aOutContour.is_simple() || !"The input polygon is not simple."); return create_interior_straight_skeleton_2(CGAL_SS_i::vertices_begin(aOutContour) ,CGAL_SS_i::vertices_end(aOutContour) ,k @@ -221,6 +222,7 @@ boost::shared_ptr< Straight_skeleton_2 > inline create_exterior_straight_skeleton_2 ( FT const& aMaxOffset, Polygon const& aPoly, K const& k ) { + CGAL_precondition(aPoly.is_simple() || !"The input polygon is not simple."); return create_exterior_straight_skeleton_2(aMaxOffset ,CGAL_SS_i::vertices_begin(aPoly) ,CGAL_SS_i::vertices_end (aPoly) diff --git a/Stream_support/include/CGAL/IO/File_header_gocad.h b/Stream_support/include/CGAL/IO/File_header_gocad.h deleted file mode 100644 index 620b6e23c56..00000000000 --- a/Stream_support/include/CGAL/IO/File_header_gocad.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2009 GeometryFactory All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 3 of the License, -// or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// -// -// Author(s) : Andreas Fabri - - -#ifndef CGAL_IO_FILE_HEADER_GOCAD_H -#define CGAL_IO_FILE_HEADER_GOCAD_H 1 - -#include -#include - -namespace CGAL { - -class File_header_gocad { -private: - std::string m_fname; - std::string m_color; -public: -explicit File_header_gocad(std::string fname, std::string color) : m_fname(fname), m_color(color) {} - - std::string fname() const - { - return m_fname; - } - - std::string color() const - { - return m_color; - } - - -}; - -// Write header. -inline std::ostream& operator<<( std::ostream& out, const File_header_gocad& h){ - - return out << "GOCAD TSurf 1\n" - "HEADER {\n" - "name:" << h.fname() << "\n" - "*solid*color:" << h.color() << "\n" - "}\n" - "TFACE\n"; -} - -} //namespace CGAL -#endif // CGAL_IO_FILE_HEADER_GOCAD_H diff --git a/Stream_support/include/CGAL/IO/File_writer_gocad.h b/Stream_support/include/CGAL/IO/File_writer_gocad.h deleted file mode 100644 index 2267c66e3a5..00000000000 --- a/Stream_support/include/CGAL/IO/File_writer_gocad.h +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright (c) 1997 -// Utrecht University (The Netherlands), -// ETH Zurich (Switzerland), -// INRIA Sophia-Antipolis (France), -// Max-Planck-Institute Saarbruecken (Germany), -// and Tel-Aviv University (Israel). All rights reserved. -// -// This file is part of CGAL (www.cgal.org); you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public License as -// published by the Free Software Foundation; either version 3 of the License, -// or (at your option) any later version. -// -// Licensees holding a valid commercial license may use this file in -// accordance with the commercial license agreement provided with the software. -// -// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -// -// $URL$ -// $Id$ -// -// -// Author(s) : Lutz Kettner - -#ifndef CGAL_IO_FILE_WRITER_GOCAD_H -#define CGAL_IO_FILE_WRITER_GOCAD_H 1 - -#include -#include -#include -#include - -namespace CGAL { - -class File_writer_gocad { - int m_vertex_index; - std::ostream* m_out; - File_header_gocad m_header; -public: - File_writer_gocad(std::string fname, std::string color) : m_vertex_index(0), m_header(fname, color) {} - File_writer_gocad( const File_header_gocad& h) : m_vertex_index(0), m_header( h) {} - - std::ostream& out() { return *m_out; } - File_header_gocad& header() { return m_header; } - const File_header_gocad& header() const { return m_header; } - - void write_header( std::ostream& o, - std::size_t vertices, - std::size_t halfedges, - std::size_t facets, - bool normals = false) - { - m_out = &o; - out() << header(); - } - - - void write_footer() - {} - - void write_vertex( const double& x, const double& y, const double& z) { - out() << "VRTX " << m_vertex_index++ << ' ' << x << ' ' << y << ' ' << z << '\n'; - } - - void write_facet_header() { - out() << '\n'; - } - - void write_facet_begin( std::size_t no) { - CGAL_assertion(no == 3); - out() << "TRGL " << ' '; - } - void write_facet_vertex_index( std::size_t index) { - out() << ' ' << index; - } - void write_facet_end() { - out() << '\n'; - } -}; - -} //namespace CGAL -#endif // CGAL_IO_FILE_WRITER_GOCAD_H // -// EOF // diff --git a/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex b/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex index dc6a281517c..2f8d4476d4b 100644 --- a/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex +++ b/Triangulation_2/doc_tex/Triangulation_2_ref/Constrained_triangulation_plus_2.tex @@ -102,7 +102,7 @@ is \ccc{Context}.} \ccConstructor{Constrained_triangulation_plus_2(const Constrained_triangulation_plus_2& ct);}{Copy constructor.} -\ccConstructor{Constrained_triangulation_plus_2(std::list& lc, +\ccConstructor{Constrained_triangulation_plus_2(std::list& lc, const Geom_traits& t = Geom_traits())} {Introduces and builds a constrained triangulation from the list of constraints \ccc{lc}.} @@ -119,9 +119,9 @@ $\left[\right.$\ccc{first}, \ccc{last}$\left.\right)$. is \ccc{Constraint}. } -\ccFunction{void ~ctp();} -{Destructor. All vertices and faces are deleted. -The constraint hierarchy is deleted.} +%\ccFunction{void ~ctp();} +%{Destructor. All vertices and faces are deleted. +%The constraint hierarchy is deleted.} diff --git a/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h b/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h index 79a8a521374..894fee0afbe 100644 --- a/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h +++ b/Triangulation_3/include/CGAL/Delaunay_triangulation_3.h @@ -47,12 +47,18 @@ namespace CGAL { +// Here is the declaration of a class template with three arguments, one +// having a default value. There is no definition of that class template. template < class Gt, class Tds_ = Default, class Location_policy = Default > class Delaunay_triangulation_3; +// There is a specialization Delaunay_triangulation_3 +// defined in . +// Here is the specialization Delaunay_triangulation_3, with two +// arguments, that is if Location_policy being the default value 'Default'. template < class Gt, class Tds_ > class Delaunay_triangulation_3 : public Triangulation_3