diff --git a/Common/Views.cpp b/Common/Views.cpp index ef9e02e1f7d1321045b92213ed1851799d3fbfa3..8d1779c26ad52dc47ed2583b6333c1be0596facf 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -/* $Id: Views.cpp,v 1.19 2000-12-21 10:41:02 geuzaine Exp $ */ +/* $Id: Views.cpp,v 1.20 2000-12-26 20:45:42 geuzaine Exp $ */ #include "Gmsh.h" #include "Views.h" @@ -36,6 +36,8 @@ void BeginView(int allocate){ ActualView->NbSS = ActualView->NbVS = ActualView->NbTS = 0; if(allocate){ + ActualView->datasize = sizeof(double); + ActualView->Time = List_Create(100,1000,sizeof(double)); ActualView->SP = List_Create(100,1000,sizeof(double)); @@ -472,7 +474,7 @@ extern int Force_ViewNumber; void Read_View(FILE *file, char *filename){ char str[NAME_STR_L], name[NAME_STR_L]; - int nb, format, testone, swap=0; + int nb, format, size, testone, swap; double version; while (1) { @@ -487,14 +489,28 @@ void Read_View(FILE *file, char *filename){ /* F o r m a t */ if (!strncmp(&str[1], "PostFormat", 10)){ - fscanf(file, "%lf %d\n", &version, &format) ; - if(version < 0.995){ - Msg(ERROR, "The Version of this File is too old (<0.995)"); + fscanf(file, "%lf %d %d\n", &version, &format, &size) ; + if(version < 1.0){ + Msg(ERROR, "The Version of this File is too old (%g < 1.0)", version); + return; + } + if(size == sizeof(double)) + Msg(DEBUG, "Data is in Double Precision Format (size==%d)", size); + else if(size == sizeof(float)) + Msg(DEBUG, "Data is in Single Precision Format (size==%d)", size); + else{ + Msg(ERROR, "Unknown Type of Data (Size = %d) in Post-Processing File", + size); return; } - if(format == 0) format = LIST_FORMAT_ASCII ; - else if(format == 1) format = LIST_FORMAT_BINARY ; - else Msg(FATAL, "Unknown Format for View"); + if(format == 0) + format = LIST_FORMAT_ASCII ; + else if(format == 1) + format = LIST_FORMAT_BINARY ; + else{ + Msg(ERROR, "Unknown Format for View"); + return ; + } } /* V i e w */ @@ -510,6 +526,7 @@ void Read_View(FILE *file, char *filename){ &ActualView->NbST, &ActualView->NbVT, &ActualView->NbTT, &ActualView->NbSS, &ActualView->NbVS, &ActualView->NbTS); + swap = 0 ; if(format == LIST_FORMAT_BINARY){ fread(&testone, sizeof(int), 1, file); if(testone != 1){ @@ -518,49 +535,51 @@ void Read_View(FILE *file, char *filename){ } } + ActualView->datasize = size ; + // Time values ActualView->Time = List_CreateFromFile(ActualView->NbTimeStep, - sizeof(double), file, format, swap); + size, file, format, swap); // Points nb = ActualView->NbSP ? ActualView->NbSP * (ActualView->NbTimeStep +3) : 0 ; - ActualView->SP = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->SP = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbVP ? ActualView->NbVP * (ActualView->NbTimeStep*3+3) : 0 ; - ActualView->VP = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->VP = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbTP ? ActualView->NbTP * (ActualView->NbTimeStep*9+3) : 0 ; - ActualView->TP = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->TP = List_CreateFromFile(nb, size, file, format, swap); // Lines nb = ActualView->NbSL ? ActualView->NbSL * (ActualView->NbTimeStep*2 +6) : 0 ; - ActualView->SL = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->SL = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbVL ? ActualView->NbVL * (ActualView->NbTimeStep*2*3+6) : 0 ; - ActualView->VL = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->VL = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbTL ? ActualView->NbTL * (ActualView->NbTimeStep*2*9+6) : 0 ; - ActualView->TL = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->TL = List_CreateFromFile(nb, size, file, format, swap); // Triangles nb = ActualView->NbST ? ActualView->NbST * (ActualView->NbTimeStep*3 +9) : 0 ; - ActualView->ST = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->ST = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbVT ? ActualView->NbVT * (ActualView->NbTimeStep*3*3+9) : 0 ; - ActualView->VT = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->VT = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbTT ? ActualView->NbTT * (ActualView->NbTimeStep*3*9+9) : 0 ; - ActualView->TT = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->TT = List_CreateFromFile(nb, size, file, format, swap); // Tetrahedra nb = ActualView->NbSS ? ActualView->NbSS * (ActualView->NbTimeStep*4 +12) : 0 ; - ActualView->SS = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->SS = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbVS ? ActualView->NbVS * (ActualView->NbTimeStep*4*3+12) : 0 ; - ActualView->VS = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->VS = List_CreateFromFile(nb, size, file, format, swap); nb = ActualView->NbTS ? ActualView->NbTS * (ActualView->NbTimeStep*4*9+12) : 0 ; - ActualView->TS = List_CreateFromFile(nb, sizeof(double), file, format, swap); + ActualView->TS = List_CreateFromFile(nb, size, file, format, swap); Msg(DEBUG, "Read View '%s' (%d TimeSteps): %d %d %d %d %d %d %d %d %d %d %d %d", name, ActualView->NbTimeStep, diff --git a/Common/Views.h b/Common/Views.h index 6c23d463365d59b7dea784e830530c63beaaeee7..28291b1b1b9b5c8ab91135034a1eaefc6807f7d5 100644 --- a/Common/Views.h +++ b/Common/Views.h @@ -1,4 +1,4 @@ -/* $Id: Views.h,v 1.14 2000-12-17 21:17:29 remacle Exp $ */ +/* $Id: Views.h,v 1.15 2000-12-26 20:45:42 geuzaine Exp $ */ #ifndef _VIEWS_H_ #define _VIEWS_H_ @@ -11,6 +11,7 @@ typedef struct{ char FileName[NAME_STR_L], Name[NAME_STR_L]; /* the data */ + int datasize; // size(double) or sizeof(float) List_T *Time; int NbSP, NbVP, NbTP; List_T *SP, *VP, *TP; // points diff --git a/DataStr/List.cpp b/DataStr/List.cpp index d3248a9aad85ffcccd16f36a376295c23f53468f..2dc3d5915ccfd12dbe0e7beae1be9b70aef4280f 100644 --- a/DataStr/List.cpp +++ b/DataStr/List.cpp @@ -1,4 +1,4 @@ -/* $Id: List.cpp,v 1.10 2000-12-11 16:22:43 geuzaine Exp $ */ +/* $Id: List.cpp,v 1.11 2000-12-26 20:45:42 geuzaine Exp $ */ #include <stdlib.h> #include <stdio.h> @@ -376,7 +376,16 @@ List_T *List_CreateFromFile(int n, int size, FILE *file, int format, int swap){ liste->n = n; switch(format){ case LIST_FORMAT_ASCII : - for(i=0;i<n;i++) fscanf(file, "%lf", (double*)&liste->array[i*size]) ; + if(size == sizeof(double)) + for(i=0;i<n;i++) fscanf(file, "%lf", (double*)&liste->array[i*size]) ; + else if(size == sizeof(float)) + for(i=0;i<n;i++) fscanf(file, "%f", (float*)&liste->array[i*size]) ; + else if(size == sizeof(int)) + for(i=0;i<n;i++) fscanf(file, "%d", (int*)&liste->array[i*size]) ; + else{ + Msg(ERROR, "Unknown Type of Data to Create List From"); + return NULL; + } return liste; case LIST_FORMAT_BINARY : fread(liste->array, size, n, file); @@ -396,7 +405,14 @@ void List_WriteToFile(List_T *liste, FILE *file, int format){ switch(format){ case LIST_FORMAT_ASCII : - for(i=0;i<n;i++) fprintf(file, "%g ", *((double*)&liste->array[i*liste->size])) ; + if(liste->size == sizeof(double)) + for(i=0;i<n;i++) fprintf(file, "%g ", *((double*)&liste->array[i*liste->size])) ; + else if(liste->size == sizeof(float)) + for(i=0;i<n;i++) fprintf(file, "%g ", *((float*)&liste->array[i*liste->size])) ; + else if(liste->size == sizeof(int)) + for(i=0;i<n;i++) fprintf(file, "%d ", *((int*)&liste->array[i*liste->size])) ; + else + Msg(ERROR, "Unknown Type of Data to Write List to File"); fprintf(file, "\n"); break; case LIST_FORMAT_BINARY : diff --git a/Unix/Widgets.cpp b/Unix/Widgets.cpp index 46cafa5cf2b55bbb3dd58ea05d97795ebd7bfc19..1a163b043bfbd734514e2d5a0f6bfeeb68479445 100644 --- a/Unix/Widgets.cpp +++ b/Unix/Widgets.cpp @@ -1,4 +1,4 @@ -/* $Id: Widgets.cpp,v 1.25 2000-12-26 17:40:18 geuzaine Exp $ */ +/* $Id: Widgets.cpp,v 1.26 2000-12-26 20:45:42 geuzaine Exp $ */ #include "Gmsh.h" #include "GmshUI.h" @@ -673,7 +673,7 @@ void CreateWidgets_FD(Widgets_T *w){ w->FD.saveAsButt[10] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt10", arg, i); XtManageChild(w->FD.saveAsButt[10]); i=0; - XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("YUV")); i++; + XtSetArg(arg[i], XmNlabelString, XmStringCreateSimple("UCB YUV")); i++; w->FD.saveAsButt[11] = XmCreatePushButton(w->FD.saveAsPane[0], "MsaveAsButt11", arg, i); XtManageChild(w->FD.saveAsButt[11]); diff --git a/doc/FORMATS b/doc/FORMATS index f1511672c3ef3f7f1d320f308dcdc0636918edf7..b97f58a373f5009b5bc999bb72b20f9bbb7a8c5d 100644 --- a/doc/FORMATS +++ b/doc/FORMATS @@ -1,7 +1,7 @@ -$Id: FORMATS,v 1.5 2000-12-11 22:09:43 geuzaine Exp $ +$Id: FORMATS,v 1.6 2000-12-26 20:45:42 geuzaine Exp $ This document describes the mesh and post-processing file formats for -Gmsh, version >= 0.995. +Gmsh, version >= 1.0. (This document deals only with the import/export interfaces for Gmsh. The language driving Gmsh's behaviour for defining geometries, @@ -54,7 +54,7 @@ multiple) post-processing views (enclosed between $View/$EndView pairs). $PostFormat - version-number file-type + version-number file-type data-size $EndPostFormat $View @@ -79,10 +79,13 @@ pairs). $endView version-number is a floating point number giving the version of -Gmsh to which the file is destined (e.g. 0.995). +Gmsh to which the file is destined (e.g. 1.0). file-type is an integer equal to 0 in for the ascii file format. +data-size is an integer equal to the size of the floating point +numbers used in the file (usually, data-size == sizeof(double)). + view-name is a string containing the name of the view (max. 256 characters) nb-time-step is an integer giving the number of time steps in the view @@ -133,7 +136,7 @@ file in binary format: int one = 1; fprintf(file, "$PostFormat\n"); -fprintf(file, "%g %d\n", 0.995, 1); +fprintf(file, "%g %d %d\n", 1.0, 1, sizeof(double)); fprintf(file, "$EndPostFormat\n"); fprintf(file, "$View\n"); diff --git a/www/gmsh.html b/www/gmsh.html index 582b0adba608ec5c98a7a7e1cc07cc4f78f795fc..0bbb1f8a5d5e3b73393f6d7c62633ce0ab18d656 100644 --- a/www/gmsh.html +++ b/www/gmsh.html @@ -304,7 +304,9 @@ files. <td><font face="Helvetica, Arial" size=-1> New in 1.00: Added PPM and YUV output; Corrected nested If/Endif; -Corrected seg. fault on repeated saves; +Corrected seg. fault on repeated saves; Slightly changed the +post-processing file format to allow both single and double precision +numbers. <p> New in 0.999: Added JPEG output and easy MPEG generation (see t8.geo in the tutorial); Clean up of export functions; small fixes; Linux versions