// // File: main.cc // // (C) 2000-2006 Helmut Cantzler // // Licensed under the terms of the Lesser General Public License. // #include "mesh.h" #include "list_mesh.h" #include "p_mesh.h" #include "gts_mesh.h" #include "geomview_mesh.h" #include "vrml1_mesh.h" #include "vrml2_mesh.h" #include "feature_mesh.h" #include "glmesh.h" int dummy1(int pos) { return 0; } void dummy2(int size) { } int main(int argc, char **argv) { glutInit(&argc, argv); printf("\nMesh Viewer 0.3.1\n\n"); if (argc != 2 && argc != 3) { printf("Syntax: %s \n\n", argv[0]); exit(1); } GLMesh_Settings settings; FILE *f; settings.mesh = new Mesh(); settings.mesh_displayMode = SOLID; settings.features_displayMode = NOTHING; settings.xShift = settings.yShift = settings.zShift = 0.0; settings.clipping = 0.0; settings.light_brightness = 1.0; settings.red = settings.green = settings.blue = 0.0; settings.f_normals = settings.f_different_colors_for_shapes = 0; settings.f_texture_filter = settings.f_back_faces = 0; settings.f_lighting = 1; settings.f_features = 0; settings.f_aspect_ratio = 1; for (int i=0; i < 4; i++) for (int j=0; j < 4; j++) settings.tb_transform[i][j]= i == j ? 1.0 : 0.0; printf("Read mesh (%s) ...\n", argv[1]); if ((f = fopen(argv[1],"r")) == NULL) { fprintf(stderr, "Can't open %s for reading\n", argv[1]); exit(0); } switch (Mesh::type(f)) { case LIST_MESH: settings.mesh = new List_Mesh(); break; case P_MESH: settings.mesh = new P_Mesh(); break; case GTS_MESH: settings.mesh = new GTS_Mesh(); break; case GEOMVIEW_MESH: settings.mesh = new Geomview_Mesh(); break; case VRML1_MESH: settings.mesh = new Vrml1_Mesh(); break; case VRML2_MESH: settings.mesh = new Vrml2_Mesh(); break; case FEATURES_MESH: settings.mesh = new Feature_Mesh(); break; default: return 20; } settings.mesh->read(f, (int (*)(int)) dummy1, (void (*)(int)) dummy2); fclose(f); if (argc == 3) { printf("Read features ...\n"); if ((f = fopen(argv[2],"r")) == NULL) { fprintf(stderr, "Can't open %s for reading\n", argv[2]); exit(0); } switch (Mesh::type(f)) { case LIST_MESH: settings.features = new List_Mesh(); break; case P_MESH: settings.features = new P_Mesh(); break; case GTS_MESH: settings.features = new GTS_Mesh(); break; case GEOMVIEW_MESH: settings.features = new Geomview_Mesh(); break; case VRML1_MESH: settings.features = new Vrml1_Mesh(); break; case VRML2_MESH: settings.features = new Vrml2_Mesh(); break; case FEATURES_MESH: settings.features = new Feature_Mesh(); break; default: return 20; } settings.features->read(f, (int (*)(int)) dummy1, (void (*)(int)) dummy2); fclose(f); } else settings.features = new Mesh(); printf("\nMesh: %d vertices and %d triangles\n", settings.mesh->number_of_vertices(), settings.mesh->number_of_triangles()); printf("\nFeatures: %d points and %d edges\n\n", settings.features->number_of_vertices(), settings.features->number_of_edges()); // Map vertices and triangle centroids to mesh centroid printf("Map mesh to centre ...\n"); settings.mesh->move_to_centre(); printf("Scale mesh ...\n"); settings.mesh->scale_into_normal_sphere(); openglInit(settings); printf("Start displaying ...\n"); openglStart(); }