EgtMachKernel 2.4b3 :
- altre modifiche a svuotature zigzag ottimizzate.
This commit is contained in:
Binary file not shown.
+30
-20
@@ -2611,7 +2611,7 @@ Pocketing::OptimizedZigZag( int nPathId, Frame3d& frPocket, bool& bOptimizedZigZ
|
||||
bool
|
||||
Pocketing::ZigZagOptimizedOneClosedEdge( ICurveComposite* pCrvPocket, int nClosedId, bool& bOptimizedZigZag)
|
||||
{
|
||||
// verifico sia una linea
|
||||
// verifico che il lato chiuso sia una linea
|
||||
PtrOwner<ICurveLine> pCrv( CloneCurveLine( pCrvPocket->GetCurve( nClosedId))) ;
|
||||
if ( IsNull( pCrv))
|
||||
return true ;
|
||||
@@ -2621,7 +2621,7 @@ Pocketing::ZigZagOptimizedOneClosedEdge( ICurveComposite* pCrvPocket, int nClose
|
||||
pCrvPocket->GetExtrusion( vtExtr) ;
|
||||
pCrv->SetExtrusion( vtExtr) ;
|
||||
|
||||
pCrv->SimpleOffset( - m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv->SimpleOffset( -m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv->ExtendStartByLen( 100) ;
|
||||
pCrv->ExtendEndByLen( 100) ;
|
||||
|
||||
@@ -2637,10 +2637,9 @@ Pocketing::ZigZagOptimizedOneClosedEdge( ICurveComposite* pCrvPocket, int nClose
|
||||
bool
|
||||
Pocketing::ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INTVECTOR& vnClosedIds, bool& bOptimizedZigZag, bool& bOpposite)
|
||||
{
|
||||
// recupero le due curve chiuse
|
||||
// verifico che i lati chiusi siano linee
|
||||
PtrOwner<ICurveLine> pCrv1( CloneCurveLine( pCrvPocket->GetCurve( vnClosedIds[0]))) ;
|
||||
PtrOwner<ICurveLine> pCrv2( CloneCurveLine( pCrvPocket->GetCurve( vnClosedIds[1]))) ;
|
||||
// verifico siano linee
|
||||
if ( IsNull( pCrv1) || IsNull( pCrv2))
|
||||
return true ;
|
||||
// verifico abbiano direzioni opposte
|
||||
@@ -2677,19 +2676,17 @@ Pocketing::ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INT
|
||||
|
||||
// taglio per ultima la curva più lunga
|
||||
if ( dLen1 > dLen2) {
|
||||
PtrOwner<ICurveLine> pTmp( Release( pCrv1)) ;
|
||||
pCrv1.Set( Release( pCrv2)) ;
|
||||
pCrv2.Set( Release( pTmp)) ;
|
||||
swap( pCrv1, pCrv2) ;
|
||||
}
|
||||
|
||||
pCrv1->SimpleOffset( - m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv1->SimpleOffset( -m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv1->ExtendStartByLen( 100) ;
|
||||
pCrv1->ExtendEndByLen( 100) ;
|
||||
if ( ! CutCurveWithLine( pCrvPocket, pCrv1))
|
||||
return false ;
|
||||
|
||||
// sarà la prima curva del percorso
|
||||
pCrv2->SimpleOffset( - m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv2->SimpleOffset( -m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv2->ExtendStartByLen( 100) ;
|
||||
pCrv2->ExtendEndByLen( 100) ;
|
||||
if ( ! CutCurveWithLine( pCrvPocket, pCrv2))
|
||||
@@ -2703,14 +2700,15 @@ Pocketing::ZigZagOptimizedTwoClosedEdges( ICurveComposite* pCrvPocket, const INT
|
||||
bool
|
||||
Pocketing::ZigZagOptimizedThreeClosedEdges( ICurveComposite* pCrvPocket, const INTVECTOR& vnClosedIds, bool& bOptimizedZigZag)
|
||||
{
|
||||
// recupero le tre curve chiuse
|
||||
// verifico che i lati chiusi siano linee
|
||||
PtrOwner<ICurveLine> pCrv1( CloneCurveLine( pCrvPocket->GetCurve( vnClosedIds[0]))) ;
|
||||
PtrOwner<ICurveLine> pCrv2( CloneCurveLine( pCrvPocket->GetCurve( vnClosedIds[1]))) ;
|
||||
PtrOwner<ICurveLine> pCrv3( CloneCurveLine( pCrvPocket->GetCurve( vnClosedIds[2]))) ;
|
||||
// verifico siano linee
|
||||
if ( IsNull( pCrv1) || IsNull( pCrv2) || IsNull( pCrv3))
|
||||
return true ;
|
||||
// verifico siano consecutive
|
||||
// verifico siano consecutivi
|
||||
Point3d ptStart1 ;
|
||||
pCrv1->GetStartPoint( ptStart1) ;
|
||||
Point3d ptEnd1 ;
|
||||
pCrv1->GetEndPoint( ptEnd1) ;
|
||||
Point3d ptStart2 ;
|
||||
@@ -2719,14 +2717,26 @@ Pocketing::ZigZagOptimizedThreeClosedEdges( ICurveComposite* pCrvPocket, const I
|
||||
pCrv2->GetEndPoint( ptEnd2) ;
|
||||
Point3d ptStart3 ;
|
||||
pCrv3->GetStartPoint( ptStart3) ;
|
||||
if ( ! AreSamePointApprox( ptEnd1, ptStart2) || ! AreSamePointApprox( ptEnd2, ptStart3))
|
||||
Point3d ptEnd3 ;
|
||||
pCrv3->GetEndPoint( ptEnd3) ;
|
||||
if ( AreSamePointApprox( ptEnd1, ptStart2) && AreSamePointApprox( ptEnd2, ptStart3))
|
||||
;
|
||||
else if ( AreSamePointApprox( ptEnd2, ptStart3) && AreSamePointApprox( ptEnd3, ptStart1)) {
|
||||
swap( pCrv1, pCrv2) ;
|
||||
swap( pCrv2, pCrv3) ;
|
||||
}
|
||||
else if ( AreSamePointApprox( ptEnd3, ptStart1) && AreSamePointApprox( ptEnd1, ptStart2)) {
|
||||
swap( pCrv1, pCrv3) ;
|
||||
swap( pCrv3, pCrv2) ;
|
||||
}
|
||||
else
|
||||
return true ;
|
||||
// verifico che primo e terzo non siano troppo lunghe
|
||||
// verifico che primo e terzo non siano troppo lunghi
|
||||
double dLen1 ;
|
||||
pCrv1->GetLength( dLen1) ;
|
||||
double dLen2 ;
|
||||
pCrv2->GetLength( dLen2) ;
|
||||
if ( dLen1 > 1.5 * m_TParams.m_dDiam || dLen2 > 1.5 * m_TParams.m_dDiam)
|
||||
double dLen3 ;
|
||||
pCrv3->GetLength( dLen3) ;
|
||||
if ( dLen1 > 1.5 * m_TParams.m_dDiam || dLen3 > 1.5 * m_TParams.m_dDiam)
|
||||
return true ;
|
||||
|
||||
// setto il vettore estrusione per eseguire correttamente offset
|
||||
@@ -2736,20 +2746,20 @@ Pocketing::ZigZagOptimizedThreeClosedEdges( ICurveComposite* pCrvPocket, const I
|
||||
pCrv2->SetExtrusion( vtExtr) ;
|
||||
pCrv3->SetExtrusion( vtExtr) ;
|
||||
|
||||
pCrv1->SimpleOffset( - m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv1->SimpleOffset( -m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv1->ExtendStartByLen( 100) ;
|
||||
pCrv1->ExtendEndByLen( 100) ;
|
||||
if ( ! CutCurveWithLine( pCrvPocket, pCrv1))
|
||||
return false ;
|
||||
|
||||
pCrv3->SimpleOffset( - m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv3->SimpleOffset( -m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv3->ExtendStartByLen( 100) ;
|
||||
pCrv3->ExtendEndByLen( 100) ;
|
||||
if ( ! CutCurveWithLine( pCrvPocket, pCrv3))
|
||||
return false ;
|
||||
|
||||
// sarà la prima curva del percorso
|
||||
pCrv2->SimpleOffset( - m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv2->SimpleOffset( -m_TParams.m_dDiam / 2 + 10 * EPS_SMALL) ;
|
||||
pCrv2->ExtendStartByLen( 100) ;
|
||||
pCrv2->ExtendEndByLen( 100) ;
|
||||
if ( ! CutCurveWithLine( pCrvPocket, pCrv2))
|
||||
|
||||
Reference in New Issue
Block a user