From d7e7b8a466336561da07e6566c2d15248d37bdf5 Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 28 Feb 2020 16:05:59 +0300 Subject: [PATCH] Fix regression of 3D_mesh_GHS3D_01/B1 --- src/StdMeshers/StdMeshers_ViscousLayers.cxx | 34 ++++++++++++++++----- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/StdMeshers/StdMeshers_ViscousLayers.cxx b/src/StdMeshers/StdMeshers_ViscousLayers.cxx index 270330be4..d82b30bcc 100644 --- a/src/StdMeshers/StdMeshers_ViscousLayers.cxx +++ b/src/StdMeshers/StdMeshers_ViscousLayers.cxx @@ -1771,7 +1771,7 @@ namespace VISCOUS_3D PyDump(SMESH_Mesh& m) { int tag = 3 + m.GetId(); const char* fname = "/tmp/viscous.py"; - cout << "execfile('"<IsSame( face ) || + _periodicFaces[ i ]._shriFace[1]->IsSame( face )) + _periodicFaces[ i ].Clear(); + } }; //================================================================================ @@ -10765,6 +10774,7 @@ namespace VISCOUS_3D bool PeriodicFaces::IncludeShrunk( const TopoDS_Face& face, const TopTools_MapOfShape& shrunkFaces ) const { + if ( IsEmpty() ) return false; return (( _shriFace[0]->IsSame( face ) && _shriFace[1]->IsShrunk( shrunkFaces )) || ( _shriFace[1]->IsSame( face ) && _shriFace[0]->IsShrunk( shrunkFaces ))); } @@ -10785,7 +10795,8 @@ namespace VISCOUS_3D if ( iSrc != 0 ) { trsfInverse = _trsf; - trsfInverse.Invert(); + if ( !trsfInverse.Invert()) + return false; trsf = &trsfInverse; } SMESHDS_Mesh* meshDS = dataSrc->GetHelper().GetMeshDS(); @@ -10823,10 +10834,10 @@ namespace VISCOUS_3D } } bool done = ( n2n == _nnMap.end() ); - // cout << "MMMMMMMOOOOOOOOOOVVVVVVVVVVVEEEEEEEE " - // << _shriFace[iSrc]->_subMesh->GetId() << " -> " - // << _shriFace[iTgt]->_subMesh->GetId() << " -- " - // << ( done ? "DONE" : "FAIL") << endl; + debugMsg( "PeriodicFaces::MoveNodes " + << _shriFace[iSrc]->_subMesh->GetId() << " -> " + << _shriFace[iTgt]->_subMesh->GetId() << " -- " + << ( done ? "DONE" : "FAIL")); return done; } @@ -11286,6 +11297,8 @@ bool _ViscousBuilder::shrink(_SolidData& theData) getMeshDS()->RemoveFreeNode( n, smDS, /*fromGroups=*/false ); } } + _periodicity->ClearPeriodic( F ); + // restore position and UV of target nodes gp_Pnt p; for ( size_t iS = 0; iS < subEOS.size(); ++iS ) @@ -11528,6 +11541,13 @@ bool _ViscousBuilder::prepareEdgeToShrink( _LayerEdge& edge, if ( !n2 ) return error(SMESH_Comment("Wrongly meshed EDGE ") << getMeshDS()->ShapeToIndex( E )); + if ( n2 == tgtNode ) // for 3D_mesh_GHS3D_01/B1 + { + // shrunk by other SOLID + edge.Set( _LayerEdge::SHRUNK ); // ??? + return true; + } + double uSrc = helper.GetNodeU( E, srcNode, n2 ); double uTgt = helper.GetNodeU( E, tgtNode, srcNode ); double u2 = helper.GetNodeU( E, n2, srcNode ); -- 2.30.2