EIMBase.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. ////////////////////////////////////////////////////////////////////////////////////
  2. /// Fichier EIMBase.h
  3. ///
  4. ////////////////////////////////////////////////////////////////////////////////////
  5. #ifndef _EIMBase_h_
  6. #define _EIMBase_h_
  7. /*----------------------------------------------------------\
  8. Includes
  9. \----------------------------------------------------------*/
  10. #include "scale.h"
  11. #include "vector.h"
  12. #include "CEIMInfo.h"
  13. #include <vector>
  14. #include <cassert>
  15. /*----------------------------------------------------------\
  16. Constantes
  17. \----------------------------------------------------------*/
  18. #define THICKNESS 300 // epaisseur sur laquelle le calcul est effectue
  19. //#define QI_MIN 60
  20. #define QI_MIN 5 // Provisoire : pour tests EIM Live
  21. #define MAX_POINTS_EIM_AUTO 1024
  22. /*----------------------------------------------------------\
  23. Classes
  24. \----------------------------------------------------------*/
  25. class CEIMResult;
  26. class ExtendedImage;
  27. class CEIMBase
  28. {
  29. private:
  30. enum enumDirection
  31. {
  32. enumUp,
  33. enumDown
  34. };
  35. bool LookForFirstPoint (long &, long, long &, unsigned char*);
  36. bool LookForVariation (long &, char *, long, enumDirection, long &);
  37. bool AddVector (sParoi &);
  38. bool FindOpposite (sParoi &, sParoi &);
  39. void SetMiddlePoint (sSlope &, CVector &, bool reverseSlope=false);
  40. int MeasureLineBuffer (sParoi &, unsigned char*, char *, long);
  41. void ComputeEIM (CEIMInfo *);
  42. void Paroi (void);
  43. void Diameter();
  44. void ParallelismeEIM();
  45. void ParallelismeDistensibilite();
  46. // élements liés à la mesure
  47. public:
  48. CEIMInfo *m_pMeasures; // pointeur sur mesures d'EIM.
  49. double m_coeff_a, m_coeff_b, m_coeff_c; // Coefficient pour la courbe approximée
  50. protected:
  51. CVector m_vUser; // vecteur parallèle à la paroi (normalement ...)
  52. ExtendedImage *m_image;
  53. double m_minx_curve;
  54. double m_max_curve;
  55. int m_nbpoints_curve;
  56. bool m_bNearWall; // Indique si la mesure est pour le Near Wall ou le FarWall
  57. int m_Max_Alignement; // Indique la longueur utilisé pour l'alignement
  58. int m_indexParoi;
  59. int m_diag; // Pour le diagnostic de l'arret de l'algorithme
  60. public:
  61. Point m_ptDebut;
  62. Point m_ptFin;
  63. protected:
  64. Point m_pt1perp[MAX_POINTS_EIM_AUTO], m_pt2perp[MAX_POINTS_EIM_AUTO];
  65. Point m_perpap1, m_perpap2;
  66. std::vector<double> m_arVariance,
  67. m_arVarianceINT,
  68. m_arVarianceAA,
  69. m_arVarianceII;
  70. unsigned int m_uErrorID; // ID de la chaîne à afficher en cas d'erreur
  71. public:
  72. unsigned char m_bDelta1,
  73. m_bDelta2;
  74. unsigned char m_bSeuil1;
  75. protected:
  76. unsigned char m_bBuffer [THICKNESS];// stockage d'une ligne/colonne
  77. char m_cOffsets [THICKNESS];// stockage de la variation de densite d'une ligne/colonne
  78. bool m_fDiameter; // type de la derniere mesure : diametre ou EIM
  79. static char Delta (unsigned char b1, unsigned char b2);
  80. virtual bool GfxImageValid() { return m_image != NULL; }
  81. public:
  82. bool m_Assist; // Horizontalisation automatique ou non!
  83. // Version de mesure de l'EIM qui améliore les résultats de l'EIM
  84. // Uniquement pour Tomtec pour la version 3.0
  85. bool m_versionTomtecAout08;
  86. CEIMBase(void);
  87. virtual ~CEIMBase(void);
  88. virtual void Release(void);
  89. inline bool Valid(void) const { return (m_dwValidPoints ? true : false); };
  90. bool Measure(ExtendedImage *, const Point &, const Point &, bool, CEIMResult *m_res = NULL);
  91. double Direction();
  92. bool Update(CEIMResult *m_res = NULL);
  93. virtual unsigned char IQ(void)
  94. {
  95. assert (m_pMeasures && m_image);
  96. return (unsigned char )(100 * m_dblQI);
  97. }
  98. virtual void GraphMeanInit() { }
  99. virtual void GraphMeanAddMeasure( bool, double ) { }
  100. virtual void PrintDiameter() { }
  101. virtual void PrintErrorQIMin() { }
  102. virtual void PrintResult() { }
  103. virtual void SetEimAssisted(bool valide); // [JAK - 27/1/2003]Mesure de paroi assistée
  104. bool GetEimAssisted(); // [JAK - 27/1/2003]
  105. int CalculEimAutomatique(int mode, bool bActionDiametre, Point *ptClick0, Point *ptClick1, Point *ptLastClick, unsigned char *bClicks, ExtendedImage* img,bool *fBackToNone);
  106. int CalculEimAutomatique(int mode, bool bActionDiametre, Point *ptClick0, Point *ptClick1, Point *ptLastClick, unsigned char *bClicks, bool *fBackToNone);
  107. bool Measure(const Point &, const Point &, bool, CEIMResult *m_res = NULL);
  108. Point m_StartPoint;
  109. Point m_EndPoint;
  110. bool m_bDisplay;
  111. enum enumAlgo
  112. {
  113. algoProfile,
  114. algoSymmetry
  115. };
  116. long m_dwPoints, // nombre total de points (d'éléments de m_pMeasures)
  117. m_dwValidPoints; // nombre de points ayant présenté le bon profil
  118. double m_dblEIMMax, m_dblEIMMean, m_dblEIMMin, // EIM
  119. //#ifdef VERSION_SHOW_VARIANCE // [JAK - 17/6/2002]
  120. m_dblVariance, // [JAK - 13/5/2002]
  121. //#endif
  122. m_dblINTMax, m_dblINTMean, m_dblINTMin, // Intima Max , Moyenne , et Min.
  123. m_dblEIMdMean, m_dblINTdMean, m_dblMEDdMean, // Media Max ,
  124. m_dblDiaAAMax, m_dblDiaAAMean, m_dblDiaAAMin, // diamètre Adventice/Adventice Max , Moyen et Minimum
  125. m_dblDiaIIMax, m_dblDiaIIMean, m_dblDiaIIMin, // diamètres Intima/Intima Max , Moyen et Minimum
  126. m_dblDistance,
  127. m_dblQI,m_dblQIMean,
  128. m_dblIA, m_dblIAd;
  129. std::string m_strInfo; // chaîne de résultat
  130. enumAlgo m_algoDiameter; // méthode utilisé pour le diamètre
  131. double m_dblVarianceAA, m_dblVarianceII;
  132. bool m_parallelismeDiametre;
  133. //returns the last error generated.
  134. //Use CString.LoadString() to get the corresponding text
  135. unsigned int GetErrorID(void);
  136. virtual bool PointInBuffer(const Point& pt);
  137. virtual unsigned char GetIntensity(const Point& pt);
  138. };
  139. #endif // EIMBASE_H__10EE0714_09E1_11D2_B0D4_00A024B882A7__INCLUDED_