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
00026 #ifndef _SO_DATA_SET_ELEMENT_
00027 #define _SO_DATA_SET_ELEMENT_
00028
00029 #include <Inventor/nodes/SoShaderParameter.h>
00030 #include <Inventor/elements/SoReplacedElement.h>
00031 #include <Inventor/SbBox.h>
00032 #include <Inventor/SbLinear.h>
00033 #include <Inventor/STL/vector>
00034 #include <Inventor/STL/set>
00035 #include <Inventor/STL/map>
00036
00037 #include <LDM/SoLDM.h>
00038
00039 #ifdef _MSC_VER
00040 #pragma warning( push )
00041 #pragma warning(disable:4251)
00042 #endif
00043
00044 class SoDataSet;
00045 class SoNode;
00046 class SoLDMTileManager;
00047 class SoState;
00048 class SoDataSetId;
00049 class SoGLRenderAction;
00050
00051
00052 class SoDataSetElement : public SoReplacedElement {
00053
00054 SO_ELEMENT_HEADER( SoDataSetElement );
00055
00056 public:
00057
00059 virtual void push(SoState *state);
00060
00061
00062 static void set(SoState* state, SoNode *node, SoDataSet *datasetNode);
00063 static void set(SoState *state, SoNode *node,
00064 SoDataSet *datasetNode, const SbMatrix &matrix );
00065
00066
00067 static void get(SoState* state, std::vector<SoDataSet*>&);
00068
00069 static void get(SoState* state, SoDataSet*& ds);
00070
00071 static void get(SoState* state, SoLDM::DataSetIdPairList& dataSetIdPairList);
00072
00073
00074
00075 static const SbMatrix &get(SoState *state, SoDataSet*&, SbBool &isIdent );
00076
00077
00078 static void getDefault(SoLDM::DataSetIdPair&);
00079
00080 private:
00081
00083 virtual void init(SoState* state);
00084
00088 virtual SbBool matches(const SoElement* elt) const;
00089
00091 virtual SoElement* copyMatchInfo() const;
00092
00093 private:
00094 typedef std::pair<SoDataSet*, const SoDataSetId*> DataSetPtrIdPair;
00095
00096
00097 static void initClass();
00098 static void exitClass();
00099
00100 static void reset(SoState*);
00101
00103 static bool isDoingMultiData(SoState* state);
00104
00106 static bool isDoingCpuComposition(SoState* state);
00107
00109 template<typename T>
00110 static std::pair<T*, int> getLastOfType(SoState* state, bool derived)
00111 {
00112 SoLDM::DataSetIdPair p = getLastOfType(state, T::getClassTypeId(), derived);
00113 return std::make_pair(static_cast<T*>(p.first), p.second);
00114 }
00115
00116
00117
00118 static void get( SoState* state, SoLDMTileManager*& );
00119
00120 private:
00121 typedef std::set<const SoDataSetId*> DataSetIdSet;
00122 typedef std::map<SoDataSet*, DataSetIdSet> DataSetIdMap;
00123 typedef std::vector<DataSetPtrIdPair> DataSetPtrIdPairVec;
00124
00125 virtual void setElt( SoState* state, SoDataSet* ds );
00126 virtual void setElt( SoState* state, SoDataSet* ds, const SbMatrix &matrix );
00127
00128 virtual ~SoDataSetElement() ;
00129
00130 private:
00135 static SoLDM::DataSetIdPair getLastOfType(SoState* state, SoType type, bool derived);
00136
00137
00138 DataSetPtrIdPairVec m_dataSetIdPairList;
00139
00140 SbMatrix m_modelMatrix;
00141 SbBool m_isModelIdentity;
00142 SoLDM::DataSetIdPair m_datasetNode;
00143 static bool s_forceOIV6Behavior;
00144 std::vector<uint64_t> m_nodeIds;
00145 };
00146
00147 #ifdef _MSC_VER
00148 #pragma warning( pop )
00149 #endif
00150
00151 #endif // _SO_DATA_SET_ELEMENT_
00152
00153
00154