diff --git a/src/Airports/GenAirports/build.cxx b/src/Airports/GenAirports/build.cxx index b3b997d5..b52cf1c3 100644 --- a/src/Airports/GenAirports/build.cxx +++ b/src/Airports/GenAirports/build.cxx @@ -326,10 +326,10 @@ static void build_runway( const TGRunway& rwy_info, safe_base = gen_runway_area_w_extend( rwy_info, 0.0, 180.0, 0.0, 0.0, 50.0 ); } - *apt_clearing = polygon_union(safe_base, *apt_clearing); + *apt_clearing = tgPolygonUnion(safe_base, *apt_clearing); // add base to apt_base - *apt_base = polygon_union( base, *apt_base ); + *apt_base = tgPolygonUnion( base, *apt_base ); } @@ -581,11 +581,11 @@ void build_airport( string airport_id, float alt_m, // generate convex hull (no longer) // TGPolygon hull = convex_hull(apt_pts); - TGPolygon filled_base = strip_out_holes( apt_base ); + TGPolygon filled_base = tgPolygonStripHoles( apt_base ); // write_polygon( filled_base, "filled-base" ); - TGPolygon divided_base = split_long_edges( filled_base, 200.0 ); + TGPolygon divided_base = tgPolygonSplitLongEdges( filled_base, 200.0 ); // write_polygon( divided_base, "divided-base" ); - TGPolygon base_poly = polygon_diff( divided_base, accum ); + TGPolygon base_poly = tgPolygonDiff( divided_base, accum ); // write_polygon( base_poly, "base-raw" ); char buf[120]; // For debugging output diff --git a/src/Airports/GenAirports/poly_extra.cxx b/src/Airports/GenAirports/poly_extra.cxx index a5bac67d..d395ed18 100644 --- a/src/Airports/GenAirports/poly_extra.cxx +++ b/src/Airports/GenAirports/poly_extra.cxx @@ -25,7 +25,6 @@ #include <simgear/compiler.h> #include <simgear/debug/logstream.hxx> -#include <simgear/math/sg_geodesy.hxx> #include <Geometry/poly_support.hxx> @@ -116,95 +115,3 @@ TGPolygon add_nodes_to_poly( const TGPolygon& poly, } -// Traverse a polygon and split edges until they are less than max_len -// (specified in meters) -TGPolygon split_long_edges( const TGPolygon &poly, double max_len ) { - TGPolygon result; - Point3D p0, p1; - int i, j, k; - - SG_LOG(SG_GENERAL, SG_DEBUG, "split_long_edges()"); - - for ( i = 0; i < poly.contours(); ++i ) { - // SG_LOG(SG_GENERAL, SG_DEBUG, "contour = " << i); - for ( j = 0; j < poly.contour_size(i) - 1; ++j ) { - p0 = poly.get_pt( i, j ); - p1 = poly.get_pt( i, j + 1 ); - - double az1, az2, s; - geo_inverse_wgs_84( 0.0, - p0.y(), p0.x(), p1.y(), p1.x(), - &az1, &az2, &s ); - SG_LOG(SG_GENERAL, SG_DEBUG, "distance = " << s); - - if ( s > max_len ) { - int segments = (int)(s / max_len) + 1; - SG_LOG(SG_GENERAL, SG_DEBUG, "segments = " << segments); - - double dx = (p1.x() - p0.x()) / segments; - double dy = (p1.y() - p0.y()) / segments; - - for ( k = 0; k < segments; ++k ) { - Point3D tmp( p0.x() + dx * k, p0.y() + dy * k, 0.0 ); - SG_LOG(SG_GENERAL, SG_DEBUG, tmp); - result.add_node( i, tmp ); - } - } else { - SG_LOG(SG_GENERAL, SG_DEBUG, p0); - result.add_node( i, p0 ); - } - - // end of segment is beginning of next segment - } - p0 = poly.get_pt( i, poly.contour_size(i) - 1 ); - p1 = poly.get_pt( i, 0 ); - - double az1, az2, s; - geo_inverse_wgs_84( 0.0, - p0.y(), p0.x(), p1.y(), p1.x(), - &az1, &az2, &s ); - SG_LOG(SG_GENERAL, SG_DEBUG, "distance = " << s); - - if ( s > max_len ) { - int segments = (int)(s / max_len) + 1; - SG_LOG(SG_GENERAL, SG_DEBUG, "segments = " << segments); - - double dx = (p1.x() - p0.x()) / segments; - double dy = (p1.y() - p0.y()) / segments; - - for ( k = 0; k < segments; ++k ) { - Point3D tmp( p0.x() + dx * k, p0.y() + dy * k, 0.0 ); - SG_LOG(SG_GENERAL, SG_DEBUG, tmp); - result.add_node( i, tmp ); - } - } else { - SG_LOG(SG_GENERAL, SG_DEBUG, p0); - result.add_node( i, p0 ); - } - - // maintain original hole flag setting - result.set_hole_flag( i, poly.get_hole_flag( i ) ); - } - - return result; -} - - -// Traverse a polygon and toss all the internal holes -TGPolygon strip_out_holes( const TGPolygon &poly ) { - TGPolygon result; result.erase(); - - SG_LOG(SG_GENERAL, SG_DEBUG, "strip_out_holes()"); - - for ( int i = 0; i < poly.contours(); ++i ) { - // SG_LOG(SG_GENERAL, SG_DEBUG, "contour = " << i); - point_list contour = poly.get_contour( i ); - if ( ! poly.get_hole_flag(i) ) { - result.add_contour( contour, poly.get_hole_flag(i) ); - } - } - - return result; -} - - diff --git a/src/Airports/GenAirports/poly_extra.hxx b/src/Airports/GenAirports/poly_extra.hxx index d4962002..79be4d19 100644 --- a/src/Airports/GenAirports/poly_extra.hxx +++ b/src/Airports/GenAirports/poly_extra.hxx @@ -47,13 +47,4 @@ TGPolygon add_nodes_to_poly( const TGPolygon& poly, const TGTriNodes& tmp_nodes ); -// Traverse a polygon and split edges until they are less than max_len -// (specified in meters) -TGPolygon split_long_edges( const TGPolygon &poly, double max_len ); - - -// Traverse a polygon and toss all the internal holes -TGPolygon strip_out_holes( const TGPolygon &poly ); - - #endif // _POLY_EXTRA_HXX diff --git a/src/Airports/GenAirports/rwy_common.cxx b/src/Airports/GenAirports/rwy_common.cxx index 300b4120..63f8e26c 100644 --- a/src/Airports/GenAirports/rwy_common.cxx +++ b/src/Airports/GenAirports/rwy_common.cxx @@ -203,11 +203,11 @@ void gen_runway_section( const TGRunway& rwy_info, } // Clip the new polygon against what ever has already been created. - TGPolygon clipped = polygon_diff( section, *accum ); + TGPolygon clipped = tgPolygonDiff( section, *accum ); // Split long edges to create an object that can better flow with // the surface terrain - TGPolygon split = split_long_edges( clipped, 400.0 ); + TGPolygon split = tgPolygonSplitLongEdges( clipped, 400.0 ); // Create the final output and push on to the runway super_polygon // list @@ -217,7 +217,7 @@ void gen_runway_section( const TGRunway& rwy_info, sp.set_material( prefix + material ); rwy_polys->push_back( sp ); SG_LOG(SG_GENERAL, SG_DEBUG, "section = " << clipped.contours()); - *accum = polygon_union( section, *accum ); + *accum = tgPolygonUnion( section, *accum ); // Store away what we need to know for texture coordinate // calculation. (CLO 10/20/02: why can't we calculate texture diff --git a/src/Airports/GenAirports/rwy_simple.cxx b/src/Airports/GenAirports/rwy_simple.cxx index 3b2e8983..eb4399e7 100644 --- a/src/Airports/GenAirports/rwy_simple.cxx +++ b/src/Airports/GenAirports/rwy_simple.cxx @@ -76,28 +76,28 @@ void gen_simple_rwy( const TGRunway& rwy_info, TGSuperPoly sp; TGTexParams tp; - TGPolygon clipped_a = polygon_diff( runway_a, *accum ); - TGPolygon split_a = split_long_edges( clipped_a, 400.0 ); + TGPolygon clipped_a = tgPolygonDiff( runway_a, *accum ); + TGPolygon split_a = tgPolygonSplitLongEdges( clipped_a, 400.0 ); sp.erase(); sp.set_poly( split_a ); sp.set_material( material ); rwy_polys->push_back( sp ); SG_LOG(SG_GENERAL, SG_DEBUG, "clipped_a = " << clipped_a.contours()); - *accum = polygon_union( runway_a, *accum ); + *accum = tgPolygonUnion( runway_a, *accum ); tp = TGTexParams( runway_a.get_pt(0,0), rwy_info.width * SG_FEET_TO_METER, rwy_info.length * SG_FEET_TO_METER / 2.0, rwy_info.heading ); texparams->push_back( tp ); - TGPolygon clipped_b = polygon_diff( runway_b, *accum ); - TGPolygon split_b = split_long_edges( clipped_b, 400.0 ); + TGPolygon clipped_b = tgPolygonDiff( runway_b, *accum ); + TGPolygon split_b = tgPolygonSplitLongEdges( clipped_b, 400.0 ); sp.erase(); sp.set_poly( split_b ); sp.set_material( material ); rwy_polys->push_back( sp ); SG_LOG(SG_GENERAL, SG_DEBUG, "clipped_b = " << clipped_b.contours()); - *accum = polygon_union( runway_b, *accum ); + *accum = tgPolygonUnion( runway_b, *accum ); tp = TGTexParams( runway_b.get_pt(0,0), rwy_info.width * SG_FEET_TO_METER, rwy_info.length * SG_FEET_TO_METER / 2.0, diff --git a/src/Airports/GenAirports/taxiway.cxx b/src/Airports/GenAirports/taxiway.cxx index bfea5925..e5441a8b 100644 --- a/src/Airports/GenAirports/taxiway.cxx +++ b/src/Airports/GenAirports/taxiway.cxx @@ -89,8 +89,8 @@ void gen_taxiway( const TGRunway& rwy_info, twid = 250.0; } - TGPolygon clipped_a = polygon_diff( runway_a, *accum ); - TGPolygon split_a = split_long_edges( clipped_a, 400.0 ); + TGPolygon clipped_a = tgPolygonDiff( runway_a, *accum ); + TGPolygon split_a = tgPolygonSplitLongEdges( clipped_a, 400.0 ); sp.erase(); sp.set_poly( split_a ); @@ -98,21 +98,21 @@ void gen_taxiway( const TGRunway& rwy_info, sp.set_flag( "taxi" ); // mark as a taxiway rwy_polys->push_back( sp ); SG_LOG(SG_GENERAL, SG_DEBUG, "clipped_a = " << clipped_a.contours()); - *accum = polygon_union( runway_a, *accum ); + *accum = tgPolygonUnion( runway_a, *accum ); tp = TGTexParams( runway_a.get_pt(0,0), twid * SG_FEET_TO_METER, 250 * SG_FEET_TO_METER, rwy_info.heading ); texparams->push_back( tp ); - TGPolygon clipped_b = polygon_diff( runway_b, *accum ); - TGPolygon split_b = split_long_edges( clipped_b, 400.0 ); + TGPolygon clipped_b = tgPolygonDiff( runway_b, *accum ); + TGPolygon split_b = tgPolygonSplitLongEdges( clipped_b, 400.0 ); sp.erase(); sp.set_poly( split_b ); sp.set_material( material ); rwy_polys->push_back( sp ); SG_LOG(SG_GENERAL, SG_DEBUG, "clipped_b = " << clipped_b.contours()); - *accum = polygon_union( runway_b, *accum ); + *accum = tgPolygonUnion( runway_b, *accum ); tp = TGTexParams( runway_b.get_pt(0,0), twid * SG_FEET_TO_METER, 250 * SG_FEET_TO_METER, diff --git a/src/BuildTiles/Clipper/Makefile.am b/src/BuildTiles/Clipper/Makefile.am index dbdfffce..48dff585 100644 --- a/src/BuildTiles/Clipper/Makefile.am +++ b/src/BuildTiles/Clipper/Makefile.am @@ -15,7 +15,7 @@ testclipper_LDADD = \ $(top_builddir)/src/Lib/landcover/liblandcover.a \ $(top_builddir)/src/Lib/poly2tri/libpoly2tri.a \ $(top_builddir)/src/Lib/TriangleJRS/libTriangleJRS.a \ - -lsgbucket -lsgdebug -lsgmisc -lsgstructure -lsgxml \ + -lsgbucket -lsgdebug -lsgmath -lsgmisc -lsgstructure -lsgxml \ -lgenpolyclip -lz INCLUDES = -I$(top_srcdir)/src/Lib -I$(top_srcdir)/src/BuildTiles diff --git a/src/BuildTiles/Clipper/clipper.cxx b/src/BuildTiles/Clipper/clipper.cxx index e928c5b3..df3c4030 100644 --- a/src/BuildTiles/Clipper/clipper.cxx +++ b/src/BuildTiles/Clipper/clipper.cxx @@ -402,7 +402,7 @@ void TGClipper::merge_slivers( TGPolyList& clipped, TGPolygon& slivers ) { poly = clipped.polys[area][j]; original_contours = poly.contours(); - result = polygon_union( poly, sliver ); + result = tgPolygonUnion( poly, sliver ); result_contours = result.contours(); if ( original_contours == result_contours ) { @@ -489,7 +489,7 @@ bool TGClipper::clip_all(const point2d& min, const point2d& max) { land_mask.erase(); for ( i = 0; i < (int)polys_in.polys[DefaultArea].size(); ++i ) { land_mask = - polygon_union( land_mask, polys_in.polys[DefaultArea][i] ); + tgPolygonUnion( land_mask, polys_in.polys[DefaultArea][i] ); } // set up a mask for all water. @@ -499,7 +499,7 @@ bool TGClipper::clip_all(const point2d& min, const point2d& max) { if (is_water_area(AreaType(i))) { for (unsigned int j = 0; j < polys_in.polys[i].size(); j++) { water_mask = - polygon_union( water_mask, polys_in.polys[i][j] ); + tgPolygonUnion( water_mask, polys_in.polys[i][j] ); } } } @@ -509,7 +509,7 @@ bool TGClipper::clip_all(const point2d& min, const point2d& max) { island_mask.erase(); for ( i = 0; i < (int)polys_in.polys[IslandArea].size(); ++i ) { island_mask = - polygon_union( island_mask, polys_in.polys[IslandArea][i] ); + tgPolygonUnion( island_mask, polys_in.polys[IslandArea][i] ); } // process polygons in priority order @@ -528,20 +528,20 @@ bool TGClipper::clip_all(const point2d& min, const point2d& max) { // if not a hole, clip the area to the land_mask if ( i != HoleArea ) { - tmp = polygon_int( tmp, land_mask ); + tmp = tgPolygonInt( tmp, land_mask ); } // Airport areas are limited to existing land mass and // never override water. if ( i == AirportArea ) { - tmp = polygon_int( tmp, land_mask ); - tmp = polygon_diff( tmp, water_mask ); + tmp = tgPolygonInt( tmp, land_mask ); + tmp = tgPolygonDiff( tmp, water_mask ); } // if a water area, cut out potential islands if ( is_water_area(AreaType(i)) ) { // clip against island mask - tmp = polygon_diff( tmp, island_mask ); + tmp = tgPolygonDiff( tmp, island_mask ); } TGPolygon result_union, result_diff; @@ -550,8 +550,8 @@ bool TGClipper::clip_all(const point2d& min, const point2d& max) { result_diff = tmp; result_union = tmp; } else { - result_diff = polygon_diff( tmp, accum); - result_union = polygon_union( tmp, accum); + result_diff = tgPolygonDiff( tmp, accum); + result_union = tgPolygonUnion( tmp, accum); } // only add to output list if the clip left us with a polygon @@ -587,7 +587,7 @@ bool TGClipper::clip_all(const point2d& min, const point2d& max) { // remains = new gpc_polygon; // remains->num_contours = 0; // remains->contour = NULL; - remains = polygon_diff( polys_in.safety_base, accum ); + remains = tgPolygonDiff( polys_in.safety_base, accum ); if ( remains.contours() > 0 ) { // cout << "remains contours = " << remains.contours() << endl; diff --git a/src/BuildTiles/Main/main.cxx b/src/BuildTiles/Main/main.cxx index eb4769f1..52d618ba 100644 --- a/src/BuildTiles/Main/main.cxx +++ b/src/BuildTiles/Main/main.cxx @@ -243,7 +243,7 @@ static int actual_load_polys( const string& dir, // to reduce the number of separate polygons. static void inline add_to_polys ( TGPolygon &accum, const TGPolygon &poly) { if ( accum.contours() > 0 ) { - accum = polygon_union( accum, poly ); + accum = tgPolygonUnion( accum, poly ); } else { accum = poly; } diff --git a/src/Lib/Polygon/polygon.cxx b/src/Lib/Polygon/polygon.cxx index c6381d13..bf8d56f9 100644 --- a/src/Lib/Polygon/polygon.cxx +++ b/src/Lib/Polygon/polygon.cxx @@ -32,6 +32,7 @@ extern "C" { #include <simgear/constants.h> #include <simgear/debug/logstream.hxx> #include <simgear/math/point3d.hxx> +#include <simgear/math/sg_geodesy.hxx> #include <simgear/structure/exception.hxx> SG_USING_STD(endl); @@ -242,7 +243,7 @@ bool TGPolygon::is_inside( int a, int b ) const { // B.write( "B" ); // A is "inside" B if the polygon_diff( A, B ) is null. - TGPolygon result = polygon_diff( A, B ); + TGPolygon result = tgPolygonDiff( A, B ); // SG_LOG(SG_GENERAL, SG_DEBUG, "result size = " << result.total_size()); // char junk; @@ -416,24 +417,24 @@ TGPolygon polygon_clip( clip_op poly_op, const TGPolygon& subject, // Difference -TGPolygon polygon_diff( const TGPolygon& subject, const TGPolygon& clip ) { +TGPolygon tgPolygonDiff( const TGPolygon& subject, const TGPolygon& clip ) { return polygon_clip( POLY_DIFF, subject, clip ); } // Intersection -TGPolygon polygon_int( const TGPolygon& subject, const TGPolygon& clip ) { +TGPolygon tgPolygonInt( const TGPolygon& subject, const TGPolygon& clip ) { return polygon_clip( POLY_INT, subject, clip ); } // Exclusive or -TGPolygon polygon_xor( const TGPolygon& subject, const TGPolygon& clip ) { +TGPolygon tgPolygonXor( const TGPolygon& subject, const TGPolygon& clip ) { return polygon_clip( POLY_XOR, subject, clip ); } // Union -TGPolygon polygon_union( const TGPolygon& subject, const TGPolygon& clip ) { +TGPolygon tgPolygonUnion( const TGPolygon& subject, const TGPolygon& clip ) { return polygon_clip( POLY_UNION, subject, clip ); } @@ -483,6 +484,98 @@ TGPolygon polygon_canonify( const TGPolygon& in_poly ) { } +// Traverse a polygon and split edges until they are less than max_len +// (specified in meters) +TGPolygon tgPolygonSplitLongEdges( const TGPolygon &poly, double max_len ) { + TGPolygon result; + Point3D p0, p1; + int i, j, k; + + SG_LOG(SG_GENERAL, SG_DEBUG, "split_long_edges()"); + + for ( i = 0; i < poly.contours(); ++i ) { + // SG_LOG(SG_GENERAL, SG_DEBUG, "contour = " << i); + for ( j = 0; j < poly.contour_size(i) - 1; ++j ) { + p0 = poly.get_pt( i, j ); + p1 = poly.get_pt( i, j + 1 ); + + double az1, az2, s; + geo_inverse_wgs_84( 0.0, + p0.y(), p0.x(), p1.y(), p1.x(), + &az1, &az2, &s ); + SG_LOG(SG_GENERAL, SG_DEBUG, "distance = " << s); + + if ( s > max_len ) { + int segments = (int)(s / max_len) + 1; + SG_LOG(SG_GENERAL, SG_DEBUG, "segments = " << segments); + + double dx = (p1.x() - p0.x()) / segments; + double dy = (p1.y() - p0.y()) / segments; + + for ( k = 0; k < segments; ++k ) { + Point3D tmp( p0.x() + dx * k, p0.y() + dy * k, 0.0 ); + SG_LOG(SG_GENERAL, SG_DEBUG, tmp); + result.add_node( i, tmp ); + } + } else { + SG_LOG(SG_GENERAL, SG_DEBUG, p0); + result.add_node( i, p0 ); + } + + // end of segment is beginning of next segment + } + p0 = poly.get_pt( i, poly.contour_size(i) - 1 ); + p1 = poly.get_pt( i, 0 ); + + double az1, az2, s; + geo_inverse_wgs_84( 0.0, + p0.y(), p0.x(), p1.y(), p1.x(), + &az1, &az2, &s ); + SG_LOG(SG_GENERAL, SG_DEBUG, "distance = " << s); + + if ( s > max_len ) { + int segments = (int)(s / max_len) + 1; + SG_LOG(SG_GENERAL, SG_DEBUG, "segments = " << segments); + + double dx = (p1.x() - p0.x()) / segments; + double dy = (p1.y() - p0.y()) / segments; + + for ( k = 0; k < segments; ++k ) { + Point3D tmp( p0.x() + dx * k, p0.y() + dy * k, 0.0 ); + SG_LOG(SG_GENERAL, SG_DEBUG, tmp); + result.add_node( i, tmp ); + } + } else { + SG_LOG(SG_GENERAL, SG_DEBUG, p0); + result.add_node( i, p0 ); + } + + // maintain original hole flag setting + result.set_hole_flag( i, poly.get_hole_flag( i ) ); + } + + return result; +} + + +// Traverse a polygon and toss all the internal holes +TGPolygon tgPolygonStripHoles( const TGPolygon &poly ) { + TGPolygon result; result.erase(); + + SG_LOG(SG_GENERAL, SG_DEBUG, "strip_out_holes()"); + + for ( int i = 0; i < poly.contours(); ++i ) { + // SG_LOG(SG_GENERAL, SG_DEBUG, "contour = " << i); + point_list contour = poly.get_contour( i ); + if ( ! poly.get_hole_flag(i) ) { + result.add_contour( contour, poly.get_hole_flag(i) ); + } + } + + return result; +} + + #if 0 // Wrapper for the fast Polygon Triangulation based on Seidel's // Algorithm by Atul Narkhede and Dinesh Manocha diff --git a/src/Lib/Polygon/polygon.hxx b/src/Lib/Polygon/polygon.hxx index 762c269e..03b645f7 100644 --- a/src/Lib/Polygon/polygon.hxx +++ b/src/Lib/Polygon/polygon.hxx @@ -194,29 +194,38 @@ typedef poly_list::const_iterator const_poly_list_iterator; // canonify the polygon winding, outer contour must be anti-clockwise, // all inner contours must be clockwise. -TGPolygon polygon_canonify( const TGPolygon& in_poly ); +TGPolygon tgPolygonCanonify( const TGPolygon& in_poly ); + + +// Traverse a polygon and split edges until they are less than max_len +// (specified in meters) +TGPolygon tgPolygonSplitLongEdges( const TGPolygon &poly, double max_len ); + + +// Traverse a polygon and toss all the internal holes +TGPolygon tgPolygonStripHoles( const TGPolygon &poly ); // Wrapper for the fast Polygon Triangulation based on Seidel's // Algorithm by Atul Narkhede and Dinesh Manocha // http://www.cs.unc.edu/~dm/CODE/GEM/chapter.html -TGPolygon polygon_to_tristrip( const TGPolygon& poly ); +TGPolygon tgPolygon2tristrip( const TGPolygon& poly ); // wrapper functions for gpc polygon clip routines // Difference -TGPolygon polygon_diff( const TGPolygon& subject, const TGPolygon& clip ); +TGPolygon tgPolygonDiff( const TGPolygon& subject, const TGPolygon& clip ); // Intersection -TGPolygon polygon_int( const TGPolygon& subject, const TGPolygon& clip ); +TGPolygon tgPolygonInt( const TGPolygon& subject, const TGPolygon& clip ); // Exclusive or -TGPolygon polygon_xor( const TGPolygon& subject, const TGPolygon& clip ); +TGPolygon tgPolygonXor( const TGPolygon& subject, const TGPolygon& clip ); // Union -TGPolygon polygon_union( const TGPolygon& subject, const TGPolygon& clip ); +TGPolygon tgPolygonUnion( const TGPolygon& subject, const TGPolygon& clip ); // Output ostream &operator<< (ostream &output, const TGPolygon &poly); diff --git a/src/Lib/Polygon/split-bin.cxx b/src/Lib/Polygon/split-bin.cxx index 2da0d0e6..804516a6 100644 --- a/src/Lib/Polygon/split-bin.cxx +++ b/src/Lib/Polygon/split-bin.cxx @@ -91,7 +91,7 @@ static void clip_and_write_poly( string root, long int p_index, AreaType area, fclose(bfp); */ - result = polygon_int( base, shape ); + result = tgPolygonInt( base, shape ); if ( preserve3d ) { result.inherit_elevations( shape ); } @@ -259,7 +259,7 @@ void tgSplitPolygon( const string& path, AreaType area, bottom.add_node( 0, Point3D(180.0, clip_line, 0) ); bottom.add_node( 0, Point3D(-180.0, clip_line, 0) ); - bottom_clip = polygon_int( bottom, shape ); + bottom_clip = tgPolygonInt( bottom, shape ); } else { bottom_clip = horizontal_clip( shape, clip_line, Below ); } @@ -288,7 +288,7 @@ void tgSplitPolygon( const string& path, AreaType area, top.add_node( 0, Point3D(180.0, max.y(), 0) ); top.add_node( 0, Point3D(-180.0, max.y(), 0) ); - top_clip = polygon_int( top, shape ); + top_clip = tgPolygonInt( top, shape ); } else { top_clip = horizontal_clip( shape, clip_line, Above ); } diff --git a/src/Prep/GSHHS/Makefile.am b/src/Prep/GSHHS/Makefile.am index aadd2020..12a525d0 100644 --- a/src/Prep/GSHHS/Makefile.am +++ b/src/Prep/GSHHS/Makefile.am @@ -9,7 +9,8 @@ gshhs_LDADD = \ $(top_builddir)/src/Lib/Polygon/libPolygon.a \ $(top_builddir)/src/Lib/Geometry/libGeometry.a \ $(top_builddir)/src/Lib/poly2tri/libpoly2tri.a \ - -lsgdebug -lsgbucket -lsgmisc -lsgstructure -lsgxml -lgenpolyclip -lz + -lsgdebug -lsgbucket -lsgmath -lsgmisc -lsgstructure -lsgxml \ + -lgenpolyclip -lz debug_SOURCES = \ debug.cxx @@ -18,6 +19,7 @@ debug_LDADD = \ $(top_builddir)/src/Lib/Polygon/libPolygon.a \ $(top_builddir)/src/Lib/Geometry/libGeometry.a \ $(top_builddir)/src/Lib/poly2tri/libpoly2tri.a \ - -lsgdebug -lsgbucket -lsgmisc -lsgstructure -lsgxml -lgenpolyclip -lz + -lsgdebug -lsgbucket -lsgmath -lsgmisc -lsgstructure -lsgxml \ + -lgenpolyclip -lz INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/Lib diff --git a/src/Prep/GSHHS/debug.cxx b/src/Prep/GSHHS/debug.cxx index e3fb5ec6..9f51f1d8 100644 --- a/src/Prep/GSHHS/debug.cxx +++ b/src/Prep/GSHHS/debug.cxx @@ -122,20 +122,20 @@ void gen_clipped_polygon( const TGPolygon& shape, const TGPolygon& clip ) { upper_shape.erase(); SG_LOG ( SG_GENERAL, SG_INFO, "Clipping lower shape" ); - lower_shape = polygon_int( lower_mask, shape ); + lower_shape = tgPolygonInt( lower_mask, shape ); lower_shape.shift( 360, 0 ); - result = polygon_int( lower_shape, clip ); + result = tgPolygonInt( lower_shape, clip ); write_result( result ); SG_LOG ( SG_GENERAL, SG_INFO, "Clipping center shape" ); - center_shape = polygon_int( center_mask, shape ); - result = polygon_int( center_shape, clip ); + center_shape = tgPolygonInt( center_mask, shape ); + result = tgPolygonInt( center_shape, clip ); write_result( result ); - upper_shape = polygon_int( upper_mask, shape ); + upper_shape = tgPolygonInt( upper_mask, shape ); SG_LOG ( SG_GENERAL, SG_INFO, "Clipping upper shape" ); upper_shape.shift( -360, 0 ); - result = polygon_int( upper_shape, clip ); + result = tgPolygonInt( upper_shape, clip ); write_result( result ); } diff --git a/src/Prep/GSHHS/gshhs_split.cxx b/src/Prep/GSHHS/gshhs_split.cxx index a35fc18c..2478a41b 100644 --- a/src/Prep/GSHHS/gshhs_split.cxx +++ b/src/Prep/GSHHS/gshhs_split.cxx @@ -75,13 +75,13 @@ void split_and_shift_chunk( const string& path, AreaType area, upper_shape.erase(); SG_LOG ( SG_GENERAL, SG_INFO, "Clipping lower shape" ); - lower_shape = polygon_int( lower_mask, shape ); + lower_shape = tgPolygonInt( lower_mask, shape ); lower_shape.shift( 360, 0 ); SG_LOG ( SG_GENERAL, SG_INFO, "Clipping center shape" ); - center_shape = polygon_int( center_mask, shape ); + center_shape = tgPolygonInt( center_mask, shape ); - upper_shape = polygon_int( upper_mask, shape ); + upper_shape = tgPolygonInt( upper_mask, shape ); SG_LOG ( SG_GENERAL, SG_INFO, "Clipping upper shape" ); upper_shape.shift( -360, 0 ); diff --git a/src/Prep/MergerClipper/Makefile.am b/src/Prep/MergerClipper/Makefile.am index 31ccb058..557315a8 100644 --- a/src/Prep/MergerClipper/Makefile.am +++ b/src/Prep/MergerClipper/Makefile.am @@ -12,6 +12,7 @@ testmerger_LDADD = \ $(top_builddir)/src/Lib/Geometry/libGeometry.a \ $(top_builddir)/src/Lib/poly2tri/libpoly2tri.a \ $(top_builddir)/src/Lib/TriangleJRS/libTriangleJRS.a \ - -lsgdebug -lsgbucket -lsgmisc -lsgstructure -lsgxml -lgenpolyclip -lz + -lsgdebug -lsgbucket -lsgmath -lsgmisc -lsgstructure -lsgxml \ + -lgenpolyclip -lz INCLUDES = -I$(top_srcdir)/src/Lib diff --git a/src/Prep/MergerClipper/merger.cxx b/src/Prep/MergerClipper/merger.cxx index adbc74ee..33753ce8 100644 --- a/src/Prep/MergerClipper/merger.cxx +++ b/src/Prep/MergerClipper/merger.cxx @@ -171,7 +171,7 @@ void FGMerger::merge( FGPolyList& clipped ) { cout << " polygon = " << j << endl; poly = clipped.polys[area][j]; - result = polygon_union( poly, result ); + result = tgPolygonUnion( poly, result ); done=true; } clipped.polys[area].clear(); @@ -200,8 +200,8 @@ void FGMerger::clip(FGPolyList& subject, FGPolyList& clip) { cout << " Clipping polygon with area = " << area << endl; poly=subject.polys[area][0]; cliped=clip.polys[default_indx][0]; - result = polygon_int(poly, cliped); - difference = polygon_diff(difference, result); + result = tgPolygonInt(poly, cliped); + difference = tgPolygonDiff(difference, result); subject.polys[area][0]=result; max_a[area] +=result.contour_size(0); // let's hope we have only 1 contour polygons (first approximation) } @@ -216,7 +216,8 @@ void FGMerger::clip(FGPolyList& subject, FGPolyList& clip) { } - subject.polys[max_area][0] = polygon_union(subject.polys[max_area][0], difference); + subject.polys[max_area][0] + = tgPolygonUnion(subject.polys[max_area][0], difference); } void FGMerger::write(FGPolyList& subject, string& file) { diff --git a/src/Prep/ShapeFile/Makefile.am b/src/Prep/ShapeFile/Makefile.am index 13af0380..34ad1f6b 100644 --- a/src/Prep/ShapeFile/Makefile.am +++ b/src/Prep/ShapeFile/Makefile.am @@ -10,7 +10,8 @@ shape_decode_LDADD = \ $(top_builddir)/src/Lib/poly2tri/libpoly2tri.a \ $(top_builddir)/src/Lib/shapelib/libshape.a \ $(top_builddir)/src/Lib/TriangleJRS/libTriangleJRS.a \ - -lsgdebug -lsgbucket -lsgmisc -lsgstructure -lsgxml -lgenpolyclip -lz + -lsgdebug -lsgbucket -lsgmath -lsgmisc -lsgstructure -lsgxml \ + -lgenpolyclip -lz noaa_decode_LDADD = \ $(top_builddir)/src/Lib/Polygon/libPolygon.a \ @@ -18,6 +19,7 @@ noaa_decode_LDADD = \ $(top_builddir)/src/Lib/poly2tri/libpoly2tri.a \ $(top_builddir)/src/Lib/shapelib/libshape.a \ $(top_builddir)/src/Lib/TriangleJRS/libTriangleJRS.a \ - -lsgdebug -lsgbucket -lsgmisc -lsgstructure -lsgxml -lgenpolyclip -lz + -lsgdebug -lsgbucket -lsgmath -lsgmisc -lsgstructure -lsgxml \ + -lgenpolyclip -lz INCLUDES = -I$(top_srcdir)/src/Lib diff --git a/src/Prep/TGVPF/tgvpf.cxx b/src/Prep/TGVPF/tgvpf.cxx index 9e39cc30..a1af42d5 100644 --- a/src/Prep/TGVPF/tgvpf.cxx +++ b/src/Prep/TGVPF/tgvpf.cxx @@ -519,9 +519,9 @@ main (int argc, const char **argv) } if (invert) { - mask = polygon_union(mask, shape); + mask = tgPolygonUnion(mask, shape); } else { - shape = polygon_int(shape, bounds_poly); + shape = tgPolygonInt(shape, bounds_poly); if (shape.total_size() >= 3) { cout << "Polygon with " << shape.total_size() << " points in " << shape.contours() << " contour(s)" << endl; @@ -534,7 +534,7 @@ main (int argc, const char **argv) // wait until the end (and hope for // not too large a polygon) if (invert) { - mask = polygon_diff(bounds_poly, mask); + mask = tgPolygonDiff(bounds_poly, mask); if (mask.total_size() >= 3) { cout << "Inverse polygon with " << mask.total_size() << " points in " << mask.contours() << " contour(s)" << endl; diff --git a/src/Prep/UserDef/tguserdef.cxx b/src/Prep/UserDef/tguserdef.cxx index 3d226b48..5f027be1 100644 --- a/src/Prep/UserDef/tguserdef.cxx +++ b/src/Prep/UserDef/tguserdef.cxx @@ -64,7 +64,7 @@ add_point (SGPropertyNode_ptr node) SG_LOG(SG_TERRAIN, SG_WARN, "More than one vertex supplied for point"); TGPolygon poly; tg::makePolygon(p, node->getIntValue("width", 500), poly); - poly = polygon_int(poly, bounds_poly); + poly = tgPolygonInt(poly, bounds_poly); tgSplitPolygon(".", material, poly, false); } @@ -85,7 +85,7 @@ add_line (SGPropertyNode_ptr node) TGPolygon poly; tg::makePolygon(line, node->getIntValue("width", 10), poly); - poly = polygon_int(poly, bounds_poly); + poly = tgPolygonInt(poly, bounds_poly); tgSplitPolygon(".", material, poly, false); } @@ -107,7 +107,7 @@ add_polygon (SGPropertyNode_ptr node) } poly.set_hole_flag(i, contour_node->getBoolValue("hole", false)); } - poly = polygon_int(poly, bounds_poly); + poly = tgPolygonInt(poly, bounds_poly); tgSplitPolygon(".", material, poly, false); }