From 97aac36c39f8eb40705a2a526d285a299e2e68a0 Mon Sep 17 00:00:00 2001 From: Peter Sadrozinski <pete@petews.sadrohome> Date: Sun, 4 Mar 2012 16:19:02 -0500 Subject: [PATCH] Add material_prefix to runway class, so we don't have to pass it around so much --- src/Airports/GenAirports850/runway.cxx | 19 ++++---- src/Airports/GenAirports850/runway.hxx | 54 +++++++++++----------- src/Airports/GenAirports850/rwy_gen.cxx | 52 ++++++++------------- src/Airports/GenAirports850/rwy_simple.cxx | 7 ++- 4 files changed, 58 insertions(+), 74 deletions(-) diff --git a/src/Airports/GenAirports850/runway.cxx b/src/Airports/GenAirports850/runway.cxx index 048e8e82..d4febe9c 100644 --- a/src/Airports/GenAirports850/runway.cxx +++ b/src/Airports/GenAirports850/runway.cxx @@ -82,27 +82,26 @@ TGPolygon WaterRunway::GetNodes() int Runway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, superpoly_list* rwy_lights, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ) { TGPolygon base, safe_base; - string material; if ( rwy.surface == 1 /* Asphalt */ ) { - material = "pa_"; + material_prefix = "pa_"; } else if ( rwy.surface == 2 /* Concrete */ ) { - material = "pc_"; + material_prefix = "pc_"; } else if ( rwy.surface == 3 /* Turf/Grass */ ) { - material = "grass_rwy"; + material_prefix = "grass_rwy"; } else if ( rwy.surface == 4 /* Dirt */ || rwy.surface == 5 /* Gravel */ ) { - material = "dirt_rwy"; + material_prefix = "dirt_rwy"; } else if ( rwy.surface == 12 /* Dry Lakebed */ ) { - material = "dirt_rwy"; + material_prefix = "dirt_rwy"; } else if ( rwy.surface == 13 /* Water runway (buoy's?) */ ) { @@ -128,7 +127,7 @@ int Runway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, supe case 1: // asphalt: case 2: // concrete SG_LOG( SG_GENERAL, SG_DEBUG, "Build Runway: asphalt or concrete" << rwy.surface); - gen_rwy( material, rwy_polys, texparams, accum, slivers ); + gen_rwy( rwy_polys, texparams, accum, slivers ); gen_runway_lights( rwy_lights ); break; @@ -136,7 +135,7 @@ int Runway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, supe case 4: // Dirt case 5: // Gravel SG_LOG( SG_GENERAL, SG_DEBUG, "Build Runway: Turf, Dirt or Gravel" << rwy.surface ); - gen_simple_rwy( material, rwy_polys, texparams, accum, slivers ); + gen_simple_rwy( rwy_polys, texparams, accum, slivers ); gen_runway_lights( rwy_lights ); break; @@ -166,13 +165,13 @@ int Runway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, supe // If we have shoulders, we need to grow even further... // generate area around runways - base = gen_runway_area_w_extend( 20.0, -rwy.overrun[0], -rwy.overrun[1], 20.0); + base = gen_runway_area_w_extend( 20.0, -rwy.overrun[0], -rwy.overrun[1], 20.0 ); // also clear a safe area around the runway safe_base = gen_runway_area_w_extend( 180.0, -rwy.overrun[0], -rwy.overrun[1], 50.0 ); // add this to the airport clearing - *apt_clearing = tgPolygonUnionClipper(safe_base, *apt_clearing); + *apt_clearing = tgPolygonUnionClipper( safe_base, *apt_clearing ); // and add the clearing to the base *apt_base = tgPolygonUnionClipper( base, *apt_base ); diff --git a/src/Airports/GenAirports850/runway.hxx b/src/Airports/GenAirports850/runway.hxx index 98db3962..0ca9c2f2 100644 --- a/src/Airports/GenAirports850/runway.hxx +++ b/src/Airports/GenAirports850/runway.hxx @@ -64,48 +64,48 @@ public: private: struct TGRunway { // data for whole runway - int surface; - int shoulder; - int centerline_lights; - int edge_lights; - int dist_remain_signs; + int surface; + int shoulder; + int centerline_lights; + int edge_lights; + int dist_remain_signs; - double width; - double length; - double heading; - double smoothness; + double width; + double length; + double heading; + double smoothness; - // data for each end - char rwnum[2][16]; - double lat[2]; - double lon[2]; - double threshold[2]; - double overrun[2]; + // data for each end + char rwnum[2][16]; + double lat[2]; + double lon[2]; + double threshold[2]; + double overrun[2]; - int marking[2]; - int approach_lights[2]; - int tz_lights[2]; - int reil[2]; + int marking[2]; + int approach_lights[2]; + int tz_lights[2]; + int reil[2]; }; - TGRunway rwy; + TGRunway rwy; + std::string material_prefix; // Build Helpers: // generate an area for a runway and include midpoints TGPolygon gen_runway_w_mid( double length_extend_m, double width_extend_m ) { - return ( gen_wgs84_area( Point3D(GetStart()), Point3D(GetEnd()), 2.0*length_extend_m, 0.0, 0.0, rwy.width + 2.0 * width_extend_m, rwy.heading, true) ); + return ( gen_wgs84_area( GetStart(), GetEnd(), 2.0*length_extend_m, 0.0, 0.0, rwy.width + 2.0 * width_extend_m, rwy.heading, true) ); } // generate an area for a runway with expansion specified in meters // (return result points in degrees) TGPolygon gen_runway_area_w_extend( double length_extend, double displ1, double displ2, double width_extend ) { - return ( gen_wgs84_area( Point3D(GetStart()), Point3D(GetEnd()), 2.0*length_extend, displ1, displ2, rwy.width + 2.0*width_extend, rwy.heading, false) ); + return ( gen_wgs84_area( GetStart(), GetEnd(), 2.0*length_extend, displ1, displ2, rwy.width + 2.0*width_extend, rwy.heading, false) ); } - void gen_rw_designation( const std::string& material, - TGPolygon poly, double heading, string rwname, + void gen_rw_designation( TGPolygon poly, double heading, string rwname, double &start_pct, double &end_pct, superpoly_list* rwy_polys, texparams_list* texparams, @@ -118,17 +118,15 @@ private: double startw_pct, double endw_pct, double minu, double maxu, double minv, double maxv, double heading, - const string& prefix, const string& material, superpoly_list *rwy_polys, texparams_list *texparams, ClipPolyType *accum, poly_list& slivers ); - void gen_simple_rwy( const string& material, superpoly_list *rwy_polys, texparams_list *texparams, ClipPolyType *accum, poly_list& slivers ); + void gen_simple_rwy( superpoly_list *rwy_polys, texparams_list *texparams, ClipPolyType *accum, poly_list& slivers ); - void gen_rwy( const std::string& material, - superpoly_list* rwy_polys, + void gen_rwy( superpoly_list* rwy_polys, texparams_list* texparams, ClipPolyType* accum, poly_list& slivers ); diff --git a/src/Airports/GenAirports850/rwy_gen.cxx b/src/Airports/GenAirports850/rwy_gen.cxx index c3feba33..ce5af489 100644 --- a/src/Airports/GenAirports850/rwy_gen.cxx +++ b/src/Airports/GenAirports850/rwy_gen.cxx @@ -92,7 +92,6 @@ void Runway::gen_runway_section( const TGPolygon& runway, double startw_pct, double endw_pct, double minu, double maxu, double minv, double maxv, double heading, - const string& prefix, const string& material, superpoly_list *rwy_polys, texparams_list *texparams, @@ -187,7 +186,7 @@ void Runway::gen_runway_section( const TGPolygon& runway, section.add_node( 0, p3 ); // print runway points - SG_LOG(SG_GENERAL, SG_DEBUG, "pre clipped runway pts " << prefix << material); + SG_LOG(SG_GENERAL, SG_DEBUG, "pre clipped runway pts " << material_prefix << material); for ( j = 0; j < section.contours(); ++j ) { for ( k = 0; k < section.contour_size( j ); ++k ) { Point3D p = section.get_pt(j, k); @@ -196,12 +195,7 @@ void Runway::gen_runway_section( const TGPolygon& runway, } // Clip the new polygon against what ever has already been created. -#if 0 - TGPolygon clipped = tgPolygonDiff( section, *accum ); -#else TGPolygon clipped = tgPolygonDiffClipper( section, *accum ); -#endif - tgPolygonFindSlivers( clipped, slivers ); // Split long edges to create an object that can better flow with @@ -213,15 +207,11 @@ void Runway::gen_runway_section( const TGPolygon& runway, TGSuperPoly sp; sp.erase(); sp.set_poly( split ); - sp.set_material( prefix + material ); + sp.set_material( material_prefix + material ); rwy_polys->push_back( sp ); SG_LOG(SG_GENERAL, SG_DEBUG, "section = " << clipped.contours()); -#if 0 - *accum = tgPolygonUnion( section, *accum ); -#else *accum = tgPolygonUnionClipper( section, *accum ); -#endif // Store away what we need to know for texture coordinate // calculation. (CLO 10/20/02: why can't we calculate texture @@ -232,7 +222,6 @@ void Runway::gen_runway_section( const TGPolygon& runway, double len = length / 2.0; double sect_len = len * ( endl_pct - startl_pct ); - double sect_wid = width * ( endw_pct - startw_pct ); TGTexParams tp; @@ -247,7 +236,7 @@ void Runway::gen_runway_section( const TGPolygon& runway, texparams->push_back( tp ); // print runway points - SG_LOG(SG_GENERAL, SG_DEBUG, "clipped runway pts " << prefix + material); + SG_LOG(SG_GENERAL, SG_DEBUG, "clipped runway pts " << material_prefix + material); for ( j = 0; j < clipped.contours(); ++j ) { for ( k = 0; k < clipped.contour_size( j ); ++k ) { Point3D p = clipped.get_pt(j, k); @@ -256,8 +245,7 @@ void Runway::gen_runway_section( const TGPolygon& runway, } } -void Runway::gen_rw_designation( const string& material, - TGPolygon poly, double heading, string rwname, +void Runway::gen_rw_designation( TGPolygon poly, double heading, string rwname, double &start_pct, double &end_pct, superpoly_list *rwy_polys, texparams_list *texparams, @@ -285,14 +273,16 @@ void Runway::gen_rw_designation( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, letter, + letter, rwy_polys, texparams, accum, slivers ); } // create runway designation number(s) - if (rwname == "0") + if (rwname == "0") { rwname = "36"; + } + SG_LOG(SG_GENERAL, SG_DEBUG, "Runway designation = " << rwname); char tex1[32]; tex1[0] = '\0'; @@ -310,14 +300,14 @@ void Runway::gen_rw_designation( const string& material, 0.0, 0.5, 0.0, 1.0, 0.0, 1.0, heading, - material, tex1, + tex1, rwy_polys, texparams, accum, slivers ); gen_runway_section( poly, start_pct, end_pct, 0.5, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, tex2, + tex2, rwy_polys, texparams, accum, slivers ); } else if (rwname.length() == 1) { @@ -328,7 +318,7 @@ void Runway::gen_rw_designation( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, tex1, + tex1, rwy_polys, texparams, accum, slivers ); } } @@ -338,8 +328,7 @@ void Runway::gen_rw_designation( const string& material, // rwy_polys, texparams, and accum. For specific details and // dimensions of precision runway markings, please refer to FAA // document AC 150/5340-1H -void Runway::gen_rwy( const string& material, - superpoly_list *rwy_polys, +void Runway::gen_rwy( superpoly_list *rwy_polys, texparams_list *texparams, ClipPolyType *accum, poly_list& slivers ) @@ -427,7 +416,7 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, tex_pct, 1.0, heading, - material, "dspl_thresh", + "dspl_thresh", rwy_polys, texparams, accum, slivers ); // main chunks @@ -439,7 +428,7 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, "dspl_thresh", + "dspl_thresh", rwy_polys, texparams, accum, slivers ); } @@ -451,7 +440,7 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, "dspl_arrows", + "dspl_arrows", rwy_polys, texparams, accum, slivers ); } @@ -464,7 +453,7 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, "no_threshold", + "no_threshold", rwy_polys, texparams, accum, slivers ); } else { // Thresholds for all others @@ -475,12 +464,12 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, "threshold", + "threshold", rwy_polys, texparams, accum, slivers ); } // Runway designation block - gen_rw_designation( material, runway_half, heading, + gen_rw_designation( runway_half, heading, rwname, start1_pct, end1_pct, rwy_polys, texparams, accum, slivers ); @@ -519,7 +508,7 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, rw_marking_list[i].tex, + rw_marking_list[i].tex, rwy_polys, texparams, accum, slivers ); } } @@ -545,7 +534,7 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, "rest", + "rest", rwy_polys, texparams, accum, slivers ); } @@ -573,7 +562,6 @@ void Runway::gen_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, //last number is lengthwise heading, - material, "stopway", rwy_polys, texparams, diff --git a/src/Airports/GenAirports850/rwy_simple.cxx b/src/Airports/GenAirports850/rwy_simple.cxx index 3ae1ab90..1e3e458e 100644 --- a/src/Airports/GenAirports850/rwy_simple.cxx +++ b/src/Airports/GenAirports850/rwy_simple.cxx @@ -32,8 +32,7 @@ using std::string; // generate a simple runway. The routine modifies rwy_polys, // texparams, and accum -void Runway::gen_simple_rwy( const string& material, - superpoly_list *rwy_polys, +void Runway::gen_simple_rwy( superpoly_list *rwy_polys, texparams_list *texparams, ClipPolyType *accum, poly_list& slivers ) @@ -89,7 +88,7 @@ void Runway::gen_simple_rwy( const string& material, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, heading, - material, "", + "", rwy_polys, texparams, accum, slivers ); } @@ -100,7 +99,7 @@ void Runway::gen_simple_rwy( const string& material, 0.0, 1.0, 0.0, 0.28, 0.0, 1.0, heading, - material, "", + "", rwy_polys, texparams, accum, slivers );