diff --git a/src/Airports/GenAirports850/airport.cxx b/src/Airports/GenAirports850/airport.cxx index 5135a4ff..40baa3ad 100644 --- a/src/Airports/GenAirports850/airport.cxx +++ b/src/Airports/GenAirports850/airport.cxx @@ -517,15 +517,11 @@ void Airport::merge_slivers( superpoly_list& polys, poly_list& slivers_list ) { void Airport::BuildBtg(const string& root, const string_list& elev_src ) { - ClipPolyType accum; - poly_list slivers; + poly_list slivers; + poly_list line_slivers; - // try to keep line accumulator in clipper format for speed... - ClipPolyType lines; - poly_list line_slivers; - - TGPolygon apt_base; - TGPolygon apt_clearing; + TGPolygon apt_base; + TGPolygon apt_clearing; // runways superpoly_list rwy_polys; @@ -539,7 +535,6 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) superpoly_list line_polys; texparams_list line_tps; - // int i, j, k; Point3D p; bool verbose_triangulation = false; @@ -594,6 +589,10 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) build_start.stamp(); // Add the linear features + + + tgPolygonInitClipperAccumulator(); + if (features.size()) { for ( unsigned int i=0; iBuildBtg( &line_polys, &line_tps, &lines, &rwy_lights, make_shapefiles ); + features[i]->BuildBtg( &line_polys, &line_tps, &rwy_lights, make_shapefiles ); } } else @@ -616,9 +615,15 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) SG_LOG(SG_GENERAL, SG_DEBUG, "no markings"); } + /* DOne with the linear features accumulator */ + tgPolygonFreeClipperAccumulator(); + log_time = time(0); SG_LOG( SG_GENERAL, SG_ALERT, "Finished building Linear Features for " << icao << " at " << ctime(&log_time) ); + // Initialize a new accumulator for the other objects + tgPolygonInitClipperAccumulator(); + // Build runways next for ( unsigned int i=0; iBuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, NULL, NULL, make_shapefiles ); + runways[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, slivers, NULL, NULL, make_shapefiles ); } else { - runways[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, &apt_base, &apt_clearing, make_shapefiles ); + runways[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, slivers, &apt_base, &apt_clearing, make_shapefiles ); } // Now try to merge any slivers we found @@ -668,11 +673,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) if (boundary.size()) { - helipads[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, NULL, NULL ); + helipads[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, slivers, NULL, NULL ); } else { - helipads[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, &apt_base, &apt_clearing ); + helipads[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, slivers, &apt_base, &apt_clearing ); } // Now try to merge any slivers we found @@ -698,11 +703,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) if (boundary.size()) { - pavements[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &accum, slivers, NULL, NULL, make_shapefiles ); + pavements[i]->BuildBtg( &pvmt_polys, &pvmt_tps, slivers, NULL, NULL, make_shapefiles ); } else { - pavements[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &accum, slivers, &apt_base, &apt_clearing, make_shapefiles ); + pavements[i]->BuildBtg( &pvmt_polys, &pvmt_tps, slivers, &apt_base, &apt_clearing, make_shapefiles ); } // Now try to merge any slivers we found @@ -736,11 +741,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) if (boundary.size()) { - taxiways[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &rwy_lights, &accum, slivers, NULL, NULL, make_shapefiles ); + taxiways[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &rwy_lights, slivers, NULL, NULL, make_shapefiles ); } else { - taxiways[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &rwy_lights, &accum, slivers, &apt_base, &apt_clearing, make_shapefiles ); + taxiways[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &rwy_lights, slivers, &apt_base, &apt_clearing, make_shapefiles ); } // Now try to merge any slivers we found @@ -765,11 +770,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) if (boundary.size()) { - runways[i]->BuildShoulder( &rwy_polys, &rwy_tps, &accum, slivers, NULL, NULL ); + runways[i]->BuildShoulder( &rwy_polys, &rwy_tps, slivers, NULL, NULL ); } else { - runways[i]->BuildShoulder( &rwy_polys, &rwy_tps, &accum, slivers, &apt_base, &apt_clearing ); + runways[i]->BuildShoulder( &rwy_polys, &rwy_tps, slivers, &apt_base, &apt_clearing ); } // Now try to merge any slivers we found @@ -789,11 +794,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) if (boundary.size()) { - helipads[i]->BuildShoulder( &rwy_polys, &rwy_tps, &accum, slivers, NULL, NULL ); + helipads[i]->BuildShoulder( &rwy_polys, &rwy_tps, slivers, NULL, NULL ); } else { - helipads[i]->BuildShoulder( &rwy_polys, &rwy_tps, &accum, slivers, &apt_base, &apt_clearing ); + helipads[i]->BuildShoulder( &rwy_polys, &rwy_tps, slivers, &apt_base, &apt_clearing ); } // Now try to merge any slivers we found @@ -821,7 +826,7 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src ) TGPolygon filled_base = tgPolygonStripHoles( apt_base ); TGPolygon divided_base = tgPolygonSplitLongEdges( filled_base, 200.0 ); - TGPolygon base_poly = tgPolygonDiffClipper( divided_base, accum ); + TGPolygon base_poly = tgPolygonDiffClipperWithAccumulator( divided_base ); build_end.stamp(); build_time = build_end - build_start; diff --git a/src/Airports/GenAirports850/closedpoly.cxx b/src/Airports/GenAirports850/closedpoly.cxx index c19f4c7f..20138db1 100644 --- a/src/Airports/GenAirports850/closedpoly.cxx +++ b/src/Airports/GenAirports850/closedpoly.cxx @@ -380,10 +380,9 @@ void ClosedPoly::Finish() holes.clear(); } -int ClosedPoly::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ) +int ClosedPoly::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ) { TGPolygon base, safe_base; - TGPolygon pre_accum; string material; void* ds_id = NULL; // If we are going to build shapefiles @@ -446,11 +445,9 @@ int ClosedPoly::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, l_id = tgShapefileOpenLayer( ds_id, layer_name ); sprintf( feature_name, "original" ); tgShapefileCreateFeature( ds_id, l_id, pre_tess, feature_name ); - - pre_accum = *accum; } - TGPolygon clipped = tgPolygonDiffClipper( pre_tess, *accum ); + TGPolygon clipped = tgPolygonDiffClipperWithAccumulator( pre_tess ); tgPolygonFindSlivers( clipped, slivers ); SG_LOG(SG_GENERAL, SG_DEBUG, "clipped = " << clipped.contours()); @@ -462,7 +459,7 @@ int ClosedPoly::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, rwy_polys->push_back( sp ); - *accum = tgPolygonUnionClipper( pre_tess, *accum ); + tgPolygonAddToClipperAccumulator( pre_tess, false ); /* If debugging this poly, write the poly, and clipped poly and the accum buffer into their own layers */ if ( make_shapefiles ) { @@ -473,16 +470,6 @@ int ClosedPoly::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, l_id = tgShapefileOpenLayer( ds_id, layer_name ); sprintf( feature_name, "clipped" ); tgShapefileCreateFeature( ds_id, l_id, clipped, feature_name ); - - sprintf( layer_name, "pre_accum" ); - l_id = tgShapefileOpenLayer( ds_id, layer_name ); - sprintf( feature_name, "pre_accum" ); - tgShapefileCreateFeature( ds_id, l_id, pre_accum, feature_name ); - - sprintf( layer_name, "post_accum" ); - l_id = tgShapefileOpenLayer( ds_id, layer_name ); - sprintf( feature_name, "post_accum" ); - tgShapefileCreateFeature( ds_id, l_id, *accum, feature_name ); } SG_LOG(SG_GENERAL, SG_DEBUG, "tp construct"); diff --git a/src/Airports/GenAirports850/closedpoly.hxx b/src/Airports/GenAirports850/closedpoly.hxx index 8f1afd48..c9d4c01f 100644 --- a/src/Airports/GenAirports850/closedpoly.hxx +++ b/src/Airports/GenAirports850/closedpoly.hxx @@ -28,7 +28,7 @@ public: int BuildBtg( TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ); // Build BTG for pavements for airports with no boundary - int BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ); + int BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ); FeatureList* GetFeatures() { diff --git a/src/Airports/GenAirports850/helipad.cxx b/src/Airports/GenAirports850/helipad.cxx index 7516c1e6..e1d0184a 100644 --- a/src/Airports/GenAirports850/helipad.cxx +++ b/src/Airports/GenAirports850/helipad.cxx @@ -88,11 +88,10 @@ superpoly_list Helipad::gen_helipad_lights(double maxsize){ void Helipad::WriteGeom( TGPolygon polygon, string material, superpoly_list *rwy_polys, - ClipPolyType *accum, poly_list& slivers ) { // Clip the new polygon against what ever has already been created. - TGPolygon clipped = tgPolygonDiffClipper( polygon, *accum ); + TGPolygon clipped = tgPolygonDiffClipperWithAccumulator( polygon ); tgPolygonFindSlivers( clipped, slivers ); // Split long edges to create an object that can better flow with @@ -107,13 +106,12 @@ void Helipad::WriteGeom( TGPolygon polygon, string material, sp.set_material( material ); rwy_polys->push_back( sp ); - *accum = tgPolygonUnionClipper( polygon, *accum ); + tgPolygonAddToClipperAccumulator( polygon, false ); } void Helipad::BuildBtg( superpoly_list *rwy_polys, texparams_list *texparams, superpoly_list *rwy_lights, - ClipPolyType *accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ) @@ -143,7 +141,7 @@ void Helipad::BuildBtg( superpoly_list *rwy_polys, else material = "pc_"; // write out - WriteGeom( helipad, material + "heli", rwy_polys, accum, slivers); + WriteGeom( helipad, material + "heli", rwy_polys, slivers); TGTexParams tp; tp = TGTexParams( helipad.get_pt(0,0).toSGGeod(), maxsize, maxsize, heli.heading ); @@ -185,7 +183,7 @@ void Helipad::BuildBtg( superpoly_list *rwy_polys, TGPolygon area_geom; for (i = 0; i < 2; ++i) { area_geom.add_contour(area_poly.get_contour(i), false); - WriteGeom( area_geom, material + "tiedown", rwy_polys, accum, slivers); + WriteGeom( area_geom, material + "tiedown", rwy_polys, slivers); tp = TGTexParams( area_poly.get_pt(i,0).toSGGeod(), maxsize, areahight, heading ); tp.set_minu( 1 ); @@ -277,7 +275,6 @@ void Helipad::BuildBtg( superpoly_list *rwy_polys, void Helipad::BuildShoulder( superpoly_list *rwy_polys, texparams_list *texparams, - ClipPolyType *accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ) @@ -289,7 +286,7 @@ void Helipad::BuildShoulder( superpoly_list *rwy_polys, shoulder = shoulder_polys[i].get_poly(); // Clip the new polygon against what ever has already been created. - TGPolygon clipped = tgPolygonDiffClipper( shoulder, *accum ); + TGPolygon clipped = tgPolygonDiffClipperWithAccumulator( shoulder ); tgPolygonFindSlivers( clipped, slivers ); // Split long edges to create an object that can better flow with @@ -300,7 +297,7 @@ void Helipad::BuildShoulder( superpoly_list *rwy_polys, rwy_polys->push_back( shoulder_polys[i] ); texparams->push_back( shoulder_tps[i] ); - *accum = tgPolygonUnionClipper( shoulder, *accum ); + tgPolygonAddToClipperAccumulator( shoulder, false ); if (apt_base) { diff --git a/src/Airports/GenAirports850/helipad.hxx b/src/Airports/GenAirports850/helipad.hxx index 23a7197b..c91259f4 100644 --- a/src/Airports/GenAirports850/helipad.hxx +++ b/src/Airports/GenAirports850/helipad.hxx @@ -24,7 +24,7 @@ class Helipad { public: Helipad(char* def); - void BuildBtg( superpoly_list* heli_polys, texparams_list* texparams, superpoly_list* heli_lights, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ); + void BuildBtg( superpoly_list* heli_polys, texparams_list* texparams, superpoly_list* heli_lights, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ); SGGeod GetLoc() { @@ -38,7 +38,6 @@ public: void BuildShoulder( superpoly_list *rwy_polys, texparams_list *texparams, - ClipPolyType *accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ); @@ -78,7 +77,6 @@ private: void WriteGeom( TGPolygon polygon, string material, superpoly_list *rwy_polys, - ClipPolyType *accum, poly_list& slivers ); }; diff --git a/src/Airports/GenAirports850/linearfeature.cxx b/src/Airports/GenAirports850/linearfeature.cxx index f7d8b4c7..3639f2b8 100644 --- a/src/Airports/GenAirports850/linearfeature.cxx +++ b/src/Airports/GenAirports850/linearfeature.cxx @@ -844,7 +844,7 @@ int LinearFeature::Finish( bool closed, unsigned int idx ) return 1; } -int LinearFeature::BuildBtg(superpoly_list* line_polys, texparams_list* line_tps, ClipPolyType* lines, superpoly_list* lights, bool make_shapefiles ) +int LinearFeature::BuildBtg(superpoly_list* line_polys, texparams_list* line_tps, superpoly_list* lights, bool make_shapefiles ) { TGPolygon poly, tmp; void* ds_id = NULL; // If we are going to build shapefiles @@ -860,27 +860,12 @@ int LinearFeature::BuildBtg(superpoly_list* line_polys, texparams_list* line_tps SG_LOG(SG_GENERAL, SG_DEBUG, "\nLinearFeature::BuildBtg: " << description); for ( unsigned int i = 0; i < marking_polys.size(); i++) { - poly = marking_polys[i].get_poly(); - poly.get_bounding_box(minp, maxp); - tg::Rectangle box1(minp, maxp); - - for (int j= 0; j < lines->contours(); ++j) - { - tmp.erase(); - tmp.add_contour(lines->get_contour(j), 0); - tmp.get_bounding_box(min, max); - tg::Rectangle box2(min, max); - - if ( box2.intersects(box1) ) - { - poly = tgPolygonDiffClipper( poly, tmp ); - } - } + poly = tgPolygonDiffClipperWithAccumulator( marking_polys[i].get_poly() ); marking_polys[i].set_poly( poly ); line_polys->push_back( marking_polys[i] ); - /* If debugging this lf, write the poly, and the accum buffer at each step into their own layers */ + /* If debugging this lf, write the polys into their own layers */ if (ds_id) { char layer_name[128]; sprintf( layer_name, "poly_%d", i ); @@ -889,15 +874,9 @@ int LinearFeature::BuildBtg(superpoly_list* line_polys, texparams_list* line_tps char feature_name[128]; sprintf( feature_name, "poly_%d", i); tgShapefileCreateFeature( ds_id, l_id, poly, feature_name ); - - sprintf( layer_name, "accum_%d", i ); - l_id = tgShapefileOpenLayer( ds_id, layer_name ); - - sprintf( feature_name, "accum_%d", i ); - tgShapefileCreateFeature( ds_id, l_id, *lines, feature_name ); } - lines->add_contour(poly.get_contour(0), 0); + tgPolygonAddToClipperAccumulator(poly, false); line_tps->push_back( marking_tps[i] ); } diff --git a/src/Airports/GenAirports850/linearfeature.hxx b/src/Airports/GenAirports850/linearfeature.hxx index 1a1f2981..16b291c0 100644 --- a/src/Airports/GenAirports850/linearfeature.hxx +++ b/src/Airports/GenAirports850/linearfeature.hxx @@ -97,7 +97,7 @@ public: } int Finish( bool closed, unsigned int idx ); - int BuildBtg( superpoly_list* line_polys, texparams_list* line_tps, ClipPolyType* lines, superpoly_list* lights, bool debug ); + int BuildBtg( superpoly_list* line_polys, texparams_list* line_tps, superpoly_list* lights, bool debug ); // int BuildBtg( float alt_m, superpoly_list* line_polys, texparams_list* line_tps, ClipPolyType* line_accum, superpoly_list* lights ); private: diff --git a/src/Airports/GenAirports850/runway.cxx b/src/Airports/GenAirports850/runway.cxx index 8e245955..301dc7c9 100644 --- a/src/Airports/GenAirports850/runway.cxx +++ b/src/Airports/GenAirports850/runway.cxx @@ -89,7 +89,7 @@ point_list 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, bool make_shapefiles ) +int Runway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, superpoly_list* rwy_lights, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ) { TGPolygon base, safe_base; @@ -137,7 +137,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( rwy_polys, texparams, accum, slivers, make_shapefiles ); + gen_rwy( rwy_polys, texparams, slivers, make_shapefiles ); gen_runway_lights( rwy_lights ); break; @@ -146,7 +146,7 @@ int Runway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, supe case 5: // Gravel case 12: // dry lakebed SG_LOG( SG_GENERAL, SG_DEBUG, "Build Runway: Grass, Dirt, Gravel or Dry Lakebed " << rwy.surface ); - gen_simple_rwy( rwy_polys, texparams, accum, slivers ); + gen_simple_rwy( rwy_polys, texparams, slivers ); gen_runway_lights( rwy_lights ); break; diff --git a/src/Airports/GenAirports850/runway.hxx b/src/Airports/GenAirports850/runway.hxx index 5f1ccc71..052fd623 100644 --- a/src/Airports/GenAirports850/runway.hxx +++ b/src/Airports/GenAirports850/runway.hxx @@ -42,7 +42,6 @@ public: int BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, superpoly_list* rwy_lights, - ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, @@ -50,7 +49,6 @@ public: void BuildShoulder( superpoly_list *rwy_polys, texparams_list *texparams, - ClipPolyType *accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ); @@ -108,7 +106,6 @@ private: double &start_pct, double &end_pct, superpoly_list* rwy_polys, texparams_list* texparams, - ClipPolyType* accum, poly_list& slivers, bool make_shapefiles ); @@ -123,7 +120,6 @@ private: texparams_list *texparams, superpoly_list *shoulder_polys, texparams_list *shoulder_tps, - ClipPolyType *accum, poly_list& slivers, bool make_shapefiles ); @@ -136,11 +132,10 @@ private: std::string surface, TGSuperPoly& sp, TGTexParams& tp ); - void gen_simple_rwy( superpoly_list *rwy_polys, texparams_list *texparams, ClipPolyType *accum, poly_list& slivers ); + void gen_simple_rwy( superpoly_list *rwy_polys, texparams_list *texparams, poly_list& slivers ); void gen_rwy( superpoly_list* rwy_polys, texparams_list* texparams, - ClipPolyType* accum, poly_list& slivers, bool make_shapefiles ); diff --git a/src/Airports/GenAirports850/rwy_gen.cxx b/src/Airports/GenAirports850/rwy_gen.cxx index e8aaa349..240c7ea3 100644 --- a/src/Airports/GenAirports850/rwy_gen.cxx +++ b/src/Airports/GenAirports850/rwy_gen.cxx @@ -156,7 +156,6 @@ void Runway::gen_runway_section( const TGPolygon& runway, texparams_list *texparams, superpoly_list *shoulder_polys, texparams_list *shoulder_tps, - ClipPolyType *accum, poly_list& slivers, bool make_shapefiles ) { @@ -360,7 +359,7 @@ void Runway::gen_runway_section( const TGPolygon& runway, } // Clip the new polygon against what ever has already been created. - TGPolygon clipped = tgPolygonDiffClipper( section, *accum ); + TGPolygon clipped = tgPolygonDiffClipperWithAccumulator( section ); tgPolygonFindSlivers( clipped, slivers ); // Split long edges to create an object that can better flow with @@ -377,7 +376,7 @@ void Runway::gen_runway_section( const TGPolygon& runway, SG_LOG(SG_GENERAL, SG_DEBUG, "section = " << clipped.contours()); - *accum = tgPolygonUnionClipper( section, *accum ); + tgPolygonAddToClipperAccumulator( section, false ); // Store away what we need to know for texture coordinate // calculation. (CLO 10/20/02: why can't we calculate texture @@ -419,7 +418,6 @@ void Runway::gen_rw_designation( TGPolygon poly, double heading, string rwname, double &start_pct, double &end_pct, superpoly_list *rwy_polys, texparams_list *texparams, - ClipPolyType *accum, poly_list& slivers, bool make_shapefiles ) { @@ -447,7 +445,7 @@ void Runway::gen_rw_designation( TGPolygon poly, double heading, string rwname, letter, rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } @@ -477,7 +475,7 @@ void Runway::gen_rw_designation( TGPolygon poly, double heading, string rwname, tex1, rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); gen_runway_section( poly, start_pct, end_pct, @@ -487,7 +485,7 @@ void Runway::gen_rw_designation( TGPolygon poly, double heading, string rwname, tex2, rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } else if (rwname.length() == 1) { @@ -501,7 +499,7 @@ void Runway::gen_rw_designation( TGPolygon poly, double heading, string rwname, tex1, rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } } @@ -513,7 +511,6 @@ void Runway::gen_rw_designation( TGPolygon poly, double heading, string rwname, // document AC 150/5340-1H void Runway::gen_rwy( superpoly_list *rwy_polys, texparams_list *texparams, - ClipPolyType *accum, poly_list& slivers, bool make_shapefiles ) { @@ -619,7 +616,7 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, "dspl_thresh", rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); // main chunks @@ -634,7 +631,7 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, "dspl_thresh", rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } } @@ -650,7 +647,7 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, "dspl_arrows", rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } @@ -666,7 +663,7 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, "no_threshold", rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } else { // Thresholds for all others @@ -680,14 +677,14 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, "threshold", rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } // Runway designation block gen_rw_designation( runway_half, heading, rwname, start1_pct, end1_pct, - rwy_polys, texparams, accum, slivers, + rwy_polys, texparams, slivers, make_shapefiles ); // Generate remaining markings depending on type of runway @@ -728,7 +725,7 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, rw_marking_list[i].tex, rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } } @@ -757,7 +754,7 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, "rest", rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } @@ -787,7 +784,7 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, "stopway", rwy_polys, texparams, &shoulder_polys, &shoulder_tps, - accum, slivers, + slivers, make_shapefiles ); } } @@ -796,7 +793,6 @@ void Runway::gen_rwy( superpoly_list *rwy_polys, void Runway::BuildShoulder( superpoly_list *rwy_polys, texparams_list *texparams, - ClipPolyType *accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing ) @@ -808,7 +804,7 @@ void Runway::BuildShoulder( superpoly_list *rwy_polys, shoulder = shoulder_polys[i].get_poly(); // Clip the new polygon against what ever has already been created. - TGPolygon clipped = tgPolygonDiffClipper( shoulder, *accum ); + TGPolygon clipped = tgPolygonDiffClipperWithAccumulator( shoulder ); tgPolygonFindSlivers( clipped, slivers ); // Split long edges to create an object that can better flow with @@ -819,7 +815,7 @@ void Runway::BuildShoulder( superpoly_list *rwy_polys, rwy_polys->push_back( shoulder_polys[i] ); texparams->push_back( shoulder_tps[i] ); - *accum = tgPolygonUnionClipper( shoulder, *accum ); + tgPolygonAddToClipperAccumulator( shoulder, false ); if (apt_base) { diff --git a/src/Airports/GenAirports850/rwy_simple.cxx b/src/Airports/GenAirports850/rwy_simple.cxx index b9c53714..03507b3a 100644 --- a/src/Airports/GenAirports850/rwy_simple.cxx +++ b/src/Airports/GenAirports850/rwy_simple.cxx @@ -34,7 +34,6 @@ using std::string; // texparams, and accum void Runway::gen_simple_rwy( superpoly_list *rwy_polys, texparams_list *texparams, - ClipPolyType *accum, poly_list& slivers ) { TGPolygon runway = gen_runway_w_mid( 0.0, 0.0 ); @@ -91,7 +90,7 @@ void Runway::gen_simple_rwy( superpoly_list *rwy_polys, "", rwy_polys, texparams, NULL, NULL, - accum, slivers, + slivers, false ); } @@ -104,7 +103,7 @@ void Runway::gen_simple_rwy( superpoly_list *rwy_polys, "", rwy_polys, texparams, NULL, NULL, - accum, slivers, + slivers, false ); } } diff --git a/src/Airports/GenAirports850/taxiway.cxx b/src/Airports/GenAirports850/taxiway.cxx index 3a134fde..6536ef2c 100644 --- a/src/Airports/GenAirports850/taxiway.cxx +++ b/src/Airports/GenAirports850/taxiway.cxx @@ -58,11 +58,10 @@ Taxiway::Taxiway(char* definition) lon = pt_x; } -int Taxiway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, superpoly_list* rwy_lights, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ) +int Taxiway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, superpoly_list* rwy_lights, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles ) { TGPolygon taxi; TGPolygon base, safe_base; - TGPolygon pre_accum; std::string material; void* ds_id = NULL; // If we are going to build shapefiles void* l_id = NULL; // datasource and layer IDs @@ -133,11 +132,9 @@ int Taxiway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, sup l_id = tgShapefileOpenLayer( ds_id, layer_name ); sprintf( feature_name, "original" ); tgShapefileCreateFeature( ds_id, l_id, taxi, feature_name ); - - pre_accum = *accum; } - - TGPolygon clipped = tgPolygonDiffClipper( taxi, *accum ); + + TGPolygon clipped = tgPolygonDiffClipperWithAccumulator( taxi ); tgPolygonFindSlivers( clipped, slivers ); SG_LOG(SG_GENERAL, SG_DEBUG, "clipped = " << clipped.contours()); @@ -149,7 +146,7 @@ int Taxiway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, sup rwy_polys->push_back( sp ); - *accum = tgPolygonUnionClipper( taxi, *accum ); + tgPolygonAddToClipperAccumulator( taxi, false ); /* If debugging this poly, write the poly, and clipped poly and the accum buffer into their own layers */ if ( make_shapefiles ) { @@ -160,16 +157,6 @@ int Taxiway::BuildBtg( superpoly_list* rwy_polys, texparams_list* texparams, sup l_id = tgShapefileOpenLayer( ds_id, layer_name ); sprintf( feature_name, "clipped" ); tgShapefileCreateFeature( ds_id, l_id, clipped, feature_name ); - - sprintf( layer_name, "pre_accum" ); - l_id = tgShapefileOpenLayer( ds_id, layer_name ); - sprintf( feature_name, "pre_accum" ); - tgShapefileCreateFeature( ds_id, l_id, pre_accum, feature_name ); - - sprintf( layer_name, "post_accum" ); - l_id = tgShapefileOpenLayer( ds_id, layer_name ); - sprintf( feature_name, "post_accum" ); - tgShapefileCreateFeature( ds_id, l_id, *accum, feature_name ); } SG_LOG(SG_GENERAL, SG_DEBUG, "tp construct"); diff --git a/src/Airports/GenAirports850/taxiway.hxx b/src/Airports/GenAirports850/taxiway.hxx index 76009f5a..9fa820ac 100644 --- a/src/Airports/GenAirports850/taxiway.hxx +++ b/src/Airports/GenAirports850/taxiway.hxx @@ -22,7 +22,6 @@ public: int BuildBtg( superpoly_list* taxi_polys, texparams_list* texparams, superpoly_list* taxi_lights, - ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing,