From d2cb613505e6b5c18b7a08f6a301247e72e95142 Mon Sep 17 00:00:00 2001 From: LorenzoM Date: Wed, 4 Aug 2021 12:18:35 +0200 Subject: [PATCH] Modifiche ad asportazioni volumi avanzate --- VolZmapVolume.cpp | 128 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 124 insertions(+), 4 deletions(-) diff --git a/VolZmapVolume.cpp b/VolZmapVolume.cpp index c802d37..9d3fde7 100644 --- a/VolZmapVolume.cpp +++ b/VolZmapVolume.cpp @@ -1810,7 +1810,34 @@ VolZmap::GenTool_ZDrilling( int nGrid, const Point3d& ptS, const Point3d& ptE, c if ( m_Tool.GetCuttingFlag()) CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; else if ( pCurve->GetTempProp( 1) == 1) { - /*SurfSpherePart_Milling( nGrid, ptCenS, ptCenS, vtToolDir, dRadius, double dInfH, double dSupH, bool bOuterCutter)*/ ; + double dStH = ptStart.y - ptCen.y ; + double dEnH = ptEnd.y - ptCen.y ; + // Tagliente esterno + if ( dEnH < dStH) { + if ( dEnH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, dEnH, dStH, true) ; + } + else if ( dStH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, dStH, true) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, dEnH, true) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, dEnH, dStH, true) ; + } + } + // Tagliente interno + else { + if ( dEnH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, abs( dEnH), abs( dStH), false) ; + } + else if ( dStH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, abs( dStH), false) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, abs( dEnH), false) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, abs( dStH), abs( dEnH), false) ; + } + } } // aggiorno l'altezza //dHeight = abs( ptStart.y - ptEnd.y) ; @@ -1944,7 +1971,38 @@ VolZmap::GenTool_ZMilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co Point3d ptCenS = ptI - vtToolDir * ( ptStart.y - ptCen.y) ; Point3d ptCenE = ptCenS + vtMove ; // Eseguo l'asportazione del materiale - CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; + if ( m_Tool.GetCuttingFlag()) + CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; + else if ( pCurve->GetTempProp( 1) == 1) { + double dStH = ptStart.y - ptCen.y ; + double dEnH = ptEnd.y - ptCen.y ; + // Tagliente esterno + if ( dEnH < dStH) { + if ( dEnH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, dEnH, dStH, true) ; + } + else if ( dStH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, dStH, true) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, dEnH, true) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, dEnH, dStH, true) ; + } + } + // Tagliente interno + else { + if ( dEnH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, abs( dEnH), abs( dStH), false) ; + } + else if ( dStH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, abs( dStH), false) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, abs( dEnH), false) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, abs( dStH), abs( dEnH), false) ; + } + } + } // aggiorno l'altezza //dHeight = abs( ptStart.y - ptEnd.y) ; } @@ -3242,7 +3300,38 @@ VolZmap::GenTool_Drilling( int nGrid, const Point3d& ptS, const Point3d& ptE, co Point3d ptCenS = ptI - vtToolDir * ( ptStart.y - ptCen.y) ; Point3d ptCenE = ptCenS + vtMove ; // Eseguo l'asportazione del materiale - CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; + if ( m_Tool.GetCuttingFlag()) + CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; + else if ( pCurve->GetTempProp( 1) == 1) { + double dStH = ptStart.y - ptCen.y ; + double dEnH = ptEnd.y - ptCen.y ; + // Tagliente esterno + if ( dEnH < dStH) { + if ( dEnH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, dEnH, dStH, true) ; + } + else if ( dStH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, dStH, true) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, dEnH, true) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, dEnH, dStH, true) ; + } + } + // Tagliente interno + else { + if ( dEnH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, abs( dEnH), abs( dStH), false) ; + } + else if ( dStH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, abs( dStH), false) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, abs( dEnH), false) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, abs( dStH), abs( dEnH), false) ; + } + } + } // aggiorno l'altezza //dHeight = abs( ptStart.y - ptEnd.y) ; } @@ -3394,7 +3483,38 @@ VolZmap::GenTool_Milling( int nGrid, const Point3d& ptS, const Point3d& ptE, con Point3d ptCenS = ptI - vtToolDir * ( ptStart.y - ptCen.y) ; Point3d ptCenE = ptCenS + vtMove ; // Eseguo l'asportazione del materiale - CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; + if ( m_Tool.GetCuttingFlag()) + CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; + else if ( pCurve->GetTempProp( 1) == 1) { + double dStH = ptStart.y - ptCen.y ; + double dEnH = ptEnd.y - ptCen.y ; + // Tagliente esterno + if ( dEnH < dStH) { + if ( dEnH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, dEnH, dStH, true) ; + } + else if ( dStH > 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, dStH, true) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, dEnH, true) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, dEnH, dStH, true) ; + } + } + // Tagliente interno + else { + if ( dEnH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, abs( dEnH), abs( dStH), false) ; + } + else if ( dStH < 0) { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, vtToolDir, dRadius, 0, abs( dStH), false) ; + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, 0, abs( dEnH), false) ; + } + else { + SurfSpherePart_Milling( nGrid, ptCenS, ptCenE, - vtToolDir, dRadius, abs( dStH), abs( dEnH), false) ; + } + } + } // aggiorno l'altezza //dHeight = abs( ptStart.y - ptEnd.y) ; }