From f5b11a61a078d45a66875e68fea7a79a64d3cbe1 Mon Sep 17 00:00:00 2001 From: DarioS Date: Thu, 26 Aug 2021 10:38:41 +0200 Subject: [PATCH] EgtGeomKernel 2.3h3 : - correzione crezione regioni da curve chiuse (contorni esterni che si intersecano e diventano in parte anche contorni interni). --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes SfrCreate.cpp | 21 ++++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 5b66bd69087d4c192605a1c7db58eccb92208e91..c9fb3319f2f2ff385e93f64d571482d9299f0f93 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&Qw&A-_cnHh~ID{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-W11TR delta 94 zcmdlNy)SyhFE&P_&A-_cnHh~HD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-Vf-5U diff --git a/SfrCreate.cpp b/SfrCreate.cpp index c720968..957dc03 100644 --- a/SfrCreate.cpp +++ b/SfrCreate.cpp @@ -17,6 +17,7 @@ #include "CurveArc.h" #include "CurveComposite.h" #include "SurfFlatRegion.h" +#include "AdjustLoops.h" #include "GeoConst.h" #include "/EgtDev/Include/EgkPolyLine.h" #include "/EgtDev/Include/EgkBiArcs.h" @@ -363,8 +364,20 @@ SurfFlatRegionByContours::AddCurve( ICurve* pCrv) // verifico sia chiusa if ( ! pMyCrv->IsClosed()) return false ; - // la inserisco nel vettore delle curve - m_vpCrv.push_back( Release( pMyCrv)) ; + // verifico sia piana e imposto estrusione come normale al piano + double dArea ; + Plane3d plPlane ; + if ( ! pMyCrv->GetArea( plPlane, dArea)) + return false ; + pMyCrv->SetExtrusion( plPlane.GetVersN()) ; + pMyCrv->SetThickness( 0) ; + // rimuovo eventuali sovrapposizioni (calcolate nel suo piano) + ICURVEPLIST CrvLst ; + if ( ! AdjustLoops( Release( pMyCrv), CrvLst)) + return false ; + // la/le inserisco nel vettore delle curve + for ( auto& pSingCrv : CrvLst) + m_vpCrv.push_back( pSingCrv) ; return true ; } @@ -418,6 +431,7 @@ SurfFlatRegionByContours::GetSurf( void) if ( IsNull( pSfr)) return nullptr ; // aggiungo le diverse curve + bool bExtLoop = false ; bool bFirstCrv ; do { bFirstCrv = true ; @@ -436,6 +450,7 @@ SurfFlatRegionByContours::GetSurf( void) } // provo a inserirla if ( pSfr->AddExtLoop( Release( pCrv))) { + bExtLoop = true ; bFirstCrv = false ; delete m_vpCrv[j] ; m_vpCrv[j] = nullptr ; @@ -460,7 +475,7 @@ SurfFlatRegionByContours::GetSurf( void) } } while ( m_bAllowedMultiChunk && ! bFirstCrv) ; // se non valida, errore - if ( ! pSfr->IsValid()) + if ( ! bExtLoop || ! pSfr->IsValid()) return nullptr ; // restituisco la superficie return Release( pSfr) ;