/* * Copyright (C) =USTC= Fu Li * * Author : Fu Li * Create : 2005-2-27 * Home : http://www.crazy-bit.com/ * Mail : crazybit@263.net * History : */ #ifndef __PCL_INTERFACE_ZOOMSCALE__2005_02_27__H__ #define __PCL_INTERFACE_ZOOMSCALE__2005_02_27__H__ #include "StdDefine.h" class PCL_Interface_ZoomScale ; //============================================================================= /** * Zoom scale support. */ class PCL_Interface_ZoomScale { public: PCL_Interface_ZoomScale() : m_nScale(1) {} virtual ~PCL_Interface_ZoomScale() {} /** Set zoom scale. */ void SetZoomScale (int nScale) {m_nScale = nScale; assert(nScale != 0);} /** Get zoom scale. */ int GetZoomScale() const {return m_nScale;} /** @name Coordinate transformation scaled <==> actual */ //@{ /// Convert point. void Scaled_to_Actual (POINT& pt) const { if (m_nScale > 1) { pt.x /= m_nScale ; pt.y /= m_nScale ; } else if (m_nScale < -1) { pt.x *= -m_nScale ; pt.y *= -m_nScale ; } } /// Convert rect. void Scaled_to_Actual (RECT& rc) const { Scaled_to_Actual (*(POINT*)&rc.left) ; Scaled_to_Actual (*(POINT*)&rc.right) ; } /// Convert point. void Actual_to_Scaled (POINT& pt) const { if (m_nScale > 1) { pt.x *= m_nScale ; pt.y *= m_nScale ; } else if (m_nScale < -1) { pt.x /= -m_nScale ; pt.y /= -m_nScale ; } } /// Convert rect. void Actual_to_Scaled (RECT& rc) const { Actual_to_Scaled (*(POINT*)&rc.left) ; Actual_to_Scaled (*(POINT*)&rc.right) ; } //@} private: int m_nScale ; } ; //============================================================================= // inline implement //============================================================================= #endif