--- /dev/null
+#ifndef DOMAINE_MATH_GPU_H\r
+#define DOMAINE_MATH_GPU_H\r
+\r
+#include "envGLImageCudas.h"\r
+#include "cuda.h"\r
+#include "DomaineEcran_GPU.h"\r
+#include <string>\r
+\r
+using std::string;\r
+using std::ostream;\r
+\r
+#define GPU_SCOPE __host__ __device__\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* Declaration *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |* Public *|\r
+ \*-------------------------------------*/\r
+\r
+namespace gpu\r
+ {\r
+ /**\r
+ * (x0,y0) upper left corner of a dx x dy square.\r
+ * x[x0,x1] y[y0,y1]\r
+ */\r
+ class CBI_GLIMAGE_CUDA DomaineMath\r
+ {\r
+ /*--------------------------------------*\\r
+ |* Constructor *|\r
+ \*-------------------------------------*/\r
+\r
+ public:\r
+\r
+ __host__\r
+ __device__ DomaineMath() :\r
+ x0(0.0), y0(0.0), x1(0.0), y1(0.0), dxDw(0.0), dyDh(0.0)\r
+ {\r
+ // rien\r
+ }\r
+\r
+ __host__\r
+ __device__ DomaineMath(double x0, double y0, double x1, double y1) :\r
+ x0(x0), y0(y0), x1(x1), y1(y1), dxDw(0.0), dyDh(0.0)\r
+ {\r
+ // rien\r
+ }\r
+\r
+ /*--------------------------------------*\\r
+ |* Methodes *|\r
+ \*--------------------------------------*/\r
+\r
+ /*------------------------------*\\r
+ |* CPU *|\r
+ \*-----------------------------*/\r
+\r
+ public:\r
+\r
+ __host__\r
+ string toString() const;\r
+\r
+\r
+\r
+ private:\r
+\r
+ /**\r
+ * called only by ImageFonctionelMOOs_A, so Host Only!\r
+ */\r
+ __host__\r
+ void computeDxDy(int w, int h);\r
+\r
+ /*------------------------------*\\r
+ |* GPU/CPU *|\r
+ \*-----------------------------*/\r
+\r
+ public:\r
+\r
+ __host__ __device__\r
+ gpu::DomaineMath extractDomaineFromSelection(const gpu::DomaineEcran &domaineSelection, int dxEcran, int dyEcran) const\r
+ {\r
+ double zoomX = dxEcran / (double) domaineSelection.dx;\r
+ double zoomY = dyEcran / (double) domaineSelection.dy;\r
+\r
+ double dxResult = dx() / zoomX;\r
+ double dyResult = dy() / zoomY;\r
+\r
+ double pourcentageX = domaineSelection.x0 / (double) dxEcran;\r
+ double pourcentageY = domaineSelection.y0 / (double) dyEcran;\r
+\r
+ return DomaineMath::create(x0 + (pourcentageX * dx()), y0 + (pourcentageY * dy()), dxResult, dyResult);\r
+ }\r
+\r
+ __host__ __device__\r
+ double dx() const\r
+ {\r
+ return x1 - x0;\r
+ }\r
+\r
+ __host__ __device__\r
+ double dy() const\r
+ {\r
+ return y1 - y0;\r
+ }\r
+\r
+ /**\r
+ * toXY est uniquement utilisable lorsque le domaine a été associé a une ImageFonctionelle!\r
+ */\r
+\r
+ __host__ __device__\r
+ void toXY(int i, int j, double* ptrX, double* ptrY) const\r
+ {\r
+ *ptrX = x0 + j * dxDw;\r
+ *ptrY = y0 + i * dyDh;\r
+ }\r
+\r
+ __host__ __device__\r
+ static gpu::DomaineMath create(double x0, double y0, double dx, double dy)\r
+ {\r
+ return DomaineMath(x0, y0, x0 + dx, y0 + dy);\r
+ }\r
+\r
+ /*--------------------------------------*\\r
+ |* Attributs *|\r
+ \*-------------------------------------*/\r
+\r
+ public:\r
+\r
+ //Input\r
+ double x0;\r
+ double y0;\r
+ double x1;\r
+ double y1;\r
+\r
+ private:\r
+\r
+ // Tools\r
+ double dxDw; //old dx\r
+ double dyDh; //old dy\r
+\r
+ friend class ImageFonctionelMOOs_A;\r
+ // Toutes les méthode de la classe ImageFonctionelMOOs_A sont amie\r
+ };\r
+\r
+ CBI_GLIMAGE_CUDA __host__ ostream& operator<<(ostream& stream, const gpu::DomaineMath& domaine);\r
+\r
+ }\r
+#endif\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* End *|\r
+ \*---------------------------------------------------------------------*/\r
+\r