EgtGeomKernel.rc 1.6i2 :

- possibilità di impostare tolleranza sul costruttore di Intervals
- corretto errore su operatori booleani di Region con tratti piccoli su oggetti grandi
- estesi operatori booleani di regioni anche a regioni su piani paralleli.
This commit is contained in:
Dario Sassi
2015-09-13 17:00:17 +00:00
parent 78ec13da8c
commit c044f0c785
7 changed files with 44 additions and 29 deletions
+6 -6
View File
@@ -52,7 +52,7 @@ Intervals::Add( double dMin, double dMax)
auto iIter = m_lInts.begin() ;
while ( iIter != m_lInts.end()) {
// se interseca l'intervallo corrente
if ( dMin < iIter->second + EPS_SMALL && dMax > iIter->first - EPS_SMALL) {
if ( dMin < iIter->second + m_dToler && dMax > iIter->first - m_dToler) {
// se ha già interessato un intervallo precedente
if ( iInsert != m_lInts.end()) {
// aggiorno il massimo dell'intervallo già interessato
@@ -73,7 +73,7 @@ Intervals::Add( double dMin, double dMax)
}
}
// se il nuovo intervallo finisce prima
else if ( dMax <= iIter->first - EPS_SMALL) {
else if ( dMax <= iIter->first - m_dToler) {
// se non già inserito, lo faccio ora
if ( iInsert == m_lInts.end())
iInsert = m_lInts.emplace( iIter, dMin, dMax) ;
@@ -81,7 +81,7 @@ Intervals::Add( double dMin, double dMax)
break ;
}
// se il nuovo intervallo inizia dopo
else if ( dMin > iIter->second + EPS_SMALL)
else if ( dMin > iIter->second + m_dToler)
// passo al successivo
++ iIter ;
}
@@ -104,19 +104,19 @@ Intervals::Subtract( double dMin, double dMax)
// se interseca l'intervallo corrente
if ( dMin < iIter->second && dMax > iIter->first) {
// se devo limitarlo inferiormente
if ( dMin < ( iIter->first + EPS_SMALL) && dMax < ( iIter->second - EPS_SMALL)) {
if ( dMin < ( iIter->first + m_dToler) && dMax < ( iIter->second - m_dToler)) {
iIter->first = dMax ;
// passo al successivo
++ iIter ;
}
// se devo limitarlo superiormente
else if ( dMin > ( iIter->first + EPS_SMALL) && dMax > ( iIter->second - EPS_SMALL)) {
else if ( dMin > ( iIter->first + m_dToler) && dMax > ( iIter->second - m_dToler)) {
iIter->second = dMin ;
// passo al successivo
++ iIter ;
}
// se devo dividerlo in due parti
else if ( dMin > ( iIter->first + EPS_SMALL) && dMax < ( iIter->second - EPS_SMALL)) {
else if ( dMin > ( iIter->first + m_dToler) && dMax < ( iIter->second - m_dToler)) {
// inserisco il nuovo intervallo che corrisponde alla parte inferiore
iIter = m_lInts.emplace( iIter, iIter->first, dMin) ;
// modifico l'intervallo successivo