From 673e4617373c777a3da51be0dfd9dff45dc89cef Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 27 Mar 2017 06:50:17 +0000 Subject: [PATCH] EgtExchange 1.8c4 : - migliorie import CNC per gestire movimenti soli assi rotanti. --- EgtExchange.rc | Bin 11670 -> 11670 bytes ImportCnc.cpp | 49 ++++++++++++++++++++++++++++++++++--------------- ImportCnc.h | 17 ++++++++++++++++- 3 files changed, 50 insertions(+), 16 deletions(-) diff --git a/EgtExchange.rc b/EgtExchange.rc index a5828e2e37e276593d8020fea98a893a4ddad051..f96abb02dec7968baa1cbc1d8d4ea7bf02507efc 100644 GIT binary patch delta 86 zcmbOhJuP~}FE&P#&3E|@GELsYnFC~gl&oglyoB3=87yoFqCQGiGH&h=wt@&Dsoczh KrYJz!jSB#XBOc-a delta 86 zcmbOhJuP~}FE&Qw&3E|@GELsYnFC~gl&oglyoB3=87yoFqCQGiGH&h=wt@&Dsoczh KrYJz!jSB#V(H`0W diff --git a/ImportCnc.cpp b/ImportCnc.cpp index 44035fd..93b8d3c 100644 --- a/ImportCnc.cpp +++ b/ImportCnc.cpp @@ -1,13 +1,13 @@ //---------------------------------------------------------------------------- -// EgalTech 2014-2014 +// EgalTech 2014-2017 //---------------------------------------------------------------------------- -// File : ImportCnc.cpp Data : 15.09.14 Versione : 1.5i3 +// File : ImportCnc.cpp Data : 26.03.17 Versione : 1.8c4 // Contenuto : Implementazione della classe per l'importazione di CNC. // // // // Modifiche : 15.09.14 DS Creazione modulo. -// +// 26/03/17 DS Gestione punto come solo cambio assi rotanti. // //---------------------------------------------------------------------------- @@ -32,9 +32,9 @@ using namespace std ; //---------------------------------------------------------------------------- +static const string NAME_ERROR = "Error" ; static const Color COL_RAPID( 0, 192, 192, 50) ; static const Color COL_ERROR( 255, 0, 0, 100) ; -static const string KEY_ERROR = "ERR" ; static const string KEY_TCS = "TCS" ; static const string KEY_TCOMP = "TCOMP" ; static const string KEY_TNAME = "TNAME" ; @@ -112,6 +112,7 @@ ImportCnc::Import( const string& sFile, IGeomDB* pGDB, int nIdGroup, int nFlag) m_dRotAxA = NAN ; m_dRotAxB = NAN ; m_dRotAxC = NAN ; + SaveRotAxes() ; m_colCurr = BLACK ; m_sToolName.clear() ; m_nExit = 1 ; @@ -547,6 +548,7 @@ ImportCnc::ParseA( const string& sToken) if ( ! FromString( sToken.substr( nStart), dVal)) dVal = 0 ; m_dRotAxA = ( m_bAbsCoord ? dVal : m_dRotAxA + dVal) ; + m_bToMove = true ; return true ; } @@ -559,6 +561,7 @@ ImportCnc::ParseB( const string& sToken) if ( ! FromString( sToken.substr( nStart), dVal)) dVal = 0 ; m_dRotAxB = ( m_bAbsCoord ? dVal : m_dRotAxB + dVal) ; + m_bToMove = true ; return true ; } @@ -582,6 +585,7 @@ ImportCnc::ParseC( const string& sToken) if ( ! FromString( sToken.substr( nStart), dVal)) dVal = 0 ; m_dRotAxC = ( m_bAbsCoord ? dVal : m_dRotAxC + dVal) ; + m_bToMove = true ; return true ; } @@ -653,15 +657,21 @@ ImportCnc::ExecMovement( void) // eseguo movimento switch ( m_nMoveType) { case RAPID : - return AddLine( L_RAPID) ; + if ( AreSamePointApprox( m_ptLast, m_ptNext)) + return ( RotAxesChanged() ? AddPoint( P_RAPID) : true) ; + else + return AddLine( L_RAPID) ; case LINE : - return AddLine( L_LINE) ; + if ( AreSamePointApprox( m_ptLast, m_ptNext)) + return ( RotAxesChanged() ? AddPoint( P_PNT) : true) ; + else + return AddLine( L_LINE) ; case ARC_CW : case ARC_CCW : if ( AddArc( m_nMoveType == ARC_CCW)) return true ; if ( AreSamePointApprox( m_ptLast, m_ptNext)) - AddPoint() ; + AddPoint( P_ERROR) ; else AddLine( L_ERROR) ; return false ; @@ -672,7 +682,7 @@ ImportCnc::ExecMovement( void) //---------------------------------------------------------------------------- bool -ImportCnc::AddPoint( void) +ImportCnc::AddPoint( int nPntType) { // creo il punto PtrOwner pGeoPnt( CreateGeoPoint3d()) ; @@ -688,8 +698,18 @@ ImportCnc::AddPoint( void) if ( nId == GDB_ID_NULL) return false ; // attributi - m_pGDB->SetMaterial( nId, COL_ERROR) ; - m_pGDB->SetInfo( nId, KEY_ERROR, "1") ; + switch ( nPntType) { + case P_RAPID : + m_pGDB->SetMaterial( nId, COL_RAPID) ; + break ; + case P_PNT : + m_pGDB->SetMaterial( nId, m_colCurr) ; + break ; + case P_ERROR : + m_pGDB->SetMaterial( nId, COL_ERROR) ; + m_pGDB->SetName( nId, NAME_ERROR) ; + break ; + } // assegnazione numero di linea m_pGDB->SetName( nId, ToString( m_nLine)) ; // assegnazione eventuale uscita @@ -706,6 +726,7 @@ ImportCnc::AddPoint( void) m_pGDB->SetInfo( nId, KEY_ROTAX_C, m_dRotAxC) ; // movimento effettuato m_ptLast = m_ptNext ; + SaveRotAxes() ; return true ; } @@ -713,10 +734,6 @@ ImportCnc::AddPoint( void) bool ImportCnc::AddLine( int nLineType) { - // se la linea è nulla, non la inserisco ma proseguo senza errore - if ( AreSamePointApprox( m_ptLast, m_ptNext)) - return true ; - // creo la linea PtrOwner pCrvLine( CreateCurveLine()) ; if ( IsNull( pCrvLine)) @@ -740,7 +757,7 @@ ImportCnc::AddLine( int nLineType) break ; case L_ERROR : m_pGDB->SetMaterial( nId, COL_ERROR) ; - m_pGDB->SetName( nId, "Error") ; + m_pGDB->SetName( nId, NAME_ERROR) ; break ; } // eventuale info sul correttore (se non è riferito a zero macchina) @@ -765,6 +782,7 @@ ImportCnc::AddLine( int nLineType) m_pGDB->SetInfo( nId, KEY_ROTAX_C, m_dRotAxC) ; // movimento effettuato m_ptLast = m_ptNext ; + SaveRotAxes() ; return true ; } @@ -851,6 +869,7 @@ ImportCnc::AddArc( bool bCCW) m_pGDB->SetInfo( nId, KEY_ROTAX_C, m_dRotAxC) ; // movimento effettuato m_ptLast = m_ptNext ; + SaveRotAxes() ; return true ; } diff --git a/ImportCnc.h b/ImportCnc.h index 198821d..a21b84a 100644 --- a/ImportCnc.h +++ b/ImportCnc.h @@ -46,7 +46,7 @@ class ImportCnc : public IImportCnc bool Parseh( const std::string& sToken) ; bool ExecSetIPL( void) ; bool ExecMovement( void) ; - bool AddPoint( void) ; + bool AddPoint( int nPntType) ; bool AddLine( int nLineType) ; bool AddArc( bool bCCW) ; int VerifyArcCenter( const Vector3d& vtN) ; @@ -57,11 +57,23 @@ class ImportCnc : public IImportCnc bool IsRapid( int nId) ; bool InsertCurveComposite( ICurveComposite* pCompo, Color cCol, int nComp, int nSide, int nIdRef, int nSonBeforeAfter) ; + private : + bool RotAxesChanged( void) + { return ( ! isnan( m_dRotAxA) && abs( m_dRotAxA - m_dLastRotAxA) > EPS_ANG_SMALL) || + ( ! isnan( m_dRotAxB) && abs( m_dRotAxB - m_dLastRotAxB) > EPS_ANG_SMALL) || + ( ! isnan( m_dRotAxC) && abs( m_dRotAxC - m_dLastRotAxC) > EPS_ANG_SMALL) ; } + bool SaveRotAxes( void) + { m_dLastRotAxA = m_dRotAxA ; + m_dLastRotAxB = m_dRotAxB ; + m_dLastRotAxC = m_dRotAxC ; + return true ; } + private : enum CncName { CNC_STD = 0, CNC_OSAI = 1} ; enum InterpPl { XY = 1, YZ = 2, ZX = 3} ; enum Command { NO_CMD = 0, MOVE = 1, IPL = 2, OFFS = 3} ; enum MoveType { RAPID = 0, LINE = 1, ARC_CW = 2, ARC_CCW = 3} ; + enum PntType { P_RAPID = 0, P_PNT = 1, P_ERROR = 2} ; enum LineType { L_RAPID = 0, L_LINE = 1, L_ERROR = 2} ; enum ArcType { NO_ARCTYPE = 0, RADIUS = 1, CENTER = 2} ; enum ArcCtType { A_ARC = 0, A_CIRC =1, A_ERROR = 2} ; @@ -98,6 +110,9 @@ class ImportCnc : public IImportCnc double m_dRotAxA ; double m_dRotAxB ; double m_dRotAxC ; + double m_dLastRotAxA ; + double m_dLastRotAxB ; + double m_dLastRotAxC ; Color m_colCurr ; std::string m_sToolName ; int m_nExit ;