EgtMachKernel 3.1e5 :
- modifiche a svuotature per correzioni raggio fresa in macchina - preparazione di fresature per correzioni raggio fresa in macchina.
This commit is contained in:
+87
-33
@@ -92,6 +92,7 @@ const double LIM_SIN_DIFF_DIR = 0.175 ;
|
||||
// 2362 = "Warning in Milling : tabs incompatible with saw blade"
|
||||
// 2363 = "Warning in Milling : tabs impossible"
|
||||
// 2364 = "Warning in Milling : tabs number less than minimum"
|
||||
// 2365 = "Warning in Milling : No compensation in tool, so no compensation in machine"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
USEROBJ_REGISTER( GetOperationClass( OPER_MILLING), Milling) ;
|
||||
@@ -259,6 +260,7 @@ Milling::Milling( void)
|
||||
m_bAggrBottom = false ;
|
||||
m_dCurrOscillLen = 0 ;
|
||||
m_dCurrTabsLen = 0 ;
|
||||
m_bToolComp = false ;
|
||||
m_bStartOutRaw = false ;
|
||||
m_bEndOutRaw = false ;
|
||||
}
|
||||
@@ -835,6 +837,16 @@ Milling::Apply( bool bRecalc, bool bPostApply)
|
||||
CalcSurfAuxView( nAuxId, nAuxViewId) ;
|
||||
}
|
||||
|
||||
// recupero flag correzione raggio fresa
|
||||
int nToolComp = TOOL_COMP_PROGRAM ;
|
||||
bool m_bToolComp = ( GetValInNotes( m_Params.m_sUserNotes, UN_TOOL_COMPENSATION, nToolComp) &&
|
||||
( nToolComp == TOOL_COMP_RADIUS || nToolComp == TOOL_COMP_LEN_AND_RAD) &&
|
||||
m_Params.m_nWorkSide != MILL_WS_CENTER) ;
|
||||
if ( m_bToolComp && m_TParams.m_nCorr == 0) {
|
||||
m_bToolComp = false ;
|
||||
m_pMchMgr->SetWarning( 2365, "Warning in Milling : No compensation in tool, so no compensation in machine") ;
|
||||
}
|
||||
|
||||
// lavoro ogni singola catena
|
||||
bool bOk = true ;
|
||||
int nPathId = m_pGeomDB->GetFirstGroupInGroup( nAuxId) ;
|
||||
@@ -1795,7 +1807,7 @@ Milling::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
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 ;
|
||||
double dSignOffs = (( m_Params.m_nWorkSide == MILL_WS_RIGHT) ? dOffs : - dOffs) ;
|
||||
// esecuzione offset
|
||||
if ( ! CalcOffset( pCompo, dSignOffs)) {
|
||||
m_pMchMgr->SetLastError( 2302, "Error in Milling : Offset not computable") ;
|
||||
@@ -4797,6 +4809,7 @@ Milling::CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const
|
||||
double dElev = m_Params.m_dLiElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLiElev, dStElev + GetLeadInOutToler()) ;
|
||||
double dCompLen = m_Params.m_dLiCompLen ;
|
||||
// se step invertito
|
||||
if ( bInvert) {
|
||||
// va aggiustato se non zigzag o spirale
|
||||
@@ -4815,6 +4828,7 @@ Milling::CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const
|
||||
dElev = m_Params.m_dLoElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLoElev, dStElev + GetLeadInOutToler()) ;
|
||||
dCompLen = m_Params.m_dLoCompLen ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4838,15 +4852,15 @@ Milling::CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const
|
||||
vtDir1 = ptP1 - ptStart ;
|
||||
if ( ! vtDir1.Normalize())
|
||||
return false ;
|
||||
bool bOk = true ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( m_Params.m_dLiCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
vtDir1 = OrthoCompo( vtDir1, vtTool) ;
|
||||
bOk = bOk && vtDir1.Normalize() ;
|
||||
vtDir1.Rotate( vtRot, 0, ( bCcwRot ? -1 : 1)) ;
|
||||
ptP1 += vtDir1 * m_Params.m_dLiCompLen ;
|
||||
if ( ! vtDir1.Normalize())
|
||||
return false ;
|
||||
vtDir1.Rotate( vtTool, 0, ( bCcwRot ? -1 : 1)) ;
|
||||
ptP1 += vtDir1 * dCompLen ;
|
||||
}
|
||||
return bOk ;
|
||||
return true ;
|
||||
}
|
||||
case MILL_LI_TG_PERP : {
|
||||
Vector3d vtPerp = vtStart ;
|
||||
@@ -4864,17 +4878,18 @@ Milling::CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const
|
||||
vtDir1 = ptP1 - ptStart ;
|
||||
if ( ! vtDir1.Normalize())
|
||||
return false ;
|
||||
bool bOk = true ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( m_Params.m_dLiCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
PtrOwner<ICurve> pCrv( GetArc2PVN( ptStart, ptP1, - vtStart, vtTool)) ;
|
||||
bOk = bOk && ! IsNull( pCrv) && pCrv->GetEndDir( vtDir1) ;
|
||||
if ( IsNull( pCrv) || ! pCrv->GetEndDir( vtDir1))
|
||||
return false ;
|
||||
vtDir1 = OrthoCompo( vtDir1, vtTool) ;
|
||||
bOk = bOk && vtDir1.Normalize() ;
|
||||
vtDir1.Rotate( vtRot, 0, ( bCcwRot ? -1 : 1)) ;
|
||||
ptP1 += vtDir1 * m_Params.m_dLiCompLen ;
|
||||
if ( ! vtDir1.Normalize())
|
||||
return false ;
|
||||
vtDir1.Rotate( vtTool, 0, ( bCcwRot ? -1 : 1)) ;
|
||||
ptP1 += vtDir1 * dCompLen ;
|
||||
}
|
||||
return bOk ;
|
||||
return true ;
|
||||
}
|
||||
case MILL_LI_GLIDE :
|
||||
{
|
||||
@@ -4896,7 +4911,17 @@ Milling::CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const
|
||||
}
|
||||
ptP1 += vtTool * ( vtTool * ( ptStart - ptP1)) + vtTool * dElev ;
|
||||
vtDir1 = ptP1 - ptStart ;
|
||||
return vtDir1.Normalize() ;
|
||||
if ( ! vtDir1.Normalize())
|
||||
return false ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
vtDir1 = OrthoCompo( vtDir1, vtTool) ;
|
||||
if ( ! vtDir1.Normalize())
|
||||
return false ;
|
||||
vtDir1.Rotate( vtTool, 0, ( bCcwRot ? -1 : 1)) ;
|
||||
ptP1 += vtDir1 * dCompLen ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
case MILL_LI_ZIGZAG :
|
||||
ptP1 = ptStart ;
|
||||
@@ -4923,6 +4948,7 @@ Milling::AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d&
|
||||
double dElev = m_Params.m_dLiElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLiElev, dStElev + GetLeadInOutToler()) ;
|
||||
double dCompLen = m_Params.m_dLiCompLen ;
|
||||
// se step invertito
|
||||
if ( bInvert) {
|
||||
// va aggiustato se non zigzag o spirale
|
||||
@@ -4941,6 +4967,7 @@ Milling::AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d&
|
||||
dElev = m_Params.m_dLoElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLoElev, dStElev + GetLeadInOutToler()) ;
|
||||
dCompLen = m_Params.m_dLoCompLen ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4963,7 +4990,7 @@ Milling::AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d&
|
||||
dElev = 0 ;
|
||||
}
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( m_Params.m_dLiCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
Vector3d vtPerp = vtStart ;
|
||||
Vector3d vtRot = OrthoCompo( vtTool, vtStart) ;
|
||||
vtPerp.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
@@ -4992,7 +5019,7 @@ Milling::AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d&
|
||||
dElev = 0 ;
|
||||
}
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( m_Params.m_dLiCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
Vector3d vtPerp = vtStart ;
|
||||
Vector3d vtRot = OrthoCompo( vtTool, vtStart) ;
|
||||
vtPerp.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
@@ -5051,6 +5078,13 @@ Milling::AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d&
|
||||
double dNini = ( ptP1 - ORIG) * vtTool ;
|
||||
double dNfin = ( ptStart - ORIG) * vtTool ;
|
||||
AdjustCurveSlope( pCrv, dNini, dNfin) ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
Point3d ptMid ;
|
||||
pCrv->GetStartPoint( ptMid) ;
|
||||
if ( AddLinearMove( ptMid, bSplitArcs, MCH_CL_LEADIN) == GDB_ID_NULL)
|
||||
return false ;
|
||||
}
|
||||
// emetto (con eventuale spezzatura)
|
||||
return ( AddCurveMove( pCrv, bSplitArcs, MCH_CL_LEADIN) != GDB_ID_NULL) ;
|
||||
}
|
||||
@@ -5165,6 +5199,7 @@ Milling::CalcLeadOutEnd( const Point3d& ptEnd, const Vector3d& vtEnd, const Vect
|
||||
double dElev = m_Params.m_dLoElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLoElev, dEndElev + GetLeadInOutToler()) ;
|
||||
double dCompLen = m_Params.m_dLoCompLen ;
|
||||
// se uscita come ingresso o step invertito
|
||||
if ( nType == MILL_LO_AS_LI || bInvert) {
|
||||
int nLiType = GetLeadInType() ;
|
||||
@@ -5186,10 +5221,11 @@ Milling::CalcLeadOutEnd( const Point3d& ptEnd, const Vector3d& vtEnd, const Vect
|
||||
dElev = m_Params.m_dLiElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLiElev, dEndElev + GetLeadInOutToler()) ;
|
||||
dCompLen = m_Params.m_dLiCompLen ;
|
||||
}
|
||||
// senso di rotazione da dir tg a dir esterna
|
||||
bool bCcwRot = (( ! bInvert && m_Params.m_nWorkSide == MILL_WS_LEFT) ||
|
||||
( bInvert && m_Params.m_nWorkSide != MILL_WS_LEFT)) ;
|
||||
( bInvert && m_Params.m_nWorkSide != MILL_WS_LEFT)) ;
|
||||
// verifico di poter fare l'uscita a inseguimento
|
||||
if ( nType == MILL_LO_GLIDE && ! pCompo->IsClosed() && m_dAddedOverlap < EPS_SMALL)
|
||||
nType = MILL_LO_NONE ;
|
||||
@@ -5204,11 +5240,11 @@ Milling::CalcLeadOutEnd( const Point3d& ptEnd, const Vector3d& vtEnd, const Vect
|
||||
Vector3d vtRot = OrthoCompo( vtTool, vtEnd) ;
|
||||
vtPerp.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 = ptEnd + vtEnd * dTang + vtPerp * dPerp + vtTool * dElev ;
|
||||
if ( m_Params.m_dLoCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
Vector3d vtPerp2 = vtEnd * dTang + vtPerp * dPerp ;
|
||||
if ( vtPerp2.Normalize()) {
|
||||
vtPerp2.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtPerp2 * m_Params.m_dLoCompLen ;
|
||||
ptP1 += vtPerp2 * dCompLen ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
@@ -5229,11 +5265,11 @@ Milling::CalcLeadOutEnd( const Point3d& ptEnd, const Vector3d& vtEnd, const Vect
|
||||
Vector3d vtRot = OrthoCompo( vtTool, vtEnd) ;
|
||||
vtPerp.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 = ptEnd + vtEnd * dTang + vtPerp * dPerp + vtTool * dElev ;
|
||||
if ( m_Params.m_dLoCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
Vector3d vtPerp2 = vtEnd * dTang + vtPerp * dPerp ;
|
||||
if ( vtPerp2.Normalize()) {
|
||||
vtPerp2.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtPerp2 * m_Params.m_dLoCompLen ;
|
||||
ptP1 += vtPerp2 * dCompLen ;
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
@@ -5281,6 +5317,15 @@ Milling::CalcLeadOutEnd( const Point3d& ptEnd, const Vector3d& vtEnd, const Vect
|
||||
AdjustCurveSlope( pCrv, dNini, dNini + dElev) ;
|
||||
// assegno punto finale dell'uscita
|
||||
pCrv->GetEndPoint( ptP1) ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
Vector3d vtDir1 ;
|
||||
pCrv->GetEndDir( vtDir1) ;
|
||||
vtDir1 = OrthoCompo( vtDir1, vtTool) ;
|
||||
vtDir1.Normalize() ;
|
||||
vtDir1.Rotate( vtTool, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtDir1 * dCompLen ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
default :
|
||||
@@ -5300,6 +5345,7 @@ Milling::AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d
|
||||
double dElev = m_Params.m_dLoElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLoElev, dEndElev + GetLeadInOutToler()) ;
|
||||
double dCompLen = m_Params.m_dLoCompLen ;
|
||||
// se uscita come ingresso o step invertito
|
||||
if ( nType == MILL_LO_AS_LI || bInvert) {
|
||||
int nLiType = GetLeadInType() ;
|
||||
@@ -5321,6 +5367,7 @@ Milling::AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d
|
||||
dElev = m_Params.m_dLiElev ;
|
||||
if ( m_TParams.m_nType != TT_MILL_POLISHING)
|
||||
dElev = min( m_Params.m_dLiElev, dEndElev + GetLeadInOutToler()) ;
|
||||
dCompLen = m_Params.m_dLiCompLen ;
|
||||
}
|
||||
// senso di rotazione da dir tg a dir esterna
|
||||
bool bCcwRot = (( ! bInvert && m_Params.m_nWorkSide == MILL_WS_LEFT) ||
|
||||
@@ -5351,11 +5398,11 @@ Milling::AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d
|
||||
// inserisco movimento di uscita
|
||||
bool bOk = ( AddLinearMove( ptP1, bSplitArcs, MCH_CL_LEADOUT) != GDB_ID_NULL) ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( m_Params.m_dLoCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
vtDir1 = OrthoCompo( vtDir1, vtTool) ;
|
||||
bOk = bOk && vtDir1.Normalize() ;
|
||||
vtDir1.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtDir1 * m_Params.m_dLoCompLen ;
|
||||
vtDir1.Rotate( vtTool, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtDir1 * dCompLen ;
|
||||
bOk = bOk && ( AddLinearMove( ptP1, bSplitArcs, MCH_CL_LEADOUT) != GDB_ID_NULL) ;
|
||||
}
|
||||
// eventuale movimento in elevazione per flottante
|
||||
@@ -5397,14 +5444,13 @@ Milling::AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d
|
||||
Vector3d vtDirF ;
|
||||
if ( ! pCrv->GetEndDir( vtDirF))
|
||||
return false ;
|
||||
bool bOk = true ;
|
||||
bOk = ( AddCurveMove( pCrv, bSplitArcs, MCH_CL_LEADOUT) != GDB_ID_NULL) ;
|
||||
bool bOk = ( AddCurveMove( pCrv, bSplitArcs, MCH_CL_LEADOUT) != GDB_ID_NULL) ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( m_Params.m_dLoCompLen > 10 * EPS_SMALL) {
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
vtDir1 = OrthoCompo( vtDirF, vtTool) ;
|
||||
bOk = bOk && vtDir1.Normalize() ;
|
||||
vtDir1.Rotate( vtRot, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtDir1 * m_Params.m_dLoCompLen ;
|
||||
vtDir1.Rotate( vtTool, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtDir1 * dCompLen ;
|
||||
bOk = bOk && ( AddLinearMove( ptP1, bSplitArcs, MCH_CL_LEADOUT) != GDB_ID_NULL) ;
|
||||
}
|
||||
// eventuale movimento in elevazione per flottante
|
||||
@@ -5455,12 +5501,20 @@ Milling::AddLeadOut( const Point3d& ptEnd, const Vector3d& vtEnd, const Vector3d
|
||||
// assegno la corretta pendenza
|
||||
double dNini = ( ptEnd - ORIG) * vtTool ;
|
||||
AdjustCurveSlope( pCrv, dNini, dNini + dElev) ;
|
||||
// emetto
|
||||
AddCurveMove( pCrv, bSplitArcs, MCH_CL_LEADOUT) ;
|
||||
// assegno punto e direzione finale dell'uscita
|
||||
pCrv->GetEndPoint( ptP1) ;
|
||||
pCrv->GetEndDir( vtDir1) ;
|
||||
return true ;
|
||||
// emetto
|
||||
bool bOk = ( AddCurveMove( pCrv, bSplitArcs, MCH_CL_LEADOUT) != GDB_ID_NULL) ;
|
||||
// eventuale movimento ortogonale (estensione di inserimento compensazione raggio utensile)
|
||||
if ( dCompLen > 10 * EPS_SMALL) {
|
||||
vtDir1 = OrthoCompo( vtDir1, vtTool) ;
|
||||
bOk = bOk && vtDir1.Normalize() ;
|
||||
vtDir1.Rotate( vtTool, 0, ( bCcwRot ? 1 : - 1)) ;
|
||||
ptP1 += vtDir1 * dCompLen ;
|
||||
bOk = bOk && ( AddLinearMove( ptP1, bSplitArcs, MCH_CL_LEADOUT) != GDB_ID_NULL) ;
|
||||
}
|
||||
return bOk ;
|
||||
}
|
||||
default :
|
||||
return false ;
|
||||
|
||||
Reference in New Issue
Block a user