scale.h 4.1 KB

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