EgtMachKernel :
- aggiunti percorsi di Bordo per Sgrossature ZigZag e OneWay. - migliorie varie.
This commit is contained in:
+3
-3
@@ -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
@@ -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
@@ -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) ;
|
||||
|
||||
Reference in New Issue
Block a user