EgtGeomKernel :

- estese funzionalità della classe Intervals.
This commit is contained in:
Dario Sassi
2020-06-15 06:30:43 +00:00
parent 05f981a0e4
commit cfbf187e9e
+64
View File
@@ -285,3 +285,67 @@ Intervals::GetPrev( double& dMin, double& dMax) const
dMax = m_Iter->second ;
return true ;
}
//----------------------------------------------------------------------------
bool
Intervals::IsInside( double dP) const
{
for ( const auto& Interv : m_vInts) {
if ( dP > Interv.first - m_dToler && dP < Interv.second + m_dToler)
return true ;
}
return false ;
}
//----------------------------------------------------------------------------
bool
Intervals::GetPrevNearest( double dP, double& dPrev) const
{
// se non ci sono intervalli validi
if ( m_vInts.empty())
return false ;
// se prima dell'inizio
if ( dP < m_vInts.front().first - m_dToler)
return false ;
for ( int i = int( m_vInts.size()) - 1 ; i >= 0 ; -- i) {
// se tra due intervalli validi
if ( dP > m_vInts[i].second + m_dToler) {
dPrev = m_vInts[i].second ;
return true ;
}
// se in un intervallo valido
else if ( dP > m_vInts[i].first - m_dToler) {
dPrev = dP ;
return true ;
}
}
// non trovato
return false ;
}
//----------------------------------------------------------------------------
bool
Intervals::GetNextNearest( double dP, double& dNext) const
{
// se non ci sono intervalli validi
if ( m_vInts.empty())
return false ;
// se dopo la fine
if ( dP > m_vInts.back().second + m_dToler)
return false ;
// ricerca tra e negli intervalli
for ( int i = 0 ; i < int( m_vInts.size()) ; ++ i) {
// se tra due intervalli validi
if ( dP < m_vInts[i].first - m_dToler) {
dNext = m_vInts[i].first ;
return true ;
}
// se in un intervallo valido
else if ( dP < m_vInts[i].second + m_dToler) {
dNext = dP ;
return true ;
}
}
// non trovato
return false ;
}