EgtMachKernel 1.6w3 :

- miglioria a separazione grezzo con pezzi piani per tagli e fresate
- in fresatura migliorata applicazione allungamento e accorciamento di percorso
- in fresatura a spirale aperta corretta direzione inizio
- in taglio con lama su archi corretta direzione fresa con attacco/uscita interni
- in taglio con lama su arco interno corretto calcolo preview.
This commit is contained in:
Dario Sassi
2016-11-14 06:23:30 +00:00
parent 1771b5a6ff
commit fbda2e5945
6 changed files with 76 additions and 40 deletions
+27 -25
View File
@@ -931,28 +931,7 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId)
double dThick ;
pCompo->GetThickness( dThick) ;
// se utensile non centrato, eseguo correzione raggio utensile ed eventuale offset
double dOffs = 0.5 * m_TParams.m_dDiam + GetOffsR() ;
if ( m_Params.m_nWorkSide != MILL_WS_CENTER && abs( dOffs) > EPS_SMALL) {
// valore offset
double dSignOffs = ( m_Params.m_nWorkSide == MILL_WS_RIGHT) ? dOffs : - dOffs ;
// flag offset
int nFlag = ICurve::OFF_EXTEND ;
if ( pCompo->IsClosed()) {
Vector3d vtStart, vtEnd ;
if ( pCompo->GetStartDir( vtStart) && pCompo->GetEndDir( vtEnd) &&
( vtEnd ^ vtStart) * vtExtr * dSignOffs > 0)
nFlag += ICurve::OFF_FORCE_OPEN ;
}
// esecuzione offset
if ( ! pCompo->SimpleOffset( dSignOffs, nFlag)) {
LOG_INFO( GetEMkLogger(), "Error in Milling : SimpleOffset not computable") ;
return false ;
}
}
// eventuali allungamenti/accorciamenti per percorso aperto
bool bOverlapOn = false ;
if ( ! pCompo->IsClosed()) {
// verifico che il percorso sia abbastanza lungo
double dLen ; pCompo->GetLength( dLen) ;
@@ -980,8 +959,31 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId)
return false ;
}
}
// se utensile non centrato, eseguo correzione raggio utensile ed eventuale offset
double dOffs = 0.5 * m_TParams.m_dDiam + GetOffsR() ;
if ( m_Params.m_nWorkSide != MILL_WS_CENTER && abs( dOffs) > EPS_SMALL) {
// valore offset
double dSignOffs = ( m_Params.m_nWorkSide == MILL_WS_RIGHT) ? dOffs : - dOffs ;
// flag offset
int nFlag = ICurve::OFF_EXTEND ;
// se percorso chiuso senza overlap ed inizio/fine è un angolo esterno
if ( pCompo->IsClosed() && m_Params.m_dOverlap < EPS_SMALL) {
Vector3d vtStart, vtEnd ;
if ( pCompo->GetStartDir( vtStart) && pCompo->GetEndDir( vtEnd) &&
( vtEnd ^ vtStart) * vtExtr * dSignOffs > 0)
nFlag += ICurve::OFF_FORCE_OPEN ;
}
// esecuzione offset
if ( ! pCompo->SimpleOffset( dSignOffs, nFlag)) {
LOG_INFO( GetEMkLogger(), "Error in Milling : SimpleOffset not computable") ;
return false ;
}
}
// eventuale sovrapposizione per percorso chiuso
else {
bool bOverlapOn = false ;
if ( pCompo->IsClosed()) {
if ( m_Params.m_dOverlap > EPS_SMALL) {
double dParS, dParE ;
if ( pCompo->GetParamAtLength( 0.0, dParS) &&
@@ -1408,7 +1410,7 @@ Milling::AddZigZagMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
for ( int j = 1 ; j <= nStep ; ++ j) {
// ciclo sulle curve elementari
for ( int i = 0 ; i <= nMaxInd ; ++ i) {
// flag direzione
// flag direzione (prima passata indice 1)
bool bInvert = ( ( j % 2) == 0) ;
// curva corrente
const ICurve* pCrvC = pCompo->GetCurve( ( bInvert ? nMaxInd - i : i)) ;
@@ -1765,8 +1767,8 @@ Milling::AddSpiralMilling( const ICurveComposite* pCompo, const Vector3d& vtTool
// ciclo sulle curve elementari
double dCurrLen = 0 ;
for ( int i = 0 ; i <= nMaxInd ; ++ i) {
// flag direzione
bool bInvert = ( ( j % 2) == 0) ;
// flag direzione (prima passata indice 0)
bool bInvert = ( ( j % 2) == 1) ;
// curva corrente
const ICurve* pCrvC = pCompo->GetCurve( ( bInvert ? nMaxInd - i : i)) ;
// copio la curva