From d972d11e0fdb82e1c8895d07451d3ce880d4b6f2 Mon Sep 17 00:00:00 2001 From: DarioS Date: Fri, 11 Jun 2021 15:54:55 +0200 Subject: [PATCH 1/2] EgtGeomKernel 2.3f2 : - miglioria a Triangulate (LM). --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes Triangulate.cpp | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index b310e6ede406fe65d96890642e2b12a1bd6cfd87..fe56437e6e404fc3802b2dbf8f76b1f885d19728 100644 GIT binary patch delta 94 zcmdlNy)SyhFE&P_&A-_cnHh~HD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-Vf-5U delta 94 zcmdlNy)SyhFE&QQ&A-_cnHdcyD{|{@_Trkr0u;H;XNwSVW8B;$>;>dw2zN+>g;Df- LFmBFL4&ed-U|t&X diff --git a/Triangulate.cpp b/Triangulate.cpp index c24bcdd..0d3c665 100644 --- a/Triangulate.cpp +++ b/Triangulate.cpp @@ -534,7 +534,8 @@ Triangulate::TestTriangle( const PNTVECTOR& vPt, const INTVECTOR& vPol, // Test if current vertex, v[i], is an ear bool bIsEar = true ; // An ear must be convex (here counterclockwise) - if ( TriangleIsCCW( vPt[vPol[vPrev[i]]], vPt[vPol[i]], vPt[vPol[vNext[i]]])) { + if ( TriangleIsCCW( vPt[vPol[vPrev[i]]], vPt[vPol[i]], vPt[vPol[vNext[i]]]) && + ! Collinear( vPt[vPol[vPrev[i]]], vPt[vPol[i]], vPt[vPol[vNext[i]]])) { // Loop over all vertices not part of the tentative ear BBox3d b3Tria ; b3Tria.Add( vPt[vPol[vPrev[i]]]) ; From 4b1bf75911b2db8711fbd7ac75b88ab77eeb8f28 Mon Sep 17 00:00:00 2001 From: DarioS Date: Tue, 22 Jun 2021 20:17:13 +0200 Subject: [PATCH 2/2] EgtGeomKernel 2.3f3 : - corretto crash in offset di curva generica con estrusione coincidente con linea. --- EgtGeomKernel.rc | Bin 11710 -> 11710 bytes OffsetCurve.cpp | 20 ++++++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index fe56437e6e404fc3802b2dbf8f76b1f885d19728..0aefca9eec3e279ab1c8aa2f0f8920b72665368e 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/OffsetCurve.cpp b/OffsetCurve.cpp index 69ed9e1..e67f5ac 100644 --- a/OffsetCurve.cpp +++ b/OffsetCurve.cpp @@ -178,17 +178,25 @@ OffsetCurve::Make( const ICurve* pCrv, double dDist, int nType) if ( IsNull( pCrv1)) return false ; pCrv1->SetTempProp( nInd1) ; - if ( ! pCrv1->SimpleOffset( dDist, ICurve::OFF_FILLET) && - GetBasicCurveArc( pCrv1)->MyExtendedOffset( dDist, true, ICurve::OFF_FILLET)) - pCrv1->SetTempProp( - nInd1) ; + if ( ! pCrv1->SimpleOffset( dDist, ICurve::OFF_FILLET)) { + CurveArc* pArc = GetBasicCurveArc( pCrv1) ; + if ( pArc == nullptr) + return false ; + if ( pArc->MyExtendedOffset( dDist, true, ICurve::OFF_FILLET)) + pCrv1->SetTempProp( - nInd1) ; + } // curve successive PtrOwner pCrv2( ccCopy2.RemoveFirstOrLastCurve( false)) ; while ( ! IsNull( pCrv2)) { // eseguo semplice offset pCrv2->SetTempProp( nInd1 + 1) ; - if ( ! pCrv2->SimpleOffset( dDist, ICurve::OFF_FILLET) && - GetBasicCurveArc( pCrv2)->MyExtendedOffset( dDist, true, ICurve::OFF_FILLET)) - pCrv2->SetTempProp( - (nInd1 + 1)) ; + if ( ! pCrv2->SimpleOffset( dDist, ICurve::OFF_FILLET)) { + CurveArc* pArc = GetBasicCurveArc( pCrv2) ; + if ( pArc == nullptr) + return false ; + if ( pArc->MyExtendedOffset( dDist, true, ICurve::OFF_FILLET)) + pCrv2->SetTempProp( - ( nInd1 + 1)) ; + } // verifico relazione con la curva precedente e aggiungo eventuali curve intermedie CurveComposite ccTemp ; bool bOk = VerifyAndAdjustExternalAngle( pCrv1, pCrv2, vAngs[nInd1], dDist, ICurve::OFF_FILLET, ccTemp) ;