EgtMachKernel :
- in sgrossature aggiunto parametro utente per offset radiale da superfici di supporto - in sgrossature modifiche stilistiche - in sgrossature correzioni nel calcolo delle superfici nei vari Step e SubSteps.
This commit is contained in:
@@ -67,6 +67,7 @@ static const std::string UN_ANGLETOL = "AngleTol" ;
|
||||
// Solo per SurfRoughing
|
||||
static const std::string UN_PLANEZ = "PlaneZ" ;
|
||||
static const std::string UN_ORDER = "Order" ;
|
||||
static const std::string UN_SUPP_RAD_OFFS = "SuppRadOffs" ;
|
||||
|
||||
// Solo per Waterjetting
|
||||
static const std::string UN_START = "START" ;
|
||||
|
||||
+28
-13
@@ -129,7 +129,6 @@ static string KEY_SUBSTEP = "SUBSTEP" ;
|
||||
const double STEP_TOL = 10. * EPS_SMALL ;
|
||||
const double SIL_DEPTH_TOL = 100. * EPS_SMALL ;
|
||||
const double OFFS_CORR_OPEN_EDGES = 25. * EPS_SMALL ;
|
||||
const double SUPP_SURF_RADIAL_OFFS = 5. ;
|
||||
const double TOL_OFFS_CORNER_COLL = 50. * EPS_SMALL ;
|
||||
const double DIST_TABLE = 5. * EPS_SMALL ;
|
||||
|
||||
@@ -1495,6 +1494,13 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
// temporaneo. L'analisi per la superficie di Sgrossatura, Limite e Removed non dipende
|
||||
// dall'ordine, ma semplicemente dalla quota Z del piano di sgrossatura ]
|
||||
|
||||
// controllo se presente parametro di Offset radiale per superfici di supporto
|
||||
double dSuppRadOffs = 5. ;
|
||||
double dSuppRadOffsByNotes = 0. ;
|
||||
if ( GetValInNotes( m_Params.m_sUserNotes, UN_SUPP_RAD_OFFS, dSuppRadOffsByNotes) &&
|
||||
dSuppRadOffsByNotes > - EPS_ZERO)
|
||||
dSuppRadOffs = dSuppRadOffsByNotes ;
|
||||
|
||||
// creo un frame centrato sulla superficie
|
||||
Frame3d frSfr ;
|
||||
Point3d ptCenter ; pSfrSgro->GetCentroid( ptCenter) ;
|
||||
@@ -1796,9 +1802,6 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
return false ;
|
||||
}
|
||||
if ( ! IsNull( pSfrSil) && ! it->bPlaneZStep) {
|
||||
#if ENABLE_DEBUG_SFR
|
||||
DrawLoopsSurf( pSfrSil, true, Color( .1, .1, .1, .2), false, ToString( it->dDepth)) ;
|
||||
#endif
|
||||
// provo prima con un Offset Chamfer, se non funziona provo con il Fillet ( pezza da sistemare ! )
|
||||
PtrOwner<ISurfFlatRegion> pSfrSilCheck( pSfrSil->CreateOffsetSurf( GetOffsR(), ICurve::OFF_CHAMFER)) ;
|
||||
if ( IsNull( pSfrSilCheck) || ! pSfrSilCheck->IsValid()) {
|
||||
@@ -1830,18 +1833,30 @@ SurfRoughing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
return false ;
|
||||
}
|
||||
if ( ! IsNull( pSfrSil_supp)) {
|
||||
pSfrSil_supp->Offset( SUPP_SURF_RADIAL_OFFS, ICurve::OFF_CHAMFER) ; // offset radiale sulla Silhouette
|
||||
pSfr->Subtract( *pSfrSil_supp) ; // sottraggo le parti da non lavorare
|
||||
pSfrSil->Add( *pSfrSil_supp) ; // aggiungo la regione alla Silhouette
|
||||
// Offset radiale sulla Silhouette
|
||||
pSfrSil_supp->Offset( dSuppRadOffs + GetOffsR(), ICurve::OFF_CHAMFER) ;
|
||||
// Sottraggo le parti da non lavorare
|
||||
pSfr->Subtract( *pSfrSil_supp) ;
|
||||
// Aggiungo la regione alla Silhouette
|
||||
if ( ! IsNull( pSfrSil) && pSfrSil->IsValid() && pSfrSil->GetChunkCount() > 0)
|
||||
pSfrSil->Add( *pSfrSil_supp) ;
|
||||
else
|
||||
pSfrSil.Set( Release( pSfrSil_supp)) ;
|
||||
// Aggiorno la regione Ipotetica
|
||||
if ( ! IsNull( pSfrSil_Hypothetical) && pSfrSil_Hypothetical->IsValid() && pSfrSil_Hypothetical->GetChunkCount() > 0)
|
||||
pSfrSil_Hypothetical->Add( *pSfrSil_supp) ;
|
||||
else
|
||||
pSfrSil_Hypothetical.Set( Release( pSfrSil_supp)) ;
|
||||
}
|
||||
if ( ! pSfr->IsValid() || pSfr->GetChunkCount() == 0) // se superficie non valida
|
||||
continue ; // passo allo step successivo
|
||||
// Se superficie non valida, passo allo step successivo
|
||||
if ( ! pSfr->IsValid() || pSfr->GetChunkCount() == 0)
|
||||
continue ;
|
||||
}
|
||||
|
||||
// salvo la superficie rimossa
|
||||
delete( it->pSfrRemoved) ;
|
||||
it->pSfrRemoved = CloneSurfFlatRegion( pSfrRemoved_tmp) ;
|
||||
if ( pSfrSil_Hypothetical->IsValid() && pSfrSil_Hypothetical->GetChunkCount() > 0) {
|
||||
if ( ! IsNull( pSfrSil_Hypothetical) && pSfrSil_Hypothetical->IsValid() && pSfrSil_Hypothetical->GetChunkCount() > 0) {
|
||||
pSfrSil_Hypothetical->Offset( m_TParams.m_dDiam / 2, ICurve::OFF_FILLET) ; // si può ingrandire leggermente (più conservativo)
|
||||
pSfrSil_Hypothetical->Offset( - m_TParams.m_dDiam / 2, ICurve::OFF_FILLET) ;
|
||||
// la silhouette ipotetica ora ha i lati chiusi definiti dal rotalamento del tool lungo il chiuso reale
|
||||
@@ -2573,7 +2588,7 @@ SurfRoughing::GetToolCollisionRegion( const ISurfFlatRegion* pSfrSgro, double& d
|
||||
// determino la superficie di ricerca per la pulizia dei corners
|
||||
pSfrSearchCorners->Clear() ;
|
||||
pSfrSearchCorners->CopyFrom( pSfrColl) ;
|
||||
pSfrSearchCorners->Offset( m_TParams.m_dDiam + TOL_OFFS_CORNER_COLL, ICurve::OFF_FILLET) ;
|
||||
pSfrSearchCorners->Offset( 1.5 * m_TParams.m_dDiam + TOL_OFFS_CORNER_COLL, ICurve::OFF_FILLET) ;
|
||||
if ( ! pSfrSearchCorners->Intersect( *pSfrSgro))
|
||||
return false ;
|
||||
}
|
||||
@@ -2721,7 +2736,7 @@ SurfRoughing::GetSfrCornerColl( ISurfFlatRegion* pSfr, const ISurfFlatRegion* pS
|
||||
di unione dei lati aperti originali con i nuovi chiusi).
|
||||
questa funzione aggiunge delle piccole parti di regione in questi punti, evitando quindi la presenza
|
||||
di colonne di materiale non rimosso
|
||||
NB. questa parti non riguardano nè le regioni nons vuotate, nè le regioni si silhouette ipotetica
|
||||
NB. questa parti non riguardano nè le regioni non vuotate, nè le regioni di silhouette ipotetica
|
||||
*/
|
||||
|
||||
// se la superficie di collissione non è valida non faccio nulla
|
||||
@@ -2931,7 +2946,7 @@ SurfRoughing::CalcPaths( const INTINTVECTOR& vPocket, STEPINFOSRVECTOR& vStepInf
|
||||
const ISurfFlatRegion* pSfrPock = GetSurfFlatRegion( m_pGeomDB->GetGeoObj( vId.first)) ;
|
||||
if ( pSfrPock == nullptr || ! pSfrPock->IsValid())
|
||||
continue ;
|
||||
vStepInfo[nInd].pSfrPock.Set( CloneSurfFlatRegion( m_pGeomDB->GetGeoObj( vId.first))) ;
|
||||
vStepInfo[nInd].pSfrPock.Set( CloneSurfFlatRegion( pSfrPock)) ;
|
||||
// --- recupero Flag per step normale o extra ( SubStep/PlaneZ)
|
||||
string sIsExtraStep = "" ;
|
||||
bool bIsExtraStep = false ;
|
||||
|
||||
Reference in New Issue
Block a user