IPAL52450: Mesh generation fails due to viscous layers

This commit is contained in:
eap 2014-07-16 16:30:28 +04:00
parent a5f7916fb6
commit bcfa36bbd0
5 changed files with 509 additions and 199 deletions

View File

@ -2328,6 +2328,7 @@ bool SMESH_MesherHelper::LoadNodeColumns(TParam2ColumnMap & theParam2
while ( ++u_n != sortedBaseNN.end() && !isNodeInSubMesh( u_n->second, faceSubMesh )); while ( ++u_n != sortedBaseNN.end() && !isNodeInSubMesh( u_n->second, faceSubMesh ));
sortedBaseNN.erase( sortedBaseNN.begin(), u_n ); sortedBaseNN.erase( sortedBaseNN.begin(), u_n );
} }
if ( !sortedBaseNN.empty() )
if ( u_n = --sortedBaseNN.end(), !isNodeInSubMesh( u_n->second, faceSubMesh )) if ( u_n = --sortedBaseNN.end(), !isNodeInSubMesh( u_n->second, faceSubMesh ))
{ {
while ( u_n != sortedBaseNN.begin() && !isNodeInSubMesh( (--u_n)->second, faceSubMesh )); while ( u_n != sortedBaseNN.begin() && !isNodeInSubMesh( (--u_n)->second, faceSubMesh ));
@ -2349,7 +2350,7 @@ bool SMESH_MesherHelper::LoadNodeColumns(TParam2ColumnMap & theParam2
u2nn->second.push_back( u_n->second ); u2nn->second.push_back( u_n->second );
} }
} }
if ( theParam2ColumnMap.empty() ) if ( theParam2ColumnMap.size() < 2 )
return false; return false;
} }

View File

@ -1735,6 +1735,8 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
case CHECK_COMPUTE_STATE: case CHECK_COMPUTE_STATE:
if ( IsMeshComputed() ) if ( IsMeshComputed() )
_computeState = COMPUTE_OK; _computeState = COMPUTE_OK;
else if ( _computeError && _computeError->IsKO() )
_computeState = FAILED_TO_COMPUTE;
break; break;
default: default:
ASSERT(0); ASSERT(0);

View File

@ -1460,8 +1460,11 @@ SMESH::compute_error_array* SMESH_Gen_i::GetComputeErrors( SMESH::SMESH_Mesh_ptr
// if ( sm->GetSubShape().ShapeType() == TopAbs_VERTEX ) // if ( sm->GetSubShape().ShapeType() == TopAbs_VERTEX )
// break; // break;
SMESH_ComputeErrorPtr error = sm->GetComputeError(); SMESH_ComputeErrorPtr error = sm->GetComputeError();
if ( error && !error->IsOK() && error->myAlgo ) if ( error && !error->IsOK() )
{ {
if ( !( error->myAlgo ) &&
!( error->myAlgo = sm->GetAlgo() ))
continue;
SMESH::ComputeError & errStruct = error_array[ nbErr++ ]; SMESH::ComputeError & errStruct = error_array[ nbErr++ ];
errStruct.code = -( error->myName < 0 ? error->myName + 1: error->myName ); // -1 -> 0 errStruct.code = -( error->myName < 0 ? error->myName + 1: error->myName ); // -1 -> 0
errStruct.comment = error->myComment.c_str(); errStruct.comment = error->myComment.c_str();

View File

@ -371,8 +371,9 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
for ( int i = 0; i < 6; ++i ) for ( int i = 0; i < 6; ++i )
{ {
const TopoDS_Face& sideF = aCubeSide[i]._quad->face; const TopoDS_Face& sideF = aCubeSide[i]._quad->face;
if ( !SMESH_MesherHelper::IsSameElemGeometry( meshDS->MeshElements( sideF ), const SMESHDS_SubMesh* smDS =
SMDSGeom_QUADRANGLE, proxymesh ? proxymesh->GetSubMesh( sideF ) : meshDS->MeshElements( sideF );
if ( !SMESH_MesherHelper::IsSameElemGeometry( smDS, SMDSGeom_QUADRANGLE,
/*nullSubMeshRes=*/false )) /*nullSubMeshRes=*/false ))
{ {
SMESH_ComputeErrorPtr err = ComputePentahedralMesh(aMesh, aShape, proxymesh.get()); SMESH_ComputeErrorPtr err = ComputePentahedralMesh(aMesh, aShape, proxymesh.get());

File diff suppressed because it is too large Load Diff