diff --git a/PocketingNT.cpp b/PocketingNT.cpp index ef610b8..07e128b 100644 --- a/PocketingNT.cpp +++ b/PocketingNT.cpp @@ -1226,7 +1226,6 @@ PocketingNT::AdjustCurvesByStmTopology( const ISurfTriMesh* pSurf, const Frame3d ICRVCOMPOPOVECTOR vpCrvs ; GetHomogeneousParts( pCrvCompo, vpCrvs) ; // scorro i tratti alla ricerca di lati aperti - bool bOpenCrvInPart = false ; for ( int i = 0 ; i < int( vpCrvs.size()) ; ++ i) { if ( vpCrvs[i]->GetTempProp( 0) == TEMP_PROP_OPEN_EDGE) { // analizzo le sottocurve del tratto @@ -1402,6 +1401,32 @@ PocketingNT::AdjustCurvesByStmTopology( const ISurfTriMesh* pSurf, const Frame3d m_pGeomDB->SetMaterial( nId, LIME) ; #endif + // se la nuova superficie ricavata contiene un tratto chiuso, allora non faccio nulla + // ( Esempio di una tasca inclinata con gradini ) + const double OFFSET_FOR_CLOSE = 1. ; // euristico + PtrOwner pSfrVol_Clone( pSfrVol->CreateOffsetSurf( - OFFSET_FOR_CLOSE, ICurve::OFF_FILLET)) ; + if ( IsNull( pSfrVol_Clone)) + return false ; + for ( int i = 0 ; i < int( vCrvCompo.size()) ; ++ i) { + ICRVCOMPOPOVECTOR vpCrvs ; + GetHomogeneousParts( vCrvCompo[i], vpCrvs) ; + for ( int j = 0 ; j < int( vpCrvs.size()) ; ++ j) { + if ( vpCrvs[j]->GetTempProp( 0) == TEMP_PROP_CLOSE_EDGE) { + CRVCVECTOR ccClass ; + if ( pSfrVol_Clone->GetCurveClassification( *vpCrvs[j], EPS_SMALL, ccClass)) { + for ( int k = 0 ; k < int( ccClass.size()) ; ++ k) { + if ( ccClass[k].nClass != CRVC_OUT) { + // non estendo la superficie in quanto rovina il grezzo adiacente ad un chiuso + return true ; + } + } + } + else + return false ; + } + } + } + // definisco i lati aperti della nuova regione da svuotare // --- i lati aperti sono quelli in comune con la proiezione del grezzo for ( auto& pCrv : lstPC) @@ -1576,7 +1601,7 @@ PocketingNT::GetCurves( const SelData& Id, const ISurfTriMesh* pStmRaw, const IS if ( ! pSurf->GetFacetsContact( nFacet, nFlag, bAdjac, ptP1, ptP2, dAng)) dAng = - ANG_RIGHT ; if ( dAng > - EPS_ANG_SMALL) - pCrvCompo->SetCurveTempProp( nInd, 1) ; + pCrvCompo->SetCurveTempProp( nInd, TEMP_PROP_OPEN_EDGE) ; } // passo al successivo ++ nInd ;