diff --git a/SceneBasic.cpp b/SceneBasic.cpp index 2d0ea6a..59c037d 100644 --- a/SceneBasic.cpp +++ b/SceneBasic.cpp @@ -972,12 +972,12 @@ Scene::GetPixelZ( const Point3d& ptWin, double& dWinZ) glClear( GL_DEPTH_BUFFER_BIT) ; // pulizia buffer depth per futura scrittura // disegno la scena nella viewport ridotta : questo scrive il depth buffer ( se fossi nella vera - // modalità di selezione GL_SELECT non scriverei le depth nel buffer, in qaunto non c'è una + // modalità di selezione GL_SELECT non scriverei le depth nel buffer, in quanto non c'è una // modalità di rendering) DrawGroup( GDB_ID_ROOT, 1, MdStMkCol( GDB_MD_STD, GDB_ST_ON, GDB_MK_OFF, m_colDef)) ; glFlush() ; // per sicurezza attendo - // leggo la Z del pizel corrente, le coordinate x e y non cambiano rispetto alla viewport originale + // leggo la Z del pixel corrente, le coordinate x e y non cambiano rispetto alla viewport originale glReadBuffer( GL_FRONT) ; float dZ ; bool bOk = true ; diff --git a/SceneCamera.cpp b/SceneCamera.cpp index d7e4b9d..3eea6a8 100644 --- a/SceneCamera.cpp +++ b/SceneCamera.cpp @@ -540,13 +540,6 @@ Scene::ZoomOnPoint( const Point3d& ptWin, double dCoeff) if ( ! UnProject( ptView, ptWorld)) return false ; - // verifico che il punto sia nelle dimensioni del mondo geometrico - if ( ! m_b3ExtWorld.IsEmpty() && ! m_b3ExtWorld.Encloses( ptWorld)) { - ptWorld.x = Clamp( ptWorld.x, m_b3ExtWorld.GetMin().x, m_b3ExtWorld.GetMax().x) ; - ptWorld.y = Clamp( ptWorld.y, m_b3ExtWorld.GetMin().y, m_b3ExtWorld.GetMax().y) ; - ptWorld.z = Clamp( ptWorld.z, m_b3ExtWorld.GetMin().z, m_b3ExtWorld.GetMax().z) ; - } - // modifico opportunamente il centro di vista Point3d ptOldCen = m_ptCenter ; Point3d ptNewCen = ptWorld + ( m_ptCenter - ptWorld) * dCoeff ; @@ -583,12 +576,16 @@ Scene::ZoomOnPoint( const Point3d& ptWin, double dCoeff) bool Scene::ZoomWin( const Point3d& ptWin1, const Point3d& ptWin2) { + // leggo Z del pixel + double dWinZ ; + GetPixelZ( Media( ptWin1, ptWin2), dWinZ) ; + // porto i punti in coordinate mondo Point3d ptWorld1 ; - if ( ! UnProject( Point3d( ptWin1.x, ptWin1.y, GetProjectedCenter().z), ptWorld1)) + if ( ! UnProject( Point3d( ptWin1.x, ptWin1.y, dWinZ), ptWorld1)) return false ; Point3d ptWorld2 ; - if ( ! UnProject( Point3d( ptWin2.x, ptWin2.y, GetProjectedCenter().z), ptWorld2)) + if ( ! UnProject( Point3d( ptWin2.x, ptWin2.y, dWinZ), ptWorld2)) return false ; // recupero il riferimento della camera (vista)