VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
attachedTerrain.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
15 
18 #include "vrfobjcore/simObject.h"
19 #include <readerWriter/rwInt.h>
20 #include <readerWriter/rwString.h>
21 #include <readerWriter/rwBoolean.h>
23 #include <matrix/vlDcm.h>
25 #include <geometry/point.h>
26 #include <geometry/chord.h>
27 #include <matrix/topoCoord.h>
28 #include <matrix/geodeticCoord.h>
29 #include <matrix/coordTransform.h>
30 #include <matrix/3dBoundingVolume.h>
31 #include <tbb/spin_rw_mutex.h>
33 
34 #include <boost/optional.hpp>
36 
37 class DtTerrainInterface;
38 class DtPhysicalWorld;
41 class DtSurface;
42 class Coordinate_System;
43 class DtSimObject;
45 
58 {
59 private:
61 
62 public:
63 
65  DtAttachedTerrain(const DtSimulationServices*, const DtString& name,
66  DtReaderWriterRegistry* const parentRegistry = 0, const DtSimObject* owner = 0);
67 
69  DtReaderWriterRegistry* const parentRegistry = 0, const DtSimObject* owner = 0);
70 
72  DtAttachedTerrain(const DtString& name, const DtAttachedTerrain& orig,
73  DtReaderWriterRegistry* const parentRegistry = 0);
74 
76  from, DtReaderWriterRegistry* const parentRegistry = 0);
77 
79  virtual ~DtAttachedTerrain() override;
80 
83 
87  virtual const char* readerWriterType() const override;
88 
89 
90 public:
91  virtual const Coordinate_System* coordinateSystem() const;
92 
93  const DtSimObject* vrfObject() const;
94 
97  virtual void tick();
98 
100  virtual bool isHighFidelityTerrain() const;
101 
102  virtual bool skipThisObject() const;
103 
105  virtual void setStayAttachedEvenIfOff(bool);
106  virtual bool stayAttachedEvenIfOff() const;
107 
113 
114  void setIntersectsFallThroughToParent(bool val);
115  bool intersectsFallThroughToParent() const;
117 
119  virtual double terrainHeight(const DtVector& localLocation,
120  DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
121 
124  virtual bool terrainHeightAndSurface(double lat, double lon,
125  double& terrainHeight, DtSurface& surface, DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
126 
127  virtual bool terrainHeightAndSurface(const DtVector& localLocation,
128  double& terrainHeight, DtSurface& surface, DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
130 
133  virtual bool closestIntersection(const DtVector& localLocation,
134  DtPoint& intersectionPoint,
135  DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
136 
137  virtual bool closestIntersection(const DtVector& localLocation,
138  DtVector& intersectionPoint,
139  DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
140 
141  virtual bool closestIntersection(const DtVector& localLocation,
143  DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
145 
148  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
149  double& intersectionTime,
150  DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
151 
152  virtual bool intersect(const DtChord& chord,
154  DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
156 
158  virtual bool closestIntersection(const DtVector& curPosition,
159  DtVector& intersection, bool ignoreWater, DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
160 
162  virtual bool allIntersectsAlongChord(const DtChord& chord,
164  DtTerrainIntersectStatus& status, const DtTerrainIntersectOptions& options) const;
165 
167  virtual void embedInTerrainIfNeeded();
168 
169 protected:
170  virtual bool attachedEntityIsMobile() const;
171 
173  virtual void updateCoordTransforms();
174 
176  virtual void updateBoundingVolume();
177 
179  virtual DtVector convertLocalPointToModelPoint(const DtVector& source) const;
180 
183  virtual DtChord convertLocalChordToModelChord(const DtChord& source) const;
184 
186  virtual DtVector convertModelPointToDatabasePoint(const DtPoint&) const;
187 
190  virtual void convertModelPointToDatabasePoint(DtVrfChordIntersectionRecord&) const;
191  virtual void processObjectAboutToBeRemovedCallback();
192 
193  virtual unsigned intersectChordWithBoundingVolume(const DtChord& chord,
194  DtVrfChordIntersectionRecord* isect1 = 0,
195  DtVrfChordIntersectionRecord* isect2 = 0) const;
196 
197  virtual unsigned intersectChordWithBoundingVolume(const DtChord& chord, bool calculateNormal,
198  DtVrfChordIntersectionRecord* isect1 = 0,
199  DtVrfChordIntersectionRecord* isect2 = 0) const;
200 
201  virtual bool boundingVolumeAltitude(const DtVector& p, double& alt) const;
202 
203  virtual void closestPointToBoundingVolume(const DtPoint& p, DtVrfChordIntersectionRecord& out) const;
204 
205  virtual void postGetSelf() override;
206 
207 public:
208  virtual bool entityIsValidAndAttached() const;
209 
210  virtual int appearanceFlags() const;
211 
212  void setObjectGeometricModel(std::shared_ptr<DtTerrainInterface> newObjGeomModel);
213  std::shared_ptr<DtTerrainInterface> objectGeometricModel() const;
214 
215  void setEntity(DtSimObjectReference);
216  DtSimObjectReference entity() const;
217 
218  void setPhysicalWorld(const DtPhysicalWorld* newPhysicalWorld);
219  const DtPhysicalWorld* physicalWorld() const;
220 
221  void clear();
222 
223  virtual DtAttachedTerrain* clone(const DtString& name, DtReaderWriterRegistry* const parentRegistry = 0) const;
224 
225 protected:
226  friend class DtLocalObject;
228  virtual void setEmbarkedOn(const DtUUID&);
229 
230 protected:
234  std::shared_ptr<DtTerrainInterface> myObjectGeometricModel;
235 
239 
242  DtCoordTransform myGeocentricToTopographic;
243  DtCoordTransform myTopographicToGeocentric;
244  DtCoordTransform myModelNormalToLocalNormal;
249  boost::optional<Dt3dBoundingVolume> myLastLocalBoundingVolume;
250 
253 
262 
264 
265  boost::signals2::scoped_connection mySimObjectDeletedConnection;
266 
267  mutable tbb::spin_rw_mutex myStayAttachedEvenIfOffMutex;
268 
271 };
272 
UUID is a unique ID wrapper class.
Definition: uuid.h:59
DtVector myLastWorldPosition
Definition: attachedTerrain.h:247
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
virtual const char * readerWriterType() const
Used to supply a string type that this reader writer type is. This can be used in place of dynamic-ca...
This class is used to interface with the terrain a particular entity is &quot;attached&quot; to...
Definition: attachedTerrain.h:57
bool myIntersectsFallThroughToParent
Definition: attachedTerrain.h:254
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords. This is useful for followi...
Definition: vrfChordIntersectRecordList.h:31
DtDcm myLastWorldOrientationMatrix
Definition: attachedTerrain.h:245
DtRwSimObjectReference myEntity
Definition: attachedTerrain.h:231
This class allows one to collect and compare strings using an index number instead of having to do st...
Definition: symbolString.h:27
DtCoordTransform myModelNormalToLocalNormal
Definition: attachedTerrain.h:244
int myAttachedEntityAppearance
Definition: attachedTerrain.h:255
virtual void postGetSelf()
Called after either version of getSelf (mtl or environment). Default is no-op.
Definition: readerWriter.h:85
boost::optional< Dt3dBoundingVolume > myLastLocalBoundingVolume
Definition: attachedTerrain.h:249
Definition: readerWriterRegistry.h:39
Definition: surface.h:181
DtVector myLastLocalPosition
Definition: attachedTerrain.h:248
bool myIsMoveable
Definition: attachedTerrain.h:270
const DtSimulationServices * mySimulationServices
Definition: attachedTerrain.h:263
DtTerrainIntersectOptions Passed to terrain intersect functions to modify how intersect acts...
Definition: terrainIntersectOptions.h:22
Specialized reader/writer version of the shared object reference that will encapsulate the actual sha...
Definition: rwSimObjectReference.h:21
bool myAttachedEntityIsMobile
Definition: attachedTerrain.h:256
The DtPhysicalWorld is the primary interface to and manager of all of the &quot;physical&quot; aspects of the s...
Definition: physicalWorld.h:112
Definition: coordSystem.h:54
DtDcm myLastLocalOrientationMatrix
Definition: attachedTerrain.h:246
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
tbb::spin_rw_mutex myStayAttachedEvenIfOffMutex
Definition: attachedTerrain.h:267
bool myInitialPlacement
Definition: attachedTerrain.h:260
boost::signals2::scoped_connection mySimObjectDeletedConnection
Definition: attachedTerrain.h:265
DtRwBoolean myStayAttachedEvenIfOff
Definition: attachedTerrain.h:252
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:93
DtPlatformSimObjectFacade myPlatformSimObjectFacade
Definition: attachedTerrain.h:232
const DtSimObject * mySimObject
Definition: attachedTerrain.h:251
std::shared_ptr< DtTerrainInterface > myObjectGeometricModel
For now, this is the model that we get.
Definition: attachedTerrain.h:234
const char * source
Definition: lz4.h:442
bool myCheckMovingToNonMoving
Definition: attachedTerrain.h:258
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
Definition: vrfChordIntersectionRecord.h:19
DT_DLL_vrfutil bool intersection(const DtRailSegment *currentSegment, const DtRailSegment *nextSegment)
Given two segments, determine if where they meet is an intersection or just a bend in the road...
bool myScenarioIsRunning
Definition: attachedTerrain.h:257
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
Description: Readable, Writable bool.
Definition: rwBoolean.h:26
DtUUID myEmbarkedOn
Definition: attachedTerrain.h:269
A DtChord is a finite line segment in 3-space, represented by two points. Data derived from the two e...
DtCoordTransform myGeocentricToTopographic
Last local orientation of the referenced entity. If different, then recalculates orientation matrix w...
Definition: attachedTerrain.h:242
const DtPhysicalWorld * myPhysicalWorld
For now,just use the global terrain database to return the coordinate system and perform the intersec...
Definition: attachedTerrain.h:238
const DtReaderWriter & operator=(const DtReaderWriter &orig)
assignment operator
bool myBVChanged
Definition: attachedTerrain.h:259
DtCoordTransform myTopographicToGeocentric
Definition: attachedTerrain.h:243
Definition: point.h:34
bool myMadeInitialPlacement
Definition: attachedTerrain.h:261
DtTerrainIntersectStatus Contains information about status of &quot;data available&quot; when an intersection c...
Definition: terrainIntersectStatus.h:23
A locally simulated VRF object.
Definition: localObject.h:98

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)