X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_Prism_3D.cxx;h=4b6055c0799a6cf361371884d4e62b80ff7f9594;hb=025e264849d3d5f204628b9ce435f483aa7b6b35;hp=e0cbdbaa6d44e9939497d5f6b8776f4ddd73ddd9;hpb=2c607013a23bd4e7ba07e72e0c04dee2c1209cff;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_Prism_3D.cxx b/src/StdMeshers/StdMeshers_Prism_3D.cxx index e0cbdbaa6..4b6055c07 100644 --- a/src/StdMeshers/StdMeshers_Prism_3D.cxx +++ b/src/StdMeshers/StdMeshers_Prism_3D.cxx @@ -385,7 +385,7 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh myHelper->IsQuadraticSubMesh( theShape ); - // Analyse mesh and geomerty to find block subshapes and submeshes + // Analyse mesh and geomerty to find block sub-shapes and submeshes if ( !myBlock.Init( myHelper, theShape )) return error( myBlock.GetError()); @@ -984,7 +984,7 @@ bool StdMeshers_Prism_3D::projectBottomToTop() //================================================================================ /*! - * \brief Set projection coordinates of a node to a face and it's subshapes + * \brief Set projection coordinates of a node to a face and it's sub-shapes * \param faceID - the face given by in-block ID * \param params - node normalized parameters * \retval bool - is a success @@ -1329,6 +1329,14 @@ bool StdMeshers_PrismAsBlock::Init(SMESH_MesherHelper* helper, if ( !GetWallFaces( Mesh(), shape3D, botSM->GetSubShape(), orderedEdges, nbEInW, wallFaces)) return error(COMPERR_BAD_SHAPE, "Can't find side faces"); + // check that the found top and bottom faces are opposite + { + for (TopExp_Explorer edge(botSM->GetSubShape(), TopAbs_EDGE); edge.More(); edge.Next()) + if ( helper->IsSubShape( edge.Current(), topSM->GetSubShape() )) + return error(notQuadGeomSubMesh.empty() ? COMPERR_BAD_INPUT_MESH : COMPERR_BAD_SHAPE, + "Non-quadrilateral faces are not opposite"); + } + // Protect from a distorted block (test 3D_mesh_HEXA3D/B7 on 32bit platform) // check that all wall faces have an edge common with the top face { @@ -1681,16 +1689,17 @@ bool StdMeshers_PrismAsBlock::GetLayersTransformation(vector & trsf) co for ( int iE = 0; iE < nbEdgesInWires.front(); ++iE, ++edgeIt ) { if ( BRep_Tool::Degenerated( *edgeIt )) continue; - const TParam2ColumnMap& u2colMap = + const TParam2ColumnMap* u2colMap = GetParam2ColumnMap( myHelper->GetMeshDS()->ShapeToIndex( *edgeIt ), isReverse ); + if ( !u2colMap ) return false; isReverse = ( edgeIt->Orientation() == TopAbs_REVERSED ); - double f = u2colMap.begin()->first, l = u2colMap.rbegin()->first; + double f = u2colMap->begin()->first, l = u2colMap->rbegin()->first; if ( isReverse ) swap ( f, l ); const int nbCol = 5; for ( int i = 0; i < nbCol; ++i ) { double u = f + i/double(nbCol) * ( l - f ); - const TNodeColumn* col = & getColumn( & u2colMap, u )->second; + const TNodeColumn* col = & getColumn( u2colMap, u )->second; if ( columns.empty() || col != columns.back() ) columns.push_back( col ); } @@ -2193,25 +2202,18 @@ TopoDS_Edge StdMeshers_PrismAsBlock::TSideFace::GetEdge(const int iEdge) const TopoDS_Shape V2 = myHelper->GetSubShapeByNode( node, meshDS ); if ( V2.ShapeType() == TopAbs_VERTEX && !V2.IsSame( V1 )) { - TopTools_ListIteratorOfListOfShape ancestIt = - myHelper->GetMesh()->GetAncestors( V1 ); - for ( ; ancestIt.More(); ancestIt.Next() ) - { - const TopoDS_Shape & ancestor = ancestIt.Value(); - if ( ancestor.ShapeType() == TopAbs_EDGE ) - for ( TopExp_Explorer e( ancestor, TopAbs_VERTEX ); e.More(); e.Next() ) - if ( V2.IsSame( e.Current() )) - return TopoDS::Edge( ancestor ); - } + TopoDS_Shape ancestor = myHelper->GetCommonAncestor( V1, V2, *myHelper->GetMesh(), TopAbs_EDGE); + if ( !ancestor.IsNull() ) + return TopoDS::Edge( ancestor ); } return TopoDS_Edge(); } //================================================================================ /*! - * \brief Fill block subshapes + * \brief Fill block sub-shapes * \param shapeMap - map to fill in - * \retval int - nb inserted subshapes + * \retval int - nb inserted sub-shapes */ //================================================================================