/* tri2obj.c -- read in a .ele/.node file pair generated by the triangle * program and output a simple Wavefront .obj file. * * Written by Curtis Olson, started October 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 "tri2obj.h" int nodecount, tricount; double nodes[MAX_NODES][3]; int tris[MAX_TRIS][3]; int new_tris[MAX_TRIS][3]; /* Initialize a new mesh structure */ void triload(char *basename) { char nodename[256], elename[256]; FILE *node, *ele; int dim, junk1, junk2; int i; strcpy(nodename, basename); strcat(nodename, ".node"); strcpy(elename, basename); strcat(elename, ".ele"); printf("Loading node file: %s ...\n", nodename); if ( (node = fopen(nodename, "r")) == NULL ) { printf("Cannot open file '%s'\n", nodename); 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); printf("Loading element file: %s ...\n", elename); if ( (ele = fopen(elename, "r")) == NULL ) { printf("Cannot open file '%s'\n", elename); exit(-1); } fscanf(ele, "%d %d %d", &tricount, &junk1, &junk2); if ( tricount > MAX_TRIS - 1 ) { printf("Error, too many elements, need to increase array size\n"); exit(-1); } else { printf(" Expecting %d elements\n", tricount); } for ( i = 1; i <= tricount; i++ ) { fscanf(ele, "%d %d %d %d\n", &junk1, &tris[i][0], &tris[i][1], &tris[i][2]); /* printf("%d %d %d %d\n", junk1, tris[i][0], tris[i][1], tris[i][2]);*/ } fclose(ele); } /* dump in WaveFront .obj format */ void dump_obj(char *basename) { char objname[256]; FILE *obj; int i; strcpy(objname, basename); strcat(objname, ".obj"); printf("Dumping to file: %s ...\n", objname); obj = fopen(objname, "w"); /* dump vertices */ for ( i = 1; i <= nodecount; i++ ) { fprintf(obj, "v %.2f %.2f %.2f\n", nodes[i][0], nodes[i][1], nodes[i][2]); } /* dump faces */ for ( i = 1; i <= tricount; i++ ) { fprintf(obj, "f %d %d %d\n", tris[i][0], tris[i][1], tris[i][2]); } fclose(obj); } int main(int argc, char **argv) { char basename[256]; strcpy(basename, argv[1]); /* load the input data files */ triload(basename); /* dump in WaveFront .obj format */ dump_obj(basename); return(0); } /* $Log$ /* Revision 1.1 1997/10/29 23:05:15 curt /* Initial revision. /* */