EgtGeomKernel :

- correzioni a VM 5assi.
This commit is contained in:
Daniele Bariletti
2025-07-04 12:37:06 +02:00
parent de7229aee7
commit fc18539472
+439 -197
View File
@@ -1748,16 +1748,12 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX){
if ( bOnBottomBase1)
bUpdate1 = dBottomBaseSide1 < 0 ;
else if ( bOnTopBase1) {
bApproxedSideTop = dTopBaseSide1 < 0 ;
bUpdate1 = dTopBaseSide1 > 0 ;
}
else if ( bOnTopBase1)
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE ) {
if ( bOnBottomBase1) {
bApproxedSideBottom = dBottomBaseSide1 < 0 ;
bUpdate1 = dBottomBaseSide1 > 0 ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
if ( bOnBottomBase1)
bApproxedSideBottom = true ;
else if ( bOnTopBase1)
bUpdate1 = dTopBaseSide1 < 0 ;
}
@@ -1766,11 +1762,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub) + 1) ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = (pt1 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt1 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide1 > 0) {
// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
dDist = (pt1 - frStartCyl.Orig()) * ( - vvtTipStartAux[(nSub + 1) - nSector]) ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//dDist = (pt1 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
}
}
// base superiore
else if( bOnTopBase1 && bApproxedSideTop) {
@@ -1778,11 +1790,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt1 - ( frStartCyl.Orig() + frStartCyl.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if( dSide < 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt1 - ( frStartCyl.Orig() + frStartCyl.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if( dSide < 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base top avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide1 > 0) {
// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
dDist = (pt1 - frStartCyl.Orig()) * ( - vvtTipStartAux[(nSub + 1) - nSector]) ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//dDist = (pt1 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
}
}
else if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase1 && dSide < 0) || ( bOnBottomBase1 && dSide > 0)))
bUpdate1 = true ;
@@ -1818,16 +1846,12 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX){
if ( bOnBottomBase2)
bUpdate2 = dBottomBaseSide2 < 0 ;
else if ( bOnTopBase2) {
bApproxedSideTop = dTopBaseSide2 < 0 ;
bUpdate2 = dTopBaseSide2 > 0 ;
}
else if ( bOnTopBase2)
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
if ( bOnBottomBase2) {
bApproxedSideBottom = dBottomBaseSide2 < 0 ;
bUpdate2 = dBottomBaseSide2 > 0 ;
}
if ( bOnBottomBase2)
bApproxedSideBottom = true ;
else if ( bOnTopBase2)
bUpdate2 = dTopBaseSide2 < 0 ;
}
@@ -1836,12 +1860,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt2 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt2 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide2 > 0) {
// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
dDist = (pt2 - frStartCyl.Orig()) * ( - vvtTipStartAux[(nSub + 1) - nSector]) ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//dDist = (pt2 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
}
}
// base superiore
else if( bOnTopBase2 && bApproxedSideTop) {
@@ -1849,11 +1888,26 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt2 - ( frStartCyl.Orig() + frStartCyl.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if ( dSide < 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else {
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt2 - ( frStartCyl.Orig() + frStartCyl.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if( dSide < 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base top avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide2 > 0) {
// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
dDist = (pt2 - frStartCyl.Orig()) * ( - vvtTipStartAux[(nSub + 1) - nSector]) ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//dDist = (pt2 - frStartCyl.Orig()) * vvtTipStartAux[nSector] ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
}
}
else if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase2 && dSide < 0) || ( bOnBottomBase2 && dSide > 0)))
@@ -1908,16 +1962,12 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX){
if ( bOnBottomBase1)
bUpdate1 = dBottomBaseSide1 > 0 ;
else if ( bOnTopBase1) {
bApproxedSideTop = dTopBaseSide1 > 0 ;
bUpdate1 = dTopBaseSide1 < 0 ;
}
else if ( bOnTopBase1)
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE ) {
if ( bOnBottomBase1) {
bApproxedSideBottom = dBottomBaseSide1 > 0 ;
bUpdate1 = dBottomBaseSide1 < 0 ;
}
if ( bOnBottomBase1)
bApproxedSideBottom = true ;
else if ( bOnTopBase1)
bUpdate1 = dTopBaseSide1 > 0 ;
}
@@ -1926,11 +1976,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = (pt1 - frEndCyl.Orig()) * vvtTipEndAux[nSector] ;
if ( dSide < 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt1 - frEndCyl.Orig()) * vvtTipEndAux[nSector] ;
if ( dSide < 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide1 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt1 - frEndCyl.Orig()) * ( - vvtTipEndAux[(nSub + 1) - nSector]) ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
else {
dDist = (pt1 - frEndCyl.Orig()) * vvtTipEndAux[nSector] ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
// base superiore
else if( bOnTopBase1 && bApproxedSideTop) {
@@ -1938,11 +2004,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt1 - ( frEndCyl.Orig() + frEndCyl.VersZ() * dHeight)) * vvtTopEndAux[nSector] ;
if ( dSide > 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt1 - ( frEndCyl.Orig() + frEndCyl.VersZ() * dHeight)) * vvtTopEndAux[nSector] ;
if( dSide > 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base top avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide1 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt1 - frEndCyl.Orig()) * ( - vvtTipEndAux[(nSub + 1) - nSector]) ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
else {
dDist = (pt1 - frEndCyl.Orig()) * vvtTipEndAux[nSector] ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
else if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase1 && dSide > 0) || ( bOnBottomBase1 && dSide < 0)))
bUpdate1 = true ;
@@ -1978,16 +2060,12 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX){
if ( bOnBottomBase2)
bUpdate2 = dBottomBaseSide2 > 0 ;
else if ( bOnTopBase2) {
bApproxedSideTop = dTopBaseSide2 > 0 ;
bUpdate2 = dTopBaseSide2 < 0 ;
}
else if ( bOnTopBase2)
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
if ( bOnBottomBase2) {
bApproxedSideBottom = dBottomBaseSide2 > 0 ;
bUpdate2 = dBottomBaseSide2 < 0 ;
}
if ( bOnBottomBase2)
bApproxedSideBottom = true ;
else if ( bOnTopBase2)
bUpdate2 = dTopBaseSide2 > 0 ;
}
@@ -1996,11 +2074,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = (pt2 - frEndCyl.Orig()) * vvtTipEndAux[nSector] ;
if ( dSide < 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt2 - frEndCyl.Orig()) * vvtTipEndAux[nSector] ;
if ( dSide < 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide2 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt2 - frEndCyl.Orig()) * ( - vvtTipEndAux[(nSub + 1) - nSector]) ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
else {
dDist = (pt2 - frEndCyl.Orig()) * vvtTipEndAux[nSector] ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
// base superiore
else if( bOnTopBase2 && bApproxedSideTop) {
@@ -2008,11 +2102,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt2 - ( frEndCyl.Orig() + frEndCyl.VersZ() * dHeight)) * vvtTopEndAux[nSector] ;
if ( dSide > 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt2 - ( frEndCyl.Orig() + frEndCyl.VersZ() * dHeight)) * vvtTopEndAux[nSector] ;
if( dSide > 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base top avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide2 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt2 - frEndCyl.Orig()) * ( - vvtTopEndAux[(nSub + 1) - nSector]) ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
else {
dDist = (pt2 - frEndCyl.Orig()) * vvtTopEndAux[nSector] ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
else if ( (n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase2 && dSide > 0) || ( bOnBottomBase2 && dSide < 0))))
bUpdate2 = true ;
@@ -2050,48 +2160,60 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
double dSectorAng = 0 ;
bool bApproxedSideBottom = false ;
bool bApproxedSideTop = false ;
double dBottomBaseSide2 = ( pt2 - frStartCon.Orig()) * vtDirTipStartEx ;
double dTopBaseSide2 = ( pt2 - ( frStartCon.Orig() + frStartCon.VersZ() * dHeight))* vtDirTopStartEx ;
double dBottomBaseSide1 = ( pt1 - frStartCon.Orig()) * vtDirTipStartEx ;
double dTopBaseSide1 = ( pt1 - ( frStartCon.Orig() + frStartCon.VersZ() * dHeight))* vtDirTopStartEx ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
if ( dSide < 0) {
bApproxedSideBottom = dBottomBaseSide2 < 0 ;
bApproxedSideTop = dTopBaseSide2 > 0 ;
bApproxedSideBottom = dBottomBaseSide1 < 0 ;
bApproxedSideTop = dTopBaseSide1 > 0 ;
}
else {
bApproxedSideBottom = dBottomBaseSide2 > 0 ;
bApproxedSideTop = dTopBaseSide2 < 0 ;
bApproxedSideBottom = dBottomBaseSide1 > 0 ;
bApproxedSideTop = dTopBaseSide1 < 0 ;
}
}
else if ( n5AxisType == VolZmap::Move5Axis::ACROSS) {
bApproxedSideBottom = dBottomBaseSide2 < 0 ;
bApproxedSideTop = dTopBaseSide2 < 0 ;
bApproxedSideBottom = dBottomBaseSide1 < 0 ;
bApproxedSideTop = dTopBaseSide1 < 0 ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX){
if ( bOnBottomBase2)
bUpdate2 = dBottomBaseSide2 < 0 ;
else if ( bOnTopBase2) {
bApproxedSideTop = dTopBaseSide2 < 0 ;
bUpdate2 = dTopBaseSide2 > 0 ;
}
if ( bOnBottomBase1)
bUpdate1 = dBottomBaseSide1 < 0 ;
else if ( bOnTopBase1)
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
if ( bOnBottomBase2) {
bApproxedSideBottom = dBottomBaseSide2 < 0 ;
bUpdate2 = dBottomBaseSide2 > 0 ;
}
else if ( bOnTopBase2)
bUpdate2 = dTopBaseSide2 < 0 ;
if ( bOnBottomBase1)
bApproxedSideBottom = true ;
else if ( bOnTopBase1)
bUpdate1 = dTopBaseSide1 < 0 ;
}
if ( bOnBottomBase1 && bApproxedSideBottom) {
vvtTipStartAux.front().GetAngle(pt1 - frStartCon.Orig(), dSectorAng) ;
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub) + 1) ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = (pt1 - frStartCon.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt1 - frStartCon.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide1 > 0) {
// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
dDist = (pt1 - frStartCon.Orig()) * ( - vvtTipStartAux[(nSub + 1) - nSector]) ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//dDist = (pt1 - frStartCon.Orig()) * vvtTipStartAux[nSector] ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
}
}
// base superiore
else if( bOnTopBase1 && bApproxedSideTop) {
@@ -2099,11 +2221,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt1 - ( frStartCon.Orig() + frStartCon.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if( dSide < 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt1 - ( frStartCon.Orig() + frStartCon.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if( dSide < 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base top avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide1 > 0) {
dDist = (pt1 - frStartCon.Orig()) * ( - vvtTopStartAux[(nSub + 1) - nSector]) ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt1 - frStartCon.Orig()) * vvtTopStartAux[nSector] ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
}
}
else if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase1 && dSide < 0) || ( bOnBottomBase1 && dSide > 0)))
bUpdate1 = true ;
@@ -2140,11 +2278,11 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
if ( bOnBottomBase2)
bUpdate2 = dBottomBaseSide2 < 0 ;
else if ( bOnTopBase2)
bApproxedSideTop = dTopBaseSide2 < 0 ;
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
if ( bOnBottomBase2)
bApproxedSideBottom = dBottomBaseSide2 < 0 ;
bApproxedSideBottom = true ;
else if ( bOnTopBase2)
bUpdate2 = dTopBaseSide2 < 0 ;
}
@@ -2153,11 +2291,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt2 - frStartCon.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt2 - frStartCon.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide > 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide2 > 0) {
// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
dDist = (pt2 - frStartCon.Orig()) * ( - vvtTipStartAux[(nSub + 1) - nSector]) ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//dDist = (pt2 - frStartCon.Orig()) * vvtTipStartAux[nSector] ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
}
}
// base superiore
@@ -2166,11 +2320,26 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt2 - ( frStartCon.Orig() + frStartCon.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if ( dSide < 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else {
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt2 - ( frStartCon.Orig() + frStartCon.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if( dSide < 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide2 > 0) {
dDist = (pt2 - frStartCon.Orig()) * ( - vvtTopStartAux[(nSub + 1) - nSector]) ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
else {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt2 - frStartCon.Orig()) * vvtTopStartAux[nSector] ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
}
}
else if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase2 && dSide < 0) || ( bOnBottomBase2 && dSide > 0)))
@@ -2225,16 +2394,12 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX){
if ( bOnBottomBase1)
bUpdate1 = dBottomBaseSide1 > 0 ;
else if ( bOnTopBase1) {
bApproxedSideTop = dTopBaseSide1 > 0 ;
bUpdate1 = dTopBaseSide1 < 0 ;
}
else if ( bOnTopBase1)
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE ) {
if ( bOnBottomBase1) {
bApproxedSideBottom = dBottomBaseSide1 > 0 ;
bUpdate1 = dBottomBaseSide1 < 0 ;
}
if ( bOnBottomBase1)
bApproxedSideBottom = true ;
else if ( bOnTopBase1)
bUpdate1 = dTopBaseSide1 > 0 ;
}
@@ -2243,11 +2408,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = (pt1 - frEndCon.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide < 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt1 - frEndCon.Orig()) * vvtTipEndAux[nSector] ;
if ( dSide < 0)
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide1 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt1 - frEndCon.Orig()) * ( - vvtTipEndAux[(nSub + 1) - nSector]) ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
else {
dDist = (pt1 - frEndCon.Orig()) * vvtTipEndAux[nSector] ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
// base superiore
else if( bOnTopBase1 && bApproxedSideTop) {
@@ -2255,11 +2436,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt1 - ( frEndCon.Orig() + frEndCon.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if ( dSide > 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt1 - ( frEndCon.Orig() + frEndCon.VersZ() * dHeight)) * vvtTopEndAux[nSector] ;
if( dSide > 0)
bUpdate1 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate1 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base top avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide1 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt1 - frEndCon.Orig()) * ( - vvtTopEndAux[(nSub + 1) - nSector]) ;
//bUpdate1 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate1 = true ;
}
else {
dDist = (pt1 - frEndCon.Orig()) * vvtTopEndAux[nSector] ;
bUpdate1 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
else if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase1 && dSide > 0) || ( bOnBottomBase1 && dSide < 0)))
bUpdate1 = true ;
@@ -2295,16 +2492,12 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX){
if ( bOnBottomBase2)
bUpdate2 = dBottomBaseSide2 > 0 ;
else if ( bOnTopBase2) {
bApproxedSideTop = dTopBaseSide2 > 0 ;
bUpdate2 = dTopBaseSide2 < 0 ;
}
else if ( bOnTopBase2)
bApproxedSideTop = true ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
if ( bOnBottomBase2) {
bApproxedSideBottom = dBottomBaseSide2 > 0 ;
bUpdate2 = dBottomBaseSide2 < 0 ;
}
if ( bOnBottomBase2)
bApproxedSideBottom = true ;
else if ( bOnTopBase2)
bUpdate2 = dTopBaseSide2 > 0 ;
}
@@ -2313,11 +2506,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = (pt2 - frEndCon.Orig()) * vvtTipStartAux[nSector] ;
if ( dSide < 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = (pt2 - frEndCon.Orig()) * vvtTipEndAux[nSector] ;
if ( dSide < 0)
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE) {
double dDist = 0 ;
// per il caso ALONG_CONCAVE dovrei avere dSide < 0, quindi sulla base bottom avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dBottomBaseSide2 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt2 - frEndCon.Orig()) * ( - vvtTipEndAux[(nSub + 1) - nSector]) ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
else {
dDist = (pt2 - frEndCon.Orig()) * vvtTipEndAux[nSector] ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
// base superiore
else if( bOnTopBase2 && bApproxedSideTop) {
@@ -2325,11 +2534,27 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
// determino in quale settore del semicerchio approssimato mi trovo
int nSector = int( dSectorAng / ( 180. / nSub)) + 1 ;
// verifico se l'intersezione linea-base è interna o esterna
double dDist = ( pt2 - ( frEndCon.Orig() + frEndCon.VersZ() * dHeight)) * vvtTopStartAux[nSector] ;
if ( dSide > 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS) {
double dDist = ( pt2 - ( frEndCon.Orig() + frEndCon.VersZ() * dHeight)) * vvtTopEndAux[nSector] ;
if( dSide > 0)
bUpdate2 = dDist < dMaxRadApprox - EPS_SMALL ;
else
bUpdate2 = dDist > dMaxRadApprox - EPS_SMALL && dDist < dMaxRad ;
}
else if ( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX) {
double dDist = 0 ;
// per il caso ALONG_CONVEX dovrei avere dSide > 0, quindi sulla base top avere i punti ausiliari nella parte posteriore del cerchio di base
if ( dTopBaseSide2 > 0) {
//// in questo caso devo prendere il vettore Aux dell'angolo supplementare e con segno opposto
//dDist = (pt2 - frEndCon.Orig()) * ( - vvtTopEndAux[(nSub + 1) - nSector]) ;
//bUpdate2 = dDist > dMinRadApprox - EPS_SMALL && dDist < dMinRad ;
bUpdate2 = true ;
}
else {
dDist = (pt2 - frEndCon.Orig()) * vvtTopEndAux[nSector] ;
bUpdate2 = dDist < dMinRadApprox - EPS_SMALL ;
}
}
}
else if ( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS && ((bOnTopBase2 && dSide > 0) || ( bOnBottomBase2 && dSide < 0)))
bUpdate2 = true ;
@@ -2347,52 +2572,56 @@ VolZmap::Comp_5AxisMilling( int nGrid, const PNTVECTOR& ptS, const PNTVECTOR& pt
}
}
//if ( vInters.size() != 0 ) {
// // se ho un numero dispari di intersezioni devo migliorare la gestione
// // riordino le intersezioni rispetto alla loro z
// sort( vInters.begin(), vInters.end(), []( PNTVECT& a, PNTVECT& b){ return a.first.z < b.first.z ;}) ;
// if ( vInters.size() > 2) {
// INTVECTOR vErase ;
// bool bStartNewInterval = true ;
// // elimino eventuali doppioni di punti
// for ( int w = 0 ; w < int( vInters.size()) ; ++w) {
// // se è l'ultimo punto esco
// if ( w == int( vInters.size() - 1))
// break ;
// // se sono due punti vicino tolgo il secondo se sto cercando l'inizio di un intervallo
// // mentre se sto cercando la fine tolgo il primo
// if ( vInters[w + 1].first.z - vInters[w].first.z < 1) {
// if ( bStartNewInterval) {
// // se sto cercando l'inizio, ma sono gli ultimi due punti e sono vicini allora tolgo entrambi ed esco
// if ( w == int( vInters.size() - 2)) {
// // serve che siano in quest'ordine
// vErase.push_back( w) ;
// vErase.push_back( w + 1) ;
// break ;
// }
// else
// vErase.push_back( w + 1) ;
// ++w ;
// }
// else {
// vErase.push_back( w) ;
// ++w ;
// }
// }
// bStartNewInterval = ! bStartNewInterval ;
// }
// // elimino i doppioni
// for ( int w = vErase.size() - 1 ; w >= 0 ; --w)
// vInters.erase( vInters.begin() + vErase[w]) ;
// }
// if ( vInters.size() % 2 == 0) {
// for( int z = 0 ; z < int( vInters.size()) ; z += 2)
// SubtractIntervals( nGrid, i, j, vInters[z].first.z, vInters[z+1].first.z, vInters[z].second, vInters[z+1].second, nToolNum) ;
// }
// else if ( vInters.size() == 3)
// SubtractIntervals( nGrid, i, j, vInters.front().first.z, vInters.back().first.z, vInters.front().second, vInters.back().second, nToolNum) ;
//}
if ( vInters.size() != 0 ) {
// se ho un numero dispari di intersezioni devo migliorare la gestione
// riordino le intersezioni rispetto alla loro z
sort( vInters.begin(), vInters.end(), []( PNTVECT& a, PNTVECT& b){ return a.first.z < b.first.z ;}) ;
if ( vInters.size() > 2) {
INTVECTOR vErase ;
bool bStartNewInterval = true ;
// elimino eventuali doppioni di punti
for ( int w = 0 ; w < int( vInters.size()) ; ++w) {
// se è l'ultimo punto esco
if ( w == int( vInters.size() - 1))
break ;
// se sono due punti vicino tolgo il secondo se sto cercando l'inizio di un intervallo
// mentre se sto cercando la fine tolgo il primo
if ( vInters[w + 1].first.z - vInters[w].first.z < 1) {
if ( bStartNewInterval) {
// se sto cercando l'inizio, ma sono gli ultimi due punti e sono vicini allora tolgo entrambi ed esco
if ( w == int( vInters.size() - 2)) {
// serve che siano in quest'ordine
vErase.push_back( w) ;
vErase.push_back( w + 1) ;
break ;
}
else
vErase.push_back( w + 1) ;
++w ;
}
else {
vErase.push_back( w) ;
++w ;
}
}
bStartNewInterval = ! bStartNewInterval ;
}
// elimino i doppioni
for ( int w = vErase.size() - 1 ; w >= 0 ; --w)
vInters.erase( vInters.begin() + vErase[w]) ;
}
if ( vInters.size() % 2 == 0) {
for( int z = 0 ; z < int( vInters.size()) ; z += 2)
SubtractIntervals( nGrid, i, j, vInters[z].first.z, vInters[z+1].first.z, vInters[z].second, vInters[z+1].second, nToolNum) ;
}
else if ( vInters.size() == 3)
SubtractIntervals( nGrid, i, j, vInters.front().first.z, vInters.back().first.z, vInters.front().second, vInters.back().second, nToolNum) ;
SubtractIntervals( nGrid, i, j, vInters.front().first.z, vInters.back().first.z, vInters.front().second, vInters.back().second, nToolNum) ;
}
}
}
@@ -2605,7 +2834,7 @@ VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, co
if ( ! vtMaxDir.Normalize())
return false ;
vtMaxDir *= dRad ;
if ( vtMaxDir * vtDs > dHStep) {
if ( abs( vtMaxDir * vtDs) > dHStep) {
bAcrossInters = true ;
bAlongInters = true ;
}
@@ -2635,6 +2864,19 @@ VolZmap::MillingGeneralMotionStep( const Point3d& ptPs, const Vector3d& vtDs, co
n5AxisType = VolZmap::Move5Axis::NO_BASE_INTERS ;
}
//debug
string sOut = "" ;
if( n5AxisType == VolZmap::Move5Axis::NO_BASE_INTERS)
sOut = "NO_BASE_INTERS" ;
else if( n5AxisType == VolZmap::Move5Axis::ACROSS)
sOut = "ACROSS" ;
else if( n5AxisType == VolZmap::Move5Axis::ALONG_CONVEX)
sOut = "ALONG_CONVEX" ;
else if( n5AxisType == VolZmap::Move5Axis::ALONG_CONCAVE)
sOut = "ALONG_CONCAVE" ;
LOG_INFO( GetEGkLogger(), sOut.c_str())
//debug
// Divido il movimento in tratti con direzione utensile costante
//////// debug - vecchia modalità