EgtGeomKernel 2.1.10.1 :
- nuova versione delle operazioni booleane sulle superfici trimesh.
This commit is contained in:
+54
-53
@@ -622,40 +622,41 @@ VolZmap::CheckMapConnection( void)
|
||||
for ( int tInt = 0 ; tInt < int( m_Values[tMap][tDex].size()) ; ++ tInt) {
|
||||
|
||||
m_Values[tMap][tDex][tInt].nCompo = 0 ;
|
||||
// Controlli sui tratti di dexel non incidenti su nodi del reticolo
|
||||
if ( tMap == 0) {
|
||||
// Z degli estremi del segmento
|
||||
double dZMin = m_Values[tMap][tDex][tInt].dMin ;
|
||||
double dZMax = m_Values[tMap][tDex][tInt].dMax ;
|
||||
// Indici k dei voxels in cui cadono le Z
|
||||
int nKmin = int( floor( ( dZMin - 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
int nKmax = int( floor( ( dZMax + 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// Se cadono nello stesso voxel imposto a -1 il valore della componente connessa
|
||||
if ( nKmax - nKmin == 0)
|
||||
m_Values[tMap][tDex][tInt].nCompo = -1 ;
|
||||
}
|
||||
else if ( tMap == 1) {
|
||||
// X degli estremi del segmento
|
||||
double dXMin = m_Values[tMap][tDex][tInt].dMin ;
|
||||
double dXMax = m_Values[tMap][tDex][tInt].dMax ;
|
||||
// Indici i dei voxels in cui cadono le X
|
||||
int nImin = int( floor( ( dXMin - 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
int nImax = int( floor( ( dXMax + 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// Se cadono nello stesso voxel imposto a -1 il valore della componente connessa
|
||||
if ( nImax - nImin == 0)
|
||||
m_Values[tMap][tDex][tInt].nCompo = -1 ;
|
||||
}
|
||||
else {
|
||||
// Y degli estremi del segmento
|
||||
double dYMin = m_Values[tMap][tDex][tInt].dMin ;
|
||||
double dYMax = m_Values[tMap][tDex][tInt].dMax ;
|
||||
// Indici j dei voxels in cui cadono le X
|
||||
int nJmin = int( floor( ( dYMin - 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
int nJmax = int( floor( ( dYMax + 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// Se cadono nello stesso voxel imposto a -1 il valore della componente connessa
|
||||
if ( nJmax - nJmin == 0)
|
||||
m_Values[tMap][tDex][tInt].nCompo = -1 ;
|
||||
}
|
||||
|
||||
//// Controlli sui tratti di dexel non incidenti su nodi del reticolo
|
||||
// if ( tMap == 0) {
|
||||
// // Z degli estremi del segmento
|
||||
// double dZMin = m_Values[tMap][tDex][tInt].dMin ;
|
||||
// double dZMax = m_Values[tMap][tDex][tInt].dMax ;
|
||||
// // Indici k dei voxels in cui cadono le Z
|
||||
// int nKmin = int( floor( ( dZMin - 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// int nKmax = int( floor( ( dZMax + 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// // Se cadono nello stesso voxel imposto a -1 il valore della componente connessa
|
||||
// if ( nKmax - nKmin == 0)
|
||||
// m_Values[tMap][tDex][tInt].nCompo = -1 ;
|
||||
// }
|
||||
// else if ( tMap == 1) {
|
||||
// // X degli estremi del segmento
|
||||
// double dXMin = m_Values[tMap][tDex][tInt].dMin ;
|
||||
// double dXMax = m_Values[tMap][tDex][tInt].dMax ;
|
||||
// // Indici i dei voxels in cui cadono le X
|
||||
// int nImin = int( floor( ( dXMin - 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// int nImax = int( floor( ( dXMax + 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// // Se cadono nello stesso voxel imposto a -1 il valore della componente connessa
|
||||
// if ( nImax - nImin == 0)
|
||||
// m_Values[tMap][tDex][tInt].nCompo = -1 ;
|
||||
// }
|
||||
// else {
|
||||
// // Y degli estremi del segmento
|
||||
// double dYMin = m_Values[tMap][tDex][tInt].dMin ;
|
||||
// double dYMax = m_Values[tMap][tDex][tInt].dMax ;
|
||||
// // Indici j dei voxels in cui cadono le X
|
||||
// int nJmin = int( floor( ( dYMin - 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// int nJmax = int( floor( ( dYMax + 2 * EPS_SMALL) / m_dStep - 0.5)) ;
|
||||
// // Se cadono nello stesso voxel imposto a -1 il valore della componente connessa
|
||||
// if ( nJmax - nJmin == 0)
|
||||
// m_Values[tMap][tDex][tInt].nCompo = -1 ;
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -725,8 +726,8 @@ VolZmap::ExpandFromXInterval( IntContaier& IntCont)
|
||||
// Quote estreme del segmento lungo X
|
||||
double dMinX = m_Values[1][tDex][tInt].dMin ;
|
||||
double dMaxX = m_Values[1][tDex][tInt].dMax ;
|
||||
double dMinDX = max( floor( ( dMinX - EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMaxDX = max( floor( ( dMaxX + EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMinDX = max( floor( ( dMinX - 2 * EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMaxDX = max( floor( ( dMaxX + 2 * EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
// Indici estremi dei dei dexel ortogonali
|
||||
// che possono intersecare il segmento di partenza
|
||||
int tStartI = min( int( dMinDX), ( m_nNx[0] - 1)) ;
|
||||
@@ -746,8 +747,8 @@ VolZmap::ExpandFromXInterval( IntContaier& IntCont)
|
||||
// Se i segmenti si incrociano e il nuovo trovato non
|
||||
// ha già un indice assegnato, assegno l'indice e
|
||||
// aggiungo l'intervallo trovato allo stack.
|
||||
if ( dZmin - EPS_SMALL < dZ &&
|
||||
dZmax + EPS_SMALL > dZ &&
|
||||
if ( dZmin - 2 * EPS_SMALL < dZ &&
|
||||
dZmax + 2 * EPS_SMALL > dZ &&
|
||||
m_Values[0][tGrIndex1 * m_nNx[0] + tI][tIntZ].nCompo == 0) {
|
||||
m_Values[0][tGrIndex1 * m_nNx[0] + tI][tIntZ].nCompo = m_Values[1][tDex][tInt].nCompo ;
|
||||
IntervalIndexes NewInterval ;
|
||||
@@ -766,8 +767,8 @@ VolZmap::ExpandFromXInterval( IntContaier& IntCont)
|
||||
// Se i segmenti si incrociano e il nuovo trovato non
|
||||
// ha già un indice assegnato, assegno l'indice e
|
||||
// aggiungo l'intervallo trovato allo stack.
|
||||
if ( dYmin - EPS_SMALL < dY &&
|
||||
dYmax + EPS_SMALL > dY &&
|
||||
if ( dYmin - 2 * EPS_SMALL < dY &&
|
||||
dYmax + 2 * EPS_SMALL > dY &&
|
||||
m_Values[2][tI * m_nNx[2] + tGrIndex2][tIntY].nCompo == 0) {
|
||||
m_Values[2][tI * m_nNx[2] + tGrIndex2][tIntY].nCompo = m_Values[1][tDex][tInt].nCompo ;
|
||||
IntervalIndexes NewInterval ;
|
||||
@@ -796,8 +797,8 @@ VolZmap::ExpandFromYInterval( IntContaier& IntCont)
|
||||
// Quote estreme del segmento lungo Y
|
||||
double dMinY = m_Values[2][tDex][tInt].dMin ;
|
||||
double dMaxY = m_Values[2][tDex][tInt].dMax ;
|
||||
double dMinDY = max( floor( ( dMinY - EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMaxDY = max( floor( ( dMaxY + EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMinDY = max( floor( ( dMinY - 2 * EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMaxDY = max( floor( ( dMaxY + 2 * EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
// Indici estremi dei dei dexel ortogonali
|
||||
// che possono intersecare il segmento di partenza
|
||||
int tStartJ = min( int( dMinDY), ( m_nNy[0] - 1)) ;
|
||||
@@ -817,8 +818,8 @@ VolZmap::ExpandFromYInterval( IntContaier& IntCont)
|
||||
// Se i segmenti si incrociano e il nuovo trovato non
|
||||
// ha già un indice assegnato, assegno l'indice e
|
||||
// aggiungo l'intervallo trovato allo stack.
|
||||
if ( dZmin - EPS_SMALL < dZ &&
|
||||
dZmax + EPS_SMALL > dZ &&
|
||||
if ( dZmin - 2 * EPS_SMALL < dZ &&
|
||||
dZmax + 2 * EPS_SMALL > dZ &&
|
||||
m_Values[0][tJ * m_nNx[0] + tGrIndex2][tIntZ].nCompo == 0) {
|
||||
m_Values[0][tJ * m_nNx[0] + tGrIndex2][tIntZ].nCompo = m_Values[2][tDex][tInt].nCompo ;
|
||||
IntervalIndexes NewInterval ;
|
||||
@@ -837,8 +838,8 @@ VolZmap::ExpandFromYInterval( IntContaier& IntCont)
|
||||
// Se i segmenti si incrociano e il nuovo trovato non
|
||||
// ha già un indice assegnato, assegno l'indice e
|
||||
// aggiungo l'intervallo trovato allo stack.
|
||||
if ( dXmin - EPS_SMALL < dX &&
|
||||
dXmax + EPS_SMALL > dX &&
|
||||
if ( dXmin - 2 * EPS_SMALL < dX &&
|
||||
dXmax + 2 * EPS_SMALL > dX &&
|
||||
m_Values[1][tGrIndex1 * m_nNx[1] + tJ][tIntX].nCompo == 0) {
|
||||
m_Values[1][tGrIndex1 * m_nNx[1] + tJ][tIntX].nCompo = m_Values[2][tDex][tInt].nCompo ;
|
||||
IntervalIndexes NewInterval ;
|
||||
@@ -867,8 +868,8 @@ VolZmap::ExpandFromZInterval( IntContaier& IntCont)
|
||||
// Quote estreme del segmento lungo Z
|
||||
double dMinZ = m_Values[0][tDex][tInt].dMin ;
|
||||
double dMaxZ = m_Values[0][tDex][tInt].dMax ;
|
||||
double dMinDZ = max( floor( ( dMinZ - EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMaxDZ = max( floor( ( dMaxZ + EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMinDZ = max( floor( ( dMinZ - 2 * EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
double dMaxDZ = max( floor( ( dMaxZ + 2 * EPS_SMALL) / m_dStep - 0.5), 0.) ;
|
||||
// Indici estremi dei dexel ortogonali
|
||||
// che possono intersecare il segmento di partenza
|
||||
int tStartK = min( int( dMinDZ), ( m_nNy[1] - 1)) ;
|
||||
@@ -888,9 +889,9 @@ VolZmap::ExpandFromZInterval( IntContaier& IntCont)
|
||||
// Se i segmenti si incrociano e il nuovo trovato non
|
||||
// ha già un indice assegnato, assegno l'indice e
|
||||
// aggiungo l'intervallo trovato allo stack.
|
||||
if ( dXmin - EPS_SMALL < dX &&
|
||||
dXmax + EPS_SMALL > dX &&
|
||||
m_Values[1][tK * m_nNx[1] + tGrIndex2][tIntX].nCompo == 0) {
|
||||
if ( dXmin - 2 * EPS_SMALL < dX &&
|
||||
dXmax + 2 * EPS_SMALL > dX &&
|
||||
m_Values[1][tK * m_nNx[1] + tGrIndex2][tIntX].nCompo == 0) {
|
||||
m_Values[1][tK * m_nNx[1] + tGrIndex2][tIntX].nCompo = m_Values[0][tDex][tInt].nCompo ;
|
||||
IntervalIndexes NewInterval ;
|
||||
NewInterval.tMap = 1 ;
|
||||
@@ -908,8 +909,8 @@ VolZmap::ExpandFromZInterval( IntContaier& IntCont)
|
||||
// Se i segmenti si incrociano e il nuovo trovato non
|
||||
// ha già un indice assegnato, assegno l'indice e
|
||||
// aggiungo l'intervallo trovato allo stack.
|
||||
if ( dYmin - EPS_SMALL < dY &&
|
||||
dYmax + EPS_SMALL > dY &&
|
||||
if ( dYmin - 2 * EPS_SMALL < dY &&
|
||||
dYmax + 2 * EPS_SMALL > dY &&
|
||||
m_Values[2][tGrIndex1 * m_nNx[2] + tK][tIntY].nCompo == 0) {
|
||||
m_Values[2][tGrIndex1 * m_nNx[2] + tK][tIntY].nCompo = m_Values[0][tDex][tInt].nCompo ;
|
||||
IntervalIndexes NewInterval ;
|
||||
|
||||
Reference in New Issue
Block a user