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
#17636 [CEA 17369] Extrusion by normal: along average normal option issue
[modules/smesh.git]
/
src
/
SMESH
/
SMESH_subMesh.cxx
diff --git
a/src/SMESH/SMESH_subMesh.cxx
b/src/SMESH/SMESH_subMesh.cxx
index 5b5de318b6a1d46e29ff7f5990f9e62222989fef..f58cbe5b3456d37bfeeb99d8da57cc1b57dfd9c0 100644
(file)
--- a/
src/SMESH/SMESH_subMesh.cxx
+++ b/
src/SMESH/SMESH_subMesh.cxx
@@
-1,4
+1,4
@@
-// Copyright (C) 2007-201
6
CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-201
9
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
@@
-201,7
+201,7
@@
SMESH_Algo* SMESH_subMesh::GetAlgo() const
if ( !_algo )
{
SMESH_subMesh* me = const_cast< SMESH_subMesh* >( this );
if ( !_algo )
{
SMESH_subMesh* me = const_cast< SMESH_subMesh* >( this );
- me->_algo = _father->GetGen()->GetAlgo( me );
+ me->_algo = _father->GetGen()->GetAlgo( me
, & me->_algoShape
);
}
return _algo;
}
}
return _algo;
}
@@
-365,7
+365,7
@@
int SMESH_subMesh::computeCost() const
*/
//=============================================================================
*/
//=============================================================================
-const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
+const
std::
map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
{
if ( _dependenceAnalysed || !_father->HasShapeToMesh() )
return _mapDepend;
{
if ( _dependenceAnalysed || !_father->HasShapeToMesh() )
return _mapDepend;
@@
-878,7
+878,10
@@
SMESH_Hypothesis::Hypothesis_Status
const SMESH_Hypothesis * prevAlgo = _father->GetHypothesis( this, f, true );
if (prevAlgo &&
string( algo->GetName()) != prevAlgo->GetName())
const SMESH_Hypothesis * prevAlgo = _father->GetHypothesis( this, f, true );
if (prevAlgo &&
string( algo->GetName()) != prevAlgo->GetName())
- modifiedHyp = true;
+ {
+ oldAlgoState = NO_ALGO; // force setting event listener (#16648)
+ modifiedHyp = true;
+ }
}
else
setAlgoState(MISSING_HYP);
}
else
setAlgoState(MISSING_HYP);
@@
-1683,6
+1686,8
@@
bool SMESH_subMesh::ComputeStateEngine(compute_event event)
else
updateDependantsState( SUBMESH_COMPUTED );
}
else
updateDependantsState( SUBMESH_COMPUTED );
}
+ // let algo clear its data gathered while algo->Compute()
+ algo->CheckHypothesis((*_father), _subShape, hyp_status);
}
break;
case COMPUTE_CANCELED: // nothing to do
}
break;
case COMPUTE_CANCELED: // nothing to do
@@
-2115,8
+2120,9
@@
TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
return _subShape;
const bool skipAuxHyps = false;
return _subShape;
const bool skipAuxHyps = false;
- list<const SMESHDS_Hypothesis*>
aUsedHyp
=
+ list<const SMESHDS_Hypothesis*>
usedHyps
=
theAlgo->GetUsedHypothesis( *_father, _subShape, skipAuxHyps ); // copy
theAlgo->GetUsedHypothesis( *_father, _subShape, skipAuxHyps ); // copy
+ std::list < TopoDS_Shape > assiShapes = theAlgo->GetAssignedShapes();
// 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
@@
-2143,7
+2149,9
@@
TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * theGen,
{
SMESH_Algo* anAlgo = subMesh->GetAlgo();
if (( anAlgo->IsSameName( *theAlgo )) && // same algo
{
SMESH_Algo* anAlgo = subMesh->GetAlgo();
if (( anAlgo->IsSameName( *theAlgo )) && // same algo
- ( anAlgo->GetUsedHypothesis( *_father, S, skipAuxHyps ) == aUsedHyp )) // same hyps
+ ( anAlgo->GetUsedHypothesis( *_father, S, skipAuxHyps ) == usedHyps ) && // same hyps
+ ( anAlgo->GetAssignedShapes() == assiShapes ) && // on same sub-shapes
+ ( _algoShape == subMesh->_algoShape ))
{
aBuilder.Add( aCompound, S );
if ( !subMesh->SubMeshesComputed() )
{
aBuilder.Add( aCompound, S );
if ( !subMesh->SubMeshesComputed() )
@@
-2450,7
+2458,8
@@
void SMESH_subMesh::loadDependentMeshes()
{
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 != d->mySubMesh->_father )
+ if ( _father != d->mySubMesh->_father &&
+ _father->FindMesh( d->myMeshID ))
d->mySubMesh->_father->Load();
// map< EventListener*, EventListenerData* >::iterator l_d = _eventListeners.begin();
d->mySubMesh->_father->Load();
// map< EventListener*, EventListenerData* >::iterator l_d = _eventListeners.begin();
@@
-2592,10
+2601,12
@@
const std::vector< SMESH_subMesh * > & SMESH_subMesh::GetAncestors() const
SMESH_subMesh* me = const_cast< SMESH_subMesh* >( this );
me->_ancestors.reserve( ancShapes.Extent() );
SMESH_subMesh* me = const_cast< SMESH_subMesh* >( this );
me->_ancestors.reserve( ancShapes.Extent() );
- TopTools_MapOfShape map;
-
// assure that all sub-meshes exist
// assure that all sub-meshes exist
- _father->GetSubMesh( _father->GetShapeToMesh() )->DependsOn();
+ TopoDS_Shape mainShape = _father->GetShapeToMesh();
+ if ( !mainShape.IsNull() )
+ _father->GetSubMesh( mainShape )->DependsOn();
+
+ TopTools_MapOfShape map;
for ( TopTools_ListIteratorOfListOfShape it( ancShapes ); it.More(); it.Next() )
if ( SMESH_subMesh* sm = _father->GetSubMeshContaining( it.Value() ))
for ( TopTools_ListIteratorOfListOfShape it( ancShapes ); it.More(); it.Next() )
if ( SMESH_subMesh* sm = _father->GetSubMeshContaining( it.Value() ))