EgtGeomKernel 1.9b3 :
- modifiche per Zmap.
This commit is contained in:
+110
-65
@@ -1648,7 +1648,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
for ( int i = nLimits[0] ; i < nLimits[1] ; ++ i) {
|
||||
for ( int j = nLimits[2] ; j < nLimits[3] ; ++ j) {
|
||||
for ( int k = nLimits[4] ; k < nLimits[5] ; ++ k) {
|
||||
|
||||
|
||||
// Classificazione dei vertici: interni o esterni al materiale
|
||||
int nIndex = CalcIndex( i, j, k) ;
|
||||
|
||||
@@ -1954,7 +1954,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
GridControl( VecField, CompoVert, nIndArrey, nVertComp, nCompCount, bGridControl) ;
|
||||
|
||||
// Flag ExtMC
|
||||
bool bExtMC = ( nFeatureType != NO_FEATURE && bGridControl) ;
|
||||
bool bExtMC = ( nFeatureType != NO_FEATURE /*&& bGridControl*/) ;
|
||||
|
||||
// Extended MC
|
||||
if ( bExtMC) {
|
||||
@@ -2065,7 +2065,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
// Setto le normali a ogni vertice
|
||||
CurrentTriangle.SetVertexNorm( 1, CompoVert[nCompCount - 1][nj].vtNorm) ;
|
||||
CurrentTriangle.SetVertexNorm( 2, CompoVert[nCompCount - 1][ni].vtNorm) ;
|
||||
if ( CurrentTriangle.GetVertexNorm( 1) * CurrentTriangle.GetVertexNorm( 2) > 0)
|
||||
if ( CurrentTriangle.GetVertexNorm( 1) * CurrentTriangle.GetVertexNorm( 2) > 0.5)
|
||||
CurrentTriangle.SetVertexNorm( 0, 0.5 * ( CurrentTriangle.GetVertexNorm( 1) +
|
||||
CurrentTriangle.GetVertexNorm( 2))) ;
|
||||
// Valido il triangolo
|
||||
@@ -2157,7 +2157,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
CurrentTriangle.SetAttrib( 2, CompoVert[nCompCount - 1][ni].nToolFlag) ;
|
||||
CurrentTriangle.SetVertexNorm( 1, CompoVert[nCompCount - 1][nj].vtNorm) ;
|
||||
CurrentTriangle.SetVertexNorm( 2, CompoVert[nCompCount - 1][ni].vtNorm) ;
|
||||
if ( CurrentTriangle.GetVertexNorm( 1) * CurrentTriangle.GetVertexNorm( 2) > 0)
|
||||
if ( CurrentTriangle.GetVertexNorm( 1) * CurrentTriangle.GetVertexNorm( 2) > 0.5)
|
||||
CurrentTriangle.SetVertexNorm( 0, 0.5 * ( CurrentTriangle.GetVertexNorm( 1) +
|
||||
CurrentTriangle.GetVertexNorm( 2))) ;
|
||||
// Valido il triangolo
|
||||
@@ -2246,7 +2246,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
CurrentTriangle.SetAttrib( 2, CompoVert[nCompCount - 1][ni].nToolFlag) ;
|
||||
CurrentTriangle.SetVertexNorm( 1, CompoVert[nCompCount - 1][nj].vtNorm) ;
|
||||
CurrentTriangle.SetVertexNorm( 2, CompoVert[nCompCount - 1][ni].vtNorm) ;
|
||||
if ( CurrentTriangle.GetVertexNorm( 1) * CurrentTriangle.GetVertexNorm( 2) > 0)
|
||||
if ( CurrentTriangle.GetVertexNorm( 1) * CurrentTriangle.GetVertexNorm( 2) > 0.5)
|
||||
CurrentTriangle.SetVertexNorm( 0, 0.5 * ( CurrentTriangle.GetVertexNorm( 1) +
|
||||
CurrentTriangle.GetVertexNorm( 2))) ;
|
||||
CurrentTriangle.Validate( true) ;
|
||||
@@ -2305,7 +2305,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
bool bBoundary = IsAVoxelOnBoundary( nLimits, nVoxIndexes, true) ;
|
||||
|
||||
TRIA3DEXVECTOR vInnerTriaTemp, vBorderTriaTemp ;
|
||||
|
||||
|
||||
for ( int ni = 0 ; ni < nContSize ; ++ ni) {
|
||||
|
||||
// Se l'area è non nulla aggiungo il triangolo a uno dei due vettori.
|
||||
@@ -2317,7 +2317,7 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
if ( ! bBoundary || ! bTriangleOnBorder)
|
||||
vInnerTriaTemp.emplace_back( triContainer[ni]) ;
|
||||
else
|
||||
vBorderTriaTemp.emplace_back( triContainer[ni]) ;
|
||||
vBorderTriaTemp.emplace_back( triContainer[ni]) ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2379,7 +2379,8 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
// voxel, ridimensiono il vettore che contiene
|
||||
// la struttura dati del voxel.
|
||||
if ( nBorderFeatureInVoxel == 1) {
|
||||
m_InterBlockTria[nBlock].resize( m_InterBlockTria[nBlock].size() + 1) ;
|
||||
// Aggiungo un voxel al blocco per i triangoli
|
||||
m_InterBlockTria[nBlock].resize( m_InterBlockTria[nBlock].size() + 1) ;
|
||||
// Questi dati dipendono solo dal voxel
|
||||
int nCurrent = int( m_InterBlockTria[nBlock].size()) - 1 ;
|
||||
m_InterBlockTria[nBlock][nCurrent].i = i ;
|
||||
@@ -2397,11 +2398,11 @@ VolZmap::ExtMarchingCubes( int nBlock, TRIA3DEXLIST& lstTria, TriHolder& triHold
|
||||
int nNewFeatureNum = nOldFeatureNum + 1 ;
|
||||
|
||||
// Aggiungo una componente per il vettore dei triangoli della componente connessa
|
||||
m_InterBlockTria[nBlock][nCurrent].vCompoTria.resize( nNewFeatureNum) ;
|
||||
m_InterBlockTria[nBlock][nCurrent].vCompoTria.resize( nNewFeatureNum) ;
|
||||
for ( int ni = 0 ; ni < int( vBorderTriaTemp.size()) ; ++ ni) {
|
||||
// Riporto le coordinate nel sistema in cui è immerso lo Zmap
|
||||
vBorderTriaTemp[ni].ToGlob( m_MapFrame) ;
|
||||
m_InterBlockTria[nBlock][nCurrent].vCompoTria[nOldFeatureNum].emplace_back( vBorderTriaTemp[ni]) ;
|
||||
m_InterBlockTria[nBlock][nCurrent].vCompoTria[nOldFeatureNum].emplace_back( vBorderTriaTemp[ni]) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2689,43 +2690,45 @@ VolZmap::FlipEdgesII( TriHolder& TriHold) const
|
||||
}
|
||||
else {
|
||||
// In questo caso i due triangoli sono necessariamente su un piano,
|
||||
// quindi hanno normali concordi. Per ognuno dei due cerco nei rispettivi
|
||||
// ventagli un triangolo con normale concorde con colore definito. Assegno
|
||||
// tale colore ai triangoli.
|
||||
int nPrv1 = ( nTri1 != 0 ? nTri1 : int( TriHold[n1].vCompoTria[nCompo1].size())) - 1 ;
|
||||
int nNxt1 = ( nTri1 != TriHold[n1].vCompoTria[nCompo1].size() - 1 ? nTri1 + 1 : 0) ;
|
||||
int nPrv2 = ( nTri2 != 0 ? nTri2 : int( TriHold[n2].vCompoTria[nCompo2].size())) - 1 ;
|
||||
int nNxt2 = ( nTri2 != TriHold[n2].vCompoTria[nCompo2].size() - 1 ? nTri2 + 1 : 0) ;
|
||||
// Prodotti scalari del primo triangolo con i suoi adiacenti
|
||||
double dDotP1 = TriHold[n1].vCompoTria[nCompo1][nTri1].GetN() *
|
||||
TriHold[n1].vCompoTria[nCompo1][nPrv1].GetN() ;
|
||||
double dDotN1 = TriHold[n1].vCompoTria[nCompo1][nTri1].GetN() *
|
||||
TriHold[n1].vCompoTria[nCompo1][nNxt1].GetN() ;
|
||||
// Prendo il maggiore fra i due, e comunque maggiore di 0.5
|
||||
int nAdjT1 = - 1 ;
|
||||
if ( dDotP1 > 0.5 || dDotN1 > 0.5)
|
||||
nAdjT1 = ( dDotP1 > dDotN1 ? nPrv1 : nNxt1) ;
|
||||
// Prodotti scalari del primo triangolo con i suoi adiacenti
|
||||
double dDotP2 = TriHold[n2].vCompoTria[nCompo2][nTri2].GetN() *
|
||||
TriHold[n2].vCompoTria[nCompo2][nPrv2].GetN() ;
|
||||
double dDotN2 = TriHold[n2].vCompoTria[nCompo2][nTri2].GetN() *
|
||||
TriHold[n2].vCompoTria[nCompo2][nNxt2].GetN() ;
|
||||
// Prendo il maggiore fra i due, e comunque maggiore di 0.5
|
||||
int nAdjT2 = - 1 ;
|
||||
if ( dDotP2 > 0.5 || dDotN2 > 0.5)
|
||||
nAdjT2 = ( dDotP2 > dDotN2 ? nPrv2 : nNxt2) ;
|
||||
// Se abbiamo trovato triangoli adiacenti validi
|
||||
// assegnamo il colorea quelli correnti.
|
||||
if ( nAdjT1 != - 1) {
|
||||
int nCol = TriHold[n1].vCompoTria[nCompo1][nAdjT1].GetGrade() ;
|
||||
TriHold[n1].vCompoTria[nCompo1][nTri1].SetGrade( nCol) ;
|
||||
TriHold[n2].vCompoTria[nCompo2][nTri2].SetGrade( nCol) ;
|
||||
// quindi hanno normali concordi. A entrambi assegno il colore del vertice con
|
||||
// normale più concorde a quella del triangolo
|
||||
double dDotVec[4] ;
|
||||
dDotVec[0] = TriHold[n1].vCompoTria[nCompo1][nTri1].GetN() *
|
||||
TriHold[n1].vCompoTria[nCompo1][nTri1].GetVertexNorm( 1) ;
|
||||
dDotVec[1] = TriHold[n2].vCompoTria[nCompo2][nTri2].GetN() *
|
||||
TriHold[n2].vCompoTria[nCompo2][nTri2].GetVertexNorm( 2) ;
|
||||
dDotVec[2] = TriHold[n1].vCompoTria[nCompo1][nTri1].GetN() *
|
||||
TriHold[n1].vCompoTria[nCompo1][nTri1].GetVertexNorm( 2) ;
|
||||
dDotVec[3] = TriHold[n2].vCompoTria[nCompo2][nTri2].GetN() *
|
||||
TriHold[n2].vCompoTria[nCompo2][nTri2].GetVertexNorm( 1) ;
|
||||
// Cerco il massimo dei prodotti scalari
|
||||
int nMaxPos = 0 ;
|
||||
double dMaxDot = - 1 ;
|
||||
for ( int nPos = 0 ; nPos < 4 && dMaxDot < 1 ; ++ nPos) {
|
||||
if ( dDotVec[nPos] > dMaxDot) {
|
||||
dMaxDot = dDotVec[nPos] ;
|
||||
nMaxPos = nPos ;
|
||||
}
|
||||
}
|
||||
else if ( nAdjT2 != - 1) {
|
||||
int nCol = TriHold[n2].vCompoTria[nCompo2][nAdjT2].GetGrade() ;
|
||||
TriHold[n1].vCompoTria[nCompo1][nTri1].SetGrade( nCol) ;
|
||||
TriHold[n2].vCompoTria[nCompo2][nTri2].SetGrade( nCol) ;
|
||||
}
|
||||
// Trovo il colore associato al vertice di massimo prodotto scalare
|
||||
int nCol ;
|
||||
switch ( nMaxPos) {
|
||||
case 0 :
|
||||
nCol = TriHold[n1].vCompoTria[nCompo1][nTri1].GetAttrib( 1) ;
|
||||
break ;
|
||||
case 1 :
|
||||
nCol = TriHold[n2].vCompoTria[nCompo2][nTri2].GetAttrib( 2) ;
|
||||
break ;
|
||||
case 2 :
|
||||
nCol = TriHold[n1].vCompoTria[nCompo1][nTri1].GetAttrib( 2) ;
|
||||
break ;
|
||||
case 3 :
|
||||
nCol = TriHold[n2].vCompoTria[nCompo2][nTri2].GetAttrib( 1) ;
|
||||
break ;
|
||||
}
|
||||
// Assegno il colore ai triangoli
|
||||
TriHold[n1].vCompoTria[nCompo1][nTri1].SetGrade( nCol) ;
|
||||
TriHold[n2].vCompoTria[nCompo2][nTri2].SetGrade( nCol) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2825,27 +2828,69 @@ VolZmap::FlipEdgesBB( TriaMatrix& InterTria) const
|
||||
}
|
||||
// Se non vi è inversione eseguo il flipping
|
||||
if ( ! bInv) {
|
||||
// Vertice condiviso fra nTri1 e quello del suo fan
|
||||
int nColF = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetAttrib( 2) ;
|
||||
int nColL = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetAttrib( 2) ;
|
||||
// modifico punti e colori
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetP( 1, InterTria[tLB][tVLB].ptCompoVert[tCmpL]) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetP( 1, InterTria[tFB][tVFB].ptCompoVert[tCmpF]) ;
|
||||
// Vertice condiviso fra nTri1 e quello del suo fan
|
||||
int nColF = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetAttrib( 2) ;
|
||||
int nColL = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetAttrib( 2) ;
|
||||
// modifico punti e colori
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetP( 1, InterTria[tLB][tVLB].ptCompoVert[tCmpL]) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetP( 1, InterTria[tFB][tVFB].ptCompoVert[tCmpF]) ;
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetGrade( nColF) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetGrade( nColL) ;
|
||||
// Valido i triangoli
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].Validate( true) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].Validate( true) ;
|
||||
// Setto le normali a ogni vertice
|
||||
Vector3d vtNormF = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetVertexNorm( 2) ;
|
||||
Vector3d vtNormL = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetVertexNorm( 2) ;
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetVertexNorm( 1, vtNormF) ;
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetVertexNorm( 0, vtNormF) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetVertexNorm( 1, vtNormL) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetVertexNorm( 0, vtNormL) ;
|
||||
// Setto le normali a ogni vertice
|
||||
Vector3d vtNormF = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetVertexNorm( 2) ;
|
||||
Vector3d vtNormL = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetVertexNorm( 2) ;
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetVertexNorm( 1, vtNormF) ;
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetVertexNorm( 0, vtNormF) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetVertexNorm( 1, vtNormL) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetVertexNorm( 0, vtNormL) ;
|
||||
bModified = true ;
|
||||
break ;
|
||||
}
|
||||
else {
|
||||
// In questo caso i due triangoli sono necessariamente su un piano,
|
||||
// quindi hanno normali concordi. A entrambi assegno il colore del vertice con
|
||||
// normale più concorde a quella del triangolo
|
||||
double dDotVec[4] ;
|
||||
dDotVec[0] = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetN() *
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetVertexNorm( 1) ;
|
||||
dDotVec[1] = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetN() *
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetVertexNorm( 2) ;
|
||||
dDotVec[2] = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetN() *
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetVertexNorm( 2) ;
|
||||
dDotVec[3] = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetN() *
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetVertexNorm( 1) ;
|
||||
// Cerco il massimo dei prodotti scalari
|
||||
int nMaxPos = 0 ;
|
||||
double dMaxDot = - 1 ;
|
||||
for ( int nPos = 0 ; nPos < 4 && dMaxDot < 1 ; ++ nPos) {
|
||||
if ( dDotVec[nPos] > dMaxDot) {
|
||||
dMaxDot = dDotVec[nPos] ;
|
||||
nMaxPos = nPos ;
|
||||
}
|
||||
}
|
||||
// Trovo il colore associato al vertice di massimo prodotto scalare
|
||||
int nCol ;
|
||||
switch ( nMaxPos) {
|
||||
case 0 :
|
||||
nCol = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetAttrib( 1) ;
|
||||
break ;
|
||||
case 1 :
|
||||
nCol = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetAttrib( 2) ;
|
||||
break ;
|
||||
case 2 :
|
||||
nCol = InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].GetAttrib( 2) ;
|
||||
break ;
|
||||
case 3 :
|
||||
nCol = InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].GetAttrib( 1) ;
|
||||
break ;
|
||||
}
|
||||
// Assegno il colore ai triangoli
|
||||
InterTria[tFB][tVFB].vCompoTria[tCmpF][tTriFB].SetGrade( nCol) ;
|
||||
InterTria[tLB][tVLB].vCompoTria[tCmpL][tTriLB].SetGrade( nCol) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( bModified)
|
||||
@@ -2965,7 +3010,7 @@ VolZmap::IntersPos( int nVec1[], int nVec2[], bool bFirstCorner, VectorField& vf
|
||||
double dX = m_Values[1][nDexel][n].dMax ;
|
||||
while ( n >= 0 && dX > dMinX - dEps) {
|
||||
if ( dX < dMaxX + dEps) {
|
||||
vfField.ptInt.x = dX ;
|
||||
vfField.ptInt.x = Clamp( dX, dMinX + EPS_SMALL, dMaxX - EPS_SMALL) ;
|
||||
vfField.vtNorm = m_Values[1][nDexel][n].vtMaxN ;
|
||||
vfField.nToolFlag = m_Values[1][nDexel][n].nToolMax ;
|
||||
bFound = true ;
|
||||
@@ -2982,7 +3027,7 @@ VolZmap::IntersPos( int nVec1[], int nVec2[], bool bFirstCorner, VectorField& vf
|
||||
double dX = m_Values[1][nDexel][n].dMin ;
|
||||
while ( n < nSize && dX < dMaxX + dEps) {
|
||||
if ( dX > dMinX - dEps) {
|
||||
vfField.ptInt.x = dX ;
|
||||
vfField.ptInt.x = Clamp( dX, dMinX + EPS_SMALL, dMaxX - EPS_SMALL) ;
|
||||
vfField.vtNorm = m_Values[1][nDexel][n].vtMinN ;
|
||||
vfField.nToolFlag = m_Values[1][nDexel][n].nToolMin ;
|
||||
bFound = true ;
|
||||
@@ -3017,7 +3062,7 @@ VolZmap::IntersPos( int nVec1[], int nVec2[], bool bFirstCorner, VectorField& vf
|
||||
double dY = m_Values[2][nDexel][n].dMax ;
|
||||
while ( n >= 0 && dY > dMinY - dEps) {
|
||||
if ( dY < dMaxY + dEps) {
|
||||
vfField.ptInt.y = dY ;
|
||||
vfField.ptInt.y = Clamp( dY, dMinY + EPS_SMALL, dMaxY - EPS_SMALL) ;
|
||||
vfField.vtNorm = m_Values[2][nDexel][n].vtMaxN ;
|
||||
vfField.nToolFlag = m_Values[2][nDexel][n].nToolMax;
|
||||
bFound = true ;
|
||||
@@ -3034,7 +3079,7 @@ VolZmap::IntersPos( int nVec1[], int nVec2[], bool bFirstCorner, VectorField& vf
|
||||
double dY = m_Values[2][nDexel][n].dMin ;
|
||||
while ( n < nSize && dY < dMaxY + dEps) {
|
||||
if ( dY > dMinY - dEps) {
|
||||
vfField.ptInt.y = dY ;
|
||||
vfField.ptInt.y = Clamp( dY, dMinY + EPS_SMALL, dMaxY - EPS_SMALL) ;
|
||||
vfField.vtNorm = m_Values[2][nDexel][n].vtMinN ;
|
||||
vfField.nToolFlag = m_Values[2][nDexel][n].nToolMin ;
|
||||
bFound = true ;
|
||||
@@ -3069,7 +3114,7 @@ VolZmap::IntersPos( int nVec1[], int nVec2[], bool bFirstCorner, VectorField& vf
|
||||
double dZ = m_Values[0][nDexel][n].dMax ;
|
||||
while ( n >= 0 && dZ > dMinZ - dEps) {
|
||||
if ( dZ < dMaxZ + dEps) {
|
||||
vfField.ptInt.z = dZ ;
|
||||
vfField.ptInt.z = Clamp( dZ, dMinZ + EPS_SMALL, dMaxZ - EPS_SMALL) ;
|
||||
vfField.vtNorm = m_Values[0][nDexel][n].vtMaxN ;
|
||||
vfField.nToolFlag = m_Values[0][nDexel][n].nToolMax ;
|
||||
bFound = true ;
|
||||
@@ -3086,7 +3131,7 @@ VolZmap::IntersPos( int nVec1[], int nVec2[], bool bFirstCorner, VectorField& vf
|
||||
double dZ = m_Values[0][nDexel][n].dMin ;
|
||||
while ( n < nSize && dZ < dMaxZ + dEps) {
|
||||
if ( dZ > dMinZ - dEps) {
|
||||
vfField.ptInt.z = dZ ;
|
||||
vfField.ptInt.z = Clamp( dZ, dMinZ + EPS_SMALL, dMaxZ - EPS_SMALL) ;
|
||||
vfField.vtNorm = m_Values[0][nDexel][n].vtMinN ;
|
||||
vfField.nToolFlag = m_Values[0][nDexel][n].nToolMin ;
|
||||
bFound = true ;
|
||||
|
||||
Reference in New Issue
Block a user