Salome HOME
projects
/
modules
/
smesh.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix crash of SALOME_TESTS/Grids/smesh/bugs_13/N9
[modules/smesh.git]
/
src
/
SMDS
/
SMDS_VolumeTool.cxx
diff --git
a/src/SMDS/SMDS_VolumeTool.cxx
b/src/SMDS/SMDS_VolumeTool.cxx
index 8296de035dad4140e1a6b18f038d316e4d2157f0..d7dd7f826f6d2180446e8030667e976da1009946 100644
(file)
--- a/
src/SMDS/SMDS_VolumeTool.cxx
+++ b/
src/SMDS/SMDS_VolumeTool.cxx
@@
-1,4
+1,4
@@
-// Copyright (C) 2007-201
5
CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-201
6
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
//
// 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;
SaveFacet( SMDS_VolumeTool::Facet& facet ): myToRestore( facet )
{
mySaved = facet;
+ mySaved.myNodes.swap( facet.myNodes );
}
~SaveFacet()
{
if ( myToRestore.myIndex != mySaved.myIndex )
myToRestore = mySaved;
}
~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;
if ( !myVolume )
return false;
- for (
in
t 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();
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;
ori = ( minProj < 0 ? +1 : -1 );
me->myPolyFacetOri[ faceIndex ] = ori;
- if ( !m
e->m
yFwdLinks.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 );
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
// concave polyhedron
- if ( m
e->m
yFwdLinks.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 )
{
for ( size_t i = 0; i < myPolyFacetOri.size() && !ori; ++i )
- ori = m
e->m
yPolyFacetOri[ i ];
+ ori = myPolyFacetOri[ i ];
if ( !ori ) // none facet is oriented yet
{
if ( !ori ) // none facet is oriented yet
{
@@
-1058,10
+1060,10
@@
bool SMDS_VolumeTool::IsFaceExternal( int faceIndex ) const
me->myPolyFacetOri[ faceMostConvex ] = ori;
}
}
me->myPolyFacetOri[ faceMostConvex ] = ori;
}
}
- // collect links of the oriented facets in m
e->m
yFwdLinks
+ // collect links of the oriented facets in myFwdLinks
for ( size_t iF = 0; iF < myPolyFacetOri.size(); ++iF )
{
for ( size_t iF = 0; iF < myPolyFacetOri.size(); ++iF )
{
- ori = m
e->m
yPolyFacetOri[ iF ];
+ ori = myPolyFacetOri[ iF ];
if ( !ori ) continue;
setFace( iF );
for ( int i = 0; i < myCurFace.myNbNodes; ++i )
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] );
for ( int i = 0; i < myCurFace.myNbNodes && !ori; ++i )
{
NLink link( myCurFace.myNodes[i], myCurFace.myNodes[i+1] );
- std::map<Link, int>::
iterator l2o = me->
myFwdLinks.find( link );
- if ( l2o != m
e->m
yFwdLinks.end() )
+ std::map<Link, int>::
const_iterator l2o =
myFwdLinks.find( link );
+ if ( l2o != myFwdLinks.end() )
ori = link.myOri * l2o->second * -1;
links[ i ] = link;
}
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 )
{
// orient and collect links of other non-oriented facets
for ( size_t iF = 0; iF < myPolyFacetOri.size(); ++iF )
{
- if ( m
e->m
yPolyFacetOri[ 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] );
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<Link, int>::
iterator l2o = me->
myFwdLinks.find( link );
- if ( l2o != m
e->m
yFwdLinks.end() )
+ std::map<Link, int>::
const_iterator l2o =
myFwdLinks.find( link );
+ if ( l2o != myFwdLinks.end() )
ori = link.myOri * l2o->second * -1;
links2.push_back( link );
}
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 )
{
ori = 0;
for ( size_t i = 0; i < links.size() && !ori; ++i )
{
- std::map<Link, int>::
iterator l2o = me->
myFwdLinks.find( links[i] );
- if ( l2o != m
e->m
yFwdLinks.end() )
+ std::map<Link, int>::
const_iterator l2o =
myFwdLinks.find( links[i] );
+ if ( l2o != myFwdLinks.end() )
ori = links[i].myOri * l2o->second * -1;
}
me->myPolyFacetOri[ faceIndex ] = ori;
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;
// find nodes indices
int i1 = -1, i2 = -1, nbFound = 0;
- for (
in
t 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;
{
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 );
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();
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 ) {
int SMDS_VolumeTool::GetNodeIndex(const SMDS_MeshNode* theNode) const
{
if ( myVolume ) {
- for (
in
t i = 0; i < myVolumeNodes.size(); i++ ) {
+ for (
size_
t i = 0; i < myVolumeNodes.size(); i++ ) {
if ( myVolumeNodes[ i ] == theNode )
return i;
}
if ( myVolumeNodes[ i ] == theNode )
return i;
}
@@
-1596,8
+1598,8
@@
int SMDS_VolumeTool::GetAllExistingEdges(vector<const SMDS_MeshElement*> & edges
{
edges.clear();
edges.reserve( myVolumeNodes.size() * 2 );
{
edges.clear();
edges.reserve( myVolumeNodes.size() * 2 );
- for (
in
t i = 0; i < myVolumeNodes.size()-1; ++i ) {
- for (
in
t 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] );
if ( IsLinked( i, j )) {
const SMDS_MeshElement* edge =
SMDS_Mesh::FindEdge( myVolumeNodes[i], myVolumeNodes[j] );