From f0a1df86cc8b733dca2e1a4f6ae36cd8284f614f Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sat, 28 Nov 2020 16:16:14 +0000 Subject: [PATCH] EgtGeomKernel 2.2k4 : - corretta GetSurfFlatRegionFromFatCurve per creazione superficie quando curva non su piano XY. --- EgtGeomKernel.rc | Bin 11718 -> 11718 bytes SfrCreate.cpp | 12 ++++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index b4acb7d9da731f0935bcfba403cbdd216e432db6..e39fb9e16d498f2fc524c8f5b15c12cb8eb4598c 100644 GIT binary patch delta 110 zcmX>WeJpyzA2vpl&G-4vGfl1&(wY2&Q;pGNvZAo=W*@FeEMOU1X1ItOWeJpyzA2vqg&G-4vGfl1&(wY2&Q;pGhvZAo=W*@FeEMOU1X1ItO diff --git a/SfrCreate.cpp b/SfrCreate.cpp index 752d7a0..afe0871 100644 --- a/SfrCreate.cpp +++ b/SfrCreate.cpp @@ -119,9 +119,13 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b if ( IsNull( pCurve)) return nullptr ; // la inserisco in una curva composita + Vector3d vtExtr ; pCrv->GetExtrusion( vtExtr) ; + if ( vtExtr.IsSmall()) + vtExtr = Z_AX ; PtrOwner pCompo1( CreateBasicCurveComposite()) ; if ( IsNull( pCompo1) || ! pCompo1->AddCurve( Release( pCurve))) return nullptr ; + pCompo1->SetExtrusion( vtExtr) ; // se distanza tra gli estremi minore di due volte il raggio la chiudo, purchè curva abbastanza lunga Point3d ptStart, ptEnd, ptMid ; Vector3d vtStart, vtEnd ; @@ -228,12 +232,12 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b return nullptr ; // verifico se arco tangente alla prima o alla seconda curva if ( AreSameVectorApprox( vtEnd1, vtEnd)) { - if ( ! pArc1->Set2PVN( ptEnd1, ptStart2, vtEnd1, Z_AX) || + if ( ! pArc1->Set2PVN( ptEnd1, ptStart2, vtEnd1, vtExtr) || ! pCompo1->AddCurve( Release( pArc1))) return nullptr ; } else { - if ( ! pArc1->Set2PVN( ptStart2, ptEnd1, -vtStart2, Z_AX) || + if ( ! pArc1->Set2PVN( ptStart2, ptEnd1, -vtStart2, vtExtr) || ! pArc1->Invert() || ! pCompo1->AddCurve( Release( pArc1))) return nullptr ; @@ -250,12 +254,12 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b return nullptr ; // verifico se arco tangente alla seconda o alla prima curva if ( AreOppositeVectorApprox( vtEnd2, vtStart)) { - if ( ! pArc2->Set2PVN( ptEnd2, ptStart1, vtEnd2, Z_AX) || + if ( ! pArc2->Set2PVN( ptEnd2, ptStart1, vtEnd2, vtExtr) || ! pCompo2->AddCurve( Release( pArc2))) return nullptr ; } else { - if ( ! pArc2->Set2PVN( ptStart1, ptEnd2, -vtStart1, Z_AX) || + if ( ! pArc2->Set2PVN( ptStart1, ptEnd2, -vtStart1, vtExtr) || ! pArc2->Invert() || ! pCompo2->AddCurve( Release( pArc2))) return nullptr ;