MSVC5 combatibility tweaks contributed by Bruce Finney.
This commit is contained in:
parent
66dbea0aaa
commit
c54e5e8adc
25 changed files with 245 additions and 93 deletions
|
@ -423,7 +423,9 @@ static FGPolygon add_nodes_to_poly( const FGPolygon& poly,
|
||||||
add_intermediate_nodes( i, p0, p1, tmp_nodes, &result );
|
add_intermediate_nodes( i, p0, p1, tmp_nodes, &result );
|
||||||
|
|
||||||
// end of segment is beginning of next segment
|
// end of segment is beginning of next segment
|
||||||
result.add_node( i, p1 );
|
// 5/9/2000 CLO - this results in duplicating the last point
|
||||||
|
// of a contour so I have removed this line.
|
||||||
|
// result.add_node( i, p1 );
|
||||||
|
|
||||||
// maintain original hole flag setting
|
// maintain original hole flag setting
|
||||||
result.set_hole_flag( i, poly.get_hole_flag( i ) );
|
result.set_hole_flag( i, poly.get_hole_flag( i ) );
|
||||||
|
|
|
@ -101,6 +101,8 @@ bool test_point(Point3D Pa, Point3D Pb, Point3D Pc) {
|
||||||
// point2d. The algorithm description can be found at:
|
// point2d. The algorithm description can be found at:
|
||||||
// http://riot.ieor.berkeley.edu/riot/Applications/ConvexHull/CHDetails.html
|
// http://riot.ieor.berkeley.edu/riot/Applications/ConvexHull/CHDetails.html
|
||||||
FGPolygon convex_hull( const point_list& input_list ) {
|
FGPolygon convex_hull( const point_list& input_list ) {
|
||||||
|
int i;
|
||||||
|
|
||||||
map_iterator map_current, map_next, map_next_next, map_last;
|
map_iterator map_current, map_next, map_next_next, map_last;
|
||||||
|
|
||||||
// list of translated points
|
// list of translated points
|
||||||
|
@ -120,7 +122,7 @@ FGPolygon convex_hull( const point_list& input_list ) {
|
||||||
in_count = input_list.size();
|
in_count = input_list.size();
|
||||||
sum_x = sum_y = 0.0;
|
sum_x = sum_y = 0.0;
|
||||||
|
|
||||||
for ( int i = 0; i < in_count; ++i ) {
|
for ( i = 0; i < in_count; ++i ) {
|
||||||
sum_x += input_list[i].x();
|
sum_x += input_list[i].x();
|
||||||
sum_y += input_list[i].y();
|
sum_y += input_list[i].y();
|
||||||
}
|
}
|
||||||
|
@ -132,7 +134,7 @@ FGPolygon convex_hull( const point_list& input_list ) {
|
||||||
// STEP TWO: Translate input points so average is at origin
|
// STEP TWO: Translate input points so average is at origin
|
||||||
trans_list.clear();
|
trans_list.clear();
|
||||||
|
|
||||||
for ( int i = 0; i < in_count; ++i ) {
|
for ( i = 0; i < in_count; ++i ) {
|
||||||
p = Point3D( input_list[i].x() - average.x(),
|
p = Point3D( input_list[i].x() - average.x(),
|
||||||
input_list[i].y() - average.y(), 0 );
|
input_list[i].y() - average.y(), 0 );
|
||||||
// printf("%.6f %.6f\n", p.x, p.y);
|
// printf("%.6f %.6f\n", p.x, p.y);
|
||||||
|
@ -142,7 +144,7 @@ FGPolygon convex_hull( const point_list& input_list ) {
|
||||||
// STEP THREE: convert to radians and sort by theta
|
// STEP THREE: convert to radians and sort by theta
|
||||||
radians_map.clear();
|
radians_map.clear();
|
||||||
|
|
||||||
for ( int i = 0; i < in_count; ++i ) {
|
for ( i = 0; i < in_count; ++i ) {
|
||||||
p = cart_to_polar_2d( trans_list[i] );
|
p = cart_to_polar_2d( trans_list[i] );
|
||||||
if ( p.x() > radians_map[p.y()] ) {
|
if ( p.x() > radians_map[p.y()] ) {
|
||||||
radians_map[p.y()] = p.x();
|
radians_map[p.y()] = p.x();
|
||||||
|
@ -243,5 +245,3 @@ FGPolygon convex_hull( const point_list& input_list ) {
|
||||||
|
|
||||||
return con_hull;
|
return con_hull;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
|
|
||||||
#include "clipper.hxx"
|
#include "clipper.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
|
||||||
|
|
||||||
#define MASK_CLIP 1
|
#define MASK_CLIP 1
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,15 @@
|
||||||
#include <Polygon/names.hxx>
|
#include <Polygon/names.hxx>
|
||||||
#include "scenery_version.hxx"
|
#include "scenery_version.hxx"
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "genobj.hxx"
|
#include "genobj.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
// calculate the global bounding sphere. Center is the center of the
|
// calculate the global bounding sphere. Center is the center of the
|
||||||
// tile and zero elevation
|
// tile and zero elevation
|
||||||
|
@ -151,6 +158,8 @@ int_list FGGenOutput::calc_tex_coords( FGConstruct& c, point_list geod_nodes,
|
||||||
// build the necessary output structures based on the triangulation
|
// build the necessary output structures based on the triangulation
|
||||||
// data
|
// data
|
||||||
int FGGenOutput::build( FGConstruct& c ) {
|
int FGGenOutput::build( FGConstruct& c ) {
|
||||||
|
int i, j;
|
||||||
|
|
||||||
FGTriNodes trinodes = c.get_tri_nodes();
|
FGTriNodes trinodes = c.get_tri_nodes();
|
||||||
|
|
||||||
// copy the geodetic node list into this class
|
// copy the geodetic node list into this class
|
||||||
|
@ -162,7 +171,7 @@ int FGGenOutput::build( FGConstruct& c ) {
|
||||||
// build the trifan list
|
// build the trifan list
|
||||||
cout << "total triangles = " << tri_elements.size() << endl;
|
cout << "total triangles = " << tri_elements.size() << endl;
|
||||||
FGGenFans f;
|
FGGenFans f;
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
triele_list area_tris;
|
triele_list area_tris;
|
||||||
area_tris.erase( area_tris.begin(), area_tris.end() );
|
area_tris.erase( area_tris.begin(), area_tris.end() );
|
||||||
|
|
||||||
|
@ -185,8 +194,8 @@ int FGGenOutput::build( FGConstruct& c ) {
|
||||||
cout << "calculating texture coordinates" << endl;
|
cout << "calculating texture coordinates" << endl;
|
||||||
tex_coords.clear();
|
tex_coords.clear();
|
||||||
|
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
for ( int j = 0; j < (int)fans[i].size(); ++j ) {
|
for ( j = 0; j < (int)fans[i].size(); ++j ) {
|
||||||
// int_list t_list = calc_tex_coords( c, geod_nodes, fans[i][j] );
|
// int_list t_list = calc_tex_coords( c, geod_nodes, fans[i][j] );
|
||||||
// cout << fans[i][j].size() << " === "
|
// cout << fans[i][j].size() << " === "
|
||||||
// << t_list.size() << endl;
|
// << t_list.size() << endl;
|
||||||
|
@ -302,13 +311,19 @@ void FGGenOutput::calc_bounding_sphere( FGConstruct& c, const FGTriEle& t,
|
||||||
// write out the fgfs scenery file
|
// write out the fgfs scenery file
|
||||||
int FGGenOutput::write( FGConstruct &c ) {
|
int FGGenOutput::write( FGConstruct &c ) {
|
||||||
Point3D p;
|
Point3D p;
|
||||||
|
int i;
|
||||||
|
|
||||||
string base = c.get_output_base();
|
string base = c.get_output_base();
|
||||||
FGBucket b = c.get_bucket();
|
FGBucket b = c.get_bucket();
|
||||||
|
|
||||||
string dir = base + "/Scenery/" + b.gen_base_path();
|
string dir = base + "/Scenery/" + b.gen_base_path();
|
||||||
|
|
||||||
|
#ifdef _MSCVER
|
||||||
|
fg_mkdir( dir.c_str );
|
||||||
|
#else
|
||||||
string command = "mkdir -p " + dir;
|
string command = "mkdir -p " + dir;
|
||||||
system(command.c_str());
|
system(command.c_str());
|
||||||
|
#endif
|
||||||
|
|
||||||
string file = dir + "/" + b.gen_index_str();
|
string file = dir + "/" + b.gen_index_str();
|
||||||
cout << "Output file = " << file << endl;
|
cout << "Output file = " << file << endl;
|
||||||
|
@ -361,7 +376,7 @@ int FGGenOutput::write( FGConstruct &c ) {
|
||||||
// write texture coordinates
|
// write texture coordinates
|
||||||
point_list tex_coord_list = tex_coords.get_node_list();
|
point_list tex_coord_list = tex_coords.get_node_list();
|
||||||
fprintf(fp, "# texture coordinate list\n");
|
fprintf(fp, "# texture coordinate list\n");
|
||||||
for ( int i = 0; i < (int)tex_coord_list.size(); ++i ) {
|
for ( i = 0; i < (int)tex_coord_list.size(); ++i ) {
|
||||||
p = tex_coord_list[i];
|
p = tex_coord_list[i];
|
||||||
fprintf(fp, "vt %.5f %.5f\n", p.x(), p.y());
|
fprintf(fp, "vt %.5f %.5f\n", p.x(), p.y());
|
||||||
}
|
}
|
||||||
|
@ -374,7 +389,7 @@ int FGGenOutput::write( FGConstruct &c ) {
|
||||||
fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
|
|
||||||
int total_tris = 0;
|
int total_tris = 0;
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
if ( (int)fans[i].size() > 0 ) {
|
if ( (int)fans[i].size() > 0 ) {
|
||||||
string attr_name = get_area_name( (AreaType)i );
|
string attr_name = get_area_name( (AreaType)i );
|
||||||
calc_group_bounding_sphere( c, fans[i], ¢er, &radius );
|
calc_group_bounding_sphere( c, fans[i], ¢er, &radius );
|
||||||
|
|
|
@ -21,12 +21,20 @@
|
||||||
// $Id$
|
// $Id$
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <io.h>
|
||||||
|
#else
|
||||||
# include <sys/types.h> // for directory reading
|
# include <sys/types.h> // for directory reading
|
||||||
# include <dirent.h> // for directory reading
|
# include <dirent.h> // for directory reading
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_SYS_TIME_H
|
||||||
# include <sys/time.h> // set mem allocation limit
|
# include <sys/time.h> // set mem allocation limit
|
||||||
|
#endif
|
||||||
|
#ifndef _MSC_VER
|
||||||
# include <sys/resource.h> // set mem allocation limit
|
# include <sys/resource.h> // set mem allocation limit
|
||||||
# include <unistd.h> // set mem allocation limit
|
# include <unistd.h> // set mem allocation limit
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <plib/sg.h>
|
#include <plib/sg.h>
|
||||||
|
|
||||||
|
@ -42,6 +50,9 @@
|
||||||
|
|
||||||
#include "construct.hxx"
|
#include "construct.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
// do actual scan of directory and loading of files
|
// do actual scan of directory and loading of files
|
||||||
int actual_load_polys( const string& dir, FGConstruct& c, FGClipper& clipper ) {
|
int actual_load_polys( const string& dir, FGConstruct& c, FGClipper& clipper ) {
|
||||||
|
@ -236,13 +247,14 @@ static double distance2D( const Point3D p1, const Point3D p2 ) {
|
||||||
|
|
||||||
// fix the elevations of the geodetic nodes
|
// fix the elevations of the geodetic nodes
|
||||||
static void fix_point_heights( FGConstruct& c, const FGArray& array ) {
|
static void fix_point_heights( FGConstruct& c, const FGArray& array ) {
|
||||||
|
int i;
|
||||||
double z;
|
double z;
|
||||||
|
|
||||||
cout << "fixing node heights" << endl;
|
cout << "fixing node heights" << endl;
|
||||||
|
|
||||||
point_list raw_nodes = c.get_tri_nodes().get_node_list();
|
point_list raw_nodes = c.get_tri_nodes().get_node_list();
|
||||||
|
|
||||||
for ( int i = 0; i < (int)raw_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)raw_nodes.size(); ++i ) {
|
||||||
z = array.interpolate_altitude( raw_nodes[i].x() * 3600.0,
|
z = array.interpolate_altitude( raw_nodes[i].x() * 3600.0,
|
||||||
raw_nodes[i].y() * 3600.0 );
|
raw_nodes[i].y() * 3600.0 );
|
||||||
cout << " old z = " << raw_nodes[i].z() << " new z = " << z << endl;
|
cout << " old z = " << raw_nodes[i].z() << " new z = " << z << endl;
|
||||||
|
@ -261,7 +273,7 @@ static void fix_point_heights( FGConstruct& c, const FGArray& array ) {
|
||||||
int n1, n2, n3;
|
int n1, n2, n3;
|
||||||
|
|
||||||
for ( int count = 0; count < 3; ++count ) {
|
for ( int count = 0; count < 3; ++count ) {
|
||||||
for ( int i = 0; i < (int)tris.size(); ++i ) {
|
for ( i = 0; i < (int)tris.size(); ++i ) {
|
||||||
double e1, e2, e3, ave, min;
|
double e1, e2, e3, ave, min;
|
||||||
|
|
||||||
t = tris[i];
|
t = tris[i];
|
||||||
|
@ -314,7 +326,7 @@ static void fix_point_heights( FGConstruct& c, const FGArray& array ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( int i = 0; i < (int)tris.size(); ++i ) {
|
for ( i = 0; i < (int)tris.size(); ++i ) {
|
||||||
// set all ocean nodes to 0.0
|
// set all ocean nodes to 0.0
|
||||||
t = tris[i];
|
t = tris[i];
|
||||||
n1 = t.get_n1();
|
n1 = t.get_n1();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// array.cxx -- Array management class
|
// match.cxx -- Handle details of matching up tile edges
|
||||||
//
|
//
|
||||||
// Written by Curtis Olson, started March 1998.
|
// Written by Curtis Olson, started March 1998.
|
||||||
//
|
//
|
||||||
|
@ -29,8 +29,14 @@
|
||||||
#include <simgear/math/point3d.hxx>
|
#include <simgear/math/point3d.hxx>
|
||||||
#include <simgear/misc/fgstream.hxx>
|
#include <simgear/misc/fgstream.hxx>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <Win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "match.hxx"
|
#include "match.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
FGMatch::FGMatch( void ) {
|
FGMatch::FGMatch( void ) {
|
||||||
|
@ -254,6 +260,8 @@ void FGMatch::load_neighbor_shared( FGConstruct& c ) {
|
||||||
// load_neighbor_data() and will ignore any shared data from the
|
// load_neighbor_data() and will ignore any shared data from the
|
||||||
// current tile that already exists from a neighbor.
|
// current tile that already exists from a neighbor.
|
||||||
void FGMatch::split_tile( FGConstruct& c ) {
|
void FGMatch::split_tile( FGConstruct& c ) {
|
||||||
|
int i;
|
||||||
|
|
||||||
cout << "Spliting tile" << endl;
|
cout << "Spliting tile" << endl;
|
||||||
cout << " extracting (shared) edge nodes and normals" << endl;
|
cout << " extracting (shared) edge nodes and normals" << endl;
|
||||||
|
|
||||||
|
@ -272,7 +280,7 @@ void FGMatch::split_tile( FGConstruct& c ) {
|
||||||
point_list nodes = c.get_geod_nodes();
|
point_list nodes = c.get_geod_nodes();
|
||||||
point_list point_normals = c.get_point_normals();
|
point_list point_normals = c.get_point_normals();
|
||||||
|
|
||||||
for ( int i = 0; i < (int)nodes.size(); ++i ) {
|
for ( i = 0; i < (int)nodes.size(); ++i ) {
|
||||||
Point3D node = nodes[i];
|
Point3D node = nodes[i];
|
||||||
Point3D normal = point_normals[i];
|
Point3D normal = point_normals[i];
|
||||||
|
|
||||||
|
@ -369,30 +377,30 @@ void FGMatch::split_tile( FGConstruct& c ) {
|
||||||
if ( !nw_flag ) { cout << " nw corner = " << nw_node << endl; }
|
if ( !nw_flag ) { cout << " nw corner = " << nw_node << endl; }
|
||||||
if ( !north_flag ) {
|
if ( !north_flag ) {
|
||||||
cout << " north nodes = " << north_nodes.size() << endl;
|
cout << " north nodes = " << north_nodes.size() << endl;
|
||||||
for ( int i = 0; i < (int)north_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)north_nodes.size(); ++i ) {
|
||||||
cout << " " << north_nodes[i] << endl;
|
cout << " " << north_nodes[i] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( !south_flag ) {
|
if ( !south_flag ) {
|
||||||
cout << " south nodes = " << south_nodes.size() << endl;
|
cout << " south nodes = " << south_nodes.size() << endl;
|
||||||
for ( int i = 0; i < (int)south_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)south_nodes.size(); ++i ) {
|
||||||
cout << " " << south_nodes[i] << endl;
|
cout << " " << south_nodes[i] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( !east_flag ) {
|
if ( !east_flag ) {
|
||||||
cout << " east nodes = " << east_nodes.size() << endl;
|
cout << " east nodes = " << east_nodes.size() << endl;
|
||||||
for ( int i = 0; i < (int)east_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)east_nodes.size(); ++i ) {
|
||||||
cout << " " << east_nodes[i] << endl;
|
cout << " " << east_nodes[i] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( !west_flag ) {
|
if ( !west_flag ) {
|
||||||
cout << " west nodes = " << west_nodes.size() << endl;
|
cout << " west nodes = " << west_nodes.size() << endl;
|
||||||
for ( int i = 0; i < (int)west_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)west_nodes.size(); ++i ) {
|
||||||
cout << " " << west_nodes[i] << endl;
|
cout << " " << west_nodes[i] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cout << " body nodes = " << body_nodes.size() << endl;
|
cout << " body nodes = " << body_nodes.size() << endl;
|
||||||
for ( int i = 0; i < (int)body_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)body_nodes.size(); ++i ) {
|
||||||
cout << " " << body_nodes[i] << endl;
|
cout << " " << body_nodes[i] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -405,8 +413,14 @@ void FGMatch::write_shared( FGConstruct& c ) {
|
||||||
FGBucket b = c.get_bucket();
|
FGBucket b = c.get_bucket();
|
||||||
|
|
||||||
string dir = base + "/Shared/" + b.gen_base_path();
|
string dir = base + "/Shared/" + b.gen_base_path();
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( dir.c_str() );
|
||||||
|
#else
|
||||||
string command = "mkdir -p " + dir;
|
string command = "mkdir -p " + dir;
|
||||||
string file = dir + "/" + b.gen_index_str();
|
string file = dir + "/" + b.gen_index_str();
|
||||||
|
#endif
|
||||||
|
|
||||||
cout << "shared data will be written to " << file << endl;
|
cout << "shared data will be written to " << file << endl;
|
||||||
|
|
||||||
system(command.c_str());
|
system(command.c_str());
|
||||||
|
@ -589,6 +603,7 @@ static Point3D fake_normal( const Point3D& p ) {
|
||||||
// reassemble the tile pieces (combining the shared data and our own
|
// reassemble the tile pieces (combining the shared data and our own
|
||||||
// data)
|
// data)
|
||||||
void FGMatch::assemble_tile( FGConstruct& c ) {
|
void FGMatch::assemble_tile( FGConstruct& c ) {
|
||||||
|
int i;
|
||||||
FGTriNodes new_nodes;
|
FGTriNodes new_nodes;
|
||||||
new_nodes.clear();
|
new_nodes.clear();
|
||||||
|
|
||||||
|
@ -619,23 +634,23 @@ void FGMatch::assemble_tile( FGConstruct& c ) {
|
||||||
|
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
for ( int i = 0; i < (int)north_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)north_nodes.size(); ++i ) {
|
||||||
index = new_nodes.unique_add( north_nodes[i] );
|
index = new_nodes.unique_add( north_nodes[i] );
|
||||||
insert_normal( new_normals, north_normals[i], index );
|
insert_normal( new_normals, north_normals[i], index );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( int i = 0; i < (int)south_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)south_nodes.size(); ++i ) {
|
||||||
index = new_nodes.unique_add( south_nodes[i] );
|
index = new_nodes.unique_add( south_nodes[i] );
|
||||||
insert_normal( new_normals, south_normals[i], index );
|
insert_normal( new_normals, south_normals[i], index );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( int i = 0; i < (int)east_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)east_nodes.size(); ++i ) {
|
||||||
index = new_nodes.unique_add( east_nodes[i] );
|
index = new_nodes.unique_add( east_nodes[i] );
|
||||||
insert_normal( new_normals, east_normals[i], index );
|
insert_normal( new_normals, east_normals[i], index );
|
||||||
}
|
}
|
||||||
|
|
||||||
// cout << "Total west nodes = " << west_nodes.size() << endl;
|
// cout << "Total west nodes = " << west_nodes.size() << endl;
|
||||||
for ( int i = 0; i < (int)west_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)west_nodes.size(); ++i ) {
|
||||||
// cout << "adding west node " << west_nodes[i] << endl;
|
// cout << "adding west node " << west_nodes[i] << endl;
|
||||||
index = new_nodes.unique_add( west_nodes[i] );
|
index = new_nodes.unique_add( west_nodes[i] );
|
||||||
insert_normal( new_normals, west_normals[i], index );
|
insert_normal( new_normals, west_normals[i], index );
|
||||||
|
@ -646,7 +661,7 @@ void FGMatch::assemble_tile( FGConstruct& c ) {
|
||||||
cout << " new normals = " << new_normals.size() << endl;
|
cout << " new normals = " << new_normals.size() << endl;
|
||||||
|
|
||||||
// add the body points
|
// add the body points
|
||||||
for ( int i = 0; i < (int)body_nodes.size(); ++i ) {
|
for ( i = 0; i < (int)body_nodes.size(); ++i ) {
|
||||||
index = new_nodes.unique_add( body_nodes[i] );
|
index = new_nodes.unique_add( body_nodes[i] );
|
||||||
insert_normal( new_normals, body_normals[i], index );
|
insert_normal( new_normals, body_normals[i], index );
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,9 @@
|
||||||
|
|
||||||
#include "triangle.hxx"
|
#include "triangle.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
FGTriangle::FGTriangle( void ) {
|
FGTriangle::FGTriangle( void ) {
|
||||||
|
@ -46,6 +49,7 @@ FGTriangle::build( const point_list& corner_list,
|
||||||
{
|
{
|
||||||
int debug_counter = 0;
|
int debug_counter = 0;
|
||||||
int index;
|
int index;
|
||||||
|
int i;
|
||||||
|
|
||||||
in_nodes.clear();
|
in_nodes.clear();
|
||||||
in_segs.clear();
|
in_segs.clear();
|
||||||
|
@ -75,7 +79,7 @@ FGTriangle::build( const point_list& corner_list,
|
||||||
// process polygons in priority order
|
// process polygons in priority order
|
||||||
cout << "prepairing node list and polygons" << endl;
|
cout << "prepairing node list and polygons" << endl;
|
||||||
|
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
polylist[i].clear();
|
polylist[i].clear();
|
||||||
|
|
||||||
cout << "area type = " << i << endl;
|
cout << "area type = " << i << endl;
|
||||||
|
@ -163,7 +167,7 @@ FGTriangle::build( const point_list& corner_list,
|
||||||
index = in_nodes.course_add( *f_current );
|
index = in_nodes.course_add( *f_current );
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
if ( polylist[i].size() ) {
|
if ( polylist[i].size() ) {
|
||||||
cout << get_area_name((AreaType)i) << " = "
|
cout << get_area_name((AreaType)i) << " = "
|
||||||
<< polylist[i].size() << endl;
|
<< polylist[i].size() << endl;
|
||||||
|
@ -179,7 +183,7 @@ FGTriangle::build( const point_list& corner_list,
|
||||||
point_list node_list = in_nodes.get_node_list();
|
point_list node_list = in_nodes.get_node_list();
|
||||||
FGPolygon poly;
|
FGPolygon poly;
|
||||||
|
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
cout << "area type = " << i << endl;
|
cout << "area type = " << i << endl;
|
||||||
poly_list_iterator tp_current, tp_last;
|
poly_list_iterator tp_current, tp_last;
|
||||||
tp_current = polylist[i].begin();
|
tp_current = polylist[i].begin();
|
||||||
|
@ -243,10 +247,12 @@ int FGTriangle::rebuild( FGConstruct& c ) {
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
static void write_out_data(struct triangulateio *out) {
|
static void write_out_data(struct triangulateio *out) {
|
||||||
|
int i, j;
|
||||||
|
|
||||||
FILE *node = fopen("tile.node", "w");
|
FILE *node = fopen("tile.node", "w");
|
||||||
fprintf(node, "%d 2 %d 0\n",
|
fprintf(node, "%d 2 %d 0\n",
|
||||||
out->numberofpoints, out->numberofpointattributes);
|
out->numberofpoints, out->numberofpointattributes);
|
||||||
for (int i = 0; i < out->numberofpoints; ++i) {
|
for ( i = 0; i < out->numberofpoints; ++i) {
|
||||||
fprintf(node, "%d %.6f %.6f %.2f\n",
|
fprintf(node, "%d %.6f %.6f %.2f\n",
|
||||||
i, out->pointlist[2*i], out->pointlist[2*i + 1], 0.0);
|
i, out->pointlist[2*i], out->pointlist[2*i + 1], 0.0);
|
||||||
}
|
}
|
||||||
|
@ -254,12 +260,12 @@ static void write_out_data(struct triangulateio *out) {
|
||||||
|
|
||||||
FILE *ele = fopen("tile.ele", "w");
|
FILE *ele = fopen("tile.ele", "w");
|
||||||
fprintf(ele, "%d 3 0\n", out->numberoftriangles);
|
fprintf(ele, "%d 3 0\n", out->numberoftriangles);
|
||||||
for (int i = 0; i < out->numberoftriangles; ++i) {
|
for ( i = 0; i < out->numberoftriangles; ++i) {
|
||||||
fprintf(ele, "%d ", i);
|
fprintf(ele, "%d ", i);
|
||||||
for (int j = 0; j < out->numberofcorners; ++j) {
|
for ( j = 0; j < out->numberofcorners; ++j) {
|
||||||
fprintf(ele, "%d ", out->trianglelist[i * out->numberofcorners + j]);
|
fprintf(ele, "%d ", out->trianglelist[i * out->numberofcorners + j]);
|
||||||
}
|
}
|
||||||
for (int j = 0; j < out->numberoftriangleattributes; ++j) {
|
for ( j = 0; j < out->numberoftriangleattributes; ++j) {
|
||||||
fprintf(ele, "%.6f ",
|
fprintf(ele, "%.6f ",
|
||||||
out->triangleattributelist[i
|
out->triangleattributelist[i
|
||||||
* out->numberoftriangleattributes
|
* out->numberoftriangleattributes
|
||||||
|
@ -273,18 +279,18 @@ static void write_out_data(struct triangulateio *out) {
|
||||||
FILE *fp = fopen("tile.poly", "w");
|
FILE *fp = fopen("tile.poly", "w");
|
||||||
fprintf(fp, "0 2 1 0\n");
|
fprintf(fp, "0 2 1 0\n");
|
||||||
fprintf(fp, "%d 1\n", out->numberofsegments);
|
fprintf(fp, "%d 1\n", out->numberofsegments);
|
||||||
for (int i = 0; i < out->numberofsegments; ++i) {
|
for ( i = 0; i < out->numberofsegments; ++i) {
|
||||||
fprintf(fp, "%d %d %d %d\n",
|
fprintf(fp, "%d %d %d %d\n",
|
||||||
i, out->segmentlist[2*i], out->segmentlist[2*i + 1],
|
i, out->segmentlist[2*i], out->segmentlist[2*i + 1],
|
||||||
out->segmentmarkerlist[i] );
|
out->segmentmarkerlist[i] );
|
||||||
}
|
}
|
||||||
fprintf(fp, "%d\n", out->numberofholes);
|
fprintf(fp, "%d\n", out->numberofholes);
|
||||||
for (int i = 0; i < out->numberofholes; ++i) {
|
for ( i = 0; i < out->numberofholes; ++i) {
|
||||||
fprintf(fp, "%d %.6f %.6f\n",
|
fprintf(fp, "%d %.6f %.6f\n",
|
||||||
i, out->holelist[2*i], out->holelist[2*i + 1]);
|
i, out->holelist[2*i], out->holelist[2*i + 1]);
|
||||||
}
|
}
|
||||||
fprintf(fp, "%d\n", out->numberofregions);
|
fprintf(fp, "%d\n", out->numberofregions);
|
||||||
for (int i = 0; i < out->numberofregions; ++i) {
|
for ( i = 0; i < out->numberofregions; ++i) {
|
||||||
fprintf(fp, "%d %.6f %.6f %.6f\n",
|
fprintf(fp, "%d %.6f %.6f %.6f\n",
|
||||||
i, out->regionlist[4*i], out->regionlist[4*i + 1],
|
i, out->regionlist[4*i], out->regionlist[4*i + 1],
|
||||||
out->regionlist[4*i + 2]);
|
out->regionlist[4*i + 2]);
|
||||||
|
@ -306,13 +312,14 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
Point3D p;
|
Point3D p;
|
||||||
struct triangulateio in, out, vorout;
|
struct triangulateio in, out, vorout;
|
||||||
int counter;
|
int counter;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
// point list
|
// point list
|
||||||
point_list node_list = in_nodes.get_node_list();
|
point_list node_list = in_nodes.get_node_list();
|
||||||
in.numberofpoints = node_list.size();
|
in.numberofpoints = node_list.size();
|
||||||
in.pointlist = (REAL *) malloc(in.numberofpoints * 2 * sizeof(REAL));
|
in.pointlist = (REAL *) malloc(in.numberofpoints * 2 * sizeof(REAL));
|
||||||
|
|
||||||
for ( int i = 0; i < in.numberofpoints; ++i ) {
|
for ( i = 0; i < in.numberofpoints; ++i ) {
|
||||||
in.pointlist[2*i] = node_list[i].x();
|
in.pointlist[2*i] = node_list[i].x();
|
||||||
in.pointlist[2*i + 1] = node_list[i].y();
|
in.pointlist[2*i + 1] = node_list[i].y();
|
||||||
}
|
}
|
||||||
|
@ -321,12 +328,12 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
in.pointattributelist = (REAL *) malloc(in.numberofpoints *
|
in.pointattributelist = (REAL *) malloc(in.numberofpoints *
|
||||||
in.numberofpointattributes *
|
in.numberofpointattributes *
|
||||||
sizeof(REAL));
|
sizeof(REAL));
|
||||||
for ( int i = 0; i < in.numberofpoints * in.numberofpointattributes; ++i) {
|
for ( i = 0; i < in.numberofpoints * in.numberofpointattributes; ++i) {
|
||||||
in.pointattributelist[i] = node_list[i].z();
|
in.pointattributelist[i] = node_list[i].z();
|
||||||
}
|
}
|
||||||
|
|
||||||
in.pointmarkerlist = (int *) malloc(in.numberofpoints * sizeof(int));
|
in.pointmarkerlist = (int *) malloc(in.numberofpoints * sizeof(int));
|
||||||
for ( int i = 0; i < in.numberofpoints; ++i) {
|
for ( i = 0; i < in.numberofpoints; ++i) {
|
||||||
in.pointmarkerlist[i] = 0;
|
in.pointmarkerlist[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,7 +371,7 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
counter = 0;
|
counter = 0;
|
||||||
for ( ; h_current != h_last; ++h_current ) {
|
for ( ; h_current != h_last; ++h_current ) {
|
||||||
poly = *h_current;
|
poly = *h_current;
|
||||||
for ( int j = 0; j < poly.contours(); ++j ) {
|
for ( j = 0; j < poly.contours(); ++j ) {
|
||||||
p = poly.get_point_inside( j );
|
p = poly.get_point_inside( j );
|
||||||
in.holelist[counter++] = p.x();
|
in.holelist[counter++] = p.x();
|
||||||
in.holelist[counter++] = p.y();
|
in.holelist[counter++] = p.y();
|
||||||
|
@ -373,13 +380,13 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
|
|
||||||
// region list
|
// region list
|
||||||
in.numberofregions = 0;
|
in.numberofregions = 0;
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
poly_list_iterator h_current, h_last;
|
poly_list_iterator h_current, h_last;
|
||||||
h_current = polylist[i].begin();
|
h_current = polylist[i].begin();
|
||||||
h_last = polylist[i].end();
|
h_last = polylist[i].end();
|
||||||
for ( ; h_current != h_last; ++h_current ) {
|
for ( ; h_current != h_last; ++h_current ) {
|
||||||
poly = *h_current;
|
poly = *h_current;
|
||||||
for ( int j = 0; j < poly.contours(); ++j ) {
|
for ( j = 0; j < poly.contours(); ++j ) {
|
||||||
if ( ! poly.get_hole_flag( j ) ) {
|
if ( ! poly.get_hole_flag( j ) ) {
|
||||||
++in.numberofregions;
|
++in.numberofregions;
|
||||||
}
|
}
|
||||||
|
@ -389,13 +396,13 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
|
|
||||||
in.regionlist = (REAL *) malloc(in.numberofregions * 4 * sizeof(REAL));
|
in.regionlist = (REAL *) malloc(in.numberofregions * 4 * sizeof(REAL));
|
||||||
counter = 0;
|
counter = 0;
|
||||||
for ( int i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
for ( i = 0; i < FG_MAX_AREA_TYPES; ++i ) {
|
||||||
poly_list_iterator h_current, h_last;
|
poly_list_iterator h_current, h_last;
|
||||||
h_current = polylist[(int)i].begin();
|
h_current = polylist[(int)i].begin();
|
||||||
h_last = polylist[(int)i].end();
|
h_last = polylist[(int)i].end();
|
||||||
for ( ; h_current != h_last; ++h_current ) {
|
for ( ; h_current != h_last; ++h_current ) {
|
||||||
poly = *h_current;
|
poly = *h_current;
|
||||||
for ( int j = 0; j < poly.contours(); ++j ) {
|
for ( j = 0; j < poly.contours(); ++j ) {
|
||||||
if ( ! poly.get_hole_flag( j ) ) {
|
if ( ! poly.get_hole_flag( j ) ) {
|
||||||
p = poly.get_point_inside( j );
|
p = poly.get_point_inside( j );
|
||||||
cout << "Region point = " << p << endl;
|
cout << "Region point = " << p << endl;
|
||||||
|
@ -472,7 +479,7 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
|
|
||||||
// nodes
|
// nodes
|
||||||
out_nodes.clear();
|
out_nodes.clear();
|
||||||
for ( int i = 0; i < out.numberofpoints; ++i ) {
|
for ( i = 0; i < out.numberofpoints; ++i ) {
|
||||||
Point3D p( out.pointlist[2*i], out.pointlist[2*i + 1],
|
Point3D p( out.pointlist[2*i], out.pointlist[2*i + 1],
|
||||||
out.pointattributelist[i] );
|
out.pointattributelist[i] );
|
||||||
// cout << "point = " << p << endl;
|
// cout << "point = " << p << endl;
|
||||||
|
@ -481,7 +488,7 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
|
|
||||||
// segments
|
// segments
|
||||||
out_segs.clear();
|
out_segs.clear();
|
||||||
for ( int i = 0; i < out.numberofsegments; ++i ) {
|
for ( i = 0; i < out.numberofsegments; ++i ) {
|
||||||
out_segs.unique_add( FGTriSeg( out.segmentlist[2*i],
|
out_segs.unique_add( FGTriSeg( out.segmentlist[2*i],
|
||||||
out.segmentlist[2*i+1],
|
out.segmentlist[2*i+1],
|
||||||
out.segmentmarkerlist[i] ) );
|
out.segmentmarkerlist[i] ) );
|
||||||
|
@ -491,7 +498,7 @@ int FGTriangle::run_triangulate( const string& angle, const int pass ) {
|
||||||
elelist.clear();
|
elelist.clear();
|
||||||
int n1, n2, n3;
|
int n1, n2, n3;
|
||||||
double attribute;
|
double attribute;
|
||||||
for ( int i = 0; i < out.numberoftriangles; ++i ) {
|
for ( i = 0; i < out.numberoftriangles; ++i ) {
|
||||||
n1 = out.trianglelist[i * 3];
|
n1 = out.trianglelist[i * 3];
|
||||||
n2 = out.trianglelist[i * 3 + 1];
|
n2 = out.trianglelist[i * 3 + 1];
|
||||||
n3 = out.trianglelist[i * 3 + 2];
|
n3 = out.trianglelist[i * 3 + 2];
|
||||||
|
|
|
@ -51,9 +51,15 @@
|
||||||
#include <simgear/misc/strutils.hxx>
|
#include <simgear/misc/strutils.hxx>
|
||||||
#include <simgear/math/leastsqs.hxx>
|
#include <simgear/math/leastsqs.hxx>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "array.hxx"
|
#include "array.hxx"
|
||||||
|
|
||||||
FG_USING_STD(string);
|
FG_USING_STD(string);
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
FGArray::FGArray( void ) {
|
FGArray::FGArray( void ) {
|
||||||
|
@ -492,8 +498,12 @@ void FGArray::outputmesh_output_nodes( const string& fg_root, FGBucket& p )
|
||||||
if ( result != 0 && errno == ENOENT ) {
|
if ( result != 0 && errno == ENOENT ) {
|
||||||
cout << " Creating directory\n";
|
cout << " Creating directory\n";
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( dir.cstr() );
|
||||||
|
#else
|
||||||
command = "mkdir -p " + dir + "\n";
|
command = "mkdir -p " + dir + "\n";
|
||||||
system( command.c_str() );
|
system( command.c_str() );
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
// assume directory exists
|
// assume directory exists
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,8 +51,15 @@
|
||||||
#include <simgear/misc/fgstream.hxx>
|
#include <simgear/misc/fgstream.hxx>
|
||||||
#include <simgear/misc/strutils.hxx>
|
#include <simgear/misc/strutils.hxx>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "dem.hxx"
|
#include "dem.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
#define MAX_EX_NODES 10000
|
#define MAX_EX_NODES 10000
|
||||||
|
|
||||||
|
@ -415,8 +422,12 @@ FGDem::write_area( const string& root, FGBucket& b, bool compress ) {
|
||||||
// generate output file name
|
// generate output file name
|
||||||
string base = b.gen_base_path();
|
string base = b.gen_base_path();
|
||||||
string path = root + "/" + base;
|
string path = root + "/" + base;
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( path.c_str() );
|
||||||
|
#else
|
||||||
string command = "mkdir -p " + path;
|
string command = "mkdir -p " + path;
|
||||||
system( command.c_str() );
|
system( command.c_str() );
|
||||||
|
#endif
|
||||||
|
|
||||||
string demfile = path + "/" + b.gen_index_str() + ".dem";
|
string demfile = path + "/" + b.gen_index_str() + ".dem";
|
||||||
cout << "demfile = " << demfile << endl;
|
cout << "demfile = " << demfile << endl;
|
||||||
|
@ -764,27 +775,12 @@ void FGDem::outputmesh_output_nodes( const string& fg_root, FGBucket& p )
|
||||||
if ( result != 0 && errno == ENOENT ) {
|
if ( result != 0 && errno == ENOENT ) {
|
||||||
cout << "Creating directory\n";
|
cout << "Creating directory\n";
|
||||||
|
|
||||||
// #ifndef WIN32
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( dir.c_str() );
|
||||||
|
#else
|
||||||
command = "mkdir -p " + dir + "\n";
|
command = "mkdir -p " + dir + "\n";
|
||||||
system( command.c_str() );
|
system( command.c_str() );
|
||||||
|
#endif
|
||||||
#if 0
|
|
||||||
// #else // WIN32
|
|
||||||
|
|
||||||
// Cygwin crashes when trying to output to node file
|
|
||||||
// explicitly making directory structure seems OK on Win95
|
|
||||||
|
|
||||||
extract_path (base_path, tmp_path);
|
|
||||||
|
|
||||||
dir = fg_root + "/" + tmp_path;
|
|
||||||
if (my_mkdir ( dir.c_str() )) { exit (-1); }
|
|
||||||
|
|
||||||
dir = fg_root + "/" + base_path;
|
|
||||||
if (my_mkdir ( dir.c_str() )) { exit (-1); }
|
|
||||||
|
|
||||||
// #endif // WIN32
|
|
||||||
#endif //0
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// assume directory exists
|
// assume directory exists
|
||||||
|
|
|
@ -504,7 +504,7 @@ static triele_list contour_tesselate( const point_list contour ) {
|
||||||
vorout.normlist = (REAL *) NULL; // Needed only if -v switch used.
|
vorout.normlist = (REAL *) NULL; // Needed only if -v switch used.
|
||||||
|
|
||||||
// TEMPORARY
|
// TEMPORARY
|
||||||
write_tri_data(&in);
|
// write_tri_data(&in);
|
||||||
|
|
||||||
// Triangulate the points. Switches are chosen to read and write
|
// Triangulate the points. Switches are chosen to read and write
|
||||||
// a PSLG (p), number everything from zero (z), and produce an
|
// a PSLG (p), number everything from zero (z), and produce an
|
||||||
|
@ -513,14 +513,13 @@ static triele_list contour_tesselate( const point_list contour ) {
|
||||||
// splitting (YY), no quality refinement (q)
|
// splitting (YY), no quality refinement (q)
|
||||||
|
|
||||||
string tri_options;
|
string tri_options;
|
||||||
// tri_options = "pzYYen";
|
tri_options = "pzYYen";
|
||||||
tri_options = "zYYen";
|
|
||||||
cout << "Triangulation with options = " << tri_options << endl;
|
cout << "Triangulation with options = " << tri_options << endl;
|
||||||
|
|
||||||
triangulate( (char *)tri_options.c_str(), &in, &out, &vorout );
|
triangulate( (char *)tri_options.c_str(), &in, &out, &vorout );
|
||||||
|
|
||||||
// TEMPORARY
|
// TEMPORARY
|
||||||
// write_out_data(&out);
|
write_tri_data(&out);
|
||||||
|
|
||||||
// now copy the results back into the corresponding FGTriangle
|
// now copy the results back into the corresponding FGTriangle
|
||||||
// structures
|
// structures
|
||||||
|
@ -647,6 +646,8 @@ void calc_points_inside( FGPolygon& p ) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
|
||||||
// next calculate an inside point for all non-hole contours taking
|
// next calculate an inside point for all non-hole contours taking
|
||||||
// into consideration the holes
|
// into consideration the holes
|
||||||
for ( int i = 0; i < p.contours(); ++i ) {
|
for ( int i = 0; i < p.contours(); ++i ) {
|
||||||
|
|
|
@ -48,7 +48,7 @@ private:
|
||||||
|
|
||||||
// return true of the two points are "close enough" as defined by
|
// return true of the two points are "close enough" as defined by
|
||||||
// FG_PROXIMITY_EPSILON
|
// FG_PROXIMITY_EPSILON
|
||||||
bool close_enough( const Point3D& p, const Point3D& p ) const;
|
bool close_enough( const Point3D& p1, const Point3D& p2 ) const;
|
||||||
|
|
||||||
// return true of the two points are "close enough" as defined by
|
// return true of the two points are "close enough" as defined by
|
||||||
// FG_COURSE_EPSILON
|
// FG_COURSE_EPSILON
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
|
|
||||||
#include "trisegs.hxx"
|
#include "trisegs.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
FGTriSegments::FGTriSegments( void ) {
|
FGTriSegments::FGTriSegments( void ) {
|
||||||
|
|
|
@ -22,12 +22,16 @@
|
||||||
|
|
||||||
#include <simgear/compiler.h>
|
#include <simgear/compiler.h>
|
||||||
|
|
||||||
|
#include STL_IOSTREAM
|
||||||
#include STL_STRING
|
#include STL_STRING
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "index.hxx"
|
#include "index.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
static long int poly_index;
|
static long int poly_index;
|
||||||
static string poly_path;
|
static string poly_path;
|
||||||
|
@ -48,6 +52,8 @@ bool poly_index_init( string path ) {
|
||||||
fscanf( fp, "%ld", &poly_index );
|
fscanf( fp, "%ld", &poly_index );
|
||||||
|
|
||||||
fclose( fp );
|
fclose( fp );
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#include STL_STRING
|
#include STL_STRING
|
||||||
|
|
||||||
|
FG_USING_STD(string);
|
||||||
|
|
||||||
|
|
||||||
// initialize the unique polygon index counter stored in path
|
// initialize the unique polygon index counter stored in path
|
||||||
bool poly_index_init( string path );
|
bool poly_index_init( string path );
|
||||||
|
|
|
@ -22,10 +22,14 @@
|
||||||
|
|
||||||
#include <simgear/compiler.h>
|
#include <simgear/compiler.h>
|
||||||
|
|
||||||
|
#include STL_IOSTREAM
|
||||||
#include STL_STRING
|
#include STL_STRING
|
||||||
|
|
||||||
#include "names.hxx"
|
#include "names.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
// return area type from text name
|
// return area type from text name
|
||||||
AreaType get_area_type( string area ) {
|
AreaType get_area_type( string area ) {
|
||||||
|
|
|
@ -36,6 +36,9 @@ extern "C" {
|
||||||
|
|
||||||
#include "polygon.hxx"
|
#include "polygon.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
FGPolygon::FGPolygon( void ) {
|
FGPolygon::FGPolygon( void ) {
|
||||||
|
@ -367,6 +370,7 @@ FGPolygon polygon_canonify( const FGPolygon& in_poly ) {
|
||||||
#define FG_MAX_TRIANGLES 100000
|
#define FG_MAX_TRIANGLES 100000
|
||||||
|
|
||||||
FGPolygon polygon_to_tristrip( const FGPolygon& in_poly ) {
|
FGPolygon polygon_to_tristrip( const FGPolygon& in_poly ) {
|
||||||
|
int i, j;
|
||||||
|
|
||||||
// canonify the polygon winding, outer contour must be
|
// canonify the polygon winding, outer contour must be
|
||||||
// anti-clockwise, all inner contours must be clockwise.
|
// anti-clockwise, all inner contours must be clockwise.
|
||||||
|
@ -376,15 +380,15 @@ FGPolygon polygon_to_tristrip( const FGPolygon& in_poly ) {
|
||||||
int ncontours = canon_poly.contours();
|
int ncontours = canon_poly.contours();
|
||||||
int cntr[ncontours];
|
int cntr[ncontours];
|
||||||
int vsize = 1;
|
int vsize = 1;
|
||||||
for ( int i = 0; i < canon_poly.contours(); ++i ) {
|
for ( i = 0; i < canon_poly.contours(); ++i ) {
|
||||||
cntr[i] = canon_poly.contour_size( i );
|
cntr[i] = canon_poly.contour_size( i );
|
||||||
vsize += cntr[i];
|
vsize += cntr[i];
|
||||||
}
|
}
|
||||||
double vertices[vsize][2];
|
double vertices[vsize][2];
|
||||||
int counter = 1;
|
int counter = 1;
|
||||||
Point3D p;
|
Point3D p;
|
||||||
for ( int i = 0; i < canon_poly.contours(); ++i ) {
|
for ( i = 0; i < canon_poly.contours(); ++i ) {
|
||||||
for ( int j = 0; j < canon_poly.contour_size( i ); ++j ) {
|
for ( j = 0; j < canon_poly.contour_size( i ); ++j ) {
|
||||||
p = canon_poly.get_pt( i, j );
|
p = canon_poly.get_pt( i, j );
|
||||||
vertices[counter][0] = p.x();
|
vertices[counter][0] = p.x();
|
||||||
vertices[counter][1] = p.y();
|
vertices[counter][1] = p.y();
|
||||||
|
|
|
@ -28,10 +28,16 @@
|
||||||
#include <simgear/bucket/newbucket.hxx>
|
#include <simgear/bucket/newbucket.hxx>
|
||||||
#include <simgear/debug/logstream.hxx>
|
#include <simgear/debug/logstream.hxx>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "index.hxx"
|
#include "index.hxx"
|
||||||
#include "names.hxx"
|
#include "names.hxx"
|
||||||
#include "split.hxx"
|
#include "split.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
|
||||||
|
|
||||||
static void clip_and_write_poly( string root, long int p_index, AreaType area,
|
static void clip_and_write_poly( string root, long int p_index, AreaType area,
|
||||||
FGBucket b, const FGPolygon& shape ) {
|
FGBucket b, const FGPolygon& shape ) {
|
||||||
|
@ -83,8 +89,13 @@ static void clip_and_write_poly( string root, long int p_index, AreaType area,
|
||||||
if ( result.contours() > 0 ) {
|
if ( result.contours() > 0 ) {
|
||||||
long int t_index = b.gen_index();
|
long int t_index = b.gen_index();
|
||||||
string path = root + "/" + b.gen_base_path();
|
string path = root + "/" + b.gen_base_path();
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( path.c_str() );
|
||||||
|
#else
|
||||||
string command = "mkdir -p " + path;
|
string command = "mkdir -p " + path;
|
||||||
system( command.c_str() );
|
system( command.c_str() );
|
||||||
|
#endif
|
||||||
|
|
||||||
sprintf( tile_name, "%ld", t_index );
|
sprintf( tile_name, "%ld", t_index );
|
||||||
string polyfile = path + "/" + tile_name;
|
string polyfile = path + "/" + tile_name;
|
||||||
|
|
|
@ -31,8 +31,13 @@
|
||||||
|
|
||||||
#include <DEM/dem.hxx>
|
#include <DEM/dem.hxx>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <Win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "point2d.hxx"
|
#include "point2d.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
FG_USING_STD(string);
|
FG_USING_STD(string);
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,8 +61,13 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
string dem_name = argv[1];
|
string dem_name = argv[1];
|
||||||
string work_dir = argv[2];
|
string work_dir = argv[2];
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( work_dir.c_str() );
|
||||||
|
#else
|
||||||
string command = "mkdir -p " + work_dir;
|
string command = "mkdir -p " + work_dir;
|
||||||
system( command.c_str() );
|
system( command.c_str() );
|
||||||
|
#endif
|
||||||
|
|
||||||
FGDem dem(dem_name);
|
FGDem dem(dem_name);
|
||||||
dem.parse();
|
dem.parse();
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
#include <DEM/dem.hxx>
|
#include <DEM/dem.hxx>
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
|
||||||
|
|
||||||
// static float dem_data[DEM_SIZE_1][DEM_SIZE_1];
|
// static float dem_data[DEM_SIZE_1][DEM_SIZE_1];
|
||||||
// static float output_data[DEM_SIZE_1][DEM_SIZE_1];
|
// static float output_data[DEM_SIZE_1][DEM_SIZE_1];
|
||||||
|
@ -38,8 +40,6 @@ int main(int argc, char **argv) {
|
||||||
// DEM data
|
// DEM data
|
||||||
FGDem dem;
|
FGDem dem;
|
||||||
string filename;
|
string filename;
|
||||||
double error;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
if ( argc != 2 ) {
|
if ( argc != 2 ) {
|
||||||
printf("Usage: %s <file.dem>\n", argv[0]);
|
printf("Usage: %s <file.dem>\n", argv[0]);
|
||||||
|
|
|
@ -22,10 +22,19 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
# include <unistd.h> /* tmp for read() */
|
# include <unistd.h> /* tmp for read() */
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_STDLIB_H
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "rawdem.h"
|
#include "rawdem.h"
|
||||||
|
|
||||||
|
|
|
@ -34,11 +34,31 @@
|
||||||
#include <sys/types.h> /* open() */
|
#include <sys/types.h> /* open() */
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <io.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
# include <unistd.h> /* close() */
|
# include <unistd.h> /* close() */
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "rawdem.h"
|
#include "rawdem.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if defined( HAVE_UNISTD_H ) && !defined( HAVE_RINT )
|
||||||
|
double round( double a ) {
|
||||||
|
long i;
|
||||||
|
|
||||||
|
if ( a > 0.0 ) {
|
||||||
|
i = (long)( a + 0.5 );
|
||||||
|
} else {
|
||||||
|
i = (long)( a - 0.5 );
|
||||||
|
}
|
||||||
|
|
||||||
|
return (double)i;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Read the DEM header to determine various key parameters for this
|
/* Read the DEM header to determine various key parameters for this
|
||||||
* DEM file */
|
* DEM file */
|
||||||
void rawReadDemHdr( fgRAWDEM *raw, char *hdr_file ) {
|
void rawReadDemHdr( fgRAWDEM *raw, char *hdr_file ) {
|
||||||
|
@ -88,28 +108,28 @@ void rawReadDemHdr( fgRAWDEM *raw, char *hdr_file ) {
|
||||||
#ifdef HAVE_RINT
|
#ifdef HAVE_RINT
|
||||||
raw->ulxmap = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
raw->ulxmap = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
||||||
#else
|
#else
|
||||||
# error Port me rint()
|
raw->ulxmap = (int)round(tmp * 3600.0); /* convert to arcsec */
|
||||||
#endif
|
#endif
|
||||||
} else if ( strcmp(key, "ULYMAP") == 0 ) {
|
} else if ( strcmp(key, "ULYMAP") == 0 ) {
|
||||||
tmp = atof(value);
|
tmp = atof(value);
|
||||||
#ifdef HAVE_RINT
|
#ifdef HAVE_RINT
|
||||||
raw->ulymap = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
raw->ulymap = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
||||||
#else
|
#else
|
||||||
# error Port me rint()
|
raw->ulymap = (int)round(tmp * 3600.0); /* convert to arcsec */
|
||||||
#endif
|
#endif
|
||||||
} else if ( strcmp(key, "XDIM") == 0 ) {
|
} else if ( strcmp(key, "XDIM") == 0 ) {
|
||||||
tmp = atof(value);
|
tmp = atof(value);
|
||||||
#ifdef HAVE_RINT
|
#ifdef HAVE_RINT
|
||||||
raw->xdim = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
raw->xdim = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
||||||
#else
|
#else
|
||||||
# error Port me rint()
|
raw->xdim = (int)round(tmp * 3600.0); /* convert to arcsec */
|
||||||
#endif
|
#endif
|
||||||
} else if ( strcmp(key, "YDIM") == 0 ) {
|
} else if ( strcmp(key, "YDIM") == 0 ) {
|
||||||
tmp = atof(value);
|
tmp = atof(value);
|
||||||
#ifdef HAVE_RINT
|
#ifdef HAVE_RINT
|
||||||
raw->ydim = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
raw->ydim = (int)rint(tmp * 3600.0); /* convert to arcsec */
|
||||||
#else
|
#else
|
||||||
# error Port me rint()
|
raw->ydim = (int)round(tmp * 3600.0); /* convert to arcsec */
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
/* ignore for now */
|
/* ignore for now */
|
||||||
|
@ -475,5 +495,3 @@ void rawProcessStrip( fgRAWDEM *raw, int lat_degrees, char *path ) {
|
||||||
rawDumpAsciiDEM(raw, path, (raw->rootx / 3600) + i, lat_degrees - 1);
|
rawDumpAsciiDEM(raw, path, (raw->rootx / 3600) + i, lat_degrees - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,9 @@
|
||||||
#include "gshhs_split.hxx"
|
#include "gshhs_split.hxx"
|
||||||
#include "simple_clip.hxx"
|
#include "simple_clip.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(string);
|
||||||
|
|
||||||
|
|
||||||
// process shape front end ... split shape into lon = -180 ... 180,
|
// process shape front end ... split shape into lon = -180 ... 180,
|
||||||
// -360 ... -180, and 180 ... 360 ... shift the offset sections and
|
// -360 ... -180, and 180 ... 360 ... shift the offset sections and
|
||||||
|
|
|
@ -35,6 +35,10 @@
|
||||||
#include <Polygon/polygon.hxx>
|
#include <Polygon/polygon.hxx>
|
||||||
#include <Polygon/split.hxx>
|
#include <Polygon/split.hxx>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <Win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "gshhs.h"
|
#include "gshhs.h"
|
||||||
#include "gshhs_split.hxx"
|
#include "gshhs_split.hxx"
|
||||||
|
|
||||||
|
@ -63,8 +67,13 @@ int main( int argc, char **argv ) {
|
||||||
|
|
||||||
// make work directory
|
// make work directory
|
||||||
string work_dir = argv[2];
|
string work_dir = argv[2];
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( work_dir.c_str() );
|
||||||
|
#else
|
||||||
string command = "mkdir -p " + work_dir;
|
string command = "mkdir -p " + work_dir;
|
||||||
system( command.c_str() );
|
system( command.c_str() );
|
||||||
|
#endif
|
||||||
|
|
||||||
// get the specified data level
|
// get the specified data level
|
||||||
int target_level = atoi(argv[3]);
|
int target_level = atoi(argv[3]);
|
||||||
|
|
|
@ -28,8 +28,12 @@
|
||||||
|
|
||||||
#include "simple_clip.hxx"
|
#include "simple_clip.hxx"
|
||||||
|
|
||||||
|
FG_USING_STD(cout);
|
||||||
|
FG_USING_STD(endl);
|
||||||
|
|
||||||
#define CLIP_EPSILON 0.000000000001
|
#define CLIP_EPSILON 0.000000000001
|
||||||
|
|
||||||
|
|
||||||
// Given a line segment specified by two endpoints p1 and p2, return
|
// Given a line segment specified by two endpoints p1 and p2, return
|
||||||
// the x value of a point on the line that intersects with the
|
// the x value of a point on the line that intersects with the
|
||||||
// horizontal line through y. Return true if an intersection is found,
|
// horizontal line through y. Return true if an intersection is found,
|
||||||
|
|
|
@ -35,6 +35,10 @@
|
||||||
#include <Polygon/split.hxx>
|
#include <Polygon/split.hxx>
|
||||||
#include <shapelib/shapefil.h>
|
#include <shapelib/shapefil.h>
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# include <Win32/mkdir.hpp>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// return the type of the shapefile record
|
// return the type of the shapefile record
|
||||||
AreaType get_shapefile_type(DBFHandle& hDBF, int rec) {
|
AreaType get_shapefile_type(DBFHandle& hDBF, int rec) {
|
||||||
|
@ -155,8 +159,13 @@ int main( int argc, char **argv ) {
|
||||||
|
|
||||||
// make work directory
|
// make work directory
|
||||||
string work_dir = argv[2];
|
string work_dir = argv[2];
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
fg_mkdir( work_dir.c_str() );
|
||||||
|
#else
|
||||||
string command = "mkdir -p " + work_dir;
|
string command = "mkdir -p " + work_dir;
|
||||||
system( command.c_str() );
|
system( command.c_str() );
|
||||||
|
#endif
|
||||||
|
|
||||||
// allow us to override the area type from the command line. All
|
// allow us to override the area type from the command line. All
|
||||||
// polygons in the processed shape file will be assigned this area
|
// polygons in the processed shape file will be assigned this area
|
||||||
|
|
Loading…
Reference in a new issue