diff --git a/Common/ViewsIO.cpp b/Common/ViewsIO.cpp index c8102f85a8a689bbf480f1fe5e501be0ebcaf099..0099d2d5835015e0e24f4559e5e0523422affe90 100644 --- a/Common/ViewsIO.cpp +++ b/Common/ViewsIO.cpp @@ -1,4 +1,4 @@ -// $Id: ViewsIO.cpp,v 1.1 2006-01-27 21:15:30 geuzaine Exp $ +// $Id: ViewsIO.cpp,v 1.2 2006-01-28 00:58:25 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -706,7 +706,7 @@ static void print_elms(FILE *file, int nbelm, List_T *list, std::set<Nod, NodCompPos>::iterator it = nodes->find(n); if(it == nodes->end()){ Msg(GERROR, "Unknown node in element"); - break; + return; } else{ nod[j] = (Nod)(*it); diff --git a/Graphics/ReadImg.cpp b/Graphics/ReadImg.cpp index 7866b9ae31e6e8d04adaba5d7a3d32d93d01e278..c762c70a0916ef7c0b3cee2b299f6a56e5e5ef60 100644 --- a/Graphics/ReadImg.cpp +++ b/Graphics/ReadImg.cpp @@ -1,4 +1,4 @@ -// $Id: ReadImg.cpp,v 1.10 2006-01-06 00:34:25 geuzaine Exp $ +// $Id: ReadImg.cpp,v 1.11 2006-01-28 00:58:25 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -27,71 +27,66 @@ #include <FL/Fl_PNM_Image.H> // from an image, we create a post pro object -Post_View * Img2Pos(Fl_RGB_Image & img_init) + +Post_View * Img2Pos(Fl_RGB_Image & img_init, int quads=1, + int resizex=0, int resizey=0) { - img_init.desaturate(); + img_init.desaturate(); // convert to grayscale - Fl_RGB_Image * img = (Fl_RGB_Image *) img_init.copy(128, 128); + // resize if necessary + Fl_RGB_Image * img; + if(!resizex || !resizey) + img = (Fl_RGB_Image *) img_init.copy(); + else + img = (Fl_RGB_Image *) img_init.copy(resizex, resizey); const uchar *data = img->array; int height = img->h(); int width = img->w(); int dim = img->d(); + if(dim != 1) { + Msg(GERROR, "Unable to convert image to grayscale"); + return NULL; + } + Post_View * v = BeginView(1); - for(int i = 0; i < width - 1; i++) { + double z = 0.; + for(int i = 0; i < height - 1; i++) { const uchar *a = data + i * width * dim; const uchar *a1 = data + (i + 1) * width * dim; - double y = 1. - (double)i / ((double)width - 1.); - double y1 = 1. - (double)(i + 1) / ((double)width - 1.); - for(int j = 0; j < height - 1; j++) { - double x = (double)j / ((double)height - 1.); - double x1 = (double)(j + 1) / ((double)height - 1.); - double z = 0.0; - if(dim == 1) { // grayscale - uchar G1 = a[j]; - uchar G2 = a1[j]; - uchar G3 = a1[j + 1]; - uchar G4 = a[j + 1]; - const double eps = 0.005; - const double Eps = .25; - double val1 = Eps * (G1) / 255. + eps; - double val2 = Eps * (G2) / 255. + eps; - double val3 = Eps * (G3) / 255. + eps; - double val4 = Eps * (G4) / 255. + eps; - /* - val1*=val1; - val2*=val2; - val3*=val3; - val4*=val4; - */ - List_Add(v->ST, &x); - List_Add(v->ST, &x); - List_Add(v->ST, &x1); - List_Add(v->ST, &y); - List_Add(v->ST, &y1); - List_Add(v->ST, &y1); - List_Add(v->ST, &z); - List_Add(v->ST, &z); - List_Add(v->ST, &z); - List_Add(v->ST, &val1); - List_Add(v->ST, &val2); - List_Add(v->ST, &val3); - v->NbST++; - List_Add(v->ST, &x); - List_Add(v->ST, &x1); - List_Add(v->ST, &x1); - List_Add(v->ST, &y); - List_Add(v->ST, &y1); - List_Add(v->ST, &y); - List_Add(v->ST, &z); - List_Add(v->ST, &z); - List_Add(v->ST, &z); - List_Add(v->ST, &val1); - List_Add(v->ST, &val3); - List_Add(v->ST, &val4); - v->NbST++; + double y = height - i; + double y1 = height - (i + 1); + for(int j = 0; j < width - 1; j++) { + double x = j; + double x1 = (j + 1); + double val1 = (double)a[j]/255.; + double val2 = (double)a1[j]/255.; + double val3 = (double)a1[j + 1]/255.; + double val4 = (double)a[j + 1]/255.; + if(quads){ // generate quads + List_Add(v->SQ, &x); List_Add(v->SQ, &x); + List_Add(v->SQ, &x1); List_Add(v->SQ, &x1); + List_Add(v->SQ, &y); List_Add(v->SQ, &y1); + List_Add(v->SQ, &y1); List_Add(v->SQ, &y); + List_Add(v->SQ, &z); List_Add(v->SQ, &z); + List_Add(v->SQ, &z); List_Add(v->SQ, &z); + List_Add(v->SQ, &val1); List_Add(v->SQ, &val2); + List_Add(v->SQ, &val3); List_Add(v->SQ, &val4); + v->NbSQ++; + } + else{ // generate triangles + List_Add(v->ST, &x); List_Add(v->ST, &x); List_Add(v->ST, &x1); + List_Add(v->ST, &y); List_Add(v->ST, &y1); List_Add(v->ST, &y1); + List_Add(v->ST, &z); List_Add(v->ST, &z); List_Add(v->ST, &z); + List_Add(v->ST, &val1); List_Add(v->ST, &val2); List_Add(v->ST, &val3); + v->NbST++; + List_Add(v->ST, &x); List_Add(v->ST, &x1); List_Add(v->ST, &x1); + List_Add(v->ST, &y); List_Add(v->ST, &y1); List_Add(v->ST, &y); + List_Add(v->ST, &z); List_Add(v->ST, &z); List_Add(v->ST, &z); + List_Add(v->ST, &val1); List_Add(v->ST, &val3); List_Add(v->ST, &val4); + v->NbST++; } } } @@ -105,11 +100,12 @@ void read_pnm(char *name) Fl_PNM_Image theVeryNicePicture(name); Post_View * v = Img2Pos(theVeryNicePicture); - char name2[256]; - strcpy(name2, name); - strcat(name2, ".pos"); - EndView(v, 1, name2, name); - - Msg(INFO, "Read PNM file '%s'", name); - Msg(STATUS2N, "Read '%s'", name); + if(v){ + char name2[256]; + strcpy(name2, name); + strcat(name2, ".pos"); + EndView(v, 1, name2, name); + Msg(INFO, "Read PNM file '%s'", name); + Msg(STATUS2N, "Read '%s'", name); + } }