diff --git a/EgtGraphics.rc b/EgtGraphics.rc index 1560048..32f96b1 100644 Binary files a/EgtGraphics.rc and b/EgtGraphics.rc differ diff --git a/Scene.h b/Scene.h index fbb8602..34ec7d6 100644 --- a/Scene.h +++ b/Scene.h @@ -97,6 +97,7 @@ class Scene : public IEGrScene bool PanCamera( const Point3d& ptWinOld, const Point3d& ptWinNew) override ; bool RotateCamera( const Point3d& ptWinOld, const Point3d& ptWinNew) override ; bool ZoomAll( void) override ; + bool ZoomObject( int nId) override ; bool ZoomRadius( double dRadius) override ; bool ZoomChange( double dCoeff) override ; bool ZoomOnPoint( const Point3d& ptWin, double dCoeff) override ; diff --git a/SceneCamera.cpp b/SceneCamera.cpp index bf26a33..90bd36c 100644 --- a/SceneCamera.cpp +++ b/SceneCamera.cpp @@ -301,6 +301,26 @@ Scene::ZoomAll( void) return true ; } +//---------------------------------------------------------------------------- +bool +Scene::ZoomObject( int nId) +{ + // determino l'ingombro dell'oggetto in globale + BBox3d b3Obj ; + if ( m_pGeomDB == nullptr || ! m_pGeomDB->GetGlobalBBox( nId, b3Obj)) + return false ; + + // recupero centro e diametro vista + Point3d ptCent ; + double dDiam ; + if ( ! b3Obj.GetCenter( ptCent) || ! b3Obj.GetDiameter( dDiam)) + return false ; + + // imposto il centro e le dimensioni di vista + m_ptCenter = ptCent ; + return AdjustDimView( dDiam / 2, dDiam / 2) ; +} + //---------------------------------------------------------------------------- bool Scene::ZoomRadius( double dRadius)