EgtMachKernel :
-piccola modifica.
This commit is contained in:
+40
-8
@@ -2052,7 +2052,6 @@ Pocketing::AdjustPocketingSideForVolumePart( ISurfTriMesh* pStmVolPart, const Ve
|
||||
bool
|
||||
Pocketing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
{
|
||||
|
||||
// recupero gruppo per geometria temporanea ( Gruppo Temp)
|
||||
const string GRP_TEMP = "Temp" ;
|
||||
int nTempId = m_pGeomDB->GetFirstNameInGroup( m_nOwnerId, GRP_TEMP) ;
|
||||
@@ -2105,7 +2104,7 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
if ( ! AdjustPocketingSideForVolumePart( pStm_PartVolume, vtTool))
|
||||
return false ;
|
||||
|
||||
// devo calcolare l'Elevazione...
|
||||
// devo calcolare l'Elevazione... ( devo tenere conto del grezzo, non solo della parte)
|
||||
Frame3d frElevation ;
|
||||
frElevation.Set( ptC, vtTool) ;
|
||||
if ( ! frElevation.IsValid())
|
||||
@@ -2113,11 +2112,39 @@ Pocketing::ProcessPath( int nPathId, int nPvId, int nClId)
|
||||
pStm_PartVolume->ToLoc( frElevation) ;
|
||||
// ricavo quindi il Box
|
||||
BBox3d BBox ; pStm_PartVolume->GetLocalBBox( BBox) ;
|
||||
// il su cui iniziare a svuotare è quello che si trova a Z minima
|
||||
// il piano su cui iniziare a svuotare è quello che si trova a Z minima
|
||||
double dZ_min = BBox.GetMin().z ;
|
||||
// riporto in globale
|
||||
pStm_PartVolume->ToGlob( frElevation) ;
|
||||
// calcolo l'elevazione massima ( è la lunghezza Z del Box con asse Z uguale a vtTool)
|
||||
double dElev = BBox.GetDimZ() ;
|
||||
// calcolo l'elevazione massima su ogni faccia del volume con normale circa - vtTool ( il volume è interno)
|
||||
double dElev = 0. ;
|
||||
pStm_PartVolume->Invert() ; // ho curve e normali orientate correttamente
|
||||
for ( int i = 0 ; i < pStm_PartVolume->GetFacetCount() ; ++ i) {
|
||||
Vector3d vtN_f ;
|
||||
if ( ! pStm_PartVolume->GetFacetNormal( i, vtN_f))
|
||||
return false ;
|
||||
if ( ! AreSameVectorEpsilon( vtTool, vtN_f, 5 * EPS_SMALL))
|
||||
continue ;
|
||||
// ricavo le polyLine di bordo
|
||||
POLYLINEVECTOR vPL ;
|
||||
if ( ! pStm_PartVolume->GetFacetLoops( i, vPL) ||
|
||||
vPL.empty())
|
||||
return false ;
|
||||
// ricavo le curve Composite associate e calcolo l'elevazione
|
||||
for ( int j = 0 ; j < int( vPL.size()) ; ++ j) {
|
||||
PtrOwner<ICurveComposite> pCompo( CreateCurveComposite()) ;
|
||||
double dCurrElev = 0. ;
|
||||
if ( IsNull( pCompo) ||
|
||||
! pCompo->FromPolyLine( vPL[j]) ||
|
||||
! pCompo->IsValid() ||
|
||||
! CalcRegionElevation( pCompo, vtTool, 0.,
|
||||
0.5 * ( m_dDiam_Prec > 0 ? m_dDiam_Prec : m_TParams.m_dDiam),
|
||||
m_dLen_Prec > 0 ? m_dLen_Prec : m_TParams.m_dLen, dCurrElev))
|
||||
return false ;
|
||||
dElev = max( dElev, dCurrElev) ;
|
||||
}
|
||||
}
|
||||
pStm_PartVolume->Invert() ; // riporto come in orginale
|
||||
// eventuale imposizione massima elevazione da note utente
|
||||
double dMaxElev ;
|
||||
if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxElev="), dMaxElev) && dElev > dMaxElev)
|
||||
@@ -3317,7 +3344,7 @@ Pocketing::CalcRegionElevation( const ICurveComposite* pCompo, const Vector3d& v
|
||||
// ordino il vettore secondo l'elevazione crescente
|
||||
sort( vRawElev.begin(), vRawElev.end(), []( const INTDBL& a, const INTDBL& b)
|
||||
{ return a.second < b.second ; }) ;
|
||||
// box dell'insieme delle posizioni utensile all'inizioe
|
||||
// box dell'insieme delle posizioni utensile all'inizio
|
||||
const double MAX_DIST_RAW = 200.0 ;
|
||||
BBox3d b3Tool ;
|
||||
pgFacet.GetLocalBBox( b3Tool) ;
|
||||
@@ -9377,8 +9404,13 @@ Pocketing::AdjustOpenEdge( const ICurveComposite* pCrvCompo, const ICRVCOMPOPOVE
|
||||
// L'algoritmo di allargamento presso i lati aperti è Euristico; io mi estendo a seconda della geometria del
|
||||
// lato aperto al di fuori del volume di svuotatura... Devo controllare di non rovinare delle zone al di fuori di
|
||||
// esso !
|
||||
if ( ! pSfrInc->Subtract( *pSfrLimit))
|
||||
return false ;
|
||||
|
||||
m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSfrInc->Clone()) ;
|
||||
m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSfrLimit->Clone()) ;
|
||||
|
||||
if ( pSfrLimit->IsValid())
|
||||
if ( ! pSfrInc->Subtract( *pSfrLimit))
|
||||
return false ;
|
||||
|
||||
// controllo se la curva è un'isola
|
||||
bool bIsIsland = false ;
|
||||
|
||||
+2
-1
@@ -317,7 +317,8 @@ class Pocketing : public Machining
|
||||
double m_dDiam_Prec = 0.0 ; // diametro utensile per precedente svuotatura
|
||||
double m_dOffsetR_Prec = 0.0 ; // offset radiale della svuotatura precedente
|
||||
double m_dSideStep_Prec = 0.0 ; // side Step della svuotatura precedente
|
||||
double m_dLen_Prec = 0.0 ; // Lunghezza del tool precedente
|
||||
bool m_bOrderStepZ = true ; // parametro per ordinare gli step Extra per Z decrescente o meno
|
||||
bool m_bPocketPlane = true ; // flag per svuotare solo la rimanenza sullo Step Extra
|
||||
bool m_bPocketPlane = false ; // flag per svuotare solo la rimanenza sullo Step Extra
|
||||
|
||||
} ;
|
||||
Reference in New Issue
Block a user