Taxiways look a bit better if we insert them in sorted order from larger
to smaller.
This commit is contained in:
parent
53a2f9c347
commit
51287d6785
2 changed files with 29 additions and 6 deletions
|
@ -485,6 +485,7 @@ void build_airport( string airport_raw, float alt_m, string_list& runways_raw,
|
||||||
FGRunway taxi;
|
FGRunway taxi;
|
||||||
|
|
||||||
taxi.really_taxiway = true;
|
taxi.really_taxiway = true;
|
||||||
|
taxi.generated = false;
|
||||||
|
|
||||||
SG_LOG(SG_GENERAL, SG_DEBUG, rwy_str);
|
SG_LOG(SG_GENERAL, SG_DEBUG, rwy_str);
|
||||||
taxi.rwy_no = rwy_str.substr(2, 4);
|
taxi.rwy_no = rwy_str.substr(2, 4);
|
||||||
|
@ -556,12 +557,34 @@ void build_airport( string airport_raw, float alt_m, string_list& runways_raw,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4th pass: generate all taxiways
|
// 4th pass: generate all taxiways
|
||||||
for ( i = 0; i < (int)taxiways.size(); ++i ) {
|
|
||||||
build_runway( taxiways[i], &rwy_polys, &texparams, &accum, &apt_base,
|
|
||||||
&apt_clearing );
|
|
||||||
}
|
|
||||||
// write_polygon( accum, "accum" );
|
|
||||||
|
|
||||||
|
// we want to generate in order of largest size first so this will
|
||||||
|
// look a little weird, but that's all I'm doing, otherwise a
|
||||||
|
// simple list traversal would work fine.
|
||||||
|
bool done = false;
|
||||||
|
while ( !done ) {
|
||||||
|
// find the largest taxiway
|
||||||
|
int largest_idx = -1;
|
||||||
|
double max_size = 0;
|
||||||
|
for ( i = 0; i < (int)taxiways.size(); ++i ) {
|
||||||
|
double size = taxiways[i].length * taxiways[i].width;
|
||||||
|
if ( size > max_size && !taxiways[i].generated ) {
|
||||||
|
max_size = size;
|
||||||
|
largest_idx = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( largest_idx >= 0 ) {
|
||||||
|
SG_LOG( SG_GENERAL, SG_INFO, "generating " << largest_idx );
|
||||||
|
build_runway( taxiways[largest_idx], &rwy_polys, &texparams, &accum,
|
||||||
|
&apt_base, &apt_clearing );
|
||||||
|
taxiways[largest_idx].generated = true;
|
||||||
|
} else {
|
||||||
|
done = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// write_polygon( accum, "accum" );
|
||||||
if ( apt_base.total_size() == 0 ) {
|
if ( apt_base.total_size() == 0 ) {
|
||||||
SG_LOG(SG_GENERAL, SG_ALERT, "no airport points generated");
|
SG_LOG(SG_GENERAL, SG_ALERT, "no airport points generated");
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -59,7 +59,7 @@ struct FGRunway {
|
||||||
FGPolygon aim_point;
|
FGPolygon aim_point;
|
||||||
|
|
||||||
bool really_taxiway;
|
bool really_taxiway;
|
||||||
};
|
bool generated;};
|
||||||
|
|
||||||
|
|
||||||
typedef vector < FGRunway > runway_list;
|
typedef vector < FGRunway > runway_list;
|
||||||
|
|
Loading…
Reference in a new issue