diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 4428a86..27d6113 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Operation.cpp b/Operation.cpp index 09533e1..fee9b8c 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -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) ;