From 69f257317c2220f226a5b55f7a30b474a2b83c8b Mon Sep 17 00:00:00 2001 From: gforney Date: Fri, 12 Apr 2024 17:06:14 -0400 Subject: [PATCH 01/15] smokeview source: fix to script parsing - addresses smokeview issue 1867 --- Source/smokeview/IOscript.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Source/smokeview/IOscript.c b/Source/smokeview/IOscript.c index 0114e78fd6..92e05cf743 100644 --- a/Source/smokeview/IOscript.c +++ b/Source/smokeview/IOscript.c @@ -261,6 +261,7 @@ void InitKeywords(void){ NewMemory((void **)&keywordinfo, 1000*sizeof(keyworddata)); nkeywordinfo++; + InitKeyword("dummy", -999, 0); // dummy entry used to report errors // 3d smoke InitKeyword("LOAD3DSMOKE", SCRIPT_LOAD3DSMOKE, 1); // documented InitKeyword("LOADVOLSMOKE", SCRIPT_LOADVOLSMOKE, 1); // documented @@ -501,7 +502,7 @@ int CheckScript(char *file){ /* ------------------ GetScriptKeyword ------------------------ */ keyworddata *GetScriptKeyword(FILE *stream){ - char *keyword, keyword_buffer[1024]; + char *keyword=NULL, keyword_buffer[1024]; for(;;){ char *comment; @@ -910,8 +911,8 @@ int CompileScript(char *scriptfile){ #endif scripti->cval= GetCharPointer(param_buffer); } - } break; + } // SCENECLIP // clip mode (int) From 713cbd4a9f6746498d4966cf51b5b2d6862873c1 Mon Sep 17 00:00:00 2001 From: gforney Date: Fri, 12 Apr 2024 22:21:09 -0400 Subject: [PATCH 02/15] smokeview source: remove some inefficiencies in particle loading --- Source/smokeview/IOpart.c | 7 +++++++ Source/smokeview/options.h | 1 + 2 files changed, 8 insertions(+) diff --git a/Source/smokeview/IOpart.c b/Source/smokeview/IOpart.c index 3c2a03a4c6..343c282229 100644 --- a/Source/smokeview/IOpart.c +++ b/Source/smokeview/IOpart.c @@ -1965,10 +1965,12 @@ FILE_SIZE ReadPart(char *file_arg, int ifile_arg, int loadflag_arg, int *errorco parti->loaded = 0; parti->display=0; +#ifndef pp_PART_SPEEDUP THREADcontrol(partload_threads, THREAD_LOCK); plotstate=GetPlotState(DYNAMIC_PLOTS); updatemenu=1; THREADcontrol(partload_threads, THREAD_UNLOCK); +#endif FREEMEMORY(parti->times); FREEMEMORY(parti->times_map); @@ -1981,6 +1983,11 @@ FILE_SIZE ReadPart(char *file_arg, int ifile_arg, int loadflag_arg, int *errorco updatemenu = 1; UpdatePart5Extremes(); PrintMemoryInfo; +#ifdef pp_PART_SPEEDUP + THREADcontrol(partload_threads, THREAD_LOCK); + plotstate=GetPlotState(DYNAMIC_PLOTS); + THREADcontrol(partload_threads, THREAD_UNLOCK); +#endif } return 0.0; } diff --git a/Source/smokeview/options.h b/Source/smokeview/options.h index 1359bae691..e359e252af 100644 --- a/Source/smokeview/options.h +++ b/Source/smokeview/options.h @@ -21,6 +21,7 @@ #define pp_FAST // set fast startup by default //#define pp_DPRINT // turn on debug print (file, line number) //#define pp_LOAD_INC // add menu item for loading new data +#define pp_PART_SPEEDUP // improve efficiency of loading particles #define pp_GPU // support the GPU #define pp_THREAD // turn on multi-threading #ifdef pp_GPU From b81a303f6b36e05edd50f0a5157166d24ac5f4da Mon Sep 17 00:00:00 2001 From: gforney Date: Sat, 13 Apr 2024 09:27:14 -0400 Subject: [PATCH 03/15] smokeview source: add pp_SMOKE directive --- Source/smokeview/options.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Source/smokeview/options.h b/Source/smokeview/options.h index e359e252af..1c5eafdda5 100644 --- a/Source/smokeview/options.h +++ b/Source/smokeview/options.h @@ -22,6 +22,7 @@ //#define pp_DPRINT // turn on debug print (file, line number) //#define pp_LOAD_INC // add menu item for loading new data #define pp_PART_SPEEDUP // improve efficiency of loading particles +#define pp_SMOKE_SPEEDUP // improve efficiency of loading 3d smoke #define pp_GPU // support the GPU #define pp_THREAD // turn on multi-threading #ifdef pp_GPU From 96ce526334f0ecfcedf56c7dbdaba8fec2618811 Mon Sep 17 00:00:00 2001 From: gforney Date: Sat, 13 Apr 2024 09:28:52 -0400 Subject: [PATCH 04/15] smokeview source: remove pp_OSX_1X directive --- Source/smokeview/command_args.c | 2 -- Source/smokeview/options.h | 1 - 2 files changed, 3 deletions(-) diff --git a/Source/smokeview/command_args.c b/Source/smokeview/command_args.c index 2ca4dee44d..3249822200 100644 --- a/Source/smokeview/command_args.c +++ b/Source/smokeview/command_args.c @@ -51,11 +51,9 @@ CommandlineArgs ParseCommandlineNew(int argc, char **argv, char *message, strcpy(args.prog, argv[0]); } int i; -#ifdef pp_OSX_1X #ifdef pp_OSX_HIGHRES args.x1 = true; args.x2 = false; -#endif #endif for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-ini") == 0) { diff --git a/Source/smokeview/options.h b/Source/smokeview/options.h index 1c5eafdda5..0eea43dcfd 100644 --- a/Source/smokeview/options.h +++ b/Source/smokeview/options.h @@ -10,7 +10,6 @@ //#define pp_PARTBOUND_MULTI // compute particle bounds in the background //#define pp_LUA // turn on LUA option #define pp_CHOPFIX // fix to saving chop values -#define pp_OSX_1X // use -1x option by default on macs //#define pp_SLICE_MENU // make slice menu formation consistent (sort step, build step) #define pp_SLICE_MULTI // load slice files in parallel //#define pp_CSV_MENU // add menu for loading CSV files From 8d8746111cb6b698f3a059588176fe1dc9d3c0f0 Mon Sep 17 00:00:00 2001 From: gforney Date: Sat, 13 Apr 2024 22:49:39 -0400 Subject: [PATCH 05/15] smokeview source: add load all x, y, z, xyz slice menus --- Source/smokeview/menus.c | 194 ++++++++++++++++++++++++++++++- Source/smokeview/options.h | 1 + Source/smokeview/smokeviewdefs.h | 3 + Source/smokeview/smokeviewvars.h | 5 + Source/smokeview/structures.h | 10 ++ 5 files changed, 211 insertions(+), 2 deletions(-) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index 89b716d260..f1d9cdad52 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8012,15 +8012,189 @@ void InitDuplicateSliceMenu(int *duplicateslicemenuptr){ } } +/* ----------------------- CompareSubSliceMenu ----------------------------- */ + +#ifdef pp_LOADALL_SLICE +int CompareSubSliceMenu(const void *arg1, const void *arg2){ + subslicemenudata *subslicemenui, *subslicemenuj; + char *labeli, *labelj; + + subslicemenui = (subslicemenudata *)arg1; + subslicemenuj = (subslicemenudata *)arg2; + labeli = subslicemenui->menulabel; + labelj = subslicemenuj->menulabel; + return strcmp(labeli, labelj); +} + +/* ------------------ InitLoadMultiSliceMenu ------------------------ */ + +void InitSubSliceMenuInfo(){ + int i; + + if(nsliceinfo == 0 || subslicemenuinfo != NULL)return; + NewMemory((void **)&subslicemenuinfo, nsliceinfo * sizeof(subslicemenudata)); + nsubslicex = 0; + nsubslicey = 0; + nsubslicez = 0; + nsubslicexyz = 0; + for(i = 0;iislices[0]; + if(i>0)sdim1 = sliceinfo+(multisliceinfo+i-1)->islices[0]; + + if(i==0||strcmp(sd->label.longlabel, sdim1->label.longlabel)!=0){ + si = subslicemenuinfo + nsubslicemenuinfo; + si->menulabel = sd->label.longlabel; + si->shortlabel = sd->label.shortlabel; + si->havex = 0; + si->havey = 0; + si->havez = 0; + si->havexyz = 0; + if(sd->slice_filetype == SLICE_NODE_CENTER || sd->slice_filetype == SLICE_CELL_CENTER){ + si->slicetype = sd->slice_filetype-1; + } + else{ + si->slicetype = SLICE_UNKNOWN; + } + nsubslicemenuinfo++; + continue; + } + si = subslicemenuinfo + nsubslicemenuinfo-1; + if(sd->volslice == 0){ + if(sd->idir == 1){ + si->havex = 1; + nsubslicex++; + } + if(sd->idir == 2){ + si->havey = 1; + nsubslicey++; + } + if(sd->idir == 3){ + si->havez = 1; + nsubslicez++; + } + if(si->havex == 1 || si->havey == 1 || si->havez == 1){ + si->havexyz = 1; + nsubslicexyz++; + } + } + } + ResizeMemory((void **)&subslicemenuinfo, nsubslicemenuinfo * sizeof(subslicemenudata)); + qsort((subslicemenudata *)subslicemenuinfo, (int)nsubslicemenuinfo, sizeof(subslicemenudata), CompareSubSliceMenu); +} + +/* ------------------ GetSliceBoundType ------------------------ */ + +int GetSliceBoundType(char *label){ + int i; + + for(i=0;i0){ + CREATEMENU(loadsubslicexmenu, LoadAllSliceX); + *loadsubslicexmenuptr = loadsubslicexmenu; + for(i=0;ihavex==1)glutAddMenuEntry(si->menulabel,i); + } + CREATEMENU(loadsubsliceymenu, LoadAllSliceY); + *loadsubsliceymenuptr = loadsubsliceymenu; + for(i = 0;i < nsubslicemenuinfo;i++){ + subslicemenudata *si; + + si = subslicemenuinfo + i; + if(si->havey == 1)glutAddMenuEntry(si->menulabel, i); + } + CREATEMENU(loadsubslicezmenu, LoadAllSliceZ); + *loadsubslicezmenuptr = loadsubslicezmenu; + for(i = 0;i < nsubslicemenuinfo;i++){ + subslicemenudata *si; + + si = subslicemenuinfo + i; + if(si->havez == 1)glutAddMenuEntry(si->menulabel, i); + } + CREATEMENU(loadsubslicexyzmenu, LoadAllSliceXYZ); + *loadsubslicexyzmenuptr = loadsubslicexyzmenu; + for(i = 0;i < nsubslicemenuinfo;i++){ + subslicemenudata *si; + si = subslicemenuinfo + i; + if(si->havexyz == 1)glutAddMenuEntry(si->menulabel, i); + } + } +#endif CREATEMENU(loadmultislicemenu, LoadMultiSliceMenu); *loadmultislicemenuptr = loadmultislicemenu; nloadsubmslicemenu = 0; @@ -8061,6 +8235,15 @@ void InitLoadMultiSliceMenu(int *loadmultislicemenuptr, int *loadsubmslicemenu, } } +#ifdef pp_LOADALL_SLICE + if(nsubslicemenuinfo>0&&(nsubslicex>0||nsubslicey>0||nsubslicez>0||nsubslicexyz>0)){ + glutAddMenuEntry("-", MENU_DUMMY); + if(nsubslicex>0)GLUTADDSUBMENU("Load all x slices", loadsubslicexmenu); + if(nsubslicey>0)GLUTADDSUBMENU("Load all y slices", loadsubsliceymenu); + if(nsubslicez>0)GLUTADDSUBMENU("Load all z slices", loadsubslicezmenu); + if(nsubslicexyz>0)GLUTADDSUBMENU("Load all x,y,z slices", loadsubslicexyzmenu); + } +#endif if(nmultisliceinfo>0)glutAddMenuEntry("-", MENU_DUMMY); GLUTADDSUBMENU(_("Skip"), sliceskipmenu); @@ -8497,6 +8680,9 @@ static int render_startmenu = 0; static int compressmenu=0; #endif static int showhideslicemenu=0, sliceskipmenu=0, showvslicemenu=0; +#ifdef pp_LOADALL_SLICE +static int loadsubslicexmenu=0, loadsubsliceymenu=0, loadsubslicezmenu=0, loadsubslicexyzmenu=0; +#endif static int plot3dshowmenu=0, staticvariablemenu=0, helpmenu=0, webhelpmenu=0, keyboardhelpmenu=0, mousehelpmenu=0; static int vectorskipmenu=0,unitsmenu=0; static int sliceloadoptionmenu = 0, vectorsliceloadoptionmenu = 0; @@ -11705,7 +11891,11 @@ static int menu_count=0; InitDuplicateSliceMenu(&duplicateslicemenu); } InitLoadMultiSliceMenu(&loadmultislicemenu, loadsubmslicemenu, loadsubpatchmenu_s, nsubpatchmenus_s, - sliceskipmenu, sliceloadoptionmenu, duplicateslicemenu, loadslicemenu, nmultisliceloaded, unloadmultislicemenu); + sliceskipmenu, sliceloadoptionmenu, duplicateslicemenu, loadslicemenu, nmultisliceloaded, unloadmultislicemenu +#ifdef pp_LOADALL_SLICE + ,&loadsubslicexmenu, &loadsubsliceymenu, &loadsubslicezmenu, &loadsubslicexyzmenu +#endif + ); } diff --git a/Source/smokeview/options.h b/Source/smokeview/options.h index 1359bae691..2ab1f587f4 100644 --- a/Source/smokeview/options.h +++ b/Source/smokeview/options.h @@ -26,6 +26,7 @@ #ifdef pp_GPU #define pp_GPUTHROTTLE // pp_GPU directive must also be set #endif +#define pp_LOADALL_SLICE // add menus to load all x, y, z slice files #define pp_ONEBUFFER // consolidate memory allocations when parsing .smv file #define pp_MESH_BOUNDARY // display boundary files on blockages that are on mesh boundaries #define pp_MESHSKIP // compute mesh skip arrays to display vector slices uniformly diff --git a/Source/smokeview/smokeviewdefs.h b/Source/smokeview/smokeviewdefs.h index 3c03c355bc..8fc05f58cb 100644 --- a/Source/smokeview/smokeviewdefs.h +++ b/Source/smokeview/smokeviewdefs.h @@ -521,6 +521,9 @@ EXTERNCPP void _Sniff_Errors(const char *whereat, const char *file, int line); #define FED_SLICE 0 #define FED_ISO 1 +#ifdef pp_LOADALL_SLICE +#define SLICE_UNKNOWN -1 +#endif #define SLICE_NODE_CENTER 1 #define SLICE_CELL_CENTER 2 #define SLICE_TERRAIN 4 diff --git a/Source/smokeview/smokeviewvars.h b/Source/smokeview/smokeviewvars.h index 48c6d095b1..bfd689adc7 100644 --- a/Source/smokeview/smokeviewvars.h +++ b/Source/smokeview/smokeviewvars.h @@ -239,6 +239,11 @@ SVEXTERN char SVDECL(**movie_queues, NULL), movie_htmldir[256], movie_email[256] SVEXTERN char movie_basename[256], movie_ssf_script[256], movie_bash_script[256], movie_ini_filename[256]; SVEXTERN slicedata SVDECL(*movie_sliceinfo, NULL); +#ifdef pp_LOADALL_SLICE +SVEXTERN subslicemenudata SVDECL(*subslicemenuinfo, NULL); +SVEXTERN int SVDECL(nsubslicemenuinfo, 0); +SVEXTERN int SVDECL(nsubslicex, 0), SVDECL(nsubslicey, 0), SVDECL(nsubslicez, 0), SVDECL(nsubslicexyz, 0); +#endif SVEXTERN slicemenudata SVDECL(**slicemenu_sorted, NULL); SVEXTERN int SVDECL(handle_slice_files, 1); SVEXTERN int SVDECL(plot_option, 0); diff --git a/Source/smokeview/structures.h b/Source/smokeview/structures.h index 797fe0546a..79a7883f5f 100644 --- a/Source/smokeview/structures.h +++ b/Source/smokeview/structures.h @@ -1475,6 +1475,16 @@ typedef struct _slicemenudata { slicedata *sliceinfo; } slicemenudata; +#ifdef pp_LOADALL_SLICE +/* -------------------------- _subslicemenudata ------------------------------------ */ + +typedef struct _subslicemenudata { + char *menulabel, *shortlabel; + int slicetype; + int havex, havey, havez, havexyz; +} subslicemenudata; +#endif + /* -------------------------- multislicedata ------------------------------------ */ typedef struct _multislicedata { From 1d01dcb14da65ebe5f9a9157bd0303056a98fc2d Mon Sep 17 00:00:00 2001 From: gforney Date: Sat, 13 Apr 2024 22:58:54 -0400 Subject: [PATCH 06/15] smokeview source: fix calling arguments to LoadAllSliceXYZ --- Source/smokeview/menus.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index f1d9cdad52..a5fa747c0a 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8136,11 +8136,10 @@ void LoadAllSliceZ(int var){ /* ------------------ LoadAllSliceXYZ ------------------------ */ -int LoadAllSliceXYZ(int var){ +void LoadAllSliceXYZ(int var){ if(SetupLoadAllSlices(var)==0)return 0; sliceload_dir=3; LoadAllMultiSliceMenu(); - return 1; } #endif From 8f3da85b7991c4f44fbe1646d8bd175356dca8b8 Mon Sep 17 00:00:00 2001 From: gforney Date: Sat, 13 Apr 2024 23:02:48 -0400 Subject: [PATCH 07/15] smokeview source: change return 0 to return in a load all slice routine --- Source/smokeview/menus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index a5fa747c0a..8444f74fdb 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8137,7 +8137,7 @@ void LoadAllSliceZ(int var){ /* ------------------ LoadAllSliceXYZ ------------------------ */ void LoadAllSliceXYZ(int var){ - if(SetupLoadAllSlices(var)==0)return 0; + if(SetupLoadAllSlices(var)==0)return; sliceload_dir=3; LoadAllMultiSliceMenu(); } From 593e17165958eb4324e7dd39812eed185447133b Mon Sep 17 00:00:00 2001 From: gforney Date: Sat, 13 Apr 2024 23:24:26 -0400 Subject: [PATCH 08/15] smokeview source: add timing code to init load all slice routine --- Source/smokeview/menus.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index 8444f74fdb..2707451dae 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8032,6 +8032,7 @@ void InitSubSliceMenuInfo(){ int i; if(nsliceinfo == 0 || subslicemenuinfo != NULL)return; + INIT_PRINT_TIMER(subslicemenu_timer); NewMemory((void **)&subslicemenuinfo, nsliceinfo * sizeof(subslicemenudata)); nsubslicex = 0; nsubslicey = 0; @@ -8083,6 +8084,7 @@ void InitSubSliceMenuInfo(){ } ResizeMemory((void **)&subslicemenuinfo, nsubslicemenuinfo * sizeof(subslicemenudata)); qsort((subslicemenudata *)subslicemenuinfo, (int)nsubslicemenuinfo, sizeof(subslicemenudata), CompareSubSliceMenu); + PRINT_TIMER(subslicemenu_timer, "Initialize load all slice menus"); } /* ------------------ GetSliceBoundType ------------------------ */ From 4f82e2d65e2c8924c5bdcf49094489d73e064c9b Mon Sep 17 00:00:00 2001 From: gforney Date: Sat, 13 Apr 2024 23:43:29 -0400 Subject: [PATCH 09/15] smokeview source: fix typo in comment --- Source/smokeview/menus.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index 2707451dae..c89422f881 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8026,7 +8026,7 @@ int CompareSubSliceMenu(const void *arg1, const void *arg2){ return strcmp(labeli, labelj); } -/* ------------------ InitLoadMultiSliceMenu ------------------------ */ +/* ------------------ InitSubSliceMenuInfo ------------------------ */ void InitSubSliceMenuInfo(){ int i; From ada7f23619a9385ef8ae2259dba9ca74df3cfdf6 Mon Sep 17 00:00:00 2001 From: gforney Date: Sun, 14 Apr 2024 17:47:56 -0400 Subject: [PATCH 10/15] smokeview source: update load all slice dialog widgets when corresponding menus are used, simplify load all slice call back routines (condense 4 routines into 1) --- Source/smokeview/glui_bounds.cpp | 22 +++++++-- Source/smokeview/menus.c | 78 +++++++++++++------------------- Source/smokeview/smokeheaders.h | 3 ++ 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/Source/smokeview/glui_bounds.cpp b/Source/smokeview/glui_bounds.cpp index 01883e1a6b..5b4f788df6 100644 --- a/Source/smokeview/glui_bounds.cpp +++ b/Source/smokeview/glui_bounds.cpp @@ -2673,10 +2673,11 @@ GLUI_EditText *EDIT_ini=NULL; GLUI_EditText *EDIT_renderdir=NULL; GLUI_EditText *EDIT_rendersuffix=NULL; -GLUI_Checkbox* CHECKBOX_sortslices = NULL; -GLUI_Checkbox* CHECKBOX_sortslices_debug = NULL; -GLUI_Checkbox* CHECKBOX_visColorbarHorizontal2 = NULL; -GLUI_Checkbox* CHECKBOX_visColorbarVertical2 = NULL; +GLUI_Checkbox *CHECKBOX_sliceload_isvector = NULL; +GLUI_Checkbox *CHECKBOX_sortslices = NULL; +GLUI_Checkbox *CHECKBOX_sortslices_debug = NULL; +GLUI_Checkbox *CHECKBOX_visColorbarHorizontal2 = NULL; +GLUI_Checkbox *CHECKBOX_visColorbarVertical2 = NULL; GLUI_Checkbox *CHECKBOX_show_boundary_outline=NULL; GLUI_Checkbox *CHECKBOX_use_partload_threads = NULL; GLUI_Checkbox *CHECKBOX_partfast = NULL; @@ -2865,6 +2866,17 @@ int nparticleprocinfo=0; procdata subboundprocinfo[5]; int nsubboundprocinfo=0; +#ifdef pp_LOADALL_SLICE +/* ------------------ GLUIUpdateLoadAllSlices ------------------------ */ + +extern "C" void GLUIUpdateLoadAllSlices(void){ + if(RADIO_filetype!=NULL)RADIO_filetype->set_int_val(sliceload_filetype); + if(LISTBOX_sliceload!=NULL)LISTBOX_sliceload->set_int_val(sliceload_boundtype); + if(CHECKBOX_sliceload_isvector!=NULL)CHECKBOX_sliceload_isvector->set_int_val(sliceload_isvector); + if(RADIO_sliceload_dir!=NULL)RADIO_sliceload_dir->set_int_val(sliceload_dir); +} +#endif + /* ------------------ GLUIUpdatePartPointSize ------------------------ */ extern "C" void GLUIUpdatePartPointSize(void){ @@ -5146,7 +5158,7 @@ hvacductboundsCPP.setup("hvac", ROLLOUT_hvacduct, hvacductbounds_cpp, nhvacductb } PANEL_sliceload_option = glui_bounds->add_panel_to_panel(ROLLOUT_slice_settings, "", true); glui_bounds->add_button_to_panel(PANEL_sliceload_option, _("Load all"), SLICE_LOADALL, SliceLoadCB); - glui_bounds->add_checkbox_to_panel(PANEL_sliceload_option, "vector slice", &sliceload_isvector); + CHECKBOX_sliceload_isvector = glui_bounds->add_checkbox_to_panel(PANEL_sliceload_option, "vector slice", &sliceload_isvector); PANEL_slice_xyz = glui_bounds->add_panel_to_panel(PANEL_sliceload_option, "orientation", true); RADIO_sliceload_dir = glui_bounds->add_radiogroup_to_panel(PANEL_slice_xyz, &sliceload_dir); RADIOBUTTON_sliceload_x = glui_bounds->add_radiobutton_to_group(RADIO_sliceload_dir, "x"); diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index c89422f881..d88857e46f 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8098,49 +8098,21 @@ int GetSliceBoundType(char *label){ return -1; } -/* ------------------ SetupLoadAllSlices ------------------------ */ +/* ------------------ LoadAllSlices ------------------------ */ -int SetupLoadAllSlices(int var){ +void LoadAllSlices(int var){ int bound_type; - - bound_type = GetSliceBoundType(subslicemenuinfo[var].shortlabel); - if(bound_type<0)return 0; - if(subslicemenuinfo[var].slicetype == SLICE_UNKNOWN)return 0; - sliceload_filetype = subslicemenuinfo[var].slicetype; + int quantity_index; + + sliceload_dir = var%4; + quantity_index = var / 4; + bound_type = GetSliceBoundType(subslicemenuinfo[quantity_index].shortlabel); + if(bound_type<0)return; + if(subslicemenuinfo[quantity_index].slicetype == SLICE_UNKNOWN)return; + sliceload_filetype = subslicemenuinfo[quantity_index].slicetype; sliceload_boundtype = bound_type; sliceload_isvector = 0; - return 1; -} - -/* ------------------ LoadAllSliceX ------------------------ */ - -void LoadAllSliceX(int var){ - if(SetupLoadAllSlices(var)==0)return; - sliceload_dir=0; - LoadAllMultiSliceMenu(); -} - -/* ------------------ LoadAllSliceY ------------------------ */ - -void LoadAllSliceY(int var){ - if(SetupLoadAllSlices(var)==0)return; - sliceload_dir=1; - LoadAllMultiSliceMenu(); -} - -/* ------------------ LoadAllSliceZ ------------------------ */ - -void LoadAllSliceZ(int var){ - if(SetupLoadAllSlices(var)==0)return; - sliceload_dir=2; - LoadAllMultiSliceMenu(); -} - -/* ------------------ LoadAllSliceXYZ ------------------------ */ - -void LoadAllSliceXYZ(int var){ - if(SetupLoadAllSlices(var)==0)return; - sliceload_dir=3; + GLUIUpdateLoadAllSlices(); LoadAllMultiSliceMenu(); } #endif @@ -8162,37 +8134,49 @@ void InitLoadMultiSliceMenu(int *loadmultislicemenuptr, int *loadsubmslicemenu, InitSubSliceMenuInfo(); if(nsubslicemenuinfo>0){ - CREATEMENU(loadsubslicexmenu, LoadAllSliceX); + +//*** load all x slices + + CREATEMENU(loadsubslicexmenu, LoadAllSlices); *loadsubslicexmenuptr = loadsubslicexmenu; for(i=0;ihavex==1)glutAddMenuEntry(si->menulabel,i); + if(si->havex==1)glutAddMenuEntry(si->menulabel,4*i); } - CREATEMENU(loadsubsliceymenu, LoadAllSliceY); + +//*** load all y slices + + CREATEMENU(loadsubsliceymenu, LoadAllSlices); *loadsubsliceymenuptr = loadsubsliceymenu; for(i = 0;i < nsubslicemenuinfo;i++){ subslicemenudata *si; si = subslicemenuinfo + i; - if(si->havey == 1)glutAddMenuEntry(si->menulabel, i); + if(si->havey == 1)glutAddMenuEntry(si->menulabel, 4*i+1); } - CREATEMENU(loadsubslicezmenu, LoadAllSliceZ); + +//*** load all z slices + + CREATEMENU(loadsubslicezmenu, LoadAllSlices); *loadsubslicezmenuptr = loadsubslicezmenu; for(i = 0;i < nsubslicemenuinfo;i++){ subslicemenudata *si; si = subslicemenuinfo + i; - if(si->havez == 1)glutAddMenuEntry(si->menulabel, i); + if(si->havez == 1)glutAddMenuEntry(si->menulabel, 4*i+2); } - CREATEMENU(loadsubslicexyzmenu, LoadAllSliceXYZ); + +//*** load all x,y,z slices + + CREATEMENU(loadsubslicexyzmenu, LoadAllSlices); *loadsubslicexyzmenuptr = loadsubslicexyzmenu; for(i = 0;i < nsubslicemenuinfo;i++){ subslicemenudata *si; si = subslicemenuinfo + i; - if(si->havexyz == 1)glutAddMenuEntry(si->menulabel, i); + if(si->havexyz == 1)glutAddMenuEntry(si->menulabel, 4*i+3); } } #endif diff --git a/Source/smokeview/smokeheaders.h b/Source/smokeview/smokeheaders.h index e6a4190f5c..af2b096b0d 100644 --- a/Source/smokeview/smokeheaders.h +++ b/Source/smokeview/smokeheaders.h @@ -21,6 +21,9 @@ EXTERNCPP void *ReadVolsmokeAllFramesAllMeshes2(void *arg); EXTERNCPP void *SetupAllIsosurfaces(void *arg); //*** glui_bounds.cpp headers +#ifdef pp_LOADALL_SLICE +EXTERNCPP void GLUIUpdateLoadAllSlices(void); +#endif EXTERNCPP void GLUIUpdateMeshBounds(void); EXTERNCPP void DrawBoxMinMax(float *bbmin, float *bbmax, float *box_color); EXTERNCPP void DrawBox(float *bb, float *box_color); From cbe0818dbfd4ac36718bcded56fa7d8443fc0581 Mon Sep 17 00:00:00 2001 From: gforney Date: Sun, 14 Apr 2024 20:46:36 -0400 Subject: [PATCH 11/15] smokeview source: add load all vector slice menus --- Source/smokeview/menus.c | 161 ++++++++++++++++++++++++++++++- Source/smokeview/smokeviewvars.h | 5 +- 2 files changed, 161 insertions(+), 5 deletions(-) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index d88857e46f..6291c66583 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -5097,7 +5097,7 @@ void LoadSliceMenu(int value){ GLUTSETCURSOR(GLUT_CURSOR_LEFT_ARROW); } -/* ------------------ LoadVMultiSliceMenu2 ------------------------ */ +/* ------------------ LoadMultiVSliceMenu ------------------------ */ void LoadMultiVSliceMenu(int value){ int i; @@ -8087,6 +8087,73 @@ void InitSubSliceMenuInfo(){ PRINT_TIMER(subslicemenu_timer, "Initialize load all slice menus"); } +#ifdef pp_LOADALL_SLICE +/* ------------------ InitSubVectorSliceMenuInfo ------------------------ */ + +void InitSubVectorSliceMenuInfo(){ + int i; + + if(nmultivsliceinfo == 0 || subvectorslicemenuinfo != NULL)return; + INIT_PRINT_TIMER(subvectorslicemenu_timer); + NewMemory((void **)&subvectorslicemenuinfo, nmultivsliceinfo * sizeof(subslicemenudata)); + nsubvectorslicex = 0; + nsubvectorslicey = 0; + nsubvectorslicez = 0; + nsubvectorslicexyz = 0; + for(i = 0; iivslices[0]; + si = sliceinfo+vi->ival; + + if(i>0){ + vim1 = vsliceinfo+(multivsliceinfo+i-1)->ivslices[0]; + sim1 = sliceinfo+vim1->ival; + } + if(i==0||(i>0&&strcmp(si->label.longlabel, sim1->label.longlabel)!=0)){ + vd = subvectorslicemenuinfo + nsubvectorslicemenuinfo; + vd->menulabel = si->label.longlabel; + vd->shortlabel = si->label.shortlabel; + vd->havex = 0; + vd->havey = 0; + vd->havez = 0; + vd->havexyz = 0; + if(si->slice_filetype == SLICE_NODE_CENTER || si->slice_filetype == SLICE_CELL_CENTER){ + vd->slicetype = si->slice_filetype-1; + } + else{ + vd->slicetype = SLICE_UNKNOWN; + } + nsubvectorslicemenuinfo++; + continue; + } + vd = subvectorslicemenuinfo + nsubvectorslicemenuinfo - 1; + if(si->volslice == 0){ + if(si->idir == 1){ + vd->havex = 1; + nsubvectorslicex++; + } + if(si->idir == 2){ + vd->havey = 1; + nsubvectorslicey++; + } + if(si->idir == 3){ + vd->havez = 1; + nsubvectorslicez++; + } + if(vd->havex == 1 || vd->havey == 1 || vd->havez == 1){ + vd->havexyz = 1; + nsubvectorslicexyz++; + } + } + } + ResizeMemory((void **)&subvectorslicemenuinfo, nsubvectorslicemenuinfo * sizeof(subslicemenudata)); + qsort((subslicemenudata *)subvectorslicemenuinfo, (int)nsubvectorslicemenuinfo, sizeof(subslicemenudata), CompareSubSliceMenu); + PRINT_TIMER(subvectorslicemenu_timer, "Initialize load all vector slice menus"); +} +#endif /* ------------------ GetSliceBoundType ------------------------ */ int GetSliceBoundType(char *label){ @@ -8115,6 +8182,24 @@ void LoadAllSlices(int var){ GLUIUpdateLoadAllSlices(); LoadAllMultiSliceMenu(); } + +/* ------------------ LoadAllVectorSlices ------------------------ */ + +void LoadAllVectorSlices(int var){ + int bound_type; + int quantity_index; + + sliceload_dir = var % 4; + quantity_index = var / 4; + bound_type = GetSliceBoundType(subvectorslicemenuinfo[quantity_index].shortlabel); + if(bound_type < 0)return; + if(subvectorslicemenuinfo[quantity_index].slicetype == SLICE_UNKNOWN)return; + sliceload_filetype = subvectorslicemenuinfo[quantity_index].slicetype; + sliceload_boundtype = bound_type; + sliceload_isvector = 1; + GLUIUpdateLoadAllSlices(); + LoadAllMultiVSliceMenu(); +} #endif /* ------------------ InitLoadMultiSliceMenu ------------------------ */ @@ -8417,11 +8502,65 @@ void InitMultiVectorSubMenu(int **loadsubmvslicemenuptr){ /* ------------------ InitMultiVectorLoadMenu ------------------------ */ -void InitMultiVectorLoadMenu(int *loadmultivslicemenuptr, int *loadsubmvslicemenu, int duplicatevectorslicemenu, int vsliceloadmenu, int sliceloadoptionmenu, int unloadmultivslicemenu){ +void InitMultiVectorLoadMenu(int *loadmultivslicemenuptr, int *loadsubmvslicemenu, int duplicatevectorslicemenu, + int vsliceloadmenu, int sliceloadoptionmenu, int unloadmultivslicemenu +#ifdef pp_LOADALL_SLICE + , int *loadsubvectorslicexmenuptr, int *loadsubvectorsliceymenuptr, int *loadsubvectorslicezmenuptr, int *loadsubvectorslicexyzmenuptr +#endif + ){ int loadmultivslicemenu; int nloadsubmvslicemenu; int i; +#ifdef pp_LOADALL_SLICE + int loadsubvectorslicexmenu, loadsubvectorsliceymenu, loadsubvectorslicezmenu, loadsubvectorslicexyzmenu; + + InitSubVectorSliceMenuInfo(); + +//*** load all x vector slices + + CREATEMENU(loadsubvectorslicexmenu, LoadAllVectorSlices); + *loadsubvectorslicexmenuptr = loadsubvectorslicexmenu; + for(i=0;ihavex==1)glutAddMenuEntry(si->menulabel,4*i); + } + +//*** load all y vector slices + + CREATEMENU(loadsubvectorsliceymenu, LoadAllVectorSlices); + *loadsubvectorsliceymenuptr = loadsubvectorsliceymenu; + for(i=0;ihavey==1)glutAddMenuEntry(si->menulabel,4*i+1); + } + +//*** load all z vector slices + + CREATEMENU(loadsubvectorslicezmenu, LoadAllVectorSlices); + *loadsubvectorslicezmenuptr = loadsubvectorslicezmenu; + for(i=0;ihavez==1)glutAddMenuEntry(si->menulabel,4*i+2); + } + +//*** load all x,y,z vector slices + + CREATEMENU(loadsubvectorslicexyzmenu, LoadAllVectorSlices); + *loadsubvectorslicexyzmenuptr = loadsubvectorslicexyzmenu; + for(i=0;ihavexyz==1)glutAddMenuEntry(si->menulabel,4*i+3); + } +#endif nloadsubmvslicemenu = 0; CREATEMENU(loadmultivslicemenu, LoadMultiVSliceMenu); *loadmultivslicemenuptr = loadmultivslicemenu; @@ -8443,6 +8582,16 @@ void InitMultiVectorLoadMenu(int *loadmultivslicemenuptr, int *loadsubmvslicemen nloadsubmvslicemenu++; } } +#ifdef pp_LOADALL_SLICE + if(nsubvectorslicemenuinfo>0&&(nsubvectorslicex>0||nsubvectorslicey>0||nsubvectorslicez>0||nsubvectorslicexyz>0)){ + glutAddMenuEntry("-", MENU_DUMMY); + if(nsubvectorslicex>0)GLUTADDSUBMENU("Load all x vector slices", loadsubvectorslicexmenu); + if(nsubvectorslicey>0)GLUTADDSUBMENU("Load all y vector slices", loadsubvectorsliceymenu); + if(nsubvectorslicez>0)GLUTADDSUBMENU("Load all z vector slices", loadsubvectorslicezmenu); + if(nsubvectorslicexyz>0)GLUTADDSUBMENU("Load all x,y,z vector slices", loadsubvectorslicexyzmenu); + } +#endif + if(nmultivsliceinfo>0)glutAddMenuEntry("-", MENU_DUMMY); if(nslicedups > 0){ @@ -8667,6 +8816,7 @@ static int compressmenu=0; static int showhideslicemenu=0, sliceskipmenu=0, showvslicemenu=0; #ifdef pp_LOADALL_SLICE static int loadsubslicexmenu=0, loadsubsliceymenu=0, loadsubslicezmenu=0, loadsubslicexyzmenu=0; +static int loadsubvectorslicexmenu=0, loadsubvectorsliceymenu=0, loadsubvectorslicezmenu=0, loadsubvectorslicexyzmenu=0; #endif static int plot3dshowmenu=0, staticvariablemenu=0, helpmenu=0, webhelpmenu=0, keyboardhelpmenu=0, mousehelpmenu=0; static int vectorskipmenu=0,unitsmenu=0; @@ -11850,7 +12000,12 @@ static int menu_count=0; if(have_multivslice==1){ InitMultiVectorUnloadSliceMenu(&unloadmultivslicemenu); InitMultiVectorSubMenu(&loadsubmvslicemenu); - InitMultiVectorLoadMenu(&loadmultivslicemenu, loadsubmvslicemenu, duplicatevectorslicemenu, vsliceloadmenu, vectorsliceloadoptionmenu, unloadmultivslicemenu); + InitMultiVectorLoadMenu(&loadmultivslicemenu, loadsubmvslicemenu, duplicatevectorslicemenu, vsliceloadmenu, + vectorsliceloadoptionmenu, unloadmultivslicemenu +#ifdef pp_LOADALL_SLICE + ,&loadsubvectorslicexmenu, &loadsubvectorsliceymenu, &loadsubvectorslicezmenu, &loadsubvectorslicexyzmenu +#endif + ); } } diff --git a/Source/smokeview/smokeviewvars.h b/Source/smokeview/smokeviewvars.h index bfd689adc7..b7b482e563 100644 --- a/Source/smokeview/smokeviewvars.h +++ b/Source/smokeview/smokeviewvars.h @@ -240,9 +240,10 @@ SVEXTERN char movie_basename[256], movie_ssf_script[256], movie_bash_script[256] SVEXTERN slicedata SVDECL(*movie_sliceinfo, NULL); #ifdef pp_LOADALL_SLICE -SVEXTERN subslicemenudata SVDECL(*subslicemenuinfo, NULL); -SVEXTERN int SVDECL(nsubslicemenuinfo, 0); +SVEXTERN subslicemenudata SVDECL(*subslicemenuinfo, NULL), SVDECL(*subvectorslicemenuinfo, NULL); +SVEXTERN int SVDECL(nsubslicemenuinfo, 0), SVDECL(nsubvectorslicemenuinfo, 0); SVEXTERN int SVDECL(nsubslicex, 0), SVDECL(nsubslicey, 0), SVDECL(nsubslicez, 0), SVDECL(nsubslicexyz, 0); +SVEXTERN int SVDECL(nsubvectorslicex, 0), SVDECL(nsubvectorslicey, 0), SVDECL(nsubvectorslicez, 0), SVDECL(nsubvectorslicexyz, 0); #endif SVEXTERN slicemenudata SVDECL(**slicemenu_sorted, NULL); SVEXTERN int SVDECL(handle_slice_files, 1); From e2fb85c668981553c79c4040db74fbfea479406a Mon Sep 17 00:00:00 2001 From: gforney Date: Sun, 14 Apr 2024 21:34:00 -0400 Subject: [PATCH 12/15] smokeview source: fix to load all slice menus when there is only one slice --- Source/smokeview/menus.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index 6291c66583..51ab3c9abc 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8060,7 +8060,6 @@ void InitSubSliceMenuInfo(){ si->slicetype = SLICE_UNKNOWN; } nsubslicemenuinfo++; - continue; } si = subslicemenuinfo + nsubslicemenuinfo-1; if(sd->volslice == 0){ @@ -8127,7 +8126,6 @@ void InitSubVectorSliceMenuInfo(){ vd->slicetype = SLICE_UNKNOWN; } nsubvectorslicemenuinfo++; - continue; } vd = subvectorslicemenuinfo + nsubvectorslicemenuinfo - 1; if(si->volslice == 0){ From 5b4e225a6369c11bc7dcafd7e055b4f213792139 Mon Sep 17 00:00:00 2001 From: gforney Date: Mon, 15 Apr 2024 15:10:41 -0400 Subject: [PATCH 13/15] smokeview source: fix to slice selection for load all slice menus --- Source/smokeview/menus.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Source/smokeview/menus.c b/Source/smokeview/menus.c index 51ab3c9abc..e32d16ae62 100644 --- a/Source/smokeview/menus.c +++ b/Source/smokeview/menus.c @@ -8053,7 +8053,9 @@ void InitSubSliceMenuInfo(){ si->havey = 0; si->havez = 0; si->havexyz = 0; - if(sd->slice_filetype == SLICE_NODE_CENTER || sd->slice_filetype == SLICE_CELL_CENTER){ + if(sd->volslice==0&& + (sd->slice_filetype == SLICE_NODE_CENTER || sd->slice_filetype == SLICE_CELL_CENTER) + ){ si->slicetype = sd->slice_filetype-1; } else{ @@ -8062,7 +8064,7 @@ void InitSubSliceMenuInfo(){ nsubslicemenuinfo++; } si = subslicemenuinfo + nsubslicemenuinfo-1; - if(sd->volslice == 0){ + if(si->slicetype!=SLICE_UNKNOWN){ if(sd->idir == 1){ si->havex = 1; nsubslicex++; @@ -8086,7 +8088,6 @@ void InitSubSliceMenuInfo(){ PRINT_TIMER(subslicemenu_timer, "Initialize load all slice menus"); } -#ifdef pp_LOADALL_SLICE /* ------------------ InitSubVectorSliceMenuInfo ------------------------ */ void InitSubVectorSliceMenuInfo(){ @@ -8119,7 +8120,9 @@ void InitSubVectorSliceMenuInfo(){ vd->havey = 0; vd->havez = 0; vd->havexyz = 0; - if(si->slice_filetype == SLICE_NODE_CENTER || si->slice_filetype == SLICE_CELL_CENTER){ + if( si->volslice==0&& + (si->slice_filetype == SLICE_NODE_CENTER || si->slice_filetype == SLICE_CELL_CENTER) + ){ vd->slicetype = si->slice_filetype-1; } else{ @@ -8128,7 +8131,7 @@ void InitSubVectorSliceMenuInfo(){ nsubvectorslicemenuinfo++; } vd = subvectorslicemenuinfo + nsubvectorslicemenuinfo - 1; - if(si->volslice == 0){ + if(vd->slicetype!=SLICE_UNKNOWN){ if(si->idir == 1){ vd->havex = 1; nsubvectorslicex++; @@ -8151,7 +8154,7 @@ void InitSubVectorSliceMenuInfo(){ qsort((subslicemenudata *)subvectorslicemenuinfo, (int)nsubvectorslicemenuinfo, sizeof(subslicemenudata), CompareSubSliceMenu); PRINT_TIMER(subvectorslicemenu_timer, "Initialize load all vector slice menus"); } -#endif + /* ------------------ GetSliceBoundType ------------------------ */ int GetSliceBoundType(char *label){ From 2e65b015a88e6edb80d5f2fb9db41bbf1522d2cc Mon Sep 17 00:00:00 2001 From: gforney Date: Mon, 15 Apr 2024 15:40:46 -0400 Subject: [PATCH 14/15] smokeview source: set pp_SLICE_MENU directive to make SLCF parsoing consistent --- Source/smokeview/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/smokeview/options.h b/Source/smokeview/options.h index 8b91ff99c8..56be718c6e 100644 --- a/Source/smokeview/options.h +++ b/Source/smokeview/options.h @@ -10,7 +10,7 @@ //#define pp_PARTBOUND_MULTI // compute particle bounds in the background //#define pp_LUA // turn on LUA option #define pp_CHOPFIX // fix to saving chop values -//#define pp_SLICE_MENU // make slice menu formation consistent (sort step, build step) +#define pp_SLICE_MENU // make slice menu formation consistent (sort step, build step) #define pp_SLICE_MULTI // load slice files in parallel //#define pp_CSV_MENU // add menu for loading CSV files //#define pp_SMOKE16 // load 16 bit smoke files From ac9ccb5f3fd3459f20f6d3802d9f8d460ed3ebe0 Mon Sep 17 00:00:00 2001 From: gforney Date: Mon, 15 Apr 2024 16:26:53 -0400 Subject: [PATCH 15/15] smokeview source: minor formatting edit --- Source/smokeview/IOslice.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/smokeview/IOslice.c b/Source/smokeview/IOslice.c index e9f51c6cec..7f42fa762d 100644 --- a/Source/smokeview/IOslice.c +++ b/Source/smokeview/IOslice.c @@ -2442,7 +2442,7 @@ void UpdateVsliceMenuLabels(sliceparmdata *sp){ /* ------------------ NewMultiSlice ------------------------ */ #ifdef pp_SLICE_MENU -int NewMultiSlice(slicedata *sdold,slicedata *sd){ +int NewMultiSlice(slicedata *sdold, slicedata *sd){ int i, j; i = sdold - sliceinfo;