From c98c9a0ff693269b2f157f16556f70382d32b351 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 30 Dec 2014 17:34:47 +0000 Subject: [PATCH] EgtGraphics 1.5l3 : - migliorato calcolo mark e arrow su curve - corretto snap punti su curva composita con spessore. --- EgtGraphics.rc | Bin 11398 -> 11398 bytes SceneBasic.cpp | 2 +- SceneGeom.cpp | 26 +++++++++++++------------- SceneGrid.cpp | 2 +- SceneSnap.cpp | 11 +++++++++++ 5 files changed, 26 insertions(+), 15 deletions(-) diff --git a/EgtGraphics.rc b/EgtGraphics.rc index fe15792c1c025e0d9e03bcbae9580f9bab6851bb..6b79b1cf7c12165f806b1c9a1a53c4c257faaaef 100644 GIT binary patch delta 257 zcmZpRY>V8mj#=B4A&()QA%`K8p_n0qL4iSoArvT*$xy-@4o;q@J#X?VRS{m0>pj8l&0(knxpwjg=B&*jYC6oQQky4geq{mx$?!v- delta 256 zcmZpRY>V8mj#=H4A&()QA%`KAp%{o27&I7y8A=!ufjAS$3kAw%g4mNMYD!Ojr<%1n zj%6Mbqv7U$zWq#-_izR=8ctRe(%o#s6~qD-)n$f@h%s&wwgGa1YEeWtuaklbqZuK= xxYGetTriangleNum() > N_MIN_TRIA_NEWWAY) - m_bNewWay = true ; + bNewWay = true ; } ObjEGrGraphics* pGraphics = CreateObjEGrGraphics( bNewWay) ; if ( pGraphics == nullptr) @@ -416,16 +416,19 @@ CalcCurveTailMark( const Vector3d& vtRef, const PolyLine& plCrv, PolyLine& plMar break ; Vector3d vtNxDir = ptP2 - ptP1 ; vtNxDir.Normalize() ; - if ( ( vtDir * vtNxDir) > cos( 30 * DEGTORAD)) { - vtDir = ptP1 - ptTail ; - dLen = vtDir.Len() ; - vtDir /= dLen ; - } + if ( ( vtDir * vtNxDir) > cos( 30 * DEGTORAD)) + dLen = (ptP1 - ptTail).Len() ; else break ; } + // recupero lunghezza del percorso + double dLenRef = 0 ; + plCrv.GetApproxLength( dLenRef) ; + // lunghezza della freccia // calcolo dimensioni traverso - double dLenTr = dLen ; + const double TR_COEFF = 0.6 ; + const double LEN_COEFF = 0.15 ; + double dLenTr = TR_COEFF * min( LEN_COEFF * dLenRef, dLen) ; if ( dLenTr > MAX_LEN_TR) dLenTr = MAX_LEN_TR ; else if ( dLenTr < MIN_LEN_TR) @@ -488,11 +491,8 @@ CalcCurveTipArrow( const Vector3d& vtRef, const PolyLine& plCrv, PolyLine& plArr break ; Vector3d vtPrDir = ptP2 - ptP1 ; vtPrDir.Normalize() ; - if ( ( vtDir * vtPrDir) > cos( 30 * DEGTORAD)) { - vtDir = ptTip - ptP1 ; - dLen = vtDir.Len() ; - vtDir /= dLen ; - } + if ( ( vtDir * vtPrDir) > cos( 30 * DEGTORAD)) + dLen = (ptTip - ptP1).Len() ; else break ; } @@ -500,7 +500,7 @@ CalcCurveTipArrow( const Vector3d& vtRef, const PolyLine& plCrv, PolyLine& plArr double dLenRef = 0 ; plCrv.GetApproxLength( dLenRef) ; // lunghezza della freccia - const double LEN_COEFF = 0.25 ; + const double LEN_COEFF = 0.15 ; double dLenArr = min( LEN_COEFF * dLenRef, dLen) ; if ( dLenArr > MAX_LEN_ARR) dLenArr = MAX_LEN_ARR ; diff --git a/SceneGrid.cpp b/SceneGrid.cpp index c4c21e4..853f061 100644 --- a/SceneGrid.cpp +++ b/SceneGrid.cpp @@ -66,7 +66,7 @@ Scene::DrawGrid( void) // semi-estensione della griglia float dExt = float( m_nExtSstep * m_dSnapStep) ; // abbassamento in Z per evitare sovrapposizioni con geometria - const float Z_DOWN = float( - 0.01) ; + const float Z_DOWN = float( - 0.0005) ; // se richiesto, disegno la griglia if ( m_bShowGrid) { diff --git a/SceneSnap.cpp b/SceneSnap.cpp index b1bb3d1..e5e6517 100644 --- a/SceneSnap.cpp +++ b/SceneSnap.cpp @@ -198,14 +198,25 @@ Scene::GetSelectedSnapPoint( int nSnap, const Point3d& ptWin, int nW, int nH, Po if ( DistPointCurve( ptRef, *pCrvCompo).GetParamAtMinDistPoint( 0, dPar, nFlag)) nCrv = static_cast( dPar) ; } + // vettore estrusione e spessore della curva composita + Vector3d vtExtr = V_NULL ; + pCrvCompo->GetExtrusion( vtExtr) ; + double dThick = 0 ; + pCrvCompo->GetThickness( dThick) ; // ciclo sulle curve elementari int nCont = 0 ; const ICurve* pCrv = pCrvCompo->GetFirstCurve() ; while ( pCrv != nullptr) { + // imposto estrusione e spessore della curva composita + (const_cast(pCrv))->SetExtrusion( vtExtr) ; + (const_cast(pCrv))->SetThickness( dThick) ; // verifico i punti notevoli della curva if ( nCont == nCrv && TestCurveSnapPoints( nSnap, ptWinZ, nId, frEnt, pCrv, dMinSqDist, ptSel)) bFound = true ; + // ripristino valori originali + (const_cast(pCrv))->SetExtrusion( V_NULL) ; + (const_cast(pCrv))->SetThickness( 0) ; // passo alla successiva ++ nCont ; pCrv = pCrvCompo->GetNextCurve() ;