EgtMachKernel 2.3f1 :
- migliorata velocità di simulazione con verifica di collisione in rapidi lunghi.
This commit is contained in:
+6
-3
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user