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
23092: EDF 10836 SMESH: UseExisting2DElements fails when geometry contains more than...
[modules/smesh.git]
/
src
/
SMESH
/
SMESH_subMesh.cxx
diff --git
a/src/SMESH/SMESH_subMesh.cxx
b/src/SMESH/SMESH_subMesh.cxx
index 59294a54c8f608fbd6fd4d8791e8c98d209e4262..3745a2b77afe3dcce5911f5de6506c17cef6f2fc 100644
(file)
--- a/
src/SMESH/SMESH_subMesh.cxx
+++ b/
src/SMESH/SMESH_subMesh.cxx
@@
-1,4
+1,4
@@
-// Copyright (C) 2007-201
4
CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-201
5
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
@@
-1861,10
+1861,13
@@
bool SMESH_subMesh::ComputeStateEngine(int event)
removeSubMeshElementsAndNodes();
break;
case SUBMESH_COMPUTED: // allow retry compute
removeSubMeshElementsAndNodes();
break;
case SUBMESH_COMPUTED: // allow retry compute
- if (_algoState == HYP_OK)
- _computeState = READY_TO_COMPUTE;
- else
- _computeState = NOT_READY;
+ if ( IsEmpty() ) // 23061
+ {
+ if (_algoState == HYP_OK)
+ _computeState = READY_TO_COMPUTE;
+ else
+ _computeState = NOT_READY;
+ }
break;
case SUBMESH_RESTORED:
ComputeSubMeshStateEngine( SUBMESH_RESTORED );
break;
case SUBMESH_RESTORED:
ComputeSubMeshStateEngine( SUBMESH_RESTORED );
@@
-2148,9
+2151,9
@@
TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
if ( mainShape.IsSame( _subShape ))
return _subShape;
if ( mainShape.IsSame( _subShape ))
return _subShape;
- const bool
ignoreAuxiliary
Hyps = false;
+ const bool
skipAux
Hyps = false;
list<const SMESHDS_Hypothesis*> aUsedHyp =
list<const SMESHDS_Hypothesis*> aUsedHyp =
- theAlgo->GetUsedHypothesis( *_father, _subShape,
ignoreAuxiliary
Hyps ); // copy
+ theAlgo->GetUsedHypothesis( *_father, _subShape,
skipAux
Hyps ); // copy
// put in a compound all shapes with the same hypothesis assigned
// and a good ComputeState
// put in a compound all shapes with the same hypothesis assigned
// and a good ComputeState
@@
-2161,11
+2164,13
@@
TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
theSubs.clear();
theSubs.clear();
-
TopExp_Explorer anExplorer( mainShape, _subShape.ShapeType()
);
-
for ( ; anExplorer.More(); anExplorer.Next
() )
+
SMESH_subMeshIteratorPtr smIt = _father->GetSubMesh( mainShape )->getDependsOnIterator(false
);
+
while ( smIt->more
() )
{
{
- const TopoDS_Shape& S = anExplorer.Current();
- SMESH_subMesh* subMesh = _father->GetSubMesh( S );
+ SMESH_subMesh* subMesh = smIt->next();
+ const TopoDS_Shape& S = subMesh->_subShape;
+ if ( S.ShapeType() != this->_subShape.ShapeType() )
+ continue;
theSubs.push_back( subMesh );
if ( subMesh == this )
{
theSubs.push_back( subMesh );
if ( subMesh == this )
{
@@
-2173,12
+2178,14
@@
TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
}
else if ( subMesh->GetComputeState() == READY_TO_COMPUTE )
{
}
else if ( subMesh->GetComputeState() == READY_TO_COMPUTE )
{
- SMESH_Algo* anAlgo = theGen->GetAlgo( subMesh );
- if (strcmp( anAlgo->GetName(), theAlgo->GetName()) == 0 && // same algo
- anAlgo->GetUsedHypothesis( *_father, S, ignoreAuxiliaryHyps ) == aUsedHyp) // same hyps
+ SMESH_Algo* anAlgo = subMesh->GetAlgo();
+ if (( anAlgo->IsSameName( *theAlgo )) && // same algo
+ ( anAlgo->GetUsedHypothesis( *_father, S, skipAuxHyps ) == aUsedHyp )) // same hyps
+ {
aBuilder.Add( aCompound, S );
aBuilder.Add( aCompound, S );
- if ( !subMesh->SubMeshesComputed() )
- theSubComputed = false;
+ if ( !subMesh->SubMeshesComputed() )
+ theSubComputed = false;
+ }
}
}
}
}
@@
-2463,9
+2470,8
@@
void SMESH_subMesh::deleteOwnListeners()
list< OwnListenerData >::iterator d;
for ( d = _ownListeners.begin(); d != _ownListeners.end(); ++d )
{
list< OwnListenerData >::iterator d;
for ( d = _ownListeners.begin(); d != _ownListeners.end(); ++d )
{
- if ( !_father->MeshExists( d->myMeshID ))
- continue;
- if ( _father->GetId() == d->myMeshID && !_father->GetSubMeshContaining( d->mySubMeshID ))
+ SMESH_Mesh* mesh = _father->FindMesh( d->myMeshID );
+ if ( !mesh || !mesh->GetSubMeshContaining( d->mySubMeshID ))
continue;
d->mySubMesh->DeleteEventListener( d->myListener );
}
continue;
d->mySubMesh->DeleteEventListener( d->myListener );
}