From eee9dc66c2d7e9482c643c75b9f09925b89bb7ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20B=C3=A4sken?= Date: Tue, 13 Aug 2002 10:43:03 +0000 Subject: [PATCH] *** empty log message *** --- Packages/GeoWin/changes.txt | 5 + Packages/GeoWin/include/CGAL/geowin_support.h | 190 ++++++++++++------ Packages/GeoWin/version | 2 +- 3 files changed, 130 insertions(+), 67 deletions(-) diff --git a/Packages/GeoWin/changes.txt b/Packages/GeoWin/changes.txt index 3ebb8506dce..350979ce99f 100644 --- a/Packages/GeoWin/changes.txt +++ b/Packages/GeoWin/changes.txt @@ -1,3 +1,8 @@ +1.6.1 (13 Aug 2002) +- changes in geowin_support.h : + conversion function templates moved into CGAL namespace + polygon is now able to work with non-CGAL points + 1.6 (29 July 2002) - some demos changed - code cleanup (some VC 6 /KCC stuff removed) diff --git a/Packages/GeoWin/include/CGAL/geowin_support.h b/Packages/GeoWin/include/CGAL/geowin_support.h index 116b1b5ecb6..0574876b5b3 100644 --- a/Packages/GeoWin/include/CGAL/geowin_support.h +++ b/Packages/GeoWin/include/CGAL/geowin_support.h @@ -12,10 +12,10 @@ // release_date : // // file : include/CGAL/geowin_support.h -// package : GeoWin (1.6) +// package : GeoWin (1.6.1) // maintainer : Matthias Baesken -// revision : 1.6 -// revision_date : 29 July 2002 +// revision : 1.6.1 +// revision_date : 13 August 2002 // author(s) : Matthias Baesken, Ulrike Bartuschka, Stefan Naeher // // coordinator : Matthias Baesken, Trier () @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -144,6 +145,35 @@ typedef std::list CGALTetrahedron_3_list; #endif +namespace CGAL { + + +// ---------------------------------------------------------------------- +// get rid of the member function calls for coordinate access ... +// ---------------------------------------------------------------------- +// CGAL ... + +template +double x_double(const CGAL::Point_2& obj) +{ return CGAL::to_double(obj.x()); } + +template +double y_double(const CGAL::Point_2& obj) +{ return CGAL::to_double(obj.y()); } + + +// LEDA rat kernel ... + +double x_double(const leda_rat_point& obj) +{ return CGAL::to_double(obj.xcoord()); } + +double y_double(const leda_rat_point& obj) +{ return CGAL::to_double(obj.ycoord()); } + + +// ---------------------------------------------------------------------- + + template leda_point convert_to_leda(const CGAL::Point_2& obj) { @@ -212,7 +242,7 @@ leda_polygon convert_to_leda(const CGAL::Polygon_2& p) leda_list lp; - while (it != st) { lp.append(leda_point(CGAL::to_double((*it).x()),CGAL::to_double((*it).y()))); it++; } + while (it != st) { lp.append(leda_point(x_double(*it),y_double(*it))); it++; } leda_polygon ph(lp); @@ -253,12 +283,16 @@ leda_rectangle convert_to_leda(const CGAL::Iso_rectangle_2& t) return leda_rectangle(lp1,lp2); } +} // end namespace CGAL ... + LEDA_BEGIN_NAMESPACE ps_file& operator<<(ps_file& F,const leda_d3_point& obj); LEDA_END_NAMESPACE +namespace CGAL { + template leda_d3_point convert_to_leda(const CGAL::Point_3& obj) { @@ -332,47 +366,52 @@ leda_polygon convert_to_leda(const CGAL::Tetrahedron_3& obj) return pol; } +} // end namespace CGAL ... + + LEDA_BEGIN_NAMESPACE -template -ps_file& operator<<(ps_file& F,const CGAL::Point_2& o) { F << convert_to_leda(o); return F; } +// output operators for the ps_file ... template -ps_file& operator<<(ps_file& F,const CGAL::Segment_2& o) { F << convert_to_leda(o); return F; } +ps_file& operator<<(ps_file& F,const CGAL::Point_2& o) { F << CGAL::convert_to_leda(o); return F; } template -ps_file& operator<<(ps_file& F,const CGAL::Circle_2& o) { F << convert_to_leda(o); return F; } +ps_file& operator<<(ps_file& F,const CGAL::Segment_2& o) { F << CGAL::convert_to_leda(o); return F; } template -ps_file& operator<<(ps_file& F,const CGAL::Line_2& o) { F << convert_to_leda(o); return F; } +ps_file& operator<<(ps_file& F,const CGAL::Circle_2& o) { F << CGAL::convert_to_leda(o); return F; } template -ps_file& operator<<(ps_file& F,const CGAL::Ray_2& o) { F << convert_to_leda(o); return F; } +ps_file& operator<<(ps_file& F,const CGAL::Line_2& o) { F << CGAL::convert_to_leda(o); return F; } + +template +ps_file& operator<<(ps_file& F,const CGAL::Ray_2& o) { F << CGAL::convert_to_leda(o); return F; } template ps_file& operator<<(ps_file& F,const CGAL::Polygon_2& o) -{ F << convert_to_leda(o); return F; } +{ F << CGAL::convert_to_leda(o); return F; } template -ps_file& operator<<(ps_file& F,const CGAL::Triangle_2& o) { F << convert_to_leda(o); return F; } +ps_file& operator<<(ps_file& F,const CGAL::Triangle_2& o) { F << CGAL::convert_to_leda(o); return F; } template ps_file& operator<<(ps_file& F,const CGAL::Iso_rectangle_2& o) -{ F << convert_to_leda(o); return F; } +{ F << CGAL::convert_to_leda(o); return F; } template -ps_file& operator<<(ps_file& F,const CGAL::Point_3& o) { F << convert_to_leda(o); return F; } +ps_file& operator<<(ps_file& F,const CGAL::Point_3& o) { F << CGAL::convert_to_leda(o); return F; } template ps_file& operator<<(ps_file& F,const CGAL::Segment_3& o) -{ leda_d3_segment seg = convert_to_leda(o); +{ leda_d3_segment seg = CGAL::convert_to_leda(o); F << seg.project_xy(); return F; } template ps_file& operator<<(ps_file& F,const CGAL::Line_3& o) -{ leda_d3_line l = convert_to_leda(o); +{ leda_d3_line l = CGAL::convert_to_leda(o); leda_line m; if (l.project_xy(m)){ // projection is a line ... @@ -387,7 +426,7 @@ ps_file& operator<<(ps_file& F,const CGAL::Line_3& o) template ps_file& operator<<(ps_file& F,const CGAL::Ray_3& o) -{ leda_d3_ray r = convert_to_leda(o); +{ leda_d3_ray r = CGAL::convert_to_leda(o); leda_ray m; if (r.project_xy(m)){ // projection is a line ... @@ -402,7 +441,7 @@ ps_file& operator<<(ps_file& F,const CGAL::Ray_3& o) template ps_file& operator<<(ps_file& F,const CGAL::Triangle_3& o) -{ F << convert_to_leda(o); return F; } +{ F << CGAL::convert_to_leda(o); return F; } template ps_file& operator<<(ps_file& F,const CGAL::Tetrahedron_3& obj) @@ -460,6 +499,8 @@ static void geowin_generate_circle_segments(leda_list& LS, leda_ci #include #include +// intersects box and bounding box functions ... + GEOWIN_BEGIN_NAMESPACE template @@ -664,7 +705,7 @@ void cgal_Point_2_d3(const T& L, leda_d3_window& W, GRAPH& H) typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_point p = convert_to_leda(*iter); + leda_point p = CGAL::convert_to_leda(*iter); G.new_node(leda_d3_point(p.xcoord(), p.ycoord(),0)); } H.join(G); @@ -762,7 +803,7 @@ void cgal_Segment_2_d3(const T& L, leda_d3_window& W, GRAPH& typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_segment s = convert_to_leda(*iter); + leda_segment s = CGAL::convert_to_leda(*iter); leda_node v1 = G.new_node(leda_d3_point(s.source().xcoord(),s.source().ycoord(),0)); leda_node v2 = G.new_node(leda_d3_point(s.target().xcoord(),s.target().ycoord(),0)); leda_edge e1 = G.new_edge(v1,v2); @@ -793,7 +834,7 @@ const char* leda_tname(CGAL::Circle_2* p) { return "CGALCircle"; } template bool geowin_IntersectsBox(const CGAL::Circle_2& obj, double x1,double y1,double x2, double y2,bool f) { - return geowin_IntersectsBox(convert_to_leda(obj),x1,y1,x2,y2,f); + return geowin_IntersectsBox(CGAL::convert_to_leda(obj),x1,y1,x2,y2,f); } template @@ -819,7 +860,7 @@ void geowin_Translate(CGAL::Circle_2& obj, double dx, double dy) template void geowin_Rotate(CGAL::Circle_2& obj, double x, double y, double a) { - leda_circle hlp=convert_to_leda(obj); + leda_circle hlp=CGAL::convert_to_leda(obj); hlp = hlp.rotate(leda_point(x,y), a); convert_from_leda(hlp,obj); } @@ -855,7 +896,7 @@ void cgal_Circle_2_d3(const T& L, leda_d3_window& W, GRAPH& H typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_circle c = convert_to_leda(*iter); + leda_circle c = CGAL::convert_to_leda(*iter); leda_list LS; geowin_generate_circle_segments(LS,c,30); leda_segment siter; @@ -892,14 +933,14 @@ const char* leda_tname(CGAL::Line_2* p) { return "CGALLine"; } template bool geowin_IntersectsBox(const CGAL::Line_2& obj, double x1,double y1,double x2, double y2,bool f) { - return geowin_IntersectsBox(convert_to_leda(obj),x1,y1,x2,y2,f); + return geowin_IntersectsBox(CGAL::convert_to_leda(obj),x1,y1,x2,y2,f); } template void geowin_BoundingBox(const CGAL::Line_2& obj, double& x1, double& x2, double& y1, double& y2) { - geowin_BoundingBox(convert_to_leda(obj),x1,x2,y1,y2); + geowin_BoundingBox(CGAL::convert_to_leda(obj),x1,x2,y1,y2); } template @@ -917,7 +958,7 @@ void geowin_Translate(CGAL::Line_2& obj, double dx, double dy) template void geowin_Rotate(CGAL::Line_2& obj, double x, double y, double a) { - leda_line hlp=convert_to_leda(obj); + leda_line hlp=CGAL::convert_to_leda(obj); hlp = hlp.rotate(leda_point(x,y), a); convert_from_leda(hlp,obj); } @@ -954,7 +995,7 @@ void cgal_Line_2_d3(const T& L, leda_d3_window& W, GRAPH& H) typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_line li = convert_to_leda(*iter); + leda_line li = CGAL::convert_to_leda(*iter); leda_point pm((li.point1().xcoord()+li.point2().xcoord())/2,(li.point1().ycoord()+li.point2().ycoord())/2); leda_vector v = li.point1() - li.point2(); v= v * 50; @@ -989,14 +1030,14 @@ const char* leda_tname(CGAL::Ray_2* p) { return "CGALRay"; } template bool geowin_IntersectsBox(const CGAL::Ray_2& obj, double x1,double y1,double x2, double y2,bool f) { - return geowin_IntersectsBox(convert_to_leda(obj),x1,y1,x2,y2,f); + return geowin_IntersectsBox(CGAL::convert_to_leda(obj),x1,y1,x2,y2,f); } template void geowin_BoundingBox(const CGAL::Ray_2& obj, double& x1, double& x2, double& y1, double& y2) { - geowin_BoundingBox(convert_to_leda(obj),x1,x2,y1,y2); + geowin_BoundingBox(CGAL::convert_to_leda(obj),x1,x2,y1,y2); } template @@ -1014,7 +1055,7 @@ void geowin_Translate(CGAL::Ray_2& obj, double dx, double dy) template void geowin_Rotate(CGAL::Ray_2& obj, double x, double y, double a) { - leda_ray hlp=convert_to_leda(obj); + leda_ray hlp=CGAL::convert_to_leda(obj); hlp = hlp.rotate(leda_point(x,y), a); convert_from_leda(hlp,obj); } @@ -1051,7 +1092,7 @@ void cgal_Ray_2_d3(const T& L, leda_d3_window& W, GRAPH& H) typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_ray r = convert_to_leda(*iter); + leda_ray r = CGAL::convert_to_leda(*iter); leda_vector v = r.point2() - r.point1(); v= v * 50; leda_point p1=r.source(), p2=p1 + v; @@ -1087,7 +1128,7 @@ const char* leda_tname(CGAL::Triangle_2* t) { return "CGALTriangle"; } template bool geowin_IntersectsBox(const CGAL::Triangle_2& obj, double x1,double y1,double x2, double y2,bool f) { - return geowin_IntersectsBox(convert_to_leda(obj),x1,y1,x2,y2,f); + return geowin_IntersectsBox(CGAL::convert_to_leda(obj),x1,y1,x2,y2,f); } template @@ -1113,7 +1154,7 @@ void geowin_Translate(CGAL::Triangle_2& obj, double dx, double dy) template void geowin_Rotate(CGAL::Triangle_2& obj, double x, double y, double a) { - leda_polygon hlp=convert_to_leda(obj); + leda_polygon hlp=CGAL::convert_to_leda(obj); hlp = hlp.rotate(leda_point(x,y), a); convert_from_leda(hlp,obj); } @@ -1137,9 +1178,9 @@ void cgal_Triangle_2_d3(const T& L, leda_d3_window& W, GRAPH& typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_point p0 = convert_to_leda((*iter).vertex(0)); - leda_point p1 = convert_to_leda((*iter).vertex(1)); - leda_point p2 = convert_to_leda((*iter).vertex(2)); + leda_point p0 = CGAL::convert_to_leda((*iter).vertex(0)); + leda_point p1 = CGAL::convert_to_leda((*iter).vertex(1)); + leda_point p2 = CGAL::convert_to_leda((*iter).vertex(2)); leda_node v0 = G.new_node(leda_d3_point(p0.xcoord(),p0.ycoord(),0)); leda_node v1 = G.new_node(leda_d3_point(p1.xcoord(),p1.ycoord(),0)); @@ -1236,10 +1277,10 @@ void cgal_Iso_rectangle_2_d3(const T& L, leda_d3_window& W, GRAPH> (leda_window& w, CGAL::Polygon_2& obj template bool geowin_IntersectsBox(const CGAL::Polygon_2& obj, double x1,double y1,double x2, double y2,bool f) { - return geowin_IntersectsBox(convert_to_leda(obj),x1,y1,x2,y2,f); + return geowin_IntersectsBox(CGAL::convert_to_leda(obj),x1,y1,x2,y2,f); } template void geowin_BoundingBox(const CGAL::Polygon_2& obj,double& x1, double& x2, double& y1, double& y2) { +#if defined(CGAL_POLYGON_USE_BBOX_AND_AFFINE_TRANSFORMATIONS) CGAL::Bbox_2 bb= obj.bbox(); x1= bb.xmin(); x2=bb.xmax(); y1=bb.ymin(); y2=bb.ymax(); +#else + leda_polygon hlp= CGAL::convert_to_leda(obj); + + leda_point xmin,ymin,xmax,ymax; + hlp.bounding_box(xmin,ymin,xmax,ymax); + x1 = xmin.xcoord(); + x2 = xmax.xcoord(); + y1 = ymin.ycoord(); + y2 = ymax.ycoord(); +#endif } template void geowin_Translate(CGAL::Polygon_2& obj, double dx, double dy) { - typedef typename TRAITS::Point_2 POINT; - typedef typename TRAITS::RT RT; - typedef typename POINT::R REP; +#if defined(CGAL_POLYGON_USE_BBOX_AND_AFFINE_TRANSFORMATIONS) + typedef typename TRAITS::Point_2 POINT; + typedef typename TRAITS::RT RT; + typedef typename POINT::R REP; CGAL::Vector_2 vec; vec= CGAL::Vector_2(RT(dx), RT(dy)); CGAL::Aff_transformation_2 translate(CGAL::TRANSLATION, vec); obj = CGAL::transform(translate,obj); +#else + leda_polygon hlp= CGAL::convert_to_leda(obj); + hlp = hlp.translate(dx,dy); + convert_from_leda(hlp,obj); +#endif } template void geowin_Rotate(CGAL::Polygon_2& obj, double x, double y, double a) { - leda_polygon hlp=convert_to_leda(obj); + leda_polygon hlp=CGAL::convert_to_leda(obj); hlp = hlp.rotate(leda_point(x,y), a); convert_from_leda(hlp,obj); } @@ -1361,7 +1419,7 @@ void cgal_Polygon_2_d3(const T& L, leda_d3_window& W, GRAPH& leda_list LS; for(;iter != L.end(); iter++) { - leda_polygon p = convert_to_leda(*iter); + leda_polygon p = CGAL::convert_to_leda(*iter); LS = p.segments(); leda_segment siter; forall(siter,LS) { @@ -1476,7 +1534,7 @@ void cgal_Point_3_d3(const T& L, leda_d3_window& W, GRAPH& H) GRAPH G; typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_d3_point p = convert_to_leda(*iter); + leda_d3_point p = CGAL::convert_to_leda(*iter); G.new_node(p); } H.join(G); @@ -1491,7 +1549,7 @@ const char* leda_tname(CGAL::Segment_3* p) { return "CGALSegment_3"; } template leda_window& operator << (leda_window& w, const CGAL::Segment_3& obj) { - leda_d3_segment seg3 = convert_to_leda(obj); + leda_d3_segment seg3 = CGAL::convert_to_leda(obj); leda_segment seg(seg3.source().xcoord(),seg3.source().ycoord(), seg3.target().xcoord(),seg3.target().ycoord()); w << seg; return w; @@ -1516,7 +1574,7 @@ leda_window& operator >> (leda_window& w, CGAL::Segment_3& p) template bool geowin_IntersectsBox(const CGAL::Segment_3& obj, double x1,double y1,double x2, double y2,bool f) { - leda_d3_segment seg3 = convert_to_leda(obj); + leda_d3_segment seg3 = CGAL::convert_to_leda(obj); leda_segment seg(seg3.source().xcoord(),seg3.source().ycoord(), seg3.target().xcoord(),seg3.target().ycoord() ); return geowin_IntersectsBox(seg,x1,y1,x2,y2,f); } @@ -1568,7 +1626,7 @@ void cgal_Segment_3_d3(const T& L, leda_d3_window& W, GRAPH& typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_d3_segment s = convert_to_leda(*iter); + leda_d3_segment s = CGAL::convert_to_leda(*iter); leda_node v1 = G.new_node(s.source()); leda_node v2 = G.new_node(s.target()); leda_edge e1 = G.new_edge(v1,v2); @@ -1586,7 +1644,7 @@ const char* leda_tname(CGAL::Line_3* p) { return "CGALLine_3"; } template leda_window& operator << (leda_window& w, const CGAL::Line_3& obj) { - leda_d3_line l3 = convert_to_leda(obj); + leda_d3_line l3 = CGAL::convert_to_leda(obj); leda_d3_point p1 = l3.point1(); leda_d3_point p2 = l3.point2(); @@ -1621,7 +1679,7 @@ leda_window& operator >> (leda_window& w, CGAL::Line_3& l) template bool geowin_IntersectsBox(const CGAL::Line_3& obj, double x1,double y1,double x2, double y2,bool f) { - leda_d3_line l3 = convert_to_leda(obj); + leda_d3_line l3 = CGAL::convert_to_leda(obj); leda_segment seg(l3.point1().xcoord(),l3.point1().ycoord(), l3.point2().xcoord(),l3.point2().ycoord() ); return geowin_IntersectsBox(seg,x1,y1,x2,y2,f); } @@ -1676,7 +1734,7 @@ void cgal_Line_3_d3(const T& L, leda_d3_window& W, GRAPH& H) typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_d3_line l = convert_to_leda(*iter); + leda_d3_line l = CGAL::convert_to_leda(*iter); leda_d3_point pm((l.point1().xcoord()+l.point2().xcoord())/2, \ (l.point1().ycoord()+l.point2().ycoord())/2, \ @@ -1703,7 +1761,7 @@ const char* leda_tname(CGAL::Ray_3* p) { return "CGALRay_3"; } template leda_window& operator << (leda_window& w, const CGAL::Ray_3& obj) { - leda_d3_ray r3 = convert_to_leda(obj); + leda_d3_ray r3 = CGAL::convert_to_leda(obj); leda_d3_point p1 = r3.point1(); leda_d3_point p2 = r3.point2(); @@ -1738,7 +1796,7 @@ leda_window& operator >> (leda_window& w, CGAL::Ray_3& r) template bool geowin_IntersectsBox(const CGAL::Ray_3& obj, double x1,double y1,double x2, double y2,bool f) { - leda_d3_ray r3 = convert_to_leda(obj); + leda_d3_ray r3 = CGAL::convert_to_leda(obj); leda_segment seg(r3.point1().xcoord(),r3.point1().ycoord(), r3.point2().xcoord(),r3.point2().ycoord() ); return geowin_IntersectsBox(seg,x1,y1,x2,y2,f); } @@ -1792,7 +1850,7 @@ void cgal_Ray_3_d3(const T& L, leda_d3_window& W, GRAPH& H) typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_d3_ray r = convert_to_leda(*iter); + leda_d3_ray r = CGAL::convert_to_leda(*iter); leda_vector v = r.point2() - r.point1(); v= v * 50; leda_d3_point p1=r.source(), p2=p1 + v; @@ -1814,7 +1872,7 @@ const char* leda_tname(CGAL::Triangle_3* t) { return "CGALTriangle_3"; } template leda_window& operator << (leda_window& w, const CGAL::Triangle_3& obj) { - w << convert_to_leda(obj); + w << CGAL::convert_to_leda(obj); return w; } @@ -1839,7 +1897,7 @@ leda_window& operator >> (leda_window& w, CGAL::Triangle_3& obj) template bool geowin_IntersectsBox(const CGAL::Triangle_3& obj, double x1,double y1,double x2, double y2,bool f) { - return geowin_IntersectsBox(convert_to_leda(obj),x1,y1,x2,y2,f); + return geowin_IntersectsBox(CGAL::convert_to_leda(obj),x1,y1,x2,y2,f); } template @@ -1888,9 +1946,9 @@ void cgal_Triangle_3_d3(const T& L, leda_d3_window& W, GRAPH& typename T::const_iterator iter = L.begin(); for(;iter != L.end(); iter++) { - leda_d3_point p0 = convert_to_leda((*iter).vertex(0)); - leda_d3_point p1 = convert_to_leda((*iter).vertex(1)); - leda_d3_point p2 = convert_to_leda((*iter).vertex(2)); + leda_d3_point p0 = CGAL::convert_to_leda((*iter).vertex(0)); + leda_d3_point p1 = CGAL::convert_to_leda((*iter).vertex(1)); + leda_d3_point p2 = CGAL::convert_to_leda((*iter).vertex(2)); leda_node v0 = G.new_node(p0); leda_node v1 = G.new_node(p1); @@ -1950,7 +2008,7 @@ leda_window& operator >> (leda_window& w, CGAL::Tetrahedron_3& obj) template bool geowin_IntersectsBox(const CGAL::Tetrahedron_3& obj, double x1,double y1,double x2, double y2,bool f) { - return geowin_IntersectsBox(convert_to_leda(obj),x1,y1,x2,y2,f); + return geowin_IntersectsBox(CGAL::convert_to_leda(obj),x1,y1,x2,y2,f); } template @@ -1998,10 +2056,10 @@ void cgal_Tetrahedron_3_d3(const T& L, leda_d3_window& W, GRAPH