1
0
Fork 0

Tweaks/fixes for building airports.

This commit is contained in:
curt 2000-12-22 19:17:02 +00:00
parent d44401402e
commit 43f544d7df
3 changed files with 43 additions and 33 deletions

View file

@ -514,10 +514,6 @@ static void gen_runway_section( const FGRunway& rwy_info,
Point3D a2 = runway.get_pt(0, 0); Point3D a2 = runway.get_pt(0, 0);
Point3D a3 = runway.get_pt(0, 3); Point3D a3 = runway.get_pt(0, 3);
if ( endl_pct > 1.0 ) {
endl_pct = 1.0;
}
if ( startl_pct > 0.0 ) { if ( startl_pct > 0.0 ) {
startl_pct -= nudge * FG_EPSILON; startl_pct -= nudge * FG_EPSILON;
} }
@ -525,6 +521,10 @@ static void gen_runway_section( const FGRunway& rwy_info,
endl_pct += nudge * FG_EPSILON; endl_pct += nudge * FG_EPSILON;
} }
if ( endl_pct > 1.0 ) {
endl_pct = 1.0;
}
// partial "w" percentages could introduce "T" intersections which // partial "w" percentages could introduce "T" intersections which
// we compensate for later, but could still cause problems now // we compensate for later, but could still cause problems now
// with our polygon clipping code. This attempts to compensate // with our polygon clipping code. This attempts to compensate

View file

@ -2,7 +2,7 @@
#include "array.hxx" #include "array.hxx"
main(int argc, char **argv) { int main( int argc, char **argv ) {
double lon, lat; double lon, lat;
if ( argc != 2 ) { if ( argc != 2 ) {
@ -30,4 +30,6 @@ main(int argc, char **argv) {
cout << " " << a.interpolate_altitude(lon, lat) << endl; cout << " " << a.interpolate_altitude(lon, lat) << endl;
a.fit( 100 ); a.fit( 100 );
return 0;
} }

View file

@ -192,6 +192,14 @@
/* recommend double precision unless you want to generate a mesh for which */ /* recommend double precision unless you want to generate a mesh for which */
/* you do not have enough memory. */ /* you do not have enough memory. */
/* Added CLO 11/20/2000. Explanation: this code does a lot of
malloc()'ing of space and in some cases blindly expects the results
to be zero'd out, even though this isn't gauranteed by malloc().
So I (Curt Olson, curt@flightgear.org) have added some code here to
map all the malloc(x) calls to calloc( 1, x). */
#define MALLOC( x ) calloc( 1, x )
/* CLO end */
/* #define SINGLE */ /* #define SINGLE */
#ifdef SINGLE #ifdef SINGLE
@ -3205,7 +3213,7 @@ int alignment;
/* Allocate a block of items. Space for `itemsperblock' items and one */ /* Allocate a block of items. Space for `itemsperblock' items and one */
/* pointer (to point to the next block) are allocated, as well as space */ /* pointer (to point to the next block) are allocated, as well as space */
/* to ensure alignment of the items. */ /* to ensure alignment of the items. */
pool->firstblock = (VOID **) malloc(pool->itemsperblock * pool->itembytes pool->firstblock = (VOID **) MALLOC(pool->itemsperblock * pool->itembytes
+ sizeof(VOID *) + pool->alignbytes); + sizeof(VOID *) + pool->alignbytes);
if (pool->firstblock == (VOID **) NULL) { if (pool->firstblock == (VOID **) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -3290,7 +3298,7 @@ struct memorypool *pool;
/* Check if another block must be allocated. */ /* Check if another block must be allocated. */
if (*(pool->nowblock) == (VOID *) NULL) { if (*(pool->nowblock) == (VOID *) NULL) {
/* Allocate a new block of items, pointed to by the previous block. */ /* Allocate a new block of items, pointed to by the previous block. */
newblock = (VOID **) malloc(pool->itemsperblock * pool->itembytes newblock = (VOID **) MALLOC(pool->itemsperblock * pool->itembytes
+ sizeof(VOID *) + pool->alignbytes); + sizeof(VOID *) + pool->alignbytes);
if (newblock == (VOID **) NULL) { if (newblock == (VOID **) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -3459,7 +3467,7 @@ int shellewords;
shwords = shellewords; /* Initialize `shwords' once and for all. */ shwords = shellewords; /* Initialize `shwords' once and for all. */
/* Set up `dummytri', the `triangle' that occupies "outer space". */ /* Set up `dummytri', the `triangle' that occupies "outer space". */
dummytribase = (triangle *) malloc(triwords * sizeof(triangle) dummytribase = (triangle *) MALLOC(triwords * sizeof(triangle)
+ triangles.alignbytes); + triangles.alignbytes);
if (dummytribase == (triangle *) NULL) { if (dummytribase == (triangle *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -3486,7 +3494,7 @@ int shellewords;
/* Set up `dummysh', the omnipresent "shell edge" pointed to by any */ /* Set up `dummysh', the omnipresent "shell edge" pointed to by any */
/* triangle side or shell edge end that isn't attached to a real shell */ /* triangle side or shell edge end that isn't attached to a real shell */
/* edge. */ /* edge. */
dummyshbase = (shelle *) malloc(shwords * sizeof(shelle) dummyshbase = (shelle *) MALLOC(shwords * sizeof(shelle)
+ shelles.alignbytes); + shelles.alignbytes);
if (dummyshbase == (shelle *) NULL) { if (dummyshbase == (shelle *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -7712,7 +7720,7 @@ long divconqdelaunay()
int i, j; int i, j;
/* Allocate an array of pointers to points for sorting. */ /* Allocate an array of pointers to points for sorting. */
sortarray = (point *) malloc(inpoints * sizeof(point)); sortarray = (point *) MALLOC(inpoints * sizeof(point));
if (sortarray == (point *) NULL) { if (sortarray == (point *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -7804,9 +7812,9 @@ void boundingbox()
width = 1.0; width = 1.0;
} }
/* Create the vertices of the bounding box. */ /* Create the vertices of the bounding box. */
infpoint1 = (point) malloc(points.itembytes); infpoint1 = (point) MALLOC(points.itembytes);
infpoint2 = (point) malloc(points.itembytes); infpoint2 = (point) MALLOC(points.itembytes);
infpoint3 = (point) malloc(points.itembytes); infpoint3 = (point) MALLOC(points.itembytes);
if ((infpoint1 == (point) NULL) || (infpoint2 == (point) NULL) if ((infpoint1 == (point) NULL) || (infpoint2 == (point) NULL)
|| (infpoint3 == (point) NULL)) { || (infpoint3 == (point) NULL)) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -8121,12 +8129,12 @@ struct event **freeevents;
int i; int i;
maxevents = (3 * inpoints) / 2; maxevents = (3 * inpoints) / 2;
*eventheap = (struct event **) malloc(maxevents * sizeof(struct event *)); *eventheap = (struct event **) MALLOC(maxevents * sizeof(struct event *));
if (*eventheap == (struct event **) NULL) { if (*eventheap == (struct event **) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
} }
*events = (struct event *) malloc(maxevents * sizeof(struct event)); *events = (struct event *) MALLOC(maxevents * sizeof(struct event));
if (*events == (struct event *) NULL) { if (*events == (struct event *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -8880,7 +8888,7 @@ FILE *polyfile;
/* Allocate a temporary array that maps each point to some adjacent */ /* Allocate a temporary array that maps each point to some adjacent */
/* triangle. I took care to allocate all the permanent memory for */ /* triangle. I took care to allocate all the permanent memory for */
/* triangles and shell edges first. */ /* triangles and shell edges first. */
vertexarray = (triangle *) malloc(points.items * sizeof(triangle)); vertexarray = (triangle *) MALLOC(points.items * sizeof(triangle));
if (vertexarray == (triangle *) NULL) { if (vertexarray == (triangle *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -10477,7 +10485,7 @@ int regions;
if (regions > 0) { if (regions > 0) {
/* Allocate storage for the triangles in which region points fall. */ /* Allocate storage for the triangles in which region points fall. */
regiontris = (struct triedge *) malloc(regions * sizeof(struct triedge)); regiontris = (struct triedge *) MALLOC(regions * sizeof(struct triedge));
if (regiontris == (struct triedge *) NULL) { if (regiontris == (struct triedge *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -11567,7 +11575,7 @@ int *regions;
stringptr = readline(inputline, polyfile, polyfilename); stringptr = readline(inputline, polyfile, polyfilename);
*holes = (int) strtol (stringptr, &stringptr, 0); *holes = (int) strtol (stringptr, &stringptr, 0);
if (*holes > 0) { if (*holes > 0) {
holelist = (REAL *) malloc(2 * *holes * sizeof(REAL)); holelist = (REAL *) MALLOC(2 * *holes * sizeof(REAL));
*hlist = holelist; *hlist = holelist;
if (holelist == (REAL *) NULL) { if (holelist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -11602,7 +11610,7 @@ int *regions;
stringptr = readline(inputline, polyfile, polyfilename); stringptr = readline(inputline, polyfile, polyfilename);
*regions = (int) strtol (stringptr, &stringptr, 0); *regions = (int) strtol (stringptr, &stringptr, 0);
if (*regions > 0) { if (*regions > 0) {
regionlist = (REAL *) malloc(4 * *regions * sizeof(REAL)); regionlist = (REAL *) MALLOC(4 * *regions * sizeof(REAL));
*rlist = regionlist; *rlist = regionlist;
if (regionlist == (REAL *) NULL) { if (regionlist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -11729,7 +11737,7 @@ char **argv;
} }
/* Allocate memory for output points if necessary. */ /* Allocate memory for output points if necessary. */
if (*pointlist == (REAL *) NULL) { if (*pointlist == (REAL *) NULL) {
*pointlist = (REAL *) malloc(points.items * 2 * sizeof(REAL)); *pointlist = (REAL *) MALLOC(points.items * 2 * sizeof(REAL));
if (*pointlist == (REAL *) NULL) { if (*pointlist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -11737,7 +11745,7 @@ char **argv;
} }
/* Allocate memory for output point attributes if necessary. */ /* Allocate memory for output point attributes if necessary. */
if ((nextras > 0) && (*pointattriblist == (REAL *) NULL)) { if ((nextras > 0) && (*pointattriblist == (REAL *) NULL)) {
*pointattriblist = (REAL *) malloc(points.items * nextras * sizeof(REAL)); *pointattriblist = (REAL *) MALLOC(points.items * nextras * sizeof(REAL));
if (*pointattriblist == (REAL *) NULL) { if (*pointattriblist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -11745,7 +11753,7 @@ char **argv;
} }
/* Allocate memory for output point markers if necessary. */ /* Allocate memory for output point markers if necessary. */
if (!nobound && (*pointmarkerlist == (int *) NULL)) { if (!nobound && (*pointmarkerlist == (int *) NULL)) {
*pointmarkerlist = (int *) malloc(points.items * sizeof(int)); *pointmarkerlist = (int *) MALLOC(points.items * sizeof(int));
if (*pointmarkerlist == (int *) NULL) { if (*pointmarkerlist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -11880,7 +11888,7 @@ char **argv;
} }
/* Allocate memory for output triangles if necessary. */ /* Allocate memory for output triangles if necessary. */
if (*trianglelist == (int *) NULL) { if (*trianglelist == (int *) NULL) {
*trianglelist = (int *) malloc(triangles.items * *trianglelist = (int *) MALLOC(triangles.items *
((order + 1) * (order + 2) / 2) * sizeof(int)); ((order + 1) * (order + 2) / 2) * sizeof(int));
if (*trianglelist == (int *) NULL) { if (*trianglelist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -11889,7 +11897,7 @@ char **argv;
} }
/* Allocate memory for output triangle attributes if necessary. */ /* Allocate memory for output triangle attributes if necessary. */
if ((eextras > 0) && (*triangleattriblist == (REAL *) NULL)) { if ((eextras > 0) && (*triangleattriblist == (REAL *) NULL)) {
*triangleattriblist = (REAL *) malloc(triangles.items * eextras * *triangleattriblist = (REAL *) MALLOC(triangles.items * eextras *
sizeof(REAL)); sizeof(REAL));
if (*triangleattriblist == (REAL *) NULL) { if (*triangleattriblist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -12015,7 +12023,7 @@ char **argv;
} }
/* Allocate memory for output segments if necessary. */ /* Allocate memory for output segments if necessary. */
if (*segmentlist == (int *) NULL) { if (*segmentlist == (int *) NULL) {
*segmentlist = (int *) malloc(shelles.items * 2 * sizeof(int)); *segmentlist = (int *) MALLOC(shelles.items * 2 * sizeof(int));
if (*segmentlist == (int *) NULL) { if (*segmentlist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -12023,7 +12031,7 @@ char **argv;
} }
/* Allocate memory for output segment markers if necessary. */ /* Allocate memory for output segment markers if necessary. */
if (!nobound && (*segmentmarkerlist == (int *) NULL)) { if (!nobound && (*segmentmarkerlist == (int *) NULL)) {
*segmentmarkerlist = (int *) malloc(shelles.items * sizeof(int)); *segmentmarkerlist = (int *) MALLOC(shelles.items * sizeof(int));
if (*segmentmarkerlist == (int *) NULL) { if (*segmentmarkerlist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -12146,7 +12154,7 @@ char **argv;
} }
/* Allocate memory for edges if necessary. */ /* Allocate memory for edges if necessary. */
if (*edgelist == (int *) NULL) { if (*edgelist == (int *) NULL) {
*edgelist = (int *) malloc(edges * 2 * sizeof(int)); *edgelist = (int *) MALLOC(edges * 2 * sizeof(int));
if (*edgelist == (int *) NULL) { if (*edgelist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -12154,7 +12162,7 @@ char **argv;
} }
/* Allocate memory for edge markers if necessary. */ /* Allocate memory for edge markers if necessary. */
if (!nobound && (*edgemarkerlist == (int *) NULL)) { if (!nobound && (*edgemarkerlist == (int *) NULL)) {
*edgemarkerlist = (int *) malloc(edges * sizeof(int)); *edgemarkerlist = (int *) MALLOC(edges * sizeof(int));
if (*edgemarkerlist == (int *) NULL) { if (*edgemarkerlist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -12305,7 +12313,7 @@ char **argv;
} }
/* Allocate memory for Voronoi vertices if necessary. */ /* Allocate memory for Voronoi vertices if necessary. */
if (*vpointlist == (REAL *) NULL) { if (*vpointlist == (REAL *) NULL) {
*vpointlist = (REAL *) malloc(triangles.items * 2 * sizeof(REAL)); *vpointlist = (REAL *) MALLOC(triangles.items * 2 * sizeof(REAL));
if (*vpointlist == (REAL *) NULL) { if (*vpointlist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -12313,7 +12321,7 @@ char **argv;
} }
/* Allocate memory for Voronoi vertex attributes if necessary. */ /* Allocate memory for Voronoi vertex attributes if necessary. */
if (*vpointattriblist == (REAL *) NULL) { if (*vpointattriblist == (REAL *) NULL) {
*vpointattriblist = (REAL *) malloc(triangles.items * nextras * *vpointattriblist = (REAL *) MALLOC(triangles.items * nextras *
sizeof(REAL)); sizeof(REAL));
if (*vpointattriblist == (REAL *) NULL) { if (*vpointattriblist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
@ -12384,7 +12392,7 @@ char **argv;
} }
/* Allocate memory for output Voronoi edges if necessary. */ /* Allocate memory for output Voronoi edges if necessary. */
if (*vedgelist == (int *) NULL) { if (*vedgelist == (int *) NULL) {
*vedgelist = (int *) malloc(edges * 2 * sizeof(int)); *vedgelist = (int *) MALLOC(edges * 2 * sizeof(int));
if (*vedgelist == (int *) NULL) { if (*vedgelist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -12393,7 +12401,7 @@ char **argv;
*vedgemarkerlist = (int *) NULL; *vedgemarkerlist = (int *) NULL;
/* Allocate memory for output Voronoi norms if necessary. */ /* Allocate memory for output Voronoi norms if necessary. */
if (*vnormlist == (REAL *) NULL) { if (*vnormlist == (REAL *) NULL) {
*vnormlist = (REAL *) malloc(edges * 2 * sizeof(REAL)); *vnormlist = (REAL *) MALLOC(edges * 2 * sizeof(REAL));
if (*vnormlist == (REAL *) NULL) { if (*vnormlist == (REAL *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);
@ -12503,7 +12511,7 @@ char **argv;
} }
/* Allocate memory for neighbors if necessary. */ /* Allocate memory for neighbors if necessary. */
if (*neighborlist == (int *) NULL) { if (*neighborlist == (int *) NULL) {
*neighborlist = (int *) malloc(triangles.items * 3 * sizeof(int)); *neighborlist = (int *) MALLOC(triangles.items * 3 * sizeof(int));
if (*neighborlist == (int *) NULL) { if (*neighborlist == (int *) NULL) {
printf("Error: Out of memory.\n"); printf("Error: Out of memory.\n");
exit(1); exit(1);