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>
28 
29 class DtChord;
32 class DtSphere;
33 
36 
42 {
43 public:
49  {
50  public:
52  virtual ~DtFidListMonitor() = 0;
53 
55  bool check() const;
57  bool checkAndReset();
58  protected:
59  std::atomic<bool> myChanged;
60  };
61 
62 protected:
65  {
66  public:
68  virtual ~DtFidListMonitorImpl() override;
69 
71  void setChanged();
72  };
73 
74 private:
76 
77  DtCollisionWorld(const DtCollisionWorld&) = delete;
80 public:
82  virtual ~DtCollisionWorld();
83 
84  virtual void initialize();
85 
86  virtual unsigned collisionObjectCount();
87 
91  virtual unsigned collisionMeshCount();
92 
96  virtual unsigned int uniqueTriangleCount();
97 
98  virtual void addCollisionObjectToWorld(
99  const std::shared_ptr<btCollisionObject>& object,
100  short int objectGroup = btBroadphaseProxy::DefaultFilter);
101 
102  virtual void addCollisionObjectsToWorld(
103  const DtCollisionObjectList& object,
104  short int objectGroup = btBroadphaseProxy::DefaultFilter);
105 
106  virtual unsigned int removeCollisionObjectFromWorld(
107  const std::shared_ptr<btCollisionObject>& collisionObject);
108 
109  virtual unsigned int removeCollisionObjectsFromWorld(const DtCollisionObjectList&);
110 
112  virtual void removeCollisionObjectFromWorld(const std::set<long long>& OsmFidList);
113 
115  virtual void enableHiddenCollisionObjectInWorld();
116 
118  virtual void enableHiddenCollisionObjectInWorld(const std::set<long long>& OsmFidList);
119 
122  virtual bool chordIntersect(const DtChord& chord,
124  bool& dataAvailable,
126  short int filterMask ) const;
127 
130  virtual bool allIntersectsAlongChord(const DtChord& chord,
132  bool& dataAvailable,
134  short int filterMask) const;
135 
136  virtual bool updateWorldTransform(btCollisionObject* obj, const btTransform&);
137 
138  virtual void setCoordinateSystem(const Coordinate_System* cs);
139  virtual const Coordinate_System* coordinateSystem();
140 
142 
143  virtual void processTrianglesForGeometry(DtBulletTriangleCallback& calllback, DtTerrainGeometryId geometryId);
144 
147  virtual long numberOfUnloadableTerrainTriangles() const;
150  virtual void setNumberOfUnloadableTerrainTriangles(long value);
151 
155  virtual std::shared_ptr<DtFidListMonitor> getFidListMonitor();
156 
158  virtual void setFidHideFunction(std::function<bool(const long long)> fcn);
159 
163  {
169  unsigned int myChordIntersect;
172  };
173 
175  virtual void enableMetrics(bool value);
176 
178  virtual void getMetrics(CollisionMetric& collisionMetrics) ;
179 
180 protected:
181  virtual btCollisionWorld* bulletCollisionWorld();
182 
184  virtual void deleteInternalMemberVariables();
185 
187  virtual void notifyFidListMonitors();
188 
189  virtual bool isFidHidden(const long long fid);
190 
193  virtual void calculateMeshAndTriangleCount();
194 
195  //Bullet intersection members.
196 
197  typedef std::set< std::shared_ptr<btCollisionObject> > CollisionObjectSet;
199 
201  btCollisionWorld* myCollisionWorld;
202 
203  btCollisionConfiguration* myCollisionConfiguration;
204  btBroadphaseInterface* myBroadphaseInterface;
205  btCollisionDispatcher* myCollisionDispatcher;
207 
209  typedef std::unordered_multimap<long long, std::shared_ptr<btCollisionObject>> FidToCollisionOjectMap;
211  std::list<std::weak_ptr<DtFidListMonitorImpl> > myFidListMonitorList;
212 
213  using Mutex = tbb::spin_rw_mutex;
214  mutable Mutex myMutex;
215  std::function<bool(const long long)> myHiddenFidFcn;
216 
218  virtual void resetMetrics();
219 
222 
224  unsigned int myNumCollisionShapes;
230 
233 
235 };
236 
238 {
239 public:
241  virtual ~DtBulletTriangleCallback() override;
242  virtual const DtTerrainProcessPolygonsBox& box() const;
243  virtual DtTriangleOutputInterface& outputInterface();
244  virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex) override;
245  virtual void setTransform(btTransform* transform);
246  virtual void setMesh(const DtTriangleMeshWithSoil* mesh);
247  virtual void setCollisionObject(const DtCollisionObjectInterface* obj);
248  virtual int terrainCategoryMask() const;
249 
250 protected:
251  btVector3 translatePoint(const btVector3& v);
252 
253 protected:
255  btTransform* myTransform;
259  void* myVrfUsr;
261 };
262 
263 
264 
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...
This class tracks collision shapes, assigns them IDs and keeps weak pointers to the shapes so they ca...
Definition: collisionShapeManager.h:16
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
DtTriangleOutputInterface & myOutput
Definition: collisionWorld.h:254
unsigned int myNumTrianglesOfAllShapes
The number of triangles of all the shapes (not individual objects) In the case of two objects sharing...
Definition: collisionWorld.h:227
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords. This is useful for followi...
Definition: vrfChordIntersectRecordList.h:31
int myMetricRemoveCollisionObjectToWorld
Number of addCollisionObjectToWorld added objects since the last getMetrics call. ...
Definition: collisionWorld.h:167
virtual const Coordinate_System * coordinateSystem()
Definition: sphere.h:22
unsigned int myAllIntersectsAlongChord
allIntersectsAlongChord count
Definition: collisionWorld.h:171
Definition: collisionWorld.h:237
CollisionMetric myCollisionMetrics
Structure holding all the metric.
Definition: collisionWorld.h:232
unsigned int myChordIntersect
chordIntersect count
Definition: collisionWorld.h:169
virtual unsigned int removeCollisionObjectFromWorld(const std::shared_ptr< btCollisionObject > &collisionObject)
virtual bool allIntersectsAlongChord(const DtChord &chord, DtVrfChordIntersectRecordList &intList, bool &dataAvailable, DtIntersectionRecord::DtIntersectionType irtFlag, short int filterMask) const
The dataAvailable flag will be set to false if this intersection encounters some data that cannot be ...
A version of btTriangleMesh that also holds soil type for each polygon.
Definition: bvhTriangleMeshShape.h:28
tbb::spin_rw_mutex Mutex
Definition: collisionWorld.h:213
virtual void setCoordinateSystem(const Coordinate_System *cs)
virtual bool chordIntersect(const DtChord &chord, DtVrfChordIntersectionRecord &record, bool &dataAvailable, DtIntersectionRecord::DtIntersectionType irtFlag, short int filterMask) const
The dataAvailable flag will be set to false if this intersection encounters some data that cannot be ...
Debug Metrics.
Definition: collisionWorld.h:162
const DtTerrainProcessPolygonsBox * myBox
Definition: collisionWorld.h:256
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()
unsigned int myNumCollisionShapes
The number of collision shapes (collision objects may share shapes)
Definition: collisionWorld.h:224
btCollisionConfiguration * myCollisionConfiguration
Definition: collisionWorld.h:203
void * myVrfUsr
Definition: collisionWorld.h:259
virtual unsigned int removeCollisionObjectsFromWorld(const DtCollisionObjectList &)
virtual bool updateWorldTransform(btCollisionObject *obj, const btTransform &)
unsigned int DtTerrainGeometryId
Unique ID numbers that reference a specific geometry (or set of triangles) in the terrain...
Definition: terrainProcessPolygonsBox.h:38
virtual unsigned int uniqueTriangleCount()
virtual void processTrianglesForGeometry(DtBulletTriangleCallback &calllback, DtTerrainGeometryId geometryId)
DtTerrainCategoryMask myTerrainCategoryMask
Definition: collisionWorld.h:260
std::unordered_multimap< long long, std::shared_ptr< btCollisionObject > > FidToCollisionOjectMap
map FID / collision object
Definition: collisionWorld.h:209
virtual void addCollisionObjectsToWorld(const DtCollisionObjectList &object, short int objectGroup=btBroadphaseProxy::DefaultFilter)
virtual unsigned collisionMeshCount()
Definition: coordSystem.h:54
Mutex myMutex
Definition: collisionWorld.h:214
std::set< std::shared_ptr< btCollisionObject > > CollisionObjectSet
Definition: collisionWorld.h:197
FidToCollisionOjectMap myFidToCollisionOjectMap
Definition: collisionWorld.h:210
std::list< std::weak_ptr< DtFidListMonitorImpl > > myFidListMonitorList
Definition: collisionWorld.h:211
bool myNumCollisionShapesDirty
Whether the myNumCollisionShapes needs to be recalculated;.
Definition: collisionWorld.h:229
DtCollisionShapeManager myCollisionShapeManager
Definition: collisionWorld.h:234
bool myRecordMetrics
Are debug metrics enable.
Definition: collisionWorld.h:221
const Coordinate_System * myCoordinateSystem
Definition: collisionWorld.h:200
virtual void initialize()
Definition: bulletUtil.h:49
A monitor class returned by DtCollisionWorld that a user may use to monitor for changes to the list o...
Definition: collisionWorld.h:48
Definition: vrfChordIntersectionRecord.h:19
std::list< std::shared_ptr< btCollisionObject > > DtCollisionObjectList
Definition: bulletUtil.h:47
btTransform * myTransform
Definition: collisionWorld.h:255
unsigned int DtTerrainCategoryMask
This bitmask is made using DtTerrainCategory values.
Definition: rwTerrainCategoryMask.h:27
btCollisionDispatcher * myCollisionDispatcher
Definition: collisionWorld.h:205
std::atomic< bool > myChanged
Definition: collisionWorld.h:59
#define DT_DLL_vantageTerrainImplementation
This file is used to determine how to build.
Definition: vantageTerrainImplementationDefines.h:28
const DtCollisionObjectInterface * myCollisionObject
Definition: collisionWorld.h:257
CollisionObjectSet myCollisionObjects
Definition: collisionWorld.h:198
long myNumberOfUnloadableTerrainTriangles
Definition: collisionWorld.h:206
Interface for getting terrain triangle data out of DtTerrainInterface::trianglesInArea. This object should always be created on the stack.
Definition: terrainProcessPolygonsBox.h:134
This class contains a Bullet btCollisionWorld, and also maintains ownership of the collision objects ...
Definition: collisionWorld.h:41
virtual void processTrianglesInArea(DtBulletTriangleCallback &)
virtual ~DtCollisionWorld()
const DtTriangleMeshWithSoil * myMesh
Definition: collisionWorld.h:258
DtCollisionWorld & operator=(const DtCollisionWorld &)=delete
Not implemented.
btBroadphaseInterface * myBroadphaseInterface
Definition: collisionWorld.h:204
std::function< bool(const long long)> myHiddenFidFcn
Definition: collisionWorld.h:215
virtual void setNumberOfUnloadableTerrainTriangles(long value)
Set the number of terrain triangles that are loaded initially and are not part of the terrain pager s...
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:201
int myMetricAddCollisionObjectToWorld
Number of addCollisionObjectToWorld added objects since the last getMetrics call. ...
Definition: collisionWorld.h:165
DtIntersectionType
Definition: intersectionRecord.h:41
virtual void addCollisionObjectToWorld(const std::shared_ptr< btCollisionObject > &object, short int objectGroup=btBroadphaseProxy::DefaultFilter)
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:60
Implementation of DtFidListMonitor that is accessible only to the internal calls of DtCollisionWorld...
Definition: collisionWorld.h:64

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)