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:
35  virtual ~DtSpatialSelectionFunctor() override {};
36 
38  virtual bool operator()(const DtSimObject* object) override = 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() override;
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) override;
168 
172  virtual void removeVrfObject(const DtSimObject* vrfObject) override;
173 
176  virtual void clearVrfObjects() override;
177 
178  virtual bool setResolutions(unsigned int xRes, unsigned int yRes, unsigned int zRes) override;
179 
181  virtual unsigned int xResolution() const;
183  virtual unsigned int yResolution() const;
185  virtual unsigned int zResolution() const;
186 
188  virtual void resolutions(unsigned int& xRes, unsigned int& yRes,
189  unsigned int& zRes) const;
190 
201  virtual void reset(const DtManagedObjectListConstPtr& vrfObjects) override;
202 
203 
206 
215 
217  virtual bool getVrfObjects(const DtExtent& extent, DtVrfConstObjectUniqueContainer& objects) const override;
218 
219  //bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtExtent& extent,
221  virtual bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtExtent& extent,
222  DtVrfConstObjectUniqueContainer& objects) const override;
223 
224  virtual bool getVrfObjects(const DtChord& chord, std::list<const DtSimObject*>& objects) const override;
225 
226  virtual bool getVrfObjects(const DtVrfObjectPredicate& predicate, const DtChord& chord,
227  std::list<const DtSimObject*>& objects) const override;
229 
240 
241  virtual void visitVrfObjects(const DtExtent& extent, DtSpatialSelectionFunctor& callback) const override;
242  virtual void visitVrfObjects(const DtChord& chord, DtSpatialSelectionFunctor& callback) const override;
243 
245  virtual const DtSpatialContainer* spatialContainer() const;
246  virtual DtSpatialContainer* spatialContainer();
247 
249  virtual const DtNonSpatialContainer* nonSpatiallyOrganizedObjects() const;
250  virtual DtNonSpatialContainer* nonSpatiallyOrganizedObjects();
251 
252 protected:
253 
257  virtual bool createSpatialContainer(const DtExtent& extent, unsigned int cellCountX,
258  unsigned int cellCountY, unsigned int cellCountZ);
259 
269  virtual void setExtent(const DtManagedObjectListConstPtr& vrfObjects);
270 
273  virtual void expandExtent(const DtManagedObjectListConstPtr& vrfObjects,
274  DtExtent& expandedExtent) const;
275 
278  bool testInvariant() const;
279 
280 
281 protected:
282 
286 
292 };
293 
295 {
296  return new DtOctree<const DtSimObject>(extent);
297 }
DtSpatialContainer * myVrfObjectSpatialContainer
Spatial container of DtSimObjects. (a pointer because it is not guaranteed to exist at construction...
Definition: spatialVrfObjectManager.h:285
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
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...
std::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 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 ~DtSpatialSelectionFunctor() override
Virtual Destructor which does nothing.
Definition: spatialVrfObjectManager.h:35
virtual bool operator()(const T *object)=0
Abstract function call interface.
Definition: octree.h:167
#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:294
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:80
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.
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:291
virtual void addVrfObjects(const DtManagedObjectListConstPtr &vrfObjects)=0
Spatially sorts the vrfObjects associated in the vrfObjects.

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)