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