X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_CompositeHexa_3D.cxx;h=1311ca42c0a8ef762c5534be5aea76b20f1429a3;hb=b0a908c0d20341651771d0249fb10882f54b2aad;hp=11a3cc57ad510770b043a8c13b3690cd43b38d70;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx b/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx index 11a3cc57a..1311ca42c 100644 --- a/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx +++ b/src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 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 // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -32,6 +32,7 @@ #include "SMESH_Comment.hxx" #include "SMESH_ComputeError.hxx" #include "SMESH_Mesh.hxx" +#include "SMESH_MeshAlgos.hxx" #include "SMESH_MesherHelper.hxx" #include "SMESH_subMesh.hxx" @@ -58,17 +59,15 @@ #ifdef _DEBUG_ +// #define DEB_FACES +// #define DEB_GRID +// #define DUMP_VERT(msg,V) \ +// { TopoDS_Vertex v = V; gp_Pnt p = BRep_Tool::Pnt(v); \ +// cout << msg << "( "<< p.X()<<", "< edges; list< int > nbEdgesInWire; - int nbWire = SMESH_Block::GetOrderedEdges (myFace, V, edges, nbEdgesInWire); + int nbWire = SMESH_Block::GetOrderedEdges (myFace, edges, nbEdgesInWire); if ( nbWire != 1 ) return false; @@ -715,7 +713,7 @@ bool _QuadFaceGrid::AddContinuousFace( const _QuadFaceGrid& other ) const _FaceSide& otherSide = other.GetSide( i ); int iMyCommon; if ( mySides.Contain( otherSide, &iMyCommon ) ) { - // check if normals of two faces are collinear at all vertices of a otherSide + // check if normals of two faces are collinear at all vertices of an otherSide const double angleTol = M_PI / 180. / 2.; int iV, nbV = otherSide.NbVertices(), nbCollinear = 0; for ( iV = 0; iV < nbV; ++iV ) @@ -740,15 +738,20 @@ bool _QuadFaceGrid::AddContinuousFace( const _QuadFaceGrid& other ) myChildren.push_back( *this ); myFace.Nullify(); } + + // orient new children equally + int otherBottomIndex = ( 4 + i - iMyCommon + 2 ) % 4; if ( other.IsComplex() ) - for ( TChildIterator children = other.GetChildren(); children.more(); ) + for ( TChildIterator children = other.GetChildren(); children.more(); ) { myChildren.push_back( children.next() ); - else + myChildren.back().SetBottomSide( myChildren.back().GetSide( otherBottomIndex )); + } + else { myChildren.push_back( other ); + myChildren.back().SetBottomSide( myChildren.back().GetSide( otherBottomIndex )); + } myLeftBottomChild = 0; - //int otherBottomIndex = ( 4 + i - iMyCommon + 2 ) % 4; - //myChildren.back().SetBottomSide( other.GetSide( otherBottomIndex )); // collect vertices in mySides if ( other.IsComplex() ) @@ -960,10 +963,10 @@ bool _QuadFaceGrid::LoadGrid( SMESH_Mesh& mesh ) // TIDSortedElemSet emptySet, avoidSet; avoidSet.insert( firstQuad ); - firstQuad = SMESH_MeshEditor::FindFaceInSet( n1down, n2down, emptySet, avoidSet); + firstQuad = SMESH_MeshAlgos::FindFaceInSet( n1down, n2down, emptySet, avoidSet); while ( firstQuad && !faceSubMesh->Contains( firstQuad )) { avoidSet.insert( firstQuad ); - firstQuad = SMESH_MeshEditor::FindFaceInSet( n1down, n2down, emptySet, avoidSet); + firstQuad = SMESH_MeshAlgos::FindFaceInSet( n1down, n2down, emptySet, avoidSet); } if ( !firstQuad || !faceSubMesh->Contains( firstQuad )) return error(ERR_LI("Error in _QuadFaceGrid::LoadGrid()")); @@ -993,7 +996,7 @@ bool _QuadFaceGrid::LoadGrid( SMESH_Mesh& mesh ) { // next face avoidSet.clear(); avoidSet.insert( quad ); - quad = SMESH_MeshEditor::FindFaceInSet( n1down, n1up, emptySet, avoidSet ); + quad = SMESH_MeshAlgos::FindFaceInSet( n1down, n1up, emptySet, avoidSet ); if ( !quad || quad->NbNodes() % 4 > 0) return error(ERR_LI("Error in _QuadFaceGrid::LoadGrid()"));