EgtMachKernel :
- per le ventose e i riferimenti ora si controlla che stiano completamente nella tavola.
This commit is contained in:
+30
-4
@@ -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) ;
|
||||
|
||||
Reference in New Issue
Block a user