Merge commit 'f30f028b171a931f82cd15e95b4bea832a33c540' into svuotature
This commit is contained in:
+40
-4
@@ -427,7 +427,7 @@ Operation::GetElevation( int nPhase, const Point3d& ptP, const Vector3d& vtTool,
|
||||
}
|
||||
else {
|
||||
Vector3d vtOrtho = OrthoCompo( ptV - ptP, vtDir) ;
|
||||
Vector3d vtMajAx = vtTool ^ vtDir ; vtMajAx.Normalize() ;
|
||||
Vector3d vtMajAx = vtTool ^ vtDir ; vtMajAx.Normalize( EPS_ZERO) ;
|
||||
Vector3d vtMajOrt = ParallCompo( vtOrtho, vtMajAx) ;
|
||||
Vector3d vtMinOrt = ( vtOrtho - vtMajOrt) / abs( vtTool * vtDir) ;
|
||||
if ( vtMajOrt.SqLen() + vtMinOrt.SqLen() < dRad * dRad + EPS_ZERO)
|
||||
@@ -1119,6 +1119,29 @@ Operation::GetRawGlobBox( int nPhase, const BBox3d& b3Test, double dToler, BBox3
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::GetCurrRawsGlobBox( BBox3d& b3Raw) const
|
||||
{
|
||||
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
|
||||
return false ;
|
||||
// inizializzo box
|
||||
b3Raw.Reset() ;
|
||||
// Ciclo sui grezzi attivi
|
||||
int nRawId = m_pMchMgr->GetFirstRawPart() ;
|
||||
while ( nRawId != GDB_ID_NULL) {
|
||||
if ( m_pMchMgr->VerifyRawPartPhase( nRawId, m_nPhase)) {
|
||||
BBox3d b3OneRaw ;
|
||||
int nRawSolidId = m_pGeomDB->GetFirstNameInGroup( nRawId, MACH_RAW_SOLID) ;
|
||||
if ( m_pGeomDB->GetGlobalBBox( nRawSolidId, b3OneRaw)) {
|
||||
b3Raw.Add( b3OneRaw) ;
|
||||
}
|
||||
}
|
||||
nRawId = m_pMchMgr->GetNextRawPart( nRawId) ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//----------------------------------------------------------------------------
|
||||
inline Vector3d
|
||||
@@ -2477,12 +2500,15 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
|
||||
else
|
||||
return false ;
|
||||
}
|
||||
// Recupero box complessivo dei grezzi attivi
|
||||
BBox3d b3Raws ;
|
||||
GetCurrRawsGlobBox( b3Raws) ;
|
||||
// Se già a Zmax
|
||||
if ( bMaxZ) {
|
||||
// non devo fare alcunché
|
||||
}
|
||||
// se altrimenti richiesta risalita a Zmax
|
||||
else if ( bToZmax || ForcedZmax( vAxVal, vAxIni)) {
|
||||
else if ( bToZmax || ForcedZmax( vAxVal, vAxIni, b3Raws)) {
|
||||
// cancello eventuale risalita parziale della lavorazione precedente
|
||||
pPrevOp->RemoveRise() ;
|
||||
// aggiungo risalita a Zmax
|
||||
@@ -2713,6 +2739,9 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation*
|
||||
}
|
||||
// verifico se la testa interferisce con i pezzi o i bloccaggi sulla tavola
|
||||
else {
|
||||
// Recupero box complessivo dei grezzi attivi
|
||||
BBox3d b3Raws ;
|
||||
GetCurrRawsGlobBox( b3Raws) ;
|
||||
// recupero se ZHome è in basso
|
||||
bool bZHomeDown = GetZHomeDown() ;
|
||||
// determino la Z più alta tra le due posizioni
|
||||
@@ -2721,7 +2750,7 @@ Operation::AdjustOneStartMovement( int nClPathId, int nPrevClPathId, Operation*
|
||||
DBLVECTOR vAxPrevTmp = vAxPrev ; vAxPrevTmp[2] = dTopZ ;
|
||||
DBLVECTOR vAxCurrTmp = vAxCurr ; vAxCurrTmp[2] = dTopZ ;
|
||||
// verifico se forzata risalita a Zmax
|
||||
bool bForcedZMax = ForcedZmax( vAxPrevTmp, vAxCurrTmp) ;
|
||||
bool bForcedZMax = ForcedZmax( vAxPrevTmp, vAxCurrTmp, b3Raws) ;
|
||||
// se interferisce
|
||||
if ( bForcedZMax || ! TestCollisionAvoid( vAxPrevTmp, vAxCurrTmp)) {
|
||||
// recupero HomeZ
|
||||
@@ -3396,7 +3425,7 @@ Operation::GetRotationAtZmax( void) const
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const
|
||||
Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, const BBox3d& b3Raws) const
|
||||
{
|
||||
// Recupero macchina corrente
|
||||
Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ;
|
||||
@@ -3414,6 +3443,13 @@ Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const
|
||||
int nHeadId = pMch->GetCurrHead() ;
|
||||
DBLVECTOR vdVal ;
|
||||
if ( m_pGeomDB->GetInfo( nHeadId, MCH_ZMAXONROT, vdVal) && vdVal.size() >= 1 && lround(vdVal[0]) > 0) {
|
||||
// controllo altezza minima grezzi
|
||||
double dHmin = 100 * EPS_SMALL ;
|
||||
if ( vdVal.size() >= 3)
|
||||
dHmin = max( vdVal[2], dHmin) ;
|
||||
if ( b3Raws.GetDimZ() < dHmin)
|
||||
return false ;
|
||||
// controllo variazione angolare minima
|
||||
double dAngTol = 100 * EPS_ANG_SMALL ;
|
||||
if ( vdVal.size() >= 2)
|
||||
dAngTol = max( vdVal[1], dAngTol) ;
|
||||
|
||||
Reference in New Issue
Block a user