diff --git a/MachMgr.h b/MachMgr.h index 4744c48..8acdf55 100644 --- a/MachMgr.h +++ b/MachMgr.h @@ -191,6 +191,7 @@ class MachMgr : public IMachMgr int& nStat, double& dX, double& dY, double& dZ) ; virtual bool GetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA, double dAngB, bool bBottom, Point3d& ptTip) ; + virtual bool GetCalcToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) ; virtual bool GetNearestAngleInStroke( int nId, double dAngRef, double& dAng) ; virtual bool VerifyOutOfStroke( double dX, double dY, double dZ, double dAngA, double dAngB, int& nStat) ; // Machine Move diff --git a/MachMgrMachines.cpp b/MachMgrMachines.cpp index db8d0df..88fc26e 100644 --- a/MachMgrMachines.cpp +++ b/MachMgrMachines.cpp @@ -318,7 +318,16 @@ MachMgr::GetCalcTipFromPositions( double dX, double dY, double dZ, double dAngA, m_vMachines[m_nCurrMch].pMachine == nullptr) return false ; return m_vMachines[m_nCurrMch].pMachine->GetTipFromPositions( dX, dY, dZ, dAngA, dAngB, bBottom, ptTip) ; +} +//---------------------------------------------------------------------------- +bool +MachMgr::GetCalcToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) +{ + if ( m_nCurrMch < 0 || m_nCurrMch >= int( m_vMachines.size()) || + m_vMachines[m_nCurrMch].pMachine == nullptr) + return false ; + return m_vMachines[m_nCurrMch].pMachine->GetToolDirFromAngles( dAngA, dAngB, vtDir) ; } //---------------------------------------------------------------------------- diff --git a/Machine.h b/Machine.h index ae23d16..0060f62 100644 --- a/Machine.h +++ b/Machine.h @@ -66,6 +66,7 @@ class Machine int& nStat, double& dX, double& dY, double& dZ) ; bool GetTipFromPositions( double dX, double dY, double dZ, double dAngA, double dAngB, bool bBottom, Point3d& ptTip) ; + bool GetToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) ; bool GetNearestAngleInStroke( int nId, double dAngRef, double& dAng) ; bool VerifyOutOfStroke( double dX, double dY, double dZ, double dAngA, double dAngB, int& nStat) ; bool LuaCallFunction( const std::string& sFun) ; diff --git a/MachineCalc.cpp b/MachineCalc.cpp index 6a45a11..1a5cbb3 100644 --- a/MachineCalc.cpp +++ b/MachineCalc.cpp @@ -545,6 +545,13 @@ Machine::GetTipFromPositions( double dX, double dY, double dZ, double dAngA, dou return true ; } +//---------------------------------------------------------------------------- +bool +Machine::GetToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) +{ + return GetDirection( m_vtCalcDir, dAngA, dAngB, vtDir) ; +} + //---------------------------------------------------------------------------- bool Machine::VerifyScc( const Vector3d& vtDirI, const Vector3d& vtDirA, int nSolCh) diff --git a/Machining.cpp b/Machining.cpp index 88e56bc..09ea5a0 100644 --- a/Machining.cpp +++ b/Machining.cpp @@ -810,18 +810,23 @@ Machining::AddRise( DBLVECTOR& vAxVal, double dDelta) return false ; // recupero i valori degli assi vAxVal = pCam->GetAxisVal() ; + // flag di movimento in rapido + int nFlag = 0 ; // se delta positivo lo uso come incremeto di Z - if ( dDelta > 0) + if ( dDelta > 0) { vAxVal[2] += dDelta ; + nFlag = 0 ; // movimento standard + } // altrimenti uso la Z home else { DBLVECTOR vAxHome ; m_pMchMgr->GetAllCalcAxesHomePos( vAxHome) ; vAxVal[2] = vAxHome[2] ; + nFlag = 3 ; // movimento a Zmax } pCam->SetAxes( CamData::AS_OK, vAxVal) ; pCam->SetFeed( 0) ; - pCam->SetFlag( 3) ; + pCam->SetFlag( nFlag) ; // associo questo oggetto a quello geometrico m_pGeomDB->SetUserObj( nId, Release( pCam)) ;