EgtExecutor 1.6s8 :
- migliorato calcolo angoli tra curve di contorno di FlatParts (casi arco/retta tg).
This commit is contained in:
@@ -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 ;
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user