diff --git a/CalcPocketing.cpp b/CalcPocketing.cpp index 8e0baa2..fc1d346 100644 --- a/CalcPocketing.cpp +++ b/CalcPocketing.cpp @@ -7361,10 +7361,10 @@ CalcConformalLink( ICurveComposite* pCrvOffs0, ICurveComposite* pCrvOffs1, Pocke vCrvChunk.emplace_back( vCrvClassBorder[vIndOffs0[i]]->Clone()) ; // se la curva successiva รจ chiusa, aggiorno il suo punto iniziale a quello a minima distanza if ( ! bOpen1) { - Point3d ptS ; pCrvOffs0->GetStartPoint( ptS) ; + Point3d ptE ; pCrvOffs0->GetEndPoint( ptE) ; double dPar ; int nFlag ; - if ( DistPointCurve( ptS, *pCrvOffs1).GetParamAtMinDistPoint( 0., dPar, nFlag)) + if ( DistPointCurve( ptE, *pCrvOffs1).GetParamAtMinDistPoint( 0., dPar, nFlag)) pCrvOffs1->ChangeStartPoint( dPar) ; } if ( ! CutCurveToConnect( pCrvOffs0, pCrvOffs1, vCrvChunk, PockParams, @@ -7810,13 +7810,27 @@ CalcConformalOffsAndLinks( VICRVCOMPOPOVECTOR& vvCrvOffs, const ISurfFlatRegion* I link che collegano due curve di Offset aperte devono partire dalla prima e, seguendo il bordo della regione di classificazione ( pSfrClass) arrivare alla seconda. */ + /* NB. + La regione di classificazione ( pSfrClass) deve tenere conto della regione limite; nel caso di + bordi chiusi, bisogna stare a distanza opportuna da essi, non raccordandoci i Links + */ /* NB. I link che collegano due curve di Offset chiuse tra di loro vengono calcolati esattamente come per i percorsi SPIRAL, pertanto devo definire un insieme di curve di primo Offset sui quali smussare i Link per evitare di uscire dalla regione di svuotatura */ ICRVCOMPOPOVECTOR vCrvSfrClass ; - if ( ! GetSfrCrvCompoLoops( pSfrClass, vCrvSfrClass)) + PtrOwner pSfrClassReal( CloneSurfFlatRegion( pSfrClass)) ; + if ( IsNull( pSfrClassReal) || ! pSfrClassReal->IsValid()) + return false ; + if ( PockParams.SfrLimit.IsValid()) { + PtrOwner pSfrLimit( CloneSurfFlatRegion( &PockParams.SfrLimit)) ; + if ( IsNull( pSfrLimit) || ! pSfrLimit->IsValid() || + ! pSfrLimit->Offset( PockParams.dRad + PockParams.dRadialOffset, ICurve::OFF_FILLET) || + ! pSfrClassReal->Subtract( *pSfrLimit)) + return false ; + } + if ( ! GetSfrCrvCompoLoops( pSfrClassReal, vCrvSfrClass)) return false ; /* NB.