From: curt Date: Sat, 19 Sep 1998 20:43:50 +0000 (+0000) Subject: C++-ified and STL-ified the code. Combined triload.* and fixnode.* into X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=fba995d01a73811bacc80c231887984feb31b901;p=flightgear.git C++-ified and STL-ified the code. Combined triload.* and fixnode.* into a single file. --- diff --git a/FixNode/Makefile.am b/FixNode/Makefile.am index f9224f1a3..a72e8b22c 100644 --- a/FixNode/Makefile.am +++ b/FixNode/Makefile.am @@ -28,8 +28,7 @@ bin_PROGRAMS = fixnode fixnode_SOURCES = \ fixnode.cxx fixnode.hxx \ - main.cxx \ - triload.cxx triload.hxx + main.cxx fixnode_LDADD = \ $(top_builddir)/Lib/DEM/libDEM.a \ @@ -47,6 +46,10 @@ CXXFLAGS = -g #--------------------------------------------------------------------------- # $Log$ +# Revision 1.6 1998/09/19 20:43:50 curt +# C++-ified and STL-ified the code. Combined triload.* and fixnode.* into +# a single file. +# # Revision 1.5 1998/09/19 18:01:26 curt # Support for changes to libDEM.a # diff --git a/FixNode/fixnode.cxx b/FixNode/fixnode.cxx index 86e6ac8cd..0a39452e2 100644 --- a/FixNode/fixnode.cxx +++ b/FixNode/fixnode.cxx @@ -1,105 +1,147 @@ -/* fixnode.c -- traverse the node file and fix the elevation of all the new - * interpolated points. - * - * Written by Curtis Olson, started November 1997. - * - * Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - * (Log is kept at end of this file) - */ +// fixnode.cxx -- traverse the node file and fix the elevation of all the new +// interpolated points. +// +// Written by Curtis Olson, started November 1997. +// +// Copyright (C) 1997 Curtis L. Olson - curt@infoplane.com +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +// $Id$ +// (Log is kept at end of this file) + #include #include #include +#include + +#ifdef HAVE_STDLIB_H +# include +#endif // HAVE_STDLIB_H + +#include #include "fixnode.hxx" #include "triload.hxx" -/* load the node information */ -void fixnodes( char *filename, fgDEM *dem, double nodes[MAX_NODES][3] ) +// load the node information +void load_nodes(const string& filename, container& node_list) { + fgPoint3d node; + int dim, junk1, junk2; + int i, nodecount; + + cout << "Loading node file: " + filename + " ...\n"; + + fg_gzifstream in( filename ); + if ( !in ) { + cout << "Cannot open " + filename + "\n"; + // exit immediately assuming an airport file for this tile + // doesn't exist. + exit(-1); + } + + // Read header line + in.stream() >> nodecount >> dim >> junk1 >> junk2; + cout << " Expecting " << nodecount << " nodes\n"; + + // start with an empty list :-) + node_list.erase( node_list.begin(), node_list.end() ); + + in.eat_comments(); + while ( ! in.eof() ) { + in.stream() >> junk1 >> node.x >> node.y >> node.z >> junk2; + in.eat_comments(); + node_list.push_back(node); + } +} + + +// fix the node elevations +void fix_nodes( const string& filename, fgDEM& dem, container& node_list ) { - char toname[256]; + string toname; FILE *fd; int i; - printf("Fixing up node elevations\n"); - - /* we could just fix the new nodes as the first "for" statement - * would do, but that leads to funny results (I need to figure out - * why.) So, let's try fixing all of them */ + cout << "Fixing up node elevations\n"; - /* for ( i = origcount + 1; i <= nodecount; i++ ) { */ - for ( i = 1; i <= nodecount; i++ ) { - /* printf("Current: %d %.2f %.2f %.2f\n", i, nodes[i][0], - nodes[i][1], nodes[i][2]); */ + iterator current; + iterator last = node_list.end(); + for ( current = node_list.begin() ; current != last ; ++current ) { + // printf("Current: %d %.2f %.2f %.2f\n", i, nodes[i][0], + // nodes[i][1], nodes[i][2]); - nodes[i][2] = - dem->interpolate_altitude(nodes[i][0], nodes[i][1]); + (*current).z = + dem.interpolate_altitude( (*current).x, (*current).y ); - /* printf("Fixed: %d %.2f %.2f %.2f\n", i, nodes[i][0], - nodes[i][1], nodes[i][2]); */ + // printf("Fixed: %d %.2f %.2f %.2f\n", i, nodes[i][0], + // nodes[i][1], nodes[i][2]); } - sprintf(toname, "%s.orig", filename); - printf("Moving %s to %s\n", filename, toname); - rename(filename, toname); + toname = filename + ".orig"; + cout << "Moving " + filename + " to " + toname + "\n"; + rename( filename.c_str(), toname.c_str() ); - printf("Saving new node file: %s\n", filename); + cout << "Saving new node file: " + filename + "\n"; - fd = fopen(filename, "w"); + fd = fopen(filename.c_str(), "w"); - fprintf(fd, "%d 2 1 0\n", nodecount); + fprintf( fd, "%d 2 1 0\n", node_list.size() ); - for ( i = 1; i <= nodecount; i++ ) { - fprintf(fd, "%d %.2f %.2f %.2f 0\n", i, nodes[i][0], - nodes[i][1], nodes[i][2]); + i = 1; + for ( current = node_list.begin() ; current != last ; ++current ) { + fprintf( fd, "%d %.2f %.2f %.2f 0\n", i, + (*current).x, (*current).y, (*current).z ); + ++i; } fclose(fd); } -/* $Log$ -/* Revision 1.3 1998/07/22 21:46:40 curt -/* Fixed a bug that was triggering a seg fault. -/* - * Revision 1.2 1998/04/14 02:26:03 curt - * Code reorganizations. Added a Lib/ directory for more general libraries. - * - * Revision 1.1 1998/04/08 23:05:56 curt - * Adopted Gnu automake/autoconf system. - * - * Revision 1.5 1998/03/19 02:50:19 curt - * Updated to support -lDEM class. - * - * Revision 1.4 1998/03/03 16:00:57 curt - * More c++ compile tweaks. - * - * Revision 1.3 1998/01/09 23:03:08 curt - * Restructured to split 1deg x 1deg dem's into 64 subsections. - * - * Revision 1.2 1997/12/02 13:12:07 curt - * Updated to fix every node. - * - * Revision 1.1 1997/11/27 00:17:33 curt - * Initial revision. - * - */ +// $Log$ +// Revision 1.4 1998/09/19 20:43:52 curt +// C++-ified and STL-ified the code. Combined triload.* and fixnode.* into +// a single file. +// +// Revision 1.3 1998/07/22 21:46:40 curt +// Fixed a bug that was triggering a seg fault. +// +// Revision 1.2 1998/04/14 02:26:03 curt +// Code reorganizations. Added a Lib/ directory for more general libraries. +// +// Revision 1.1 1998/04/08 23:05:56 curt +// Adopted Gnu automake/autoconf system. +// +// Revision 1.5 1998/03/19 02:50:19 curt +// Updated to support -lDEM class. +// +// Revision 1.4 1998/03/03 16:00:57 curt +// More c++ compile tweaks. +// +// Revision 1.3 1998/01/09 23:03:08 curt +// Restructured to split 1deg x 1deg dem's into 64 subsections. +// +// Revision 1.2 1997/12/02 13:12:07 curt +// Updated to fix every node. +// +// Revision 1.1 1997/11/27 00:17:33 curt +// Initial revision. +// + diff --git a/FixNode/fixnode.hxx b/FixNode/fixnode.hxx index 236875fab..0bcc9b2c3 100644 --- a/FixNode/fixnode.hxx +++ b/FixNode/fixnode.hxx @@ -1,5 +1,5 @@ -// fixnode.h -- traverse the node file and fix the elevation of all the new -// interpolated points. +// fixnode.hxx -- traverse the node file and fix the elevation of all the new +// interpolated points. // // Written by Curtis Olson, started November 1997. // @@ -30,20 +30,40 @@ #include #include +#include + +#include +#include "Include/fg_stl_config.h" + +#ifdef NEEDNAMESPACESTD +using namespace std; +#endif #include +#include + -#include "triload.hxx" +typedef vector < fgPoint3d > container; +typedef container::iterator iterator; +typedef container::const_iterator const_iterator; + + +// Initialize a new mesh structure +void load_nodes(const string& basename, container& node_list); // load the node information -void fixnodes( char *basename, fgDEM *dem, double nodes[MAX_NODES][3] ); +void fix_nodes( const string& basename, fgDEM& dem, container& node_list ); #endif // _FIXNODE_H // $Log$ +// Revision 1.3 1998/09/19 20:43:53 curt +// C++-ified and STL-ified the code. Combined triload.* and fixnode.* into +// a single file. +// // Revision 1.2 1998/07/22 21:46:41 curt // Fixed a bug that was triggering a seg fault. // diff --git a/FixNode/main.cxx b/FixNode/main.cxx index 4adaa97d0..68e540802 100644 --- a/FixNode/main.cxx +++ b/FixNode/main.cxx @@ -26,7 +26,7 @@ #include #include -#include +// #include #include #include @@ -37,18 +37,11 @@ #include #include "fixnode.hxx" -#include "triload.hxx" - - -// Storage for the original DEM data which is used to interpolate z values -fgDEM dem; - -// Node list -static double nodes[MAX_NODES][3]; // find all the matching files in the specified directory and fix them -void process_files(const string& root_path) { +void process_files(const string& root_path, fgDEM& dem) { + container node_list; DIR *d; struct dirent *de; string file_path; @@ -72,9 +65,9 @@ void process_files(const string& root_path) { cout << "File = " + file_path + "\n"; // load the input data files - triload(file_path.c_str(), nodes); + load_nodes(file_path, node_list); - fixnodes(file_path.c_str(), &dem, nodes); + fix_nodes(file_path, dem, node_list); } } } @@ -83,10 +76,11 @@ void process_files(const string& root_path) { // main int main(int argc, char **argv) { + fgDEM dem; string demfile, root_path; if ( argc != 3 ) { - printf("Usage %s demfile root_path\n", argv[0]); + cout << "Usage " << argv[0] << " demfile root_path\n"; exit(-1); } @@ -101,13 +95,17 @@ int main(int argc, char **argv) { dem.close(); // process all the *.1.node files in the specified directory - process_files(root_path); + process_files(root_path, dem); return(0); } // $Log$ +// Revision 1.7 1998/09/19 20:43:54 curt +// C++-ified and STL-ified the code. Combined triload.* and fixnode.* into +// a single file. +// // Revision 1.6 1998/09/19 18:01:27 curt // Support for changes to libDEM.a // @@ -146,4 +144,3 @@ int main(int argc, char **argv) { // Revision 1.1 1997/11/27 00:17:34 curt // Initial revision. // -// diff --git a/FixNode/triload.cxx b/FixNode/triload.cxx deleted file mode 100644 index 6852f643d..000000000 --- a/FixNode/triload.cxx +++ /dev/null @@ -1,86 +0,0 @@ -// triload.cxx -- read in a .node file and fix the z values of the -// interpolated points -// -// Written by Curtis Olson, started November 1997. -// -// Copyright (C) 1997 - 1998 Curtis L. Olson - curt@me.umn.edu -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// -// $Id$ -// (Log is kept at end of this file) - - -#include -#include - -#ifdef HAVE_STDLIB_H -# include -#endif // HAVE_STDLIB_H - -#include "triload.hxx" - - -int nodecount; - - -// load the node information -void triload(char *filename, double nodes[MAX_NODES][3]) { - FILE *node; - int dim, junk1, junk2; - int i; - - printf("Loading node file: %s ...\n", filename); - if ( (node = fopen(filename, "r")) == NULL ) { - printf("Cannot open file '%s'\n", filename); - exit(-1); - } - - fscanf(node, "%d %d %d %d", &nodecount, &dim, &junk1, &junk2); - - if ( nodecount > MAX_NODES - 1 ) { - printf("Error, too many nodes, need to increase array size\n"); - exit(-1); - } else { - printf(" Expecting %d nodes\n", nodecount); - } - - for ( i = 1; i <= nodecount; i++ ) { - fscanf(node, "%d %lf %lf %lf %d\n", &junk1, - &nodes[i][0], &nodes[i][1], &nodes[i][2], &junk2); - // printf("%d %.2f %.2f %.2f\n", junk1, nodes[i][0], nodes[i][1], - // nodes[i][2]); - } - - fclose(node); -} - - -// $Log$ -// Revision 1.2 1998/04/26 05:02:06 curt -// Added #ifdef HAVE_STDLIB_H -// -// Revision 1.1 1998/04/08 23:05:58 curt -// Adopted Gnu automake/autoconf system. -// -// Revision 1.3 1998/03/03 16:00:59 curt -// More c++ compile tweaks. -// -// Revision 1.2 1998/01/09 23:03:09 curt -// Restructured to split 1deg x 1deg dem's into 64 subsections. -// -// Revision 1.1 1997/11/27 00:17:35 curt -// Initial revision. -// diff --git a/FixNode/triload.hxx b/FixNode/triload.hxx deleted file mode 100644 index de40c1b31..000000000 --- a/FixNode/triload.hxx +++ /dev/null @@ -1,63 +0,0 @@ -// triload.hxx -- read in a .node file and fix the z values of the -// interpolated points -// -// Written by Curtis Olson, started November 1997. -// -// Copyright (C) 1997 - 1998 Curtis L. Olson - curt@me.umn.edu -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -// -// $Id$ -// (Log is kept at end of this file) - - -#ifndef _TRILOAD_H -#define _TRILOAD_H - - -#include -#include - - -#define MAX_NODES 200000 -#define MAX_TRIS 400000 - - -extern int nodecount, tricount; - - -// Initialize a new mesh structure -void triload(char *basename, double nodes[MAX_NODES][3]); - - -#endif // _TRILOAD_H - - -// $Log$ -// Revision 1.1 1998/04/08 23:06:00 curt -// Adopted Gnu automake/autoconf system. -// -// Revision 1.4 1998/03/19 02:50:20 curt -// Updated to support -lDEM class. -// -// Revision 1.3 1998/03/03 16:00:59 curt -// More c++ compile tweaks. -// -// Revision 1.2 1998/01/09 23:03:09 curt -// Restructured to split 1deg x 1deg dem's into 64 subsections. -// -// Revision 1.1 1997/11/27 00:17:35 curt -// Initial revision. -//