EgtMachKernel 1.8f7 :

- migliorie alle risalite in Z per evitare collisioni.
This commit is contained in:
Dario Sassi
2017-07-04 07:08:30 +00:00
parent 41a5570466
commit f82307ac0d
2 changed files with 18 additions and 13 deletions
+18 -13
View File
@@ -1122,10 +1122,11 @@ Operation::AdjustStartEndMovements( void)
return false ;
bool bPartRise = false ;
double dSafeZ = dHomeZ ;
double dUnsafeZ = max( vAxVal[2], vAxIni[2]) ;
DBLVECTOR vAxVal2 = vAxVal ;
DBLVECTOR vAxIni2 = vAxIni ;
for ( int i = 1 ; i <= 3 ; ++ i) {
double dTestSafeZ = ( max( vAxVal[2], vAxIni[2]) + dSafeZ) / 2 ;
for ( int i = 1 ; i <= 4 ; ++ i) {
double dTestSafeZ = ( dUnsafeZ + dSafeZ) / 2 ;
vAxVal2[2] = dTestSafeZ ;
vAxIni2[2] = dTestSafeZ ;
if ( TestCollisionAvoid( vAxVal2, vAxIni2)) {
@@ -1133,9 +1134,7 @@ Operation::AdjustStartEndMovements( void)
dSafeZ = dTestSafeZ ;
}
else {
vAxVal2[2] = dSafeZ ;
vAxIni2[2] = dSafeZ ;
break ;
dUnsafeZ = dTestSafeZ ;
}
}
if ( ! bPartRise) {
@@ -1227,8 +1226,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
if ( pCamData == nullptr)
return false ;
// recupero i valori degli assi
DBLVECTOR vAxCurr ;
vAxCurr = pCamData->GetAxesVal() ;
DBLVECTOR vAxCurr = pCamData->GetAxesVal() ;
// se provengo da Z massima
if ( bMaxZ) {
// copio l'entità
@@ -1267,10 +1265,17 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
if ( ! m_pMchMgr->GetCurrAxisHomePos( 2, dHomeZ))
return false ;
// riprovo con una Z intermedia
double dSafeZ = ( dTopZ + dHomeZ) / 2 ;
vAxPrevTmp[2] = dSafeZ ;
vAxCurrTmp[2] = dSafeZ ;
bool bSafeOk = TestCollisionAvoid( vAxPrevTmp, vAxCurrTmp) ;
double dSafeZ = dHomeZ ;
double dUnsafeZ = dTopZ ;
for ( int i = 1 ; i <= 4 ; ++ i) {
double dTestSafeZ = ( dUnsafeZ + dSafeZ) / 2 ;
vAxPrevTmp[2] = dTestSafeZ ;
vAxCurrTmp[2] = dTestSafeZ ;
if ( TestCollisionAvoid( vAxPrevTmp, vAxCurrTmp))
dSafeZ = dTestSafeZ ;
else
dUnsafeZ = dTestSafeZ ;
}
// risalita sopra fine percorso precedente
// copio l'entità
int nNew1Id = m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_BEFORE) ;
@@ -1280,7 +1285,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
// modifico questa entità
m_pGeomDB->SetName( nNew1Id, MCH_CL_CLIMB) ;
DBLVECTOR vAxNew1 = vAxPrev ;
vAxNew1[2] = ( bSafeOk ? dSafeZ : dHomeZ) ;
vAxNew1[2] = dSafeZ ;
int nMask = CamData::MSK_L3 ;
// eventuali aggiustamenti speciali dipendenti dalla macchina
Vector3d vtTool = pNew1CamData->GetToolDir() ;
@@ -1317,7 +1322,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
// la modifico
m_pGeomDB->SetName( nNew2Id, MCH_CL_CLIMB) ;
DBLVECTOR vAxNew2 = vAxCurr ;
vAxNew2[2] = ( bSafeOk ? dSafeZ : dHomeZ) ;
vAxNew2[2] = dSafeZ ;
pNew2CamData->SetAxes( CamData::AS_OK, vAxNew2) ;
pNew2CamData->ChangeAxesMask( CamData::MSK_L1 | CamData::MSK_L2 | CamData::MSK_R1 | CamData::MSK_R2 | CamData::MSK_R3) ;
pNew2CamData->SetFlag( 2) ;