![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtElementData.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00012 00013 #pragma once 00014 #include <vrvCore/vrvCore.h> 00015 #include <vrvCore/DtUniqueID.h> 00016 #include <vrvCore/DtElementEntry.h> 00017 00018 #include <boost/signals.hpp> 00019 #include <boost/unordered_map.hpp> 00020 00021 namespace makVrv 00022 { 00023 class DtElementChanges; 00024 class DtElementEntry; 00025 class DtElementAttribute; 00026 class DtDe; 00027 00031 class DT_DLL_VRVCORE DtElementData 00032 { 00033 public: 00034 00035 //A list of scene object Ids. 00036 typedef std::vector<DtUniqueID> SceneObjectIdList; 00037 00039 typedef boost::unordered_map<DtElementID, DtElementEntry*> ElementEntryMap; 00040 typedef boost::unordered_map<DtElementID, SceneObjectIdList> 00041 ElementToSceneObjectMap; 00042 00044 00045 typedef std::vector<DtElementEntry*> ElementList; 00046 typedef std::vector<DtElementID> UniqueIdList; 00047 typedef std::vector<DtElementAttribute*> AttributeList; 00048 typedef std::pair<DtElementEntry*,AttributeList> EntryAttributes; 00049 typedef std::vector<EntryAttributes> EntryAttributesList; 00051 00053 DtElementData(DtDe& de); 00054 00056 ~DtElementData(); 00057 00059 void applyChanges(const DtElementChanges& changes); 00060 00062 void requestAttributeChange(const DtElementEntry& entry, 00063 DtElementAttribute* atr); 00064 00066 const ElementEntryMap& elements() const; 00067 00069 const ElementToSceneObjectMap& elementToSceneObjectMap() const; 00070 00072 DtElementEntry* findElement(DtElementID id ); 00073 00076 void findAll(DtElementEntry::ElementType type, 00077 ElementList& outVector, bool sort = true); 00078 00081 void findAll(const std::vector<DtElementEntry::ElementType>& types, 00082 ElementList& outVector, bool sort = true); 00083 00086 void findAll(ElementList& outVector, bool sort = true); 00087 00088 00091 virtual void addElementID( const DtElementID& elementID, 00092 const DtUniqueID& sceneObjectID, int modelSet ); 00093 00097 virtual void addElementID( const DtElementID& elementID, 00098 const DtUniqueID& sceneObjectID ); 00099 00101 virtual void removeElementID( const DtElementID& elementID, 00102 const DtUniqueID& sceneObjectID, int modelSet ); 00103 00104 virtual void removeElementID( const DtElementID& elementID, 00105 const DtUniqueID& sceneObjectID); 00106 00110 virtual void getSceneObjectIds( const DtElementID& elementID, 00111 SceneObjectIdList& outputList, 00112 int modelSet = -1 /* all modelSets */ ) const; 00113 00115 virtual DtElementID elementId( const DtUniqueID& sceneObjectID ) const; 00116 00117 00119 boost::signal< void (const ElementList&) > signal_elementsAdded; 00120 00122 boost::signal< void (const UniqueIdList&) > signal_elementsToBeRemoved; 00123 00125 boost::signal< void (const EntryAttributesList&) > signal_attributesChanged; 00126 00127 protected: 00128 00129 typedef boost::unordered_map<int, ElementToSceneObjectMap> 00130 ModelSetToElementSceneObjectMap; 00131 typedef boost::unordered_map<DtUniqueID, DtElementID> 00132 SceneObjectToElementMap; 00133 00134 DtDe& myDe; 00135 ElementEntryMap myElements; 00136 00137 // map to go from element ID to scene object IDs 00138 ElementToSceneObjectMap myElementToSceneObjectMap; 00139 00140 // map to go from element ID and model set to scene object id(s) 00141 ModelSetToElementSceneObjectMap myModelSetToElementSceneObjectMap; 00142 00143 // map to go from scene object id to element id 00144 SceneObjectToElementMap mySceneObjectToElementMap; 00145 00146 }; 00147 }