From 296b274190d142d121fecbb48a3c944bf6ab170e Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 22 Nov 2023 20:15:56 +0100 Subject: [PATCH] EgtGeomKernel : - in Polyline aggiunte TempProp e funzioni di Set e Get relative - in ProjectCurveOnSurfTm migliorato calcolo normale nei punti proiettati in - altre piccole migliorie nelle inizializzazioni di oggetti geometrici. --- CalcPocketing.cpp | 5 ++--- CurveArc.cpp | 4 +--- CurveBezier.cpp | 4 +--- CurveComposite.cpp | 4 +--- CurveLine.cpp | 4 +--- PolyLine.cpp | 3 +-- ProjectCurveSurfTm.cpp | 13 +++++++++++-- 7 files changed, 18 insertions(+), 19 deletions(-) diff --git a/CalcPocketing.cpp b/CalcPocketing.cpp index f36850d..2903e83 100644 --- a/CalcPocketing.cpp +++ b/CalcPocketing.cpp @@ -2684,7 +2684,7 @@ AddZigZag( const ISurfFlatRegion* pSrfPock, double dRad, double dStep, double dA // Offset della regione per curva ZigZag double dOffs = dRad ; - double dExtra = min( 0.1 * ( 2.0 * dRad), 2.0) ; + double dExtra = 0 ; // ciclo su tutti i chunks della superificie originale for ( int c = 0 ; c < pSrfPock->GetChunkCount() ; ++ c) { @@ -2815,7 +2815,7 @@ AddOneWay( const ISurfFlatRegion* pSrfPock, double dRad, double dStep, double dA { double dOffs = dRad ; - double dExtra = min( 0.1 * ( 2. * dRad), 1.0) ; + double dExtra = 0 ; // copio la regione da svuotare PtrOwner pSrfToPock( pSrfPock->Clone()) ; @@ -2921,7 +2921,6 @@ CalcPocketing( const ISurfFlatRegion *pSfr, double dRad, double dStep, double dA { // controllo dei parametri if ( pSfr == nullptr || ! pSfr->IsValid() || - dRad < EPS_SMALL || dStep < EPS_SMALL || ( nType != POCKET_SUB_ZIGZAG && nType != POCKET_SUB_ONEWAY && nType != POCKET_SUB_SPIRALIN && nType != POCKET_SUB_SPIRALOUT)) return false ; diff --git a/CurveArc.cpp b/CurveArc.cpp index 63f27bf..e33aebf 100644 --- a/CurveArc.cpp +++ b/CurveArc.cpp @@ -61,10 +61,8 @@ class ArcApproxer //---------------------------------------------------------------------------- CurveArc::CurveArc( void) : m_nStatus( TO_VERIFY), m_PtCen(), m_VtN(), m_VtS(), m_dRad(), - m_dAngCenDeg(), m_dDeltaN(), m_VtExtr(), m_dThick() + m_dAngCenDeg(), m_dDeltaN(), m_VtExtr(), m_dThick(), m_nTempProp{0,0} { - m_nTempProp[0] = 0 ; - m_nTempProp[1] = 0 ; } //---------------------------------------------------------------------------- diff --git a/CurveBezier.cpp b/CurveBezier.cpp index 1060f52..383ecdf 100644 --- a/CurveBezier.cpp +++ b/CurveBezier.cpp @@ -45,10 +45,8 @@ GEOOBJ_REGISTER( CRV_BEZIER, NGE_C_BEZ, CurveBezier) ; //---------------------------------------------------------------------------- CurveBezier::CurveBezier( void) : m_nStatus( TO_VERIFY), m_nDeg(), m_bRat( false), m_dParSing( -2), - m_VtExtr(), m_dThick() + m_VtExtr(), m_dThick(), m_nTempProp{0,0} { - m_nTempProp[0] = 0 ; - m_nTempProp[1] = 0 ; } //---------------------------------------------------------------------------- diff --git a/CurveComposite.cpp b/CurveComposite.cpp index 9b69a31..4dd3b6e 100644 --- a/CurveComposite.cpp +++ b/CurveComposite.cpp @@ -42,10 +42,8 @@ GEOOBJ_REGISTER( CRV_COMPO, NGE_C_CMP, CurveComposite) ; //---------------------------------------------------------------------------- CurveComposite::CurveComposite( void) - : m_nStatus( TO_VERIFY), m_VtExtr(), m_dThick(), m_ptStart(), m_Iter( m_CrvSmplS.end()) + : m_nStatus( TO_VERIFY), m_VtExtr(), m_dThick(), m_ptStart(), m_Iter( m_CrvSmplS.end()), m_nTempProp{0,0} { - m_nTempProp[0] = 0 ; - m_nTempProp[1] = 0 ; } //---------------------------------------------------------------------------- diff --git a/CurveLine.cpp b/CurveLine.cpp index aee34df..bd098c8 100644 --- a/CurveLine.cpp +++ b/CurveLine.cpp @@ -30,10 +30,8 @@ GEOOBJ_REGISTER( CRV_LINE, NGE_C_LIN, CurveLine) ; //---------------------------------------------------------------------------- CurveLine::CurveLine( void) - : m_nStatus( TO_VERIFY), m_PtStart(), m_PtEnd(), m_VtExtr(), m_dThick() + : m_nStatus( TO_VERIFY), m_PtStart(), m_PtEnd(), m_VtExtr(), m_dThick(), m_nTempProp{0,0} { - m_nTempProp[0] = 0 ; - m_nTempProp[1] = 0 ; } //---------------------------------------------------------------------------- diff --git a/PolyLine.cpp b/PolyLine.cpp index 6e21692..d10bed7 100644 --- a/PolyLine.cpp +++ b/PolyLine.cpp @@ -28,9 +28,8 @@ using namespace std ; //---------------------------------------------------------------------------- PolyLine::PolyLine( void) + : m_nRejected( 0), m_iter( m_lUPoints.end()), m_nTempProp{0,0} { - m_nRejected = 0 ; - m_iter = m_lUPoints.end() ; } //---------------------------------------------------------------------------- diff --git a/ProjectCurveSurfTm.cpp b/ProjectCurveSurfTm.cpp index b61f079..647ef6d 100644 --- a/ProjectCurveSurfTm.cpp +++ b/ProjectCurveSurfTm.cpp @@ -62,16 +62,25 @@ ProjectCurveOnSurfTm( const ICurve& crCrv, const ISurfTriMesh& tmSurf, const Vec ILSIVECTOR vIntRes ; intPLSTM.GetInters( ptL, 1, vIntRes, false) ; if ( vIntRes.size() > 0) { + // calcolo il punto int nI = int( vIntRes.size()) - 1 ; Point3d ptInt ; if ( vIntRes[nI].nILTT == ILTT_SEGM || vIntRes[nI].nILTT == ILTT_SEGM_ON_EDGE) ptInt = vIntRes[nI].ptI2 ; else ptInt = vIntRes[nI].ptI ; - Triangle3d trTria ; + // calcolo la normale (si calcola smooth, in caso di errore si prende quella del triangolo) + Triangle3dEx trTria ; if ( ! tmSurf.GetTriangle( vIntRes[nI].nT, trTria)) return false ; - vMyPt5ax.emplace_back( ptInt, trTria.GetN(), dU, 1) ; + Vector3d vtN ; + double dU, dV, dW ; + if ( BarycentricCoord( ptInt, trTria, dU, dV, dW)) + vtN = dU * trTria.GetVertexNorm( 0) + dV * trTria.GetVertexNorm( 1) + dW * trTria.GetVertexNorm( 2) ; + if ( ! vtN.Normalize()) + vtN = trTria.GetN() ; + // aggiungo al vettore dei proiettati + vMyPt5ax.emplace_back( ptInt, vtN, dU, 1) ; } bFound = PL.GetNextUPoint( &dU, &ptP) ; }