EgtExchange 2.1j3 :

- correzioni a import CNC con aggiunta tipi di controlli NUM, SIEMENS e TPA.
This commit is contained in:
Dario Sassi
2019-10-21 05:50:02 +00:00
parent 572c74de69
commit fffbbcda85
3 changed files with 54 additions and 7 deletions
+52 -5
View File
@@ -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) ;