diff --git a/Source/smokeview/callbacks.c b/Source/smokeview/callbacks.c index f359a1491..5b0618529 100644 --- a/Source/smokeview/callbacks.c +++ b/Source/smokeview/callbacks.c @@ -2278,6 +2278,15 @@ void Keyboard(unsigned char key, int flag){ } else{ outline_mode++; + if(outline_mode == SCENE_OUTLINE_MESH+1){ + if(meshface_horiz == 0){ + outline_mode = SCENE_OUTLINE_MESH; + meshface_horiz = 1; + } + else{ + meshface_horiz = 0; + } + } if(outline_mode!=SCENE_OUTLINE_HIDDEN){ updatefacelists = 1; updatemenu = 1; @@ -2285,9 +2294,13 @@ void Keyboard(unsigned char key, int flag){ } if(outline_mode>2&&global_scase.noutlineinfo>0)outline_mode=SCENE_OUTLINE_HIDDEN; if(outline_mode>1&&global_scase.noutlineinfo==0)outline_mode=SCENE_OUTLINE_HIDDEN; - if(outline_mode==SCENE_OUTLINE_HIDDEN)PRINTF("outline mode: hidden\n",outline_mode); - if(outline_mode==SCENE_OUTLINE_MESH)PRINTF("outline mode: mesh\n",outline_mode); - if(outline_mode==SCENE_OUTLINE_SCENE)PRINTF("outline mode: scene\n",outline_mode); + if(outline_mode==SCENE_OUTLINE_HIDDEN)PRINTF("outline mode: hidden\n"); + if(outline_mode==SCENE_OUTLINE_MESH){ + PRINTF("outline mode: mesh"); + if(meshface_horiz==1)PRINTF("(horizontal faces only)"); + PRINTF("\n"); + } + if(outline_mode==SCENE_OUTLINE_SCENE)PRINTF("outline mode: scene\n"); } break; case 'P': diff --git a/Source/smokeview/drawGeometry.c b/Source/smokeview/drawGeometry.c index 1280572f8..dfec32784 100644 --- a/Source/smokeview/drawGeometry.c +++ b/Source/smokeview/drawGeometry.c @@ -2797,7 +2797,11 @@ void UpdateFaceListsWorker(void){ (facej->type==BLOCK_outline&&visBlocks==visBLOCKAsInput)|| ((j>=vent_offset&&jnvents)&&vi->isOpenvent==1&&visOpenVentsAsOutline==1) ){ - if(global_scase.obstcoll.nobstinfo==0||(global_scase.obstcoll.nobstinfo>0&&blocklocation==BLOCKlocation_grid))meshi->face_outlines[n_outlines++]=facej; + if(global_scase.obstcoll.nobstinfo == 0 || + (global_scase.obstcoll.nobstinfo > 0 && blocklocation == BLOCKlocation_grid) + ){ + if(meshface_horiz == 0 || facej->kmin == facej->kmax)meshi->face_outlines[n_outlines++] = facej; + } if(visBlocks!=visBLOCKSolidOutline&&visBlocks!=visBLOCKAsInputOutline)continue; } if(jadd_checkbox_to_panel(ROLLOUT_general2,"Sort transparent faces",&sort_transparent_faces,LABELS_drawface,GLUILabelsCB); CHECKBOX_label_3=glui_labels->add_checkbox_to_panel(ROLLOUT_general2,"Hide overlaps",&hide_overlaps,LABELS_hide_overlaps,GLUILabelsCB); - + CHECKBOX_label_4=glui_labels->add_checkbox_to_panel(ROLLOUT_general2, "Only show horizontal mesh outlines", &meshface_horiz,MESH_HORIZ, GLUILabelsCB); + if(nface_transparent>0){ glui_labels->add_column_to_panel(PANEL_gen1,true); PANEL_transparency = glui_labels->add_panel_to_panel(ROLLOUT_general2,"Geometry transparency"); @@ -1483,6 +1486,10 @@ extern "C" void GLUILabelsCB(int var){ colorbar_flip = 1 - colorbar_flip; ColorbarMenu(COLORBAR_FLIP); break; + case MESH_HORIZ: + updatefacelists = 1; + GLUTPOSTREDISPLAY; + break; case LABELS_hide_overlaps: updatefacelists=1; GLUTPOSTREDISPLAY; diff --git a/Source/smokeview/readsmv.c b/Source/smokeview/readsmv.c index 1ce020f06..2cc90feec 100644 --- a/Source/smokeview/readsmv.c +++ b/Source/smokeview/readsmv.c @@ -3905,11 +3905,12 @@ int ReadIni2(const char *inifile, int localfile){ continue; } if(MatchINI(buffer, "MESHVIS") == 1){ - int nm; + int nm, meshface_horiz_input=0; meshdata *meshi; fgets(buffer, 255, stream); - sscanf(buffer, "%i", &nm); + sscanf(buffer, "%i %i", &nm, &meshface_horiz_input); + meshface_horiz = CLAMP(meshface_horiz_input, 0, 1); for(i = 0; iglobal_scase.meshescoll.nmeshes - 1)break; meshi = global_scase.meshescoll.meshinfo + i; @@ -8076,7 +8077,7 @@ void WriteIni(int flag,char *filename){ } if(global_scase.meshescoll.nmeshes>1){ fprintf(fileout,"MESHVIS\n"); - fprintf(fileout," %i\n",global_scase.meshescoll.nmeshes); + fprintf(fileout," %i %i\n",global_scase.meshescoll.nmeshes, meshface_horiz); for(i=0;i