EgtGraphics :

- migliorate GetPointFromSelect con superfici trimesh e FindSurfTMSnapPoint per ricerca triangolo/punto dell'oggetto inquadrato nel mirino.
This commit is contained in:
Dario Sassi
2024-03-13 13:35:45 +01:00
parent 7930a229f9
commit fbe6c7232e
2 changed files with 29 additions and 7 deletions
+21 -1
View File
@@ -361,7 +361,27 @@ Scene::GetPointFromSelect( int nSelId, const Point3d& ptView, Point3d& ptSel, in
double dLenMir = 4 * dBlRad ;
// cerco i triangoli intersecati dalla linea di mira
ILSIVECTOR vInfo ;
if ( ! IntersLineSurfTm( ptMir, vtDir, dLenMir, *pStm, vInfo) || vInfo.size() == 0)
if ( ! IntersLineSurfTm( ptMir, vtDir, dLenMir, *pStm, vInfo))
return false ;
// se non trovato alcunchè, cerco le linee che partono dagli angoli e dai punti medi dei lati del rettangolo di mira
VCT3DVECTOR vVtWind = { {0.51, 0.51, 0}, {0, 0.51, 0}, {-0.51, 0.51, 0}, {-0.51, 0, 0},
{-0.51, -0.51, 0}, {0, -0.51, 0}, {0.51, -0.51, 0}, {0.51, 0, 0},
{0.25, 0.51, 0}, {-0.25, 0.51, 0}, {-0.51, 0.25, 0}, {-0.51, -0.25, 0},
{-0.25, -0.51, 0}, {0.25, -0.51, 0}, {0.51, -0.25, 0}, {0.51, 0.25, 0}} ;
for ( int i = 0 ; i < int( vVtWind.size()) && vInfo.empty() ; ++ i) {
// determino punto su vertice del rettangolo di selezione
Point3d ptWinZ2 = ptWinZ + vVtWind[i].x * m_nSelH * X_AX + vVtWind[i].y * m_nSelW * Y_AX ;
// ne ricavo punto di mira
Point3d ptMir2 ;
if ( ! UnProject( ptWinZ2, ptMir2))
return false ;
ptMir2.ToLoc( frEnt) ;
ptMir2 -= vtDir * 2 * dBlRad ;
// interseco con la superficie
if ( ! IntersLineSurfTm( ptMir2, vtDir, dLenMir, *pStm, vInfo))
return false ;
}
if ( vInfo.empty())
return false ;
// recupero il primo punto
ptSel = GetToGlob( vInfo[0].ptI, frEnt) ;