EgtMachKernel :
- prime modifiche per la gestione della direzione singolare nei centri di lavoro (con angolo di apertura del cono di coincidenza).
This commit is contained in:
+28
-4
@@ -371,7 +371,9 @@ Machine::ResetCurrTool( void)
|
||||
m_nCalcHeadId = GDB_ID_NULL ;
|
||||
m_nCalcExitId = GDB_ID_NULL ;
|
||||
m_nCalcToolId = GDB_ID_NULL ;
|
||||
m_dCalcRot1W = 1 ;
|
||||
m_dCalcRot1W = ROT1_WEIGHT_DFLT ;
|
||||
m_dSingConeAng = SING_CONE_ANG_DFLT ;
|
||||
m_bCalcMaxDeltaR2On1 = true ;
|
||||
m_nCalcSolCh = MCH_SCC_NONE ;
|
||||
m_dCalcTLen = 0 ;
|
||||
m_dCalcTRad = 0 ;
|
||||
@@ -1224,8 +1226,30 @@ Machine::GetMyAngles( const Vector3d& vtDirT, const Vector3d& vtDirA,
|
||||
vtDirI1.Rotate( vtAx1, dAngA1) ;
|
||||
}
|
||||
|
||||
// verifica per direzione singolare (direzione fresa molto vicina a direzione primo asse rotante)
|
||||
if ( nNumRotAx == 2 && nStat == 2 && abs( dAngB2 - dAngB1) < 2 * m_dSingConeAng) {
|
||||
nStat = 1 ;
|
||||
bDet1 = false ;
|
||||
dAngB1 = ( dAngB1 + dAngB2) / 2 ;
|
||||
// ripristino direzioni fresa e ausiliaria su testa
|
||||
vtDirH1.Rotate( vtAx1, -dAngA1) ;
|
||||
vtDirI1.Rotate( vtAx1, -dAngA1) ;
|
||||
// provo a determinare primo angolo con la direzione ausiliaria
|
||||
bool bDetX ;
|
||||
Vector3d vtSccDir ;
|
||||
bool bSccDir = GetSccDir( m_nCalcSolCh, vtDirAn, vtSccDir) ;
|
||||
vtDirI1.GetRotation( vtSccDir, vtAx1, dAngA1, bDetX) ;
|
||||
if ( bDetX)
|
||||
bDet1 = bSccDir ;
|
||||
else
|
||||
dAngA1 = 0 ;
|
||||
// aggiornamento direzioni fresa e ausiliaria su testa
|
||||
vtDirH1.Rotate( vtAx1, dAngA1) ;
|
||||
vtDirI1.Rotate( vtAx1, dAngA1) ;
|
||||
}
|
||||
|
||||
// verifiche per criterio scelta soluzione
|
||||
if ( nStat >= 2) {
|
||||
if ( nStat == 2) {
|
||||
if ( ! VerifyScc( vtDirI2, vtDirAn, m_nCalcSolCh, m_bSolChExact))
|
||||
-- nStat ;
|
||||
}
|
||||
@@ -1241,7 +1265,7 @@ Machine::GetMyAngles( const Vector3d& vtDirT, const Vector3d& vtDirA,
|
||||
}
|
||||
|
||||
// verifiche dei limiti di corsa
|
||||
if ( nStat >= 2) {
|
||||
if ( nStat == 2) {
|
||||
// se non riesco ad aggiustare, elimino
|
||||
if ( ! AdjustAngleInStroke( RotAx1.stroke, dAngA2) ||
|
||||
( nNumRotAx == 2 && ! AdjustAngleInStroke( RotAx2.stroke, dAngB2)))
|
||||
@@ -1261,7 +1285,7 @@ Machine::GetMyAngles( const Vector3d& vtDirT, const Vector3d& vtDirA,
|
||||
}
|
||||
|
||||
// modifico stato per angolo indeterminato
|
||||
if ( ( nStat >= 2 && ! bDet2) || ( nStat >= 1 && ! bDet1))
|
||||
if ( ( nStat == 2 && ! bDet2) || ( nStat >= 1 && ! bDet1))
|
||||
nStat = - nStat ;
|
||||
|
||||
return true ;
|
||||
|
||||
Reference in New Issue
Block a user