EgtExecutor 1.6s8 :

- migliorato calcolo angoli tra curve di contorno di FlatParts (casi arco/retta tg).
This commit is contained in:
Dario Sassi
2016-07-26 18:11:26 +00:00
parent 8f1e169dac
commit d1df71ef4a
2 changed files with 18 additions and 7 deletions
+18 -7
View File
@@ -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 ;
BIN
View File
Binary file not shown.