diff --git a/Chiseling.cpp b/Chiseling.cpp index f1e9f52..6f01e25 100644 --- a/Chiseling.cpp +++ b/Chiseling.cpp @@ -1010,7 +1010,7 @@ Chiseling::GetCurves( SelData Id, ICURVEPLIST& lstPC) // la porto in globale pCrvCompo->ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, 0) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, V_NULL, 0) ; // la restituisco lstPC.emplace_back( Release( pCrvCompo)) ; return true ; @@ -1046,7 +1046,7 @@ Chiseling::GetCurves( SelData Id, ICURVEPLIST& lstPC) // la porto in globale pCrvCompo->ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, 0) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, V_NULL, 0) ; // la restituisco lstPC.emplace_back( Release( pCrvCompo)) ; } diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 247129b..2efd1a1 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/Milling.cpp b/Milling.cpp index 85f158c..e553e8f 100644 --- a/Milling.cpp +++ b/Milling.cpp @@ -35,6 +35,7 @@ #include "/EgtDev/Include/EGkDistPointCurve.h" #include "/EgtDev/Include/EGkIntersCurveSurfTm.h" #include "/EgtDev/Include/EGkIntervals.h" +#include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EGkUserObjFactory.h" #include "/EgtDev/Include/EGnStringKeyVal.h" #include "/EgtDev/Include/EgtNumUtils.h" @@ -1364,8 +1365,11 @@ Milling::GetCurves( SelData Id, ICURVEPLIST& lstPC) else nToolDir = TOOL_PARAL ; int nFaceUse = ( m_Params.m_nFaceUse & 31) ; + Vector3d vtFaceUse ; + if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "VtFaceUse="), vtFaceUse) && ! vtFaceUse.IsSmall()) + nFaceUse = FACE_VERSOR ; double dSawThick = ( ( m_TParams.m_nType & TF_SAWBLADE) != 0 ? m_TParams.m_dThick : 0) ; - AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, dSawThick) ; + AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, vtFaceUse, dSawThick) ; // la restituisco lstPC.emplace_back( Release( pCrvCompo)) ; return true ; @@ -1389,6 +1393,9 @@ Milling::GetCurves( SelData Id, ICURVEPLIST& lstPC) else nToolDir = TOOL_PARAL ; int nFaceUse = ( m_Params.m_nFaceUse & 31) ; + Vector3d vtFaceUse ; + if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "VtFaceUse="), vtFaceUse) && ! vtFaceUse.IsSmall()) + nFaceUse = FACE_VERSOR ; double dSawThick = ( ( m_TParams.m_nType & TF_SAWBLADE) != 0 ? m_TParams.m_dThick : 0) ; // determino intervallo di chunk int nCstart = 0 ; @@ -1411,7 +1418,7 @@ Milling::GetCurves( SelData Id, ICURVEPLIST& lstPC) // la porto in globale pCrvCompo->ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, dSawThick) ; + AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, vtFaceUse, dSawThick) ; // la restituisco lstPC.emplace_back( Release( pCrvCompo)) ; } diff --git a/Mortising.cpp b/Mortising.cpp index cbd6780..d019311 100644 --- a/Mortising.cpp +++ b/Mortising.cpp @@ -1016,7 +1016,7 @@ Mortising::GetCurve( SelData Id) else nToolDir = TOOL_PAR_SLANT ; int nFaceUse = ( m_Params.m_nFaceUse & 31) ; - AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, m_TParams.m_dThick, 2) ; + AdjustCurveFromSurf( pCrvCompo, nToolDir, nFaceUse, V_NULL, m_TParams.m_dThick, 2) ; // la restituisco return Release( pCrvCompo) ; } diff --git a/Operation.cpp b/Operation.cpp index 2d99186..6f27d50 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -935,7 +935,7 @@ Operation::GetCurrRawsGlobBox( BBox3d& b3Raw) const //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- inline Vector3d -GetDirInFacePerpSide( int nFaceUse, const Vector3d& vtN, ICurveComposite* pCrvCompo) +GetDirInFacePerpSide( int nFaceUse, const Vector3d& vtFaceUse, const Vector3d& vtN, ICurveComposite* pCrvCompo) { // determino la direzione di riferimento proiettata nella faccia Vector3d vtRef ; @@ -946,6 +946,7 @@ GetDirInFacePerpSide( int nFaceUse, const Vector3d& vtN, ICurveComposite* pCrvCo case FACE_BACK : vtRef = -Y_AX ; break ; case FACE_LEFT : vtRef = X_AX ; break ; case FACE_RIGHT : vtRef = -X_AX ; break ; + case FACE_VERSOR : vtRef = vtFaceUse ; break ; } vtRef -= vtRef * vtN * vtN ; if ( ! vtRef.Normalize()) @@ -972,7 +973,8 @@ GetDirInFacePerpSide( int nFaceUse, const Vector3d& vtN, ICurveComposite* pCrvCo //---------------------------------------------------------------------------- bool -Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nFaceUse, double dToolThick, int nGrade) +Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nFaceUse, const Vector3d& vtFaceUse, + double dToolThick, int nGrade) { // copia della curva originale PtrOwner pCopy( pCrvCompo->Clone()) ; @@ -1008,7 +1010,7 @@ Operation::AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nF // altrimenti else { // determino la direzione di riferimento - vtRef = GetDirInFacePerpSide( nFaceUse, vtN, pCrvCompo) ; + vtRef = GetDirInFacePerpSide( nFaceUse, vtFaceUse, vtN, pCrvCompo) ; // la curva gira in senso antiorario attorno al contorno faccia vista dalla normale uscente // elimino i segmenti che hanno la direzione di riferimento a destra o quasi (16 deg o 31 deg o 46deg) nGrade = Clamp( nGrade, 1, 3) ; diff --git a/Operation.h b/Operation.h index 5f6ea38..399e509 100644 --- a/Operation.h +++ b/Operation.h @@ -153,7 +153,8 @@ class Operation : public IUserObj bool GetRawGlobBox( int nPhase, const BBox3d& b3Test, double dToler, BBox3d& b3Raw) const ; bool GetCurrRawsGlobBox( BBox3d& b3Raw) const ; - bool AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nFaceUse, double dToolThick, int nGrade = 3) ; + bool AdjustCurveFromSurf( ICurveComposite* pCrvCompo, int nToolDir, int nFaceUse, const Vector3d& vtFaceUse, + double dToolThick, int nGrade = 3) ; bool ApproxWithArcsIfUseful( ICurveComposite* pCompo, bool bCareTempProp = false) const ; bool ApproxWithLines( ICurveComposite* pCompo, bool bFeed = true) const ; bool VerifyArcs( ICurveComposite* pCompo, double dMaxAngCen = MAX_ANG_CEN) const ; @@ -299,6 +300,6 @@ inline Operation* GetOperation( IUserObj* pUserObj) // tipo posizione utensile 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} ; +enum { FACE_DOWN = 1, FACE_TOP = 2, FACE_FRONT = 3, FACE_BACK = 4, FACE_LEFT = 5, FACE_RIGHT = 6, FACE_CONT = 7, FACE_VERSOR = 8} ; // risultato di SpecialTestCollisionAvoid -enum { SCAV_ERROR = -1, SCAV_COLLIDE = 0, SCAV_AVOID = 1, SCAV_TOTEST = 2}; +enum { SCAV_ERROR = -1, SCAV_COLLIDE = 0, SCAV_AVOID = 1, SCAV_TOTEST = 2} ; diff --git a/Pocketing.cpp b/Pocketing.cpp index e637c43..41246a2 100644 --- a/Pocketing.cpp +++ b/Pocketing.cpp @@ -1221,7 +1221,7 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) // la porto in globale pCrvCompo->ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, 0) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, V_NULL, 0) ; // la restituisco lstPC.emplace_back( Release( pCrvCompo)) ; return true ; @@ -1259,7 +1259,7 @@ Pocketing::GetCurves( SelData Id, ICURVEPLIST& lstPC) // la porto in globale pCrvCompo->ToGlob( frGlob) ; // sistemazioni varie - AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, 0) ; + AdjustCurveFromSurf( pCrvCompo, TOOL_ORTHO, FACE_CONT, V_NULL, 0) ; // la restituisco lstPC.emplace_back( Release( pCrvCompo)) ; }