From 1cf91116aacf838cbbba0c48b90b6391cb2b19f2 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 22 May 2018 07:58:32 +0000 Subject: [PATCH] EgtGeomKernel 1.9e4 : - correzione calcolo spilloni Zmap con movimenti perpendicolari asse utensile. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes VolZmapVolume.cpp | 809 +++++++++++++++++++++++----------------------- 2 files changed, 397 insertions(+), 412 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 49b4931eb774b5314af7b3d949153a8671f7dc3b..ce86144703e8fec428ae299b16e2799c10d6a373 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&P#&A-_cnHfzcD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-WjGrO delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR diff --git a/VolZmapVolume.cpp b/VolZmapVolume.cpp index c27a461..b84c0f2 100644 --- a/VolZmapVolume.cpp +++ b/VolZmapVolume.cpp @@ -29,8 +29,8 @@ using namespace std ; //---------------------------------------------------------------------------- bool VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ, - double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) -{ + double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) +{ const double dTol = EPS_ZERO ; // Controllo che dMin e dMax non siano quasi coincidenti @@ -66,17 +66,17 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ swap( vtNma.y, vtNma.z) ; swap( vtNma.x, vtNma.z) ; } - + // Calcolo nPos - unsigned int nPos = nJ * m_nNx[nGrid] + nI ; - + unsigned int nPos = nJ * m_nNx[nGrid] + nI ; + // Ciclo sugli intervalli del singolo dexel bool bModified = false ; unsigned int i = 0 ; while ( i < m_Values[nGrid][nPos].size()) { // Casi: - // Intervallo da sottrarre č tutto a sinistra di quello corrente, non vi č intersezione + // Intervallo da sottrarre č tutto a sinistra di quello corrente, non vi č intersezione if ( m_Values[nGrid][nPos][i].dMin > dMax - dTol) { ; } @@ -88,7 +88,7 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ // Aggiornamento dati del tratto di dexel m_Values[nGrid][nPos][i].dMin = dMax ; m_Values[nGrid][nPos][i].vtMinN = vtNma ; - m_Values[nGrid][nPos][i].nToolMin = m_Tool.GetCurrentToolNum() ; + m_Values[nGrid][nPos][i].nToolMin = m_Tool.GetCurrentToolNum() ; } // L'intervallo si divide in due intervalli else { @@ -96,12 +96,12 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ // Aumento la dimensione del dexel m_Values[nGrid][nPos].resize( m_Values[nGrid][nPos].size() + 1) ; - size_t nStartT = max( 0, int( m_Values[nGrid][nPos].size()) - 1) ; + size_t nStartT = max( 0, int( m_Values[nGrid][nPos].size()) - 1) ; // Sposto i tratti successivi a quello corrente in avanti di una posizione for ( size_t j = nStartT ; j >= i + 2 ; -- j) { // Quote estreme - m_Values[nGrid][nPos][j].dMax = m_Values[nGrid][nPos][j - 1].dMax ; + m_Values[nGrid][nPos][j].dMax = m_Values[nGrid][nPos][j - 1].dMax ; m_Values[nGrid][nPos][j].dMin = m_Values[nGrid][nPos][j - 1].dMin ; // Normali m_Values[nGrid][nPos][j].vtMaxN = m_Values[nGrid][nPos][j - 1].vtMaxN ; @@ -110,16 +110,16 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ m_Values[nGrid][nPos][j].nToolMax = m_Values[nGrid][nPos][j - 1].nToolMax ; m_Values[nGrid][nPos][j].nToolMin = m_Values[nGrid][nPos][j - 1].nToolMin ; // Indice di componente - m_Values[nGrid][nPos][j].nCompo = m_Values[nGrid][nPos][j - 1].nCompo ; + m_Values[nGrid][nPos][j].nCompo = m_Values[nGrid][nPos][j - 1].nCompo ; } // Divido in due il tratto corrente // Parte superiore - m_Values[nGrid][nPos][i + 1].dMax = m_Values[nGrid][nPos][i].dMax ; + m_Values[nGrid][nPos][i + 1].dMax = m_Values[nGrid][nPos][i].dMax ; m_Values[nGrid][nPos][i + 1].vtMaxN = m_Values[nGrid][nPos][i].vtMaxN ; - m_Values[nGrid][nPos][i + 1].nToolMax = m_Values[nGrid][nPos][i].nToolMax ; - m_Values[nGrid][nPos][i + 1].dMin = dMax ; + m_Values[nGrid][nPos][i + 1].nToolMax = m_Values[nGrid][nPos][i].nToolMax ; + m_Values[nGrid][nPos][i + 1].dMin = dMax ; m_Values[nGrid][nPos][i + 1].vtMinN = vtNma ; m_Values[nGrid][nPos][i + 1].nToolMin = m_Tool.GetCurrentToolNum() ; m_Values[nGrid][nPos][i + 1].nCompo = m_Values[nGrid][nPos][i].nCompo ; @@ -149,7 +149,7 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ m_Values[nGrid][nPos][j].nToolMin = m_Values[nGrid][nPos][j + 1].nToolMin ; m_Values[nGrid][nPos][j].nToolMax = m_Values[nGrid][nPos][j + 1].nToolMax ; - m_Values[nGrid][nPos][j].nCompo = m_Values[nGrid][nPos][j + 1].nCompo ; + m_Values[nGrid][nPos][j].nCompo = m_Values[nGrid][nPos][j + 1].nCompo ; } // Riduco la dimensione del dexel @@ -218,16 +218,16 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ for ( int tI = 0 ; tI < nXStop ; ++ tI) { for ( int tJ = 0 ; tJ < nYStop ; ++ tJ) { - for ( int k = nMinZBlock ; k <= nMaxZBlock ; ++ k) { + for ( int k = nMinZBlock ; k <= nMaxZBlock ; ++ k) { int nBlockNum = k * nLayerBlock + nYBlock[tJ] * m_nFracLin[0] + nXBlock[tI] ; - m_BlockToUpdate[nBlockNum] = true ; + m_BlockToUpdate[nBlockNum] = true ; } } - } + } } else if ( nGrid == 1) { - + int nYStop = 1 ; int nZStop = 1 ; @@ -238,7 +238,7 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ nI /= N_DEXVOXRATIO ; nJ /= N_DEXVOXRATIO ; - nYBlock[0] = min( nI / m_nVoxNumPerBlock, m_nFracLin[1] - 1) ; + nYBlock[0] = min( nI / m_nVoxNumPerBlock, m_nFracLin[1] - 1) ; nZBlock[0] = min( nJ / m_nVoxNumPerBlock, m_nFracLin[2] - 1) ; if ( nI % N_VOXBLOCK == 0 && nYBlock[0] > 0) { @@ -252,19 +252,19 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ } // Numero di voxel lungo X - int nVoxNumX = int( m_nNx[0] / N_DEXVOXRATIO + ( m_nNx[0] % N_DEXVOXRATIO == 0 ? 1 : 2)) ; - - int nMinI = Clamp( int( floor( ( ( dMin - 0.5 * m_dStep) / ( N_DEXVOXRATIO * m_dStep) - EPS_SMALL))), 0, nVoxNumX - 2) ; - int nMaxI = Clamp( int( floor( ( ( dMax + 0.5 * m_dStep) / ( N_DEXVOXRATIO * m_dStep) + EPS_SMALL))), 0, nVoxNumX - 2) ; + int nVoxNumX = int( m_nNx[0] / N_DEXVOXRATIO + ( m_nNx[0] % N_DEXVOXRATIO == 0 ? 1 : 2)) ; + + int nMinI = Clamp( int( floor( ( ( dMin - 0.5 * m_dStep) / ( N_DEXVOXRATIO * m_dStep) - EPS_SMALL))), 0, nVoxNumX - 2) ; + int nMaxI = Clamp( int( floor( ( ( dMax + 0.5 * m_dStep) / ( N_DEXVOXRATIO * m_dStep) + EPS_SMALL))), 0, nVoxNumX - 2) ; int nMinXBlock = Clamp( nMinI / int( m_nVoxNumPerBlock), 0, int( m_nFracLin[0] - 1)) ; int nMaxXBlock = min( int( m_nFracLin[0] - 1), nMaxI / int( m_nVoxNumPerBlock)) ; - + for ( int tI = 0 ; tI < nYStop ; ++ tI) { for ( int tJ = 0 ; tJ < nZStop ; ++ tJ) { for ( int k = nMinXBlock ; k <= nMaxXBlock ; ++ k) { int nBlockNum = nZBlock[tJ] * nLayerBlock + nYBlock[tI] * m_nFracLin[0] + k ; - m_BlockToUpdate[nBlockNum] = true ; + m_BlockToUpdate[nBlockNum] = true ; } } } @@ -297,18 +297,18 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ // Numero di voxel lungo Y int nVoxNumY = int( m_nNy[0] / N_DEXVOXRATIO + ( m_nNy[0] % N_DEXVOXRATIO == 0 ? 1 : 2)) ; - + int nMinJ = Clamp( int( floor( ( ( dMin - 0.5 * m_dStep) / ( N_DEXVOXRATIO * m_dStep) - EPS_SMALL))), 0, nVoxNumY - 2) ; int nMaxJ = Clamp( int( floor( ( ( dMax + 0.5 * m_dStep) / ( N_DEXVOXRATIO * m_dStep) + EPS_SMALL))), 0, nVoxNumY - 2) ; int nMinYBlock = Clamp( nMinJ / int( m_nVoxNumPerBlock), 0, int( m_nFracLin[1] - 1)) ; int nMaxYBlock = min( int( m_nFracLin[1] - 1), nMaxJ / int( m_nVoxNumPerBlock)) ; - + for ( int tI = 0 ; tI < nZStop ; ++ tI) { for ( int tJ = 0 ; tJ < nXStop ; ++ tJ) { - for ( int k = nMinYBlock ; k <= nMaxYBlock ; ++ k) { + for ( int k = nMinYBlock ; k <= nMaxYBlock ; ++ k) { int nBlockNum = nZBlock[tI] * nLayerBlock + k * m_nFracLin[0] + nXBlock[tJ] ; - m_BlockToUpdate[nBlockNum] = true ; + m_BlockToUpdate[nBlockNum] = true ; } } } @@ -320,12 +320,10 @@ VolZmap::SubtractIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ return true ; } - - //---------------------------------------------------------------------------- bool VolZmap::AddIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ, - double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) + double dMin, double dMax, const Vector3d& vtNMin, const Vector3d& vtNMax) { // // Controllo che dMin e dMax non siano quasi coincidenti // if ( abs( dMax - dMin) < EPS_SMALL) @@ -550,7 +548,7 @@ VolZmap::AddIntervals( unsigned int nGrid, unsigned int nI, unsigned int nJ, // m_dMinZ[nGrid] = dMin ; // } // - return true ; + return true ; } // ------------------------- LAVORAZIONI -------------------------------------------------------------------------------------- @@ -564,7 +562,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Point3d& //---------------------------------------------------------------------------- bool -VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& vtAs, const Point3d& ptPe, const Vector3d& vtDe, const Vector3d& vtAe) +VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& vtAs, const Point3d& ptPe, const Vector3d& vtDe, const Vector3d& vtAe) { // Controllo sull'effettiva esistenza del movimento if ( AreSamePointApprox( ptPs, ptPe) && AreSameVectorApprox( vtDs, vtDe)) @@ -574,7 +572,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& Point3d ptLs[3] ; Point3d ptLe[3] ; - ptLs[0] = ptPs ; + ptLs[0] = ptPs ; ptLs[0].ToLoc( m_MapFrame) ; ptLe[0] = ptPe ; @@ -585,9 +583,9 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& ptLs[2].x = ptLs[0].z ; ptLs[2].y = ptLs[0].x ; ptLs[2].z = ptLs[0].y ; ptLe[1].x = ptLe[0].y ; ptLe[1].y = ptLe[0].z ; ptLe[1].z = ptLe[0].x ; - ptLe[2].x = ptLe[0].z ; ptLe[2].y = ptLe[0].x ; ptLe[2].z = ptLe[0].y ; + ptLe[2].x = ptLe[0].z ; ptLe[2].y = ptLe[0].x ; ptLe[2].z = ptLe[0].y ; } - + // Vettori nei sistemi di riferimento intrinseci dello Zmap Vector3d vtLs[3] ; Vector3d vtLe[3] ; @@ -652,14 +650,14 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& CylBall_ZDrilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : - Conus_ZDrilling( i, ptLs[i], ptLe[i], vtLs[i]) ; + Conus_ZDrilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::MORTISER : Mrt_ZDrilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; break ; case Tool::CHISEL : Chs_ZDrilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; - break ; + break ; } } @@ -671,10 +669,10 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& break ; case Tool::CYLMILL : case Tool::BALLMILL : - CylBall_ZPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; + CylBall_ZPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : - Conus_ZPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; + Conus_ZPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::MORTISER : Mrt_ZMilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; @@ -693,7 +691,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& break ; case Tool::CYLMILL : case Tool::BALLMILL : - CylBall_ZMilling( i, ptLs[i], ptLe[i], vtLs[i]) ; + CylBall_ZMilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : Conus_ZMilling( i, ptLs[i], ptLe[i], vtLs[i]) ; @@ -719,17 +717,17 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& break ; case Tool::CYLMILL : case Tool::BALLMILL : - CylBall_XYDrilling( i, ptLs[i], ptLe[i], vtLs[i]) ; + CylBall_XYDrilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : - Conus_XYDrilling( i, ptLs[i], ptLe[i], vtLs[i]) ; + Conus_XYDrilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::MORTISER : - Mrt_Drilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; + Mrt_Drilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; break ; case Tool::CHISEL : Chs_Drilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; - break ; + break ; } } // Fresatura con vettore movimento perpendicolare all'utensile @@ -740,17 +738,17 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& break ; case Tool::CYLMILL : case Tool::BALLMILL : - CylBall_XYPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; + CylBall_XYPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : - Conus_XYPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; + Conus_XYPerp( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::MORTISER : - Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; + Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; break ; case Tool::CHISEL : Chs_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; - break ; + break ; } } // Fresatura con vettore movimento generico rispetto all'utensile @@ -761,10 +759,10 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& break ; case Tool::CYLMILL : case Tool::BALLMILL : - CylBall_XYMilling( i, ptLs[i], ptLe[i], vtLs[i]) ; + CylBall_XYMilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : - Conus_XYMilling( i, ptLs[i], ptLe[i], vtLs[i]) ; + Conus_XYMilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; } } @@ -786,17 +784,17 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& break ; case Tool::CYLMILL : case Tool::BALLMILL : - CylBall_Drilling( i, ptLs[i], ptLe[i], vtLs[i]) ; + CylBall_Drilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : Conus_Drilling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::MORTISER : - Mrt_Drilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; + Mrt_Drilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; break ; case Tool::CHISEL : - Chs_Drilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; - break ; + Chs_Drilling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; + break ; } } @@ -807,19 +805,19 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& break ; case Tool::CYLMILL : case Tool::BALLMILL : - CylBall_Milling( i, ptLs[i], ptLe[i], vtLs[i]) ; + CylBall_Milling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::CONEMILL : - Conus_Milling( i, ptLs[i], ptLe[i], vtLs[i]) ; + Conus_Milling( i, ptLs[i], ptLe[i], vtLs[i]) ; break ; case Tool::MORTISER : - Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; + Mrt_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; break ; case Tool::CHISEL : - Chs_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; - break ; + Chs_Milling( i, ptLs[i], ptLe[i], vtLs[i], vtALs[i]) ; + break ; } - } + } } } @@ -830,7 +828,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& m_nConnectedCompoCount = - 1 ; return true ; -} +} // ---------- VERSORE UTENSILE DERETTO COME Z -------------------------------- @@ -838,7 +836,7 @@ VolZmap::MillingStep( const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& // ---------- Cilindro e sfera ----------------------------------------------- //---------------------------------------------------------------------------- bool -VolZmap::CylBall_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir) +VolZmap::CylBall_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir) { unsigned int nStartI, nStartJ, nEndI, nEndJ ; @@ -865,11 +863,9 @@ VolZmap::CylBall_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; - Point3d ptC( dX, dY, 0) ; Vector3d vtC = ptC - ptSxy ; - double dSqLen = vtC.SqLen() ; // Se il punto si trova dentro il cerchio taglio @@ -879,21 +875,17 @@ VolZmap::CylBall_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point SubtractIntervals( nGrid, i, j, dMinStemZ, dMaxStemZ, Z_AX, - Z_AX) ; // utensile sferico else if ( m_Tool.GetType() == Tool::BALLMILL) { - double dH = sqrt( dSqRad - dSqLen) ; - if ( vtToolDir.z > 0) { - Vector3d vtNorm = Point3d( ptSxy.x, ptSxy.y, dMinStemZ) - Point3d( dX, dY, dMinStemZ - dH) ; vtNorm.Normalize() ; SubtractIntervals( nGrid, i, j, dMinStemZ - dH, dMaxStemZ, vtNorm, - vtToolDir) ; } else { - Vector3d vtNorm = Point3d( ptSxy.x, ptSxy.y, dMinStemZ) - Point3d( dX, dY, dMinStemZ + dH) ; vtNorm.Normalize() ; SubtractIntervals( nGrid, i, j, dMinStemZ, dMaxStemZ + dH, - vtToolDir, vtNorm) ; - } + } } } } @@ -916,7 +908,7 @@ VolZmap::CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& p double dSqRad = m_Tool.GetRadius() * m_Tool.GetRadius() ; double dSafeRad = m_Tool.GetRadius() - EPS_SMALL ; double dSafeSqRad = dSafeRad * dSafeRad ; - + // Punte del gambo Point3d ptTStemS = ptS - vtToolDir * dStemHeigth ; Point3d ptTStemE = ptE - vtToolDir * dStemHeigth ; @@ -924,14 +916,17 @@ VolZmap::CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& p // Quote estreme del gambo double dMinStemZ = min( ptS.z, ptTStemS.z) ; double dMaxStemZ = max( ptS.z, ptTStemS.z) ; - + // Vettore movimento e sua lunghezza - Vector3d vtMove = ptE - ptS ; double dLen = vtMove.LenXY() ; + Vector3d vtMove = ptE - ptS ; + double dLen = vtMove.LenXY() ; // Definizione di un sistema di riferimento ad hoc Point3d ptSxy( ptS.x, ptS.y, 0) ; - Vector3d vtV1 = vtMove ; vtV1.Normalize() ; // se |vtMove| < EPS č un buco con dz = 0 - Vector3d vtV2 = vtV1 ; vtV2.Rotate( Z_AX, 90) ; + Vector3d vtV1 = vtMove ; + vtV1.Normalize() ; // se |vtMove| < EPS č un buco con dz = 0 + Vector3d vtV2 = vtV1 ; + vtV2.Rotate( Z_AX, 0, 1) ; for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { @@ -950,17 +945,17 @@ VolZmap::CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& p ( dP1 > 0 && dP1 < dLen && abs( dP2) < dSafeRad)) SubtractIntervals( nGrid, i, j, dMinStemZ, dMaxStemZ, Z_AX, - Z_AX) ; - } + } // Utensile sferico else if ( m_Tool.GetType() == Tool::BALLMILL) { if ( abs( dP2) < dSafeRad) { - - if ( dP1 < 0) { + + if ( dP1 < 0) { if ( dP1 * dP1 + dP2 * dP2 < dSafeSqRad) { - + double dH = sqrt( dSafeSqRad - dP1 * dP1 - dP2 * dP2) ; if ( vtToolDir.z > 0) { @@ -974,9 +969,9 @@ VolZmap::CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& p Point3d ptInt( dX, dY, ptTStemS.z + dH) ; Vector3d vtN = ptTStemS - ptInt ; vtN.Normalize() ; - SubtractIntervals( nGrid, i, j, ptS.z, ptTStemS.z + dH, Z_AX, vtN) ; + SubtractIntervals( nGrid, i, j, ptS.z, ptTStemS.z + dH, Z_AX, vtN) ; } - } + } } else if ( dP1 < dLen) { @@ -994,8 +989,8 @@ VolZmap::CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& p Point3d ptInt( dX, dY, ptTStemS.z + dH) ; Vector3d vtN = - ( ptInt - ptTStemS) + ( ptInt - ptTStemS) * vtV1 * vtV1 ; vtN.Normalize() ; - SubtractIntervals( nGrid, i, j, ptS.z, ptTStemS.z + dH, Z_AX, vtN) ; - } + SubtractIntervals( nGrid, i, j, ptS.z, ptTStemS.z + dH, Z_AX, vtN) ; + } } else { @@ -1014,11 +1009,11 @@ VolZmap::CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& p Point3d ptInt( dX, dY, ptTStemE.z + dH) ; Vector3d vtN = ptTStemE - ptInt ; vtN.Normalize() ; - SubtractIntervals( nGrid, i, j, ptS.z, ptTStemE.z + dH, Z_AX, vtN) ; - } + SubtractIntervals( nGrid, i, j, ptS.z, ptTStemE.z + dH, Z_AX, vtN) ; + } } } - } + } } } } @@ -1027,7 +1022,7 @@ VolZmap::CylBall_ZPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& p //---------------------------------------------------------------------------- bool -VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir) +VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir) { // Verifica sull'interferenza utensile Zmap unsigned int nStartI, nStartJ, nEndI, nEndJ ; @@ -1041,7 +1036,7 @@ VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 double dSafeRadius = m_Tool.GetRadius() - EPS_SMALL ; double dSqRad = m_Tool.GetRadius() * m_Tool.GetRadius() ; double dSafeSqRad = dSqRad - 2 * m_Tool.GetRadius() * EPS_SMALL ; - + // Studio delle simmetrie Point3d ptI = ( ptS.z < ptE.z ? ptS : ptE) ; Point3d ptF = ( ptS.z < ptE.z ? ptE : ptS) ; @@ -1052,8 +1047,8 @@ VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 Point3d ptIUp( ptI.x, ptI.y, max( ptI.z, ptIT.z)) ; Point3d ptIDw( ptI.x, ptI.y, min( ptI.z, ptIT.z)) ; - // Quote iniziali e finali massime e - // minime del gambo dell'utensile e DeltaZ + // Quote iniziali e finali massime e + // minime del gambo dell'utensile e DeltaZ double dZMaxI = max( ptI.z, ptIT.z) ; double dZMaxF = max( ptF.z, ptFT.z) ; double dZMinI = dZMaxI - dStemHeigth ; @@ -1061,8 +1056,8 @@ VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 double dDeltaZ = dZMaxF - dZMaxI ; // Vettori caratterizzanti il moto - Vector3d vtMove = ptF - ptI ; - Vector3d vtMoveXY( vtMove.x, vtMove.y, 0) ; + Vector3d vtMove = ptF - ptI ; + Vector3d vtMoveXY( vtMove.x, vtMove.y, 0) ; double dLen = vtMove.Len() ; double dLenXY = vtMoveXY.LenXY() ; vtMove.Normalize() ; @@ -1080,18 +1075,18 @@ VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 // Se la lunghezza č troppo piccola lo allungo if ( dLenXY < EPS_SMALL) vtV1 = ( 1 / dLenXY) * vtMoveXY ; - else + else vtV1 = vtMoveXY ; // Normalizzo vtV1 vtV1.Normalize() ; // Definisco vtV2 - vtV2 = vtV1 ; - vtV2.Rotate( Z_AX, 90) ; + vtV2 = vtV1 ; + vtV2.Rotate( Z_AX, 0, 1) ; double dMin, dMax ; - for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { + for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { double dX = ( i + 0.5) * m_dStep ; @@ -1107,11 +1102,10 @@ VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 if ( ( dX1 > 0 && dX1 < dLenXY && abs( dX2) < dSafeRadius) || ( dX1 - dLenXY) * ( dX1 - dLenXY) + dX2 * dX2 < dSafeSqRad || dX1 * dX1 + dX2 * dX2 < dSafeSqRad) { - + double dX1_0 = sqrt( dSqRad - dX2 * dX2) ; - Vector3d vtNmin, vtNmax ; - + // Massimo if ( ( dX1 - dLenXY) * ( dX1 - dLenXY) + dX2 * dX2 < dSqRad) { vtNmax = - Z_AX ; @@ -1126,7 +1120,7 @@ VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; // Tangente alla circonferenza Vector3d vtCross = vtTan ^ vtMove ; - vtNmax = ( vtCross * vtCirc > - EPS_ZERO ? vtCross : - vtCross) ; + vtNmax = ( vtCross * vtCirc > - EPS_ZERO ? vtCross : - vtCross) ; vtNmax.Normalize() ; } // Minimo @@ -1147,8 +1141,8 @@ VolZmap::CylBall_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 vtNmin.Normalize() ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; - } + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; + } } } @@ -1213,10 +1207,10 @@ VolZmap::Conus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d SubtractIntervals( nGrid, i, j, dZMin, dZMax, Z_AX, - Z_AX) ; else if ( dSqDist < dSqMaxRad) { - + double dr = sqrt( dSqDist) ; double dl = dr * dMaxRad / dL ; - + if ( vtToolDir.z > 0) { double dMin = dZMin + m_Tool.GetTipHeigth() * ( dr - dMinRad) / dDeltaRad ; @@ -1228,7 +1222,7 @@ VolZmap::Conus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d Vector3d vtNmin = ptPn - ptInt ; vtNmin.Normalize() ; - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, - Z_AX) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, - Z_AX) ; } else { @@ -1241,9 +1235,9 @@ VolZmap::Conus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d Vector3d vtNmax = ptPn - ptInt ; vtNmax.Normalize() ; - SubtractIntervals( nGrid, i, j, dMin, dMax, Z_AX, vtNmax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, Z_AX, vtNmax) ; } - } + } } } } @@ -1271,7 +1265,7 @@ VolZmap::Conus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d double dr = sqrt( dSqDist) ; double dl = dr * dMaxRad / dL ; - + if ( vtToolDir.z > 0) { double dMin = dZMin ; double dMax = dZMax - dStemHeigth - m_Tool.GetTipHeigth() * ( dr - dMinRad) / dDeltaRad ; @@ -1297,7 +1291,7 @@ VolZmap::Conus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point3d SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, - Z_AX) ; } - } + } } } } @@ -1355,7 +1349,7 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p Point3d ptVS = ptS - vtToolDir * ( dStemHeigth + dL) ; Point3d ptVE = ptE - vtToolDir * ( dStemHeigth + dL) ; - + for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { @@ -1375,10 +1369,10 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p if ( dSqLenS < dSafeSqMaxRad || dSqLenE < dSafeSqMaxRad || ( abs( dP2) < dSafeMaxRad && dP1 >= 0 && dP1 <= dLen)) { - + if ( dSqLenS < dSqMinRad || dSqLenE < dSqMinRad || ( abs( dP2) < dMinRad && dP1 >= 0 && dP1 <= dLen)) { - + dMin = min( dBaseZ, dTipZ) ; dMax = max( dBaseZ, dTipZ) ; @@ -1397,7 +1391,7 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p if ( vtToolDir.z > 0) { Point3d ptInt( dX, dY, dMin) ; - Vector3d vtU = ( ptInt - ptVS) - ( ptInt - ptVS) * vtV * vtV ; + Vector3d vtU = ( ptInt - ptVS) - ( ptInt - ptVS) * vtV * vtV ; vtU.Normalize() ; vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; vtNmin.Normalize() ; @@ -1406,13 +1400,12 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p else { Point3d ptInt( dX, dY, dMax) ; - Vector3d vtU = ( ptInt - ptVS) - ( ptInt - ptVS) * vtV * vtV ; + Vector3d vtU = ( ptInt - ptVS) - ( ptInt - ptVS) * vtV * vtV ; vtU.Normalize() ; vtNmin = Z_AX ; vtNmax = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; - vtNmax.Normalize() ; - } - + vtNmax.Normalize() ; + } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -1424,7 +1417,7 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p if ( vtToolDir.z > 0) { Point3d ptInt( dX, dY, dMin) ; - Vector3d vtU = ( ptInt - ptVtemp) - ( ptInt - ptVtemp) * vtV * vtV ; + Vector3d vtU = ( ptInt - ptVtemp) - ( ptInt - ptVtemp) * vtV * vtV ; vtU.Normalize() ; vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; vtNmin.Normalize() ; @@ -1433,12 +1426,12 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p else { Point3d ptInt( dX, dY, dMax) ; - Vector3d vtU = ( ptInt - ptVtemp) - ( ptInt - ptVtemp) * vtV * vtV ; + Vector3d vtU = ( ptInt - ptVtemp) - ( ptInt - ptVtemp) * vtV * vtV ; vtU.Normalize() ; vtNmin = Z_AX ; vtNmax = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; - vtNmax.Normalize() ; - } + vtNmax.Normalize() ; + } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -1465,12 +1458,12 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p vtU.Normalize() ; vtNmin = Z_AX ; vtNmax = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; - vtNmax.Normalize() ; - } + vtNmax.Normalize() ; + } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; - } - } + } + } } } } @@ -1504,7 +1497,7 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p if ( dSqLenS < dSqMaxRad || dSqLenE < dSqMaxRad || ( abs( dP2) < dMaxRad && dP1 >= 0 && dP1 <= dLen)) { - + if ( dSqLenS < dSafeSqMinRad || dSqLenE < dSafeSqMinRad || ( abs( dP2) < dSafeMinRad && dP1 >= 0 && dP1 <= dLen)) { dMin = min( dBaseZ, dTipZ) ; @@ -1537,9 +1530,7 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; vtNmin.Normalize() ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; - } else if ( dP1 <= dLen) { @@ -1557,20 +1548,20 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p vtNmax.Normalize() ; } - else { + else { Point3d ptInt( dX, dY, dMin) ; Vector3d vtU = ( ptInt - ptVtemp) - ( ptInt - ptVtemp) * vtV * vtV ; vtU.Normalize() ; vtNmax = -Z_AX ; vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; vtNmin.Normalize() ; - } + } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } else { - double dr = sqrt( dSqLenE) ; + double dr = sqrt( dSqLenE) ; dMin = min( dTipZ, dStemZ + ( dTipZ - dStemZ) * ( dr - dMinRad) / dDeltaRad) ; dMax = max( dTipZ, dStemZ + ( dTipZ - dStemZ) * ( dr - dMinRad) / dDeltaRad) ; @@ -1590,17 +1581,17 @@ VolZmap::Conus_ZPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & p vtNmax = -Z_AX ; vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; vtNmin.Normalize() ; - } + } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; - } + } } } } } } return true ; -} +} //---------------------------------------------------------------------------- bool @@ -1619,9 +1610,9 @@ VolZmap::Conus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& else { Point3d ptSC = ptS - vtToolDir * m_Tool.GetHeigth() ; Point3d ptEC = ptE - vtToolDir * m_Tool.GetHeigth() ; - CompConus_ZMilling( nGrid, ptSC, ptEC, - vtToolDir, m_Tool.GetTipHeigth(), m_Tool.GetTipRadius(), m_Tool.GetRadius()) ; + CompConus_ZMilling( nGrid, ptSC, ptEC, - vtToolDir, m_Tool.GetTipHeigth(), m_Tool.GetTipRadius(), m_Tool.GetRadius()) ; } - + return true ; } @@ -1630,7 +1621,7 @@ VolZmap::Conus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& // ---------------------------------------------------------------------------- bool VolZmap::Mrt_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) -{ +{ // Proiezione della traiettoria sul piano dei movimenti possibili Vector3d vtMoveOnP = ( ptE - ptS) * vtToolDir * vtToolDir ; Point3d ptEOnP = ptS + vtMoveOnP ; @@ -1646,12 +1637,12 @@ VolZmap::Mrt_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& p // Se la punta č di tipo bull-nose if ( abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) > EPS_SMALL) { - - // Parallelepipedo di punta - Point3d ptTipS = ptS - dLenZ * vtToolDir ; - Point3d ptTipE = ptEOnP - dLenZ * vtToolDir ; - dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ; + // Parallelepipedo di punta + Point3d ptTipS = ptS - dLenZ * vtToolDir ; + Point3d ptTipE = ptEOnP - dLenZ * vtToolDir ; + + dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ; dLenZ = m_Tool.GetCornRadius() ; CompPar_ZDrilling( nGrid, dLenX, dLenY, dLenZ, ptTipS, ptTipE, vtToolDir, vtAux) ; @@ -1673,7 +1664,7 @@ VolZmap::Mrt_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& p // Cilindro Point3d ptCylS = ptS - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ; Point3d ptCylE = ptEOnP - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ; - + CompCyl_Milling( nGrid, ptCylS, ptCylE, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ; } @@ -1705,16 +1696,16 @@ VolZmap::Mrt_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& pt // Se la punta č di tipo bull-nose if ( abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) > EPS_SMALL) { // Parallelepipedo di punta - Point3d ptTipS = ptPlS - dLenZ * vtToolDir ; - Point3d ptTipE = ptPlE - dLenZ * vtToolDir ; + Point3d ptTipS = ptPlS - dLenZ * vtToolDir ; + Point3d ptTipE = ptPlE - dLenZ * vtToolDir ; - dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ; + dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ; dLenZ = m_Tool.GetCornRadius() ; // Cilindro ( il moto dei due cilindri si sovrappone, quindi č inutile // eseguire due volte il conto Point3d ptSminus = ptTipS - ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ; - Point3d ptEplus = ptTipE + ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ; + Point3d ptEplus = ptTipE + ( 0.5 * dLenX) * vtPlV + 0.5 * dLenY * vtAux ; CompCyl_Milling( nGrid, ptSminus, ptEplus, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ; } @@ -1725,7 +1716,7 @@ VolZmap::Mrt_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& pt Point3d ptCylS = ptPlS - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ; Point3d ptCylE = ptPlE - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ; - CompCyl_Milling( nGrid, ptCylS, ptCylE, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ; + CompCyl_Milling( nGrid, ptCylS, ptCylE, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ; } return true ; @@ -1740,7 +1731,7 @@ VolZmap::Chs_ZDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& p CompPar_ZDrilling( nGrid, m_Tool.GetMrtChsWidth(), m_Tool.GetMrtChsThickness(), m_Tool.GetHeigth(), ptS, ptE, vtToolDir, vtAux) ; return true ; -} +} //---------------------------------------------------------------------------- bool @@ -1752,7 +1743,7 @@ VolZmap::Chs_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d& pt Point3d ptEp = ptS + vtMoveOnP ; CompPar_ZMilling( nGrid, m_Tool.GetMrtChsWidth(), m_Tool.GetMrtChsThickness(), m_Tool.GetHeigth(), - ptSp, ptEp, vtToolDir, vtAux) ; + ptSp, ptEp, vtToolDir, vtAux) ; return true ; } @@ -1850,7 +1841,7 @@ VolZmap::GenTool_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d const CurveComposite* pToolProfile = m_Tool.GetOutline() ; const ICurve* pCurve = pToolProfile->GetFirstCurve() ; while ( pCurve != nullptr) { - + double dHeight ; // Se segmento @@ -1880,7 +1871,7 @@ VolZmap::GenTool_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d Point3d ptIn = ptI - vtToolDir * dHeight ; Point3d ptFn = ptIn + vtMove ; CompConus_ZMilling( nGrid, ptIn, ptFn, - vtToolDir, dHeight, dMaxRad, dMinRad) ; - } + } } } @@ -1895,7 +1886,7 @@ VolZmap::GenTool_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d // Determino le posizioni iniziale e finale del centro della sfera Point3d ptCenS = ptI - vtToolDir * ( ptStart.y - ptCen.y) ; Point3d ptCenE = ptCenS + vtMove ; - // Eseguo l'asportazione del materiale + // Eseguo l'asportazione del materiale CompBall_Milling( nGrid, ptCenS, ptCenE, dRadius) ; // aggiorno l'altezza dHeight = abs( ptStart.y - ptEnd.y) ; @@ -1909,7 +1900,7 @@ VolZmap::GenTool_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point3d pCurve = pToolProfile->GetNextCurve() ; } - return true ; + return true ; } // ---------- VERSORE UTENSILE NEL PIANO XY ---------------------------------- @@ -1939,8 +1930,10 @@ VolZmap::CylBall_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point Point3d ptIxy( ptI.x, ptI.y, 0) ; Point3d ptFxy( ptF.x, ptF.y, 0) ; - Vector3d vtV1( - vtToolDir.x, - vtToolDir.y, 0) ; vtV1.Normalize() ; - Vector3d vtV2 = vtV1 ; vtV2.Rotate( Z_AX, 90) ; + Vector3d vtV1( - vtToolDir.x, - vtToolDir.y, 0) ; + vtV1.Normalize() ; + Vector3d vtV2 = vtV1 ; + vtV2.Rotate( Z_AX, 0, 1) ; for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { @@ -1995,10 +1988,10 @@ VolZmap::CylBall_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point } return true ; } - + //---------------------------------------------------------------------------- bool -VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d & ptE, const Vector3d & vtToolDir) +VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d & vtToolDir) { // Verifica sull'interferenza utensile Zmap unsigned int nStartI, nStartJ, nEndI, nEndJ ; @@ -2014,34 +2007,38 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d // Studio simmetrie del problema Point3d ptI = ( ptS.z <= ptE.z ? ptS : ptE) ; Point3d ptF = ( ptS.z <= ptE.z ? ptE : ptS) ; + // elimino eventuale piccolo errore di perpendicolaritą del movimento rispetto all'utensile + Vector3d vtErr = 0.5 * ( ( ptF - ptI) * vtToolDir) * vtToolDir ; + ptI += vtErr ; + ptF -= vtErr ; Point3d ptIxy( ptI.x, ptI.y, 0) ; Point3d ptIStemT = ptI - vtToolDir * dStemHeigth ; Point3d ptFStemT = ptF - vtToolDir * dStemHeigth ; - + // Quote punti iniziale e finale double dZI = ptI.z ; double dZF = ptF.z ; double dDeltaZ = ptF.z - ptI.z ; // Vettori caratterizzanti il moto - Vector3d vtMove = ptF - ptI ; - double dLen = vtMove.Len() ; - Vector3d vtMoveXY( vtMove.x, vtMove.y, 0) ; - double dLenXY = vtMoveXY.LenXY() ; + Vector3d vtMove = ptF - ptI ; + double dLenXY = vtMove.LenXY() ; vtMove.Normalize() ; // Sistema di riferimento ad hoc - Vector3d vtV1( - vtToolDir.x, - vtToolDir.y, 0) ; vtV1.Normalize() ; - Vector3d vtV2 = vtV1 ; vtV2.Rotate( Z_AX, 90) ; + Vector3d vtV1( - vtToolDir.x, - vtToolDir.y, 0) ; + vtV1.Normalize() ; + Vector3d vtV2 = vtV1 ; + vtV2.Rotate( Z_AX, 0, 1) ; if ( vtV2 * vtMove < 0) vtV2 = - vtV2 ; // Vettori e punti determinanti i piani Vector3d vtP = vtMove ; // Se dLen < EPS_SMALL non si usa - vtP.Rotate( vtToolDir, 90) ; - Point3d ptUp = ptI + m_Tool.GetRadius() * ( vtP.z > 0 ? vtP : - vtP) ; - Point3d ptDw = ptI + m_Tool.GetRadius() * ( vtP.z > 0 ? - vtP : vtP) ; + vtP.Rotate( vtToolDir, 0, 1) ; + Point3d ptUp = ptI + m_Tool.GetRadius() * ( vtP.z > 0 ? vtP : - vtP) ; + Point3d ptDw = ptI + m_Tool.GetRadius() * ( vtP.z > 0 ? - vtP : vtP) ; Vector3d vtPXY( vtP.x, vtP.y, 0) ; @@ -2049,7 +2046,7 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d Vector3d vtDw = ptDw - ORIG ; double dDotDw = vtDw * vtP ; double dSmall = m_Tool.GetRadius() * vtPXY.LenXY() ; - + // Parte sferica double dCos = vtMove.z ; // vtMove.z > 0 : ptF.z >= ptI.z double dSin = ( dCos < 1 ? sqrt( 1 - dCos * dCos) : 0) ; @@ -2061,21 +2058,21 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - - double dX = ( i + 0.5) * m_dStep ; + + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; - Point3d ptC( dX, dY, 0) ; + Point3d ptC( dX, dY, 0) ; Vector3d vtC = ptC - ptIxy ; - double dP1 = vtC * vtV1 ; + double dP1 = vtC * vtV1 ; double dP2 = vtC * vtV2 ; Vector3d vtNmin, vtNmax ; if ( dP1 > EPS_SMALL && dP1 < dStemHeigth - EPS_SMALL && dP2 > - m_Tool.GetRadius() + EPS_SMALL && - dP2 < m_Tool.GetRadius() - EPS_SMALL) { + dP2 < m_Tool.GetRadius() - EPS_SMALL) { dInfZ = ptI.z - sqrt( dSqRad - dP2 * dP2) ; dSupZ = ptF.z + sqrt( dSqRad - dP2 * dP2) ; @@ -2091,11 +2088,11 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d SubtractIntervals( nGrid, i, j, dInfZ, dSupZ, vtNmin, vtNmax) ; } - + if ( m_Tool.GetType() == Tool::BALLMILL) { - + if ( dP1 > dStemHeigth - 2 * EPS_SMALL && ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth) + dP2 * dP2 < dSafeSqRad) { - + dInfZ = ptI.z - sqrt( dSqRad - ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth) - dP2 * dP2) ; dSupZ = ptF.z + sqrt( dSqRad - ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth) - dP2 * dP2) ; @@ -2104,7 +2101,7 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d vtNmin = ptIStemT - ptIntInf ; vtNmax = ptFStemT - ptIntSup ; - + vtNmin.Normalize() ; vtNmax.Normalize() ; @@ -2119,14 +2116,13 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - - double dX = ( i + 0.5) * m_dStep ; + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; - Point3d ptC( dX, dY, 0) ; + Point3d ptC( dX, dY, 0) ; Vector3d vtC = ptC - ptIxy ; - double dP1 = vtC * vtV1 ; + double dP1 = vtC * vtV1 ; double dP2 = vtC * vtV2 ; // Parte cilindrica @@ -2180,9 +2176,9 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d else { double dH = sqrt( dSqRad - ( dP2 - dLenXY) * ( dP2 - dLenXY)) ; - dInfZ = dZF - dH ; + dInfZ = dZF - dH ; Point3d ptInt( dX, dY, dInfZ) ; - vtNmin = - ( ( ptInt - ptF) - ( ptInt - ptF) * vtToolDir * vtToolDir) ; + vtNmin = - ( ( ptInt - ptF) - ( ptInt - ptF) * vtToolDir * vtToolDir) ; vtNmin.Normalize() ; } @@ -2190,13 +2186,13 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d } } - // Se l'utensile č ball-end sottraggo la punta + // Se l'utensile č ball-end sottraggo la punta if ( m_Tool.GetType() == Tool::BALLMILL) { - + if ( ( ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth) + dP2 * dP2 < dSqRad || ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth) + ( dP2 - dLenXY) * ( dP2 - dLenXY) < dSqRad || ( dP2 > 0 && dP2 < dLenXY && dP1 < m_Tool.GetHeigth())) && ( dP1 > dStemHeigth - 2 * EPS_SMALL)) { - + double dSqRoot = sqrt( dSqRad - ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth)) ; double dP2_0 = dCos * dSqRoot ; double dH0 = dSin * dSqRoot ; @@ -2238,20 +2234,20 @@ VolZmap::CylBall_XYPerp( unsigned int nGrid, const Point3d & ptS, const Point3d else if ( dP2 < dLenXY + dP2_0) { dMin = dZI - dH0 + dDeltaZ * ( dP2 - dP2_0) / dLenXY ; Point3d ptInt( dX, dY, dMin) ; - vtNmin = - ( ptInt - ptIStemT) + ( ptInt - ptIStemT) * vtMove * vtMove ; + vtNmin = - ( ptInt - ptIStemT) + ( ptInt - ptIStemT) * vtMove * vtMove ; vtNmin.Normalize() ; } else { - dMin = dZF - sqrt( dSqRad - ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth) - ( dP2 - dLenXY) * ( dP2 - dLenXY)) ; + dMin = dZF - sqrt( dSqRad - ( dP1 - dStemHeigth) * ( dP1 - dStemHeigth) - ( dP2 - dLenXY) * ( dP2 - dLenXY)) ; Point3d ptInt( dX, dY, dMin) ; vtNmin = ptFStemT - ptInt ; vtNmin.Normalize() ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; - } - } + } + } } } } @@ -2282,9 +2278,8 @@ VolZmap::CylBall_XYMilling( unsigned int nGrid, const Point3d& ptS, const Point3 bool VolZmap::Conus_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) { - unsigned int nStartI, nStartJ, nEndI, nEndJ ; - // Verifica sull'interferenza utensile Zmap + unsigned int nStartI, nStartJ, nEndI, nEndJ ; bool bTest = BoundingBox( nGrid, ptS, ptE, vtToolDir, nStartI, nStartJ, nEndI, nEndJ) ; if ( ! bTest) @@ -2307,28 +2302,28 @@ VolZmap::Conus_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d // Determinazione del vertice del cono double dL = m_Tool.GetTipHeigth() * dMaxRad / dDeltaRad ; - + Point3d ptV ; // Vertice Vector3d vtV ; // Vettore riferimento con origine nel vertice if ( m_Tool.GetRadius() > m_Tool.GetTipRadius()) { vtV = vtToolDir ; - ptV = ( vtToolDir * ( ptE - ptS) < 0 ? ptE : ptS) - vtToolDir * ( dStemHeigth + dL) ;//dStemHeigth ; + ptV = ( vtToolDir * ( ptE - ptS) < 0 ? ptE : ptS) - vtToolDir * ( dStemHeigth + dL) ; } else { vtV = - vtToolDir ; - ptV = ( vtToolDir * ( ptE - ptS) < 0 ? ptS : ptE) - vtToolDir * ( m_Tool.GetHeigth() - dL) ;//dStemHeigth ; + ptV = ( vtToolDir * ( ptE - ptS) < 0 ? ptS : ptE) - vtToolDir * ( m_Tool.GetHeigth() - dL) ; } // Sistema di riferimento sul piano Vector3d vtV1 = - vtToolDir ; Vector3d vtV2 = vtV1 ; - vtV2.Rotate( Z_AX, 90) ; + vtV2.Rotate( Z_AX, 0, 1) ; // Proiezione di ptI sul piano Point3d ptIxy( ptI.x, ptI.y, 0) ; - + // Ciclo sui punti for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { @@ -2376,8 +2371,8 @@ VolZmap::Conus_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d Vector3d vtUmin = ( ptIntMin - ptV) - ( ptIntMin - ptV) * vtV * vtV ; Vector3d vtUmax = ( ptIntMax - ptV) - ( ptIntMax - ptV) * vtV * vtV ; - vtUmin.Normalize() ; - vtUmax.Normalize() ; + vtUmin.Normalize() ; + vtUmax.Normalize() ; Vector3d vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtUmin ; Vector3d vtNmax = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtUmax ; @@ -2389,11 +2384,11 @@ VolZmap::Conus_XYDrilling( unsigned int nGrid, const Point3d& ptS, const Point3d } if ( m_Tool.GetTipRadius() >= m_Tool.GetRadius()) { - + if ( dX1 > dMatStemLen + m_Tool.GetTipHeigth() - 2 * EPS_SMALL && dX1 < dMatStemLen + m_Tool.GetTipHeigth() + dLenXY - EPS_SMALL && abs( dX2) < dSqTipRad) { - + double dH = sqrt( dSqTipRad - dX2 * dX2) ; double dMin = ptI.z - dH ; double dMax = ptI.z + dH ; @@ -2439,7 +2434,10 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt // Studio delle simmetrie del moto Point3d ptI = ( ptS.z < ptE.z ? ptS : ptE) ; Point3d ptF = ( ptS.z < ptE.z ? ptE : ptS) ; - + // elimino eventuale piccolo errore di perpendicolaritą del movimento rispetto all'utensile + Vector3d vtErr = 0.5 * ( ( ptF - ptI) * vtToolDir) * vtToolDir ; + ptI += vtErr ; + ptF -= vtErr ; Point3d ptIxy( ptI.x, ptI.y, 0) ; Point3d ptFxy( ptF.x, ptF.y, 0) ; @@ -2450,7 +2448,6 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt double dDeltaZ = ptF.z - ptI.z ; double dZI = ptI.z ; double dZF = ptF.z ; - vtMove.Normalize() ; // Riferimento coni @@ -2459,7 +2456,6 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt Point3d ptVI = ptI - ( m_Tool.GetRadius() > m_Tool.GetTipRadius() ? dStemHeigth + dL : m_Tool.GetHeigth() - dL) * vtToolDir ; Point3d ptVF = ptF - ( m_Tool.GetRadius() > m_Tool.GetTipRadius() ? dStemHeigth + dL : m_Tool.GetHeigth() - dL) * vtToolDir ; - // Movimento verticale if ( dLengthPathXY < EPS_SMALL) { @@ -2467,10 +2463,6 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt Vector3d vtV1 = - vtToolDir ; Vector3d vtV2( - vtV1.y, vtV1.x, 0) ; - double dMin, dMax ; - Vector3d vtNmin, vtNmax ; - Point3d ptIntMin, ptIntMax ; - for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { @@ -2487,14 +2479,14 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt if ( dP1 > EPS_SMALL && dP1 <= dStemHeigth && dP2 > - m_Tool.GetRadius() + EPS_SMALL && dP2 < m_Tool.GetRadius() - EPS_SMALL) { - dMin = dZI - sqrt( dSqRad - dP2 * dP2) ; - dMax = dZF + sqrt( dSqRad - dP2 * dP2) ; + double dMin = dZI - sqrt( dSqRad - dP2 * dP2) ; + double dMax = dZF + sqrt( dSqRad - dP2 * dP2) ; - ptIntMin.Set( dX, dY, dMin) ; - ptIntMax.Set( dX, dY, dMax) ; + Point3d ptIntMin( dX, dY, dMin) ; + Point3d ptIntMax( dX, dY, dMax) ; - vtNmin = - ( ptIntMin - ptI) + ( ptIntMin - ptI) * vtV1 * vtV1 ; - vtNmax = - ( ptIntMax - ptF) + ( ptIntMax - ptF) * vtV1 * vtV1 ; + Vector3d vtNmin = - ( ptIntMin - ptI) + ( ptIntMin - ptI) * vtV1 * vtV1 ; + Vector3d vtNmax = - ( ptIntMax - ptF) + ( ptIntMax - ptF) * vtV1 * vtV1 ; vtNmin.Normalize() ; vtNmax.Normalize() ; @@ -2509,11 +2501,11 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt double dr = dP2 ; double dMr = m_Tool.GetRadius() + ( m_Tool.GetTipRadius() - m_Tool.GetRadius()) * ( dP1 - dStemHeigth) / m_Tool.GetTipHeigth() ; - dMin = dZI - sqrt( dMr * dMr - dr * dr) ; - dMax = dZF + sqrt( dMr * dMr - dr * dr) ; + double dMin = dZI - sqrt( dMr * dMr - dr * dr) ; + double dMax = dZF + sqrt( dMr * dMr - dr * dr) ; - ptIntMin.Set( dX, dY, dMin) ; - ptIntMax.Set( dX, dY, dMax) ; + Point3d ptIntMin( dX, dY, dMin) ; + Point3d ptIntMax( dX, dY, dMax) ; Vector3d vtUmin = ( ptIntMin - ptVI) - ( ptIntMin - ptVI) * vtV * vtV ; Vector3d vtUmax = ( ptIntMax - ptVF) - ( ptIntMax - ptVF) * vtV * vtV ; @@ -2521,8 +2513,8 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt vtUmin.Normalize() ; vtUmax.Normalize() ; - vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtUmin ; - vtNmax = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtUmax ; + Vector3d vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtUmin ; + Vector3d vtNmax = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtUmax ; vtNmin.Normalize() ; vtNmax.Normalize() ; @@ -2530,7 +2522,7 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } } - } + } } else { @@ -2553,15 +2545,15 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt Vector3d vtUpTan = ptTipUp - ptUp ; Vector3d vtDwTan = ptTipDw - ptDw ; - Vector3d vtUpTanXY( vtUpTan.x, vtUpTan.y, 0) ; + Vector3d vtUpTanXY( vtUpTan.x, vtUpTan.y, 0) ; double dDeltaSmallAbs = abs( vtUpTanXY * vtV2) ; double dDeltaSmall = ( m_Tool.GetRadius() > m_Tool.GetTipRadius() ? dDeltaSmallAbs : - dDeltaSmallAbs) ; vtUpTan.Normalize() ; vtDwTan.Normalize() ; - Vector3d vtUpCross = vtMove ^ vtUpTan ; - Vector3d vtDwCross = - vtMove ^ vtDwTan ; + Vector3d vtUpCross = vtMove ^ vtUpTan ; + Vector3d vtDwCross = - vtMove ^ vtDwTan ; if ( vtUpCross.z > 0) vtUpCross = - vtUpCross ; @@ -2574,35 +2566,35 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt Vector3d vtR0Dw = ptDw - ORIG ; double dDotUp = vtR0Up * vtUpCross ; - double dDotDw = vtR0Dw * vtDwCross ; + double dDotDw = vtR0Dw * vtDwCross ; double dMin, dMax ; Vector3d vtNmin, vtNmax ; Point3d ptInt ; - + for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; - - Point3d ptC( dX, dY, 0) ; + + Point3d ptC( dX, dY, 0) ; Vector3d vtC = ptC - ptIxy ; - double dP1 = vtC * vtV1 ; + double dP1 = vtC * vtV1 ; double dP2 = vtC * vtV2 ; // Parte cilindrica if ( dP1 > EPS_SMALL && dP1 <= dStemHeigth && // vedere se conviene dP1 < dStemHeigth + eps oppure dP1 <= dStemHeigth - dP2 > - m_Tool.GetRadius() && dP2 < dLengthPathXY + m_Tool.GetRadius()) { + dP2 > - m_Tool.GetRadius() && dP2 < dLengthPathXY + m_Tool.GetRadius()) { // Massimi if ( dP2 < - dSmallLength) { dMax = dZI + sqrt( dSqRad - dP2 * dP2) ; ptInt.Set( dX, dY, dMax) ; vtNmax = - ( ptInt - ptI) + ( ptInt - ptI) * vtV1 * vtV1 ; - vtNmax.Normalize() ; + vtNmax.Normalize() ; } else if ( dP2 < dLengthPathXY - dSmallLength) { @@ -2613,29 +2605,29 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt else { dMax = dZF + sqrt( dSqRad - ( dP2 - dLengthPathXY) * ( dP2 - dLengthPathXY)) ; ptInt.Set( dX, dY, dMax) ; - vtNmax = - ( ptInt - ptF) + ( ptInt - ptF) * vtV1 * vtV1 ; - vtNmax.Normalize() ; + vtNmax = - ( ptInt - ptF) + ( ptInt - ptF) * vtV1 * vtV1 ; + vtNmax.Normalize() ; } // Minimi if ( dP2 < dSmallLength) { dMin = dZI - sqrt( dSqRad - dP2 * dP2) ; ptInt.Set( dX, dY, dMin) ; - vtNmin = - ( ptInt - ptI) + ( ptInt - ptI) * vtV1 * vtV1 ; - vtNmin.Normalize() ; + vtNmin = - ( ptInt - ptI) + ( ptInt - ptI) * vtV1 * vtV1 ; + vtNmin.Normalize() ; } else if ( dP2 < dLengthPathXY + dSmallLength) { dMin = ptDw.z + dDeltaZ * ( dP2 - dSmallLength) / dLengthPathXY ; - vtNmin = vtCross ; + vtNmin = vtCross ; } else { dMin = dZF - sqrt( dSqRad - ( dP2 - dLengthPathXY) * ( dP2 - dLengthPathXY)) ; ptInt.Set( dX, dY, dMin) ; - vtNmin = - ( ptInt - ptF) + ( ptInt - ptF) * vtV1 * vtV1 ; - vtNmin.Normalize() ; - } + vtNmin = - ( ptInt - ptF) + ( ptInt - ptF) * vtV1 * vtV1 ; + vtNmin.Normalize() ; + } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -2648,7 +2640,7 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt // Massimi if ( dP2 < - dSmallLength + dDeltaSmall * ( dP1 - dStemHeigth) / m_Tool.GetTipHeigth()) { - + double dr = dP2 ; double dMr = m_Tool.GetRadius() + ( m_Tool.GetTipRadius() - m_Tool.GetRadius()) * ( dP1 - dStemHeigth) / m_Tool.GetTipHeigth() ; @@ -2668,7 +2660,7 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt else if ( dP2 < dLengthPathXY - dSmallLength + dDeltaSmall * ( dP1 - dStemHeigth) / m_Tool.GetTipHeigth()) { dMax = ( dDotUp - dX * vtUpCross.x - dY * vtUpCross.y) / vtUpCross.z ; - vtNmax = vtUpCross ; + vtNmax = vtUpCross ; } else { @@ -2685,12 +2677,12 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt vtNmax = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; - vtNmax.Normalize() ; + vtNmax.Normalize() ; } // Minimi if ( dP2 < dSmallLength - dDeltaSmall * ( dP1 - dStemHeigth) / m_Tool.GetTipHeigth()) { - + double dr = dP2 ; double dMr = m_Tool.GetRadius() + ( m_Tool.GetTipRadius() - m_Tool.GetRadius()) * ( dP1 - dStemHeigth) / m_Tool.GetTipHeigth() ; @@ -2699,7 +2691,7 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt ptInt.Set( dX, dY, dMin) ; Vector3d vtU = ( ptInt - ptVI) - ( ptInt - ptVI) * vtV * vtV ; - + vtU.Normalize() ; vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; @@ -2709,7 +2701,7 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt else if ( dP2 < dLengthPathXY + dSmallLength - dDeltaSmall * ( dP1 - dStemHeigth) / m_Tool.GetTipHeigth()) { dMin = ( dDotDw - dX * vtDwCross.x - dY * vtDwCross.y) / vtDwCross.z ; - vtNmin = vtDwCross ; + vtNmin = vtDwCross ; } else { @@ -2722,20 +2714,20 @@ VolZmap::Conus_XYPerp( unsigned int nGrid, const Point3d& ptS, const Point3d& pt ptInt.Set( dX, dY, dMin) ; Vector3d vtU = ( ptInt - ptVF) - ( ptInt - ptVF) * vtV * vtV ; - + vtU.Normalize() ; vtNmin = dDeltaRad * vtV - m_Tool.GetTipHeigth() * vtU ; - vtNmin.Normalize() ; + vtNmin.Normalize() ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; - } + } } } } - return true ; + return true ; } //---------------------------------------------------------------------------- @@ -2769,30 +2761,31 @@ bool VolZmap::CylBall_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) { // Altezza cilindro - double dStemHeigth = m_Tool.GetHeigth() - m_Tool.GetTipHeigth() ; + double dStemHeigth = m_Tool.GetHeigth() - m_Tool.GetTipHeigth() ; // Sottraggo cilindro CompCyl_Drilling( nGrid, ptS, ptE, vtToolDir, dStemHeigth, m_Tool.GetRadius(), false, false) ; // Se č sfera la sottraggo if ( m_Tool.GetType() == Tool::BALLMILL) { Point3d ptSBall = ptS - dStemHeigth * vtToolDir ; Point3d ptEBall = ptE - dStemHeigth * vtToolDir ; - CompBall_Milling( nGrid, ptSBall, ptEBall, m_Tool.GetRadius()) ; + CompBall_Milling( nGrid, ptSBall, ptEBall, m_Tool.GetRadius()) ; } return true ; } + //---------------------------------------------------------------------------- bool VolZmap::CylBall_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) { // Altezza cilindro - double dStemHeigth = m_Tool.GetHeigth() - m_Tool.GetTipHeigth() ; + double dStemHeigth = m_Tool.GetHeigth() - m_Tool.GetTipHeigth() ; // Sottraggo cilindro CompCyl_Milling( nGrid, ptS, ptE, vtToolDir, dStemHeigth, m_Tool.GetRadius(), false, false) ; // Se č sfera la sottraggo if ( m_Tool.GetType() == Tool::BALLMILL) { Point3d ptSBall = ptS - dStemHeigth * vtToolDir ; Point3d ptEBall = ptE - dStemHeigth * vtToolDir ; - CompBall_Milling( nGrid, ptSBall, ptEBall, m_Tool.GetRadius()) ; + CompBall_Milling( nGrid, ptSBall, ptEBall, m_Tool.GetRadius()) ; } return true ; } @@ -2803,14 +2796,14 @@ bool VolZmap::Conus_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) { double dStemHeigth = m_Tool.GetHeigth() - m_Tool.GetTipHeigth() ; - + CompCyl_Drilling( nGrid, ptS, ptE, vtToolDir, dStemHeigth, m_Tool.GetRadius(), false, true) ; // Trapano if ( m_Tool.GetTipRadius() < m_Tool.GetRadius()) { Point3d ptSCone = ptS - dStemHeigth * vtToolDir ; Point3d ptECone = ptE - dStemHeigth * vtToolDir ; - CompConus_Drilling( nGrid, ptSCone, ptECone, vtToolDir, m_Tool.GetTipHeigth(), m_Tool.GetRadius(), m_Tool.GetTipRadius(), true, false) ; + CompConus_Drilling( nGrid, ptSCone, ptECone, vtToolDir, m_Tool.GetTipHeigth(), m_Tool.GetRadius(), m_Tool.GetTipRadius(), true, false) ; } else { @@ -2827,7 +2820,7 @@ bool VolZmap::Conus_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) { double dStemHeigth = m_Tool.GetHeigth() - m_Tool.GetTipHeigth() ; - + CompCyl_Milling( nGrid, ptS, ptE, vtToolDir, dStemHeigth, m_Tool.GetRadius(), false, true) ; // Trapano @@ -2848,14 +2841,12 @@ VolZmap::Conus_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& p return true ; } - // ---------- Mortasatrice --------------------------------------------------- - //---------------------------------------------------------------------------- bool VolZmap::Mrt_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) { - // Proiezione della traiettoria sul piano dei movimenti possibili + // Proiezione della traiettoria sul piano dei movimenti possibili Point3d ptEOnP = ptS + ( ptE - ptS) * vtToolDir * vtToolDir ; // Scompongo la mortasatrice in solidi semplici @@ -2868,12 +2859,12 @@ VolZmap::Mrt_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& pt // Se la punta č di tipo bull-nose if ( abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) > EPS_SMALL) { - + // Parallelepipedo di punta Point3d ptTipS = ptS - dLenZ * vtToolDir ; - Point3d ptTipE = ptEOnP - dLenZ * vtToolDir ; + Point3d ptTipE = ptEOnP - dLenZ * vtToolDir ; - dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ; + dLenX = abs( m_Tool.GetMrtChsWidth() - 2 * m_Tool.GetCornRadius()) ; dLenZ = m_Tool.GetCornRadius() ; CompPar_Drilling( nGrid, dLenX, dLenY, dLenZ, ptTipS, ptTipE, vtToolDir, vtAux) ; @@ -2938,7 +2929,7 @@ VolZmap::Mrt_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE Point3d ptEminus = ptTipE - ( 0.5 * dLenX) * vtVOnP + 0.5 * dLenY * vtAux ; Point3d ptSplus = ptTipS + ( 0.5 * dLenX) * vtVOnP + 0.5 * dLenY * vtAux ; Point3d ptEplus = ptTipE + ( 0.5 * dLenX) * vtVOnP + 0.5 * dLenY * vtAux ; - CompCyl_Milling( nGrid, ptSminus, ptEplus, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ; + CompCyl_Milling( nGrid, ptSminus, ptEplus, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ; } // se la punta č di tipo sfera @@ -2947,14 +2938,12 @@ VolZmap::Mrt_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE Point3d ptCylS = ptS - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ; Point3d ptCylE = ptEp - dLenZ * vtToolDir + 0.5 * dLenY * vtAux ; CompCyl_Milling( nGrid, ptCylS, ptCylE, vtAux, dLenY, m_Tool.GetCornRadius(), false, false) ; - } + } return true ; -} - +} // ---------- Chisel --------------------------------------------------------- - //---------------------------------------------------------------------------- bool VolZmap::Chs_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, const Vector3d& vtAux) @@ -2981,9 +2970,7 @@ VolZmap::Chs_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE return true ; } - // ---------- Utensile generico ---------------------------------------------- - //---------------------------------------------------------------------------- bool VolZmap::GenTool_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir) @@ -2998,7 +2985,7 @@ VolZmap::GenTool_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d const ICurve* pPrevCurve = nullptr ; const ICurve* pCurve = pToolProfile->GetFirstCurve() ; while ( pCurve != nullptr) { - + double dHeight ; // Se segmento @@ -3047,10 +3034,10 @@ VolZmap::GenTool_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d Point3d ptIn = ptI - vtToolDir * dHeight ; Point3d ptFn = ptIn + vtMove ; CompConus_Drilling( nGrid, ptIn, ptFn, - vtToolDir, dHeight, dMaxRad, dMinRad, bTapT, bTapB) ; - } + } // Passo alla curva successiva pPrevCurve = pCurve ; - pCurve = pNextCurve ; + pCurve = pNextCurve ; } else { // Passo alla curva successiva @@ -3084,7 +3071,7 @@ VolZmap::GenTool_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d ptF = ptI + vtMove ; } - return true ; + return true ; } //---------------------------------------------------------------------------- @@ -3153,7 +3140,7 @@ VolZmap::GenTool_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& } // Passo alla curva successiva pPrevCurve = pCurve ; - pCurve = pNextCurve ; + pCurve = pNextCurve ; } else { // Passo alla curva successiva @@ -3187,7 +3174,7 @@ VolZmap::GenTool_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptF = ptI + vtMove ; } - return true ; + return true ; } // ------------------------- SOLIDI ELEMENTARI ----------------------------------------------------------------------------- @@ -3207,7 +3194,7 @@ VolZmap::CompCyl_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point Point3d ptSxy( ptS.x, ptS.y, 0) ; // Parametri geometrici dell'utensile - double dSafeSqRad = dRad * dRad - 2 * dRad * EPS_SMALL ; + double dSafeSqRad = dRad * dRad - 2 * dRad * EPS_SMALL ; // Punte del gambo Point3d ptTStemS = ptS - vtToolDir * dHei ; @@ -3230,8 +3217,8 @@ VolZmap::CompCyl_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Point double dSqLen = vtC.SqLen() ; // Se il punto si trova dentro il cerchio taglio - if ( dSqLen < dSafeSqRad) - SubtractIntervals( nGrid, i, j, dMinStemZ, dMaxStemZ, Z_AX, -Z_AX) ; + if ( dSqLen < dSafeSqRad) + SubtractIntervals( nGrid, i, j, dMinStemZ, dMaxStemZ, Z_AX, -Z_AX) ; } } return true ; @@ -3259,12 +3246,12 @@ VolZmap::CompConus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Poi // Studio delle simmetrie if ( vtToolDir.z > 0) { dZMin = ( ptS.z < ptE.z ? ptS.z - dHei : ptE.z - dHei) ; - dZMax = ( ptS.z < ptE.z ? ptE.z : ptS.z) ; + dZMax = ( ptS.z < ptE.z ? ptE.z : ptS.z) ; } else { dZMin = ( ptS.z < ptE.z ? ptS.z : ptE.z) ; - dZMax = ( ptS.z < ptE.z ? ptE.z + dHei : ptS.z + dHei) ; + dZMax = ( ptS.z < ptE.z ? ptE.z + dHei : ptS.z + dHei) ; } double dL = dMaxRad * dAngC ; @@ -3285,7 +3272,7 @@ VolZmap::CompConus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Poi double dSqDist = vtC * vtC ; if ( dSqDist < dSqMinRad) { - SubtractIntervals( nGrid, i, j, dZMin, dZMax, Z_AX, -Z_AX) ; + SubtractIntervals( nGrid, i, j, dZMin, dZMax, Z_AX, -Z_AX) ; } else if ( dSqDist < dSafeSqMaxRad) { // dSafeSqMaxRad č sperimentale @@ -3308,7 +3295,7 @@ VolZmap::CompConus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Poi vtMin.Normalize() ; - SubtractIntervals( nGrid, i, j, dMin, dMax, vtMin, vtMax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtMin, vtMax) ; } else { @@ -3327,20 +3314,20 @@ VolZmap::CompConus_ZDrilling( unsigned int nGrid, const Point3d & ptS, const Poi vtMax.Normalize() ; - SubtractIntervals( nGrid, i, j, dMin, dMax, vtMin, vtMax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtMin, vtMax) ; } - } + } } } - + return true ; } //---------------------------------------------------------------------------- bool VolZmap::CompPar_ZDrilling( unsigned int nGrid, double dLenX, double dLenY, double dLenZ, - const Point3d& ptS, const Point3d& ptE, - const Vector3d& vtToolDir, const Vector3d& vtAux) + const Point3d& ptS, const Point3d& ptE, + const Vector3d& vtToolDir, const Vector3d& vtAux) { // Controllo sull'interferenza utensile-solido unsigned int nStartI, nStartJ, nEndI, nEndJ ; @@ -3412,8 +3399,8 @@ VolZmap::CompCyl_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 double dDeltaZ = dZMaxF - dZMaxI ; // Vettori caratterizzanti il moto - Vector3d vtMove = ptF - ptI ; - Vector3d vtMoveXY( vtMove.x, vtMove.y, 0) ; + Vector3d vtMove = ptF - ptI ; + Vector3d vtMoveXY( vtMove.x, vtMove.y, 0) ; double dLen = vtMove.Len() ; double dLenXY = vtMoveXY.LenXY() ; vtMove.Normalize() ; @@ -3421,7 +3408,7 @@ VolZmap::CompCyl_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 // Parametri per determinare l'ellisse proiettata double dCos = vtToolDir * vtMove ; double dSin = ( abs( dCos) < 1 ? 1 - dCos * dCos : 0) ; - double dSemiAxMin = dRad * dCos ; // x1^2 = a^2 - (a / b)^2 x2^2 ; a = r dCos e b = r; + double dSemiAxMin = dRad * dCos ; // x1^2 = a^2 - (a / b)^2 x2^2 ; a = r dCos e b = r; double dSqSemiAxMin = dSemiAxMin * dSemiAxMin ; // da cui si ottiene x1^2 = a^2 - dCos^2 x2^2 double dSqRatio = dSqSemiAxMin / dSqRad ; @@ -3440,14 +3427,14 @@ VolZmap::CompCyl_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 vtV1.Normalize() ; // Definisco vtV2 vtV2 = vtV1 ; - vtV2.Rotate( Z_AX, 90) ; + vtV2.Rotate( Z_AX, 0, 1) ; double dMin, dMax ; Vector3d vtMin, vtMax ; - for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { + for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; @@ -3464,7 +3451,7 @@ VolZmap::CompCyl_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 ( dX1 - dLenXY) * ( dX1 - dLenXY) + dX2 * dX2 < dSqRad || dX1 * dX1 + dX2 * dX2 < dSqRad) { - double dX1_0 = sqrt( dSqRad - dX2 * dX2) ; + double dX1_0 = sqrt( dSqRad - dX2 * dX2) ; // Massimo if ( ( dX1 - dLenXY) * ( dX1 - dLenXY) + dX2 * dX2 < dSqRad) { @@ -3482,7 +3469,7 @@ VolZmap::CompCyl_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; Vector3d vtCross = vtTan ^ vtMove ; vtMax = ( vtCross * vtCirc > 0 ? vtCross : - vtCross) ; - vtMax.Normalize() ; + vtMax.Normalize() ; } } // Minimo @@ -3499,11 +3486,11 @@ VolZmap::CompCyl_ZMilling( unsigned int nGrid, const Point3d & ptS, const Point3 Vector3d vtCirc = - dX1_0 * vtV1 - dX2 * vtV2 ; Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; Vector3d vtCross = vtTan ^ vtMove ; - vtMin = ( vtCross * vtCirc > 0 ? vtCross : - vtCross) ; + vtMin = ( vtCross * vtCirc > 0 ? vtCross : - vtCross) ; vtMin.Normalize() ; } } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtMin, vtMax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtMin, vtMax) ; } } } @@ -3518,7 +3505,7 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point bool bInterf = BBoxComponent( nGrid, ptS, ptE, vtToolDir, nStartI, nStartJ, nEndI, nEndJ, dMaxRad, dMinRad, dHei) ; if ( ! bInterf) return true ; - + Point3d ptI = ( vtToolDir * ( ptE - ptS) > 0 ? ptS : ptE) ; Point3d ptF = ( vtToolDir * ( ptE - ptS) > 0 ? ptE : ptS) ; @@ -3578,7 +3565,7 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; - Point3d ptC( dX, dY, 0) ; + Point3d ptC( dX, dY, 0) ; Vector3d vtCI = ptC - ptIxy ; double dSqDI = vtCI.SqLenXY() ; Vector3d vtCF = ptC - ptFxy ; double dSqDF = vtCF.SqLenXY() ; @@ -3598,7 +3585,7 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point // Limiti nella direzione positiva di vtV1 if ( dSqDF < dMaxRad * dMaxRad) { dPLim = dZI + dDeltaZ ; - vtP = - vtV1 ; + vtP = - vtV1 ; } else { @@ -3612,8 +3599,8 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; Vector3d vtCross = vtTan ^ vtUmv ; vtP = ( vtCross * vtCirc > 0 ? vtCross : - vtCross) ; - vtP.Normalize() ; - } + vtP.Normalize() ; + } } // Limiti nella direzione negativa di vtV1 @@ -3633,7 +3620,7 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point else { double dIDL_0 = sqrt( dMaxRad * dMaxRad - dIDO * dIDO) ; - dMLim = dZI + ( dIDL - dIDL_0) * dDeltaZ / dLOrt ; + dMLim = dZI + ( dIDL - dIDL_0) * dDeltaZ / dLOrt ; if ( abs( vtUmv * vtV1) < EPS_SMALL) { vtM = vtV1 ; } @@ -3643,7 +3630,7 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point Vector3d vtCross = vtTan ^ vtUmv ; vtM = ( vtCross * vtCirc > 0 ? vtCross : - vtCross) ; vtM.Normalize() ; - } + } } } @@ -3665,8 +3652,8 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; Vector3d vtCross = vtTan ^ vtUmv ; vtP = ( vtCross * vtCirc > 0 ? vtCross : - vtCross) ; // vtCross * vtCirc o vtCross * vtMove? - vtP.Normalize() ; - } + vtP.Normalize() ; + } } // Limiti nella direzione negativa di vtV1 @@ -3684,7 +3671,7 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point vtM.Normalize() ; } - else if ( dSqDI >= dMinRad * dMinRad && dIVarCos >= dCos && dFVarCos < dCos && abs( dIDO) < dMaxRad * dSin) { // da qui + else if ( dSqDI >= dMinRad * dMinRad && dIVarCos >= dCos && dFVarCos < dCos && abs( dIDO) < dMaxRad * dSin) { if ( dIDO > - dMaxRad * dSin && dIDO <= - dMinRad * dSin) { dMLim = ( dDotd - dX * vtNd.x - dY * vtNd.y) / vtNd.z ; @@ -3700,15 +3687,15 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point else { Vector3d vtCirc = - dIDL_0 * vtV2 - dIDO * vtV3 ; Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; - Vector3d vtCross = vtTan ^ vtUmv ; + Vector3d vtCross = vtTan ^ vtUmv ; double dDotCrossCirc = vtCross * vtCirc ; vtM = ( dDotCrossCirc > 0 ? vtCross : - vtCross) ; - vtM.Normalize() ; - } + vtM.Normalize() ; + } } else if ( dIDO >= dMinRad * dSin && dIDO < dMaxRad * dSin) { - dMLim = ( dDots - dX * vtNs.x - dY * vtNs.y) / vtNs.z ; // a qui + dMLim = ( dDots - dX * vtNs.x - dY * vtNs.y) / vtNs.z ; vtM = - vtNs ; } } @@ -3729,8 +3716,8 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; Vector3d vtCross = vtTan ^ vtUmv ; vtM = ( vtCross * vtCirc > 0 ? vtCross : - vtCross) ; - vtM.Normalize() ; - } + vtM.Normalize() ; + } } else { @@ -3754,8 +3741,8 @@ VolZmap::CompConus_ZMilling( unsigned int nGrid, const Point3d& ptS, const Point Vector3d vtTan( - vtCirc.y, vtCirc.x, 0) ; Vector3d vtCross = vtTan ^ vtMove ; vtM = ( vtCross * vtMove > 0 ? vtCross : - vtCross) ; - vtM.Normalize() ; - } + vtM.Normalize() ; + } } } @@ -3811,28 +3798,28 @@ VolZmap::CompPar_ZMilling( unsigned int nGrid, double dLenX, double dLenY, doubl // Studio del volume asportato durante il moto - // Studio delle simmetrieto + // Studio delle simmetrie Point3d ptLs = ( ( ptE - ptS) * vtAux > 0 ? ptS : ptE) ; Point3d ptLe = ( ( ptE - ptS) * vtAux > 0 ? ptE : ptS) ; Vector3d vtMove = ptLe - ptLs ; - Vector3d vtW3 = vtAux ; + Vector3d vtW3 = vtAux ; Vector3d vtAnsatz = ( vtW3 ^ vtToolDir) ; - bool bSymmetry = vtMove * ( vtW3 ^ vtToolDir) > 0 ; + bool bSymmetry = vtMove * ( vtW3 ^ vtToolDir) > 0 ; Vector3d vtW2 = ( bSymmetry ? vtAnsatz : - vtAnsatz) ; Vector3d vtW1 = ( bSymmetry ? vtToolDir : - vtToolDir) ; - Frame3d MotionFrame ; + Frame3d MotionFrame ; - Point3d ptDiagMin = ptLs - vtW2 * ( 0.5 * dLenX) + vtW3 * ( 0.5 * dLenY) ; - Point3d ptDiagMax = ptLs + vtW2 * ( 0.5 * dLenX) - vtW3 * ( 0.5 * dLenY) ; + Point3d ptDiagMin = ptLs - vtW2 * ( 0.5 * dLenX) + vtW3 * ( 0.5 * dLenY) ; + Point3d ptDiagMax = ptLs + vtW2 * ( 0.5 * dLenX) - vtW3 * ( 0.5 * dLenY) ; Vector3d vtU1 = ptDiagMax - ptDiagMin ; vtU1.Normalize() ; - Vector3d vtU2 = ( vtU1 * vtMove > 0 ? vtMove - vtMove * vtU1 * vtU1 : + Vector3d vtU2 = ( vtU1 * vtMove > 0 ? vtMove - vtMove * vtU1 * vtU1 : vtMove * vtU1 * vtU1 - vtMove) ; vtU2.Normalize() ; Vector3d vtU3 = vtU1 ^ vtU2 ; @@ -3862,14 +3849,14 @@ VolZmap::CompPar_ZMilling( unsigned int nGrid, double dLenX, double dLenY, doubl double dRE2 = vtRE * vtV2 ; // Asportazione materiale nella posizione iniziale - if ( abs( dRS1) < 0.5 * dLenX - EPS_SMALL && + if ( abs( dRS1) < 0.5 * dLenX - EPS_SMALL && abs( dRS2) < 0.5 * dLenY - EPS_SMALL) - SubtractIntervals( nGrid, i, j, dMinZ, dMaxZ, Z_AX, - Z_AX) ; + SubtractIntervals( nGrid, i, j, dMinZ, dMaxZ, Z_AX, - Z_AX) ; // Asportazione materiale nella posizione finale if ( abs( dRE1) < 0.5 * dLenX - EPS_SMALL && abs( dRE2) < 0.5 * dLenY - EPS_SMALL) - SubtractIntervals( nGrid, i, j, dMinZ, dMaxZ, Z_AX, - Z_AX) ; + SubtractIntervals( nGrid, i, j, dMinZ, dMaxZ, Z_AX, - Z_AX) ; // Asportazione materiale nel moto Vector3d vtR = ptC - ptOMotXY ; @@ -3880,7 +3867,7 @@ VolZmap::CompPar_ZMilling( unsigned int nGrid, double dLenX, double dLenY, doubl if ( dR2 > EPS_SMALL && dR2 < dLen2 - EPS_SMALL && dR1 * dLen2 > dLen1 * dR2 + EPS_SMALL && dR1 * dLen2 < dHx * dLen2 + dLen1 * dR2 - EPS_SMALL) - SubtractIntervals( nGrid, i, j, dMinZ, dMaxZ, Z_AX, - Z_AX) ; + SubtractIntervals( nGrid, i, j, dMinZ, dMaxZ, Z_AX, - Z_AX) ; } } return true ; @@ -3892,13 +3879,13 @@ VolZmap::CompPar_ZMilling( unsigned int nGrid, double dLenX, double dLenY, doubl //---------------------------------------------------------------------------- bool VolZmap::CompCyl_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, - double dHei, double dRad, bool bTapB, bool bTapT) + double dHei, double dRad, bool bTapB, bool bTapT) { // Verifico che il cilindro con il suo movimento intersechi la griglia unsigned int nStartI, nEndI, nStartJ, nEndJ ; bool bInterf = BBoxComponent( nGrid, ptS, ptE, vtToolDir, nStartI, nStartJ, nEndI, nEndJ, - dRad, dRad, dHei) ; - if ( ! bInterf) + dRad, dRad, dHei) ; + if ( ! bInterf) return true ; // Studio delle simmetrie @@ -3911,7 +3898,7 @@ VolZmap::CompCyl_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d // Sistema di riferimento del cilindro Frame3d CylFrame ; CylFrame.Set( ptF, vtToolDir) ; - for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { + for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { Point3d ptC( ( i + 0.5) * m_dStep, ( j + 0.5) * m_dStep, 0) ; Point3d ptInt1, ptInt2 ; @@ -3923,7 +3910,7 @@ VolZmap::CompCyl_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d dMin = ptInt1.z ; dMax = ptInt2.z ; vtNmin = vtN1 ; - vtNmax = vtN2 ; + vtNmax = vtN2 ; } else { dMin = ptInt2.z ; @@ -3935,7 +3922,7 @@ VolZmap::CompCyl_Drilling( unsigned int nGrid, const Point3d& ptS, const Point3d } } } - return true ; + return true ; } //---------------------------------------------------------------------------- @@ -3968,7 +3955,7 @@ VolZmap::CompConus_Drilling( unsigned int nGrid, const Point3d& ptS, const Point for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; @@ -3986,13 +3973,13 @@ VolZmap::CompConus_Drilling( unsigned int nGrid, const Point3d& ptS, const Point dMin = ptInt1.z ; dMax = ptInt2.z ; vtNmin = vtN1 ; - vtNmax = vtN2 ; + vtNmax = vtN2 ; } else { dMin = ptInt2.z ; dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -4006,13 +3993,13 @@ VolZmap::CompConus_Drilling( unsigned int nGrid, const Point3d& ptS, const Point dMin = ptInt1.z ; dMax = ptInt2.z ; vtNmin = vtN1 ; - vtNmax = vtN2 ; + vtNmax = vtN2 ; } else { dMin = ptInt2.z ; dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -4033,8 +4020,8 @@ VolZmap::CompPar_Drilling( unsigned int nGrid, double dLenX, double dLenY, doubl if ( ! bInterf) return true ; - // Costruzione di un sistema di riferimento per il volume - // asportato dal solido nelle posizioni iniziale e finale. + // Costruzione di un sistema di riferimento per il volume + // asportato dal solido nelle posizioni iniziale e finale. Vector3d vtV1 = vtToolDir ; Vector3d vtV2 = vtAux ^ vtV1 ; Vector3d vtV3 = vtAux ; @@ -4045,7 +4032,7 @@ VolZmap::CompPar_Drilling( unsigned int nGrid, double dLenX, double dLenY, doubl for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; @@ -4055,7 +4042,7 @@ VolZmap::CompPar_Drilling( unsigned int nGrid, double dLenX, double dLenY, doubl Vector3d vtN1, vtN2 ; if ( IntersLineMyPolyhedron( ptC, Z_AX, ParaFrame, dLenX, dLenY, dLenZ + dLenMove, 0, ptInt1, ptInt2, vtN1, vtN2)) { - + double dMin, dMax ; Vector3d vtNmin, vtNmax ; @@ -4067,26 +4054,25 @@ VolZmap::CompPar_Drilling( unsigned int nGrid, double dLenX, double dLenY, doubl } else { dMin = ptInt2.z ; - dMax = ptInt1.z ; + dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } } } - return true ; + return true ; } // Asse di simmetria con orientazione generica: FRESATURA - //---------------------------------------------------------------------------- bool VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& ptE, const Vector3d& vtToolDir, double dHei, double dRad, bool bTapB, bool bTapT) -{ +{ // Verifica sull'interferenza utensile Zmap unsigned int nStartI, nStartJ, nEndI, nEndJ ; bool bInterf = BBoxComponent( nGrid, ptS, ptE, vtToolDir, @@ -4123,7 +4109,7 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + Point3d ptC( ( i + 0.5) * m_dStep, ( j + 0.5) * m_dStep, 0) ; Point3d ptInt1, ptInt2 ; @@ -4141,13 +4127,13 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& } else { dMin = ptInt2.z ; - dMax = ptInt1.z ; + dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } - + // Cilindro finale: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. @@ -4162,15 +4148,15 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& } else { dMin = ptInt2.z + vtMove.z ; - dMax = ptInt1.z + vtMove.z ; + dMax = ptInt1.z + vtMove.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; - } - + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; + } + // Poliedro interno - if ( IntersLineMyPolyhedron( ptC, Z_AX, CylFrame, dOrtLen, 2 * dRad, dHei, + if ( IntersLineMyPolyhedron( ptC, Z_AX, CylFrame, dOrtLen, 2 * dRad, dHei, dLongLen, ptInt1, ptInt2, vtN1, vtN2)) { double dMin, dMax ; Vector3d vtNmin, vtNmax ; @@ -4182,11 +4168,11 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& } else { dMin = ptInt2.z ; - dMax = ptInt1.z ; + dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } // Cilindro ellittico di punta @@ -4202,14 +4188,14 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& } else { dMin = ptInt2.z ; - dMax = ptInt1.z ; + dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } - // Cilindro ellittico di base: L'unica differenza rispetto a prima č l'origine + // 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. if ( IntersLineEllipticalCylinder( Z_AX, ptC - dHei * vtV1, CylFrame, dRad, dLongLen, dOrtLen, @@ -4224,15 +4210,15 @@ VolZmap::CompCyl_Milling( unsigned int nGrid, const Point3d& ptS, const Point3d& } else { dMin = ptInt2.z + dHei * vtV1.z ; - dMax = ptInt1.z + dHei * vtV1.z ; + dMax = ptInt1.z + dHei * vtV1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } } } - return true ; + return true ; } //---------------------------------------------------------------------------- @@ -4253,7 +4239,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point Point3d ptI = ( vtToolDir * ( ptE - ptS) > 0 ? ptS : ptE) ; Point3d ptF = ( vtToolDir * ( ptE - ptS) > 0 ? ptE : ptS) ; - Point3d ptIT = ptI - vtToolDir * dHei ; + Point3d ptIT = ptI - vtToolDir * dHei ; Point3d ptFT = ptF - vtToolDir * dHei ; double dL = ( ( dMaxRad * dHei) / ( dDeltaR)) ; @@ -4263,7 +4249,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point // Vettori caratteristici del movimento Vector3d vtMove = ptF - ptI ; - Vector3d vtMvLong = ( vtMove * vtToolDir) * vtToolDir ; + Vector3d vtMvLong = ( vtMove * vtToolDir) * vtToolDir ; Vector3d vtMvOrt = vtMove - vtMvLong ; // Terna destrorsa e unitaria @@ -4323,7 +4309,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point Point3d ptFacet135( 0, 0, dLenZ) ; Point3d ptFacet246( dLenX + dDeltaX, dLenY + dDeltaY, - dLenZ - dDeltaZ) ; - double dSqIndet = EPS_SMALL * EPS_SMALL ; + double dSqIndet = EPS_SMALL * EPS_SMALL ; Vector3d vtUmv = vtMove ; vtUmv.Normalize() ; @@ -4360,7 +4346,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point dMin = ptInt2.z ; dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -4379,7 +4365,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point dMin = ptInt2.z + vtMove.z ; dMax = ptInt1.z + vtMove.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -4410,7 +4396,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point vtN1 = - vtNs ; ++ nIntNum ; } - } + } // Intersezione con la seconda faccia if ( abs( vtPoly * vtNd) > COS_ORTO_ANG_ZERO) { if ( dLenY * ptPoly2.x >= dLenX * ptPoly2.y && @@ -4483,7 +4469,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point ptInt2 = ptPoly5 ; vtN2 = - vtUD ; ++ nIntNum ; - } + } } } @@ -4547,7 +4533,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point dMin = ptInt2.z + vtV1.z * dl ; dMax = ptInt1.z + vtV1.z * dl ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -4567,7 +4553,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point dMin = ptInt2.z + vtV1.z * dL ; dMax = ptInt1.z + vtV1.z * dL ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -4608,7 +4594,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point } // Traslazione ellisse - if ( IntersLineEllipticalCylinder( Z_AX, ptC - vtV1 * dL, ConusFrame, dMaxRad, dLongLen, dOrtLen, + if ( IntersLineEllipticalCylinder( Z_AX, ptC - vtV1 * dL, ConusFrame, dMaxRad, dLongLen, dOrtLen, bConeB, bConeB, ptInt1, ptInt2, vtN1, vtN2)) { double dMin, dMax ; Vector3d vtNmin, vtNmax ; @@ -4622,7 +4608,7 @@ VolZmap::CompConus_Milling( unsigned int nGrid, const Point3d & ptS, const Point dMin = ptInt2.z + vtV1.z * dL ; dMax = ptInt1.z + vtV1.z * dL ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } @@ -4647,8 +4633,8 @@ VolZmap::CompPar_Milling( unsigned int nGrid, double dLenX, double dLenY, double // Vettore di movimento Vector3d vtMove = ptE - ptS ; - // Sistema di riferimento del solido - // nelle posizioni iniziale e finale. + // Sistema di riferimento del solido + // nelle posizioni iniziale e finale. Vector3d vtV1 = vtToolDir ; Vector3d vtV2 = ( vtMove * ( vtV1 ^ vtAux) > 0 ? ( vtV1 ^ vtAux) : ( vtAux ^ vtV1)) ; Vector3d vtV3 = vtV1 ^ vtV2 ; @@ -4664,37 +4650,37 @@ VolZmap::CompPar_Milling( unsigned int nGrid, double dLenX, double dLenY, double Vector3d vtMv = ptLe - ptLs ; - bool bSymmetry = vtMv * vtAnsatz > 0 ; + bool bSymmetry = vtMv * vtAnsatz > 0 ; Vector3d vtW2 = ( bSymmetry ? vtAnsatz : - vtAnsatz) ; Vector3d vtW1 = ( bSymmetry ? vtToolDir : - vtToolDir) ; Point3d ptBase = bSymmetry ? ptLs - dLenZ * vtW1 : ptLs ; - Frame3d MotionFrame ; + Frame3d MotionFrame ; - Point3d ptDiagMin = ptBase - vtW2 * ( 0.5 * dLenX) + vtW3 * ( 0.5 * dLenY) ; - Point3d ptDiagMax = ptBase + vtW2 * ( 0.5 * dLenX) - vtW3 * ( 0.5 * dLenY) ; + Point3d ptDiagMin = ptBase - vtW2 * ( 0.5 * dLenX) + vtW3 * ( 0.5 * dLenY) ; + Point3d ptDiagMax = ptBase + vtW2 * ( 0.5 * dLenX) - vtW3 * ( 0.5 * dLenY) ; Vector3d vtU1 = ptDiagMax - ptDiagMin ; double dDimLong = ( ptDiagMax - ptDiagMin).Len() ; vtU1.Normalize() ; bool bSymmetry2 = vtU1 * vtMv > 0 ; - Vector3d vtU2 = ( bSymmetry2 ? vtMv - vtMv * vtU1 * vtU1 : + Vector3d vtU2 = ( bSymmetry2 ? vtMv - vtMv * vtU1 * vtU1 : vtMv * vtU1 * vtU1 - vtMv) ; vtU2.Normalize() ; Vector3d vtU3 = vtU1 ^ vtU2 ; Point3d ptOMotion = ( bSymmetry2 ? ptDiagMin : ptDiagMin + vtMv) + vtU3 * ( 0.5 * dLenZ) ; - MotionFrame.Set( ptOMotion, vtU2, vtU3, vtU1) ; + MotionFrame.Set( ptOMotion, vtU2, vtU3, vtU1) ; double dDeltaLong = abs( vtMv * vtU1) ; double dDimOrt = abs( vtMv * vtU2) ; for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; @@ -4715,9 +4701,9 @@ VolZmap::CompPar_Milling( unsigned int nGrid, double dLenX, double dLenY, double } else { dMin = ptInt2.z ; - dMax = ptInt1.z ; + dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; @@ -4735,12 +4721,12 @@ VolZmap::CompPar_Milling( unsigned int nGrid, double dLenX, double dLenY, double } else { dMin = ptInt2.z + vtMove.z ; - dMax = ptInt1.z + vtMove.z ; + dMax = ptInt1.z + vtMove.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } - SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; + SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } // Volume spazzato nel moto @@ -4755,9 +4741,9 @@ VolZmap::CompPar_Milling( unsigned int nGrid, double dLenX, double dLenY, double } else { dMin = ptInt2.z ; - dMax = ptInt1.z ; + dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; @@ -4774,7 +4760,7 @@ VolZmap::CompPar_Milling( unsigned int nGrid, double dLenX, double dLenY, double bool VolZmap::CompBall_Milling( unsigned int nGrid, const Point3d & ptLs, const Point3d & ptLe, double dRad) { - unsigned int nStartI, nStartJ, nEndI, nEndJ ; + unsigned int nStartI, nStartJ, nEndI, nEndJ ; bool bInterf = BBoxComponent( nGrid, ptLs, ptLe, V_NULL, nStartI, nStartJ, nEndI, nEndJ, dRad, 0, 0) ; if ( ! bInterf) return true ; @@ -4789,11 +4775,11 @@ VolZmap::CompBall_Milling( unsigned int nGrid, const Point3d & ptLs, const Point // Costruisco sistema di riferimento if ( vtV.x * vtV.x > 0.09) - vtW.Set( - ( vtV.y + vtV.z) / vtV.x, 1, 1) ; - + vtW.Set( - ( vtV.y + vtV.z) / vtV.x, 1, 1) ; + else if ( vtV.y * vtV.y > 0.09) - vtW.Set( 1, - ( vtV.x + vtV.z) / vtV.y, 1) ; - + vtW.Set( 1, - ( vtV.x + vtV.z) / vtV.y, 1) ; + else vtW.Set( 1, 1, - ( vtV.x + vtV.y) / vtV.z) ; @@ -4808,7 +4794,7 @@ VolZmap::CompBall_Milling( unsigned int nGrid, const Point3d & ptLs, const Point for ( unsigned int i = nStartI ; i <= nEndI ; ++ i) { for ( unsigned int j = nStartJ ; j <= nEndJ ; ++ j) { - + double dX = ( i + 0.5) * m_dStep ; double dY = ( j + 0.5) * m_dStep ; @@ -4833,7 +4819,7 @@ VolZmap::CompBall_Milling( unsigned int nGrid, const Point3d & ptLs, const Point SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; } - + // Seconda sfera if ( dEnSqDXY < dSqRad) { dMin = ptLe.z - sqrt( dSqRad - dEnSqDXY) ; @@ -4866,7 +4852,7 @@ VolZmap::CompBall_Milling( unsigned int nGrid, const Point3d & ptLs, const Point dMin = ptInt2.z ; dMax = ptInt1.z ; vtNmin = vtN2 ; - vtNmax = vtN1 ; + vtNmax = vtN1 ; } SubtractIntervals( nGrid, i, j, dMin, dMax, vtNmin, vtNmax) ; @@ -4884,7 +4870,7 @@ VolZmap::BoundingBox( unsigned int nGrid, const Point3d& ptP1, const Point3d& pt unsigned int& nStI, unsigned int& nStJ, unsigned int& nEnI, unsigned int& nEnJ) { // I punti e i vettori devono essere nel sistema di riferimento opportuno - + // Controllo sull'ammissibilitą del numero di griglia if ( nGrid < 0 || nGrid > 2) return false ; @@ -4925,7 +4911,7 @@ VolZmap::BoundingBox( unsigned int nGrid, const Point3d& ptP1, const Point3d& pt nEnI = ( dMaxX > dMaxXValue - EPS_SMALL ? nMaxNx - 1 : static_cast ( dMaxX / m_dStep)) ; nStJ = ( dMinY < EPS_SMALL ? 0 : static_cast ( dMinY / m_dStep)) ; nEnJ = ( dMaxY > dMaxYValue - EPS_SMALL ? nMaxNy - 1 : static_cast ( dMaxY / m_dStep)) ; - + return true ; } @@ -4935,7 +4921,7 @@ VolZmap::BBoxComponent( unsigned int nGrid, const Point3d & ptP1, const Point3d unsigned int & nStI, unsigned int & nStJ, unsigned int & nEnI, unsigned int & nEnJ, double dRad, double dTipRad, double dHei) { - // I punti e i vettori devono essere nel sistema di riferimento opportuno + // I punti e i vettori devono essere nel sistema di riferimento opportuno // Controllo sull'ammissibilitą del numero di griglia if ( nGrid < 0 || nGrid > 2) @@ -4987,7 +4973,7 @@ VolZmap::BBoxParaComp( unsigned int nGrid, double dLenX, double dLenY, double dL const Point3d& ptS, const Point3d& ptE, const Vector3d& vtD, const Vector3d& vtA, unsigned int& nStI, unsigned int& nStJ, unsigned int& nEnI, unsigned int& nEnJ) { - // I punti e i vettori devono essere nel sistema di riferimento opportuno + // I punti e i vettori devono essere nel sistema di riferimento opportuno // Determino le posizioni iniziale e // finale della punta dell'utensile. @@ -5028,4 +5014,3 @@ VolZmap::BBoxParaComp( unsigned int nGrid, double dLenX, double dLenY, double dL return true ; } -