EgtMachKernel 2.4f5 :
- in svuotature corretta gestione casi speciali che falliscono e rimandano al caso standard.
This commit is contained in:
Binary file not shown.
+32
-27
@@ -3741,7 +3741,7 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs,
|
||||
return true ;
|
||||
}
|
||||
|
||||
// recupero la curva originaria della svuotatura per verificare caso trapezoide
|
||||
// recupero la curva originaria della svuotatura (non allargata per lati aperti) per verificare caso trapezoide
|
||||
int nCrvId = m_pGeomDB->GetFirstInGroup( nPathId) ;
|
||||
PtrOwner<ICurveComposite> pCrvPocket( CloneCurveComposite( m_pGeomDB->GetGeoObj( nCrvId))) ;
|
||||
if ( IsNull( pCrvPocket))
|
||||
@@ -4132,6 +4132,8 @@ bool
|
||||
Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtDir, double dPocketSize,
|
||||
ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap)
|
||||
{
|
||||
bOptimizedTrap = false ;
|
||||
|
||||
Vector3d vtExtr ; pCrvPocket->GetExtrusion( vtExtr) ;
|
||||
// eventuale approssimazione della curva con polyline per ottenere la stessa curva calcolata in ICurveComposite::IsATrapezoid
|
||||
if ( pCrvPocket->GetCurveCount() > 4) {
|
||||
@@ -4161,9 +4163,9 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD
|
||||
pCrvPocket->GetCurveTempProp( i, vnProp[i]) ;
|
||||
|
||||
// verifico le dimensioni della svuotatura
|
||||
if ( ! vnProp[0] && abs( dPocketSize - m_TParams.m_dDiam) > EPS_SMALL)
|
||||
if ( vnProp[0] == 0 && abs( dPocketSize - m_TParams.m_dDiam) > EPS_SMALL)
|
||||
return false ;
|
||||
if ( ! vnProp[1] && ! vnProp[3]) {
|
||||
if ( vnProp[1] == 0 && vnProp[3] == 0) {
|
||||
double dLen0 = 0, dLen2 = 0 ;
|
||||
pCrvPocket->GetCurve( 0)->GetLength( dLen0) ;
|
||||
pCrvPocket->GetCurve( 2)->GetLength( dLen2) ;
|
||||
@@ -4173,9 +4175,9 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD
|
||||
|
||||
// calcolo percorso di svuotatura
|
||||
double dYCoord = dPocketSize - 0.5 * m_TParams.m_dDiam ;
|
||||
if ( vnProp[0])
|
||||
if ( vnProp[0] != 0)
|
||||
dYCoord -= GetOffsR() ;
|
||||
if ( vnProp[0] && vnProp[2])
|
||||
if ( vnProp[0] != 0 && vnProp[2] != 0)
|
||||
dYCoord = 0.5 * dPocketSize ; // se entrambi i lati paralleli sono aperti mi posiziono a metà della svuotatura
|
||||
|
||||
double dXCoordStart, dXCoordEnd ;
|
||||
@@ -4188,7 +4190,7 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD
|
||||
Point3d ptStart( dXCoordStart, dYCoord) ;
|
||||
Point3d ptEnd( dXCoordEnd, dYCoord) ;
|
||||
|
||||
if ( AreSamePointEpsilon( ptStart, ptEnd, 500 * EPS_SMALL) && vnProp[0]) {
|
||||
if ( AreSamePointEpsilon( ptStart, ptEnd, 500 * EPS_SMALL) && vnProp[0] != 0) {
|
||||
Vector3d vtDir1, vtDir3 ;
|
||||
pCrvPocket->GetCurve( 1)->GetStartDir( vtDir1) ;
|
||||
pCrvPocket->GetCurve( 3)->GetStartDir( vtDir3) ;
|
||||
@@ -4213,7 +4215,7 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD
|
||||
}
|
||||
|
||||
pMCrv->AddPoint( ptS) ;
|
||||
if ( vnProp[2])
|
||||
if ( vnProp[2] != 0)
|
||||
pMCrv->AddLine( ptE) ;
|
||||
else
|
||||
pMCrv->AddLine( ptStart) ;
|
||||
@@ -4228,11 +4230,15 @@ Pocketing::CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtD
|
||||
return true ;
|
||||
|
||||
// aggiustamenti al percorso per rimuovere materiale residuo negli angoli
|
||||
if ( vnProp[0]) {
|
||||
if ( ! vnProp[3] && ! AdjustTrapezoidSpiralForAngles( pMCrv, pCrvPocket, true))
|
||||
return false ;
|
||||
if ( ! vnProp[1] && ! AdjustTrapezoidSpiralForAngles( pMCrv, pCrvPocket, false))
|
||||
if ( vnProp[0] != 0) {
|
||||
if ( vnProp[3] == 0 && ! AdjustTrapezoidSpiralForAngles( pMCrv, pCrvPocket, true)) {
|
||||
pMCrv->Clear() ;
|
||||
return false ;
|
||||
}
|
||||
if ( vnProp[1] == 0 && ! AdjustTrapezoidSpiralForAngles( pMCrv, pCrvPocket, false)) {
|
||||
pMCrv->Clear() ;
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4268,14 +4274,14 @@ Pocketing::CalcTrapezoidSpiralLocalFrame( ICurveComposite* pCrvPocket, const Vec
|
||||
break ;
|
||||
}
|
||||
}
|
||||
if ( nBaseId != 0 && nBaseId != 1)
|
||||
if ( nBaseId != 0 && nBaseId != 1)
|
||||
return false ;
|
||||
|
||||
// imposto come lato iniziale per la curva uno dei lati paralleli a vtDir (possibilmente aperto)
|
||||
int nProp0, nProp2 ;
|
||||
pCrvPocket->GetCurveTempProp( nBaseId, nProp0) ;
|
||||
pCrvPocket->GetCurveTempProp( nBaseId + 2, nProp2) ;
|
||||
if ( ! nProp0 && nProp2)
|
||||
if ( nProp0 == 0 && nProp2 != 0)
|
||||
pCrvPocket->ChangeStartPoint( nBaseId + 2) ;
|
||||
else
|
||||
pCrvPocket->ChangeStartPoint( nBaseId) ;
|
||||
@@ -4293,11 +4299,10 @@ Pocketing::CalcTrapezoidSpiralLocalFrame( ICurveComposite* pCrvPocket, const Vec
|
||||
bool
|
||||
Pocketing::CalcTrapezoidSpiralXCoord( const ICurveComposite* pCrvPocket, bool bStart, double dYCoord, double& dXCoord, double dPocketSize)
|
||||
{
|
||||
int nCrvId = bStart ? 3 : 1 ;
|
||||
int nProp ;
|
||||
|
||||
// se open
|
||||
if ( pCrvPocket->GetCurveTempProp( nCrvId, nProp) && nProp) {
|
||||
int nCrvId = ( bStart ? 3 : 1) ;
|
||||
int nProp ;
|
||||
if ( pCrvPocket->GetCurveTempProp( nCrvId, nProp) && nProp != 0) {
|
||||
Point3d pt1, pt2 ;
|
||||
pCrvPocket->GetCurve( nCrvId)->GetStartPoint( pt1) ;
|
||||
pCrvPocket->GetCurve( nCrvId)->GetEndPoint( pt2) ;
|
||||
@@ -4318,7 +4323,7 @@ Pocketing::CalcTrapezoidSpiralXCoord( const ICurveComposite* pCrvPocket, bool bS
|
||||
double dSinAlpha = ( vtRef ^ X_AX).Len() ;
|
||||
if ( abs( dSinAlpha) < EPS_SMALL)
|
||||
return false ;
|
||||
dVal = 1 / dSinAlpha * ( dRad - dYCoord * dCosAlpha) ;
|
||||
dVal = 1.0 / dSinAlpha * ( dRad - dYCoord * dCosAlpha) ;
|
||||
}
|
||||
else if ( dYCoord < dRad * dCosAlpha)
|
||||
dVal = sqrt( dRad * dRad - dYCoord * dYCoord) ;
|
||||
@@ -4356,7 +4361,7 @@ Pocketing::AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveC
|
||||
pCrvPocket->GetCurve( 2)->GetStartPoint( ptTmp) ;
|
||||
double dPocketSize = ptTmp.y ;
|
||||
|
||||
int nCrvId = bStart ? 3 : 1 ;
|
||||
int nCrvId = ( bStart ? 3 : 1) ;
|
||||
PtrOwner<ICurveLine> pLine( GetCurveLine( pCrvPocket->GetCurve( nCrvId)->Clone())) ;
|
||||
pLine->SimpleOffset( - 0.5 * m_TParams.m_dDiam - GetOffsR()) ;
|
||||
|
||||
@@ -4368,10 +4373,10 @@ Pocketing::AdjustTrapezoidSpiralForAngles( ICurveComposite* pMCrv, const ICurveC
|
||||
|
||||
int nProp2 ;
|
||||
// lato opposto a quello di riferimento aperto
|
||||
if ( pCrvPocket->GetCurveTempProp( 2, nProp2) && nProp2) {
|
||||
if ( pCrvPocket->GetCurveTempProp( 2, nProp2) && nProp2 != 0) {
|
||||
|
||||
// caso 1 : pLine ha un estremo sopra e uno sotto il percorso di svuotatura pMCrv
|
||||
if ( ptP2.y < dYCoord && dYCoord < ptP1.y) {
|
||||
if ( ptP2.y < dYCoord && dYCoord < ptP1.y) {
|
||||
|
||||
// creo tratto da ptP2 a ptP1
|
||||
pCompo->AddPoint( ptP2) ;
|
||||
@@ -4487,7 +4492,7 @@ Pocketing::AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite* pCompo, ICurv
|
||||
Vector3d vtMainDir ;
|
||||
for ( int i = 0 ; i < pCompo->GetCurveCount() ; i++) {
|
||||
int nProp ;
|
||||
if ( pCompo->GetCurveTempProp( i, nProp) && nProp == 0) {
|
||||
if ( pCompo->GetCurveTempProp( i, nProp) && nProp == 0) {
|
||||
// se non è lato aggiuntivo per la pulitura angoli recupero la sua direzione
|
||||
pCompo->GetCurve( i)->GetStartDir( vtMainDir) ;
|
||||
break ;
|
||||
@@ -4502,13 +4507,13 @@ Pocketing::AdjustTrapezoidSpiralForLeadInLeadOut( ICurveComposite* pCompo, ICurv
|
||||
ComputeTrapezoidSpiralLeadInLeadOut( pCompo, vtMainDir, false, vtTool, dDepth, bEndOutside) ;
|
||||
|
||||
// eventuale inversione della curva per partire sempre dall'esterno del grezzo
|
||||
if ( bEndOutside && ! bStartOutside)
|
||||
if ( bEndOutside && ! bStartOutside)
|
||||
pCompo->Invert() ;
|
||||
|
||||
nOutsideRaw = 0 ;
|
||||
if ( bStartOutside && bEndOutside)
|
||||
if ( bStartOutside && bEndOutside)
|
||||
nOutsideRaw = 2 ;
|
||||
else if ( bStartOutside || bEndOutside) {
|
||||
else if ( bStartOutside || bEndOutside) {
|
||||
nOutsideRaw = 1 ;
|
||||
|
||||
// calcolo percorso di ritorno
|
||||
@@ -5267,12 +5272,12 @@ Pocketing::GetMidOfLongestOpenSide( const ICurveComposite* pCompo, Point3d& ptMi
|
||||
if ( pPrevCrv != nullptr && pPrevCrv->GetTempProp() == 1) {
|
||||
Vector3d vtPrevEnd ; pPrevCrv->GetEndDir( vtPrevEnd) ;
|
||||
Vector3d vtStart ; pCrv->GetStartDir( vtStart) ;
|
||||
dLenAgg += max( 0.25, vtPrevEnd * vtStart) * dLenPrev ;
|
||||
dLenAgg += max( 0.4, vtPrevEnd * vtStart) * dLenPrev ;
|
||||
}
|
||||
if ( pNextCrv != nullptr && pNextCrv->GetTempProp() == 1) {
|
||||
Vector3d vtEnd ; pCrv->GetEndDir( vtEnd) ;
|
||||
Vector3d vtNextStart ; pNextCrv->GetStartDir( vtNextStart) ;
|
||||
dLenAgg += max( 0.25, vtEnd * vtNextStart) * dLenNext ;
|
||||
dLenAgg += max( 0.4, vtEnd * vtNextStart) * dLenNext ;
|
||||
}
|
||||
}
|
||||
// entità corrente
|
||||
|
||||
+2
-2
@@ -103,8 +103,8 @@ class Pocketing : public Machining
|
||||
const ICurve* pCrvBound, ICurveComposite* pCrvLink) ;
|
||||
bool CalcCircleSpiral( const Point3d& ptCen, const Vector3d& vtN, double dOutRad, double dIntRad,
|
||||
bool bSplitArcs, ICurveComposite* pMCrv, ICurveComposite* pRCrv) ;
|
||||
bool CalcTrapezoidSpiral( ICurveComposite * pCrvPocket, const Vector3d& vtDir, double dPocketSize,
|
||||
ICurveComposite * pMCrv, ICurveComposite * pRCrv, bool& bOptimizedTrap) ;
|
||||
bool CalcTrapezoidSpiral( ICurveComposite* pCrvPocket, const Vector3d& vtDir, double dPocketSize,
|
||||
ICurveComposite* pMCrv, ICurveComposite* pRCrv, bool& bOptimizedTrap) ;
|
||||
bool CalcTrapezoidSpiralLocalFrame( ICurveComposite * pCrvPocket, const Vector3d& vtDir, Frame3d& frLoc) ;
|
||||
bool CalcTrapezoidSpiralXCoord( const ICurveComposite * pCrvPocket, bool bStart, double dYCoord, double& dXCoord, double dPocketSize) ;
|
||||
bool AdjustTrapezoidSpiralForAngles( ICurveComposite * pMCrv, const ICurveComposite * pCrvPocket, bool bStart) ;
|
||||
|
||||
Reference in New Issue
Block a user