VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
spatialVrfObjectManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2019 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 
12 #include <vlutil/vlConfig.h>
15 #include <list>
16 #include <vector>
17 #include <boost/unordered_set.hpp>
18 #include "vrfobjcore/octree.h"
19 #include "vrfobjcore/simObject.h"
20 
30 
32 {
33 public:
36 
38  virtual bool operator()(const DtSimObject *object) = 0;
39 };
40 
42 
44 {
45 public:
47 
49  virtual void addVrfObjects(const DtManagedObjectListConstPtr& vrfObjects) = 0;
50 
54  virtual void removeVrfObject(const DtSimObject * vrfObject) = 0;
55 
59  virtual bool setResolutions(unsigned int xRes, unsigned int yRes,
60  unsigned int zRes) = 0;
61 
64  virtual void clearVrfObjects() = 0;
65 
76  virtual void reset(const DtManagedObjectListConstPtr& vrfObjects) = 0;
77 
78 
81 
92 
93  typedef std::vector<const DtSimObject*> DtVrfObjectUniqueContainer;
94  typedef std::vector<const DtSimObject*> DtVrfConstObjectUniqueContainer;
95 
96  typedef std::vector<const DtSimObject*> DtVrfObjectContainer;
97 
98  virtual bool getVrfObjects(const DtExtent& extent,
99  DtVrfConstObjectUniqueContainer& objects) const = 0;
100 
101  virtual bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtExtent& extent,
102  DtVrfConstObjectUniqueContainer& objects) const = 0;
103 
104  virtual bool getVrfObjects(const DtChord& chord, std::list<const DtSimObject*>& objects) const = 0;
105 
106  virtual bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtChord& chord,
107  std::list<const DtSimObject*>& objects) const = 0;
109 
120 
121  virtual void visitVrfObjects(const DtExtent& extent, DtSpatialSelectionFunctor &callback) const = 0;
122  virtual void visitVrfObjects(const DtChord& chord, DtSpatialSelectionFunctor& callback) const = 0;
123 
125  virtual unsigned int numObjects() const = 0;
126 };
127 
129 
131 {
132 public:
134  typedef std::vector<const DtSimObject*> DtNonSpatialContainer;
135  typedef DtNonSpatialContainer::iterator DtNonSpatialVrfObjectIter;
136  typedef DtNonSpatialContainer::const_iterator DtNonSpatialVrfObjectConstIter;
137 
138 
142  DtSpatialVrfObjectManager(unsigned int xRes = 1, unsigned int yRes = 1,
143  unsigned int zRes = 1);
144 
146  virtual ~DtSpatialVrfObjectManager();
147 
148 private:
151  DtSpatialVrfObjectManager& operator=(const DtSpatialVrfObjectManager& original);
152 
153 public:
154 
160  virtual bool initialize(const DtManagedObjectListConstPtr& vrfObjects,
161  unsigned int cellCountX, unsigned int cellCountY, unsigned int cellCountZ);
162 
167  virtual void addVrfObjects(const DtManagedObjectListConstPtr& vrfObjects);
168 
172  virtual void removeVrfObject(const DtSimObject* vrfObject);
173 
176  virtual void clearVrfObjects();
177 
178  virtual bool setResolutions(unsigned int xRes, unsigned int yRes,
179  unsigned int zRes);
180 
182  virtual unsigned int xResolution() const;
184  virtual unsigned int yResolution() const;
186  virtual unsigned int zResolution() const;
187 
189  virtual void resolutions(unsigned int& xRes, unsigned int& yRes,
190  unsigned int& zRes) const;
191 
202  virtual void reset(const DtManagedObjectListConstPtr& vrfObjects);
203 
204 
207 
216 
217  //bool getVrfObjects(const DtExtent& extent, DtVrfObjectUniqueContainer& objects);
218  bool getVrfObjects(const DtExtent& extent, DtVrfConstObjectUniqueContainer& objects) const override;
219 
220  //bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtExtent& extent,
222  bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtExtent& extent,
223  DtVrfConstObjectUniqueContainer& objects) const override;
224 
225  bool getVrfObjects(const DtChord& chord, std::list<const DtSimObject*>& objects) const override;
226 
227  bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtChord& chord,
228  std::list<const DtSimObject*>& objects) const override;
230 
241 
242  void visitVrfObjects(const DtExtent& extent, DtSpatialSelectionFunctor &callback) const override;
243  void visitVrfObjects(const DtChord& chord, DtSpatialSelectionFunctor& callback) const override;
244 
246  virtual const DtSpatialContainer* spatialContainer() const;
247  virtual DtSpatialContainer* spatialContainer();
248 
250  virtual const DtNonSpatialContainer* nonSpatiallyOrganizedObjects() const;
251  virtual DtNonSpatialContainer* nonSpatiallyOrganizedObjects();
252 
253 protected:
254 
258  virtual bool createSpatialContainer(const DtExtent& extent, unsigned int cellCountX,
259  unsigned int cellCountY, unsigned int cellCountZ);
260 
270  virtual void setExtent(const DtManagedObjectListConstPtr& vrfObjects);
271 
274  virtual void expandExtent(const DtManagedObjectListConstPtr& vrfObjects,
275  DtExtent& expandedExtent) const;
276 
279  bool testInvariant() const;
280 
281 
282 protected:
283 
287 
293 };
294 
296 {
297  return new DtOctree<const DtSimObject>(extent);
298 }
DtSpatialContainer * myVrfObjectSpatialContainer
Spatial container of DtSimObjects. (a pointer because it is not guaranteed to exist at construction...
Definition: spatialVrfObjectManager.h:286
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
std::vector< const DtSimObject * > DtVrfConstObjectUniqueContainer
Definition: spatialVrfObjectManager.h:94
Implementation of a spatial object manager based on DtSpatialSubdivision.
Definition: spatialVrfObjectManager.h:130
virtual void visitVrfObjects(const DtExtent &extent, DtSpatialSelectionFunctor &callback) const =0
Functions that call the specified functor for every object intersecting the requested region (whether...
virtual bool getVrfObjects(const DtExtent &extent, DtVrfConstObjectUniqueContainer &objects) const =0
The DtSpatialVrfObjectManager is responsible for maintaining a spatial organization of all specified ...
Definition: spatialVrfObjectManager.h:31
virtual ~DtSpatialSelectionFunctor()
Virtual Destructor which does nothing.
Definition: spatialVrfObjectManager.h:35
std::vector< const DtSimObject * > DtNonSpatialContainer
Definition: spatialVrfObjectManager.h:134
virtual void reset(const DtManagedObjectListConstPtr &vrfObjects)=0
Clears out the current DtSimObjects, sets it to have the minimum extent, that contains all of the DtS...
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
virtual ~DtSpatialVrfObjectManagerInterface()
Definition: spatialVrfObjectManager.h:46
virtual void removeVrfObject(const DtSimObject *vrfObject)=0
Removes vrfObject from the set of vrfObjects we are maintaining.
Contains the DtVrfObjectPredicate class declaration.
Definition: vrfObjectPredicate.h:20
virtual bool operator()(const T *object)=0
Abstract function call interface.
Definition: octree.h:159
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
static DtOctree< const DtSimObject > * createOctree(const DtExtent &extent)
Definition: spatialVrfObjectManager.h:295
std::vector< const DtSimObject * > DtVrfObjectUniqueContainer
Set of functions used to get the relevant DtSimObjects from the object manager. If a primitive is spe...
Definition: spatialVrfObjectManager.h:93
Abstract interface for a spatial object manager.
Definition: spatialVrfObjectManager.h:43
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:88
DtSpatialSubdivision< const DtSimObject * > DtSpatialContainer
Definition: spatialVrfObjectManager.h:133
DtNonSpatialContainer::const_iterator DtNonSpatialVrfObjectConstIter
Definition: spatialVrfObjectManager.h:136
virtual void clearVrfObjects()=0
Clears all managed objects from the manager. Does not affect the spatial container, other than to empty its cells of any elements.
DtNonSpatialContainer::iterator DtNonSpatialVrfObjectIter
Definition: spatialVrfObjectManager.h:135
std::vector< const DtSimObject * > DtVrfObjectContainer
Definition: spatialVrfObjectManager.h:96
virtual bool setResolutions(unsigned int xRes, unsigned int yRes, unsigned int zRes)=0
Deprecated – doesn&#39;t apply to octree manager. Still necessary for DtSpatialVrfObjectManager. TODO need to push this all into the manager class, instead of having the DtPhysicalWorld assume that things are uniformly subdivided.
DtBoost::shared_ptr< const DtManagedObjectList > DtManagedObjectListConstPtr
Typedef for a shared pointer to a const DtOrgViewManagedObjectList. These lists are used within VR-Fo...
Definition: managedObjectList.h:35
The DtSpatialSubdivision class represents a uniform spatial container. The container is divided up in...
Definition: spatialSubdivision.h:169
DtNonSpatialContainer myNonSpatiallyOrganizedObjects
Container of objects that fall outside of the spatial subdivision. This is necessary because the spat...
Definition: spatialVrfObjectManager.h:292
virtual void addVrfObjects(const DtManagedObjectListConstPtr &vrfObjects)=0
Spatially sorts the vrfObjects associated in the vrfObjects.

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)