]> git.mxchange.org Git - flightgear.git/blobdiff - SplitTris/splittris.c
Adopted Gnu automake/autoconf system.
[flightgear.git] / SplitTris / splittris.c
index bfef51689115e60023034877ab34150a3f43a64d..38b87b227c25d666752426372fd5c0d6cdf2ac16 100644 (file)
 
 #include "splittris.h"
 
-#include "../../Src/Include/constants.h"
-#include "../../Src/Include/types.h"
-#include "../../Src/Math/fg_geodesy.h"
-#include "../../Src/Math/mat3.h"
-#include "../../Src/Math/polar.h"
-#include "../../Src/Scenery/tileutils.h"
+#include <Include/fg_constants.h>
+#include <Include/fg_types.h>
+#include <Scenery/Bucket/bucketutils.h>
 
+#include "fg_geodesy.h"
+#include "mat3.h"
+#include "polar.h"
 
 int nodecount, tricount;
 double xmin, xmax, ymin, ymax;
 
-double nodes_orig[MAX_NODES][3];
-int tris[MAX_TRIS][3];
-int new_tris[MAX_TRIS][3];
+static double nodes_orig[MAX_NODES][3];
+static int tris[MAX_TRIS][3];
+/* static int new_tris[MAX_TRIS][3]; */
 
-struct fgCartesianPoint nodes_cart[MAX_NODES];
+static struct fgCartesianPoint nodes_cart[MAX_NODES];
 
-long int ne_index, nw_index, sw_index, se_index;
-long int north_index, south_index, east_index, west_index;
+struct fgBUCKET ne_index, nw_index, sw_index, se_index;
+struct fgBUCKET north_index, south_index, east_index, west_index;
 
 /* convert a geodetic point lon(arcsec), lat(arcsec), elev(meter) to
  * a cartesian point */
@@ -82,7 +82,7 @@ void calc_normal(struct fgCartesianPoint p1, struct fgCartesianPoint p2,
                 struct fgCartesianPoint p3, double normal[3])
 {
     double v1[3], v2[3];
-    float temp;
+    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;
@@ -236,19 +236,153 @@ void triload(char *basename) {
 /* check if a file exists */
 int file_exists(char *file) {
     struct stat stat_buf;
+    int result;
+
+    printf("checking %s ... ", file);
 
     result = stat(file, &stat_buf);
 
     if ( result != 0 ) {
        /* stat failed, no file */
+       printf("not found.\n");
        return(0);
     } else {
        /* stat succeeded, file exists */
+       printf("exists.\n");
        return(1);
     }
 }
 
 
+/* check to see if a shared object exists */
+int shared_object_exists(char *basepath, char *ext) {
+    char file[256], scene_path[256];
+    long int index;
+
+    if ( strcmp(ext, ".sw") == 0 ) {
+       fgBucketGenBasePath(&west_index, scene_path);
+       index = fgBucketGenIndex(&west_index);
+       sprintf(file, "%s/%s/%ld.1.se", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&sw_index, scene_path);
+       index = fgBucketGenIndex(&sw_index);
+       sprintf(file, "%s/%s/%ld.1.ne", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&south_index, scene_path);
+       index = fgBucketGenIndex(&south_index);
+       sprintf(file, "%s/%s/%ld.1.nw", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    if ( strcmp(ext, ".se") == 0 ) {
+       fgBucketGenBasePath(&east_index, scene_path);
+       index = fgBucketGenIndex(&east_index);
+       sprintf(file, "%s/%s/%ld.1.sw", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&se_index, scene_path);
+       index = fgBucketGenIndex(&se_index);
+       sprintf(file, "%s/%s/%ld.1.nw", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&south_index, scene_path);
+       index = fgBucketGenIndex(&south_index);
+       sprintf(file, "%s/%s/%ld.1.ne", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    if ( strcmp(ext, ".ne") == 0 ) {
+       fgBucketGenBasePath(&east_index, scene_path);
+       index = fgBucketGenIndex(&east_index);
+       sprintf(file, "%s/%s/%ld.1.nw", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&ne_index, scene_path);
+       index = fgBucketGenIndex(&ne_index);
+       sprintf(file, "%s/%s/%ld.1.sw", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&north_index, scene_path);
+       index = fgBucketGenIndex(&north_index);
+       sprintf(file, "%s/%s/%ld.1.se", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    if ( strcmp(ext, ".nw") == 0 ) {
+       fgBucketGenBasePath(&west_index, scene_path);
+       index = fgBucketGenIndex(&west_index);
+       sprintf(file, "%s/%s/%ld.1.ne", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&nw_index, scene_path);
+       index = fgBucketGenIndex(&nw_index);
+       sprintf(file, "%s/%s/%ld.1.se", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+       fgBucketGenBasePath(&north_index, scene_path);
+       index = fgBucketGenIndex(&north_index);
+       sprintf(file, "%s/%s/%ld.1.sw", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    if ( strcmp(ext, ".south") == 0 ) {
+       fgBucketGenBasePath(&south_index, scene_path);
+       index = fgBucketGenIndex(&south_index);
+       sprintf(file, "%s/%s/%ld.1.north", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    if ( strcmp(ext, ".north") == 0 ) {
+       fgBucketGenBasePath(&north_index, scene_path);
+       index = fgBucketGenIndex(&north_index);
+       sprintf(file, "%s/%s/%ld.1.south", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    if ( strcmp(ext, ".west") == 0 ) {
+       fgBucketGenBasePath(&west_index, scene_path);
+       index = fgBucketGenIndex(&west_index);
+       sprintf(file, "%s/%s/%ld.1.east", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    if ( strcmp(ext, ".east") == 0 ) {
+       fgBucketGenBasePath(&east_index, scene_path);
+       index = fgBucketGenIndex(&east_index);
+       sprintf(file, "%s/%s/%ld.1.west", basepath, scene_path, index);
+       if ( file_exists(file) ) {
+           return(1);
+       }
+    }
+
+    return(0);
+}
+
+
 /* my custom file opening routine ... don't open if a shared edge or
  * vertex alread exists */
 FILE *my_open(char *basename, char *basepath, char *ext) {
@@ -257,17 +391,19 @@ FILE *my_open(char *basename, char *basepath, char *ext) {
 
     /* create the output file name */
     strcpy(filename, basename);
-    strcpy(filename, ext);
+    strcat(filename, ext);
 
     /* check if a shared object already exist from a different tile */
 
-    if ( 0 ) {
+    if ( shared_object_exists(basepath, ext) ) {
        /* not an actual file open error, but we've already got the
          * shared edge, so we don't want to create another one */
+       printf("not opening\n");
        return(NULL);
     } else {
        /* open the file */
        fp = fopen(filename, "w");
+       printf("Opening %s\n", filename);
        return(fp);
     }
 }
@@ -275,11 +411,8 @@ FILE *my_open(char *basename, char *basepath, char *ext) {
 
 /* dump in WaveFront .obj format */
 void dump_obj(char *basename, char *basepath) {
-    char sw_name[256], se_name[256], ne_name[256], nw_name[256];
-    char north_name[256], south_name[256], east_name[256], west_name[256];
-    char body_name[256];
     double n1[3], n2[3], n3[3], n4[3], n5[3], norm[3], temp;
-    FILE *sw, *se, *ne, *nw, *north, *south, *east, *west, *body;
+    FILE *fp, *sw, *se, *ne, *nw, *north, *south, *east, *west, *body;
     int i, t1, t2, t3, t4, t5, count;
 
     sw = my_open(basename, basepath, ".sw");
@@ -296,55 +429,38 @@ void dump_obj(char *basename, char *basepath) {
 
     printf("Dumping edges file basename:  %s ...\n", basename);
 
-    sw = fopen(sw_name, "w");
-    se = fopen(se_name, "w");
-    ne = fopen(ne_name, "w");
-    nw = fopen(nw_name, "w");
-
-    north = fopen(north_name, "w");
-    south = fopen(south_name, "w");
-    east = fopen(east_name, "w");
-    west = fopen(west_name, "w");
-
-    body = fopen(body_name, "w");
-
     /* dump vertices */
     printf("  writing vertices\n");
     for ( i = 1; i <= nodecount; i++ ) {
 
        if ( (fabs(nodes_orig[i][1] - ymin) < FG_EPSILON) && 
             (fabs(nodes_orig[i][0] - xmin) < FG_EPSILON) ) {
-           fprintf(sw, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = sw;
        } else if ( (fabs(nodes_orig[i][1] - ymin) < FG_EPSILON) &&
                    (fabs(nodes_orig[i][0] - xmax) < FG_EPSILON) ) {
-           fprintf(se, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = se;
        } else if ( (fabs(nodes_orig[i][1] - ymax) < FG_EPSILON) &&
                    (fabs(nodes_orig[i][0] - xmax) < FG_EPSILON)) {
-           fprintf(ne, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = ne;
        } else if ( (fabs(nodes_orig[i][1] - ymax) < FG_EPSILON) &&
                    (fabs(nodes_orig[i][0] - xmin) < FG_EPSILON) ) {
-           fprintf(nw, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = nw;
        } else if ( fabs(nodes_orig[i][0] - xmin) < FG_EPSILON ) {
-           fprintf(west, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = west;
        } else if ( fabs(nodes_orig[i][0] - xmax) < FG_EPSILON ) {
-           fprintf(east, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = east;
        } else if ( fabs(nodes_orig[i][1] - ymin) < FG_EPSILON ) {
-           fprintf(south, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = south;
        } else if ( fabs(nodes_orig[i][1] - ymax) < FG_EPSILON ) {
-           fprintf(north, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = north;
        } else {
-           fprintf(body, "geodn %.2f %.2f %.2f\n", 
-                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+           fp = body;
        }
 
+       if ( fp != NULL ) {
+           fprintf(fp, "gdn %.2f %.2f %.2f\n", 
+                   nodes_orig[i][0], nodes_orig[i][1], nodes_orig[i][2]);
+       }
     }
 
     printf("  calculating and writing normals\n");
@@ -400,44 +516,51 @@ void dump_obj(char *basename, char *basepath) {
 /*     printf("  Normalized ave. normal = %.4f %.4f %.4f\n",  */
 /*            norm[0], norm[1], norm[2]); */
        
+       fp = NULL;
+
        if ( (fabs(nodes_orig[i][1] - ymin) < FG_EPSILON) && 
             (fabs(nodes_orig[i][0] - xmin) < FG_EPSILON) ) {
-           fprintf(sw, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = sw;
        } else if ( (fabs(nodes_orig[i][1] - ymin) < FG_EPSILON) &&
                    (fabs(nodes_orig[i][0] - xmax) < FG_EPSILON) ) {
-           fprintf(se, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = se;
        } else if ( (fabs(nodes_orig[i][1] - ymax) < FG_EPSILON) &&
                    (fabs(nodes_orig[i][0] - xmax) < FG_EPSILON)) {
-           fprintf(ne, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = ne;
        } else if ( (fabs(nodes_orig[i][1] - ymax) < FG_EPSILON) &&
                    (fabs(nodes_orig[i][0] - xmin) < FG_EPSILON) ) {
-           fprintf(nw, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = nw;
        } else if ( fabs(nodes_orig[i][0] - xmin) < FG_EPSILON ) {
-           fprintf(west, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = west;
        } else if ( fabs(nodes_orig[i][0] - xmax) < FG_EPSILON ) {
-           fprintf(east, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = east;
        } else if ( fabs(nodes_orig[i][1] - ymin) < FG_EPSILON ) {
-           fprintf(south, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = south;
        } else if ( fabs(nodes_orig[i][1] - ymax) < FG_EPSILON ) {
-           fprintf(north, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
+           fp = north;
+       }
+       if ( fp != NULL ) {
+           fprintf(fp, "vn %.4f %.4f %.4f\n", norm[0], norm[1], norm[2]);
        }
     }
 
-    fclose(sw);
-    fclose(se);
-    fclose(ne);
-    fclose(nw);
+    if ( sw ) { fclose(sw); }
+    if ( se ) { fclose(se); }
+    if ( ne ) { fclose(ne); }
+    if ( nw ) { fclose(nw); }
 
-    fclose(north);
-    fclose(south);
-    fclose(east);
-    fclose(west);
+    if ( north ) { fclose(north); }
+    if ( south ) { fclose(south); }
+    if ( east ) { fclose(east); }
+    if ( west ) { fclose(west); }
+
+    if ( body ) { fclose(body); }
 }
 
 
 int main(int argc, char **argv) {
     char basename[256], basepath[256], temp[256];
-    struct bucket p1, p2;
+    struct fgBUCKET p;
     long int index;
     int len;
 
@@ -457,23 +580,26 @@ int main(int argc, char **argv) {
     }
     index = atoi(temp);
     printf("%ld\n", index);
-    parse_index(index, &p1);
+    fgBucketParseIndex(index, &p);
 
+    printf("bucket = %d %d %d %d\n", p.lon, p.lat, p.x, p.y);
     /* generate the indexes of the neighbors */
-    offset_bucket(&p1, &p2,  1,  1); ne_index = gen_index(&p2);
-    offset_bucket(&p1, &p2,  1, -1); nw_index = gen_index(&p2);
-    offset_bucket(&p1, &p2, -1,  1); se_index = gen_index(&p2);
-    offset_bucket(&p1, &p2, -1, -1); sw_index = gen_index(&p2);
+    fgBucketOffset(&p, &ne_index,  1,  1);
+    fgBucketOffset(&p, &nw_index, -1,  1);
+    fgBucketOffset(&p, &se_index,  1, -1);
+    fgBucketOffset(&p, &sw_index, -1, -1);
 
-    offset_bucket(&p1, &p2,  0,  1); north_index = gen_index(&p2);
-    offset_bucket(&p1, &p2,  0, -1); south_index = gen_index(&p2);
-    offset_bucket(&p1, &p2,  1,  0); east_index  = gen_index(&p2);
-    offset_bucket(&p1, &p2, -1,  1); west_index  = gen_index(&p2);
+    fgBucketOffset(&p, &north_index,  0,  1);
+    fgBucketOffset(&p, &south_index,  0, -1);
+    fgBucketOffset(&p, &east_index,  1,  0);
+    fgBucketOffset(&p, &west_index, -1,  0);
 
+    /*
     printf("Corner indexes = %ld %ld %ld %ld\n", 
           ne_index, nw_index, sw_index, se_index);
     printf("Edge indexes = %ld %ld %ld %ld\n",
           north_index, south_index, east_index, west_index);
+          */
 
     /* load the input data files */
     triload(basename);
@@ -486,7 +612,25 @@ int main(int argc, char **argv) {
 
 
 /* $Log$
-/* Revision 1.1  1998/01/14 02:11:31  curt
-/* Initial revision.
+/* Revision 1.7  1998/04/08 23:21:13  curt
+/* Adopted Gnu automake/autoconf system.
 /*
+ * Revision 1.6  1998/03/03 15:36:13  curt
+ * Tweaks for compiling with g++
+ *
+ * Revision 1.5  1998/03/03 03:37:04  curt
+ * Cumulative tweaks.
+ *
+ * Revision 1.4  1998/01/31 00:41:26  curt
+ * Made a few changes converting floats to doubles.
+ *
+ * Revision 1.3  1998/01/27 18:37:04  curt
+ * Lots of updates to get back in sync with changes made over in .../Src/
+ *
+ * Revision 1.2  1998/01/14 15:54:43  curt
+ * Initial revision completed.
+ *
+ * Revision 1.1  1998/01/14 02:11:31  curt
+ * Initial revision.
+ *
  */