scale.h 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #ifndef _scale_h_
  2. #define _scale_h_
  3. /*----------------------------------------------------------\
  4. Includes
  5. \----------------------------------------------------------*/
  6. #include <string>
  7. #include <cmath>
  8. #include <math.h>
  9. #include <assert.h>
  10. #include "vector.h"
  11. #include <stdlib.h>
  12. #define DICOM_SCALE_NAME "DICOM"
  13. /*----------------------------------------------------------\
  14. Classes
  15. \----------------------------------------------------------*/
  16. class CScale
  17. {
  18. public:
  19. double m_dblVer, // distance verticale pour 1 pixel
  20. m_dblHor; // distance horizontale pour 1 pixel
  21. std::string m_strName; // nom de l'échelle
  22. CScale(std::string pszName, double dblHor = 0.0, double dblVer = 0.0, bool fOrthonorme = true);
  23. inline bool operator != (const CScale &sce) { return (!(*this == sce)); };
  24. inline bool operator == (const CScale &sce)
  25. {
  26. return ( (m_fVerOK == sce.m_fVerOK)
  27. && (m_fHorOK == sce.m_fHorOK)
  28. && (m_fOrthonorme == sce.m_fOrthonorme)
  29. && (m_dblVer == sce.m_dblVer)
  30. && (m_dblHor == sce.m_dblHor)
  31. && (m_isDicom == sce.m_isDicom )
  32. );
  33. }
  34. void Update (double dblHor, double dblVer);
  35. void SetScaleLire (double, double);
  36. void SetScale (double, double);
  37. void SetScale (double, const CVector &);
  38. void SetVerticalScale (double, const CVector &);
  39. void SetHorizontalScale (double, const CVector &);
  40. double Surface (Rect &rc) const { return (Surface (rc.Width (), rc.Height ())); }
  41. double Surface (double dblX, double dblY) const;
  42. double Surface (double dblSurface) const;
  43. double Distance (const Point&, const Point&) const;
  44. bool Valid (void) const { return (m_fVerOK || m_fHorOK); };
  45. bool IsDicom (void) const { return m_isDicom; }
  46. // les membres m_dblXXX sont initialisés à 0, donc si le calibrage n'est pas défini
  47. // ces fonctions retournent 0
  48. double DistanceX (long lDistance) const { assert (m_fHorOK);
  49. return (abs (lDistance) * m_dblHor); };
  50. double DistanceY (long lDistance) const { assert (m_fVerOK);
  51. return (abs (lDistance) * m_dblVer); };
  52. double DistanceX (int dwDistance) const { assert (m_fHorOK);
  53. return (dwDistance * m_dblHor); };
  54. double DistanceY (int dwDistance) const { assert (m_fVerOK);
  55. return (dwDistance * m_dblVer); };
  56. double Distance (double dblDistance) const { assert (Valid () && (m_dblHor == m_dblVer) && (dblDistance >= 0.));
  57. return (fabs (dblDistance) * m_dblHor); };
  58. double DistanceX (double dblDistance) const { assert (m_fHorOK);
  59. return (fabs (dblDistance) * m_dblHor); };
  60. double DistanceY (double dblDistance) const { assert (m_fVerOK);
  61. return (fabs (dblDistance) * m_dblVer); };
  62. protected:
  63. bool m_fVerOK, // calibration verticale effectuée
  64. m_fHorOK, // calibration horizontale effectuée
  65. m_fOrthonorme,// calbiration horizontale = calibration verticale
  66. m_isDicom;
  67. };
  68. /*----------------------------------------------------------\
  69. Variables globales
  70. \----------------------------------------------------------*/
  71. extern const CScale *g_pCurrentScale;
  72. #endif