EgtMachKernel 2.3l2 :
- in simulazione aggiunta gestione assi linkati ad altri assi.
This commit is contained in:
+92
-21
@@ -604,6 +604,7 @@ Simulator::ResetAuxAxes( void)
|
||||
m_AuxAxesLinear.clear() ;
|
||||
m_AuxAxesVal.clear() ;
|
||||
m_AuxAxesEnd.clear() ;
|
||||
m_AuxAxesLink.clear() ;
|
||||
// abilito assi principali
|
||||
m_bEnabAxes = true ;
|
||||
m_bShowAxes = true ;
|
||||
@@ -1010,14 +1011,28 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
|
||||
}
|
||||
for ( int i = 1 ; i <= nStep ; ++ i) {
|
||||
double dCurrCoeff = dPrevCoeff + ( m_dCoeff - dPrevCoeff) / nStep * i ;
|
||||
DBLVECTOR vDeltaVal( m_AxesName.size()) ;
|
||||
// assegno posizioni finali
|
||||
for ( int j = 0 ; j < int( m_AxesName.size()) ; ++ j) {
|
||||
double dPrevVal ;
|
||||
m_pMachine->GetAxisPos( m_AxesName[j], dPrevVal) ;
|
||||
double dVal = m_AxesVal[j] * ( 1 - dCurrCoeff) + AxesEnd[j] * dCurrCoeff ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[j], dVal) ;
|
||||
vDeltaVal[j] = dVal - dPrevVal ;
|
||||
}
|
||||
// muovo eventuali assi ausiliari
|
||||
for ( int j = 0 ; j < int( m_AuxAxesName.size()) ; ++ j) {
|
||||
double dVal = m_AuxAxesVal[j] * ( 1 - dCurrCoeff) + m_AuxAxesEnd[j] * dCurrCoeff ;
|
||||
double dVal = 0 ;
|
||||
if ( m_AuxAxesLink[j] == 0) {
|
||||
dVal = m_AuxAxesVal[j] * ( 1 - dCurrCoeff) + m_AuxAxesEnd[j] * dCurrCoeff ;
|
||||
}
|
||||
else {
|
||||
m_pMachine->GetAxisPos( m_AuxAxesName[j], dVal) ;
|
||||
if ( m_AuxAxesLink[j] > 0)
|
||||
dVal += vDeltaVal[m_AuxAxesLink[j] - 1] ;
|
||||
else
|
||||
dVal -= vDeltaVal[-m_AuxAxesLink[j] - 1] ;
|
||||
}
|
||||
m_pMachine->SetAxisPos( m_AuxAxesName[j], dVal) ;
|
||||
}
|
||||
// eseguo eventuale collision check
|
||||
@@ -1058,19 +1073,42 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
|
||||
}
|
||||
for ( int i = 1 ; i <= nStep ; ++ i) {
|
||||
double dCurrCoeff = dPrevCoeff + ( m_dCoeff - dPrevCoeff) / nStep * i ;
|
||||
DBLVECTOR vDeltaVal( m_AxesName.size()) ;
|
||||
// assi lineari
|
||||
vtRot.Rotate( vtN, dDiffAng / nStep) ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[0], ptCen.x + vtRot.x + dCurrCoeff * dDeltaN * vtN.x) ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[1], ptCen.y + vtRot.y + dCurrCoeff * dDeltaN * vtN.y) ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[2], ptCen.z + vtRot.z + dCurrCoeff * dDeltaN * vtN.z) ;
|
||||
double dPrevVal, dVal ;
|
||||
m_pMachine->GetAxisPos( m_AxesName[0], dPrevVal) ;
|
||||
dVal = ptCen.x + vtRot.x + dCurrCoeff * dDeltaN * vtN.x ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[0], dVal) ;
|
||||
vDeltaVal[0] = dVal - dPrevVal ;
|
||||
m_pMachine->GetAxisPos( m_AxesName[1], dPrevVal) ;
|
||||
dVal = ptCen.y + vtRot.y + dCurrCoeff * dDeltaN * vtN.y ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[1], dVal) ;
|
||||
vDeltaVal[1] = dVal - dPrevVal ;
|
||||
m_pMachine->GetAxisPos( m_AxesName[2], dPrevVal) ;
|
||||
dVal = ptCen.z + vtRot.z + dCurrCoeff * dDeltaN * vtN.z ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[2], dVal) ;
|
||||
vDeltaVal[2] = dVal - dPrevVal ;
|
||||
// assi rotanti
|
||||
for ( int j = 3 ; j < int( m_AxesName.size()) ; ++ j) {
|
||||
double dPrevVal ; m_pMachine->GetAxisPos( m_AxesName[j], dPrevVal) ;
|
||||
double dVal = m_AxesVal[j] * ( 1 - dCurrCoeff) + AxesEnd[j] * dCurrCoeff ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[j], dVal) ;
|
||||
vDeltaVal[j] = dVal - dPrevVal ;
|
||||
}
|
||||
// eventuali assi ausiliari
|
||||
for ( int j = 0 ; j < int( m_AuxAxesName.size()) ; ++ j) {
|
||||
double dVal = m_AuxAxesVal[j] * ( 1 - dCurrCoeff) + m_AuxAxesEnd[j] * dCurrCoeff ;
|
||||
double dVal = 0 ;
|
||||
if ( m_AuxAxesLink[j] == 0) {
|
||||
dVal = m_AuxAxesVal[j] * ( 1 - dCurrCoeff) + m_AuxAxesEnd[j] * dCurrCoeff ;
|
||||
}
|
||||
else {
|
||||
m_pMachine->GetAxisPos( m_AuxAxesName[j], dVal) ;
|
||||
if ( m_AuxAxesLink[j] > 0)
|
||||
dVal += vDeltaVal[m_AuxAxesLink[j] - 1] ;
|
||||
else
|
||||
dVal -= vDeltaVal[-m_AuxAxesLink[j] - 1] ;
|
||||
}
|
||||
m_pMachine->SetAxisPos( m_AuxAxesName[j], dVal) ;
|
||||
}
|
||||
// eseguo eventuale Vmill
|
||||
@@ -1123,8 +1161,13 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
|
||||
double dCurrCoeff = dPrevCoeff + ( m_dCoeff - dPrevCoeff) / nStep * i ;
|
||||
// muovo eventuali assi ausiliari
|
||||
for ( int j = 0 ; j < int( m_AuxAxesName.size()) ; ++ j) {
|
||||
double dVal = m_AuxAxesVal[j] * ( 1 - dCurrCoeff) + m_AuxAxesEnd[j] * dCurrCoeff ;
|
||||
m_pMachine->SetAxisPos( m_AuxAxesName[j], dVal) ;
|
||||
if ( m_AuxAxesLink[j] == 0) {
|
||||
double dVal = m_AuxAxesVal[j] * ( 1 - dCurrCoeff) + m_AuxAxesEnd[j] * dCurrCoeff ;
|
||||
m_pMachine->SetAxisPos( m_AuxAxesName[j], dVal) ;
|
||||
}
|
||||
else {
|
||||
|
||||
}
|
||||
}
|
||||
// eseguo eventuale collision check
|
||||
bCollCheck = bCollCheck && ExecCollisionCheck( nCdInd, nObjInd, nMoveType) ;
|
||||
@@ -1487,6 +1530,7 @@ Simulator::OnToolSelect( const string& sTool, const string& sHead, int nExit, co
|
||||
m_AuxAxesLinear.push_back( bLinear) ;
|
||||
m_AuxAxesVal.emplace_back( dVal) ;
|
||||
m_AuxAxesEnd.emplace_back( dVal) ;
|
||||
m_AuxAxesLink.emplace_back( 0) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1734,28 +1778,55 @@ Simulator::OnMoveStart( const CamData* pCamData, int& nErr)
|
||||
m_AuxAxesVal.reserve( nNumAuxAxes) ;
|
||||
m_AuxAxesEnd.reserve( nNumAuxAxes) ;
|
||||
for ( int i = 1 ; i <= nNumAuxAxes && bOk ; ++ i) {
|
||||
string sName ; string sToken ; bool bInvert ; bool bLinear ; double dVal ; double dEnd ;
|
||||
string sName ; string sToken ; bool bInvert ; bool bLinear ; double dVal ; double dEnd ; string sLink ;
|
||||
string sAuxAxVal = GLOB_VAR + GVAR_AN ; ReplaceString( sAuxAxVal, "N", ToString( i)) ;
|
||||
string sAuxAxName = GLOB_VAR + GVAR_ANN ; ReplaceString( sAuxAxName, "N", ToString( i)) ;
|
||||
string sAuxAxMaster = GLOB_VAR + GVAR_ANM ; ReplaceString( sAuxAxMaster, "N", ToString( i)) ;
|
||||
if ( m_pMachine->LuaGetGlobVar( sAuxAxName, sName) &&
|
||||
m_pMachine->GetAxisToken( sName, sToken) &&
|
||||
m_pMachine->GetAxisInvert( sName, bInvert) &&
|
||||
m_pMachine->GetAxisType( sName, bLinear) &&
|
||||
m_pMachine->GetAxisPos( sName, dVal) &&
|
||||
m_pMachine->LuaGetGlobVar( sAuxAxVal, dEnd)) {
|
||||
// se assi principali disabilitati o non è tra questi, lo aggiungo
|
||||
if ( ! m_bEnabAxes || find( m_AxesName.begin(), m_AxesName.end(), sName) == m_AxesName.end()) {
|
||||
m_AuxAxesName.emplace_back( sName) ;
|
||||
m_AuxAxesToken.emplace_back( sToken) ;
|
||||
m_AuxAxesInvert.push_back( bInvert) ;
|
||||
m_AuxAxesLinear.push_back( bLinear) ;
|
||||
m_AuxAxesVal.emplace_back( dVal) ;
|
||||
m_AuxAxesEnd.emplace_back( dEnd) ;
|
||||
if ( ! m_pMachine->VerifyOutstroke( sName, dEnd)) {
|
||||
nErr = 1 ;
|
||||
bOk = false ;
|
||||
m_pMachine->GetAxisPos( sName, dVal)) {
|
||||
// se da agganciare ad asse principale
|
||||
if ( m_pMachine->LuaGetGlobVar( sAuxAxMaster, sLink)) {
|
||||
bool bNeg = ( sLink.find( '-') != string::npos) ;
|
||||
string sMainAxis = sLink ; ReplaceString( sMainAxis, "-", "") ;
|
||||
int nInd = 0 ;
|
||||
for ( int i = 0 ; nInd == 0 && i < int( m_AxesName.size()) ; ++ i) {
|
||||
if ( m_AxesName[i] == sMainAxis)
|
||||
nInd = i + 1 ;
|
||||
}
|
||||
// se assi principali abilitati e trovato asse principale di riferimento
|
||||
if ( m_bEnabAxes && nInd > 0) {
|
||||
m_AuxAxesName.emplace_back( sName) ;
|
||||
m_AuxAxesToken.emplace_back( sToken) ;
|
||||
m_AuxAxesInvert.push_back( bInvert) ;
|
||||
m_AuxAxesLinear.push_back( bLinear) ;
|
||||
m_AuxAxesVal.emplace_back( 0) ;
|
||||
m_AuxAxesEnd.emplace_back( 0) ;
|
||||
m_AuxAxesLink.emplace_back( ( bNeg ? -nInd : nInd)) ;
|
||||
}
|
||||
}
|
||||
// se altrimenti specificato valore finale del movimento
|
||||
else if ( m_pMachine->LuaGetGlobVar( sAuxAxVal, dEnd)) {
|
||||
// se assi principali disabilitati o non è tra questi, lo aggiungo
|
||||
if ( ! m_bEnabAxes || find( m_AxesName.begin(), m_AxesName.end(), sName) == m_AxesName.end()) {
|
||||
m_AuxAxesName.emplace_back( sName) ;
|
||||
m_AuxAxesToken.emplace_back( sToken) ;
|
||||
m_AuxAxesInvert.push_back( bInvert) ;
|
||||
m_AuxAxesLinear.push_back( bLinear) ;
|
||||
m_AuxAxesVal.emplace_back( dVal) ;
|
||||
m_AuxAxesEnd.emplace_back( dEnd) ;
|
||||
m_AuxAxesLink.emplace_back( 0) ;
|
||||
if ( ! m_pMachine->VerifyOutstroke( sName, dEnd)) {
|
||||
nErr = 1 ;
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
}
|
||||
// altrimenti errore
|
||||
else
|
||||
bOk = false ;
|
||||
}
|
||||
else
|
||||
bOk = false ;
|
||||
|
||||
Reference in New Issue
Block a user