EgtMachKernel :

- migliorie in Pocketing per zigzag ottimizzato.
This commit is contained in:
DarioS
2022-02-17 14:41:40 +01:00
parent b0cb253299
commit 0074ab9003
2 changed files with 26 additions and 11 deletions
+24 -10
View File
@@ -1950,7 +1950,7 @@ Pocketing::AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, con
// verifico se si tratta di caso ottimizzato
bool bOptimizedZigZag = false ;
bool bOutRawLeadIn = false ;
if ( ! OptimizedZigZag( nPathId, frPocket, bOptimizedZigZag, vpCrvs))
if ( ! OptimizedZigZag( nPathId, vtTool, dDepth, dSafeZ, frPocket, bOptimizedZigZag, vpCrvs))
return false ;
if ( bOptimizedZigZag && ! vpCrvs.empty()) {
nOffsCrvNbr = 1 ;
@@ -2504,7 +2504,8 @@ Pocketing::CalcZigZag( const ICurveComposite* pOffs,
//----------------------------------------------------------
bool
Pocketing::OptimizedZigZag( int nPathId, Frame3d& frPocket, bool& bOptimizedZigZag, ICRVCOMPOPOVECTOR& vpCrvs)
Pocketing::OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth, double dSafeZ,
Frame3d& frPocket, bool& bOptimizedZigZag, ICRVCOMPOPOVECTOR& vpCrvs)
{
// recupero la curva originale che delimita la svuotatura
int nCrvId = m_pGeomDB->GetFirstInGroup( nPathId) ;
@@ -2574,19 +2575,32 @@ Pocketing::OptimizedZigZag( int nPathId, Frame3d& frPocket, bool& bOptimizedZigZ
if ( nClosedSides == 1) {
// inverto il percorso
vpCrvs[0]->Invert() ;
// allungo opportunamente inizio e fine
// verifico se attacco fuori dal grezzo
Point3d ptStart ;
vpCrvs[0]->GetStartPoint( ptStart) ;
Vector3d vtDir ;
vpCrvs[0]->GetStartDir( vtDir) ;
vtDir.Rotate( Z_AX, ( m_Params.m_bInvert ? - 90 : 90)) ;
ptStart += vtDir ;
vpCrvs[0]->AddLine( ptStart, false) ;
vpCrvs[0]->ExtendEndByLen( m_TParams.m_dDiam / 4) ;
Point3d ptTest = ptStart + ( -vtDir) * ( m_TParams.m_dDiam / 2 + dSafeZ) ;
ptTest.ToGlob( frPocket) ;
ptTest += - vtTool * dDepth ;
double dTestElev ;
// se è nel grezzo provo a ruotare di 90 gradi
if ( GetElevation( m_nPhase, ptTest, vtTool, m_TParams.m_dDiam / 2, vtTool, dTestElev) && dTestElev > EPS_SMALL) {
Vector3d vtDirO = vtDir ;
vtDirO.Rotate( Z_AX, ( m_Params.m_bInvert ? -90 : 90)) ;
Point3d ptTestO = ptStart + vtDirO * ( m_TParams.m_dDiam / 2 + dSafeZ) ;
ptTestO.ToGlob( frPocket) ;
ptTestO += - vtTool * dDepth ;
double dTestElevO ;
// se è fuori dal grezzo uso inizio ruotato
if ( ! GetElevation( m_nPhase, ptTestO, vtTool, m_TParams.m_dDiam / 2, vtTool, dTestElevO) || dTestElevO < EPS_SMALL) {
Point3d ptNewStart = ptStart + vtDirO ;
vpCrvs[0]->AddLine( ptNewStart, false) ;
}
}
}
// se due lati chiusi consecutivi o tre lati chiusi...
if (( nClosedSides == 2 && ! bTwoOpposite) || nClosedSides == 3) {
else if ( ( nClosedSides == 2 && ! bTwoOpposite) || nClosedSides == 3) {
// inverto il percorso
vpCrvs[0]->Invert() ;
// allungo opportunamente inizio e fine
@@ -2594,7 +2608,7 @@ Pocketing::OptimizedZigZag( int nPathId, Frame3d& frPocket, bool& bOptimizedZigZ
vpCrvs[0]->GetStartPoint( ptStart) ;
Vector3d vtDir ;
vpCrvs[0]->GetStartDir( vtDir) ;
vtDir.Rotate( Z_AX, ( m_Params.m_bInvert ? - 90 : 90)) ;
vtDir.Rotate( Z_AX, ( m_Params.m_bInvert ? -90 : 90)) ;
ptStart += vtDir ;
Point3d ptEnd ;
vpCrvs[0]->GetEndPoint( ptEnd) ;
+2 -1
View File
@@ -78,7 +78,8 @@ class Pocketing : public Machining
bool AddZigZag( const ICurveComposite* pCompo, const Vector3d& vtTool, const Vector3d& vtExtr,
double dDepth, double dElev, double dOkStep, bool bSplitArcs, int nPathId) ;
bool CalcZigZag( const ICurveComposite* pOffs, ICRVCOMPOPOVECTOR& vpCrvs) ;
bool OptimizedZigZag( int nPathId, Frame3d& frPocket, bool& bOptimizedZigZag, ICRVCOMPOPOVECTOR& vpCrvs) ;
bool OptimizedZigZag( int nPathId, const Vector3d& vtTool, double dDepth, double dSafeZ,
Frame3d& frPocket, bool& bOptimizedZigZag, ICRVCOMPOPOVECTOR& vpCrvs) ;
bool ZigZagOptimizedNoClosedEdges( ICurveComposite* pCrvPocket, bool& bOptimizedZigZag) ;
bool ZigZagOptimizedOneClosedEdge( ICurveComposite* pCrvPocket, int nClosedId, bool& bOptimizedZigZag) ;
bool ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INTVECTOR& vnClosedIds, bool& bOptimizedZigZag, bool& bOpposite) ;