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:
+43
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user