diff --git a/SurfFinishing.cpp b/SurfFinishing.cpp index 153c117..8ea730d 100644 --- a/SurfFinishing.cpp +++ b/SurfFinishing.cpp @@ -3666,7 +3666,7 @@ SurfFinishing::AddOptimal( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSr if ( IsNull( pSfrToWork) || ! pSfrToWork->IsValid()) return false ; // Offset - if ( ! pSfrToWork->Offset( dPockRadOffs, ICurve::OFF_FILLET)) + if ( ! pSfrToWork->Offset( dPockRadOffs + m_Params.m_dSideStep, ICurve::OFF_FILLET)) return false ; // imposto i lati chiusi for ( int nCC = 0 ; nCC < pSfrToWork->GetChunkCount() ; ++ nCC) { @@ -3746,8 +3746,12 @@ SurfFinishing::AddOptimal( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& vSr // ----------------------- Lavorazione Zconst ------------------------------- if ( ! IsNull( pSfrZConst) && pSfrZConst->IsValid()) { + // recupero dai parametri eventuale Offset di sovrapposizione per ZConst + double dZConstOverlap = m_TParams.m_dDiam / 2 ; + if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "ZConstOverlap="), dZConstOverlap)) + dZConstOverlap = Clamp( dZConstOverlap, 0., m_TParams.m_dDiam / 2) ; // mi assicuro di non uscire dalla superficie originale - pSfrZConst->Offset( m_Params.m_dSideStep, ICurve::OFF_FILLET) ; + pSfrZConst->Offset( m_Params.m_dSideStep + dZConstOverlap, ICurve::OFF_FILLET) ; pSfrZConst->Intersect( *pSfr) ; // lavoro ogni singolo Chunk singolarmente ( non estendo lati aperti per eveitare merge con gli stessi Chunks) for ( int nC = 0 ; nC < pSfrZConst->GetChunkCount() ; ++ nC) { @@ -4013,8 +4017,8 @@ SurfFinishing::AddProjection( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& // definisco variabili globali BBox3d BBox3Loc ; // box totale delle superici rispetto a frLoc - CISURFTMPVECTOR vpStm ; // superfici TriMesh selezionate in globale - ICRVCOMPOPVECTOR vCrvToProj ; // vettore delle curve da proiettare sulla superfcie + ISURFTMPOVECTOR vpStm ; // superfici TriMesh selezionate in globale + ICRVCOMPOPOVECTOR vCrvToProj ; // vettore delle curve da proiettare sulla superficie // scorro il vettore di superfici selezionate for ( int i = 0 ; i < int( vSrfLoc.size()) ; ++ i) { @@ -4037,8 +4041,11 @@ SurfFinishing::AddProjection( ICAvToolSurfTm* pCAvTlStm, const SURFLOCALVECTOR& if ( bSkipMaxDown) { // definisco i dati di calcolo della Silhouette const double SILH_TOL = 1.0 ; + CISURFTMPVECTOR vSurf ; vSurf.reserve( vpStm.size()) ; + for ( int i = 0; i < int( vpStm.size()) ; ++ i) + vSurf.emplace_back( vpStm[i]) ; PtrOwner pCavParSilh( CreateCAvParSilhouettesSurfTm()) ; - if ( IsNull( pCavParSilh) || ! pCavParSilh->SetData( vpStm, frLoc, SILH_TOL)) + if ( IsNull( pCavParSilh) || ! pCavParSilh->SetData( vSurf, frLoc, SILH_TOL)) return false ; // recupero il vettore di PolyLine della silhouette POLYLINEVECTOR vPL ; diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index acce904..5178971 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -2053,7 +2053,7 @@ ISurfFlatRegion* SurfRoughing::GetSfrByStmIntersection( const IntersParPlanesSurfTm& IPPStm, double dDist, double dSmallOffs) const { // interseco la superficie alla quota corrente - PNTVECTOR vPnt ; + PNTVECTOR vPnt ; BIPNTVECTOR vBpt ; TRIA3DVECTOR vTria ; if ( ! IPPStm.GetInters( dDist, vPnt, vBpt, vTria)) @@ -2064,7 +2064,7 @@ SurfRoughing::GetSfrByStmIntersection( const IntersParPlanesSurfTm& IPPStm, doub return CreateSurfFlatRegion() ; // definisco la tolleranza per i concatenamenti - double dToler = EPS_SMALL ; + double dToler = 10 * EPS_SMALL ; // costruisco la FlatRegion da ritornare SurfFlatRegionByContours SfrByC ; @@ -2109,10 +2109,8 @@ SurfRoughing::GetSfrByStmIntersection( const IntersParPlanesSurfTm& IPPStm, doub continue ; // se curva chiusa entro 5 volte la tolleranza ma considerata aperta, la chiudo bene Point3d ptStart, ptEnd ; - if ( pCrvCompo->GetStartPoint( ptStart) && - pCrvCompo->GetEndPoint( ptEnd) && - AreSamePointEpsilon( ptStart, ptEnd, 5. * dToler) && - ! AreSamePointApprox( ptStart, ptEnd)) { + if ( pCrvCompo->GetStartPoint( ptStart) && pCrvCompo->GetEndPoint( ptEnd) && + AreSamePointEpsilon( ptStart, ptEnd, 5. * dToler) && ! AreSamePointApprox( ptStart, ptEnd)) { // porto il punto finale a coincidere esattamente con l'inizio pCrvCompo->ModifyEnd( ptStart) ; }