static int MYDEBUG = 0;
#endif
+#define cSMESH_Hyp(h) static_cast<const SMESH_Hypothesis*>(h)
//=============================================================================
/*!
}
//=======================================================================
-//function : GetHypothesis
-//purpose :
+/*!
+ * \brief Return the hypothesis assigned to the shape
+ * \param aSubShape - the shape to check
+ * \param aFilter - the hypothesis filter
+ * \param andAncestors - flag to check hypos assigned to ancestors of the shape
+ * \retval SMESH_Hypothesis* - the first hypo passed through aFilter
+ */
//=======================================================================
const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const TopoDS_Shape & aSubShape,
const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
for ( ; hyp != hypList.end(); hyp++ ) {
- const SMESH_Hypothesis * h = static_cast<const SMESH_Hypothesis*>( *hyp );
+ const SMESH_Hypothesis * h = cSMESH_Hyp( *hyp );
if ( aFilter.IsOk( h, aSubShape))
return h;
}
const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(it.Value());
list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
for ( ; hyp != hypList.end(); hyp++ ) {
- const SMESH_Hypothesis * h = static_cast<const SMESH_Hypothesis*>( *hyp );
+ const SMESH_Hypothesis * h = cSMESH_Hyp( *hyp );
if (aFilter.IsOk( h, it.Value() ))
return h;
}
return 0;
}
-//=======================================================================
-//function : GetHypotheses
-//purpose :
-//=======================================================================
-
//================================================================================
/*!
* \brief Return hypothesis assigned to the shape
set<string> hypTypes; // to exclude same type hypos from the result list
int nbHyps = 0;
+ // only one main hypothesis is allowed
+ bool mainHypFound = false;
+
// fill in hypTypes
list<const SMESHDS_Hypothesis*>::const_iterator hyp;
- for ( hyp = aHypList.begin(); hyp != aHypList.end(); hyp++ )
+ for ( hyp = aHypList.begin(); hyp != aHypList.end(); hyp++ ) {
if ( hypTypes.insert( (*hyp)->GetName() ).second )
nbHyps++;
+ if ( !cSMESH_Hyp(*hyp)->IsAuxiliary() )
+ mainHypFound = true;
+ }
// get hypos from aSubShape
{
const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
- if ( aFilter.IsOk (static_cast<const SMESH_Hypothesis*>( *hyp ), aSubShape) &&
+ if ( aFilter.IsOk (cSMESH_Hyp( *hyp ), aSubShape) &&
+ ( cSMESH_Hyp(*hyp)->IsAuxiliary() || !mainHypFound ) &&
hypTypes.insert( (*hyp)->GetName() ).second )
{
aHypList.push_back( *hyp );
nbHyps++;
+ if ( !cSMESH_Hyp(*hyp)->IsAuxiliary() )
+ mainHypFound = true;
}
}
continue;
const list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(it.Value());
for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
- if (aFilter.IsOk( static_cast<const SMESH_Hypothesis*>( *hyp ), it.Value() ) &&
- hypTypes.insert( (*hyp)->GetName() ).second ) {
+ if (aFilter.IsOk( cSMESH_Hyp( *hyp ), it.Value() ) &&
+ ( cSMESH_Hyp(*hyp)->IsAuxiliary() || !mainHypFound ) &&
+ hypTypes.insert( (*hyp)->GetName() ).second )
+ {
aHypList.push_back( *hyp );
nbHyps++;
+ if ( !cSMESH_Hyp(*hyp)->IsAuxiliary() )
+ mainHypFound = true;
}
}
}
{
Unexpect aCatch(SalomeException);
- const SMESH_Hypothesis* hyp = static_cast<const SMESH_Hypothesis*>(theChangedHyp);
+ const SMESH_Hypothesis* hyp = cSMESH_Hyp(theChangedHyp);
const SMESH_Algo *foundAlgo = 0;
SMESH_HypoFilter algoKind( SMESH_HypoFilter::IsAlgo() );