EgtMachKernel :
- in svuotature gestione SpiralIn e SpiralOut ottimizzate per cerchi - in svuotatura aggiunti attacchi zigzag e elica e uscita Glide - in contornatura miglioramenti vari.
This commit is contained in:
+51
-40
@@ -32,6 +32,22 @@
|
||||
|
||||
using namespace std ;
|
||||
|
||||
//------------------------------ Errors --------------------------------------
|
||||
// 2201 = "Error in Sawing : UpdateToolData failed"
|
||||
// 2202 = "Error in Sawing : Center work not allowed with side angle"
|
||||
// 2203 = "Error in Sawing : External side angle HeadSide must equal WorkSide"
|
||||
// 2204 = "Error in Sawing : Internal side angle HeadSide must opposite WorkSide"
|
||||
// 2205 = "Error in Sawing : Depth not computable"
|
||||
// 2206 = "Error in Sawing : machining depth (xx) bigger than MaxMaterial (yy)"
|
||||
// 2207 = "Error in Sawing : SideAngle not allowed on Arc"
|
||||
// 2208 = "Error in Sawing : Entity CalculateToolAndCorrVersors"
|
||||
// 2209 = "Error in Sawing : Entity AdjustForSide"
|
||||
// 2210 = "Error in Sawing : Entity GetElevation"
|
||||
// 2211 = "Error in Sawing : Entity AdjustForEdges"
|
||||
// 2212 = "Error in Sawing : Entity CalculateToolAndCorrVersors 2nd"
|
||||
// 2213 = "Error in Sawing : Center work not allowed with internal arc"
|
||||
// 2214 = "Error in Sawing : Chaining failed"
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
USEROBJ_REGISTER( "EMkSawing", Sawing) ;
|
||||
|
||||
@@ -424,13 +440,15 @@ Sawing::Preview( bool bRecalc)
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : UpdateToolData failed") ;
|
||||
m_pMchMgr->SetLastError( 2201, "Error in Sawing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se necessario, eseguo concatenamento ed inserisco i percorsi sotto la geometria ausiliaria
|
||||
if ( bChain && ! Chain( nAuxId))
|
||||
if ( bChain && ! Chain( nAuxId)) {
|
||||
m_pMchMgr->SetLastError( 2214, "Error in Sawing : Chaining failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifiche per angolo di sbandamento
|
||||
if ( ! VerifySideAngle())
|
||||
@@ -491,13 +509,15 @@ Sawing::Apply( bool bRecalc)
|
||||
|
||||
// aggiorno dati geometrici dell'utensile
|
||||
if ( ! UpdateToolData()) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : UpdateToolData failed") ;
|
||||
m_pMchMgr->SetLastError( 2201, "Error in Sawing : UpdateToolData failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// se necessario, eseguo concatenamento ed inserisco i percorsi sotto la geometria ausiliaria
|
||||
if ( bChain && ! Chain( nAuxId))
|
||||
if ( bChain && ! Chain( nAuxId)) {
|
||||
m_pMchMgr->SetLastError( 2214, "Error in Sawing : Chaining failed") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
// verifiche per angolo di sbandamento
|
||||
if ( ! VerifySideAngle())
|
||||
@@ -815,20 +835,20 @@ Sawing::VerifySideAngle( void)
|
||||
if ( abs( m_Params.m_dSideAngle) > EPS_ANG_SMALL) {
|
||||
// non ammesso lato di lavoro in centro
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_CENTER) {
|
||||
LOG_INFO( GetEMkLogger(), "Center work not allowed with side angle") ;
|
||||
m_pMchMgr->SetLastError( 2202, "Error in Sawing : Center work not allowed with side angle") ;
|
||||
return false ;
|
||||
}
|
||||
// se angolo esterno lato mandrino deve uguagliare lato di lavoro
|
||||
if ( m_Params.m_dSideAngle > 0) {
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_RIGHT) {
|
||||
if ( m_Params.m_nHeadSide == SAW_HS_LEFT) {
|
||||
LOG_INFO( GetEMkLogger(), "External side angle HeadSide must equal WorkSide") ;
|
||||
m_pMchMgr->SetLastError( 2203, "Error in Sawing : External side angle HeadSide must equal WorkSide") ;
|
||||
m_Params.m_nHeadSide = SAW_HS_RIGHT ;
|
||||
}
|
||||
}
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_LEFT) {
|
||||
if ( m_Params.m_nHeadSide == SAW_HS_RIGHT) {
|
||||
LOG_INFO( GetEMkLogger(), "External side angle HeadSide must equal WorkSide") ;
|
||||
m_pMchMgr->SetLastError( 2203, "Error in Sawing : External side angle HeadSide must equal WorkSide") ;
|
||||
m_Params.m_nHeadSide = SAW_HS_LEFT ;
|
||||
}
|
||||
}
|
||||
@@ -837,13 +857,13 @@ Sawing::VerifySideAngle( void)
|
||||
else {
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_RIGHT) {
|
||||
if ( m_Params.m_nHeadSide == SAW_HS_RIGHT) {
|
||||
LOG_INFO( GetEMkLogger(), "Internal side angle HeadSide must opposite WorkSide") ;
|
||||
m_pMchMgr->SetLastError( 2204, "Error in Sawing : Internal side angle HeadSide must opposite WorkSide") ;
|
||||
m_Params.m_nHeadSide = SAW_HS_LEFT ;
|
||||
}
|
||||
}
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_LEFT) {
|
||||
if ( m_Params.m_nHeadSide == SAW_HS_LEFT) {
|
||||
LOG_INFO( GetEMkLogger(), "Internal side angle HeadSide must opposite WorkSide") ;
|
||||
m_pMchMgr->SetLastError( 2204, "Error in Sawing : Internal side angle HeadSide must opposite WorkSide") ;
|
||||
m_Params.m_nHeadSide = SAW_HS_RIGHT ;
|
||||
}
|
||||
}
|
||||
@@ -1070,7 +1090,7 @@ Sawing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
double dDepth ;
|
||||
string sMyDepth = m_Params.m_sDepth ;
|
||||
if ( ! ExeLuaEvalNumExpr( ToUpper( sMyDepth), &dDepth)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Depth not computable") ;
|
||||
m_pMchMgr->SetLastError( 2205, "Error in Sawing : Depth not computable") ;
|
||||
return false ;
|
||||
}
|
||||
// se spessore positivo, lo sottraggo dal risultato
|
||||
@@ -1090,8 +1110,9 @@ Sawing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
}
|
||||
// verifico di non superare il massimo materiale
|
||||
if ( dDepth > m_TParams.m_dMaxMat) {
|
||||
string sOut = "Error in Sawing : Depth bigger than MaxMaterial" ;
|
||||
LOG_INFO( GetEMkLogger(), sOut.c_str()) ;
|
||||
string sOut = "Error in Sawing : machining depth (" + ToString( dDepth, 1) +
|
||||
") bigger than MaxMaterial (" + ToString( m_TParams.m_dMaxMat, 1) + ")" ;
|
||||
m_pMchMgr->SetLastError( 2206, sOut.c_str()) ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -1100,21 +1121,11 @@ Sawing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
m_pGeomDB->GetName( nPathId, sPathName) ;
|
||||
|
||||
// verifiche sull'ampiezza dell'angolo al centro degli eventuali archi
|
||||
const double MAX_ANG_CEN = 180 + EPS_ANG_SMALL ;
|
||||
int nMaxInd = pCompo->GetCurveCount() - 1 ;
|
||||
for ( int i = 0 ; i <= nMaxInd ; ++ i) {
|
||||
// se arco con angolo al centro oltre il limite, lo divido a metà
|
||||
const ICurveArc* pArc = GetCurveArc( pCompo->GetCurve( i)) ;
|
||||
if ( pArc != nullptr && abs( pArc->GetAngCenter()) > MAX_ANG_CEN) {
|
||||
pCompo->AddJoint( i + 0.5) ;
|
||||
++ i ;
|
||||
++ nMaxInd ;
|
||||
}
|
||||
}
|
||||
VerifyArcs( pCompo) ;
|
||||
|
||||
// ciclo sulle curve elementari
|
||||
bool bClosed = pCompo->IsClosed() ;
|
||||
nMaxInd = pCompo->GetCurveCount() - 1 ;
|
||||
int nMaxInd = pCompo->GetCurveCount() - 1 ;
|
||||
for ( int i = 0 ; i <= nMaxInd ; ++ i) {
|
||||
// curva precedente
|
||||
int j = (( i == 0 && bClosed) ? nMaxInd : i - 1) ;
|
||||
@@ -1154,7 +1165,7 @@ Sawing::ProcessEntity( const ICurve* pCrvP, const ICurve* pCrvC, const ICurve* p
|
||||
return false ;
|
||||
// verifico che non ci sia angolo di fianco
|
||||
if ( abs( m_Params.m_dSideAngle) > EPS_ANG_SMALL) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : SideAngle not allowed on Arc") ;
|
||||
m_pMchMgr->SetLastError( 2207, "Error in Sawing : SideAngle not allowed on Arc") ;
|
||||
return false ;
|
||||
}
|
||||
// se arco lavorato dall'esterno
|
||||
@@ -1190,12 +1201,12 @@ Sawing::ProcessLine( const ICurve* pCrvP, const ICurveLine* pLineC, const ICurve
|
||||
// calcolo i versori fresa e correzione
|
||||
Vector3d vtTool, vtCorr ;
|
||||
if ( ! CalculateToolAndCorrVersors( vtDirC, m_Params.m_nHeadSide, m_Params.m_nWorkSide, m_Params.m_dSideAngle, vtTool, vtCorr)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity CalculateToolAndCorrVersors") ;
|
||||
m_pMchMgr->SetLastError( 2208, "Error in Sawing : Entity CalculateToolAndCorrVersors") ;
|
||||
return false ;
|
||||
}
|
||||
// correzioni per lato lama, lato mandrino
|
||||
if ( ! AdjustForSide( pLine)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity AdjustForSide") ;
|
||||
m_pMchMgr->SetLastError( 2209, "Error in Sawing : Entity AdjustForSide") ;
|
||||
return false ;
|
||||
}
|
||||
// aggiungo affondamento
|
||||
@@ -1207,7 +1218,7 @@ Sawing::ProcessLine( const ICurve* pCrvP, const ICurveLine* pLineC, const ICurve
|
||||
Vector3d vtThick = vtToolH * ( m_TParams.m_dThick / vtToolH.SqLen() + 10 * EPS_SMALL) ;
|
||||
if ( ! GetElevation( m_nPhase, pLine->GetStart() - vtSafe, pLine->GetEnd() - vtSafe, vtCorr, dElev) ||
|
||||
! GetElevation( m_nPhase, pLine->GetStart() + vtThick, pLine->GetEnd() + vtThick, vtCorr, dElev2) ) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity GetElevation") ;
|
||||
m_pMchMgr->SetLastError( 2210, "Error in Sawing : Entity GetElevation") ;
|
||||
return false ;
|
||||
}
|
||||
dElev = max( dElev, dElev2) ;
|
||||
@@ -1239,7 +1250,7 @@ Sawing::ProcessLine( const ICurve* pCrvP, const ICurveLine* pLineC, const ICurve
|
||||
// aggiusto per tipo estremi
|
||||
bool bToSkip = false ;
|
||||
if ( ! AdjustLineForEdges( pLine, dElev, vtCorr, vtThick, bIsFirst, bIsLast, bExtAngPC, bExtAngCN, bToSkip)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity AdjustForEdges") ;
|
||||
m_pMchMgr->SetLastError( 2211, "Error in Sawing : Entity AdjustForEdges") ;
|
||||
return false ;
|
||||
}
|
||||
if ( bToSkip) {
|
||||
@@ -1567,12 +1578,12 @@ Sawing::ProcessExtArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
! CalculateToolAndCorrVersors( vtEndDirC, m_Params.m_nHeadSide, m_Params.m_nWorkSide, m_Params.m_dSideAngle, vtEndTool, vtEndCorr) ||
|
||||
! AreSameVectorApprox( vtStaCorr, vtMidCorr) ||
|
||||
! AreSameVectorApprox( vtStaCorr, vtEndCorr)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity CalculateToolAndCorrVersors") ;
|
||||
m_pMchMgr->SetLastError( 2208, "Error in Sawing : Entity CalculateToolAndCorrVersors") ;
|
||||
return false ;
|
||||
}
|
||||
// correzioni per lato lama, lato mandrino
|
||||
if ( ! AdjustForSide( pArc)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity AdjustForSide") ;
|
||||
m_pMchMgr->SetLastError( 2209, "Error in Sawing : Entity AdjustForSide") ;
|
||||
return false ;
|
||||
}
|
||||
// aggiungo affondamento
|
||||
@@ -1588,7 +1599,7 @@ Sawing::ProcessExtArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
Vector3d vtEndThick = vtEndTool * m_TParams.m_dThick ;
|
||||
if ( ! GetElevation( m_nPhase, ptStart, ptMid, ptEnd, vtStaCorr, dElev) ||
|
||||
! GetElevation( m_nPhase, ptStart + vtStaThick, ptMid + vtMidThick, ptEnd + vtEndThick, vtStaCorr, dElev2) ) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity GetElevation") ;
|
||||
m_pMchMgr->SetLastError( 2210, "Error in Sawing : Entity GetElevation") ;
|
||||
return false ;
|
||||
}
|
||||
dElev = max( dElev, dElev2) ;
|
||||
@@ -1617,7 +1628,7 @@ Sawing::ProcessExtArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
// aggiusto per tipo estremi
|
||||
bool bToSkip = false ;
|
||||
if ( ! AdjustArcForEdges( pArc, dElev, 1.0, bIsFirst, bIsLast, bExtAngPC, bExtAngCN, bToSkip)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity AdjustForEdges") ;
|
||||
m_pMchMgr->SetLastError( 2211, "Error in Sawing : Entity AdjustForEdges") ;
|
||||
return false ;
|
||||
}
|
||||
if ( bToSkip) {
|
||||
@@ -1631,7 +1642,7 @@ Sawing::ProcessExtArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
if ( ! CalculateToolAndCorrVersors( vtStaDirC, m_Params.m_nHeadSide, m_Params.m_nWorkSide, m_Params.m_dSideAngle, vtStaTool, vtStaCorr) ||
|
||||
! CalculateToolAndCorrVersors( vtMidDirC, m_Params.m_nHeadSide, m_Params.m_nWorkSide, m_Params.m_dSideAngle, vtMidTool, vtMidCorr) ||
|
||||
! CalculateToolAndCorrVersors( vtEndDirC, m_Params.m_nHeadSide, m_Params.m_nWorkSide, m_Params.m_dSideAngle, vtEndTool, vtEndCorr)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity CalculateToolAndCorrVersors 2nd") ;
|
||||
m_pMchMgr->SetLastError( 2212, "Error in Sawing : Entity CalculateToolAndCorrVersors 2nd") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -2182,7 +2193,7 @@ Sawing::ProcessIntArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
// Verifiche su lato di lavoro e lato testa (si lavora con angolo di sbandamento negativo)
|
||||
int nHeadSide = m_Params.m_nHeadSide ;
|
||||
if ( m_Params.m_nWorkSide == SAW_WS_CENTER) {
|
||||
LOG_INFO( GetEMkLogger(), "Center work not allowed with internal arc") ;
|
||||
m_pMchMgr->SetLastError( 2213, "Error in Sawing : Center work not allowed with internal arc") ;
|
||||
return false ;
|
||||
}
|
||||
else if ( m_Params.m_nWorkSide == SAW_WS_LEFT) {
|
||||
@@ -2205,12 +2216,12 @@ Sawing::ProcessIntArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
if ( ! CalculateToolAndCorrVersors( vtStaDirC, nHeadSide, m_Params.m_nWorkSide, dSideAng, vtStaTool, vtStaCorr) ||
|
||||
! CalculateToolAndCorrVersors( vtMidDirC, nHeadSide, m_Params.m_nWorkSide, dSideAng, vtMidTool, vtMidCorr) ||
|
||||
! CalculateToolAndCorrVersors( vtEndDirC, nHeadSide, m_Params.m_nWorkSide, dSideAng, vtEndTool, vtEndCorr)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity CalculateToolAndCorrVersors") ;
|
||||
m_pMchMgr->SetLastError( 2208, "Error in Sawing : Entity CalculateToolAndCorrVersors") ;
|
||||
return false ;
|
||||
}
|
||||
// correzioni per lato lama, lato mandrino
|
||||
if ( ! AdjustIntArcForSide( pArc, dSideAng)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity AdjustForSide") ;
|
||||
m_pMchMgr->SetLastError( 2209, "Error in Sawing : Entity AdjustForSide") ;
|
||||
return false ;
|
||||
}
|
||||
// aggiungo affondamento
|
||||
@@ -2226,7 +2237,7 @@ Sawing::ProcessIntArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
Vector3d vtEndThick = vtEndTool * m_TParams.m_dThick ;
|
||||
if ( ! GetElevation( m_nPhase, ptStart, ptMid, ptEnd, Z_AX, dElev) ||
|
||||
! GetElevation( m_nPhase, ptStart + vtStaThick, ptMid + vtMidThick, ptEnd + vtEndThick, Z_AX, dElev2) ) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity GetElevation") ;
|
||||
m_pMchMgr->SetLastError( 2210, "Error in Sawing : Entity GetElevation") ;
|
||||
return false ;
|
||||
}
|
||||
dElev = max( dElev, dElev2) ;
|
||||
@@ -2259,7 +2270,7 @@ Sawing::ProcessIntArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
double dLenCoeff = ( dRad + 0.8 * dDelta) / dRad ; // coefficiente per riportare lunghezza
|
||||
bool bToSkip = false ;
|
||||
if ( ! AdjustArcForEdges( pArc, dSlantElev, dLenCoeff, bIsFirst, bIsLast, bExtAngPC, bExtAngCN, bToSkip)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity AdjustForEdges") ;
|
||||
m_pMchMgr->SetLastError( 2211, "Error in Sawing : Entity AdjustForEdges") ;
|
||||
return false ;
|
||||
}
|
||||
if ( bToSkip) {
|
||||
@@ -2273,7 +2284,7 @@ Sawing::ProcessIntArc( const ICurve* pCrvP, const ICurveArc* pArcC, const ICurve
|
||||
if ( ! CalculateToolAndCorrVersors( vtStaDirC, nHeadSide, m_Params.m_nWorkSide, dSideAng, vtStaTool, vtStaCorr) ||
|
||||
! CalculateToolAndCorrVersors( vtMidDirC, nHeadSide, m_Params.m_nWorkSide, dSideAng, vtMidTool, vtMidCorr) ||
|
||||
! CalculateToolAndCorrVersors( vtEndDirC, nHeadSide, m_Params.m_nWorkSide, dSideAng, vtEndTool, vtEndCorr)) {
|
||||
LOG_INFO( GetEMkLogger(), "Error in Sawing : Entity CalculateToolAndCorrVersors 2nd") ;
|
||||
m_pMchMgr->SetLastError( 2212, "Error in Sawing : Entity CalculateToolAndCorrVersors 2nd") ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user