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:
Dario Sassi
2025-09-30 08:25:27 +02:00
parent 34a26f7d3e
commit 75fa4a3f90
5 changed files with 61 additions and 53 deletions
+18 -12
View File
@@ -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() ;