EgtMachKernel 2.3f1 :

- migliorata velocità di simulazione con verifica di collisione in rapidi lunghi.
This commit is contained in:
DarioS
2021-07-05 08:35:12 +02:00
parent ce82f43e79
commit 68d52c82a7
3 changed files with 8 additions and 3 deletions
+6 -3
View File
@@ -948,6 +948,7 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
int nCdInd, nObjInd ;
bool bCollCheck = true ;
// Eseguo movimento assi principali ed eventuali ausiliari
if ( m_bEnabAxes) {
// Calcolo distanza di movimento
double dSqDist = 0 ;
@@ -981,8 +982,8 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
// se attivo CollisionCheck approssimo movimento con più step
int nStep = 1 ;
if ( NeedCollisionCheck()) {
const double LEN_STEP = 20. ;
nStep = max( int( dDist / LEN_STEP), 1) ;
const double LEN_COLL_STEP = 10. ;
nStep = max( int( dMove / LEN_COLL_STEP), 1) ;
}
for ( int i = 1 ; i <= nStep ; ++ i) {
double dCurrCoeff = dPrevCoeff + ( m_dCoeff - dPrevCoeff) / nStep * i ;
@@ -1067,6 +1068,8 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
}
}
}
// altrimenti eseguo movimento soli eventuali assi ausiliari
else {
// Calcolo distanza di movimento
double dSqDist = 0 ;
@@ -1078,7 +1081,7 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
double dPrevCoeff = m_dCoeff ;
double dDist = sqrt( dSqDist) ;
if ( dDist > EPS_SMALL) {
int nStep = int( max( dDist / ( ( nMoveType == 0 ? 4 : 1) * m_dStep), 1.)) ;
int nStep = int( max( dDist / ( ( nMoveType == 0 ? 2 : 1) * m_dStep), 1.)) ;
m_dCoeff += 1. / nStep ;
if ( m_dCoeff > 1)
m_dCoeff = 1 ;