EgtMachKernel :
- gestione posizionamento pezzi su tavole con home assi non nullo - migliorata rotazione grezzi su centroide.
This commit is contained in:
+24
-3
@@ -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 ;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user