Removing alt_m from all the BuildBTG functions. It isn't used byt SimGear
int the geo_direct_wgs_84() calls.
This commit is contained in:
parent
f0a7f39e7b
commit
051e73da6a
12 changed files with 362 additions and 379 deletions
|
@ -546,11 +546,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src )
|
||||||
{
|
{
|
||||||
if (boundary)
|
if (boundary)
|
||||||
{
|
{
|
||||||
runways[i]->BuildBtg( altitude, &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, NULL, NULL );
|
runways[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, NULL, NULL );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
runways[i]->BuildBtg( altitude, &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, &apt_base, &apt_clearing );
|
runways[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, &apt_base, &apt_clearing );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,11 +580,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src )
|
||||||
|
|
||||||
if (boundary)
|
if (boundary)
|
||||||
{
|
{
|
||||||
helipads[i]->BuildBtg( altitude, &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, NULL, NULL );
|
helipads[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, NULL, NULL );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
helipads[i]->BuildBtg( altitude, &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, &apt_base, &apt_clearing );
|
helipads[i]->BuildBtg( &rwy_polys, &rwy_tps, &rwy_lights, &accum, slivers, &apt_base, &apt_clearing );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now try to merge any slivers we found
|
// Now try to merge any slivers we found
|
||||||
|
@ -610,11 +610,11 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src )
|
||||||
|
|
||||||
if (boundary)
|
if (boundary)
|
||||||
{
|
{
|
||||||
pavements[i]->BuildBtg( altitude, &pvmt_polys, &pvmt_tps, &accum, slivers, NULL, NULL, make_shapefiles );
|
pavements[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &accum, slivers, NULL, NULL, make_shapefiles );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pavements[i]->BuildBtg( altitude, &pvmt_polys, &pvmt_tps, &accum, slivers, &apt_base, &apt_clearing, make_shapefiles );
|
pavements[i]->BuildBtg( &pvmt_polys, &pvmt_tps, &accum, slivers, &apt_base, &apt_clearing, make_shapefiles );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now try to merge any slivers we found
|
// Now try to merge any slivers we found
|
||||||
|
@ -639,7 +639,7 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src )
|
||||||
if ( runways[i]->GetsShoulder() )
|
if ( runways[i]->GetsShoulder() )
|
||||||
{
|
{
|
||||||
slivers.clear();
|
slivers.clear();
|
||||||
runways[i]->BuildShoulder( altitude, &rwy_polys, &rwy_tps, &accum, slivers, &apt_base, &apt_clearing );
|
runways[i]->BuildShoulder( &rwy_polys, &rwy_tps, &accum, slivers, &apt_base, &apt_clearing );
|
||||||
|
|
||||||
// Now try to merge any slivers we found
|
// Now try to merge any slivers we found
|
||||||
merge_slivers( rwy_polys, slivers );
|
merge_slivers( rwy_polys, slivers );
|
||||||
|
@ -652,7 +652,7 @@ void Airport::BuildBtg(const string& root, const string_list& elev_src )
|
||||||
if (boundary)
|
if (boundary)
|
||||||
{
|
{
|
||||||
SG_LOG(SG_GENERAL, SG_INFO, "Build user defined boundary " );
|
SG_LOG(SG_GENERAL, SG_INFO, "Build user defined boundary " );
|
||||||
boundary->BuildBtg( altitude, &apt_base, &apt_clearing, false );
|
boundary->BuildBtg( &apt_base, &apt_clearing, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( apt_base.total_size() == 0 )
|
if ( apt_base.total_size() == 0 )
|
||||||
|
|
|
@ -32,7 +32,6 @@ TGPolygon gen_wgs84_area( Point3D origin,
|
||||||
double displ1, double displ2,
|
double displ1, double displ2,
|
||||||
double width_m,
|
double width_m,
|
||||||
double heading_deg,
|
double heading_deg,
|
||||||
double alt_m,
|
|
||||||
bool add_mid )
|
bool add_mid )
|
||||||
{
|
{
|
||||||
TGPolygon result_list;
|
TGPolygon result_list;
|
||||||
|
@ -43,18 +42,18 @@ TGPolygon gen_wgs84_area( Point3D origin,
|
||||||
// move to the +l end/center of the runway
|
// move to the +l end/center of the runway
|
||||||
Point3D ref = origin;
|
Point3D ref = origin;
|
||||||
double lon = 0, lat = 0, r = 0;
|
double lon = 0, lat = 0, r = 0;
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), length_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), length_hdg,
|
||||||
length_m / 2.0 - displ2, &lat, &lon, &r );
|
length_m / 2.0 - displ2, &lat, &lon, &r );
|
||||||
ref = Point3D( lon, lat, 0.0 );
|
ref = Point3D( lon, lat, 0.0 );
|
||||||
|
|
||||||
// move to the l,-w corner (then we add points in a clockwise direction)
|
// move to the l,-w corner (then we add points in a clockwise direction)
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
-width_m / 2.0, &lat, &lon, &r );
|
-width_m / 2.0, &lat, &lon, &r );
|
||||||
Point3D p = Point3D( lon, lat, 0.0 );
|
Point3D p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
|
||||||
// move to the l,w corner
|
// move to the l,w corner
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
width_m / 2.0, &lat, &lon, &r );
|
width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
@ -63,7 +62,7 @@ TGPolygon gen_wgs84_area( Point3D origin,
|
||||||
// move to the 0,w point (then we add points in a clockwise direction)
|
// move to the 0,w point (then we add points in a clockwise direction)
|
||||||
|
|
||||||
ref = origin;
|
ref = origin;
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
width_m / 2.0, &lat, &lon, &r );
|
width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
@ -71,18 +70,18 @@ TGPolygon gen_wgs84_area( Point3D origin,
|
||||||
|
|
||||||
// move to the -l end/center of the runway
|
// move to the -l end/center of the runway
|
||||||
ref = origin;
|
ref = origin;
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), length_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), length_hdg,
|
||||||
displ1 - length_m/2.0, &lat, &lon, &r );
|
displ1 - length_m/2.0, &lat, &lon, &r );
|
||||||
ref = Point3D( lon, lat, 0.0 );
|
ref = Point3D( lon, lat, 0.0 );
|
||||||
|
|
||||||
// move to the -l,w corner (then we add points in a clockwise direction)
|
// move to the -l,w corner (then we add points in a clockwise direction)
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
width_m / 2.0, &lat, &lon, &r );
|
width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
|
||||||
// move to the -l,-w corner
|
// move to the -l,-w corner
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
-width_m / 2.0, &lat, &lon, &r );
|
-width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
@ -91,7 +90,7 @@ TGPolygon gen_wgs84_area( Point3D origin,
|
||||||
// move to the 0,-w point (then we add points in a clockwise direction)
|
// move to the 0,-w point (then we add points in a clockwise direction)
|
||||||
|
|
||||||
ref = origin;
|
ref = origin;
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
-width_m / 2.0, &lat, &lon, &r );
|
-width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
@ -105,7 +104,6 @@ TGPolygon gen_wgs84_area( Point3D end1, Point3D end2,
|
||||||
double displ1, double displ2,
|
double displ1, double displ2,
|
||||||
double width_m,
|
double width_m,
|
||||||
double heading_deg,
|
double heading_deg,
|
||||||
double alt_m,
|
|
||||||
bool add_mid )
|
bool add_mid )
|
||||||
{
|
{
|
||||||
TGPolygon result_list;
|
TGPolygon result_list;
|
||||||
|
@ -115,18 +113,18 @@ TGPolygon gen_wgs84_area( Point3D end1, Point3D end2,
|
||||||
// move from end2 to the displaced threshold
|
// move from end2 to the displaced threshold
|
||||||
Point3D ref = end2;
|
Point3D ref = end2;
|
||||||
double lon = 0, lat = 0, r = 0;
|
double lon = 0, lat = 0, r = 0;
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), heading_deg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), heading_deg,
|
||||||
length_m / 2.0 - displ2, &lat, &lon, &r );
|
length_m / 2.0 - displ2, &lat, &lon, &r );
|
||||||
ref = Point3D( lon, lat, 0.0 );
|
ref = Point3D( lon, lat, 0.0 );
|
||||||
|
|
||||||
// move to the l,-w corner (then we add points in a clockwise direction)
|
// move to the l,-w corner (then we add points in a clockwise direction)
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
-width_m / 2.0, &lat, &lon, &r );
|
-width_m / 2.0, &lat, &lon, &r );
|
||||||
Point3D p = Point3D( lon, lat, 0.0 );
|
Point3D p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
|
||||||
// move to the l,w corner
|
// move to the l,w corner
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
width_m / 2.0, &lat, &lon, &r );
|
width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
@ -135,7 +133,7 @@ TGPolygon gen_wgs84_area( Point3D end1, Point3D end2,
|
||||||
// move to the 0,w point (then we add points in a clockwise direction)
|
// move to the 0,w point (then we add points in a clockwise direction)
|
||||||
|
|
||||||
ref = Point3D( (end1.lon()+end2.lon())/2.0f, (end1.lat()+end2.lat())/2.0f, 0.0f);
|
ref = Point3D( (end1.lon()+end2.lon())/2.0f, (end1.lat()+end2.lat())/2.0f, 0.0f);
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
width_m / 2.0, &lat, &lon, &r );
|
width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
@ -143,18 +141,18 @@ TGPolygon gen_wgs84_area( Point3D end1, Point3D end2,
|
||||||
|
|
||||||
// move to the end1 center to the displ. threshold
|
// move to the end1 center to the displ. threshold
|
||||||
ref = end1;
|
ref = end1;
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), heading_deg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), heading_deg,
|
||||||
displ1 - length_m / 2.0, &lat, &lon, &r );
|
displ1 - length_m / 2.0, &lat, &lon, &r );
|
||||||
ref = Point3D( lon, lat, 0.0 );
|
ref = Point3D( lon, lat, 0.0 );
|
||||||
|
|
||||||
// move to the -l,w corner (then we add points in a clockwise direction)
|
// move to the -l,w corner (then we add points in a clockwise direction)
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
width_m / 2.0, &lat, &lon, &r );
|
width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
|
||||||
// move to the -l,-w corner
|
// move to the -l,-w corner
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
-width_m / 2.0, &lat, &lon, &r );
|
-width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
@ -163,7 +161,7 @@ TGPolygon gen_wgs84_area( Point3D end1, Point3D end2,
|
||||||
// move to the 0,-w point (then we add points in a clockwise direction)
|
// move to the 0,-w point (then we add points in a clockwise direction)
|
||||||
|
|
||||||
ref = Point3D( (end1.lon()+end2.lon())/2.0f, (end1.lat()+end2.lat())/2.0f, 0.0f);
|
ref = Point3D( (end1.lon()+end2.lon())/2.0f, (end1.lat()+end2.lat())/2.0f, 0.0f);
|
||||||
geo_direct_wgs_84 ( alt_m, ref.lat(), ref.lon(), left_hdg,
|
geo_direct_wgs_84 ( ref.lat(), ref.lon(), left_hdg,
|
||||||
-width_m / 2.0, &lat, &lon, &r );
|
-width_m / 2.0, &lat, &lon, &r );
|
||||||
p = Point3D( lon, lat, 0.0 );
|
p = Point3D( lon, lat, 0.0 );
|
||||||
result_list.add_node( 0, p );
|
result_list.add_node( 0, p );
|
||||||
|
|
|
@ -13,7 +13,13 @@
|
||||||
using std::string;
|
using std::string;
|
||||||
|
|
||||||
|
|
||||||
TGPolygon gen_wgs84_area( Point3D origin, double length_m, double displ1, double displ2, double width_m, double heading_deg, double alt_m, bool add_mid );
|
TGPolygon gen_wgs84_area( Point3D origin,
|
||||||
|
double length_m,
|
||||||
|
double displ1,
|
||||||
|
double displ2,
|
||||||
|
double width_m,
|
||||||
|
double heading_deg,
|
||||||
|
bool add_mid );
|
||||||
|
|
||||||
// This function uses the 2 runway end points for calculation, which
|
// This function uses the 2 runway end points for calculation, which
|
||||||
// yields a higher precision
|
// yields a higher precision
|
||||||
|
@ -22,7 +28,6 @@ TGPolygon gen_wgs84_area( Point3D end1, Point3D end2,
|
||||||
double displ1, double displ2,
|
double displ1, double displ2,
|
||||||
double width_m,
|
double width_m,
|
||||||
double heading_deg,
|
double heading_deg,
|
||||||
double alt_m,
|
|
||||||
bool add_mid );
|
bool add_mid );
|
||||||
|
|
||||||
TGPolygon gen_wgs84_rect( double lat, double lon, double heading, double length, double width );
|
TGPolygon gen_wgs84_rect( double lat, double lon, double heading, double length, double width );
|
||||||
|
|
|
@ -385,7 +385,7 @@ void ClosedPoly::Finish()
|
||||||
holes.clear();
|
holes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int ClosedPoly::BuildBtg( float alt_m, 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, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles )
|
||||||
{
|
{
|
||||||
TGPolygon base, safe_base;
|
TGPolygon base, safe_base;
|
||||||
string material;
|
string material;
|
||||||
|
@ -501,7 +501,7 @@ int ClosedPoly::BuildBtg( float alt_m, superpoly_list* rwy_polys, texparams_list
|
||||||
|
|
||||||
// Just used for user defined border - add a little bit, as some modelers made the border exactly on the edges
|
// Just used for user defined border - add a little bit, as some modelers made the border exactly on the edges
|
||||||
// - resulting in no base, which we can't handle
|
// - resulting in no base, which we can't handle
|
||||||
int ClosedPoly::BuildBtg( float alt_m, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles )
|
int ClosedPoly::BuildBtg( TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles )
|
||||||
{
|
{
|
||||||
TGPolygon base, safe_base;
|
TGPolygon base, safe_base;
|
||||||
|
|
||||||
|
|
|
@ -25,10 +25,10 @@ public:
|
||||||
void Finish();
|
void Finish();
|
||||||
|
|
||||||
// Build BTG for airport base for airports with boundary
|
// Build BTG for airport base for airports with boundary
|
||||||
int BuildBtg( float alt_m, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles );
|
int BuildBtg( TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles );
|
||||||
|
|
||||||
// Build BTG for pavements for airports with no boundary
|
// Build BTG for pavements for airports with no boundary
|
||||||
int BuildBtg( float alt_m, 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, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing, bool make_shapefiles );
|
||||||
|
|
||||||
FeatureList* GetFeatures()
|
FeatureList* GetFeatures()
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,11 +75,13 @@ superpoly_list Helipad::gen_helipad_lights(void){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Helipad::BuildBtg( float alt_m,
|
void Helipad::BuildBtg( superpoly_list *rwy_polys,
|
||||||
superpoly_list *rwy_polys,
|
|
||||||
texparams_list *texparams,
|
texparams_list *texparams,
|
||||||
superpoly_list *rwy_lights,
|
superpoly_list *rwy_lights,
|
||||||
ClipPolyType *accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing )
|
ClipPolyType *accum,
|
||||||
|
poly_list& slivers,
|
||||||
|
TGPolygon* apt_base,
|
||||||
|
TGPolygon* apt_clearing )
|
||||||
{
|
{
|
||||||
SG_LOG( SG_GENERAL, SG_INFO, "Building helipad = " << heli.designator );
|
SG_LOG( SG_GENERAL, SG_INFO, "Building helipad = " << heli.designator );
|
||||||
|
|
||||||
|
@ -89,7 +91,7 @@ void Helipad::BuildBtg( float alt_m,
|
||||||
Point3D helicenter = Point3D( heli.lon, heli.lat, 0.0);
|
Point3D helicenter = Point3D( heli.lon, heli.lat, 0.0);
|
||||||
|
|
||||||
|
|
||||||
TGPolygon helipad = gen_wgs84_area( helicenter, heli.length, 0, 0, heli.width, heli.heading, alt_m, false);
|
TGPolygon helipad = gen_wgs84_area( helicenter, heli.length, 0, 0, heli.width, heli.heading, false);
|
||||||
|
|
||||||
double start1_pct = 0.0;
|
double start1_pct = 0.0;
|
||||||
double end1_pct = 0.0;
|
double end1_pct = 0.0;
|
||||||
|
|
|
@ -27,7 +27,7 @@ class Helipad
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Helipad(char* def);
|
Helipad(char* def);
|
||||||
void BuildBtg( float alt_m, 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, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing );
|
||||||
|
|
||||||
Point3D GetLoc()
|
Point3D GetLoc()
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,7 @@ private:
|
||||||
// (return result points in degrees)
|
// (return result points in degrees)
|
||||||
TGPolygon gen_runway_area_w_extend( double alt_m, double length_extend, double displ1, double displ2, double width_extend )
|
TGPolygon gen_runway_area_w_extend( double alt_m, double length_extend, double displ1, double displ2, double width_extend )
|
||||||
{
|
{
|
||||||
return ( gen_wgs84_area(Point3D(heli.lon, heli.lat, 0.0f), heli.length + 2.0*length_extend, displ1, displ2, heli.width + 2.0*width_extend, heli.heading, alt_m, false) );
|
return ( gen_wgs84_area(Point3D(heli.lon, heli.lat, 0.0f), heli.length + 2.0*length_extend, displ1, displ2, heli.width + 2.0*width_extend, heli.heading, false) );
|
||||||
}
|
}
|
||||||
|
|
||||||
superpoly_list gen_helipad_lights(void);
|
superpoly_list gen_helipad_lights(void);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -73,13 +73,13 @@ TGPolygon WaterRunway::GetNodes()
|
||||||
|
|
||||||
// create a polygon for the 4 buoy points
|
// create a polygon for the 4 buoy points
|
||||||
// TODO: The amount of points can be increased if needed (more buoys)
|
// TODO: The amount of points can be increased if needed (more buoys)
|
||||||
buoy_nodes = gen_wgs84_area(Point3D( (lon[0] + lon[1]) / 2 , (lat[0] + lat[1]) / 2, 0), length, 0, 0, width, heading, 0, false);
|
buoy_nodes = gen_wgs84_area(Point3D( (lon[0] + lon[1]) / 2 , (lat[0] + lat[1]) / 2, 0), length, 0, 0, width, heading, false);
|
||||||
}
|
}
|
||||||
return buoy_nodes;
|
return buoy_nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Runway::BuildBtg( float alt_m, superpoly_list* rwy_polys, texparams_list* texparams, superpoly_list* rwy_lights, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing )
|
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;
|
TGPolygon base, safe_base;
|
||||||
string material;
|
string material;
|
||||||
|
@ -128,16 +128,16 @@ int Runway::BuildBtg( float alt_m, superpoly_list* rwy_polys, texparams_list* te
|
||||||
case 1: // asphalt:
|
case 1: // asphalt:
|
||||||
case 2: // concrete
|
case 2: // concrete
|
||||||
SG_LOG( SG_GENERAL, SG_DEBUG, "Build Runway: asphalt or concrete" << rwy.surface);
|
SG_LOG( SG_GENERAL, SG_DEBUG, "Build Runway: asphalt or concrete" << rwy.surface);
|
||||||
gen_rwy( alt_m, material, rwy_polys, texparams, accum, slivers );
|
gen_rwy( material, rwy_polys, texparams, accum, slivers );
|
||||||
gen_runway_lights( alt_m, rwy_lights );
|
gen_runway_lights( rwy_lights );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3: // Grass
|
case 3: // Grass
|
||||||
case 4: // Dirt
|
case 4: // Dirt
|
||||||
case 5: // Gravel
|
case 5: // Gravel
|
||||||
SG_LOG( SG_GENERAL, SG_DEBUG, "Build Runway: Turf, Dirt or Gravel" << rwy.surface );
|
SG_LOG( SG_GENERAL, SG_DEBUG, "Build Runway: Turf, Dirt or Gravel" << rwy.surface );
|
||||||
gen_simple_rwy( alt_m, material, rwy_polys, texparams, accum, slivers );
|
gen_simple_rwy( material, rwy_polys, texparams, accum, slivers );
|
||||||
gen_runway_lights( alt_m, rwy_lights );
|
gen_runway_lights( rwy_lights );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 12: // dry lakebed
|
case 12: // dry lakebed
|
||||||
|
@ -166,10 +166,10 @@ int Runway::BuildBtg( float alt_m, superpoly_list* rwy_polys, texparams_list* te
|
||||||
// If we have shoulders, we need to grow even further...
|
// If we have shoulders, we need to grow even further...
|
||||||
|
|
||||||
// generate area around runways
|
// generate area around runways
|
||||||
base = gen_runway_area_w_extend( 0.0, 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
|
// also clear a safe area around the runway
|
||||||
safe_base = gen_runway_area_w_extend( 0.0, 180.0, -rwy.overrun[0], -rwy.overrun[1], 50.0 );
|
safe_base = gen_runway_area_w_extend( 180.0, -rwy.overrun[0], -rwy.overrun[1], 50.0 );
|
||||||
|
|
||||||
// add this to the airport clearing
|
// add this to the airport clearing
|
||||||
*apt_clearing = tgPolygonUnionClipper(safe_base, *apt_clearing);
|
*apt_clearing = tgPolygonUnionClipper(safe_base, *apt_clearing);
|
||||||
|
|
|
@ -46,9 +46,15 @@ public:
|
||||||
else return false;
|
else return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int BuildBtg( float alt_m, superpoly_list* rwy_polys, texparams_list* texparams, superpoly_list* rwy_lights, ClipPolyType* accum, poly_list& slivers, TGPolygon* apt_base, TGPolygon* apt_clearing );
|
int BuildBtg( superpoly_list* rwy_polys,
|
||||||
void BuildShoulder( float alt_m,
|
texparams_list* texparams,
|
||||||
superpoly_list *rwy_polys,
|
superpoly_list* rwy_lights,
|
||||||
|
ClipPolyType* accum,
|
||||||
|
poly_list& slivers,
|
||||||
|
TGPolygon* apt_base,
|
||||||
|
TGPolygon* apt_clearing );
|
||||||
|
|
||||||
|
void BuildShoulder( superpoly_list *rwy_polys,
|
||||||
texparams_list *texparams,
|
texparams_list *texparams,
|
||||||
ClipPolyType *accum,
|
ClipPolyType *accum,
|
||||||
poly_list& slivers,
|
poly_list& slivers,
|
||||||
|
@ -86,16 +92,16 @@ private:
|
||||||
|
|
||||||
// Build Helpers:
|
// Build Helpers:
|
||||||
// generate an area for a runway and include midpoints
|
// generate an area for a runway and include midpoints
|
||||||
TGPolygon gen_runway_w_mid( double alt_m, double length_extend_m, double width_extend_m )
|
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, alt_m, true) );
|
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) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// generate an area for a runway with expansion specified in meters
|
// generate an area for a runway with expansion specified in meters
|
||||||
// (return result points in degrees)
|
// (return result points in degrees)
|
||||||
TGPolygon gen_runway_area_w_extend( double alt_m, double length_extend, double displ1, double displ2, double width_extend )
|
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, alt_m, false) );
|
return ( gen_wgs84_area( Point3D(GetStart()), Point3D(GetEnd()), 2.0*length_extend, displ1, displ2, rwy.width + 2.0*width_extend, rwy.heading, false) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void gen_rw_designation( const std::string& material,
|
void gen_rw_designation( const std::string& material,
|
||||||
|
@ -128,9 +134,8 @@ private:
|
||||||
ClipPolyType* accum,
|
ClipPolyType* accum,
|
||||||
poly_list& slivers );
|
poly_list& slivers );
|
||||||
|
|
||||||
void gen_simple_rwy( double alt_m, 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_rwy( double alt_m,
|
void gen_rwy( const std::string& material,
|
||||||
const std::string& material,
|
|
||||||
superpoly_list* rwy_polys,
|
superpoly_list* rwy_polys,
|
||||||
texparams_list* texparams,
|
texparams_list* texparams,
|
||||||
ClipPolyType* accum,
|
ClipPolyType* accum,
|
||||||
|
@ -146,20 +151,20 @@ private:
|
||||||
poly_list& slivers,
|
poly_list& slivers,
|
||||||
int marking );
|
int marking );
|
||||||
|
|
||||||
void gen_runway_lights( float alt_m, superpoly_list* lights );
|
void gen_runway_lights( superpoly_list* lights );
|
||||||
|
|
||||||
Point3D gen_runway_light_vector( double angle, bool recip );
|
Point3D gen_runway_light_vector( double angle, bool recip );
|
||||||
superpoly_list gen_runway_edge_lights( bool recip );
|
superpoly_list gen_runway_edge_lights( bool recip );
|
||||||
superpoly_list gen_taxiway_edge_lights( const int kind, bool recip );
|
superpoly_list gen_taxiway_edge_lights( const int kind, bool recip );
|
||||||
superpoly_list gen_runway_threshold_lights( const int kind, float alt_m, bool recip );
|
superpoly_list gen_runway_threshold_lights( const int kind, bool recip );
|
||||||
superpoly_list gen_runway_center_line_lights( bool recip );
|
superpoly_list gen_runway_center_line_lights( bool recip );
|
||||||
TGSuperPoly gen_touchdown_zone_lights( float alt_m, bool recip );
|
TGSuperPoly gen_touchdown_zone_lights( bool recip );
|
||||||
TGSuperPoly gen_reil( float alt_m, bool recip );
|
TGSuperPoly gen_reil( bool recip );
|
||||||
superpoly_list gen_calvert( float alt_m, const string &kind, bool recip );
|
superpoly_list gen_calvert( const string &kind, bool recip );
|
||||||
superpoly_list gen_alsf( float alt_m, const string &kind, bool recip );
|
superpoly_list gen_alsf( const string &kind, bool recip );
|
||||||
TGSuperPoly gen_odals( float alt_m, bool recip );
|
TGSuperPoly gen_odals( bool recip );
|
||||||
superpoly_list gen_ssalx( float alt_m, const string& kind, bool recip );
|
superpoly_list gen_ssalx( const string& kind, bool recip );
|
||||||
superpoly_list gen_malsx( float alt_m, const string& kind, bool recip );
|
superpoly_list gen_malsx( const string& kind, bool recip );
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::vector <Runway *> RunwayList;
|
typedef std::vector <Runway *> RunwayList;
|
||||||
|
|
|
@ -140,8 +140,7 @@ void Runway::gen_rw_marking( const TGPolygon& runway,
|
||||||
// dimensions of precision runway markings, please refer to FAA
|
// dimensions of precision runway markings, please refer to FAA
|
||||||
// document AC 150/5340-1H
|
// document AC 150/5340-1H
|
||||||
|
|
||||||
void Runway::gen_rwy( double alt_m,
|
void Runway::gen_rwy( const string& material,
|
||||||
const string& material,
|
|
||||||
superpoly_list *rwy_polys,
|
superpoly_list *rwy_polys,
|
||||||
texparams_list *texparams,
|
texparams_list *texparams,
|
||||||
ClipPolyType *accum,
|
ClipPolyType *accum,
|
||||||
|
@ -155,7 +154,7 @@ void Runway::gen_rwy( double alt_m,
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
TGPolygon runway = gen_runway_w_mid( alt_m, 0, 0 );
|
TGPolygon runway = gen_runway_w_mid( 0, 0 );
|
||||||
|
|
||||||
TGPolygon runway_half;
|
TGPolygon runway_half;
|
||||||
for ( int rwhalf=0; rwhalf<2; ++rwhalf ){
|
for ( int rwhalf=0; rwhalf<2; ++rwhalf ){
|
||||||
|
@ -333,8 +332,7 @@ void Runway::gen_rwy( double alt_m,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Runway::BuildShoulder( float alt_m,
|
void Runway::BuildShoulder( superpoly_list *rwy_polys,
|
||||||
superpoly_list *rwy_polys,
|
|
||||||
texparams_list *texparams,
|
texparams_list *texparams,
|
||||||
ClipPolyType *accum,
|
ClipPolyType *accum,
|
||||||
poly_list& slivers,
|
poly_list& slivers,
|
||||||
|
@ -460,12 +458,7 @@ void Runway::BuildShoulder( float alt_m,
|
||||||
poly.add_node( 0, curInnerLoc );
|
poly.add_node( 0, curInnerLoc );
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
TGPolygon clipped = tgPolygonDiff( poly, *accum );
|
|
||||||
#else
|
|
||||||
TGPolygon clipped = tgPolygonDiffClipper( poly, *accum );
|
TGPolygon clipped = tgPolygonDiffClipper( poly, *accum );
|
||||||
#endif
|
|
||||||
|
|
||||||
tgPolygonFindSlivers( clipped, slivers );
|
tgPolygonFindSlivers( clipped, slivers );
|
||||||
|
|
||||||
sp.erase();
|
sp.erase();
|
||||||
|
@ -473,11 +466,7 @@ void Runway::BuildShoulder( float alt_m,
|
||||||
sp.set_material( shoulder_surface );
|
sp.set_material( shoulder_surface );
|
||||||
rwy_polys->push_back( sp );
|
rwy_polys->push_back( sp );
|
||||||
|
|
||||||
#if 0
|
|
||||||
*accum = tgPolygonUnion( poly, *accum );
|
|
||||||
#else
|
|
||||||
*accum = tgPolygonUnionClipper( poly, *accum );
|
*accum = tgPolygonUnionClipper( poly, *accum );
|
||||||
#endif
|
|
||||||
|
|
||||||
tp = TGTexParams( poly.get_pt(0,0), shoulder_width, dist, rwy.heading );
|
tp = TGTexParams( poly.get_pt(0,0), shoulder_width, dist, rwy.heading );
|
||||||
tp.set_maxv(dist);
|
tp.set_maxv(dist);
|
||||||
|
|
|
@ -32,18 +32,17 @@ using std::string;
|
||||||
|
|
||||||
// generate a simple runway. The routine modifies rwy_polys,
|
// generate a simple runway. The routine modifies rwy_polys,
|
||||||
// texparams, and accum
|
// texparams, and accum
|
||||||
void Runway::gen_simple_rwy( double alt_m,
|
void Runway::gen_simple_rwy( const string& material,
|
||||||
const string& material,
|
|
||||||
superpoly_list *rwy_polys,
|
superpoly_list *rwy_polys,
|
||||||
texparams_list *texparams,
|
texparams_list *texparams,
|
||||||
ClipPolyType *accum,
|
ClipPolyType *accum,
|
||||||
poly_list& slivers )
|
poly_list& slivers )
|
||||||
{
|
{
|
||||||
TGPolygon runway = gen_runway_w_mid( alt_m, 0.0, 0.0 );
|
TGPolygon runway = gen_runway_w_mid( 0.0, 0.0 );
|
||||||
|
|
||||||
TGPolygon runway_half;
|
TGPolygon runway_half;
|
||||||
|
|
||||||
for ( int rwhalf=0; rwhalf<2; ++rwhalf ){
|
for ( int rwhalf=0; rwhalf<2; ++rwhalf ) {
|
||||||
|
|
||||||
if (rwhalf == 0) {
|
if (rwhalf == 0) {
|
||||||
|
|
||||||
|
@ -91,8 +90,10 @@ for ( int rwhalf=0; rwhalf<2; ++rwhalf ){
|
||||||
0.0, 1.0, 0.0, 1.0,
|
0.0, 1.0, 0.0, 1.0,
|
||||||
heading,
|
heading,
|
||||||
material, "",
|
material, "",
|
||||||
rwy_polys, texparams, accum, slivers );
|
rwy_polys, texparams,
|
||||||
|
accum, slivers );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate runway
|
// Generate runway
|
||||||
Runway::gen_runway_section( runway_half,
|
Runway::gen_runway_section( runway_half,
|
||||||
0, 1,
|
0, 1,
|
||||||
|
@ -100,8 +101,8 @@ for ( int rwhalf=0; rwhalf<2; ++rwhalf ){
|
||||||
0.0, 0.28, 0.0, 1.0,
|
0.0, 0.28, 0.0, 1.0,
|
||||||
heading,
|
heading,
|
||||||
material, "",
|
material, "",
|
||||||
rwy_polys, texparams, accum, slivers );
|
rwy_polys, texparams,
|
||||||
|
accum, slivers );
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue