From 1ead6c62677135a56d9cff83c128f64900064799 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Thu, 31 Jan 2013 21:21:28 +0000 Subject: [PATCH] merge patch from Ticket #151 --- Mesh/QuadTriExtruded3D.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/Mesh/QuadTriExtruded3D.cpp b/Mesh/QuadTriExtruded3D.cpp index f5b6982e79..82b466f631 100644 --- a/Mesh/QuadTriExtruded3D.cpp +++ b/Mesh/QuadTriExtruded3D.cpp @@ -3369,11 +3369,16 @@ static int makeEdgesForOtherBndHexa( GRegion *gr, bool is_dbl, CategorizedSource return 0; } - // no need to do this if there are no lateral surface diagonals and if not a - // rotation with quadrangles. - if( !lat_tri_diags.size() && - ( !reg_source->quadrangles.size() || - (ep->geo.Type != ROTATE && ep->geo.Type != TRANSLATE_ROTATE) ) ) + // return if there are no lateral surface diagonals and if not a rotation with + // quadrangles. + if( !lat_tri_diags.size() && ( !reg_source->quadrangles.size() || + ep->geo.Type != ROTATE && ep->geo.Type != TRANSLATE_ROTATE ) ) + return 1; + + // Return if there is only one extrude layer!!!! + // (everything gets taken care of because all elements in top layer are divided) + // ( in fact, this will cause problems if performed ) + if( ep->mesh.NbLayer <= 1 && ep->mesh.NbElmLayer[0] <= 1 ) return 1; int j_top_start, k_top_start; @@ -3605,13 +3610,20 @@ static int makeEdgesInternalTopLayer( GRegion *gr, bool is_dbl, CategorizedSourc // do this by lowest pointer value IN THE TOP SURFACE for( int p = 0; p < elem_size; p++ ){ - int ind_low = p+elem_size; - int ind_2 = (p+1)%elem_size; - if( verts[ind_2+elem_size] < verts[ind_low] ){ - ind_low = ind_2+elem_size; - ind_2 = p; + int ind1, ind2, ind_low, ind_low_2; + ind1 = p+elem_size; + ind2 = (p+1)%elem_size+elem_size; + if( verts[ind1] < verts[ind2] ){ + ind_low = ind1; + ind_low_2 = ind2 - elem_size; } - createEdge( verts[ind_low], verts[ind_2], quadToTri_edges ); + else{ + ind_low = ind2; + ind_low_2 = ind1 - elem_size; + } + + if( !edgeExists( verts[ind_low-elem_size], verts[ind_low_2+elem_size], quadToTri_edges) ) + createEdge( verts[ind_low], verts[ind_low_2], quadToTri_edges ); } } } -- GitLab