From bbfbc4e1d516eb0734bb810e09ebee70b7cacaf8 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Tue, 5 Nov 2002 19:52:06 +0000 Subject: [PATCH] Add basic support for merging views --- Common/CommandLine.cpp | 4 +-- Common/Views.cpp | 55 ++++++++++++++++++++++++++++++++++++--- Common/Views.h | 5 ++-- Fltk/Callbacks.cpp | 16 +++++++++--- Fltk/Callbacks.h | 2 ++ Fltk/GUI.cpp | 6 ++++- Parser/OpenFile.cpp | 4 +-- Plugin/LevelsetPlugin.cpp | 4 +-- 8 files changed, 81 insertions(+), 15 deletions(-) diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index b50ef26b50..7037d756bf 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -1,4 +1,4 @@ -// $Id: CommandLine.cpp,v 1.3 2002-10-25 01:16:02 geuzaine Exp $ +// $Id: CommandLine.cpp,v 1.4 2002-11-05 19:52:06 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -210,7 +210,7 @@ void Get_Options (int argc, char *argv[], int *nbfiles) { if(argv[i] && argv[i+1]){ ParseFile(argv[i],0); if(List_Nbr(CTX.post.list)) - Write_View(1,(Post_View*)List_Pointer(CTX.post.list, 0),argv[i+1]); + WriteView(1,(Post_View*)List_Pointer(CTX.post.list, 0),argv[i+1]); else fprintf(stderr, ERROR_STR "No view to convert\n"); } diff --git a/Common/Views.cpp b/Common/Views.cpp index 854124e45e..3548adbaf4 100644 --- a/Common/Views.cpp +++ b/Common/Views.cpp @@ -1,4 +1,4 @@ -// $Id: Views.cpp,v 1.79 2002-10-12 19:41:13 geuzaine Exp $ +// $Id: Views.cpp,v 1.80 2002-11-05 19:52:06 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -588,7 +588,7 @@ Post_View *Create2DGraph(char *xname, char *yname, // INput/output -void Read_View(FILE *file, char *filename){ +void ReadView(FILE *file, char *filename){ char str[256], name[256]; int i, nb, format, size, testone, swap, t2l, t3l; double version; @@ -794,7 +794,7 @@ void Read_View(FILE *file, char *filename){ // FIXME: add a format similar to the msh format (node list + simplex list) // FIXME: add a structured format -void Write_View(int Flag_BIN, Post_View *v, char *filename){ +void WriteView(int Flag_BIN, Post_View *v, char *filename){ FILE *file; char name[256]; int i, f, One=1; @@ -1195,3 +1195,52 @@ void Post_View :: transform (double mat[3][3]){ } } +// merge lists + +static void merge(List_T *a , List_T *b){ + if(!a || !b) return; + for(int i=0;i<List_Nbr(a);i++){ + List_Add(b,List_Pointer(a,i)); + } +} + +void MergeViews(int all){ + Post_View *vm = BeginView(1); + for(int i=0; i<List_Nbr(CTX.post.list)-1; i++){ + Post_View *v = (Post_View*)List_Pointer(CTX.post.list, i); + if(all || v->Visible){ + Msg(DEBUG, "Merging view %d", i); + merge(v->SP,vm->SP); vm->NbSP += v->NbSP; + merge(v->VP,vm->VP); vm->NbVP += v->NbVP; + merge(v->TP,vm->TP); vm->NbTP += v->NbTP; + merge(v->SL,vm->SL); vm->NbSL += v->NbSL; + merge(v->VL,vm->VL); vm->NbVL += v->NbVL; + merge(v->TL,vm->TL); vm->NbTL += v->NbTL; + merge(v->ST,vm->ST); vm->NbST += v->NbST; + merge(v->VT,vm->VT); vm->NbVT += v->NbVT; + merge(v->TT,vm->TT); vm->NbTT += v->NbTT; + merge(v->SQ,vm->SQ); vm->NbSQ += v->NbSQ; + merge(v->VQ,vm->VQ); vm->NbVQ += v->NbVQ; + merge(v->TQ,vm->TQ); vm->NbTQ += v->NbTQ; + merge(v->SS,vm->SS); vm->NbSS += v->NbSS; + merge(v->VS,vm->VS); vm->NbVS += v->NbVS; + merge(v->TS,vm->TS); vm->NbTS += v->NbTS; + merge(v->SH,vm->SH); vm->NbSH += v->NbSH; + merge(v->VH,vm->VH); vm->NbVH += v->NbVH; + merge(v->TH,vm->TH); vm->NbTH += v->NbTH; + merge(v->SI,vm->SI); vm->NbSI += v->NbSI; + merge(v->VI,vm->VI); vm->NbVI += v->NbVI; + merge(v->TI,vm->TI); vm->NbTI += v->NbTI; + merge(v->SY,vm->SY); vm->NbSY += v->NbSY; + merge(v->VY,vm->VY); vm->NbVY += v->NbVY; + merge(v->TY,vm->TY); vm->NbTY += v->NbTY; + /* this more complicted: have to change the indices + merge(v->T2D,vm->T2D); + merge(v->T2C,vm->T2C); v->NbT2 += vm->NbT2; + merge(v->T3D,vm->T3D); + merge(v->T3C,vm->T3C); v->NbT2 += vm->NbT2; + */ + } + } + EndView(vm, 1, "merged.pos", "merged"); +} diff --git a/Common/Views.h b/Common/Views.h index 0752e618e6..a5207e2196 100644 --- a/Common/Views.h +++ b/Common/Views.h @@ -138,9 +138,10 @@ void DuplicateView(Post_View *v1, int withoptions); void DuplicateView(int num, int withoptions); void FreeView(Post_View *v); bool FreeView(int num); -void Read_View(FILE *file, char *filename); -void Write_View(int Flag_BIN, Post_View *v, char *filename); +void ReadView(FILE *file, char *filename); +void WriteView(int Flag_BIN, Post_View *v, char *filename); void CopyViewOptions(Post_View *src, Post_View *dest); +void MergeViews(int all); int BGMWithView (Post_View *ErrView); int CreateBGM(Post_View *ErrView, int OptiMethod, double Degree, diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 77d0c19534..4bf0445ea8 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.147 2002-11-05 02:03:46 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.148 2002-11-05 19:52:06 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -2136,7 +2136,7 @@ void view_save_ascii_cb(CALLBACK_ARGS){ goto test; } save: - Write_View(0, (Post_View*)List_Pointer(CTX.post.list,(long int)data), name); + WriteView(0, (Post_View*)List_Pointer(CTX.post.list,(long int)data), name); } } @@ -2153,7 +2153,7 @@ void view_save_binary_cb(CALLBACK_ARGS){ goto test; } save: - Write_View(1, (Post_View*)List_Pointer(CTX.post.list,(long int)data), name); + WriteView(1, (Post_View*)List_Pointer(CTX.post.list,(long int)data), name); } } @@ -2166,6 +2166,16 @@ void view_duplicate_with_options_cb(CALLBACK_ARGS){ Draw(); } +void view_merge_all_cb(CALLBACK_ARGS) { + MergeViews(1); + Draw(); +} + +void view_merge_visible_cb(CALLBACK_ARGS) { + MergeViews(0); + Draw(); +} + void view_applybgmesh_cb(CALLBACK_ARGS){ Post_View *v = (Post_View*)List_Pointer(CTX.post.list,(long int)data); if(!v->ScalarOnly || v->TextOnly){ diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h index 6060d6612b..ee2415ee1f 100644 --- a/Fltk/Callbacks.h +++ b/Fltk/Callbacks.h @@ -251,6 +251,8 @@ void view_save_ascii_cb(CALLBACK_ARGS) ; void view_save_binary_cb(CALLBACK_ARGS) ; void view_duplicate_cb(CALLBACK_ARGS) ; void view_duplicate_with_options_cb(CALLBACK_ARGS) ; +void view_merge_all_cb(CALLBACK_ARGS) ; +void view_merge_visible_cb(CALLBACK_ARGS) ; void view_applybgmesh_cb(CALLBACK_ARGS) ; void view_options_cb(CALLBACK_ARGS) ; void view_plugin_cb(CALLBACK_ARGS) ; diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index ff7aaffbc3..d1e93628eb 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.208 2002-11-03 21:55:24 geuzaine Exp $ +// $Id: GUI.cpp,v 1.209 2002-11-05 19:52:06 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -801,6 +801,10 @@ void GUI::create_menu_window(int argc, char **argv){ (Fl_Callback *)view_duplicate_cb, (void*)i, 0) ; pop->add("Duplicate/View with options", 0, (Fl_Callback *)view_duplicate_with_options_cb, (void*)i, 0) ; + pop->add("Merge/All views", 0, + (Fl_Callback *)view_merge_all_cb, (void*)i, 0) ; + pop->add("Merge/All visible views", 0, + (Fl_Callback *)view_merge_visible_cb, (void*)i, 0) ; pop->add("Save as/ASCII view...", 0, (Fl_Callback *)view_save_ascii_cb, (void*)i, 0) ; pop->add("Save as/Binary view...", 0, diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp index 36f7c27eaf..9e6da68d6f 100644 --- a/Parser/OpenFile.cpp +++ b/Parser/OpenFile.cpp @@ -1,4 +1,4 @@ -// $Id: OpenFile.cpp,v 1.32 2002-10-11 01:38:13 geuzaine Exp $ +// $Id: OpenFile.cpp,v 1.33 2002-11-05 19:52:06 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -77,7 +77,7 @@ int ParseFile(char *f, int silent){ } else if(!strncmp(String, "$PostFormat", 11) || !strncmp(String, "$View", 5)){ - Read_View(yyin, yyname); + ReadView(yyin, yyname); status = 0; } else{ diff --git a/Plugin/LevelsetPlugin.cpp b/Plugin/LevelsetPlugin.cpp index 29937a5c63..c27fce0e9f 100644 --- a/Plugin/LevelsetPlugin.cpp +++ b/Plugin/LevelsetPlugin.cpp @@ -1,4 +1,4 @@ -// $Id: LevelsetPlugin.cpp,v 1.24 2002-05-20 18:28:30 geuzaine Exp $ +// $Id: LevelsetPlugin.cpp,v 1.25 2002-11-05 19:52:06 geuzaine Exp $ // // Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle // @@ -38,7 +38,7 @@ void GMSH_LevelsetPlugin::Save () { if(processed){ Msg(INFO, "Writing file '%s'", OutputFileName); - Write_View(0, processed, OutputFileName); + WriteView(0, processed, OutputFileName); Msg(INFO, "Levelset ouput complete '%s'", OutputFileName); Msg(STATUS2, "Wrote '%s'", OutputFileName); } -- GitLab