fix failures of non-regression tests

1) compute the given bottom FACE in StdMeshers_Prism_3D::compute(const TPrismTopo& thePrism)
2) set higher priority to non-quadrilateral computed FACEs over all FACEs having structured mesh
This commit is contained in:
eap 2013-02-27 11:53:02 +00:00
parent 318c408131
commit ed66a53f3e

View File

@ -470,7 +470,7 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh
TopExp::MapShapesAndAncestors( theShape, TopAbs_FACE, TopAbs_SOLID, faceToSolids );
// look for meshed FACEs ("source" FACEs) that must be prism bottoms
list< TopoDS_Face > meshedFaces;//, notQuadMeshedFaces, notQuadFaces;
list< TopoDS_Face > meshedFaces, notQuadMeshedFaces;//, notQuadFaces;
const bool meshHasQuads = ( theMesh.NbQuadrangles() > 0 );
for ( int iF = 1; iF < faceToSolids.Extent(); ++iF )
{
@ -480,14 +480,17 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh
{
if ( !meshHasQuads ||
!helper.IsSameElemGeometry( faceSM->GetSubMeshDS(), SMDSGeom_QUADRANGLE ) ||
!helper.IsStructured( faceSM ))
// notQuadMeshedFaces are of higher priority
!helper.IsStructured( faceSM )
)
notQuadMeshedFaces.push_front( face );
else if ( myHelper->Count( face, TopAbs_EDGE, /*ignoreSame=*/false ) != 4 )
meshedFaces.push_front( face );
else
meshedFaces.push_back( face );
}
}
//meshedFaces.splice( meshedFaces.begin(), notQuadMeshedFaces );
// notQuadMeshedFaces are of highest priority
meshedFaces.splice( meshedFaces.begin(), notQuadMeshedFaces );
// if ( meshedFaces.empty() )
// return error( COMPERR_BAD_INPUT_MESH, "No meshed source faces found" );
@ -709,7 +712,7 @@ bool StdMeshers_Prism_3D::getWallFaces( Prism_3D::TPrismTopo & thePrism,
// -------------------------
// Compose a vector of indixes of right neighbour FACE for each wall FACE
// that is not so evident in case of several WIREs
// that is not so evident in case of several WIREs in the bottom FACE
thePrism.myRightQuadIndex.clear();
for ( size_t i = 0; i < thePrism.myWallQuads.size(); ++i )
thePrism.myRightQuadIndex.push_back( i+1 );
@ -1511,8 +1514,13 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top()
SMESHDS_SubMesh * botSMDS = botSM->GetSubMeshDS();
SMESHDS_SubMesh * topSMDS = topSM->GetSubMeshDS();
if ( !botSMDS || botSMDS->NbElements() == 0 )
{
_gen->Compute( *myHelper->GetMesh(), botSM->GetSubShape() );
botSMDS = botSM->GetSubMeshDS();
if ( !botSMDS || botSMDS->NbElements() == 0 )
return toSM( error(TCom("No elememts on face #") << botSM->GetId() ));
}
bool needProject = !topSM->IsMeshComputed();
if ( !needProject &&