diff --git a/EgtGraphics.rc b/EgtGraphics.rc index fe15792..6b79b1c 100644 Binary files a/EgtGraphics.rc and b/EgtGraphics.rc differ diff --git a/SceneBasic.cpp b/SceneBasic.cpp index 2fbc448..01238a0 100644 --- a/SceneBasic.cpp +++ b/SceneBasic.cpp @@ -725,7 +725,7 @@ Scene::Draw( void) // disegno le geometrie del DB // prima passata per superfici con illuminazione abilitata glEnable( GL_POLYGON_OFFSET_FILL) ; - glPolygonOffset( 1.0, 1.0) ; + glPolygonOffset( 0.75, 0.75) ; glEnable( GL_LIGHTING) ; DrawGroup( GDB_ID_ROOT, 1, MdStMk( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF)) ; glDisable( GL_POLYGON_OFFSET_FILL) ; diff --git a/SceneGeom.cpp b/SceneGeom.cpp index 93dca37..5d381ae 100644 --- a/SceneGeom.cpp +++ b/SceneGeom.cpp @@ -169,7 +169,7 @@ Scene::DrawGeoObj( const IGdbIterator& iIter, int nPass, MdStMk siObj) if ( m_bNewWay && nGeoType == SRF_TRIMESH) { const ISurfTriMesh* pSTM = GetSurfTriMesh( pGeoObj) ; if ( pSTM != nullptr && pSTM->GetTriangleNum() > 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() ;