VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
collisionWorld.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
17 #include <list>
18 #include <vlutil/vlSmartPointers.h>
20 #include <tbb/spin_rw_mutex.h>
21 #include <features/proj.h>
22 #include <set>
23 #include <unordered_map>
24 
25 #include <BulletCollision/CollisionShapes/btTriangleCallback.h>
26 #include <atomic>
27 
28 class DtChord;
31 class DtSphere;
32 
35 
41 {
42 public:
48  {
49  public:
51  virtual ~DtFidListMonitor() = 0;
52 
54  bool check() const;
56  bool checkAndReset();
57  protected:
58  std::atomic<bool> myChanged;
59  };
60 
61 protected:
64  {
65  public:
67  virtual ~DtFidListMonitorImpl();
68 
70  void setChanged();
71  };
72 
73 private:
75 
79 public:
81  virtual ~DtCollisionWorld();
82 
83  virtual void initialize();
84 
85  virtual unsigned collisionObjectCount();
86 
87  virtual void addCollisionObjectToWorld(
88  const boost::shared_ptr<btCollisionObject>& object,
89  short int objectGroup = btBroadphaseProxy::DefaultFilter);
90 
91  virtual void addCollisionObjectsToWorld(
92  const DtCollisionObjectList& object,
93  short int objectGroup = btBroadphaseProxy::DefaultFilter);
94 
95  virtual unsigned int removeCollisionObjectFromWorld(
96  const boost::shared_ptr<btCollisionObject>& collisionObject);
97 
98  virtual unsigned int removeCollisionObjectsFromWorld(const DtCollisionObjectList&);
99 
101  virtual void removeCollisionObjectFromWorld(const std::set<long long>& OsmFidList);
102 
104  virtual void enableHiddenCollisionObjectInWorld();
105 
107  virtual void enableHiddenCollisionObjectInWorld(const std::set<long long>& OsmFidList);
108 
111  virtual bool chordIntersect(const DtChord& chord,
113  bool& dataAvailalbe,
115  short int filterMask = btBroadphaseProxy::AllFilter) const;
116 
119  virtual bool allIntersectsAlongChord(const DtChord& chord,
121  bool& dataAvailable,
123  short int filterMask = btBroadphaseProxy::AllFilter) const;
124 
125  virtual bool updateWorldTransform(btCollisionObject* obj, const btTransform&);
126 
127  virtual void setCoordinateSystem(const Coordinate_System* cs);
128  virtual const Coordinate_System* coordinateSystem();
129 
131 
134  virtual long numberOfUnloadableTerrainTriangles() const;
137  virtual void setNumberOfUnloadableTerrainTriangles(long value);
138 
142  virtual std::shared_ptr<DtFidListMonitor> getFidListMonitor();
143 
145  virtual void setFidHideFunction(std::function<bool(const long long)> fcn);
146 
147 protected:
148  virtual btCollisionWorld* bulletCollisionWorld();
149 
151  virtual void deleteInternalMemberVariables();
152 
154  virtual void notifyFidListMonitors();
155 
156  virtual bool isFidHidden(const long long fid);
157 
158  //Bullet intersection members.
159 
160  typedef std::set< boost::shared_ptr<btCollisionObject> > CollisionObjectSet;
162 
164  btCollisionWorld* myCollisionWorld;
165 
166  btCollisionConfiguration* myCollisionConfiguration;
167  btBroadphaseInterface* myBroadphaseInterface;
168  btCollisionDispatcher* myCollisionDispatcher;
170 
172  typedef std::unordered_multimap<long long, boost::shared_ptr<btCollisionObject>> FidToCollisionOjectMap;
174  std::list<std::weak_ptr<DtFidListMonitorImpl> > myFidListMonitorList;
175 
176  typedef tbb::spin_rw_mutex Mutex;
177  mutable Mutex myMutex;
178  std::function<bool(const long long)> myHiddenFidFcn;
179 };
180 
182 {
183 public:
185  virtual ~DtBulletTriangleCallback();
186  virtual const DtTerrainProcessPolygonsBox& box() const;
187  virtual DtTriangleOutputInterface& outputInterface();
188  virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex);
189  virtual void setTransform(btTransform* transform);
190  virtual void setMesh(const DtTriangleMeshWithSoil* mesh);
191  virtual void setCollisionObject(const DtCollisionObjectInterface* obj);
192 protected:
194  btTransform* myTransform;
198  void* myVrfUsr;
199 };
200 
201 
202 
virtual void enableHiddenCollisionObjectInWorld()
Reset all hidden geometries that have associated FID (to be used on rewind for example) ...
virtual void setFidHideFunction(std::function< bool(const long long)> fcn)
Set the function that collision world will use to determine if FIDs are hidden or not...
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
DtTriangleOutputInterface & myOutput
Definition: collisionWorld.h:193
virtual void notifyFidListMonitors()
Notifies all monitors on the FID List Monitor list of a FID list change.
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords. This is useful for followi...
Definition: vrfChordIntersectRecordList.h:31
virtual const Coordinate_System * coordinateSystem()
Definition: sphere.h:22
virtual void deleteInternalMemberVariables()
delete internal member variables
Definition: collisionWorld.h:181
virtual void addCollisionObjectToWorld(const boost::shared_ptr< btCollisionObject > &object, short int objectGroup=btBroadphaseProxy::DefaultFilter)
A version of btTriangleMesh that also holds soil type for each polygon.
Definition: bvhTriangleMeshShape.h:28
virtual void setCoordinateSystem(const Coordinate_System *cs)
const DtTerrainProcessPolygonsBox * myBox
Definition: collisionWorld.h:195
virtual long numberOfUnloadableTerrainTriangles() const
Return the number of terrain triangles that are loaded initially and are not part of the terrain page...
virtual unsigned collisionObjectCount()
btCollisionConfiguration * myCollisionConfiguration
Definition: collisionWorld.h:166
DtCollisionWorld & operator=(const DtCollisionWorld &)
Not implemented.
void * myVrfUsr
Definition: collisionWorld.h:198
virtual unsigned int removeCollisionObjectsFromWorld(const DtCollisionObjectList &)
virtual bool updateWorldTransform(btCollisionObject *obj, const btTransform &)
virtual bool chordIntersect(const DtChord &chord, DtVrfChordIntersectionRecord &record, bool &dataAvailalbe, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, short int filterMask=btBroadphaseProxy::AllFilter) const
The dataAvailable flag will be set to false if this intersection encounters some data that cannot be ...
virtual void addCollisionObjectsToWorld(const DtCollisionObjectList &object, short int objectGroup=btBroadphaseProxy::DefaultFilter)
virtual bool allIntersectsAlongChord(const DtChord &chord, DtVrfChordIntersectRecordList &intList, bool &dataAvailable, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, short int filterMask=btBroadphaseProxy::AllFilter) const
The dataAvailable flag will be set to false if this intersection encounters some data that cannot be ...
Definition: coordSystem.h:54
Mutex myMutex
Definition: collisionWorld.h:177
FidToCollisionOjectMap myFidToCollisionOjectMap
Definition: collisionWorld.h:173
std::list< std::weak_ptr< DtFidListMonitorImpl > > myFidListMonitorList
Definition: collisionWorld.h:174
virtual bool isFidHidden(const long long fid)
const Coordinate_System * myCoordinateSystem
Definition: collisionWorld.h:163
virtual void initialize()
std::set< boost::shared_ptr< btCollisionObject > > CollisionObjectSet
Definition: collisionWorld.h:160
std::unordered_multimap< long long, boost::shared_ptr< btCollisionObject > > FidToCollisionOjectMap
map FID / collision object
Definition: collisionWorld.h:172
Definition: bulletUtil.h:51
virtual unsigned int removeCollisionObjectFromWorld(const boost::shared_ptr< btCollisionObject > &collisionObject)
A monitor class returned by DtCollisionWorld that a user may use to monitor for changes to the list o...
Definition: collisionWorld.h:47
Definition: vrfChordIntersectionRecord.h:19
tbb::spin_rw_mutex Mutex
Definition: collisionWorld.h:176
Definition: intersectionRecord.h:60
btTransform * myTransform
Definition: collisionWorld.h:194
btCollisionDispatcher * myCollisionDispatcher
Definition: collisionWorld.h:168
std::atomic< bool > myChanged
Definition: collisionWorld.h:58
#define DT_DLL_vantageTerrainImplementation
This file is used to determine how to build.
Definition: vantageTerrainImplementationDefines.h:28
const DtCollisionObjectInterface * myCollisionObject
Definition: collisionWorld.h:196
CollisionObjectSet myCollisionObjects
Definition: collisionWorld.h:161
long myNumberOfUnloadableTerrainTriangles
Definition: collisionWorld.h:169
Interface for getting terrain triangle data out of DtTerrainInterface::trianglesInArea. This object should always be created on the stack.
Definition: terrainProcessPolygonsBox.h:113
This class contains a Bullet btCollisionWorld, and also maintains ownership of the collision objects ...
Definition: collisionWorld.h:40
virtual void processTrianglesInArea(DtBulletTriangleCallback &)
virtual ~DtCollisionWorld()
const DtTriangleMeshWithSoil * myMesh
Definition: collisionWorld.h:197
btBroadphaseInterface * myBroadphaseInterface
Definition: collisionWorld.h:167
std::function< bool(const long long)> myHiddenFidFcn
Definition: collisionWorld.h:178
virtual void setNumberOfUnloadableTerrainTriangles(long value)
Set the number of terrain triangles that are loaded initially and are not part of the terrain pager s...
std::list< boost::shared_ptr< btCollisionObject > > DtCollisionObjectList
Definition: bulletUtil.h:49
virtual btCollisionWorld * bulletCollisionWorld()
virtual std::shared_ptr< DtFidListMonitor > getFidListMonitor()
Creates and returns a new DtFidListMonitor. Deletion of this monitor (by removing all references) is ...
btCollisionWorld * myCollisionWorld
Definition: collisionWorld.h:164
DtIntersectionType
Definition: intersectionRecord.h:41
Represents an area query which can be used to extract triangles from DtTerrainInterface. The box points are in local but the box is always projected against the local topo at the center point of the box.
Definition: terrainProcessPolygonsBox.h:39
Implementation of DtFidListMonitor that is accessible only to the internal calls of DtCollisionWorld...
Definition: collisionWorld.h:63

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)