EgtMachKernel :

- gestione posizionamento pezzi su tavole con home assi non nullo
- migliorata rotazione grezzi su centroide.
This commit is contained in:
Dario Sassi
2016-10-04 07:33:38 +00:00
parent 7468c3bf17
commit d7234d57d1
5 changed files with 82 additions and 9 deletions
+24 -3
View File
@@ -579,9 +579,15 @@ Disposition::MoveToCornerRawPart( int nRawId, const Point3d& ptP, int nFlag, boo
b3Raw.Translate( vtMove) ;
if ( ! m_b3Area1.EnclosesXY( b3Raw))
return false ;
// recupero eventuale spostamento corrente della tavola
Vector3d vtDelta1 ;
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
if ( pMch == nullptr || ! pMch->GetCurrTableDeltaRef1( vtDelta1))
return false ;
// eseguo traslazione in globale
if ( ! vtMove.IsSmall())
m_pGeomDB->TranslateGlob( nRawId, vtMove) ;
Vector3d vtTotMove = vtMove + vtDelta1 ;
if ( ! vtTotMove.IsSmall())
m_pGeomDB->TranslateGlob( nRawId, vtTotMove) ;
// se da aggiungere alla lista
if ( bAddToList) {
auto iIter = find_if( m_vMvrData.begin(), m_vMvrData.end(),
@@ -675,8 +681,13 @@ Disposition::MoveRawPart( int nRawId, const Vector3d& vtMove)
BBox3d b3Raw ;
if ( ! m_pGeomDB->GetGlobalBBox( nRawSolId, b3Raw))
return false ;
// recupero eventuale spostamento corrente della tavola
Vector3d vtDelta1 ;
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
if ( pMch == nullptr || ! pMch->GetCurrTableDeltaRef1( vtDelta1))
return false ;
// verifico se il grezzo nella posizione finale sarà nella tavola
b3Raw.Translate( vtMove) ;
b3Raw.Translate( vtMove - vtDelta1) ;
if ( ! m_b3Area1.EnclosesXY( b3Raw))
return false ;
// eseguo traslazione in globale
@@ -724,11 +735,21 @@ Disposition::ApplyRotationToRawPart( int nRawId, double dAngCDeg, double dAngADe
// verifica validità grezzo
if ( ! VerifyRawPart( nRawId))
return false ;
// recupero centro del grezzo
Point3d ptCen ;
if ( ! m_pMchMgr->GetRawPartCenter( nRawId, ptCen))
return false ;
// recupero riferimento del grezzo (coincide con quello globale)
Frame3d* pfrRaw = m_pGeomDB->GetGroupFrame( nRawId) ;
// lo trasformo nel nuovo riferimento
Point3d ptOrig = pfrRaw->Orig() ; // necessario copiarlo
pfrRaw->Set( ptOrig, dAngCDeg, dAngADeg, dAngC1Deg) ;
// recupero nuovo centro del grezzo
Point3d ptNewCen ;
if ( ! m_pMchMgr->GetRawPartCenter( nRawId, ptNewCen))
return false ;
// eseguo spostamento per riportare il centro nella posizione originale
pfrRaw->Translate( ptCen - ptNewCen) ;
return true ;
}