EgtMachKernel :
- in Finitura di superficie rimozione parametro Offset radiale per considerazione sulla curva di bordo.
This commit is contained in:
+19
-5
@@ -1988,7 +1988,7 @@ SurfFinishing::ProcessSfr( int nPathId, int nPvId, int nClId)
|
||||
}
|
||||
|
||||
// alla regione di contorno applico un Offset stabilito dal parametro di Overlap
|
||||
if ( ! pSfrCnt->Offset( m_Params.m_dOverlap + GetOffsR(), ICurve::OFF_FILLET)) {
|
||||
if ( ! pSfrCnt->Offset( m_Params.m_dOverlap, ICurve::OFF_FILLET)) {
|
||||
m_pMchMgr->SetLastError( 3124, "Error in SurfFinishing : region not computable") ;
|
||||
return false ;
|
||||
}
|
||||
@@ -2016,10 +2016,6 @@ SurfFinishing::ProcessSfr( int nPathId, int nPvId, int nClId)
|
||||
// se non valida, non faccio nulla
|
||||
if ( ! pSfrMaxDown->IsValid())
|
||||
return true ;
|
||||
// questa regione deve essere lavorata a SideStep
|
||||
double dSideStepLowerBound = max( 0.5, m_Params.m_dSideStep) ; // per tolleranza di campionamento
|
||||
if ( ! pSfrMaxDown->Offset( m_TParams.m_dDiam - dSideStepLowerBound + GetOffsR(), ICurve::OFF_FILLET))
|
||||
return false ;
|
||||
// la regione la lavorare è l'intersezione tra quest'ultima e il contorno
|
||||
pSfrCnt->Intersect( *pSfrMaxDown) ;
|
||||
}
|
||||
@@ -5990,6 +5986,13 @@ SurfFinishing::CalcOptimalZigZagRegion( const ISurfFlatRegion* pSfrCntLoc, const
|
||||
}
|
||||
|
||||
// Definisco una Zuppa di Triangoli per le facce entro la tolleranza
|
||||
#if ENABLE_OPTIMAL_DEBUG
|
||||
int nGrp = m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, GLOB_FRM) ;
|
||||
m_pGeomDB->SetName( nGrp, "SplitAngleSurf") ;
|
||||
m_pGeomDB->SetStatus( nGrp, GDB_ST_OFF) ;
|
||||
int nLay = m_pGeomDB->AddGroup( GDB_ID_NULL, nGrp, GLOB_FRM) ;
|
||||
m_pGeomDB->SetName( nLay, "SplitAngleSurf") ;
|
||||
#endif
|
||||
StmFromTriangleSoup StmSoup ;
|
||||
StmSoup.Start() ;
|
||||
for ( const ISurfTriMesh* pStm : vpStm) {
|
||||
@@ -5998,13 +6001,24 @@ SurfFinishing::CalcOptimalZigZagRegion( const ISurfFlatRegion* pSfrCntLoc, const
|
||||
// scorro le faccie della superficie e controllo l'angolo presente
|
||||
for ( int nF = 0 ; nF < pStm->GetFacetCount() ; ++ nF) {
|
||||
Vector3d vtFaceN ; pStm->GetFacetNormal( nF, vtFaceN) ;
|
||||
#if ENABLE_OPTIMAL_DEBUG
|
||||
int nId = m_pGeomDB->AddGeoObj( GDB_ID_NULL, nLay, pStm->CloneFacet( nF)) ;
|
||||
#endif
|
||||
if ( vtFaceN * vtToolLoc > COS_SPLIT_ANG) {
|
||||
#if ENABLE_OPTIMAL_DEBUG
|
||||
m_pGeomDB->SetMaterial( nId, LIME) ;
|
||||
#endif
|
||||
INTVECTOR vnTria ; pStm->GetAllTriaInFacet( nF, vnTria) ;
|
||||
for ( const int& nT : vnTria) {
|
||||
Triangle3d Tria ; pStm->GetTriangle( nT, Tria) ;
|
||||
StmSoup.AddTriangle( Tria) ;
|
||||
}
|
||||
}
|
||||
else {
|
||||
#if ENABLE_OPTIMAL_DEBUG
|
||||
m_pGeomDB->SetMaterial( nId, BLACK) ;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
StmSoup.End() ;
|
||||
|
||||
Reference in New Issue
Block a user