From a4bd5a25c2f72ac11e6ae4149af087d6b7c28d2c Mon Sep 17 00:00:00 2001 From: DarioS Date: Thu, 24 Nov 2022 09:29:58 +0100 Subject: [PATCH] EgtGeomKernel 2.4k5 : - correzione in creazione regioni, eliminando curve chiude con diametro di ingombro inferiore a 20 epsilon. --- AdjustLoops.cpp | 16 ++++++++++++++++ EgtGeomKernel.rc | Bin 11726 -> 11726 bytes FontOs.cpp | 3 +-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/AdjustLoops.cpp b/AdjustLoops.cpp index c6f1f96..87465f6 100644 --- a/AdjustLoops.cpp +++ b/AdjustLoops.cpp @@ -242,6 +242,22 @@ MyAdjustLoops( ICurve* pCurve, ICURVEPLIST& CrvLst) ++ iIter ; } + // elimino le curve troppo piccole + for ( auto iIter = CrvLst.begin() ; iIter != CrvLst.end() ;) { + CurveComposite* pCrvCo = GetBasicCurveComposite( *iIter) ; + BBox3d b3CrvCo ; + double dDiam ; + if ( ! pCrvCo->GetLocalBBox( b3CrvCo) || b3CrvCo.IsEmpty() || + ! b3CrvCo.GetDiameter( dDiam) || dDiam < 20 * EPS_SMALL) { + delete pCrvCo ; + pCrvCo = nullptr ; + iIter = CrvLst.erase( iIter) ; + } + else { + ++ iIter ; + } + } + // riporto le curve nel riferimento originale if ( bNeedRef) { for ( auto pCrv : CrvLst) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index b0026d080eb4bda09044e6e931e3d5800f1c3a60..f415dc0dabe2a3c97cb46e69e3fc6aa9714f0137 100644 GIT binary patch delta 110 zcmX>XeJ*;#A2vqQ&G-4vGfh^I(V2WtQH{}bvZAo=<^U--#?6zseVD=0wm=Fh>;V)O Q4#E(g#Dd413gs{^0P+qZXaE2J delta 110 zcmX>XeJ*;#A2vpl&G-4vGfh^I(V2WtQH{}LvZAo=<^U--#?6zseVD=0wm=Fh>;V)O Q4#E(g#Dd413gs{^0PsX2U;qFB diff --git a/FontOs.cpp b/FontOs.cpp index 56cf0d5..4bda957 100644 --- a/FontOs.cpp +++ b/FontOs.cpp @@ -378,8 +378,7 @@ OsFont::GetRegion( const string& sText, int nInsPos, ISURFFRPLIST& lstSFR) const if ( ! GetCharOutline( vCode[i], dAdvance, lstPC)) return false ; // lo trasformo opportunamente - ICURVEPLIST::iterator iIter ; - for ( iIter = lstPC.begin() ; iIter != lstPC.end() ; ++ iIter) { + for ( auto iIter = lstPC.begin() ; iIter != lstPC.end() ; ++ iIter) { // inverto i percorsi per avere gli esterni CCW (*iIter)->Invert() ; // la trasformo per avere solo archi e rette