X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMDS%2FSMDS_VolumeTool.cxx;h=d7dd7f826f6d2180446e8030667e976da1009946;hp=8296de035dad4140e1a6b18f038d316e4d2157f0;hb=913aaa14de1406e2640ada90bbce495c95106966;hpb=1dd2f82c6d43d470c088288248edea674d583eec diff --git a/src/SMDS/SMDS_VolumeTool.cxx b/src/SMDS/SMDS_VolumeTool.cxx index 8296de035..d7dd7f826 100644 --- a/src/SMDS/SMDS_VolumeTool.cxx +++ b/src/SMDS/SMDS_VolumeTool.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 // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -425,11 +425,13 @@ struct SMDS_VolumeTool::SaveFacet SaveFacet( SMDS_VolumeTool::Facet& facet ): myToRestore( facet ) { mySaved = facet; + mySaved.myNodes.swap( facet.myNodes ); } ~SaveFacet() { if ( myToRestore.myIndex != mySaved.myIndex ) myToRestore = mySaved; + myToRestore.myNodes.swap( mySaved.myNodes ); } }; @@ -843,7 +845,7 @@ bool SMDS_VolumeTool::GetBaryCenter(double & X, double & Y, double & Z) const if ( !myVolume ) return false; - for ( int i = 0; i < myVolumeNodes.size(); i++ ) { + for ( size_t i = 0; i < myVolumeNodes.size(); i++ ) { X += myVolumeNodes[ i ]->X(); Y += myVolumeNodes[ i ]->Y(); Z += myVolumeNodes[ i ]->Z(); @@ -1011,7 +1013,7 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const ori = ( minProj < 0 ? +1 : -1 ); me->myPolyFacetOri[ faceIndex ] = ori; - if ( !me->myFwdLinks.empty() ) // concave polyhedron; collect oriented links + if ( !myFwdLinks.empty() ) // concave polyhedron; collect oriented links for ( int i = 0; i < myCurFace.myNbNodes; ++i ) { NLink link( myCurFace.myNodes[i], myCurFace.myNodes[i+1], ori ); @@ -1024,10 +1026,10 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const // concave polyhedron - if ( me->myFwdLinks.empty() ) // get links of the least ambiguously oriented facet + if ( myFwdLinks.empty() ) // get links of the least ambiguously oriented facet { for ( size_t i = 0; i < myPolyFacetOri.size() && !ori; ++i ) - ori = me->myPolyFacetOri[ i ]; + ori = myPolyFacetOri[ i ]; if ( !ori ) // none facet is oriented yet { @@ -1058,10 +1060,10 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const me->myPolyFacetOri[ faceMostConvex ] = ori; } } - // collect links of the oriented facets in me->myFwdLinks + // collect links of the oriented facets in myFwdLinks for ( size_t iF = 0; iF < myPolyFacetOri.size(); ++iF ) { - ori = me->myPolyFacetOri[ iF ]; + ori = myPolyFacetOri[ iF ]; if ( !ori ) continue; setFace( iF ); for ( int i = 0; i < myCurFace.myNbNodes; ++i ) @@ -1079,8 +1081,8 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const for ( int i = 0; i < myCurFace.myNbNodes && !ori; ++i ) { NLink link( myCurFace.myNodes[i], myCurFace.myNodes[i+1] ); - std::map::iterator l2o = me->myFwdLinks.find( link ); - if ( l2o != me->myFwdLinks.end() ) + std::map::const_iterator l2o = myFwdLinks.find( link ); + if ( l2o != myFwdLinks.end() ) ori = link.myOri * l2o->second * -1; links[ i ] = link; } @@ -1089,15 +1091,15 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const // orient and collect links of other non-oriented facets for ( size_t iF = 0; iF < myPolyFacetOri.size(); ++iF ) { - if ( me->myPolyFacetOri[ iF ] ) continue; // already oriented + if ( myPolyFacetOri[ iF ] ) continue; // already oriented setFace( iF ); links2.clear(); ori = 0; for ( int i = 0; i < myCurFace.myNbNodes && !ori; ++i ) { NLink link( myCurFace.myNodes[i], myCurFace.myNodes[i+1] ); - std::map::iterator l2o = me->myFwdLinks.find( link ); - if ( l2o != me->myFwdLinks.end() ) + std::map::const_iterator l2o = myFwdLinks.find( link ); + if ( l2o != myFwdLinks.end() ) ori = link.myOri * l2o->second * -1; links2.push_back( link ); } @@ -1116,8 +1118,8 @@ bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const ori = 0; for ( size_t i = 0; i < links.size() && !ori; ++i ) { - std::map::iterator l2o = me->myFwdLinks.find( links[i] ); - if ( l2o != me->myFwdLinks.end() ) + std::map::const_iterator l2o = myFwdLinks.find( links[i] ); + if ( l2o != myFwdLinks.end() ) ori = links[i].myOri * l2o->second * -1; } me->myPolyFacetOri[ faceIndex ] = ori; @@ -1390,7 +1392,7 @@ bool SMDS_VolumeTool::IsLinked (const SMDS_MeshNode* theNode1, // find nodes indices int i1 = -1, i2 = -1, nbFound = 0; - for ( int i = 0; i < myVolumeNodes.size() && nbFound < 2; i++ ) + for ( size_t i = 0; i < myVolumeNodes.size() && nbFound < 2; i++ ) { if ( myVolumeNodes[ i ] == theNode1 ) i1 = i, ++nbFound; @@ -1418,7 +1420,7 @@ bool SMDS_VolumeTool::IsLinked (const int theNode1Index, int minInd = min( theNode1Index, theNode2Index ); int maxInd = max( theNode1Index, theNode2Index ); - if ( minInd < 0 || maxInd > myVolumeNodes.size() - 1 || maxInd == minInd ) + if ( minInd < 0 || maxInd > (int)myVolumeNodes.size() - 1 || maxInd == minInd ) return false; VolumeType type = GetVolumeType(); @@ -1535,7 +1537,7 @@ bool SMDS_VolumeTool::IsLinked (const int theNode1Index, int SMDS_VolumeTool::GetNodeIndex(const SMDS_MeshNode* theNode) const { if ( myVolume ) { - for ( int i = 0; i < myVolumeNodes.size(); i++ ) { + for ( size_t i = 0; i < myVolumeNodes.size(); i++ ) { if ( myVolumeNodes[ i ] == theNode ) return i; } @@ -1596,8 +1598,8 @@ int SMDS_VolumeTool::GetAllExistingEdges(vector & edges { edges.clear(); edges.reserve( myVolumeNodes.size() * 2 ); - for ( int i = 0; i < myVolumeNodes.size()-1; ++i ) { - for ( int j = i + 1; j < myVolumeNodes.size(); ++j ) { + for ( size_t i = 0; i < myVolumeNodes.size()-1; ++i ) { + for ( size_t j = i + 1; j < myVolumeNodes.size(); ++j ) { if ( IsLinked( i, j )) { const SMDS_MeshElement* edge = SMDS_Mesh::FindEdge( myVolumeNodes[i], myVolumeNodes[j] );