EgtGeomKeller :

- correzione in calcolo triangoli di Zmap.
This commit is contained in:
Dario Sassi
2019-09-21 09:59:38 +00:00
parent a81c01f2d6
commit d63e2bf884
+18 -18
View File
@@ -2422,30 +2422,30 @@ VolZmap::RegulateFeaturesChain( vector<VoxelContainer>& vVecVox) const
double dMidU = ( ptMid - ptPSt) * vtStEn ;
double dCurU = ( ptPCur - ptPSt) * vtStEn ;
Point3d ptNew ;
Point3d ptPLine ;
Vector3d vtDLine ;
//Point3d ptPLine ;
//Vector3d vtDLine ;
if ( dMidU < dCurU) {
ptPLine = ptPEn ;
vtDLine = - vtCurrEn ;
//ptPLine = ptPEn ;
//vtDLine = - vtCurrEn ;
ptNew = ptPEn + ( ptMid - ptPEn) * vtCurrEn * vtCurrEn ;
}
else {
ptPLine = ptPSt ;
vtDLine = vtStCurr ;
//ptPLine = ptPSt ;
//vtDLine = vtStCurr ;
ptNew = ptPSt + ( ptMid - ptPSt) * vtStCurr * vtStCurr ;
}
Point3d ptCubeInf( ( CurVox.i * N_DEXVOXRATIO + 0.5) * m_dStep,
( CurVox.j * N_DEXVOXRATIO + 0.5) * m_dStep,
( CurVox.k * N_DEXVOXRATIO + 0.5) * m_dStep) ;
Point3d ptCubeSup( ( ( CurVox.i + 1) * N_DEXVOXRATIO + 0.5) * m_dStep,
( ( CurVox.j + 1) * N_DEXVOXRATIO + 0.5) * m_dStep,
( ( CurVox.k + 1) * N_DEXVOXRATIO + 0.5) * m_dStep) ;
double dU1, dU2 ;
if ( 1 - abs( vtStCurr * vtCurrEn ) < EPS_ZERO &&
IntersLineBox( ptPLine, vtDLine, ptCubeInf, ptCubeSup, dU1, dU2)) {
double dU = abs( dU1) < abs( dU2) ? dU1 + ( dU2 - dU1) / 2 : dU2 + ( dU1 - dU2) / 2 ;
ptNew = ptPLine + dU * vtDLine ;
}
//Point3d ptCubeInf( ( CurVox.i * N_DEXVOXRATIO + 0.5) * m_dStep,
// ( CurVox.j * N_DEXVOXRATIO + 0.5) * m_dStep,
// ( CurVox.k * N_DEXVOXRATIO + 0.5) * m_dStep) ;
//Point3d ptCubeSup( ( ( CurVox.i + 1) * N_DEXVOXRATIO + 0.5) * m_dStep,
// ( ( CurVox.j + 1) * N_DEXVOXRATIO + 0.5) * m_dStep,
// ( ( CurVox.k + 1) * N_DEXVOXRATIO + 0.5) * m_dStep) ;
//double dU1, dU2 ;
//if ( 1 - abs( vtStCurr * vtCurrEn ) < EPS_ZERO &&
// IntersLineBox( ptPLine, vtDLine, ptCubeInf, ptCubeSup, dU1, dU2)) {
// double dU = abs( dU1) < abs( dU2) ? dU1 + ( dU2 - dU1) / 2 : dU2 + ( dU1 - dU2) / 2 ;
// ptNew = ptPLine + dU * vtDLine ;
//}
bool bNewInside = IsPointInsideVoxelApprox( CurVox.i, CurVox.j, CurVox.k, ptNew, 0) ;
if ( abs( vtStCurr * vtStEn) > 0.95 && abs( vtStCurr * vtCurrEn) > 0.95 &&
abs( vtStEn * vtCurrEn) > 0.95) {