![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: spatialVrfObjectManager.h,v $ $Revision: 1.19 $ $State: Exp $ 00007 *******************************************************************************/ 00008 #ifndef spatialVrfObjectManager_H_ 00009 #define spatialVrfObjectManager_H_ 00010 00013 00014 #include <vlutil/vlConfig.h> 00015 #include "geometry/spatialSubdivision.h" 00016 #include "vrfobjcore/ssVrfObjectIntersector.h" 00017 #include "vrfobjcore/filteredObjList.h" 00018 #include "vrfobjcore/vrfObjIter.h" 00019 #include <list> 00020 #include <vector> 00021 #include <set> 00022 00030 #include "vrfobjcore/vrfobjcoreDefines.h" 00031 00034 00035 class DT_DLL_vrfobjcore DtSpatialSelectionFunctor 00036 { 00037 public: 00039 virtual ~DtSpatialSelectionFunctor() {}; 00040 00042 virtual bool operator()(const DtVrfObject *object) = 0; 00043 }; 00044 00046 00047 class DT_DLL_vrfobjcore DtSpatialVrfObjectManagerInterface 00048 { 00049 public: 00050 virtual ~DtSpatialVrfObjectManagerInterface() {}; 00051 00053 virtual void addVrfObjects(const DtManagedObjectListConstPtr& vrfObjects) = 0; 00054 00058 virtual void removeVrfObject(DtVrfObject * vrfObject) = 0; 00059 00063 virtual bool setResolutions(unsigned int xRes, unsigned int yRes, 00064 unsigned int zRes) = 0; 00065 00068 virtual void clearVrfObjects() = 0; 00069 00080 virtual void reset(const DtManagedObjectListConstPtr& vrfObjects) = 0; 00081 00082 00085 00096 00097 virtual bool getVrfObjects(const DtExtent& extent, std::set<DtVrfObject*>& objects) = 0; 00098 virtual bool getVrfObjects(const DtExtent& extent, std::set<const DtVrfObject*>& objects) const = 0; 00099 00100 virtual bool getVrfObjects(DtVrfObjectPredicate& predicate, const DtExtent& extent, 00101 std::set<DtVrfObject*>& objects) = 0; 00102 virtual bool getVrfObjects(DtVrfObjectPredicate& predicate, const DtExtent& extent, 00103 std::set<const DtVrfObject*>& objects) const = 0; 00104 00105 virtual bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects) = 0; 00106 virtual bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects) const = 0; 00107 00108 virtual bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord, 00109 std::list<DtVrfObject*>& objects) = 0; 00110 virtual bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord, 00111 std::list<const DtVrfObject*>& objects) const = 0; 00113 00124 00125 virtual void visitVrfObjects(const DtExtent& extent, DtSpatialSelectionFunctor &callback) const = 0; 00126 virtual void visitVrfObjects(const DtChord& chord, DtSpatialSelectionFunctor& callback) const = 0; 00127 }; 00128 00130 00131 class DT_DLL_vrfobjcore DtSpatialVrfObjectManager : public DtSpatialVrfObjectManagerInterface 00132 { 00133 public: 00134 typedef DtSpatialSubdivision<DtVrfObject*> DtSpatialContainer; 00135 typedef std::vector<DtVrfObject*> DtNonSpatialContainer; 00136 typedef DtNonSpatialContainer::iterator DtNonSpatialVrfObjectIter; 00137 typedef DtNonSpatialContainer::const_iterator DtNonSpatialVrfObjectConstIter; 00138 00139 typedef std::set<DtVrfObject*> DtVrfObjectUniqueContainer; 00140 typedef std::list<DtVrfObject*> DtVrfObjectContainer; 00141 00142 00146 DtSpatialVrfObjectManager(unsigned int xRes = 1, unsigned int yRes = 1, 00147 unsigned int zRes = 1); 00148 00150 virtual ~DtSpatialVrfObjectManager(); 00151 00152 private: 00154 DtSpatialVrfObjectManager(const DtSpatialVrfObjectManager& original); 00155 DtSpatialVrfObjectManager& operator=(const DtSpatialVrfObjectManager& original); 00156 00157 public: 00158 00164 virtual bool initialize(const DtManagedObjectListConstPtr& vrfObjects, 00165 unsigned int cellCountX, unsigned int cellCountY, unsigned int cellCountZ); 00166 00171 virtual void addVrfObjects(const DtManagedObjectListConstPtr& vrfObjects); 00172 00176 virtual void removeVrfObject(DtVrfObject * vrfObject); 00177 00180 virtual void clearVrfObjects(); 00181 00182 virtual bool setResolutions(unsigned int xRes, unsigned int yRes, 00183 unsigned int zRes); 00184 00186 virtual unsigned int xResolution() const; 00188 virtual unsigned int yResolution() const; 00190 virtual unsigned int zResolution() const; 00191 00193 virtual void resolutions(unsigned int& xRes, unsigned int& yRes, 00194 unsigned int& zRes) const; 00195 00206 virtual void reset(const DtManagedObjectListConstPtr& vrfObjects); 00207 00208 00211 00220 00221 bool getVrfObjects(const DtExtent& extent, std::set<DtVrfObject*>& objects); 00222 bool getVrfObjects(const DtExtent& extent, std::set<const DtVrfObject*>& objects) const; 00223 00224 bool getVrfObjects(DtVrfObjectPredicate& predicate, const DtExtent& extent, 00225 std::set<DtVrfObject*>& objects); 00226 bool getVrfObjects(DtVrfObjectPredicate& predicate, const DtExtent& extent, 00227 std::set<const DtVrfObject*>& objects) const; 00228 00229 bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects); 00230 bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects) const; 00231 00232 bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord, 00233 std::list<DtVrfObject*>& objects); 00234 bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord, 00235 std::list<const DtVrfObject*>& objects) const; 00237 00248 00249 void visitVrfObjects(const DtExtent& extent, DtSpatialSelectionFunctor &callback) const; 00250 void visitVrfObjects(const DtChord& chord, DtSpatialSelectionFunctor& callback) const; 00251 00253 virtual const DtSpatialContainer* spatialContainer() const; 00254 virtual DtSpatialContainer* spatialContainer(); 00255 00257 virtual const DtNonSpatialContainer* nonSpatiallyOrganizedObjects() const; 00258 virtual DtNonSpatialContainer* nonSpatiallyOrganizedObjects(); 00259 00260 protected: 00261 00265 virtual bool createSpatialContainer(const DtExtent& extent, unsigned int cellCountX, 00266 unsigned int cellCountY, unsigned int cellCountZ); 00267 00277 virtual void setExtent(const DtManagedObjectListConstPtr& vrfObjects); 00278 00281 virtual void expandExtent(const DtManagedObjectListConstPtr& vrfObjects, 00282 DtExtent& expandedExtent) const; 00283 00286 bool testInvariant() const; 00287 00288 00289 protected: 00290 00293 DtSpatialContainer* myVrfObjectSpatialContainer; 00294 00299 DtNonSpatialContainer myNonSpatiallyOrganizedObjects; 00300 }; 00301 00302 #endif