Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / API_Bilat_Image_GL_Cuda / INC / gpu / DomaineMath_GPU.h
diff --git a/WCudaMSE/API_Bilat_Image_GL_Cuda/INC/gpu/DomaineMath_GPU.h b/WCudaMSE/API_Bilat_Image_GL_Cuda/INC/gpu/DomaineMath_GPU.h
new file mode 100755 (executable)
index 0000000..262772d
--- /dev/null
@@ -0,0 +1,153 @@
+#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