Merge commit '4af6caf657ede99d3dc1507cad110d55936e827c'

This commit is contained in:
Dario Sassi
2024-07-22 14:58:50 +02:00
2 changed files with 24 additions and 43 deletions
+21 -40
View File
@@ -1614,7 +1614,7 @@ SurfRoughing::ProcessPath( int nPathId, int nTempId, int nPvId, int nClId)
// Eseguo le svuotature
double dElev = dDepth ;
if ( ! AddPocket( vPocket, vtTool, vtExtr, vCrvPocketCompo, dElev, dStep, bSplitArcs))
if ( ! AddPocket( vPocket, vtTool, vtExtr, vCrvPocketCompo, dElev, dStep, dSubStep, bSplitArcs))
return false ;
}
@@ -1798,7 +1798,7 @@ SurfRoughing::GetActiveSurfaces( INTVECTOR& vSurfId) const
//----------------------------------------------------------------------------
bool
SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, const Vector3d& vtExtr,
const ICRVCOMPOPOVECTOR& vCrvPocketCompo, double dElev, double dStep, bool bSplitArcs)
const ICRVCOMPOPOVECTOR& vCrvPocketCompo, double dElev, double dStep, double dSubStep, bool bSplitArcs)
{
// recupero distanze di sicurezza
double dSafeZ = GetSafeZ() ;
@@ -1864,11 +1864,6 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
for ( int i = 0 ; i < int( vpCrvs.size()) ; ++ i)
VerifyArcs( vpCrvs[i]) ;
// salvo i loop esterni della superficie corrente come Polylinee ( per LeadIn/LeadOut)
ICURVEPOVECTOR vLoops ; vLoops.resize( pSfrPock->GetChunkCount()) ;
for ( int c = 0 ; c < int( vLoops.size()) ; ++ c)
vLoops[c].Set( pSfrPock->GetLoop( c, 0)) ;
// ciclo sui percorsi
for ( int k = 0 ; k < int( vpCrvs.size()) ; ++ k) {
// controllo se il percorso ha un ingresso presso un lato aperto
@@ -1877,7 +1872,6 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
// controllo se il punto di ingresso è valido
bool bValidOutLeadIn = true ;
if ( bOutStart) {
bool bValidOutLeadIn = true ;
if ( ! VerifyLeadIn( vpCrvs[k]->GetFirstCurve(), vCrvPocketCompo[nCurrStep], bValidOutLeadIn))
return false ;
if ( ! bValidOutLeadIn) {
@@ -1937,9 +1931,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
double dStElev = - dDepth ;
dStElev -= ( ptP1 - ptStart) * vtExtr ;
// se attacco a zigzag o a spirale o a scivolo, l'elevazione va nell'attacco
if ( GetLeadInType() == POCKET_LI_ZIGZAG ||
GetLeadInType() == POCKET_LI_HELIX ||
GetLeadInType() == POCKET_LI_GLIDE) {
if ( GetLeadInType() != POCKET_LI_NONE) {
ptP1 += vtExtr * ( dStElev + LIO_ELEV_TOL) ;
dStElev = - LIO_ELEV_TOL ;
}
@@ -1958,13 +1950,17 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
return false ;
}
// se attacco elica od equivalente di step pieno, devo fare elica o similari solo sulla parte con materiale
if ( nSubType != SURFROU_SUB_ONEWAY &&
nSubType != SURFROU_SUB_ZIGZAG &&
nBasicStep > 0 && ! bOutStart &&
( GetLeadInType() == POCKET_LI_ZIGZAG ||
GetLeadInType() == POCKET_LI_HELIX ||
GetLeadInType() == POCKET_LI_GLIDE)) {
ptP1 -= ( nBasicStep * dStep) * vtTool ;
bool bLower = ( nSubType != SURFROU_SUB_ONEWAY && nSubType != SURFROU_SUB_ZIGZAG &&
nBasicStep > 0 && ! bOutStart && GetLeadInType() != POCKET_LI_NONE) ;
if ( bLower) {
if ( bIsSubStep) {
double dExtra = - dStep ;
if ( dDepth < - dStep)
dExtra = - dSubStep ;
ptP1 -= ( dStElev + dExtra) * vtTool ;
}
else
ptP1 -= ( nBasicStep * dStep) * vtTool ;
SetFeed( GetStartFeed()) ;
SetFlag( 0) ;
if ( AddLinearMove( ptP1) == GDB_ID_NULL)
@@ -2003,7 +1999,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
return false ;
}
#if ENABLE_DEBUG
vpCrvs[k]->SetCurveTempParam( i, dCoeffFeed * GetFeed()) ; // ok...
vpCrvs[k]->SetCurveTempParam( i, dCoeffFeed * GetFeed()) ;
#endif
// se ultima entità
if ( i == nMaxInd) {
@@ -2497,34 +2493,19 @@ SurfRoughing::RemoveChunksUnderTolerance( ISurfFlatRegion* pSfr) const
if ( m_dSubStepToler < EPS_SMALL) // se tolleranza non presente, non faccio nulla
return true ;
// inizializzo la superficie da restituire
PtrOwner<ISurfFlatRegion> pSfrBeauty( CreateSurfFlatRegion()) ;
if ( IsNull( pSfrBeauty))
return false ;
// scorro tutti i chunk della superficie
bool bSameSurf = true ;
for ( int nC = 0 ; nC < pSfr->GetChunkCount() ; ++ nC) {
// verifico se l'Offset massimo del chunk è sopra alla tolleranza
double dMaxOffs = EPS_SMALL ;
pSfr->GetChunkMaxOffset( nC, dMaxOffs) ;
if ( dMaxOffs > m_dSubStepToler) {
// recupero il loop esterno
if ( ! pSfrBeauty->AddExtLoop( pSfr->GetLoop( nC, 0)))
return false ;
// inserisco le isole del Chunk corrente
for ( int nL = 1 ; nL < pSfr->GetLoopCount( nC) ; ++ nL)
if ( ! pSfrBeauty->AddIntLoop( pSfr->GetLoop( nC, nL)))
return false ;
// rimuovo il Chunk c-esimo se l'Offset massimo è minore della tolleranza
if ( dMaxOffs < m_dSubStepToler) {
pSfr->EraseChunk( nC) ;
-- nC ;
}
else
bSameSurf = false ;
}
// se ho fatto modifiche, sostituisco la superficie con quella nuova
if ( ! bSameSurf)
pSfr->CopyFrom( pSfrBeauty) ;
return true ;
}
@@ -2881,7 +2862,7 @@ SurfRoughing::CalcRetCrv( const ICurveComposite* pCompo, const Point3d& ptRef, b
//----------------------------------------------------------------------------
bool
SurfRoughing::VerifyLeadInHelix( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptCen,
double dHelixRad)
double dHelixRad) const
{
// controllo validità dei parametri
if ( pSfr == nullptr || ! pSfr->IsValid())
@@ -2915,7 +2896,7 @@ SurfRoughing::VerifyLeadInHelix( const ISurfFlatRegion* pSfr, const Point3d& ptS
//----------------------------------------------------------------------------
bool
SurfRoughing::VerifyLeadInZigZag( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptPa,
const Point3d& ptPb)
const Point3d& ptPb) const
{
// controllo validità dei parametri
if ( pSfr == nullptr || ! pSfr->IsValid())
+3 -3
View File
@@ -77,7 +77,7 @@ class SurfRoughing : public Machining
bool Chain( int nGrpDestId) ;
bool ProcessPath( int nPathId, int nTempId, int nPvId, int nClId) ;
bool AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, const Vector3d& vtExtr,
const ICRVCOMPOPOVECTOR& vCrvPocketCompo, double dElev, double dStep, bool bSplitArcs) ;
const ICRVCOMPOPOVECTOR& vCrvPocketCompo, double dElev, double dStep, double dSubStep, bool bSplitArcs) ;
bool AddApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
bool AddLinkApproach( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr, bool bOutMove) ;
bool AddLinkRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
@@ -106,8 +106,8 @@ class SurfRoughing : public Machining
bool CalcRetCrv( const ICurveComposite* pCompo, const Point3d& ptRef, bool bOutStart,
ICurveComposite* pRCrv) const ;
bool GetHomogeneousParts( const ICurveComposite* pCrvCompo, ICRVCOMPOPOVECTOR& vpCrvs) const ;
bool VerifyLeadInHelix( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptCen, double dHelixRad) ;
bool VerifyLeadInZigZag( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptPa, const Point3d& ptPb) ;
bool VerifyLeadInHelix( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptCen, double dHelixRad) const ;
bool VerifyLeadInZigZag( const ISurfFlatRegion* pSfr, const Point3d& ptStart, const Point3d& ptPa, const Point3d& ptPb) const ;
private :
double GetSpeed() const