VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/spatialVrfObjectManager.h
Go to the documentation of this file.
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

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)