EgtGeomKernel :
- correzioni a VM 5assi.
This commit is contained in:
+439
-197
@@ -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à
|
||||
|
||||
Reference in New Issue
Block a user