diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 3abe86c..1a61810 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/MachineLuaCL.cpp b/MachineLuaCL.cpp index 0173b72..a48c329 100644 --- a/MachineLuaCL.cpp +++ b/MachineLuaCL.cpp @@ -89,7 +89,7 @@ Machine::LuaEmtAddRapidStart( lua_State* L) int Machine::LuaEmtAddRapidMove( lua_State* L) { - // 7 o 8 parametri : nPathId, ptIni, ptFin, vtTool, vtCorr, vtAux, nFlag [, bToolShow] + // 7, 8 o 9 parametri : nPathId, ptIni, ptFin, vtTool, vtCorr, vtAux, nFlag [, nFlag2] [, bToolShow] int nPathId ; LuaCheckParam( L, 1, nPathId) Point3d ptIni ; @@ -104,8 +104,12 @@ Machine::LuaEmtAddRapidMove( lua_State* L) LuaCheckParam( L, 6, vtAux) int nFlag ; LuaCheckParam( L, 7, nFlag) + int nFlag2 = 0 ; bool bToolShow = false ; - LuaGetParam( L, 8, bToolShow) ; + if ( LuaGetParam( L, 8, nFlag2)) + LuaGetParam( L, 9, bToolShow) ; + else + LuaGetParam( L, 8, bToolShow) ; LuaClearStack( L) ; // verifico ci sia una macchina attiva valida if ( m_pMchLua == nullptr || @@ -131,6 +135,7 @@ Machine::LuaEmtAddRapidMove( lua_State* L) pCam->SetEndPoint( ptFin) ; pCam->SetFeed( 0) ; pCam->SetFlag( nFlag) ; + pCam->SetFlag2( nFlag2) ; pCam->SetToolShow( bToolShow) ; // associo questo oggetto a quello geometrico m_pMchLua->m_pGeomDB->SetUserObj( nId, Release( pCam)) ; @@ -147,7 +152,7 @@ Machine::LuaEmtAddRapidMove( lua_State* L) int Machine::LuaEmtAddLinearMove( lua_State* L) { - // 8 o 9 parametri : nPathId, ptIni, ptFin, vtTool, vtCorr, vtAux, dFeed, nFlag [, bToolShow] + // 8, 9 o 10 parametri : nPathId, ptIni, ptFin, vtTool, vtCorr, vtAux, dFeed, nFlag [, nFlag2] [, bToolShow] int nPathId ; LuaCheckParam( L, 1, nPathId) Point3d ptIni ; @@ -164,8 +169,12 @@ Machine::LuaEmtAddLinearMove( lua_State* L) LuaCheckParam( L, 7, dFeed) int nFlag ; LuaCheckParam( L, 8, nFlag) + int nFlag2 = 0 ; bool bToolShow = false ; - LuaGetParam( L, 9, bToolShow) ; + if ( LuaGetParam( L, 9, nFlag2)) + LuaGetParam( L, 10, bToolShow) ; + else + LuaGetParam( L, 9, bToolShow) ; LuaClearStack( L) ; // verifico ci sia una macchina attiva valida if ( m_pMchLua == nullptr || @@ -191,6 +200,7 @@ Machine::LuaEmtAddLinearMove( lua_State* L) pCam->SetEndPoint( ptFin) ; pCam->SetFeed( dFeed) ; pCam->SetFlag( nFlag) ; + pCam->SetFlag2( nFlag2) ; pCam->SetToolShow( bToolShow) ; // associo questo oggetto a quello geometrico m_pMchLua->m_pGeomDB->SetUserObj( nId, Release( pCam)) ; diff --git a/Operation.cpp b/Operation.cpp index 8ac7150..a1dc95a 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -3399,9 +3399,20 @@ Operation::AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operatio // se Z corrente maggiore della precedente o viceversa se HomeZ sotto else if ( ( ! bZHomeDown && vAxCurr[2] > vAxPrev[2]) || ( bZHomeDown && vAxCurr[2] < vAxPrev[2]) ) { - // se vengo da precedente lavorazione non devo fare alcunché - if ( nPrevClPathId == GDB_ID_NULL) - ; + // se vengo da ultimo percorso di precedente lavorazione + if ( nPrevClPathId == GDB_ID_NULL) { + // deve esistere lavorazione precedente + if ( pPrevOp == nullptr) + return false ; + // se non presente risalita finale + if ( m_pGeomDB->GetFirstNameInGroup( pPrevOp->GetLastFullToolpath(), MCH_CL_RISE) == GDB_ID_NULL) { + // la aggiungo + DBLVECTOR vAxNew ; + double dDelta = ( ! bZHomeDown ? max( vAxCurr[2] - vAxPrev[2], 0.) : min( vAxCurr[2] - vAxPrev[2], 0.)) ; + if ( ! pPrevOp->AddRise( vAxNew, dDelta, GDB_ID_NULL)) + return false ; + } + } // altrimenti vengo da precedente percorso della stessa lavorazione else { // aggiungo risalita alla fine del precedente percorso @@ -3848,7 +3859,7 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta, int nClPathId, int nToMinM return false ; pCdNew->SetAxes( CamData::AS_OK, vAxNew) ; pCdNew->SetFlag( 0) ; - pCdNew->SetFlag2( 0) ; + pCdNew->SetFlag2( -1) ; } } @@ -4099,7 +4110,7 @@ Operation::AddRobotClimb( int nEntId, double dDeltaZ) return false ; pCdNew->SetAxes( CamData::AS_OK, vAxNew) ; pCdNew->SetFlag( 0) ; - pCdNew->SetFlag2( 0) ; + pCdNew->SetFlag2( -1) ; } return true ; }