From fd99ed62f4f2174be398284887525c2d1435524e Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sat, 22 Jun 2019 07:32:48 +0000 Subject: [PATCH] EgtMachKernel : - aggiunto PARALLEL_SLANT da faccia - aggiunte mortase inclinate. --- Mortising.cpp | 2 +- Operation.cpp | 17 ++++++++++++++++- Operation.h | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Mortising.cpp b/Mortising.cpp index 3b0c75d..21f6d5f 100644 --- a/Mortising.cpp +++ b/Mortising.cpp @@ -957,7 +957,7 @@ Mortising::GetCurve( SelData Id) else if ( ( m_Params.m_nFaceUse & 32) != 0) nToolDir = TOOL_ORTHO ; else - nToolDir = TOOL_PARAL ; + nToolDir = TOOL_PAR_SLANT ; int nFaceUse = ( m_Params.m_nFaceUse & 31) ; AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, m_TParams.m_dThick) ; // la restituisco diff --git a/Operation.cpp b/Operation.cpp index 129ffc6..07ebff3 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -611,6 +611,10 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF Vector3d vtN ; pCrvCompo->GetExtrusion( vtN) ; + // direzioni lati precedente e successivo + Vector3d vtDirPrev ; + Vector3d vtDirNext ; + // se richiesto contorno if ( nFaceUse == FACE_CONT) { // cerco l'estremo pił alto e lo imposto come inizio @@ -654,6 +658,7 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF if ( ( vtN ^ vtDir) * vtRef < COS_ANG_MAX) { delete( pCrvCompo->RemoveFirstOrLastCurve( false)) ; pCrv = pCrvCompo->GetFirstCurve() ; + vtDirPrev = vtDir ; } else break ; @@ -664,6 +669,7 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF if ( ( vtN ^ vtDir) * vtRef < COS_ANG_MAX) { delete( pCrvCompo->RemoveFirstOrLastCurve( true)) ; pCrv = pCrvCompo->GetLastCurve() ; + vtDirNext = vtDir ; } else break ; @@ -692,7 +698,7 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF } pCrvCompo->SetThickness( 0) ; } - else { // nToolDir == TOOL_PARAL + else { // nToolDir == TOOL_PARAL o TOOL_PAR_SLANT // sistemo versore Point3d ptStart, ptEnd ; pCrvCompo->GetStartPoint( ptStart) ; @@ -701,6 +707,15 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF Vector3d vtExtr = vtN ^ vtT ; if ( ! vtExtr.Normalize()) return false ; + if ( nToolDir == TOOL_PAR_SLANT) { + Vector3d vtDirPN = - vtDirPrev + vtDirNext ; + if ( vtDirPN.Normalize()) { + if ( vtDirPN * vtExtr > 0) + vtExtr = vtDirPN ; + else + vtExtr = - vtDirPN ; + } + } pCrvCompo->SetExtrusion( vtExtr) ; // elimino eventuali parti iniziali e/o finali dirette circa come il versore const double MAX_ALL_COS = cos( 25 * DEGTORAD) ; diff --git a/Operation.h b/Operation.h index 919c33d..b769d52 100644 --- a/Operation.h +++ b/Operation.h @@ -166,6 +166,6 @@ inline Operation* GetOperation( IUserObj* pUserObj) //---------------------------------------------------------------------------- // tipo posizione utensile -enum { TOOL_PARAL = 1, TOOL_ORTHO = 2, TOOL_ORTUP = 3} ; +enum { TOOL_PARAL = 1, TOOL_ORTHO = 2, TOOL_ORTUP = 3, TOOL_PAR_SLANT= 4} ; // tipo di utilizzo contorno faccia enum { FACE_DOWN = 1, FACE_TOP = 2, FACE_FRONT = 3, FACE_BACK = 4, FACE_LEFT = 5, FACE_RIGHT = 6, FACE_CONT = 7} ;