EgtMachKernel 1.8c5 :
- aggiunta GetCalcAuxDirFromAngles - migliorata gestione transizione tra una lavorazione e la successiva.
This commit is contained in:
Binary file not shown.
@@ -278,6 +278,7 @@ class MachMgr : public IMachMgr
|
||||
bool GetCalcTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
|
||||
bool bOverall, bool bBottom, Point3d& ptTip) const ;
|
||||
bool GetCalcToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const override ;
|
||||
bool GetCalcAuxDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const override ;
|
||||
bool GetNearestAngleInStroke( int nInd, double dAngRef, double& dAng) const override ;
|
||||
bool LimitAngleToStroke( int nInd, double& dAng) const override ;
|
||||
bool VerifyOutstroke( double dX, double dY, double dZ, double dAngA, double dAngB, int& nStat) override ;
|
||||
|
||||
@@ -537,6 +537,14 @@ MachMgr::GetCalcToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir)
|
||||
return ( ( pMch != nullptr) ? pMch->GetToolDirFromAngles( dAngA, dAngB, vtDir) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetCalcAuxDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const
|
||||
{
|
||||
Machine* pMch = GetCurrMachine() ;
|
||||
return ( ( pMch != nullptr) ? pMch->GetAuxDirFromAngles( dAngA, dAngB, vtDir) : false) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
MachMgr::GetNearestAngleInStroke( int nInd, double dAngRef, double& dAng) const
|
||||
|
||||
@@ -109,6 +109,7 @@ class Machine
|
||||
bool GetTipFromPositions( double dX, double dY, double dZ, const DBLVECTOR& vAng,
|
||||
bool bBottom, bool bOverall, Point3d& ptTip) const ;
|
||||
bool GetToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const ;
|
||||
bool GetAuxDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const ;
|
||||
bool GetNearestAngleInStroke( int nInd, double dAngRef, double& dAng) const ;
|
||||
bool LimitAngleToStroke( int nInd, double& dAng) const ;
|
||||
bool VerifyAngleOutstroke( int nInd, double dAng) const ;
|
||||
|
||||
@@ -1061,6 +1061,14 @@ Machine::GetToolDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) cons
|
||||
return GetDirection( m_vtCalcDir, vAng, vtDir) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetAuxDirFromAngles( double dAngA, double dAngB, Vector3d& vtDir) const
|
||||
{
|
||||
DBLVECTOR vAng( 2) ; vAng[0] = dAngA ; vAng[1] = dAngB ;
|
||||
return GetDirection( m_vtCalcADir, vAng, vtDir) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Machine::GetSccDir( int nSolCh, const Vector3d& vtDirA, Vector3d& vtDirScc) const
|
||||
|
||||
+29
-23
@@ -1088,7 +1088,7 @@ Operation::AdjustStartEndMovements( void)
|
||||
|
||||
// determino posizione precedente assi
|
||||
DBLVECTOR vAxVal ;
|
||||
bool bHomeZ = false ;
|
||||
bool bMaxZ = false ;
|
||||
// se primo utensile o richiesto, uso la posizione home
|
||||
if ( sPrevTool.empty() || NeedPrevHome()) {
|
||||
// imposto l'utensile per i calcoli macchina
|
||||
@@ -1097,8 +1097,8 @@ Operation::AdjustStartEndMovements( void)
|
||||
// recupero posizione home
|
||||
if ( ! m_pMchMgr->GetAllCalcAxesHomePos( vAxVal))
|
||||
return false ;
|
||||
// si parte da HomeZ
|
||||
bHomeZ = true ;
|
||||
// si parte da Z massima
|
||||
bMaxZ = true ;
|
||||
}
|
||||
// se utensile non cambiato o su diversa uscita della stessa testa, uso posizione finale della lavorazione precedente
|
||||
else if ( ! ToolChangeNeeded( *pPrevOp, *this)) {
|
||||
@@ -1111,19 +1111,22 @@ Operation::AdjustStartEndMovements( void)
|
||||
DBLVECTOR vAxIni ;
|
||||
if ( ! pPrevOp->GetFinalAxesValues( vAxVal) || ! GetInitialAxesValues( vAxIni))
|
||||
return false ;
|
||||
// aggiungo eventuale delta Z
|
||||
double dDelta = 0 ;
|
||||
// determino delta Z rispetto a posizione finale
|
||||
if ( vAxVal.size() >= 4 && vAxIni.size() >= 4) {
|
||||
// verifico se movimento assi rotanti richiede una risalita parziale
|
||||
double dDelta = 0 ;
|
||||
if ( ! CalcDeltaZForHeadRotation( vAxVal, vAxIni, dDelta))
|
||||
return false ;
|
||||
// se necessaria, aggiungo risalita parziale
|
||||
if ( dDelta > EPS_SMALL) {
|
||||
if ( ! pPrevOp->AddRise( vAxVal, dDelta))
|
||||
return false ;
|
||||
// aggiorno quota in Z della posizione iniziale ( anche se verrà aggiornata solo in seguito)
|
||||
vAxIni[2] = vAxVal[2] ;
|
||||
}
|
||||
}
|
||||
// confronto con eventuale risalita di inizio lavorazione
|
||||
dDelta = max( dDelta, ( vAxIni[2] - vAxVal[2])) ;
|
||||
// se necessaria, aggiungo risalita parziale
|
||||
if ( dDelta > 100 * EPS_SMALL) {
|
||||
if ( ! pPrevOp->AddRise( vAxVal, dDelta))
|
||||
return false ;
|
||||
// aggiorno quota in Z della posizione iniziale ( anche se verrà aggiornata solo in seguito)
|
||||
vAxIni[2] = vAxVal[2] ;
|
||||
}
|
||||
// verifico se la testa interferisce con i pezzi o i bloccaggi sulla tavola
|
||||
if ( ! TestCollisionAvoid( vAxVal, vAxIni)) {
|
||||
@@ -1132,8 +1135,8 @@ Operation::AdjustStartEndMovements( void)
|
||||
// aggiungo risalita a Zmax
|
||||
if ( ! pPrevOp->AddRise( vAxVal))
|
||||
return false ;
|
||||
// si parte da HomeZ
|
||||
bHomeZ = true ;
|
||||
// si parte da Z massima
|
||||
bMaxZ = true ;
|
||||
}
|
||||
}
|
||||
// altrimenti aggiungo uscita per cambio utensile alla lavorazione precedente e parto da questa
|
||||
@@ -1148,8 +1151,8 @@ Operation::AdjustStartEndMovements( void)
|
||||
// imposto l'utensile per i calcoli macchina
|
||||
if ( ! m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()))
|
||||
return false ;
|
||||
// si parte da HomeZ
|
||||
bHomeZ = true ;
|
||||
// si parte da Z massima
|
||||
bMaxZ = true ;
|
||||
}
|
||||
|
||||
// aggiusto l'inizio di ogni percorso di lavoro
|
||||
@@ -1157,9 +1160,9 @@ Operation::AdjustStartEndMovements( void)
|
||||
int nClPathId = m_pGeomDB->GetFirstGroupInGroup( nClId) ;
|
||||
while ( bOk && nClPathId != GDB_ID_NULL) {
|
||||
// sistemo inizio
|
||||
if ( ! AdjustOneStartMovement( nClPathId, vAxVal, bHomeZ))
|
||||
if ( ! AdjustOneStartMovement( nClPathId, vAxVal, bMaxZ))
|
||||
bOk = false ;
|
||||
bHomeZ = false ;
|
||||
bMaxZ = false ;
|
||||
// recupero nuovi finali
|
||||
if ( ! GetClPathFinalAxesValues( nClPathId, vAxVal))
|
||||
bOk = false ;
|
||||
@@ -1170,15 +1173,18 @@ Operation::AdjustStartEndMovements( void)
|
||||
// aggiungo risalita finale
|
||||
bOk = bOk && AddRise( vAxVal) ;
|
||||
|
||||
// vado in home
|
||||
bOk = bOk && AddHome() ;
|
||||
// se ultima operazione o la successiva lo richiede, vado in home
|
||||
int nNextOpId = m_pMchMgr->GetNextActiveOperation( m_nOwnerId) ;
|
||||
Operation* pNextOp = GetOperation( m_pGeomDB->GetUserObj( nNextOpId)) ;
|
||||
if ( pNextOp == nullptr || pNextOp->NeedPrevHome())
|
||||
bOk = bOk && AddHome() ;
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool bHomeZ)
|
||||
Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool bMaxZ)
|
||||
{
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
@@ -1191,8 +1197,8 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
|
||||
// recupero i valori degli assi
|
||||
DBLVECTOR vAxCurr ;
|
||||
vAxCurr = pCamData->GetAxesVal() ;
|
||||
// se provengo da HomeZ (ovvero Z massima)
|
||||
if ( bHomeZ) {
|
||||
// se provengo da Z massima
|
||||
if ( bMaxZ) {
|
||||
// copio l'entità
|
||||
if ( m_pGeomDB->Copy( nEntId, GDB_ID_NULL, nEntId, GDB_AFTER) == GDB_ID_NULL)
|
||||
return false ;
|
||||
@@ -1283,7 +1289,7 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
|
||||
// altrimenti
|
||||
else {
|
||||
// se Z pressochè uguali non devo fare alcunché
|
||||
if ( fabs( vAxCurr[2] - vAxPrev[2]) < 10 * EPS_SMALL)
|
||||
if ( fabs( vAxCurr[2] - vAxPrev[2]) < 100 * EPS_SMALL)
|
||||
return true ;
|
||||
// se Z corrente maggiore della precedente
|
||||
else if ( vAxCurr[2] > vAxPrev[2]) {
|
||||
|
||||
+1
-1
@@ -84,7 +84,7 @@ class Operation : public IUserObj
|
||||
bool CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes, double dRot1W,
|
||||
DBLVECTOR& vAxRotPrec, int& nOutStrC) ;
|
||||
bool AdjustStartEndMovements( void) ;
|
||||
bool AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool bHomeZ) ;
|
||||
bool AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool bMaxZ) ;
|
||||
bool ToolChangeNeeded( const Operation& Op1, const Operation& Op2) ;
|
||||
bool AddRise( DBLVECTOR& vAxVal, double dDelta = - 1) ;
|
||||
bool RemoveRise( void) ;
|
||||
|
||||
Reference in New Issue
Block a user