EgtMachKernel :

- aggiunta gestione archi su piani diversi da XY
- disposizione rimette sempre anche i sottopezzi al loro posto
- aggiunti attacchi e uscite a fresature
- aggiunta prima versione calcolo collegamenti tra lavorazioni evitando collisioni
- modifiche a simulazione per tavole mobili con sottopezzi e pezzi.
This commit is contained in:
Dario Sassi
2016-05-30 08:55:15 +00:00
parent a53dfcd676
commit 3cd21182d3
16 changed files with 1189 additions and 289 deletions
+43 -3
View File
@@ -343,6 +343,13 @@ Disposition::Apply(void)
else
FixData.nId = nId ;
}
// altrimenti sottopezzo da rimettere in posizione
else {
if ( ! PlaceFixture( FixData.nId, FixData.ptPos, FixData.dAng)) {
string sOut = "Error placing fixture " + ToString( FixData.nId) ;
LOG_ERROR( GetEMkLogger(), sOut.c_str()) ;
}
}
}
// annullo movimento grezzi
int nRawId = m_pMchMgr->GetFirstRawPart() ;
@@ -441,9 +448,9 @@ Disposition::MoveFixture( int nId, const Vector3d& vtMove)
// muovo l'oggetto
m_pGeomDB->TranslateGlob( nId, vtMove) ;
// aggiorno la posizione dell'oggetto nel vettore dei comandi
for ( auto iIter = m_vFixData.begin() ; iIter != m_vFixData.end() ; ++ iIter) {
if ( iIter->nId == nId) {
iIter->ptPos += vtMove ;
for ( auto& FixData : m_vFixData) {
if ( FixData.nId == nId) {
FixData.ptPos += vtMove ;
break ;
}
}
@@ -472,6 +479,39 @@ Disposition::RotateFixture( int nId, double dAngDeg)
return true ;
}
//----------------------------------------------------------------------------
bool
Disposition::PlaceFixture( int nId, const Point3d& ptPos, double dAngDeg)
{
// verifica validità sottopezzo
if ( ! VerifyFixture( nId))
return false ;
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
return false ;
// verifico che la posizione sia nell'area della tavola
if ( ! m_b3Area1.EnclosesXY( m_ptRef1 + ptPos))
return false ;
// resetto il riferimento del gruppo
Frame3d* pfrFixt = m_pGeomDB->GetGroupFrame( nId) ;
pfrFixt->Reset() ;
// lo muovo nella posizione voluta
Vector3d vtMove = ( m_ptRef1 + ptPos) - ORIG ;
m_pGeomDB->TranslateGlob( nId, vtMove) ;
// lo ruoto
if ( fabs( dAngDeg) > EPS_ANG_SMALL)
m_pGeomDB->RotateGroup( nId, ORIG, Z_AX, dAngDeg) ;
// aggiorno la posizione dell'oggetto nel vettore dei comandi
for ( auto& FixData : m_vFixData) {
if ( FixData.nId == nId) {
FixData.ptPos = ptPos ;
FixData.dAng = dAngDeg ;
break ;
}
}
return true ;
}
//----------------------------------------------------------------------------
bool
Disposition::RemoveFixture( int nId)