EgtMachKernel :

-piccola modifica.
This commit is contained in:
Riccardo Elitropi
2024-01-04 09:35:14 +01:00
parent 5975b00def
commit 3cda97534e
2 changed files with 42 additions and 9 deletions
+40 -8
View File
@@ -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
View File
@@ -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
} ;