Ajout de l'ensemble du workspace.
[GPU.git] / WCudaMSE / API_Bilat_Graph2D / INC / view / GLGraph.h
diff --git a/WCudaMSE/API_Bilat_Graph2D/INC/view/GLGraph.h b/WCudaMSE/API_Bilat_Graph2D/INC/view/GLGraph.h
new file mode 100755 (executable)
index 0000000..d97a47e
--- /dev/null
@@ -0,0 +1,162 @@
+#ifndef GLGRAPH_H_\r
+#define GLGRAPH_H_\r
+#include "envGraph.h"\r
+#include "Displayable_A.h"\r
+#include "Viewport.h"\r
+#include "GraphObserver_I.h"\r
+#include "FigureVisitor.h"\r
+#include "Graph.h"\r
+#include "CurveParametric.h"\r
+#include "CurveAnalytic.h"\r
+\r
+#include "GLFigure.h"\r
+#include "GLGraphRunnable.h"\r
+\r
+#include <map>\r
+using std::map;\r
+\r
+#include <queue>\r
+using std::queue;\r
+\r
+#include <mutex>\r
+#include <atomic>\r
+//#include <boost/thread/mutex.hpp>\r
+//#include <boost/atomic.hpp>\r
+\r
+using std::mutex;\r
+using std::atomic;\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    Declaration                                     *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |*            Public                  *|\r
+ \*-------------------------------------*/\r
+\r
+class CBI_GRAPH GLGraph: public GraphObserver_I, public Displayable_A, public FigureVisitor_I\r
+    {\r
+    public:\r
+       GLGraph(Graph* ptrGraph);\r
+\r
+       virtual ~GLGraph();\r
+\r
+       /*--------------------------------------*\\r
+        |*             Methodes                *|\r
+        \*-------------------------------------*/\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       void init(Panel_A &panel);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       void reshape(Panel_A &panel, int w, int h);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       void display(Panel_A &panel);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       void release(Panel_A &panel);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       void onFigureAdd(Figure* ptrFigure);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       void onFigureRemove(Figure* ptrFigure);\r
+\r
+       /**\r
+        * Override\r
+        */\r
+       void update();\r
+\r
+       /**\r
+        * Override\r
+        * visit create the right GLPolylines\r
+        */\r
+       virtual void visit(CurveParametric* ptrPolylines);\r
+\r
+       /**\r
+        * Override\r
+        * visit create the right GLCurve\r
+        */\r
+       virtual void visit(CurveAnalytic* ptrCurve);\r
+\r
+    private:\r
+       void computeViewports(Panel_A &panel);\r
+\r
+       int computeTitleHeight(Panel_A &panel);\r
+\r
+       void drawGraph(Panel_A &panel);\r
+\r
+       void drawTitle(Panel_A &panel);\r
+\r
+       void drawLegend(Panel_A &panel);\r
+\r
+       void drawGraphCadre(Panel_A &panel);\r
+\r
+       void drawGraphGrid(Panel_A &panel);\r
+\r
+       void processQueue(Panel_A &panel);\r
+\r
+       void updateGL(Panel_A &panel);\r
+\r
+       const Font_A* loadFont(FontLoader_A* ptrFontLoader, Title* ptrTitle);\r
+\r
+       /*--------------------------------------*\\r
+        |*             Get                     *|\r
+        \*-------------------------------------*/\r
+\r
+    public:\r
+\r
+       Viewport getPanelViewport() const;\r
+\r
+       Viewport getGraphViewport() const;\r
+\r
+       Viewport getTitleViewport() const;\r
+\r
+       Graph* getGraph() const;\r
+\r
+       /*--------------------------------------*\\r
+        |*             Attributs               *|\r
+        \*-------------------------------------*/\r
+\r
+    private:\r
+       // Inputs\r
+       Graph* ptrGraph;\r
+\r
+       // Tools\r
+       atomic<bool> isNeedUpdate;\r
+       map<Figure*, GLFigure*> mapFigureGL;\r
+       queue<GLGraphRunnable*> queueGLGraphRunnable;\r
+       Viewport viewportPanel; //in pixel\r
+       Viewport viewportGraph; //in pixel\r
+       Viewport viewportTitle; //in pixel\r
+\r
+       //Thread safe\r
+       mutex mutexQueue;\r
+       mutex mutexMapFigure;\r
+\r
+       static const int LEFT_MARGIN;\r
+       static const int RIGHT_MARGIN;\r
+       static const int TOP_MARGIN;\r
+       static const int BOTTOM_MARGIN;\r
+       static const int GRAPH_MARGIN;\r
+       static const float TITLE_V_SPACING;\r
+    };\r
+\r
+#endif \r
+\r
+/*----------------------------------------------------------------------*\\r
+ |*                    End                                             *|\r
+ \*---------------------------------------------------------------------*/\r