EgtMachKernel :
- in calcPocketing, migliorata la gestione di superfici con isole sia aperte che chiuse, gestito caso di circonferenza tutta aperta e modifica del parametro MinSafe.
This commit is contained in:
+18
-5
@@ -51,7 +51,7 @@ struct PocketParams {
|
||||
double dRadialOffset = 0. ; // offset radiale
|
||||
double dRadialOffset_prec = -1. ; // offset radiale precedente
|
||||
double dOpenEdgeRad = 0. ; // massimo raggio per estensione lati aperti
|
||||
double dOpenMinSafe = 2. ; // estensione minima di sicurezza
|
||||
double dOpenMinSafe = 5. ; // estensione minima di sicurezza
|
||||
double dMaxOptSize = 0. ; // dimensione per ottimizzazione
|
||||
double dAngle = 0. ; // angolo per orientare le passate OneWay e ZigZag
|
||||
bool bOptOffsets = true ; // flag per evitare Offset non necessari in SpiralIn/Out
|
||||
@@ -1858,7 +1858,7 @@ AdjustOpenCurves( ICRVCOMPOPOVECTOR& vCrvCompo, const PocketParams& PockParams,
|
||||
Point3d ptStart ; vCrvCompo[i]->GetStartPoint( ptStart) ;
|
||||
Vector3d vtStart ; vCrvCompo[i]->GetStartDir( vtStart) ;
|
||||
// recupero il punto di caduta dell'utensile
|
||||
Point3d ptFall = ptStart - vtStart * ( 2 * PockParams.dRad + PockParams.dOpenMinSafe) ;
|
||||
Point3d ptFall = ptStart - vtStart * ( PockParams.dRad + PockParams.dOpenMinSafe) ;
|
||||
// controllo che il tool non sia interno alla regione limite
|
||||
bool bAllowLeadIn = ( ! pSfrLimit->IsValid()) ;
|
||||
if ( ! bAllowLeadIn) {
|
||||
@@ -1872,7 +1872,7 @@ AdjustOpenCurves( ICRVCOMPOPOVECTOR& vCrvCompo, const PocketParams& PockParams,
|
||||
// se esiste intersezione con la limite Offsettata, provo a ruotare di 90° il tratto lineare
|
||||
if ( ! bAllowLeadIn) {
|
||||
vtStart.Rotate( Z_AX, PockParams.bInvert ? - ANG_RIGHT : ANG_RIGHT) ;
|
||||
ptFall = ptStart + vtStart * ( 2 * PockParams.dRad + PockParams.dOpenMinSafe) ;
|
||||
ptFall = ptStart + vtStart * ( PockParams.dRad + PockParams.dOpenMinSafe) ;
|
||||
if ( ! pCrvToolShape->Set( ptFall, Z_AX, PockParams.dRad - 100 * EPS_SMALL))
|
||||
return false ;
|
||||
ccClass.clear() ;
|
||||
@@ -2208,8 +2208,13 @@ ModifySurfByOpenEdges( ISurfFlatRegion* pSfr, PocketParams& PockParams, ICRVCOMP
|
||||
if ( dMaxOffs < 2 * PockParams.dRad + 2 * PockParams.dRadialOffset)
|
||||
continue ;
|
||||
// altrimenti, estendo l'isola aperta
|
||||
ICRVCOMPOPOVECTOR vCrvExtLoop ; vCrvExtLoop.emplace_back( pCrvEL->Clone()) ;
|
||||
if ( ! AdjustContourWithOpenEdges( pCrvIsl, vCrvExtLoop, PockParams))
|
||||
ICRVCOMPOPOVECTOR vCrvOther ;
|
||||
vCrvOther.emplace_back( pCrvEL->Clone()) ;
|
||||
for ( int nII = 0 ; nII < int( vCrvIsl.size()) ; ++ nII) {
|
||||
if ( nII != nI)
|
||||
vCrvOther.emplace_back( vCrvIsl[nII]->Clone()) ;
|
||||
}
|
||||
if ( ! AdjustContourWithOpenEdges( pCrvIsl, vCrvOther, PockParams))
|
||||
return false ;
|
||||
bIsChunkModified = true ;
|
||||
}
|
||||
@@ -6187,6 +6192,14 @@ CalcSpiral( const ISurfFlatRegion* pSrfPock, const PocketParams& PockParams, int
|
||||
bool bOk = CalcCircleSpiral( ptCen, vtN, dRad - dOffs, dIntRad, PockParams, pMCrv, pRCrv) ;
|
||||
if ( bOk) {
|
||||
pMCrv->GetStartPoint( ptStart) ;
|
||||
for ( int u = 0 ; u < pCrvBorder->GetCurveCount() ; ++ u) {
|
||||
if ( pCrvBorder->GetCurve( u)->GetTempProp( 0) == TEMP_PROP_OPEN_EDGE) {
|
||||
bMidOut = true ;
|
||||
pMCrv->GetStartDir( vtMidOut) ;
|
||||
vtMidOut.Rotate( pSrfPock->GetNormVersor(), PockParams.bInvert ? ANG_RIGHT : - ANG_RIGHT) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
nReg = 1 ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user