00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _SO_TRANSFER_FUNCTION_ELEMENT_
00026 #define _SO_TRANSFER_FUNCTION_ELEMENT_
00027
00028 #ifdef _MSC_VER
00029 #pragma warning( push )
00030 #pragma warning(disable:4251)
00031 #endif
00032
00033 #include <Inventor/nodes/SoShaderParameter.h>
00034
00035 #include <Inventor/elements/SoAccumulatedElement.h>
00036
00037 #include <Inventor/STL/vector>
00038 #include <Inventor/STL/map>
00039
00040 class SoTransferFunction;
00041 class SoGLRenderAction;
00042
00043 SoEXTENDER_Documented class SoTransferFunctionElement : public SoAccumulatedElement {
00044 SO_ELEMENT_HEADER( SoTransferFunctionElement );
00045
00046 public:
00047
00049 static void set(SoState* state, SoNode *node, SoTransferFunction *m_transferFunctionNode);
00050 static void get(SoState* state, SoTransferFunction *&m_transferFunctionNode);
00051
00053 static void get(SoState* state, std::vector<SoTransferFunction*>&);
00054
00056 static void getDefault(SoTransferFunction *&m_transferFunctionNode);
00057
00059 static SbBool hasTransparency(SoState *state);
00060
00061
00062 virtual void push(SoState *state) ;
00063
00064 private:
00065
00067 virtual void init(SoState* state);
00068
00069 private:
00070 typedef std::vector<SoTransferFunction*> TransferFunctionVector;
00071 typedef TransferFunctionVector::iterator TransferFunctionVectorIt;
00072 typedef std::map<int, SoTransferFunction*> TransferFunctionMap;
00073
00074
00075 static void initClass();
00076 static void exitClass();
00077
00078
00079 static void get(SoState* state, TransferFunctionMap& tfMap);
00080
00082 static bool idEqual(SoTransferFunction* tf, short id);
00083
00085 static int getMinTransferFunctionId(SoState* state);
00087 static int getMaxTransferFunctionId(SoState* state);
00088
00090 static SoTransferFunction* get(SoState* state, int transferFunctionId);
00091
00092 private:
00093
00094
00095
00096 TransferFunctionMap m_transferFunctionList;
00097
00098 SoTransferFunction *m_transferFunctionNode;
00099 int m_minTfId;
00100 int m_maxTfId;
00101
00102 virtual void setElt( SoTransferFunction *m_transferFunctionNode );
00103
00104 virtual ~SoTransferFunctionElement() ;
00105 };
00106
00107 #ifdef _MSC_VER
00108 #pragma warning( pop )
00109 #endif
00110
00111 #endif // _SO_TRANSFER_FUNCTION_ELEMENT_
00112
00113
00114