00001 #ifndef TRANSFER_FUNCTION_GUI_H
00002 #define TRANSFER_FUNCTION_GUI_H
00003
00004 #include "common.h"
00005 #include <vector>
00006
00007 #include "Colours.h"
00008
00017 class TFControlPoint;
00018
00019 enum ColourSpace
00020 {
00021 COLOURSPACE_RGB,
00022 COLOURSPACE_LAB
00023 };
00024
00025 class TransferFunctionGUI
00026 {
00027 public:
00028 static float calcInterpolationValueBetweenControlPoints(int x, std::vector<TFControlPoint>::iterator currentLeft, std::vector<TFControlPoint>::iterator currentRight);
00029 static RGB_Colour interpolateControlPointColours(float interPolBalance, std::vector<TFControlPoint>::iterator currentLeft, std::vector<TFControlPoint>::iterator currentRight);
00030
00031
00032 static void refreshTransferFuncPicker();
00033
00034 static void refreshTransferFuncPickerData();
00035
00036 static void initControlPoints();
00037
00038 static void sortControlPoints();
00039 static void drawControlPointsRelative();
00040 static void drawControlPointsConnection();
00041
00042 static void saveTransferFunctionControlPoints(const char* file);
00043 static void loadTransferFunctionControlPoints(std::string file);
00044
00045 static bool checkForControlPointsAction(int button, int state, int x, int y);
00046
00047 static void deleteSelectedControlPoint();
00048 static bool checkForControlPointsSelection(int x, int y);
00049 static bool checkForControlPointsCreation(int button, int state, int x, int y, const Lab_Colour& colour);
00050
00051 static void createNewControlPoint( int x, int y, const Lab_Colour& colour );
00052 static bool checkIfMouseInsideTransferFunc(int x, int y);
00053 static void processControlPointHitCheck(bool &hit, int x, int y, TFControlPoint &controlPoint);
00054
00055 static bool isAnyControlPointBeingDragged();
00056 static bool isAnyControlPointSelected();
00057
00058 static TFControlPoint* getSelectedControlPoint();
00059
00060 static void setAllControlPointsUndragged();
00061 static void setAllControlPointsUnselected();
00062
00063 static void updateControlPointDragMovement(int mouseX, int mouseY);
00064
00065
00066 static const int g_iTransferFuncPickerWidth;
00067 static const int g_iTransferFuncPickerHeight;
00068
00069 static RGBA_Colour* transferFunctionPickerData;
00070
00071 static std::vector<TFControlPoint> controlPoints;
00072
00073 static int g_iTransferFunctionTextureDisplayHeight;
00074 static int g_iTransferFunctionTextureDisplayYOffset;
00075
00076 static ColourSpace transferFunctionTextureColorSpace;
00077
00078 private:
00079 static bool AABBHitCheck(int mouseX, int mouseY, float AABBSideLength, float AABBCenterX, float AABBCenterY);
00080 };
00081
00082 #endif