Use the Accumulator in the Polygon Library, instead of passing one around.
The accumulator in the polygon library has the bounding box hit test, so it's faster My test run decreased 16 seconds from 71 to 54.
This commit is contained in:
parent
68640c4479
commit
fc304804ab
13 changed files with 71 additions and 129 deletions
|
@ -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; i<features.size(); i++ )
|
||||
|
@ -608,7 +607,7 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src )
|
|||
make_shapefiles = false;
|
||||
}
|
||||
|
||||
features[i]->BuildBtg( &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; i<runways.size(); i++ )
|
||||
{
|
||||
|
@ -635,11 +640,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src )
|
|||
|
||||
if (boundary.size())
|
||||
{
|
||||
runways[i]->BuildBtg( &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;
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 );
|
||||
|
||||
};
|
||||
|
|
|
@ -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] );
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 );
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue