diff --git a/EXE_NstCreateFlatParts.cpp b/EXE_NstCreateFlatParts.cpp index a903f6c..25e73c0 100644 --- a/EXE_NstCreateFlatParts.cpp +++ b/EXE_NstCreateFlatParts.cpp @@ -704,11 +704,12 @@ ExeAdjustFlatPartLayer( int nLayerId) continue ; } // Determino l'angolo tra le due direzioni - double dAngDeg = 0 ; - vtDir1.GetAngleXY( vtDir2, dAngDeg) ; + double dAngDeg1 = 0 ; + vtDir1.GetAngleXY( vtDir2, dAngDeg1) ; + double dAngDeg2 = dAngDeg1 ; // Se angolo piccolo (circa tangenti), verifico se uno dei due piega all'interno const double EPS_ANG_TG = 5.0 ; - if ( abs( dAngDeg) < EPS_ANG_TG) { + if ( abs( dAngDeg1) < EPS_ANG_TG) { // Punto di giunzione Point3d ptP ; pCrv1->GetEndPoint( ptP) ; @@ -726,12 +727,22 @@ ExeAdjustFlatPartLayer( int nLayerId) Vector3d vtDiff2 = ptP2 - ptP ; double dTmpAngDeg ; vtDiff1.GetAngleXY( vtDiff2, dTmpAngDeg) ; - if ( dTmpAngDeg < - EPS_ANG_SMALL) - dAngDeg = - 1 ; + if ( dTmpAngDeg < - EPS_ANG_SMALL) { + bool bArc1 = ( GetCurveArc( pCrv1) != nullptr) ; + bool bArc2 = ( GetCurveArc( pCrv2) != nullptr) ; + if ( bArc1 && ! bArc2) + dAngDeg2 = - 1 ; + else if ( bArc2 && ! bArc1) + dAngDeg1 = - 1 ; + else { + dAngDeg1 = - 1 ; + dAngDeg2 = - 1 ; + } + } } // Scrivo l'angolo nelle info delle curve - pGeomDB->SetInfo( nId, MCH_PV_KEY_NEXTANG, dAngDeg) ; - pGeomDB->SetInfo( nCalcId, MCH_PV_KEY_PREVANG, dAngDeg) ; + pGeomDB->SetInfo( nId, MCH_PV_KEY_NEXTANG, dAngDeg1) ; + pGeomDB->SetInfo( nCalcId, MCH_PV_KEY_PREVANG, dAngDeg2) ; } // Passo all'entità successiva nId = nNextId ; diff --git a/EgtExecutor.rc b/EgtExecutor.rc index effc985..a438244 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ