EgtMachKernel :

- in calcolo angoli macchina aggiunta segnalazione di direzione utensile irraggiungibile
- in disposizione aggiunti controlli di sottopezzo e grezzo in tavola
- in simulazione la Move ora restituisce uno stato
- migliorato calcolo elevazione per lavorazioni con lama
- la tavola macchina conserva l'area utile.
This commit is contained in:
Dario Sassi
2015-11-23 09:06:44 +00:00
parent 8dd67afcb7
commit 2f016585bb
15 changed files with 134 additions and 49 deletions
+43 -1
View File
@@ -245,11 +245,12 @@ Disposition::SetTable( const string& sTable)
// imposta questa tavola come corrente
if ( ! pMch->SetCurrTable( sTable))
return false ;
// recupero il primo riferimento della tavola
// recupero il primo riferimento e l'area utile della tavola
Table* pTab = pMch->GetTable( sTable) ;
if ( pTab == nullptr)
return false ;
m_ptRef1 = pTab->GetRef1() ;
m_b3Area1 = pTab->GetArea1() ;
// salvo il nome e dichiaro tavola verificata
m_sTabName = sTable ;
m_bTabOk = true ;
@@ -286,6 +287,21 @@ Disposition::GetTableRef1( Point3d& ptRef1) const
return true ;
}
//----------------------------------------------------------------------------
bool
Disposition::GetTableArea1( BBox3d& b3Area1) const
{
// verifico MachMgr e GeomDB
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// verifico tavola
if ( ! m_bTabOk && ! const_cast<Disposition*>(this)->SetTable( m_sTabName))
return false ;
// recupero la prima area utile della tavola
b3Area1 = m_b3Area1 ;
return true ;
}
//----------------------------------------------------------------------------
bool
Disposition::Apply(void)
@@ -343,6 +359,9 @@ Disposition::AddFixture( const string& sName, const Point3d& ptPos, double dAngD
// verifico tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
return GDB_ID_NULL ;
// verifico che la posizione sia nell'area della tavola
if ( ! m_b3Area1.EnclosesXY( m_ptRef1 + ptPos))
return GDB_ID_NULL ;
// recupero il gruppo delle fixtures nella macchinata corrente
int nFixtGrpId = m_pMchMgr->GetCurrFixtGroupId() ;
if ( nFixtGrpId == GDB_ID_NULL)
@@ -381,6 +400,11 @@ Disposition::MoveFixture( int nId, const Vector3d& vtMove)
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
return false ;
// verifico che la posizione finale sia nell'area della tavola
Frame3d frFixt ;
if ( ! m_pGeomDB->GetGlobFrame( nId, frFixt) ||
! m_b3Area1.EnclosesXY( frFixt.Orig() + vtMove))
return false ;
// muovo l'oggetto
m_pGeomDB->TranslateGlob( nId, vtMove) ;
// aggiorno la posizione dell'oggetto nel vettore dei comandi
@@ -469,6 +493,10 @@ Disposition::MoveToCornerRawPart( int nRawId, const Point3d& ptP, int nFlag, boo
vtMove = ( m_ptRef1 + ptP) - Point3d( b3Raw.GetMax().x, b3Raw.GetMin().y, b3Raw.GetMin().z) ;
break ;
}
// verifico se il grezzo nella posizione finale sarà nella tavola
b3Raw.Translate( vtMove) ;
if ( ! m_b3Area1.EnclosesXY( b3Raw))
return false ;
// eseguo traslazione in globale
if ( ! vtMove.IsSmall())
m_pGeomDB->TranslateGlob( nRawId, vtMove) ;
@@ -521,6 +549,10 @@ Disposition::MoveToCenterRawPart( int nRawId, const Point3d& ptP, int nFlag, boo
vtMove = ( m_ptRef1 + ptP) - Point3d( ptCen.x, ptCen.y, b3Raw.GetMin().z) ;
break ;
}
// verifico se il grezzo nella posizione finale sarà nella tavola
b3Raw.Translate( vtMove) ;
if ( ! m_b3Area1.EnclosesXY( b3Raw))
return false ;
// eseguo traslazione in globale
if ( ! vtMove.IsSmall())
m_pGeomDB->TranslateGlob( nRawId, vtMove) ;
@@ -555,6 +587,16 @@ Disposition::MoveRawPart( int nRawId, const Vector3d& vtMove)
( Mrv.nType == MoveRawData::COR || Mrv.nType == MoveRawData::CEN)) ; }) ;
if ( iIter == m_vMvrData.end())
return false ;
// recupero il solido
int nRawSolId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
// determino il box del grezzo (solo il solido ovviamente)
BBox3d b3Raw ;
if ( ! m_pGeomDB->GetGlobalBBox( nRawSolId, b3Raw))
return false ;
// verifico se il grezzo nella posizione finale sarà nella tavola
b3Raw.Translate( vtMove) ;
if ( ! m_b3Area1.EnclosesXY( b3Raw))
return false ;
// eseguo traslazione in globale
m_pGeomDB->TranslateGlob( nRawId, vtMove) ;
// aggiorno comando di movimento