1 // main.cxx -- top level construction routines
3 // Written by Curtis Olson, started March 1999.
5 // Copyright (C) 1999 Curtis L. Olson - curt@flightgear.org
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License as
9 // published by the Free Software Foundation; either version 2 of the
10 // License, or (at your option) any later version.
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 // General Public License for more details.
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, write to the Free Software
19 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 // (Log is kept at end of this file)
25 #include <sys/types.h> // for directory reading
26 #include <dirent.h> // for directory reading
28 #include <Bucket/newbucket.hxx>
30 #include <Array/array.hxx>
31 #include <Clipper/clipper.hxx>
34 // load regular grid of elevation data (dem based)
35 int load_dem(const string& work_base, FGBucket& b, FGArray& array) {
37 string base = b.gen_base_path();
38 long int b_index = b.gen_index();
39 sprintf(tile_name, "%ld", b_index);
41 string dem_path = work_base + ".dem" + "/Scenery/" + base
42 + "/" + tile_name + ".dem";
43 cout << "dem_path = " << dem_path << endl;
45 if ( ! array.open(dem_path) ) {
55 // load all 2d polygons matching the specified base path and clip
56 // against each other to resolve any overlaps
57 int load_polys( const string& work_base, FGBucket& b, FGClipper& clipper) {
59 string base = b.gen_base_path();
60 long int b_index = b.gen_index();
61 sprintf(tile_char, "%ld", b_index);
62 string tile_str = tile_char;
64 string poly_path = work_base + ".shapes" + "/Scenery/" + base;
65 cout << "poly_path = " << poly_path << endl;
70 if ( (d = opendir( poly_path.c_str() )) == NULL ) {
71 cout << "cannot open directory " << poly_path << "\n";
78 // load all matching polygon files
79 string file, f_index, full_path;
81 while ( (de = readdir(d)) != NULL ) {
84 f_index = file.substr(0, pos);
86 if ( tile_str == f_index ) {
87 cout << file << " " << f_index << endl;
88 full_path = poly_path + "/" + file;
89 clipper.load_polys( full_path );
94 min.x = b.get_center_lon() - 0.5 * b.get_width();
95 min.y = b.get_center_lat() - 0.5 * b.get_height();
96 max.x = b.get_center_lon() + 0.5 * b.get_width();
97 max.y = b.get_center_lat() + 0.5 * b.get_height();
100 clipper.clip_all(min, max);
106 main(int argc, char **argv) {
110 cout << "Usage: " << argv[0] << " work_base" << endl;
114 string work_base = argv[1];
116 lon = -146.248360; lat = 61.133950; // PAVD (Valdez, AK)
117 // lon = -110.664244; lat = 33.352890; // P13
118 FGBucket b( lon, lat );
120 // load and fit grid of elevation data
122 load_dem( work_base, b, array );
124 // load and clip 2d polygon data
126 load_polys( work_base, b, clipper );
131 // Revision 1.1 1999/03/14 00:03:24 curt