EgtMachKernel :
- migliorie in Pocketing per zigzag ottimizzato.
This commit is contained in:
+24
-10
@@ -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
@@ -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) ;
|
||||
|
||||
Reference in New Issue
Block a user