EgtMachKernel :

- aggiunti percorsi di Bordo per Sgrossature ZigZag e OneWay.
- migliorie varie.
This commit is contained in:
Riccardo Elitropi
2024-07-25 12:32:48 +02:00
parent 23d29eec0a
commit 82e464c481
3 changed files with 31 additions and 15 deletions
+27 -11
View File
@@ -1843,7 +1843,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
ICRVCOMPOPOVECTOR vpCrvs ; // percorso di svuotatura
// se si tratta di uno step base, allora lavoro l'intera superficie
if ( ! CalcPocketing( pSfrPock, m_TParams.m_dDiam / 2, 0., m_Params.m_dSideStep, m_Params.m_dSideAngle,
nSubType, true, bInvert, false, pSfrLimit, vpCrvs)) {
nSubType, true, bInvert, false, true, pSfrLimit, vpCrvs)) {
if ( bIsSubStep) {
string sWarn = "Warning in SurfRoughing : CalcPocketing failed with substep (" + ToString( pSfrPock->GetTempParam( 0), 1) + ")" ;
m_pMchMgr->SetWarning( 3055, sWarn) ;
@@ -1872,7 +1872,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
// controllo se il punto di ingresso è valido
bool bValidOutLeadIn = true ;
if ( bOutStart) {
if ( ! VerifyLeadIn( vpCrvs[k]->GetFirstCurve(), vCrvPocketCompo[nCurrStep], bValidOutLeadIn))
if ( ! VerifyLeadInLeadOut( vpCrvs[k]->GetFirstCurve(), vCrvPocketCompo[nCurrStep], bValidOutLeadIn))
return false ;
if ( ! bValidOutLeadIn) {
// se non valido, rimuovo il primo tratto
@@ -1880,6 +1880,18 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
vpCrvs[k]->RemoveFirstOrLastCurve( false) ;
}
}
// controllo se il percorso ha un'uscita presso un lato aperto
bool bOutEnd = ( vpCrvs[k]->GetCurveCount() > 0 &&
vpCrvs[k]->GetLastCurve()->GetTempProp( 0) == TEMP_PROP_OUT_START) ;
// controllo se il punto d'uscita va limitata
bool bValidOutLeadOut = true ;
if ( bOutEnd) {
if ( ! VerifyLeadInLeadOut( vpCrvs[k]->GetLastCurve(), vCrvPocketCompo[nCurrStep], bValidOutLeadOut))
return false ;
// se non valido, rimuovo l'ultimo tratto
if ( ! bValidOutLeadOut)
vpCrvs[k]->RemoveFirstOrLastCurve( true) ;
}
// controllo se il percorso è formato da una singola curva seguente il lato chiuso
bool bSingleCrv = ( vpCrvs[k]->GetCurveCount() > 0 &&
vpCrvs[k]->GetTempProp( 0) == TEMP_PROP_SINGLE_CURVE) ;
@@ -1888,8 +1900,8 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co
vpCrvs[k]->GetTempProp( 0) == TEMP_PROP_OPT_TRAPEZOID) ;
// controllo se è un percorso a ZigZag/OneWay ( non curva di bordo)
bool bIsZigZagOneWayPath = ( vpCrvs[k]->GetCurveCount() > 0 &&
( nSubType == SURFROU_SUB_ONEWAY || nSubType == SURFROU_SUB_ZIGZAG) &&
vpCrvs[k]->GetTempProp( 0) != TEMP_PROP_BORDER_CURVE) ;
( nSubType == SURFROU_SUB_ONEWAY || nSubType == SURFROU_SUB_ZIGZAG) &&
vpCrvs[k]->GetTempProp( 0) == TEMP_PROP_BORDER_CURVE) ;
// inizializzo la curva di Ritorno per LeadIn/LeadOut
PtrOwner<ICurveComposite> pRCrv( CreateCurveComposite()) ;
if ( IsNull( pRCrv))
@@ -1950,27 +1962,32 @@ 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
bool bLower = ( nSubType != SURFROU_SUB_ONEWAY && nSubType != SURFROU_SUB_ZIGZAG &&
nBasicStep > 0 && ! bOutStart && GetLeadInType() != POCKET_LI_NONE) ;
bool bLower = ( ( nSubType != SURFROU_SUB_ONEWAY || bIsZigZagOneWayPath) &&
( 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 ;
ptP1 -= ( ( ptP1 - ptStart) * vtTool + dExtra) * vtTool ;
}
else
ptP1 -= ( nBasicStep * dStep) * vtTool ;
SetFeed( GetStartFeed()) ;
SetFlag( 0) ;
if ( AddLinearMove( ptP1) == GDB_ID_NULL)
if ( AddLinearMove( ptP1) == GDB_ID_NULL) {
m_pMchMgr->SetLastError( 3012, "Error in SurfRoughing : Link not computable") ;
return false ;
}
}
}
// aggiungo attacco
SetFeed( GetStartFeed()) ;
bool bNoneForced = ( bOutStart || bSingleCrv ||
( bIsZigZagOneWayPath && ! vpCrvs[k]->IsClosed())) ;
( nSubType == SURFROU_SUB_ZIGZAG) ||
( nSubType == SURFROU_SUB_ONEWAY && ! bIsZigZagOneWayPath)) ;
if ( ! AddLeadIn( ptP1, ptStart, vtStart, vtTool, pSfrPock,
( ( nSubType == SURFROU_SUB_SPIRALIN || nSubType == SURFROU_SUB_SPIRALOUT)) ? Get( pRCrv) : nullptr,
( nSubType == SURFROU_SUB_SPIRALOUT) ? bInvert : ! bInvert,
@@ -2495,7 +2512,6 @@ SurfRoughing::RemoveChunksUnderTolerance( ISurfFlatRegion* pSfr) const
return true ;
// 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 ;
@@ -2978,7 +2994,7 @@ SurfRoughing::GetHomogeneousParts( const ICurveComposite* pCrvCompo, ICRVCOMPOPO
//----------------------------------------------------------------------------
bool
SurfRoughing::VerifyLeadIn( const ICurve* pCrv, const ICurveComposite* pCrvPock, bool& bValidLeadIn) const
SurfRoughing::VerifyLeadInLeadOut( const ICurve* pCrv, const ICurveComposite* pCrvPock, bool& bValidLeadIn) const
{
/*
Verifica se il segmento di LeadIn per entrate da fuori sia valido