EgtMachKernel :
- velocizzata GetEMkVer che rallentava assegnazione della variabile lua con versione della dll (specie in verifica aree protette) - migliorata verifica extracorse in calcolo assi centri di lavoro.
This commit is contained in:
+18
-12
@@ -1952,14 +1952,14 @@ Operation::CalculateClPathMcentAxesValues( int nClPathId, double dAngDeltaMinFor
|
||||
EraseAddedPoints( nClPathId) ;
|
||||
// calcolo
|
||||
int nOutStrC = 0 ;
|
||||
if ( ! MyCalculateClPathMcentAxesValues( nClPathId, dAngDeltaMinForHome, vAxRotHome, vAxRotPrec, nOutStrC)) {
|
||||
if ( ! MyCalculateClPathMcentAxesValues( nClPathId, dAngDeltaMinForHome, vAxRotHome, vAxRotPrec, true, nOutStrC)) {
|
||||
// se attivata scelta angolo iniziale vicino ad home ed extra corsa C, provo a rifarlo disattivando
|
||||
if ( dAngDeltaMinForHome < ANG_FULL && nOutStrC != 0) {
|
||||
// cancello eventuali punti aggiunti
|
||||
EraseAddedPoints( nClPathId) ;
|
||||
// ricalcolo
|
||||
m_pMchMgr->GetCurrMachine()->ResetOutstrokeInfo() ;
|
||||
if ( MyCalculateClPathMcentAxesValues( nClPathId, INFINITO, vAxRotHome, vAxRotPrec, nOutStrC))
|
||||
if ( MyCalculateClPathMcentAxesValues( nClPathId, INFINITO, vAxRotHome, vAxRotPrec, false, nOutStrC))
|
||||
return true ;
|
||||
}
|
||||
// se extracorsa dell'asse C, provo a precaricarlo al contrario
|
||||
@@ -1970,7 +1970,7 @@ Operation::CalculateClPathMcentAxesValues( int nClPathId, double dAngDeltaMinFor
|
||||
vAxRotPrec = vAxRotPrecOri ;
|
||||
vAxRotPrec[0] = vAxRotPrecOri[0] + ( nOutStrC > 0 ? - ANG_FULL : ANG_FULL) ;
|
||||
m_pMchMgr->GetCurrMachine()->ResetOutstrokeInfo() ;
|
||||
if ( ! MyCalculateClPathMcentAxesValues( nClPathId, INFINITO, vAxRotHome, vAxRotPrec, nOutStrC))
|
||||
if ( ! MyCalculateClPathMcentAxesValues( nClPathId, INFINITO, vAxRotHome, vAxRotPrec, false, nOutStrC))
|
||||
return false ;
|
||||
}
|
||||
else
|
||||
@@ -2000,7 +2000,7 @@ Operation::EraseAddedPoints( int nClPathId)
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::MyCalculateClPathMcentAxesValues( int nClPathId, double dAngDeltaMinForHome, const DBLVECTOR& vAxRotHome,
|
||||
DBLVECTOR& vAxRotPrec, int& nOutStrC)
|
||||
DBLVECTOR& vAxRotPrec, bool bFirstTry, int& nOutStrC)
|
||||
{
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
@@ -2078,6 +2078,9 @@ Operation::MyCalculateClPathMcentAxesValues( int nClPathId, double dAngDeltaMinF
|
||||
}
|
||||
string sInfo = "Outstroke : " + m_pMchMgr->GetOutstrokeInfo() ;
|
||||
LOG_INFO( GetEMkLogger(), sInfo.c_str())
|
||||
// se primo calcolo ed extra corsa asse C esco, altrimenti continuo
|
||||
if ( bFirstTry && nOutStrC != 0)
|
||||
return bOk ;
|
||||
// calcolo e salvo il valore dell'asse ausiliario di testa riportato sul grezzo
|
||||
Vector3d vtBackAux ;
|
||||
pMachine->GetBackAuxDirFromAngles( vAxRot, vtBackAux) ;
|
||||
@@ -2124,20 +2127,23 @@ Operation::MyCalculateClPathMcentAxesValues( int nClPathId, double dAngDeltaMinF
|
||||
bOk = false ;
|
||||
}
|
||||
// Se esistono aree protette, devo comunque verificare i punti intermedi
|
||||
if ( ! bMidAdded && m_pMchMgr->ExistProtectedAreas()) {
|
||||
if ( ! bMidAdded && pMachine->ExistProtectedAreas()) {
|
||||
// verifico i limiti di corsa dei punti lungo la linea
|
||||
const int NUM_VERIF_STEP = 16 ;
|
||||
Point3d ptPrec( vAxPrec[0], vAxPrec[1], vAxPrec[2]) ;
|
||||
Point3d ptP( dX, dY, dZ) ;
|
||||
for ( int i = 1 ; i < NUM_VERIF_STEP ; ++ i) {
|
||||
double dCoeff = double( i) / NUM_VERIF_STEP ;
|
||||
double dLenMove = ApproxDist( ptPrec, ptP) ;
|
||||
constexpr double PA_VERIF_LEN = 10 ;
|
||||
constexpr int MAX_VERIF_STEP = 16 ;
|
||||
const int nNumStep = max( min( int( dLenMove / PA_VERIF_LEN), MAX_VERIF_STEP), 1) ;
|
||||
for ( int i = 1 ; i < nNumStep ; ++ i) {
|
||||
double dCoeff = double( i) / nNumStep ;
|
||||
Point3d ptCurr = Media( ptPrec, ptP, dCoeff) ;
|
||||
DBLVECTOR vAng( vAxRot.size()) ;
|
||||
for ( size_t i = 0 ; i < vAxRot.size() ; ++ i)
|
||||
for ( int i = 0 ; i < int( vAxRot.size()) ; ++ i)
|
||||
vAng[i] = vAxRotPrec[i] * ( 1 - dCoeff) + vAxRot[i] * dCoeff ;
|
||||
int nStat ;
|
||||
bool bOsOk = m_pMchMgr->VerifyOutstroke( ptCurr.x, ptCurr.y, ptCurr.z, vAng, false, nStat) ;
|
||||
if ( ! bOsOk || nStat != 0) {
|
||||
int nStat = 0 ;
|
||||
bool bPaOk = pMachine->VerifyProtectedAreas( ptCurr.x, ptCurr.y, ptCurr.z, vAng, nStat) ;
|
||||
if ( ! bPaOk || nStat != 0) {
|
||||
bOk = false ;
|
||||
pCamData->SetAxes( CamData::AS_OUTSTROKE, vAxVal) ;
|
||||
string sInfo = "Outstroke : " + m_pMchMgr->GetOutstrokeInfo() ;
|
||||
|
||||
Reference in New Issue
Block a user