X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_CompositeHexa_3D.cxx;h=cb0512d1ff1ce07bf0df98853a47621bab89125f;hb=53bd086779d54791bfd119de31f01eac699e0745;hp=57bf3eaca3582a795d5f003fd42c7aec40a65a02;hpb=831ca6c828271732e46fba73b196d423482535ae;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx b/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx index 57bf3eaca..cb0512d1f 100644 --- a/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx +++ b/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -58,6 +58,7 @@ #include #include +using namespace std; #ifdef _DEBUG_ // #define DEB_FACES @@ -381,12 +382,12 @@ namespace const TopTools_MapOfShape& cornerVV, TopTools_MapOfShape& internEE) { - TopTools_IndexedMapOfShape subEE, subFF; + TopTools_IndexedMapOfShape subEE; TopExp::MapShapes( shape, TopAbs_EDGE, subEE ); - TopExp::MapShapes( shape, TopAbs_FACE, subFF ); + //TopExp::MapShapes( shape, TopAbs_FACE, subFF ); TopoDS_Vertex VV[2]; - TopTools_MapOfShape subChecked/*, ridgeEE*/; + TopTools_MapOfShape subChecked, ridgeEE; TopTools_MapIteratorOfMapOfShape vIt( cornerVV ); for ( ; vIt.More(); vIt.Next() ) { @@ -400,6 +401,8 @@ namespace TopoDS_Edge ridgeE = TopoDS::Edge( *riE ); while ( !ridgeE.IsNull() ) { + if ( !ridgeEE.Add( ridgeE )) + break; TopExp::Vertices( ridgeE, VV[0], VV[1] ); TopoDS_Shape V1 = VV[ V0.IsSame( VV[0] )]; if ( cornerVV.Contains( V1 ) ) @@ -450,6 +453,11 @@ namespace } // loop on ridge EDGEs around a corner VERTEX } // loop on on corner VERTEXes + if ( subEE.Extent() > ridgeEE.Extent() + internEE.Extent() ) // PAL23269 + for ( int i = 1; i < subEE.Extent(); ++i ) + if ( !ridgeEE.Contains( subEE(i) )) + internEE.Add( subEE(i) ); + return true; } // getInternalEdges() } // namespace @@ -929,7 +937,7 @@ bool _QuadFaceGrid::AddContinuousFace( const _QuadFaceGrid& other, { const _FaceSide& otherSide = other.GetSide( i ); int iMyCommon; - if ( mySides.Contain( otherSide, &iMyCommon ) ) + if ( mySides.Contain( otherSide, &iMyCommon )) { if ( internalEdges.Contains( otherSide.Edge( 0 ))) { @@ -937,13 +945,23 @@ bool _QuadFaceGrid::AddContinuousFace( const _QuadFaceGrid& other, DUMP_VERT("Cont 2", mySides.GetSide(iMyCommon)->LastVertex()); DUMP_VERT("Cont 3", otherSide.FirstVertex()); DUMP_VERT("Cont 4", otherSide.LastVertex()); - if ( myChildren.empty() ) { + + if ( myChildren.empty() ) + { myChildren.push_back( *this ); myFace.Nullify(); } + else // find iMyCommon in myChildren + { + for ( TChildIterator children = GetChildren(); children.more(); ) { + const _QuadFaceGrid& child = children.next(); + if ( child.mySides.Contain( otherSide, &iMyCommon )) + break; + } + } // orient new children equally - int otherBottomIndex = ( 4 + i - iMyCommon + 2 ) % 4; + int otherBottomIndex = SMESH_MesherHelper::WrapIndex( i - iMyCommon + 2, 4 ); if ( other.IsComplex() ) for ( TChildIterator children = other.GetChildren(); children.more(); ) { myChildren.push_back( children.next() ); @@ -960,7 +978,7 @@ bool _QuadFaceGrid::AddContinuousFace( const _QuadFaceGrid& other, if ( other.IsComplex() ) for ( TChildIterator children = other.GetChildren(); children.more(); ) { - const _QuadFaceGrid& child = children.next(); + const _QuadFaceGrid& child = children.next(); for ( int i = 0; i < 4; ++i ) mySides.AppendSide( child.GetSide(i) ); } @@ -1002,9 +1020,9 @@ bool _QuadFaceGrid::SetBottomSide(const _FaceSide& bottom, int* sideIndex) { if ( childFace->SetBottomSide( bottom, &myBottomIndex )) { - TChildren::iterator orientedCild = childFace; + TChildren::iterator orientedChild = childFace; for ( childFace = myChildren.begin(); childFace != childEnd; ++childFace ) { - if ( childFace != orientedCild ) + if ( childFace != orientedChild ) childFace->SetBottomSide( childFace->GetSide( myBottomIndex )); } if ( sideIndex ) @@ -1076,7 +1094,7 @@ const _FaceSide& _QuadFaceGrid::GetSide(int i) const */ //================================================================================ -void _QuadFaceGrid::ReverseEdges(/*int e1, int e2*/) +void _QuadFaceGrid::ReverseEdges() { myReverse = !myReverse; @@ -1087,8 +1105,6 @@ void _QuadFaceGrid::ReverseEdges(/*int e1, int e2*/) if ( myChildren.empty() ) { -// mySides.GetSide( e1 )->Reverse(); -// mySides.GetSide( e2 )->Reverse(); DumpVertices(); } else @@ -1096,7 +1112,7 @@ void _QuadFaceGrid::ReverseEdges(/*int e1, int e2*/) DumpVertices(); TChildren::iterator child = myChildren.begin(), childEnd = myChildren.end(); for ( ; child != childEnd; ++child ) - child->ReverseEdges( /*e1, e2*/ ); + child->ReverseEdges(); } } @@ -1672,8 +1688,6 @@ _FaceSide::_FaceSide(const list& edges): for ( ; edge != eEnd; ++edge ) { myChildren.push_back( _FaceSide( *edge )); myNbChildren++; -// myVertices.insert( myChildren.back().myVertices.begin(), -// myChildren.back().myVertices.end() ); myVertices.Add( myChildren.back().FirstVertex() ); myVertices.Add( myChildren.back().LastVertex() ); myChildren.back().SetID( Q_CHILD ); // not to splice them @@ -1682,7 +1696,7 @@ _FaceSide::_FaceSide(const list& edges): //======================================================================= //function : GetSide -//purpose : +//purpose : //======================================================================= _FaceSide* _FaceSide::GetSide(const int i)