From: curt Date: Sun, 18 Oct 1998 01:17:09 +0000 (+0000) Subject: Point3D tweaks. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=b0d67bf6b956dd8014344bc4b4934fa4f7861ef4;p=flightgear.git Point3D tweaks. --- diff --git a/DEM/dem.cxx b/DEM/dem.cxx index 27497f2d8..fbadcecda 100644 --- a/DEM/dem.cxx +++ b/DEM/dem.cxx @@ -239,7 +239,7 @@ int fgDEM::read_a_record() { } // clean off the trailing whitespace - name = trim(name, " "); + name = trim(name); cout << " Quad name field: " << name << endl; // DEM level code, 3 reflects processing by DMA @@ -852,6 +852,9 @@ fgDEM::~fgDEM( void ) { // $Log$ +// Revision 1.18 1998/10/18 01:17:09 curt +// Point3D tweaks. +// // Revision 1.17 1998/10/16 19:08:12 curt // Portability updates from Bernie Bright. // diff --git a/SplitTris/Makefile.am b/SplitTris/Makefile.am index f43a3081f..8e4c2df64 100644 --- a/SplitTris/Makefile.am +++ b/SplitTris/Makefile.am @@ -32,6 +32,7 @@ splittris_LDADD = \ $(top_builddir)/Lib/Bucket/libBucket.a \ $(top_builddir)/Lib/Math/libMath.a \ $(top_builddir)/Lib/Debug/libDebug.a \ + $(top_builddir)/Lib/Misc/libMisc.a \ $(top_builddir)/Lib/zlib/libz.a INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib @@ -39,6 +40,9 @@ INCLUDES += -I$(top_builddir) -I$(top_builddir)/Lib #--------------------------------------------------------------------------- # $Log$ +# Revision 1.7 1998/10/18 01:17:25 curt +# Point3D tweaks. +# # Revision 1.6 1998/07/30 23:49:26 curt # Removed libtool support. # diff --git a/SplitTris/splittris.cxx b/SplitTris/splittris.cxx index e9ec2ff57..5892aa467 100644 --- a/SplitTris/splittris.cxx +++ b/SplitTris/splittris.cxx @@ -35,18 +35,19 @@ #include "splittris.hxx" #include -#include #include -#include +#include #include +#include #include +#include // int nodecount, tricount; double xmin, xmax, ymin, ymax; // static double nodes_orig[MAX_NODES][3]; -// static fgPoint3d nodes_cart[MAX_NODES]; +// static Point3D nodes_cart[MAX_NODES]; // static int tris[MAX_TRIS][3]; container_3d nodes_orig; @@ -56,42 +57,16 @@ container_tri tri_list; fgBUCKET ne_index, nw_index, sw_index, se_index; fgBUCKET north_index, south_index, east_index, west_index; -// convert a geodetic point lon(arcsec), lat(arcsec), elev(meter) to a -// cartesian point -fgPoint3d geod_to_cart(fgPoint3d geod) { - fgPoint3d cp; - fgPoint3d 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 * ARCSEC_TO_RAD; - fgGeodToGeoc(geod.lat * ARCSEC_TO_RAD, geod.radius, &sl_radius, &gc_lat); - - // printf("A geocentric point is (%.2f, %.2f, %.2f)\n", gc_lon, - // gc_lat, sl_radius+geod[2]); - - pp.lon = gc_lon; - pp.lat = gc_lat; - pp.radius = sl_radius + geod.radius; - cp = fgPolarToCart3d(pp); - - // printf("A cart point is (%.8f, %.8f, %.8f)\n", cp.x, cp.y, cp.z); - - return(cp); -} - // given three points defining a triangle, calculate the normal -void calc_normal(fgPoint3d p1, fgPoint3d p2, - fgPoint3d p3, double normal[3]) +void calc_normal(const Point3D& p1, const Point3D& p2, + const Point3D& p3, double normal[3]) { double v1[3], v2[3]; double temp; - v1[0] = p2.x - p1.x; v1[1] = p2.y - p1.y; v1[2] = p2.z - p1.z; - v2[0] = p3.x - p1.x; v2[1] = p3.y - p1.y; v2[2] = p3.z - p1.z; + v1[0] = p2.x() - p1.x(); v1[1] = p2.y() - p1.y(); v1[2] = p2.z() - p1.z(); + v2[0] = p3.x() - p1.x(); v2[1] = p3.y() - p1.y(); v2[2] = p3.z() - p1.z(); MAT3cross_product(normal, v1, v2); MAT3_NORMALIZE_VEC(normal,temp); @@ -159,9 +134,8 @@ void find_tris(int n, int *t1, int *t2, int *t3, int *t4, int *t5) { // Initialize a new mesh structure void triload(const string& basename) { string nodename, elename; - fgPoint3d node1, node2; + Point3D node1, node2; triangle tri; - FILE *node_file, *ele_file; int nodecount, tricount, dim, junk1, junk2; int i; @@ -169,7 +143,9 @@ void triload(const string& basename) { elename = basename + ".ele"; cout << "Loading node file: " + nodename + " ...\n"; - if ( (node_file = fopen(nodename.c_str(), "r")) == NULL ) { + + fg_gzifstream node_in( nodename ); + if ( !node_in ) { cout << "Cannot open file " + nodename + "\n"; exit(-1); } @@ -181,56 +157,54 @@ void triload(const string& basename) { nodes_cart.push_back(node1); tri_list.push_back(tri); - fscanf(node_file, "%d %d %d %d", &nodecount, &dim, &junk1, &junk2); + node_in.stream() >> nodecount >> dim >> junk1 >> junk2; cout << " Expecting " << nodecount << " nodes\n"; for ( i = 1; i <= nodecount; i++ ) { - fscanf(node_file, "%d %lf %lf %lf %d\n", &junk1, - &(node1.x), &(node1.y), &(node1.z), &junk2); - printf("%d %.2f %.2f %.2f\n", junk1, node1.x, node1.y, node1.z); + node_in.stream() >> junk1 >> node1 >> junk2; nodes_orig.push_back(node1); - node2 = geod_to_cart(node1); + // printf("%d %.2f %.2f %.2f\n", junk1, node1.x, node1.y, node1.z); + + node2 = fgGeodToCart(node1); nodes_cart.push_back(node2); - printf("%d %.2f %.2f %.2f\n", junk1, node2.x, node2.y, node2.z); + // printf("%d %.2f %.2f %.2f\n", junk1, node2.x, node2.y, node2.z); if ( i == 1 ) { - xmin = xmax = node1.x; - ymin = ymax = node1.y; + xmin = xmax = node1.x(); + ymin = ymax = node1.y(); } else { - if ( node1.x < xmin ) { - xmin = node1.x; + if ( node1.x() < xmin ) { + xmin = node1.x(); } - if ( node1.x > xmax ) { - xmax = node1.x; + if ( node1.x() > xmax ) { + xmax = node1.x(); } - if ( node1.y < ymin ) { - ymin = node1.y; + if ( node1.y() < ymin ) { + ymin = node1.y(); } - if ( node1.y > ymax ) { - ymax = node1.y; + if ( node1.y() > ymax ) { + ymax = node1.y(); } } } - fclose(node_file); - cout << "Loading element file: " + elename + " ...\n"; - if ( (ele_file = fopen(elename.c_str(), "r")) == NULL ) { + fg_gzifstream ele_in( elename ); + if ( !ele_in ) { cout << "Cannot open file " + elename + "\n"; exit(-1); } - fscanf(ele_file, "%d %d %d", &tricount, &junk1, &junk2); + ele_in.stream() >> tricount >> junk1 >> junk2; cout << " Expecting " << tricount << " elements\n"; for ( i = 1; i <= tricount; i++ ) { - fscanf(ele_file, "%d %d %d %d\n", &junk1, - &(tri.n1), &(tri.n2), &(tri.n3)); - printf("%d %d %d %d\n", junk1, tri.n1, tri.n2, tri.n3); + // fscanf(ele_file, "%d %d %d %d\n", &junk1, + // &(tri.n1), &(tri.n2), &(tri.n3)); + ele_in.stream() >> junk1 >> tri.n1 >> tri.n2 >> tri.n3; + // printf("%d %d %d %d\n", junk1, tri.n1, tri.n2, tri.n3); tri_list.push_back(tri); } - - fclose(ele_file); } @@ -413,10 +387,11 @@ FILE *my_open(const string& basename, const string& basepath, // dump in WaveFront .obj format void dump_obj(const string& basename, const string& basepath) { - fgPoint3d node; + Point3D node; double n1[3], n2[3], n3[3], n4[3], n5[3], norm[3], temp; FILE *fp, *sw, *se, *ne, *nw, *north, *south, *east, *west, *body; int i, t1, t2, t3, t4, t5, count, size; + double x, y, z; sw = my_open(basename, basepath, ".sw"); se = my_open(basename, basepath, ".se"); @@ -441,32 +416,36 @@ void dump_obj(const string& basename, const string& basepath) { for ( ; current != last; ++current) { node = *current; - if ( (fabs(node.y - ymin) < FG_EPSILON) && - (fabs(node.x - xmin) < FG_EPSILON) ) { + if ( (fabs(node.y() - ymin) < FG_EPSILON) && + (fabs(node.x() - xmin) < FG_EPSILON) ) { fp = sw; - } else if ( (fabs(node.y - ymin) < FG_EPSILON) && - (fabs(node.x - xmax) < FG_EPSILON) ) { + } else if ( (fabs(node.y() - ymin) < FG_EPSILON) && + (fabs(node.x() - xmax) < FG_EPSILON) ) { fp = se; - } else if ( (fabs(node.y - ymax) < FG_EPSILON) && - (fabs(node.x - xmax) < FG_EPSILON)) { + } else if ( (fabs(node.y() - ymax) < FG_EPSILON) && + (fabs(node.x() - xmax) < FG_EPSILON)) { fp = ne; - } else if ( (fabs(node.y - ymax) < FG_EPSILON) && - (fabs(node.x - xmin) < FG_EPSILON) ) { + } else if ( (fabs(node.y() - ymax) < FG_EPSILON) && + (fabs(node.x() - xmin) < FG_EPSILON) ) { fp = nw; - } else if ( fabs(node.x - xmin) < FG_EPSILON ) { + } else if ( fabs(node.x() - xmin) < FG_EPSILON ) { fp = west; - } else if ( fabs(node.x - xmax) < FG_EPSILON ) { + } else if ( fabs(node.x() - xmax) < FG_EPSILON ) { fp = east; - } else if ( fabs(node.y - ymin) < FG_EPSILON ) { + } else if ( fabs(node.y() - ymin) < FG_EPSILON ) { fp = south; - } else if ( fabs(node.y - ymax) < FG_EPSILON ) { + } else if ( fabs(node.y() - ymax) < FG_EPSILON ) { fp = north; } else { fp = body; } + x = node.x(); + y = node.y(); + z = node.z(); + if ( fp != NULL ) { - fprintf(fp, "gdn %.2f %.2f %.2f\n", node.x, node.y, node.z); + fprintf(fp, "gdn %.2f %.2f %.2f\n", x, y, z); } } @@ -538,25 +517,25 @@ void dump_obj(const string& basename, const string& basepath) { fp = NULL; - if ( (fabs(nodes_orig[i].y - ymin) < FG_EPSILON) && - (fabs(nodes_orig[i].x - xmin) < FG_EPSILON) ) { + if ( (fabs(nodes_orig[i].y() - ymin) < FG_EPSILON) && + (fabs(nodes_orig[i].x() - xmin) < FG_EPSILON) ) { fp = sw; - } else if ( (fabs(nodes_orig[i].y - ymin) < FG_EPSILON) && - (fabs(nodes_orig[i].x - xmax) < FG_EPSILON) ) { + } else if ( (fabs(nodes_orig[i].y() - ymin) < FG_EPSILON) && + (fabs(nodes_orig[i].x() - xmax) < FG_EPSILON) ) { fp = se; - } else if ( (fabs(nodes_orig[i].y - ymax) < FG_EPSILON) && - (fabs(nodes_orig[i].x - xmax) < FG_EPSILON)) { + } else if ( (fabs(nodes_orig[i].y() - ymax) < FG_EPSILON) && + (fabs(nodes_orig[i].x() - xmax) < FG_EPSILON)) { fp = ne; - } else if ( (fabs(nodes_orig[i].y - ymax) < FG_EPSILON) && - (fabs(nodes_orig[i].x - xmin) < FG_EPSILON) ) { + } else if ( (fabs(nodes_orig[i].y() - ymax) < FG_EPSILON) && + (fabs(nodes_orig[i].x() - xmin) < FG_EPSILON) ) { fp = nw; - } else if ( fabs(nodes_orig[i].x - xmin) < FG_EPSILON ) { + } else if ( fabs(nodes_orig[i].x() - xmin) < FG_EPSILON ) { fp = west; - } else if ( fabs(nodes_orig[i].x - xmax) < FG_EPSILON ) { + } else if ( fabs(nodes_orig[i].x() - xmax) < FG_EPSILON ) { fp = east; - } else if ( fabs(nodes_orig[i].y - ymin) < FG_EPSILON ) { + } else if ( fabs(nodes_orig[i].y() - ymin) < FG_EPSILON ) { fp = south; - } else if ( fabs(nodes_orig[i].y - ymax) < FG_EPSILON ) { + } else if ( fabs(nodes_orig[i].y() - ymax) < FG_EPSILON ) { fp = north; } if ( fp != NULL ) { @@ -633,6 +612,9 @@ int main(int argc, char **argv) { // $Log$ +// Revision 1.4 1998/10/18 01:17:27 curt +// Point3D tweaks. +// // Revision 1.3 1998/09/22 23:49:56 curt // C++-ified, STL-ified, and string-ified. // diff --git a/SplitTris/splittris.hxx b/SplitTris/splittris.hxx index 9a4e058e8..12787872d 100644 --- a/SplitTris/splittris.hxx +++ b/SplitTris/splittris.hxx @@ -39,7 +39,7 @@ using namespace std; #endif -#include +#include // A triangle (indices of the three nodes) @@ -48,7 +48,7 @@ typedef struct { } triangle; -typedef vector < fgPoint3d > container_3d; +typedef vector < Point3D > container_3d; typedef container_3d::iterator iterator_3d; typedef container_3d::const_iterator const_iterator_3d; @@ -65,6 +65,9 @@ void triload(const string& basename); // $Log$ +// Revision 1.4 1998/10/18 01:17:28 curt +// Point3D tweaks. +// // Revision 1.3 1998/09/22 23:49:58 curt // C++-ified, STL-ified, and string-ified. // diff --git a/Tri2obj/tri2obj.cxx b/Tri2obj/tri2obj.cxx index 732da5c03..dfc374a00 100644 --- a/Tri2obj/tri2obj.cxx +++ b/Tri2obj/tri2obj.cxx @@ -36,14 +36,14 @@ #include #include -#include +#include #include #include int nodecount, tricount; int normalcount = 0; -static fgPoint3d nodes[MAX_NODES]; +static Point3D nodes[MAX_NODES]; static int tris[MAX_TRIS][3]; static double normals[MAX_NODES][3]; @@ -52,42 +52,16 @@ fgBUCKET my_index; fgBUCKET ne_index, nw_index, sw_index, se_index; fgBUCKET north_index, south_index, east_index, west_index; -/* convert a geodetic point lon(arcsec), lat(arcsec), elev(meter) to - * a cartesian point */ -fgPoint3d geod_to_cart(double geod[3]) { - fgPoint3d cp; - fgPoint3d 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[0]*ARCSEC_TO_RAD; - fgGeodToGeoc(geod[1]*ARCSEC_TO_RAD, geod[2], &sl_radius, &gc_lat); - - /* printf("A geocentric point is (%.2f, %.2f, %.2f)\n", gc_lon, - gc_lat, sl_radius+geod[2]); */ - - pp.lon = gc_lon; - pp.lat = gc_lat; - pp.radius = sl_radius + geod[2]; - cp = fgPolarToCart3d(pp); - - /* printf("A cart point is (%.8f, %.8f, %.8f)\n", cp.x, cp.y, cp.z); */ - - return(cp); -} - /* given three points defining a triangle, calculate the normal */ -void calc_normal(fgPoint3d p1, fgPoint3d p2, - fgPoint3d p3, double normal[3]) +void calc_normal(Point3D p1, Point3D p2, + Point3D p3, double normal[3]) { double v1[3], v2[3]; double temp; - v1[0] = p2.x - p1.x; v1[1] = p2.y - p1.y; v1[2] = p2.z - p1.z; - v2[0] = p3.x - p1.x; v2[1] = p3.y - p1.y; v2[2] = p3.z - p1.z; + v1[0] = p2.x() - p1.x(); v1[1] = p2.y() - p1.y(); v1[2] = p2.z() - p1.z(); + v2[0] = p3.x() - p1.x(); v2[1] = p3.y() - p1.y(); v2[2] = p3.z() - p1.z(); MAT3cross_product(normal, v1, v2); MAT3_NORMALIZE_VEC(normal, temp); @@ -407,6 +381,7 @@ FILE *my_open(char *basename, char *basepath, char *ext) { void triload(char *basename, char *basepath) { char nodename[256], elename[256]; double n[3]; + Point3D p; FILE *ne, *nw, *se, *sw, *north, *south, *east, *west; FILE *node, *ele; int dim, junk1, junk2; @@ -468,7 +443,8 @@ void triload(char *basename, char *basepath) { fscanf(node, "%d %lf %lf %lf %d\n", &junk1, &n[0], &n[1], &n[2], &junk2); /* printf("%d %.2f %.2f %.2f\n", junk1, n[0], n[1], n[2]); */ - nodes[i] = geod_to_cart(n); + p = Point3D(n[0], n[1], n[2]); + nodes[i] = fgGeodToCart(p); /* printf("%d %.2f %.2f %.2f\n", junk1, nodes[i].x, nodes[i].y, nodes[i].z); */ } @@ -506,6 +482,7 @@ void dump_obj(char *basename) { double n1[3], n2[3], n3[3], n4[3], n5[3], norm[3], temp; FILE *obj; int i, t1, t2, t3, t4, t5, count; + double x, y, z; strcpy(objname, basename); strcat(objname, ".obj"); @@ -517,8 +494,10 @@ void dump_obj(char *basename) { /* dump vertices */ printf(" writing vertices\n"); for ( i = 1; i <= nodecount; i++ ) { - fprintf(obj, "v %.6f %.6f %.6f\n", - nodes[i].x, nodes[i].y, nodes[i].z); + x = nodes[i].x(); + y = nodes[i].y(); + z = nodes[i].z(); + fprintf(obj, "v %.6f %.6f %.6f\n", x, y, z); } printf(" calculating and writing normals\n"); @@ -644,9 +623,12 @@ int main(int argc, char **argv) { /* $Log$ -/* Revision 1.1 1998/07/08 14:54:53 curt -/* renamed *.[ch] to *.[ch]xx +/* Revision 1.2 1998/10/18 01:17:29 curt +/* Point3D tweaks. /* + * Revision 1.1 1998/07/08 14:54:53 curt + * renamed *.[ch] to *.[ch]xx + * * Revision 1.17 1998/07/04 00:56:40 curt * typedef'd struct fgBUCKET. *