diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 15aa7c6..c67fb9b 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ diff --git a/VolZmapVolume.cpp b/VolZmapVolume.cpp index 80ed107..a4357bd 100644 --- a/VolZmapVolume.cpp +++ b/VolZmapVolume.cpp @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2016 +// EgalTech 2015-2019 //---------------------------------------------------------------------------- -// File : VolZmap.cpp Data : 22.01.15 Versione : 1.6a4 +// File : VolZmap.cpp Data : 01.03.19 Versione : 2.1c1 // Contenuto : Implementazione della classe Volume Zmap (tre griglie) // // @@ -2983,13 +2983,13 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con dHeight = abs( ptStart.y - ptEnd.y) ; if ( dHeight > EPS_SMALL) { // verifiche curva precedente per eventuale tappo sopra - bool bTapT = false ; + bool bTapT = true ; if ( pPrevCurve != nullptr && pPrevCurve->GetType() == CRV_LINE) { const ICurveLine* pOthLine = GetCurveLine( pPrevCurve) ; Point3d ptOthStart = pOthLine->GetStart() ; Point3d ptOthEnd = pOthLine->GetEnd() ; if ( abs( ptOthStart.y - ptOthEnd.y) < EPS_SMALL && ptOthStart.x < ptOthEnd.x) - bTapT = true ; + bTapT = false ; } // verifiche curva successiva per eventuale tappo sotto bool bTapB = false ; @@ -2999,7 +2999,7 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con Point3d ptOthStart = pOthLine->GetStart() ; Point3d ptOthEnd = pOthLine->GetEnd() ; if ( abs( ptOthStart.y - ptOthEnd.y) < EPS_SMALL && ptOthStart.x > ptOthEnd.x) - bTapB = true ; + bTapB = false ; } // Se X costante, è un cilindro if ( abs( ptStart.x - ptEnd.x) < EPS_SMALL) { @@ -3775,8 +3775,6 @@ VolZmap::CompConus_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE, double dConeMaxH = ( ( dMaxRad * dHei) / dDeltaR) ; double dConeMinH = dConeMaxH - dHei ; - bool bTapCylEn = bTapB ; - Point3d ptVertex = ( vtToolDir * ( ptE - ptS) > 0 ? ptS : ptE) - vtToolDir * dConeMaxH ; // Sistemi di riferimento del cono e del cilindro @@ -3798,13 +3796,13 @@ VolZmap::CompConus_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE, Vector3d vtN1, vtN2 ; // Cilindro - if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dH, dMaxRad, true, bTapCylEn, + if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dH, dMaxRad, true, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } // Cono - if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dConeMinH, dConeMaxH, bTapT, true, + if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dConeMinH, dConeMaxH, bTapB, true, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } @@ -3892,13 +3890,6 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, double dLongLen = vtMoveLong.Len() ; double dOrtLen = vtMoveOrt.Len() ; - // Variabili booleane per i tappi - Vector3d vtUmv = vtMove ; vtUmv.Normalize() ; - bool bCylSt = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ; - bool bCylEn = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ; - bool bElpsB = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ; - bool bElpsT = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ; - for ( int i = nStartI ; i <= nEndI ; ++ i) { for ( int j = nStartJ ; j <= nEndJ ; ++ j) { @@ -3909,7 +3900,7 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, // Cilindro iniziale CylFrame.ChangeOrig( ptITip) ; - if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bCylSt, bCylEn, ptInt1, vtN1, ptInt2, vtN2)) { + if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } @@ -3917,7 +3908,7 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, // del sistema di riferimento, quindi usiamo lo stesso sistema sommando a ptC // il vettore che congiunge le due origini. CylFrame.ChangeOrig( ptITip + vtMove) ; - if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bCylSt, bCylEn, ptInt1, vtN1, ptInt2, vtN2)) { + if ( IntersLineCylinder( ptC, Z_AX, CylFrame, dHei, dRad, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } @@ -3928,21 +3919,23 @@ VolZmap::CompCyl_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } - // Cilindro ellittico di punta - CylFrame.ChangeOrig( ptITip) ; - if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen, - bElpsT, bElpsT, ptInt1, vtN1, ptInt2, vtN2)) { - SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; + // Se movimento non ortogonale all'asse cilindro ellittico di punta + if ( dOrtLen > EPS_SMALL) { + CylFrame.ChangeOrig( ptITip) ; + if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen, + bTapB, true, ptInt1, vtN1, ptInt2, vtN2)) { + SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; + } + + // Cilindro ellittico di base: L'unica differenza rispetto a prima è l'origine + // del sistema di riferimento, quindi usiamo lo stesso sistema sommando a ptC + // il vettore che congiunge le due origini. + CylFrame.ChangeOrig( ptITip + dHei * vtV1) ; + if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen, + true, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { + SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; + } } - - // Cilindro ellittico di base: L'unica differenza rispetto a prima è l'origine - // del sistema di riferimento, quindi usiamo lo stesso sistema sommando a ptC - // il vettore che congiunge le due origini. - CylFrame.ChangeOrig( ptITip + dHei * vtV1) ; - if ( IntersLineEllipticalCylinder( ptC, Z_AX, CylFrame, dRad, dLongLen, dOrtLen, - bElpsB, bElpsB, ptInt1, vtN1, ptInt2, vtN2)) { - SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; - } } } return true ; @@ -4030,12 +4023,6 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c Vector3d vtUmv = vtMove ; vtUmv.Normalize() ; - // Variabili booleane per i tappi - bool bConeT = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ; - bool bConeB = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ; - bool bElpsB = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapB) ; - bool bElpsT = ( abs( vtToolDir * vtUmv) > EPS_SMALL ? true : bTapT) ; - if ( dRatio * dTan <= 1) { for ( int i = nStartI ; i <= nEndI ; ++ i) { @@ -4048,13 +4035,13 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c // Cono iniziale ConusFrame.ChangeOrig( ptV) ; - if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bConeT, bConeB, ptInt1, vtN1, ptInt2, vtN2)) { + if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } // Cono finale ConusFrame.ChangeOrig( ptV + vtMove) ; - if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bConeT, bConeB, ptInt1, vtN1, ptInt2, vtN2)) { + if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bTapB, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } @@ -4191,18 +4178,22 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } - // Traslazione ellisse di punta - ConusFrame.ChangeOrig( ptV + vtV1 * dl) ; - if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMinRad, dLongLen, dOrtLen, - bElpsT, bElpsT, ptInt1, vtN1, ptInt2, vtN2)) { - SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; - } - - // Traslazione ellisse di base - ConusFrame.ChangeOrig( ptV + vtV1 * dL) ; - if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMaxRad, dLongLen, dOrtLen, - bElpsB, bElpsB, ptInt1, vtN1, ptInt2, vtN2)) { - SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; + // Se movimento non ortogonale all'asse sottraggo i cilindri ellittici + if ( dOrtLen > EPS_SMALL) { + + // Traslazione ellisse di punta + ConusFrame.ChangeOrig( ptV + vtV1 * dl) ; + if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMinRad, dLongLen, dOrtLen, + bTapB, true, ptInt1, vtN1, ptInt2, vtN2)) { + SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; + } + + // Traslazione ellisse di base + ConusFrame.ChangeOrig( ptV + vtV1 * dL) ; + if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMaxRad, dLongLen, dOrtLen, + true, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { + SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; + } } } } @@ -4220,14 +4211,14 @@ VolZmap::CompConus_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, c // Cono ConusFrame.ChangeOrig( ptV) ; - if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bConeT, bConeB, ptInt1, vtN1, ptInt2, vtN2)) { + if ( IntersLineConus( ptC, Z_AX, ConusFrame, dTan, dl, dL, bTapB, true, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } // Traslazione ellisse ConusFrame.ChangeOrig( ptV + vtV1 * dL) ; if ( IntersLineEllipticalCylinder( ptC, Z_AX, ConusFrame, dMaxRad, dLongLen, dOrtLen, - bConeB, bConeB, ptInt1, vtN1, ptInt2, vtN2)) { + true, bTapT, ptInt1, vtN1, ptInt2, vtN2)) { SubtractIntervals( nGrid, i, j, ptInt1.z, ptInt2.z, vtN1, vtN2) ; } }