EIMBase.h 6.0 KB

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