//
-// getapt.cxx -- generate airport scenery from the given definition file
+// genapt.cxx -- generate airport scenery from the given definition file
//
// Written by Curtis Olson, started September 1998.
//
using namespace std;
#endif
-#include <Debug/fg_debug.h>
+#ifdef __BORLANDC__
+# define exception c_exception
+#endif
+#include <math.h>
+
+#include <Debug/logstream.hxx>
// #include <Include/fg_types.h>
-#include <Math/fg_geodesy.h>
+#include <Math/fg_geodesy.hxx>
#include <Math/mat3.h>
#include <Math/point3d.hxx>
#include <Math/polar3d.hxx>
typedef container::const_iterator const_iterator;
-/*
-// Calculate distance between to Point3D's
-static double calc_dist(const Point3D& p1, const Point3D& p2) {
- double x, y, z;
- x = p1.x() - p2.x();
- y = p1.y() - p2.y();
- z = p1.z() - p2.z();
- return sqrt(x*x + y*y + z*z);
-}
-*/
-
-
-// convert a geodetic point lon(radians), lat(radians), elev(meter) to
-// a cartesian point
-static Point3D geod_to_cart(const Point3D& geod) {
- Point3D cp;
- Point3D pp;
- double gc_lon, gc_lat, sl_radius;
-
- // printf("A geodetic point is (%.2f, %.2f, %.2f)\n",
- // geod[0], geod[1], geod[2]);
-
- gc_lon = geod.lon();
- fgGeodToGeoc(geod.lat(), geod.radius(), &sl_radius, &gc_lat);
-
- // printf("A geocentric point is (%.2f, %.2f, %.2f)\n", gc_lon,
- // gc_lat, sl_radius+geod[2]);
-
- pp.setvals(gc_lon, gc_lat, sl_radius + geod.radius());
- cp = fgPolarToCart3d(pp);
-
- // printf("A cart point is (%.8f, %.8f, %.8f)\n", cp.x, cp.y, cp.z);
-
- return(cp);
-}
-
#define FG_APT_BASE_TEX_CONSTANT 2000.0
-#ifdef OLD_TEX_COORDS
-// Calculate texture coordinates for a given point.
-static fgPoint3d
-calc_tex_coords(const fgPoint3d& p) {
- fgPoint3d tex;
-
- cout << "Texture coordinates = " <<
- FG_APT_BASE_TEX_CONSTANT * p.lon << " " <<
- FG_APT_BASE_TEX_CONSTANT * p.lat << "\n";
-
- tex.x = fmod(FG_APT_BASE_TEX_CONSTANT * p.lon, 10.0);
- tex.y = fmod(FG_APT_BASE_TEX_CONSTANT * p.lat, 10.0);
-
- if ( tex.x < 0.0 ) {
- tex.x += 10.0;
- }
-
- if ( tex.y < 0.0 ) {
- tex.y += 10.0;
- }
-
- cout << "Texture coordinates = " << tex.x << " " << tex.y << "\n";
-
- return tex;
-}
-#endif
-
-
// Calculate texture coordinates for a given point.
static Point3D calc_tex_coords(double *node, const Point3D& ref) {
Point3D cp;
Point3D pp;
- cp.setvals( node[0] + ref.x(), node[1] + ref.y(), node[2] + ref.z() );
+ cp = Point3D( node[0] + ref.x(), node[1] + ref.y(), node[2] + ref.z() );
pp = fgCartToPolar3d(cp);
max_dist = 0.0;
- cout << "generating airport base for size = " << perimeter.size() << "\n";
+ FG_LOG( FG_TERRAIN, FG_INFO,
+ "generating airport base for size = " << perimeter.size() );
fragment.init();
fragment.tile_ptr = t;
// find airport base material in the properties list
if ( ! material_mgr.find( APT_BASE_MATERIAL, fragment.material_ptr )) {
- fgPrintf( FG_TERRAIN, FG_ALERT,
- "Ack! unknown material name = %s in fgAptGenerat()\n",
- APT_BASE_MATERIAL );
+ FG_LOG( FG_TERRAIN, FG_ALERT,
+ "Ack! unknown material name = " << APT_BASE_MATERIAL
+ << " in fgAptGenerat()" );
}
- printf(" tile center = %.2f %.2f %.2f\n",
- t->center.x(), t->center.y(), t->center.z() );
- printf(" airport center = %.2f %.2f %.2f\n",
- average.x(), average.y(), average.z());
+ FG_LOG( FG_TERRAIN, FG_INFO,
+ " tile center = "
+ << t->center.x() << " " << t->center.y() << " " << t->center.z() );
+ FG_LOG( FG_TERRAIN, FG_INFO,
+ " airport center = "
+ << average.x() << " " << average.y() << " " << average.z() );
fragment.center = average;
normal[0] = average.x();
// first point on perimeter
const_iterator current = perimeter.begin();
- cart = geod_to_cart( *current );
+ cart = fgGeodToCart( *current );
cart_trans = cart - t->center;
t->nodes[t->ncount][0] = cart_trans.x();
t->nodes[t->ncount][1] = cart_trans.y();
i = 1;
tex = calc_tex_coords( t->nodes[i], t->center );
- dist = distance3D(average, cart);
+ dist = cart.distance3Dsquared(average);
if ( dist > max_dist ) {
max_dist = dist;
}
const_iterator last = perimeter.end();
for ( ; current != last; ++current ) {
- cart = geod_to_cart( *current );
+ cart = fgGeodToCart( *current );
cart_trans = cart - t->center;
t->nodes[t->ncount][0] = cart_trans.x();
t->nodes[t->ncount][1] = cart_trans.y();
fragment.add_face(center_num, i - 1, i);
tex = calc_tex_coords( t->nodes[i], t->center );
- dist = distance3D(average, cart);
+ dist = cart.distance3Dsquared(average);
if ( dist > max_dist ) {
max_dist = dist;
}
// last point (first point in perimeter list)
current = perimeter.begin();
- cart = geod_to_cart( *current );
+ cart = fgGeodToCart( *current );
cart_trans = cart - t->center;
fragment.add_face(center_num, i - 1, 1);
xglEnd();
xglEndList();
- fragment.bounding_radius = max_dist;
+ fragment.bounding_radius = sqrt(max_dist);
fragment.display_list = display_list;
t->fragment_list.push_back(fragment);
apt_id = "";
// read in each line of the file
- in.eat_comments();
+ in >> skipcomment;
while ( ! in.eof() )
{
- in.stream() >> token;
+ in >> token;
if ( token == "a" ) {
// airport info record (start of airport)
gen_base(average, perimeter, tile);
}
- cout << "Reading airport record\n";
- in.stream() >> apt_id;
+ FG_LOG( FG_TERRAIN, FG_INFO, "Reading airport record" );
+ in >> apt_id;
apt_name = "";
i = 1;
avex = avey = avez = 0.0;
while ( in.get(c) && c != '\n' ) {
apt_name += c;
}
- cout << "\tID = " + apt_id + " Name = " + apt_name + "\n";
+ FG_LOG( FG_TERRAIN, FG_INFO,
+ "\tID = " << apt_id << " Name = " << apt_name );
} else if ( token == "p" ) {
// airport area bounding polygon coordinate. These
// specify a convex hull that should already have been cut
// out of the base terrain. The points are given in
// counter clockwise order and are specified in lon/lat
// degrees.
- in.stream() >> p;
+ in >> p;
avex += tile->nodes[i][0];
avey += tile->nodes[i][1];
avez += tile->nodes[i][2];
while ( in.get(c) && c != '\n' );
}
- // airports.insert(a);
- in.eat_comments();
+ in >> skipcomment;
}
if ( apt_id != "" ) {
// we have just finished reading and airport record.
// process the info
size = perimeter.size();
- average.setvals( avex / (double)size + tile->center.x(),
- avey / (double)size + tile->center.y(),
- avez / (double)size + tile->center.z() );
+ average = Point3D( avex / (double)size + tile->center.x(),
+ avey / (double)size + tile->center.y(),
+ avez / (double)size + tile->center.z() );
gen_base(average, perimeter, tile);
}
// $Log$
+// Revision 1.12 1999/02/01 21:08:33 curt
+// Optimizations from Norman Vine.
+//
+// Revision 1.11 1998/11/23 21:48:09 curt
+// Borland portability tweaks.
+//
+// Revision 1.10 1998/11/07 19:07:06 curt
+// Enable release builds using the --without-logging option to the configure
+// script. Also a couple log message cleanups, plus some C to C++ comment
+// conversion.
+//
+// Revision 1.9 1998/11/06 21:17:32 curt
+// Converted to new logstream debugging facility. This allows release
+// builds with no messages at all (and no performance impact) by using
+// the -DFG_NDEBUG flag.
+//
+// Revision 1.8 1998/11/06 14:46:59 curt
+// Changes to track Bernie's updates to fgstream.
+//
+// Revision 1.7 1998/10/20 18:26:06 curt
+// Updates to point3d.hxx
+//
+// Revision 1.6 1998/10/18 01:17:16 curt
+// Point3D tweaks.
+//
+// Revision 1.5 1998/10/16 23:27:14 curt
+// C++-ifying.
+//
// Revision 1.4 1998/10/16 00:51:46 curt
// Converted to Point3D class.
//
// Revision 1.1 1998/09/14 02:14:01 curt
// Initial revision of genapt.[ch]xx for generating airport scenery.
//
-//
-