EgtMachKernel :

- per le ventose e i riferimenti ora si controlla che stiano completamente nella tavola.
This commit is contained in:
Dario Sassi
2016-11-07 14:50:36 +00:00
parent 4af36521c2
commit 8aff181070
+30 -4
View File
@@ -45,6 +45,8 @@ static std::string DIS_NUM = "NUM" ;
static std::string DIS_HEAD = "Head" ;
static std::string DIS_EXIT = "Exit" ;
static std::string DIS_SOMEBYHAND = "Sbh" ;
//----------------------------------------------------------------------------
static double DISP_BOX_TOL = - 0.5 ;
//----------------------------------------------------------------------------
USEROBJ_REGISTER( "EMkDisposition", Disposition) ;
@@ -472,6 +474,17 @@ Disposition::AddFixture( const string& sName, const Point3d& ptPos, double dAngD
// la ruoto
if ( fabs( dAngDeg) > EPS_ANG_SMALL)
m_pGeomDB->RotateGroup( nFixtId, ORIG, Z_AX, dAngDeg) ;
// recupero ingombro sottopezzo (rimpicciolisco un poco per tolleranza)
BBox3d b3Fixt ;
if ( m_pGeomDB == nullptr || ! m_pGeomDB->GetGlobalBBox( nFixtId, b3Fixt))
return false ;
b3Fixt.Expand( DISP_BOX_TOL) ;
// verifico che la posizione finale sia nell'area della tavola (espressa in posizione 0)
b3Fixt.Translate( - vtDelta1) ;
if ( ! m_b3Area1.EnclosesXY( b3Fixt)) {
RemoveFixture( nFixtId) ;
return GDB_ID_NULL ;
}
// muovo eventuale parte mobile
int nMobId = m_pGeomDB->GetFirstNameInGroup( nFixtId, FXT_MOBILE) ;
if ( nMobId != GDB_ID_NULL) {
@@ -539,10 +552,14 @@ Disposition::MoveFixture( int nId, const Vector3d& vtMove)
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
if ( pMch == nullptr || ! pMch->GetCurrTableDeltaRef1( vtDelta1))
return false ;
// recupero ingombro sottopezzo
BBox3d b3Fixt ;
if ( m_pGeomDB == nullptr || ! m_pGeomDB->GetGlobalBBox( nId, b3Fixt))
return false ;
b3Fixt.Expand( DISP_BOX_TOL) ;
// verifico che la posizione finale sia nell'area della tavola (espressa in posizione 0)
Frame3d frFixt ;
if ( ! m_pGeomDB->GetGroupFrame( nId, frFixt) ||
! m_b3Area1.EnclosesXY( frFixt.Orig() - vtDelta1 + vtMove))
b3Fixt.Translate( vtMove - vtDelta1) ;
if ( ! m_b3Area1.EnclosesXY( b3Fixt))
return false ;
// muovo l'oggetto
m_pGeomDB->TranslateGlob( nId, vtMove) ;
@@ -618,8 +635,17 @@ Disposition::PlaceFixture( int nId, const Point3d& ptPos, double dAngDeg, double
// verifico aggiornamento tavola
if ( ! m_bTabOk && ! SetTable( m_sTabName))
return false ;
// recupero ingombro sottopezzo
BBox3d b3Fixt ;
if ( m_pGeomDB == nullptr || ! m_pGeomDB->GetGlobalBBox( nId, b3Fixt))
return false ;
b3Fixt.Expand( DISP_BOX_TOL) ;
// recupero riferimento sottopezzo
Frame3d frFixt ;
m_pGeomDB->GetGroupGlobFrame( nId, frFixt) ;
// verifico che la posizione sia nell'area della tavola
if ( ! m_b3Area1.EnclosesXY( m_ptRef1 + ptPos))
b3Fixt.Translate( m_ptRef1 + ptPos - frFixt.Orig()) ;
if ( ! m_b3Area1.EnclosesXY( b3Fixt))
return false ;
// aggiorno visualizzazione
m_pGeomDB->SetStatus( nId, GDB_ST_ON) ;