From 9c5b90858ff174578029fa80813ae63d63b3291c Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 1 Jul 2024 12:46:55 +0200 Subject: [PATCH 1/5] EgtMachKernel 2.6g1 : - ricompilazione con cambio versione. --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 2efd1a1a0021cf5e126d75f84ac7328dce83f0de..f97c1f0e3045ea38008f3cbb115133b7ad0f68b6 100644 GIT binary patch delta 121 zcmewt{V#gMH#Syt1|0^&&A-{KnVHiW3@1O7)ZLuM)x!c8zsNNCgkT;*P6$a3MUMyL R=2g-z%(yjz6ex#q0RVBoCa3@a delta 121 zcmewt{V#gMH#Sx?1|0^I&A-{KnVHiVOeQ~+)ZLuM)x!c8zsNNCgkT;*P6$a3MUMyL R=2g-z%(yjz6ex#q0RVNYCb$3q From e6a74d0b458f0de072ef7bd8bce4b7c010a070c4 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 1 Jul 2024 14:46:20 +0200 Subject: [PATCH 2/5] =?UTF-8?q?EgtMachKernel=20:=20-=20modifica=20a=20dril?= =?UTF-8?q?ling=20per=20impostazione=20geometria=20senza=20con=20create=20?= =?UTF-8?q?anzich=C3=A8=20add.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Drilling.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Drilling.cpp b/Drilling.cpp index 1e0f0e2..b10a86b 100644 --- a/Drilling.cpp +++ b/Drilling.cpp @@ -246,6 +246,7 @@ Drilling::Drilling( void) { m_Params.m_sName = "*" ; m_Params.m_sToolName = "*" ; + m_Params.m_sDepth = "TH" ; m_TParams.m_sName = "*" ; m_TParams.m_sHead = "*" ; m_nStatus = MCH_ST_TO_VERIFY ; From 02a0928b06002f25fab76163d467dabdb573e137 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 3 Jul 2024 11:22:31 +0200 Subject: [PATCH 3/5] Revert "Merge commit '6f7adce5e22f8102ce4948e1e1be09cf386bbddd'" This reverts commit 462832fa8f0d38b0cd07f06987ba55dd56eac856, reversing changes made to e6a74d0b458f0de072ef7bd8bce4b7c010a070c4. --- SurfRoughing.cpp | 141 ++--------------------------------------------- SurfRoughing.h | 13 ----- 2 files changed, 5 insertions(+), 149 deletions(-) diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index 8bb8a25..cef3aa2 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -41,9 +41,6 @@ #include "/EgtDev/Include/EGkDistPointSurfTm.h" #include "/EgtDev/Include/EGkIntersPlaneSurfTm.h" #include "/EgtDev/Include/EGkStmFromCurves.h" -#include // debug -#include // debug -#include "/EgtDev/Include/EgtPerfCounter.h" // debug // per far dimenticare macro di WinUser.h #undef GetClassName @@ -88,127 +85,6 @@ using namespace std ; static string KEY_SURF_POCK = "SurfPock_" ; static string KEY_SURF_LIMIT = "SurfLimit_" ; -/* start debug functions */ - -static PerformanceCounter s_Counter ; -/* -s_Counter.Start() ; -double dTime = s_Counter.Stop() ; -LOG_ERROR( GetEMkLogger(), ( "1) regione estesa :" + to_string( dTime)).c_str()) ; -*/ - -void -SurfRoughing::DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf, Color Col, bool bAlphaCoverage) { - if ( bWithSurf) - DrawSimpleSurf( pSfr, Col) ; - - for ( int c = 0 ; c < pSfr->GetChunkCount() ; ++ c) { - for ( int l = 0 ; l < pSfr->GetLoopCount( c) ; ++ l) { - PtrOwner pCrvCompo( GetCurveComposite( pSfr->GetLoop( c, l))) ; - for ( int u = 0 ; u < pCrvCompo->GetCurveCount() ; ++ u) { - int nProp0 ; pCrvCompo->GetCurveTempProp( u, nProp0, 0) ; - int nProp1 ; pCrvCompo->GetCurveTempProp( u, nProp1, 1) ; - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrvCompo->GetCurve( u)->Clone()) ; - m_pGeomDB->SetMaterial( nInd, nProp0 == 0 ? ! bAlphaCoverage ? BLUE : AQUA : ! bAlphaCoverage ? RED : ORANGE) ; - } - } - } - return ; -} - -void -SurfRoughing::DrawSimpleSurf( const ISurfFlatRegion* pSfr, Color Col) -{ - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pSfr->Clone()) ; - m_pGeomDB->SetMaterial( nInd, Col) ; - return ; -} - -void -SurfRoughing::DrawVectorCurves( const ICRVCOMPOPOVECTOR& vCrv) -{ - for ( int l = 0 ; l < int( vCrv.size()) ; ++ l) { - for ( int u = 0 ; u < vCrv[l]->GetCurveCount() ; ++ u) { - int nProp0 ; vCrv[l]->GetCurveTempProp( u, nProp0, 0) ; - int nProp1 ; vCrv[l]->GetCurveTempProp( u, nProp1, 1) ; - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, vCrv[l]->GetCurve( u)->Clone()) ; - m_pGeomDB->SetMaterial( nInd, nProp0 == 0 ? BLUE : RED) ; - } - } - return ; -} - -void -SurfRoughing::DrawSimpleCurve( const ICurveComposite* pCrv, bool bUniform, Color Col) -{ - for ( int u = 0 ; u < pCrv->GetCurveCount() ; ++ u) { - int nProp0 ; pCrv->GetCurveTempProp( u, nProp0, 0) ; - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrv->GetCurve( u)->Clone()) ; - m_pGeomDB->SetMaterial( nInd, ! bUniform ? nProp0 == 0 ? BLUE : nProp0 == 1 ? RED : WHITE : Col) ; - } - return ; -} - -void -SurfRoughing::DrawCompoCurve( const ICurveComposite* pCrv, Color Col) -{ - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrv->Clone()) ; - m_pGeomDB->SetMaterial( nInd, Col) ; - return ; -} - -void -SurfRoughing::DrawSimpleTriMesh( const ISurfTriMesh* pStm, Color Col) -{ - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pStm->Clone()) ; - m_pGeomDB->SetMaterial( nInd, Col) ; - return ; -} - -void -SurfRoughing::DrawSimplePoint( const Point3d& pT, Color Col) -{ - PtrOwner ptGeo( CreateGeoPoint3d()) ; - ptGeo->Set( pT) ; - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, ptGeo->Clone()) ; - m_pGeomDB->SetMaterial( nInd, Col) ; - return ; -} - -void -SurfRoughing::DrawSimpleVector( const Vector3d& vT, Point3d ptPos, Color Col) -{ - PtrOwner vtGeo( CreateGeoVector3d()) ; - vtGeo->Set( vT) ; - vtGeo->Translate( ptPos - ORIG) ; - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, vtGeo->Clone()) ; - m_pGeomDB->SetMaterial( nInd, Col) ; - return ; -} - -void -SurfRoughing::DrawFeed( const ICurveComposite* pCrv) -{ - for ( int u = 0 ; u < pCrv->GetCurveCount() ; ++ u) { - double myAngle = 120 * ( pCrv->GetCurve( u)->GetTempParam( 0) / 1000.) ; - DrawCompoCurve( ConvertCurveToComposite( pCrv->GetCurve( u)->Clone()), - GetColorFromHSV( HSV( myAngle, 1., 1.))) ; - } - return ; -} - -void -SurfRoughing::DrawSingleCurveFeed( const ICurve* pCrv) -{ - double myAngle = 120 * ( pCrv->GetTempParam( 0) / 1000.) ; - int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, GDB_ID_ROOT, pCrv->Clone()) ; - m_pGeomDB->SetMaterial( nInd, GetColorFromHSV( HSV( myAngle, 1., 1.))) ; - return ; -} - -/* end debug functions */ - - //---------------------------------------------------------------------------- USEROBJ_REGISTER( GetOperationClass( OPER_SURFROUGHING), SurfRoughing) ; @@ -1813,8 +1689,6 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co if ( ! bIsSubStep) ++ nBasicStep ; - DrawLoopsSurf( pSfrPock, true, Color( 1., 1., 1., .1), bIsSubStep) ; - ICRVCOMPOPOVECTOR vpCrvs ; // percorso di svuotatura // se si tratta di uno step base, allora lavoro l'intera superficie if ( ! CalcPocketing( pSfrPock, m_TParams.m_dDiam / 2, 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, @@ -1829,7 +1703,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co for ( int i = 0 ; i < int( vpCrvs.size()) ; ++ i) VerifyArcs( vpCrvs[i]) ; - // salvo i loop esterni della superficie corrente come Polyline ( per LeadIn/LeadOut) + // salvo i loop esterni della superficie corrente come Polylinee ( per LeadIn/LeadOut) ICURVEPOVECTOR vLoops ; vLoops.resize( pSfrPock->GetChunkCount()) ; for ( int c = 0 ; c < int( vLoops.size()) ; ++ c) vLoops[c].Set( pSfrPock->GetLoop( c, 0)) ; @@ -1897,7 +1771,8 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co ptP1 -= ( nBasicStep * dStep) * vtTool ; SetFeed( GetTipFeed()) ; SetFlag( 0) ; - AddLinearMove( ptP1) ; + if ( AddLinearMove( ptP1) == GDB_ID_NULL) + return false ; } } // aggiungo attacco @@ -1923,17 +1798,12 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co return false ; } } - // ricavo la Feed e la imposto - double dPar0 = pCurve->GetTempParam( 0) ; - dPar0 /= 1000. ; - double dFeed = dPar0 * GetFeed() ; - SetFeed( dFeed) ; // elaborazioni sulla curva corrente (sempre un segmento di retta) if ( pCurve->GetType() == CRV_LINE) { ICurveLine* pLine = GetCurveLine( pCurve) ; Point3d ptP3 = pLine->GetEnd() ; Vector3d vtMove ; pLine->GetStartDir( vtMove) ; - //SetFeed( GetRightFeed( vtMove, vtTool)) ; + SetFeed( GetRightFeed( vtMove, vtTool)) ; if ( AddLinearMove( ptP3) == GDB_ID_NULL) return false ; } @@ -1944,11 +1814,10 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co Vector3d vtN = pArc->GetNormVersor() ; Point3d ptP3 ; pArc->GetEndPoint( ptP3) ; - //SetFeed( GetFeed()) ; + SetFeed( GetFeed()) ; if ( AddArcMove( ptP3, ptCen, dAngCen, vtN) == GDB_ID_NULL) return false ; } - DrawSingleCurveFeed( pCurve) ; // se ultima entità if ( i == nMaxInd) { // dati fine entità diff --git a/SurfRoughing.h b/SurfRoughing.h index a00cf91..f77f61d 100644 --- a/SurfRoughing.h +++ b/SurfRoughing.h @@ -134,19 +134,6 @@ class SurfRoughing : public Machining return SURFROU_LO_NONE ; return m_Params.m_nLeadOutType ; } - /* debug functions */ - void DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf, Color Col, bool bAlphaCoverage) ; - void DrawSimpleSurf( const ISurfFlatRegion* pSfr, Color Col) ; - void DrawVectorCurves( const ICRVCOMPOPOVECTOR& vCrv) ; - void DrawSimpleCurve( const ICurveComposite* pCrv, bool bUniform, Color Col) ; - void DrawCompoCurve( const ICurveComposite* pCrv, Color Col) ; - void DrawSimpleTriMesh( const ISurfTriMesh* pStm, Color Col) ; - void DrawSimplePoint( const Point3d& pT, Color Col) ; - void DrawSimpleVector( const Vector3d& vT, Point3d ptPos, Color Col) ; - void DrawFeed( const ICurveComposite* pCrv) ; - void DrawSingleCurveFeed( const ICurve* pCrv) ; - /* end debug functions */ - private : SELVECTOR m_vId ; // identificativi entità geometriche da lavorare SurfRoughingData m_Params ; // parametri lavorazione From 7269e97a7032af9ebe429c66c87a86d6d62106e1 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 3 Jul 2024 12:15:10 +0200 Subject: [PATCH 4/5] =?UTF-8?q?EgtMachKernel=20:=20-=20in=20svuotatura=20i?= =?UTF-8?q?l=20limite=20per=20fare=20trapezi=20ottimizzati=20=C3=A8=20dato?= =?UTF-8?q?=20dallo=20step=20di=20lato=20se=20non=20=C3=A8=20dato=20"MaxOp?= =?UTF-8?q?tSize=3D"=20nelle=20note=20utente.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Pocketing.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Pocketing.cpp b/Pocketing.cpp index 3fe20d5..ee2f079 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -3869,10 +3869,10 @@ Pocketing::CalcSpiral( const ICurveComposite* pCompo, int nReg, bool bSplitArcs, vtDir.Normalize() ; Vector3d vtOrtho = OrthoCompo( vtOtherDir, vtDir) ; double dPocketSize = vtOrtho.Len() ; - double dMaxOptSize ; + double dMaxOptSize = m_Params.m_dSideStep ; FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxOptSize="), dMaxOptSize) ; if ( ( ( bSomeOpen && dPocketSize < m_TParams.m_dDiam + EPS_SMALL) || abs( dPocketSize - m_TParams.m_dDiam) < EPS_SMALL) && - ( ! FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxOptSize="), dMaxOptSize) || dPocketSize < dMaxOptSize)) { + dPocketSize < dMaxOptSize + 10 * EPS_SMALL) { if ( nReg == 0) { CalcTrapezoidSpiral( pCrvPocket, vtDir, dPocketSize, pMCrv, pRCrv, bOptimizedTrap) ; if ( bOptimizedTrap) From 37d602c6d95d3d3918cadc4a69466e130b1212e4 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 3 Jul 2024 17:09:13 +0200 Subject: [PATCH 5/5] EgtMachKerenl : - in sgrossatura superfici inglobato ramo "Riccardo" e aggiunto utilizzo della riduzione di feed. --- SurfRoughing.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++----- SurfRoughing.h | 7 +++- 2 files changed, 92 insertions(+), 9 deletions(-) diff --git a/SurfRoughing.cpp b/SurfRoughing.cpp index cef3aa2..d44e07e 100644 --- a/SurfRoughing.cpp +++ b/SurfRoughing.cpp @@ -85,6 +85,65 @@ using namespace std ; static string KEY_SURF_POCK = "SurfPock_" ; static string KEY_SURF_LIMIT = "SurfLimit_" ; +static const bool ENABLE_DEBUG = false ; +static string _DEBUG_GROUP_TERRACE = "Terraces" ; +static string _DEBUG_GROUP_FEED = "Feeds" ; + +/* start debug functions */ +void +SurfRoughing::DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf, Color Col, bool bAlphaCoverage, int nStep) +{ + int myId = m_pGeomDB->GetFirstNameInGroup( GDB_ID_ROOT, _DEBUG_GROUP_TERRACE) ; + if ( myId == GDB_ID_NULL) { + myId = m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, GLOB_FRM) ; + m_pGeomDB->SetName( myId, _DEBUG_GROUP_TERRACE) ; + } + else { + if ( nStep == 0) + m_pGeomDB->EmptyGroup( myId) ; + } + int myStepId = m_pGeomDB->AddGroup( GDB_ID_NULL, myId, GLOB_FRM) ; + m_pGeomDB->SetName( myStepId, "Step " + ToString( nStep)) ; + int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, myStepId, pSfr->Clone()) ; + m_pGeomDB->SetMaterial( nInd, Col) ; + for ( int c = 0 ; c < pSfr->GetChunkCount() ; ++ c) { + for ( int l = 0 ; l < pSfr->GetLoopCount( c) ; ++ l) { + PtrOwner pCrvCompo( GetCurveComposite( pSfr->GetLoop( c, l))) ; + for ( int u = 0 ; u < pCrvCompo->GetCurveCount() ; ++ u) { + int nProp0 ; pCrvCompo->GetCurveTempProp( u, nProp0, 0) ; + int nProp1 ; pCrvCompo->GetCurveTempProp( u, nProp1, 1) ; + nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, myStepId, pCrvCompo->GetCurve( u)->Clone()) ; + m_pGeomDB->SetMaterial( nInd, nProp0 == 0 ? ! bAlphaCoverage ? BLUE : AQUA : ! bAlphaCoverage ? RED : ORANGE) ; + } + } + } + return ; +} + +void +SurfRoughing::DrawFeed( const ICurveComposite* pCrv, int nStep) +{ + int myId = m_pGeomDB->GetFirstNameInGroup( GDB_ID_ROOT, _DEBUG_GROUP_FEED) ; + if ( myId == GDB_ID_NULL) { + myId = m_pGeomDB->AddGroup( GDB_ID_NULL, GDB_ID_ROOT, GLOB_FRM) ; + m_pGeomDB->SetName( myId, _DEBUG_GROUP_FEED) ; + } + else { + if ( nStep == 0) + m_pGeomDB->EmptyGroup( myId) ; + } + int myStepId = m_pGeomDB->AddGroup( GDB_ID_NULL, myId, GLOB_FRM) ; + m_pGeomDB->SetName( myStepId, "Step " + ToString( nStep)) ; + for ( int u = 0 ; u < pCrv->GetCurveCount() ; ++ u) { + double myAngle = 120 * ( pCrv->GetCurve( u)->GetTempParam( 0) / 1000.) ; + int nInd = m_pGeomDB->AddGeoObj( GDB_ID_NULL, myStepId, pCrv->GetCurve( u)->Clone()) ; + m_pGeomDB->SetMaterial( nInd, GetColorFromHSV( HSV( myAngle, 1., 1.))) ; + } + return ; +} +/* end debug functions */ + + //---------------------------------------------------------------------------- USEROBJ_REGISTER( GetOperationClass( OPER_SURFROUGHING), SurfRoughing) ; @@ -1281,9 +1340,9 @@ SurfRoughing::ProcessPath( int nPathId, int nTempId, int nPvId, int nClId) vector< myStepInfo> vStepInfo ; // inserisco prima gli step... - for ( int i = 0 ; i < nStep ; ++ i) { + for ( int i = 0 ; i < nStep ; ++ i) vStepInfo.emplace_back( i, -1, - ( i + 1) * dStep, false, nullptr) ; - } + // ... e poi gli step intermedi ( se presenti e non coincidenti con gli Step base) int nIndRef = 0 ; // ( step base sottostante allo step intermedio corrente ) // creo un vettore di step intermedi presenti tra lo step base ( nIndRef-1)-esimo e nIndRef-esimo @@ -1665,6 +1724,8 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co double dAppr = m_Params.m_dStartPos ; // recupero il tipo di svuotatura int nSubType = m_Params.m_nSubType ; + // numero di Step corrente + int nCurrStep = 0 ; // ciclo sulle regioni bool bStart = true ; @@ -1689,6 +1750,10 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co if ( ! bIsSubStep) ++ nBasicStep ; + if ( ENABLE_DEBUG) { + DrawLoopsSurf( pSfrPock, true, Color( 1., 1., 1., .1), bIsSubStep, nCurrStep) ; + } + ICRVCOMPOPOVECTOR vpCrvs ; // percorso di svuotatura // se si tratta di uno step base, allora lavoro l'intera superficie if ( ! CalcPocketing( pSfrPock, m_TParams.m_dDiam / 2, 0., m_Params.m_dSideStep, m_Params.m_dSideAngle, @@ -1710,9 +1775,18 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co // ciclo sui percorsi for ( int k = 0 ; k < int( vpCrvs.size()) ; ++ k) { + + if ( ENABLE_DEBUG) { + DrawFeed( vpCrvs[k], nCurrStep) ; + } + // controllo se il percorso ha un ingresso presso un lato aperto bool bOutStart = ( vpCrvs[k]->GetCurveCount() > 0 && vpCrvs[k]->GetCurve( 0)->GetTempProp( 0) == 2) ; - // inizializzo la curva di Ritorno per LeadIn/LeadOut + // controllo se il percorso è formato da una singola curva seguente il lato chiuso + bool bSingleCrv = ( vpCrvs[k]->GetCurveCount() > 0 && vpCrvs[k]->GetTempProp( 0) == 3) ; + // controllo se caso ottimizzato a trapezio + bool bOptTrap = ( vpCrvs[k]->GetCurveCount() > 0 && vpCrvs[k]->GetTempProp( 0) == 4) ; + // inizializzo la curva di Ritorno per LeadIn/LeadOut PtrOwner pRCrv( CreateCurveComposite()) ; if ( IsNull( pRCrv)) return false ; @@ -1725,6 +1799,9 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co PtrOwner pCurve( pCrvC->Clone()) ; if ( IsNull( pCurve)) return false ; + // coefficiente feed (riduzione di feed per sezione di taglio superiore al previsto) + double dTempParam ; vpCrvs[k]->GetCurveTempParam( i, dTempParam) ; + double dCoeffFeed = ( dTempParam > EPS_SMALL ? dTempParam /= 1000 : 1) ; // se prima entità if ( i == 0) { // dati inizio entità @@ -1734,9 +1811,9 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co pCurve->GetStartDir( vtStart) ; // calcolo la curva pRCrv associata Point3d ptUp = ptStart ; - if ( bOutStart) + if ( bOutStart || bOptTrap) pCurve->GetEndPoint( ptUp) ; - else if ( nSubType == SURFROU_SUB_SPIRALIN) + else if ( ! bSingleCrv && nSubType == SURFROU_SUB_SPIRALIN) if ( ! CalcRetCrv( vpCrvs[k], ptUp, bOutStart, pRCrv)) return false ; // determino inizio attacco @@ -1793,7 +1870,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co if ( ! AddLeadIn( ptP1, ptStart, vtStart, vtExtr, pCompo, ( ( nSubType == SURFROU_SUB_SPIRALIN || nSubType == SURFROU_SUB_SPIRALOUT)) ? Get( pRCrv) : nullptr, ( nSubType == SURFROU_SUB_SPIRALOUT) ? m_Params.m_bInvert : ! m_Params.m_bInvert, - bSplitArcs, bOutStart, false)) { + bSplitArcs, ( bOutStart || bSingleCrv || bOptTrap), false)) { m_pMchMgr->SetLastError( 3013, "Error in SurfRoughing : LeadIn not computable") ; return false ; } @@ -1803,7 +1880,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co ICurveLine* pLine = GetCurveLine( pCurve) ; Point3d ptP3 = pLine->GetEnd() ; Vector3d vtMove ; pLine->GetStartDir( vtMove) ; - SetFeed( GetRightFeed( vtMove, vtTool)) ; + SetFeed( dCoeffFeed * GetRightFeed( vtMove, vtTool)) ; if ( AddLinearMove( ptP3) == GDB_ID_NULL) return false ; } @@ -1814,7 +1891,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co Vector3d vtN = pArc->GetNormVersor() ; Point3d ptP3 ; pArc->GetEndPoint( ptP3) ; - SetFeed( GetFeed()) ; + SetFeed( dCoeffFeed * GetFeed()) ; if ( AddArcMove( ptP3, ptCen, dAngCen, vtN) == GDB_ID_NULL) return false ; } @@ -1853,6 +1930,7 @@ SurfRoughing::AddPocket( const INTINTVECTOR& vPocket, const Vector3d& vtTool, co } } } + ++ nCurrStep ; } return true ; diff --git a/SurfRoughing.h b/SurfRoughing.h index f77f61d..742f3ec 100644 --- a/SurfRoughing.h +++ b/SurfRoughing.h @@ -134,8 +134,13 @@ class SurfRoughing : public Machining return SURFROU_LO_NONE ; return m_Params.m_nLeadOutType ; } + /* debug functions */ + void DrawLoopsSurf( const ISurfFlatRegion* pSfr, bool bWithSurf, Color Col, bool bAlphaCoverage, int nStep) ; + void DrawFeed( const ICurveComposite* pCrv, int nStep) ; + /* end debug functions */ + private : - SELVECTOR m_vId ; // identificativi entità geometriche da lavorare + SELVECTOR m_vId ; // identificativi entit� geometriche da lavorare SurfRoughingData m_Params ; // parametri lavorazione ToolData m_TParams ; // parametri utensile double m_dTHoldBase ; // posizione base del porta-utensile