diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index dfc6867d89838170ce7491c50341a9a2fa41e48a..2fce55f11f8240b6c3ffd8f63f05cbd15f055eaf 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,8 +1,9 @@ -// $Id: Callbacks.cpp,v 1.14 2001-01-11 12:25:23 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.15 2001-01-11 14:11:56 geuzaine Exp $ #include "Gmsh.h" #include "GmshUI.h" #include "Geo.h" +#include "Verif.h" #include "Mesh.h" #include "Draw.h" #include "Views.h" @@ -20,7 +21,9 @@ extern GUI *WID; extern Mesh M; extern Context_T CTX; -// Compatibility routines +/////////////////////////////////////////////////////////////////////////////// + +// Compatibility/local routines int AddViewInUI(int i, char *Name, int Num){ if(i > NB_BUTT_MAX -1) return 1; @@ -106,6 +109,44 @@ int SetGlobalShortcut(int event){ return WID->global_shortcuts(event); } +int SelectContour (int type, int num, List_T *Liste1){ + int k,ip,i; + List_T *Liste2; + + Liste2 = List_Create(1,1,sizeof(int)); + + if(!List_Nbr(Liste1)){ + switch(type){ + case ENT_LINE : k = alledgeslinked (num, Liste1, (List_T*)NULL); break; + case ENT_SURFACE : k = allfaceslinked (num, Liste1, (List_T*)NULL); break; + } + } + else{ + List_Reset(Liste2); + for(i=0;i<List_Nbr(Liste1);i++) + List_Add(Liste2,List_Pointer(Liste1,i)); + List_Reset(Liste1); + switch(type){ + case ENT_LINE : k = alledgeslinked (num, Liste1, Liste2); break; + case ENT_SURFACE : k = allfaceslinked (num, Liste1, Liste2); break; + } + } + + for(i=0;i<List_Nbr(Liste1);i++){ + List_Read(Liste1,i,&ip); + switch(type){ + case ENT_LINE : HighlightEntityNum(0,abs(ip),0,1); break ; + case ENT_SURFACE : HighlightEntityNum(0,0,abs(ip),1); break ; + } + } + + List_Delete(Liste2); + return k; +} + +/////////////////////////////////////////////////////////////////////////////// + + // Common callbacks void cancel_cb(CALLBACK_ARGS){ @@ -532,42 +573,277 @@ void geometry_elementary_add_new_parameter_cb(CALLBACK_ARGS){ void geometry_elementary_add_new_point_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(1); } + +static void _new_line_spline(int mode){ + Vertex *v; + Curve *c; + Surface *s; + int ib; + static int n, p[100]; + + n = 0; + while(1){ + Msg(STATUS,"Select Point ('e'=end, 'q'=quit)"); + ib = SelectEntity(ENT_POINT, &v,&c,&s); + if(ib == 1){ /* left mouse butt */ + p[n++] = v->Num; + } + if (ib == -1){ /* 'e' */ + if(n >= 2) { + switch(mode){ + case 0 : add_multline(n,p,CTX.filename); break; + case 1 : add_spline(n,p,CTX.filename); break; + } + } + n=0; + ZeroHighlight(&M); + DrawUpdate(); + } + if(ib == 0){ /* 'q' */ + n=0 ; + ZeroHighlight(&M); + DrawUpdate(); + break; + } + } + Msg(STATUS,"Ready"); +} + void geometry_elementary_add_new_line_cb(CALLBACK_ARGS){ - printf("new line\n"); + _new_line_spline(0); } void geometry_elementary_add_new_spline_cb(CALLBACK_ARGS){ - printf("new spline\n"); + _new_line_spline(1); } void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS){ - printf("new circle\n"); + Vertex *v; + Curve *c; + Surface *s; + int ib; + static int n, p[100]; + + n=0; + while(1){ + if(n == 0) Msg(STATUS,"Select Center ('q'=quit)"); + if(n == 1) Msg(STATUS,"Select Starting Point ('q'=quit)"); + if(n == 2) Msg(STATUS,"Select Ending Point ('q'=quit)"); + ib = SelectEntity(ENT_POINT, &v,&c,&s); + if(ib == 1) { /* left mouse butt */ + p[n++] = v->Num; + } + if(ib == 0) { /* 'q' */ + n=0 ; + ZeroHighlight(&M); + DrawUpdate(); + break; + } + if(n == 3){ + add_circ(p[1],p[0],p[2],CTX.filename); /* begin, center, end */ + ZeroHighlight(&M); + DrawUpdate(); + n=0; + } + } + Msg(STATUS,"Ready"); } void geometry_elementary_add_new_ellipsis_cb(CALLBACK_ARGS){ - printf("new ellipsis\n"); + Vertex *v; + Curve *c; + Surface *s; + int ib; + static int n, p[100]; + + n=0; + while(1){ + if(n == 0) Msg(STATUS,"Select Center ('q'=quit)"); + if(n == 1) Msg(STATUS,"Select an Axis Point ('q'=quit)"); + if(n == 2) Msg(STATUS,"Select Starting Point ('q'=quit)"); + if(n == 3) Msg(STATUS,"Select Ending Point ('q'=quit)"); + ib = SelectEntity(ENT_POINT, &v,&c,&s); + if(ib == 1) { /* left mouse butt */ + p[n++] = v->Num; + } + if(ib == 0){ /* 'q' */ + n=0 ; + ZeroHighlight(&M); + DrawUpdate(); + break; + } + if(n == 4){ + add_ell(p[3],p[2],p[0],p[1],CTX.filename); + ZeroHighlight(&M); + DrawUpdate(); + n=0; + } + } + Msg(STATUS,"Ready"); } + +static void _new_surface_volume(int mode){ + Vertex *v; + Curve *c; + Surface *s; + int ib, type, zone; + List_T *Liste1, *Liste2; + + Liste1 = List_Create(10,10,sizeof(int)); + Liste2 = List_Create(10,10,sizeof(int)); + + if(mode == 2) + type = ENT_SURFACE; + else + type = ENT_LINE; + + while(1){ + List_Reset(Liste1); + List_Reset(Liste2); + + while(1) { + Msg(STATUS,"Select Boundary ('q'=quit)"); + ib = SelectEntity(type, &v,&c,&s); + if(ib <= 0){ + ZeroHighlight(&M); + DrawUpdate(); + goto stopall; + } + if(SelectContour (type, (type==ENT_LINE)?c->Num:s->Num, Liste1)){ + if(type==ENT_LINE) + add_loop(Liste1,CTX.filename,&zone); + else + add_vol(Liste1,CTX.filename,&zone); + List_Reset(Liste1); + List_Add(Liste2,&zone); + while(1){ + Msg(STATUS,"Select Holes ('q'=quit)"); + ib = SelectEntity(type, &v,&c,&s); + if(ib <= 0){ + ZeroHighlight(&M); + DrawUpdate(); + break; + } + if(SelectContour (type, (type==ENT_LINE)?c->Num:s->Num, Liste1)){ + if(type==ENT_LINE) + add_loop(Liste1,CTX.filename,&zone); + else + add_vol(Liste1,CTX.filename,&zone); + List_Reset(Liste1); + List_Add(Liste2,&zone); + } + } + if(List_Nbr(Liste2)){ + switch(mode){ + case 0 : add_surf(Liste2,CTX.filename,0,1); break; + case 1 : add_surf(Liste2,CTX.filename,0,2); break; + case 2 : add_multvol(Liste2,CTX.filename); break; + } + ZeroHighlight(&M); + DrawUpdate(); + break; + } + } + } + } + stopall : ; + List_Delete(Liste1); + List_Delete(Liste2); + Msg(STATUS,"Ready"); +} + void geometry_elementary_add_new_planesurface_cb(CALLBACK_ARGS){ - printf("new plane surf\n"); + _new_surface_volume(0); } void geometry_elementary_add_new_ruledsurface_cb(CALLBACK_ARGS){ - printf("new rules surf\n"); + _new_surface_volume(1); } void geometry_elementary_add_new_volume_cb(CALLBACK_ARGS){ - printf("new vol\n"); + _new_surface_volume(2); +} + + +static void _translate_point(int mode){ + Vertex *v; + Curve *c; + Surface *s; + while(1){ + Msg(STATUS,"Select Point ('q'=quit)"); + if(!SelectEntity(ENT_POINT, &v,&c,&s)){ + ZeroHighlight(&M); + DrawUpdate(); + break; + } + translate_pt(mode,v->Num,CTX.filename); + ZeroHighlight(&M); + DrawUpdate(); + } } + +static void _translate_curve(int mode){ + Vertex *v; + Curve *c; + Surface *s; + while(1){ + Msg(STATUS,"Select Line ('q'=quit)"); + if(!SelectEntity(ENT_LINE, &v,&c,&s)){ + ZeroHighlight(&M); + DrawUpdate(); + break; + } + translate_seg(mode,c->Num,CTX.filename); + ZeroHighlight(&M); + DrawUpdate(); + } +} +static void _translate_surface(int mode){ + Vertex *v; + Curve *c; + Surface *s; + while(1){ + Msg(STATUS,"Select Surface ('q'=quit)"); + if(!SelectEntity(ENT_SURFACE, &v,&c,&s)){ + ZeroHighlight(&M); + DrawUpdate(); + break; + } + translate_surf(mode,s->Num,CTX.filename); + ZeroHighlight(&M); + DrawUpdate(); + } +} + void geometry_elementary_add_translate_cb(CALLBACK_ARGS){ WID->set_context(menu_geometry_elementary_add_translate, 0); } void geometry_elementary_add_translate_point_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(2); - printf("translate point\n"); + _translate_point(1); } void geometry_elementary_add_translate_curve_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(2); - printf("translate curve\n"); + _translate_curve(1); } void geometry_elementary_add_translate_surface_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(2); - printf("translate surface\n"); + _translate_surface(1); } +void geometry_elementary_translate_cb(CALLBACK_ARGS){ + WID->set_context(menu_geometry_elementary_translate, 0); +} +void geometry_elementary_translate_point_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(2); + _translate_point(0); +} +void geometry_elementary_translate_curve_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(2); + _translate_curve(0); +} +void geometry_elementary_translate_surface_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(2); + _translate_surface(0); +} + + + + void geometry_elementary_add_rotate_cb(CALLBACK_ARGS){ WID->set_context(menu_geometry_elementary_add_rotate, 0); } @@ -583,51 +859,6 @@ void geometry_elementary_add_rotate_surface_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(3); printf("rotate surf\n"); } -void geometry_elementary_add_scale_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add_scale, 0); -} -void geometry_elementary_add_scale_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - printf("scale point\n"); -} -void geometry_elementary_add_scale_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - printf("scale curve\n"); -} -void geometry_elementary_add_scale_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(4); - printf("scale surface\n"); -} -void geometry_elementary_add_symmetry_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_add_symmetry, 0); -} -void geometry_elementary_add_symmetry_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - printf("symm point\n"); -} -void geometry_elementary_add_symmetry_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - printf("symm curve\n"); -} -void geometry_elementary_add_symmetry_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(5); - printf("symm surf\n"); -} -void geometry_elementary_translate_cb(CALLBACK_ARGS){ - WID->set_context(menu_geometry_elementary_translate, 0); -} -void geometry_elementary_translate_point_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - printf("translate point\n"); -} -void geometry_elementary_translate_curve_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - printf("translate curve\n"); -} -void geometry_elementary_translate_surface_cb(CALLBACK_ARGS){ - WID->create_geometry_context_window(2); - printf("translate surf\n"); -} void geometry_elementary_rotate_cb(CALLBACK_ARGS){ WID->set_context(menu_geometry_elementary_rotate, 0); } @@ -643,6 +874,24 @@ void geometry_elementary_rotate_surface_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(3); printf("rot surf\n"); } + + + +void geometry_elementary_add_scale_cb(CALLBACK_ARGS){ + WID->set_context(menu_geometry_elementary_add_scale, 0); +} +void geometry_elementary_add_scale_point_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(4); + printf("scale point\n"); +} +void geometry_elementary_add_scale_curve_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(4); + printf("scale curve\n"); +} +void geometry_elementary_add_scale_surface_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(4); + printf("scale surface\n"); +} void geometry_elementary_scale_cb(CALLBACK_ARGS){ WID->set_context(menu_geometry_elementary_scale, 0); } @@ -658,6 +907,25 @@ void geometry_elementary_scale_surface_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(4); printf("scale surf\n"); } + + + + +void geometry_elementary_add_symmetry_cb(CALLBACK_ARGS){ + WID->set_context(menu_geometry_elementary_add_symmetry, 0); +} +void geometry_elementary_add_symmetry_point_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(5); + printf("symm point\n"); +} +void geometry_elementary_add_symmetry_curve_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(5); + printf("symm curve\n"); +} +void geometry_elementary_add_symmetry_surface_cb(CALLBACK_ARGS){ + WID->create_geometry_context_window(5); + printf("symm surf\n"); +} void geometry_elementary_symmetry_cb(CALLBACK_ARGS){ WID->set_context(menu_geometry_elementary_symmetry, 0); } @@ -673,6 +941,9 @@ void geometry_elementary_symmetry_surface_cb(CALLBACK_ARGS){ WID->create_geometry_context_window(5); printf("symm surf\n"); } + + + void geometry_elementary_extrude_cb(CALLBACK_ARGS){ WID->set_context(menu_geometry_elementary_extrude, 0); } diff --git a/Graphics/CreateFile.cpp b/Graphics/CreateFile.cpp index 0625a706ffe8cfa43f384c009c62ab290de2027c..1cd92be5dc809fc29ec5061436ffdb7f97bfb56b 100644 --- a/Graphics/CreateFile.cpp +++ b/Graphics/CreateFile.cpp @@ -1,4 +1,4 @@ -// $Id: CreateFile.cpp,v 1.7 2001-01-10 20:23:37 geuzaine Exp $ +// $Id: CreateFile.cpp,v 1.8 2001-01-11 14:18:07 geuzaine Exp $ #include "Gmsh.h" #include "GmshUI.h" @@ -21,7 +21,11 @@ extern XContext_T XCTX; #include "gl2ps.h" #include "gl2gif.h" + +#if !defined(WIN32) && !defined(__CYGWIN__) #include "gl2jpeg.h" +#endif + #include "gl2ppm.h" #include "gl2yuv.h" @@ -100,7 +104,7 @@ void CreateFile (char *name, int format) { break; #endif -#ifndef WIN32 +#if !defined(WIN32) && !defined(__CYGWIN__) case FORMAT_JPEG : if(!(fp = fopen(name,"wb"))) { Msg(WARNING, "Unable to Open File '%s'", name); diff --git a/Graphics/Geom.cpp b/Graphics/Geom.cpp index 8ead7781d8186eb928ecc516896d627b90558217..a952f0ff436cf669696cd53417ff35f8cfdf4f15 100644 --- a/Graphics/Geom.cpp +++ b/Graphics/Geom.cpp @@ -1,4 +1,4 @@ -// $Id: Geom.cpp,v 1.10 2001-01-10 08:50:30 geuzaine Exp $ +// $Id: Geom.cpp,v 1.11 2001-01-11 14:11:57 geuzaine Exp $ #include "Gmsh.h" #include "GmshUI.h" @@ -20,7 +20,7 @@ extern Mesh *THEM; static int Highlighted = 0; -void Draw_Point (void *a, void *b){ +void Draw_GeoPoint (void *a, void *b){ Vertex **v; char Num[100]; @@ -743,7 +743,7 @@ void Draw_Geom (Mesh *m) { if(m->status == -1) return; if(CTX.geom.points || CTX.geom.points_num) - Tree_Action(m->Points, Draw_Point); + Tree_Action(m->Points, Draw_GeoPoint); if(CTX.geom.lines || CTX.geom.lines_num) Tree_Action(m->Curves, Draw_Curve ); if(CTX.geom.surfaces || CTX.geom.surfaces_num) @@ -813,7 +813,7 @@ void HighlightEntity(Vertex *v,Curve *c, Surface *s, int permanent){ if(v){ if(permanent) v->Frozen = 1; - if(CTX.geom.highlight) Draw_Point(&v,NULL); + if(CTX.geom.highlight) Draw_GeoPoint(&v,NULL); Msg(SELECT,"Point %d {%.5g,%.5g,%.5g} (%.5g)", v->Num,v->Pos.X,v->Pos.Y,v->Pos.Z,v->lc); } else if(c){ diff --git a/Graphics/XDump.cpp b/Graphics/XDump.cpp index 5adbb10c22954bf69fa5c2d17d8a8e8bdbc005dc..6a7e1c9795d6ed877fba7429439751f660a416c6 100644 --- a/Graphics/XDump.cpp +++ b/Graphics/XDump.cpp @@ -1,4 +1,4 @@ -// $Id: XDump.cpp,v 1.4 2001-01-11 07:34:25 geuzaine Exp $ +// $Id: XDump.cpp,v 1.5 2001-01-11 14:15:09 geuzaine Exp $ /* This is a modified version for Gmsh (mainly for c++ compliance) */ @@ -56,7 +56,7 @@ * 12 so a correct file is written. BEP July-21-95 */ -#ifndef WIN32 +#ifdef _XMOTIF typedef struct { unsigned int /*long*/ pixel; @@ -452,5 +452,7 @@ void Window_Dump(Display *display, int scr, Window window, FILE *out){ */ XDestroyImage(image); } -#endif + +#endif //_XMOTIF + diff --git a/Graphics/gl2jpeg.cpp b/Graphics/gl2jpeg.cpp index 05df858de754c5e1ddda88e8268854aa8b8cb410..081323d8102dd0a63b9864387549b05850541055 100644 --- a/Graphics/gl2jpeg.cpp +++ b/Graphics/gl2jpeg.cpp @@ -1,4 +1,6 @@ -// $Id: gl2jpeg.cpp,v 1.4 2001-01-08 08:05:44 geuzaine Exp $ +// $Id: gl2jpeg.cpp,v 1.5 2001-01-11 14:18:07 geuzaine Exp $ + +#if !defined(WIN32) && !defined(__CYGWIN__) #include "Gmsh.h" #include "GmshUI.h" @@ -57,3 +59,7 @@ void create_jpeg(FILE *outfile, int width, int height, int quality){ Free(pixels); } + + +#endif //if !defined(__CYGWIN__) + diff --git a/Graphics/gl2ps.cpp b/Graphics/gl2ps.cpp index 6ba759058435be0a96d7305397090aac17d25573..d07b59b9b789cb520ca685033bb98ec5a0d8959f 100644 --- a/Graphics/gl2ps.cpp +++ b/Graphics/gl2ps.cpp @@ -1,4 +1,4 @@ -// $Id: gl2ps.cpp,v 1.6 2001-01-09 19:40:56 remacle Exp $ +// $Id: gl2ps.cpp,v 1.7 2001-01-11 14:11:57 geuzaine Exp $ /* * GL2PS, an OpenGL to Postscript Printing Library, version 0.31 @@ -24,13 +24,11 @@ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ -#ifdef WIN32 -#include <windows.h> -#endif -#include <string.h> + +#include "Gmsh.h" +#include "GmshUI.h" + #include <sys/types.h> -#include <malloc.h> -#include <math.h> #include <stdarg.h> #include <time.h> diff --git a/Graphics/gl2ps.h b/Graphics/gl2ps.h index 4499f24645f44a6d9c5646d9893dba54ab918872..9266b1474a2fc9a5ea9ceead3b995402b1fb9b63 100644 --- a/Graphics/gl2ps.h +++ b/Graphics/gl2ps.h @@ -28,7 +28,7 @@ #include <stdio.h> #include <stdlib.h> -#include <GL/gl.h> +//#include <GL/gl.h> #define GL2PS_NONE 0 diff --git a/Makefile b/Makefile index 6a14f0d89ea68fa3be66120dc7a148a6543091aa..8c1ff4817f8b05a3c0a7a985e6e785504ac4b85b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.34 2001-01-09 16:09:50 geuzaine Exp $ +# $Id: Makefile,v 1.35 2001-01-11 14:19:48 geuzaine Exp $ # ---------------------------------------------------------------------- # Makefile for Gmsh # ---------------------------------------------------------------------- @@ -110,7 +110,7 @@ gmsh2: gmsh3: $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \ - $(FLTK_LIB) $(THREAD_LIB) -lm + $(FLTK_LIB) -lm gmsh4: $(CC) -o $(GMSH_BIN_DIR)/gmsh $(GMSH_FLTK_LIB) $(MESA_LIB) \