diff --git a/EgtExchange.rc b/EgtExchange.rc index e411f87..792dd3b 100644 Binary files a/EgtExchange.rc and b/EgtExchange.rc differ diff --git a/ImportCnc.cpp b/ImportCnc.cpp index f4df3fd..02df17f 100644 --- a/ImportCnc.cpp +++ b/ImportCnc.cpp @@ -119,6 +119,17 @@ ImportCnc::Import( const string& sFile, IGeomDB* pGDB, int nIdGroup, int nFlag) m_sToolName.clear() ; m_nExit = 1 ; + // se estensione xpi è NUM + string sFileTitle, sFileExt ; + SplitLast( sFile, ".", sFileTitle, sFileExt) ; + ToUpper( sFileExt) ; + if ( sFileExt == "XPI") + m_nCNC = CNC_NUM ; + else if ( sFileExt == "MPF") + m_nCNC = CNC_SIEMENS ; + else if ( sFileExt == "ISO") + m_nCNC = CNC_TPA ; + // ciclo di lettura delle linee bool bOk = true ; string sLine ; @@ -150,9 +161,29 @@ ImportCnc::ProcessLine( const string& sLine) if ( sLine[0] == '$' || sLine[0] == '!') return true ; + // eliminazione di commenti intermedi o finali + string sMyLine = sLine ; + // se controllo OSAI elimino le parti dopo ; + if ( m_nCNC == CNC_OSAI) { + size_t nStart = sMyLine.find( ';') ; + if ( nStart != string::npos) + sMyLine.erase( nStart) ; + } + // se controllo NUM elimino le parti tra parentesi tonde + else if ( m_nCNC == CNC_NUM) { + size_t nStart = sMyLine.find( '(') ; + if ( nStart != string::npos) { + size_t nEnd = sMyLine.find( ')', nStart) ; + if ( nEnd != string::npos) + sMyLine.erase( nStart, nEnd - nStart + 1) ; + else + sMyLine.erase( nStart) ; + } + } + // divido la linea in parti STRVECTOR vsTokens ; - TokenizePlus( sLine, "NGXYZIJKPQRUVWABCFTMHh", vsTokens) ; + TokenizePlus( sMyLine, "NGXYZIJKPQRUVWABCFTMHhDEL", vsTokens) ; // analizzo ogni singola parte for ( size_t i = 0 ; i < vsTokens.size() ; ++ i) { @@ -203,8 +234,17 @@ ImportCnc::ProcessLine( const string& sLine) case 'M' : ParseM( vsTokens[i]) ; break ; + case 'H' : + if ( m_nCNC == CNC_FANUC) + ParseH( vsTokens[i]) ; + break ; case 'h' : - Parseh( vsTokens[i]) ; + if ( m_nCNC == CNC_OSAI) + ParseH( vsTokens[i]) ; + break ; + case 'D' : + if ( m_nCNC != CNC_FANUC && m_nCNC != CNC_OSAI) + ParseH( vsTokens[i]) ; break ; } } @@ -245,10 +285,17 @@ ImportCnc::ParseRemark( const string& sLine) if ( iCnc != string::npos) { string sCNC = sLine.substr( iCnc + 4) ; TrimRight( sCNC, " )") ; - if ( ToUpper( sCNC) == "OSAI") + sCNC = ToUpper( sCNC) ; + if ( sCNC == "OSAI") m_nCNC = CNC_OSAI ; - else if ( ToUpper( sCNC) == "FANUC") + else if ( sCNC == "FANUC") m_nCNC = CNC_FANUC ; + else if ( sCNC == "NUM") + m_nCNC = CNC_NUM ; + else if ( sCNC == "SIEMENS") + m_nCNC = CNC_SIEMENS ; + else if ( sCNC == "TPA") + m_nCNC = CNC_TPA ; } // cerco indicazione di posizione Home string::size_type iFrom = sLine.find( "FROM/") ; @@ -652,7 +699,7 @@ ImportCnc::ParseM( const string& sToken) //---------------------------------------------------------------------------- bool -ImportCnc::Parseh( const string& sToken) +ImportCnc::ParseH( const string& sToken) { int nVal ; int nStart = ( sToken[1] == '=' ? 2 : 1) ; diff --git a/ImportCnc.h b/ImportCnc.h index b61f3b6..549f03e 100644 --- a/ImportCnc.h +++ b/ImportCnc.h @@ -43,7 +43,7 @@ class ImportCnc : public IImportCnc bool ParseC( const std::string& sToken) ; bool ParseT( const std::string& sToken) ; bool ParseM( const std::string& sToken) ; - bool Parseh( const std::string& sToken) ; + bool ParseH( const std::string& sToken) ; bool ExecSetIPL( void) ; bool ExecMovement( void) ; bool AddPoint( int nPntType) ; @@ -71,7 +71,7 @@ class ImportCnc : public IImportCnc return true ; } private : - enum CncName { CNC_STD = 0, CNC_OSAI = 1, CNC_FANUC = 2} ; + enum CncName { CNC_STD = 0, CNC_OSAI = 1, CNC_FANUC = 2, CNC_NUM = 3, CNC_SIEMENS = 4, CNC_TPA = 5} ; 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, ARC_MID_2D = 4, ARC_MID_3D = 5} ;