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
+3 -3
View File
@@ -1408,7 +1408,7 @@ SurfFinishing::AddZigZag( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons
double dPockRadOffs = m_TParams.m_dDiam / 2 - m_Params.m_dSideStep - m_Params.m_dOverlap ;
ICRVCOMPOPOVECTOR vpCrvs ;
if ( ! CalcPocketing( pSfrPock, dPockRad, dPockRadOffs, m_Params.m_dSideStep, m_Params.m_dSideAngle,
POCKET_ZIGZAG, false, false, true, nullptr, vpCrvs)) {
POCKET_ZIGZAG, false, false, true, false, nullptr, vpCrvs)) {
m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ;
return false ;
}
@@ -1609,7 +1609,7 @@ SurfFinishing::AddOneWay( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons
double dPockRadOffs = m_TParams.m_dDiam / 2 - m_Params.m_dSideStep - m_Params.m_dOverlap ;
ICRVCOMPOPOVECTOR vpCrvs ;
if ( ! CalcPocketing( pSfrPock, dPockRad, dPockRadOffs, m_Params.m_dSideStep, m_Params.m_dSideAngle,
POCKET_ONEWAY, false, false, true, nullptr, vpCrvs)) {
POCKET_ONEWAY, false, false, true, false, nullptr, vpCrvs)) {
m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ;
return false ;
}
@@ -1811,7 +1811,7 @@ SurfFinishing::AddSpiral( ICAvToolSurfTm* pCAvTlStm, const Frame3d& frSurf, cons
int nType = ( bInVsOut ? POCKET_SPIRALIN : POCKET_SPIRALOUT) ;
ICRVCOMPOPOVECTOR vpCrvs ;
if ( ! CalcPocketing( pSfrPock, dPockRad, dPockRadOffs, m_Params.m_dSideStep, m_Params.m_dSideAngle,
nType, false, false, true, nullptr, vpCrvs)) {
nType, false, false, true, false, nullptr, vpCrvs)) {
m_pMchMgr->SetLastError( 3125, "Error in SurfFinishing : CalcPocketing failed") ;
return false ;
}
+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
+1 -1
View File
@@ -83,7 +83,7 @@ class SurfRoughing : public Machining
bool AddLinkRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
bool AddRetract( const Point3d& ptP, const Vector3d& vtTool, double dSafeZ, double dElev, double dAppr) ;
bool CalcLeadInStart( const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtTool, const ICurveComposite* pCrvPath, Point3d& ptP1) const ;
bool VerifyLeadIn( const ICurve* pCrv, const ICurveComposite* pCrvPock, bool& bSkip) const ;
bool VerifyLeadInLeadOut( const ICurve* pCrv, const ICurveComposite* pCrvPock, bool& bSkip) const ;
bool AddLeadIn( const Point3d& ptP1, const Point3d& ptStart, const Vector3d& vtStart, const Vector3d& vtN,
const ISurfFlatRegion* pSfr, const ICurveComposite* pRCrv, bool bAtLeft, bool bSplitArcs,
bool bNoneForced, bool bSkipControl) ;