VR-Forces 4.10 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
environmentalStateManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2021 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
14 #include <vlutil/vlString.h>
18 #include <matrix/vlVector.h>
19 #include <vrfutil/rwUUID.h>
22 #include <tbb/spin_mutex.h>
25 #include <vrfutil/rwWindLevels.h>
26 
27 #include <set>
28 
29 class DtSimManager;
30 class DtVrfObject;
31 class DtObjectType;
36 class DtChord;
37 class DtSimMessage;
38 
39 
47 {
48 private:
50 
53  orig);
56 
57 public:
58 
61 
63  virtual ~DtEnvironmentalStateManager();
64 
65  virtual bool init();
66 
67  virtual void tick();
68 
69  virtual DtSimManager* simManager();
70 
72  virtual const DtWeatherStateProvider* weatherStateProvider() const;
73  virtual void setWeatherStateProvider(DtWeatherStateProvider* w);
74 
77  virtual bool globalEnvironmentSimulatedLocally() const;
78 
83  virtual bool startEnvironmentSimulationLocally();
84 
87 
92  virtual void setWeatherState(const DtChangeWeatherCommand& command);
93 
97  virtual void setCloudLayerState(const DtChangeCloudLayerCommand& command);
98 
99  virtual void setUseDayNightIlluminationModel(const DtChangeTimeOfDayCommand& command);
101 
102 
110 
112  virtual DtSharedVrfObjectReference weatherObjectFor(const DtUUID& = DtUUID::nullUUID(),
113  bool* isGlobal = 0) const;
114 
117  virtual DtSharedVrfObjectReference weatherObjectFor(const DtVector& localPosition,
118  bool* isGlobal = 0) const;
119 
124  virtual std::vector<DtSharedVrfObjectReference> weatherObjectsFor(const DtChord& localChord) const;
125 
127  virtual DtSharedVrfObjectReference cloudLayerFor(const DtUUID&) const;
128 
131  virtual DtSharedVrfObjectReference cloudLayerFor(const DtVector& localPosition) const;
132 
134  virtual std::vector<DtSharedVrfObjectReference> cloudLayersFor(const DtChord& localChord) const;
135 
140  virtual std::vector<CloudStateSegment>
141  cloudLayerDescriptionsAt(const DtVector& localPosition) const;
142 
144  virtual DtSharedVrfObjectReference windCorridorFor(const DtUUID&) const;
145 
148  virtual DtSharedVrfObjectReference windCorridorFor(double & windHeading, const DtVector& localPosition) const;
149 
151  virtual std::vector<DtSharedVrfObjectReference> windCorridorsFor(const DtChord& localChord) const;
152 
154  virtual DtSharedVrfObjectReference airTurbulenceFor(const DtUUID&) const;
155 
158  virtual DtSharedVrfObjectReference airTurbulenceFor(const DtVector& localPosition) const;
159 
161  virtual std::vector<DtSharedVrfObjectReference> airTurbulencesFor(const DtChord& localChord) const;
162 
163 
164 
165 
167 
172  virtual double visualDetectionMinimumContrast() const;
173 
175 
177 
181  virtual double airTurbidity(const DtVector&) const;
182 
184  virtual double airTemperature(const DtVector&) const;
185 
187  virtual double airPressure(const DtVector& localPosition ) const;
188 
190  virtual double airTemperatureAltitude(const DtVector& localPosition) const;
191 
193  virtual double airPressureAltitude(const DtVector& localPosition) const;
194 
196  virtual bool airTemperatureAltitudeIsSeaLevel(const DtVector& localPosition) const;
197 
199  virtual bool airPressureAltitudeIsSeaLevel(const DtVector& localPosition) const;
200 
202  virtual double humidity(const DtVector& localPosition) const;
203 
205  virtual double precipitationIntensity(const DtVector&) const;
206 
209  virtual double averagePrecipitationIntensity(const DtChord&) const;
210 
212  virtual DtVrfWeatherPrecipitationType precipitationType(const DtVector&) const;
213 
215  virtual double windSpeed(const DtVector&) const;
216 
218  virtual double windDirection(const DtVector&) const;
219 
221  virtual DtVrfTurbulenceLevel airTurbulence(const DtVector&) const;
222 
224  virtual bool lightningPresent(const DtVector& localPosition) const;
225 
227  virtual double visibility(const DtVector&) const;
228 
230  virtual int visibilityObscurant(const DtVector&) const;
231 
237  virtual double visibility(const DtChord&) const;
238 
240  virtual double underwaterVisibility(const DtVector&) const;
241 
243  virtual double surfaceTransparency(const DtVector&) const;
244 
246  virtual double waterCurrentSpeed(const DtVector&) const;
247 
249  virtual double waterCurrentDirection(const DtVector&) const;
250 
252  virtual double ambientWaterTemperature(const DtVector&) const;
253 
255  virtual double tidalOffset(const DtVector&) const;
256 
259  virtual bool tidalDirection(const DtVector&) const;
260 
262  virtual unsigned int swellState(const DtVector&) const;
263 
265  virtual double swellStateDirection(const DtVector&) const;
266 
268  virtual unsigned int seaState(const DtVector&) const;
269 
271  virtual double seaStateDirection(const DtVector&) const;
272 
274  virtual double choppiness(const DtVector&) const;
275 
277  virtual double surgeDepth(const DtVector&) const;
278 
280  virtual double fogHeight(const DtVector&) const;
281 
286  virtual DtVector fogColor(const DtVector&) const;
287 
289  virtual double snowAccumulation(const DtVector&) const;
290 
293  virtual double snowRoadAccumulation(const DtVector&) const;
294 
296  virtual double rainAccumulation(const DtVector&) const;
297 
300  virtual DtObjectType globalEnvironmentObjectType() const;
301 
304  virtual DtObjectType metocServiceObjectType() const;
305 
308  virtual DtUUID initializeAndGetMetocWeatherService();
309 
311  virtual void setMetocEnabled(bool b);
313  virtual bool metocEnabled() const;
314 
317 
318  virtual double thermoclineLayer1Depth(const DtVector&) const;
319  virtual double thermoclineLayer1Permeability(const DtVector&) const;
320  virtual double thermoclineLayer2Depth(const DtVector&) const;
321  virtual double thermoclineLayer2Permeability(const DtVector&) const;
322  virtual double thermoclineLayer3Depth(const DtVector&) const;
323  virtual double thermoclineLayer3Permeability(const DtVector&) const;
324  virtual double thermoclineLayer4Depth(const DtVector&) const;
325  virtual double thermoclineLayer4Permeability(const DtVector&) const;
326  virtual double thermoclineLayer5Depth(const DtVector&) const;
327  virtual double thermoclineLayer5Permeability(const DtVector&) const;
329 
332  virtual bool windSpeedAndDirectionAtAltitude(const DtVector&,
333  double altMSL, double& windSpeed, double& windDirection) const;
335  virtual bool visibilityAndObscurantAtAltitude(const DtVector&,
336  double altMSL, double& visibility, int& obscurant) const;
338 
340 
342 
345  virtual void setDateAndTimeOfDay(double secondsPastMidnight);
346  virtual void setDateAndTimeOfDay(const DtChangeTimeOfDayCommand& command);
348  virtual double timeOfDay() const;
350  virtual double dateAndTimeOfDay() const;
351 
353  virtual void setTimeOfDayAdvancementSpeed(double speed);
354  virtual void setTimeOfDayAdvancementSpeed(const DtChangeTimeOfDayCommand& command);
355  virtual double timeOfDayAdvancementSpeed() const;
356 
358 
361 
364  virtual double illumination(const DtVector& localPosition) const;
365 
368  virtual double expectedIllumination(const DtVector& localPosition, double dateAndTime) const;
370 
387  virtual void computeSoilWeatherMobilityModifiers(
388  const DtVector& location, const DtString& soilType,
389  double& snowEffectFraction,
390  DtString& alternateSoil, double& alternateSoilFraction,
391  double& tractionModifier) const;
392 
395 
398  virtual void setSnowMinimumAltitude(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
399  virtual double snowMinimumAltitude(const DtVector&) const;
401 
405  virtual void setWindDrivenSeaStateEnabled(bool b, const DtUUID& weatherArea = DtUUID::nullUUID());
406  virtual bool windDrivenSeaStateEnabled(const DtVector&) const;
408 
412  virtual void setUseDayNightIlluminationModel(bool);
413  virtual bool useDayNightIlluminationModel() const;
415 
419  virtual double normalizedPrecipitationRate() const;
420  virtual void setNormalizedPrecipitationRate(const double);
422 
428  virtual bool reduceVisibilityForPrecipitation() const;
429  virtual void setReduceVisibilityForPrecipitation(const bool);
431 
433 
434 protected:
435 
438  virtual DtString deepWaterSoilName() const;
439  virtual DtString shallowWaterSoilName() const;
440  virtual DtString waterySoilName() const;
441  virtual DtString drySoilName() const;
442  virtual DtString roadSoilName() const;
443  virtual DtString snowSoilName() const;
444  virtual DtString iceSoilName() const;
445  virtual double deepSnowDepth() const;
448  virtual double saturationWaterDepth() const;
450  virtual double waterSlideDepth() const;
452  virtual double waterSlideFactor() const;
455  virtual double hardFreezeTemperature() const;
457 
461  virtual void createGlobalEnvironmentObject();
462 
464 
465  virtual void setPriority(int p, const DtUUID& weatherArea = DtUUID::nullUUID());
466  virtual int priority(const DtUUID& weatherArea) const;
467  virtual int priority(const DtVector&) const;
469 
470 
475  virtual CloudLayerCloudType cloudType(const DtVector& localPosition) const;
476  virtual double cloudAltitude(const DtVector& localPosition) const;
477  virtual double cloudThickness(const DtVector& localPosition) const;
478  virtual double cloudDensity(const DtVector& localPosition) const;
480 
484  virtual void setAirTurbidity(double factor, const DtUUID& weatherArea = DtUUID::nullUUID());
485  virtual void setAmbientAirTemperature(double temp, const DtUUID& weatherArea = DtUUID::nullUUID());
486  virtual void setAmbientAirPressure(double pressure, const DtUUID& weatherArea = DtUUID::nullUUID());
487  virtual void setAirTemperatureAltitude(double altitude, const DtUUID& weatherArea = DtUUID::nullUUID());
488  virtual void setAirPressureAltitude(double altitude, const DtUUID& weatherArea = DtUUID::nullUUID());
489  virtual void setAirTemperatureAltitudeIsSeaLevel(bool seaLevel, const DtUUID& weatherArea = DtUUID::nullUUID());
490  virtual void setAirPressureAltitudeIsSeaLevel(bool seaLevel, const DtUUID& weatherArea = DtUUID::nullUUID());
491  virtual void setSeaLevelWaterConcentration(double water, const DtUUID& weatherArea = DtUUID::nullUUID());
492 
493  virtual void setAirTurbulence(int current, const DtUUID& weatherArea = DtUUID::nullUUID());
494  virtual void setPrecipitationIntensity(double factor, const DtUUID& weatherArea = DtUUID::nullUUID());
495  virtual void setPrecipitationType(DtVrfWeatherPrecipitationType current, const DtUUID& weatherArea = DtUUID::nullUUID());
496  virtual void setWindSpeed(double value, const DtUUID& weatherArea = DtUUID::nullUUID());
497  virtual void setWindDirection(double value, const DtUUID& weatherArea = DtUUID::nullUUID());
498  virtual void setVisibility(double value, const DtUUID& weatherArea = DtUUID::nullUUID());
499  virtual void setUnderwaterVisibility(double underwaterVisibility, const DtUUID& weatherArea = DtUUID::nullUUID());
500  virtual void setSurfaceTransparency(double transparency, const DtUUID& weatherArea = DtUUID::nullUUID());
501  virtual void setWaterCurrentSpeed(double waterCurrentSpeed, const DtUUID& weatherArea = DtUUID::nullUUID());
502  virtual void setWaterCurrentDirection(double waterCurrentDirection, const DtUUID& weatherArea = DtUUID::nullUUID());
503  virtual void setAmbientWaterTemperature(double waterTemperature, const DtUUID& weatherArea = DtUUID::nullUUID());
504  virtual void setTidalOffset(double tidalOffset, const DtUUID& weatherArea = DtUUID::nullUUID());
505  virtual void setTidalDirection(bool tidalDirection, const DtUUID& weatherArea = DtUUID::nullUUID());
506  virtual void setSwellState(unsigned int state, const DtUUID& weatherArea = DtUUID::nullUUID());
507  virtual void setSwellStateDirection(double direction, const DtUUID& weatherArea = DtUUID::nullUUID());
508  virtual void setSeaState(unsigned int state, const DtUUID& weatherArea = DtUUID::nullUUID());
509  virtual void setSeaStateDirection(double direction, const DtUUID& weatherArea = DtUUID::nullUUID());
510  virtual void setChoppiness(double choppiness, const DtUUID& weatherArea = DtUUID::nullUUID());
511  virtual void setSurgeDepth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
512  virtual void setFogHeight(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
513  virtual void setFogColor(const DtVector& color, const DtUUID& weatherArea = DtUUID::nullUUID());
514  virtual void setSnowAccumulation(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
515  virtual void setSnowRoadAccumulation(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
516  virtual void setRainAccumulation(double rain, const DtUUID& weatherArea = DtUUID::nullUUID());
517  virtual void setThermoclineLayer1Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
518  virtual void setThermoclineLayer1Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
519  virtual void setThermoclineLayer2Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
520  virtual void setThermoclineLayer2Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
521  virtual void setThermoclineLayer3Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
522  virtual void setThermoclineLayer3Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
523  virtual void setThermoclineLayer4Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
524  virtual void setThermoclineLayer4Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
525  virtual void setThermoclineLayer5Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
526  virtual void setThermoclineLayer5Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
527 
528  virtual void setLightingPresentForWeatherArea(bool, const DtUUID& weatherArea = DtUUID::nullUUID());
529 
531 
533  virtual void clearWindLevels(const DtUUID& weatherArea = DtUUID::nullUUID());
534  virtual void setWindLevels(const DtRwWindLevels&, const DtUUID& weatherArea = DtUUID::nullUUID());
536 
539  virtual void setDeepWaterSoilName(const DtString&);
540  virtual void setShallowWaterSoilName(const DtString&);
541  virtual void setDrySoilName(const DtString&);
542  virtual void setWaterySoilName(const DtString&);
543  virtual void setRoadSoilName(const DtString&);
544  virtual void setSnowSoilName(const DtString&);
545  virtual void setIceSoilName(const DtString&);
546  virtual void setDeepSnowDepth(const double);
547  virtual void setSaturationWaterDepth(const double);
548  virtual void setWaterSlideDepth(const double);
549  virtual void setWaterSlideFactor(const double);
550  virtual void setHardFreezeTemperature(const double);
552 
553 protected:
554  static void objectAddedCallback(const DtVrfObject* object, void* usr);
555  virtual void processObjectAdded(const DtVrfObject* object);
556 
557  static void objectRemovedCallback(const DtVrfObject* object, void* usr);
558  virtual void processObjectRemoved(const DtVrfObject* object);
559 
561  virtual DtEnvironmentalStateSetter* createLocalEnvironmentalStateSetter();
563  virtual DtEnvironmentalStateSetter* createRemoteEnvironmentalStateSetter();
564 
565  static void changeWeatherPrioritiesCallback(DtSimMessage* msg, void* usr);
566  virtual void processChangeWeatherPriorities(DtSimMessage* msg);
567 
568  static void requestWeatherAtLocationCallback(DtSimMessage* msg, void* usr);
569  virtual void processRequestWeatherAtLocation(DtSimMessage* msg);
570 
571  static void physicalWorldParametersChangedCallback(void* usr);
572  virtual void initializeIlluminationObjectsList();
575  virtual void initializeSoilCharacteristics();
576 
579  virtual void initializeWeatherStateProvider();
580 
583  virtual void initializeWeatherParameters();
584 
585  virtual const DtIlluminationObjectParameters& findBestMatch(const DtObjectType& objtype) const;
586 
587 protected:
589 
592 
597 
600 
602 
605 
607 
608  std::map<DtObjectType, DtIlluminationObjectParameters> myIlluminationObjectTypes;
609 
612 
615 
618 
621 
624 
627 
630 
633 
637 
640 
643 
647 
651 
660 
664 };
665 
666 
UUID is a unique ID wrapper class.
Definition: rwUUID.h:222
DtVrfWeatherPrecipitationType
Definition: vrfWeatherStateEnums.h:13
DtString myIceSoilName
Name of &quot;soil&quot; that is ice.
Definition: environmentalStateManager.h:629
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
DtRwBoolean myReduceVisibilityForPrecipitation
This flag determines whether to degrade visibility due to precipitation, on top of the effect of the ...
Definition: environmentalStateManager.h:659
DtReal myWaterSlideFactor
Fraction [0-1] of traction retained on hard surface with water on it.
Definition: environmentalStateManager.h:642
std::map< DtObjectType, DtIlluminationObjectParameters > myIlluminationObjectTypes
Definition: environmentalStateManager.h:608
DtSimManager * mySimManager
Definition: environmentalStateManager.h:588
This class contains the functions that the VRF simulation uses to query the current state of the weat...
Definition: weatherStateProvider.h:183
DtEnvironmentalStateSetter * myEnvironmentalStateSetter
This is only for setting global weather – local weather will use local vrf objects.
Definition: environmentalStateManager.h:599
DtVrfTurbulenceLevel
placeholder. Final version is defined in vrfWeatherStateEnums.h
Definition: weatherStateProvider.h:24
Instances of DtIlluminationObjectParameters are used to specify the how much illumination is cast by ...
Definition: illuminationObjectParameters.h:21
DtString myShallowWaterSoilName
Name of soil that is considered shallow water.
Definition: environmentalStateManager.h:614
double myHardFreezeTemperature
Temperature at which shallow water is frozen enough to drive a vehicle on.
Definition: environmentalStateManager.h:646
DtUUID myMetocWeatherServiceUuid
Definition: environmentalStateManager.h:604
bool myFirstTick
Definition: environmentalStateManager.h:601
CloudLayerCloudType
Definition: vrfCloudLayerStateEnums.h:14
DtString myRoadSoilName
Name of soil that is paved road.
Definition: environmentalStateManager.h:623
DtSharedVrfObjectReference class will allocate an empty DtVrfObjectReference if one is not assigned s...
Definition: vrfObjectReference.h:102
Definition: objectType.h:27
bool myCreatedMetocService
Definition: environmentalStateManager.h:603
static const DtUUID & nullUUID()
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
Contains the enums for cloud layers.
double myDeepSnowDepth
Depth of snow required for full snow soil effect. Meters.
Definition: environmentalStateManager.h:632
File: simMsg.h.
Definition: simMessage.h:35
DtWeatherStateProvider * myWeatherStateProvider
The object used to get weather state.
Definition: environmentalStateManager.h:591
DtRwVrfObjectReferenceList myAirTurbulenceObjects
Definition: environmentalStateManager.h:596
double mySaturationWaterDepth
Depth of water accumulation before dry soil is changed completely to watery soil. ...
Definition: environmentalStateManager.h:636
A DtSimCommand subclass which specifies a change to the cloud layer settings for the specified cloud ...
Definition: changeCloudLayerCommand.h:25
DtReal myWaterSlideDepth
Depth of water on a hard surface that causes loss of normal traction.
Definition: environmentalStateManager.h:639
DtString myWaterySoilName
Name of soil that is considered watery soil.
Definition: environmentalStateManager.h:617
A DtSimCommand subclass which specifies a change to the weather settings for the specified weather ar...
Definition: changeWeatherCommand.h:29
DtString myDeepWaterSoilName
Name of soil that is considered deep water.
Definition: environmentalStateManager.h:611
Description: Readable, Writable bool.
Definition: rwBoolean.h:26
DtString myDrySoilName
Name of soil that is dry soil–not sand or gravel.
Definition: environmentalStateManager.h:620
DtString mySnowSoilName
Name of &quot;soil&quot; that is snow.
Definition: environmentalStateManager.h:626
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtBoost::shared_ptr< const DtManagedObjectList > DtManagedObjectListConstPtr
Typedef for a shared pointer to a const DtOrgViewManagedObjectList.
Definition: managedObjectList.h:31
The simulation engine is controlled by a single,top-level class called the Simulation Manager...
Definition: simManager.h:103
DtRwVrfObjectReferenceList myWindCorridorObjects
Definition: environmentalStateManager.h:595
Handles the environmental state of the simulation.
Definition: environmentalStateManager.h:46
bool myMetocEnabled
This flag determines whether the net interfaces for Environmental Process objects will publish METOC ...
Definition: environmentalStateManager.h:663
Definition: rwWindLevels.h:17
If you use a list of object names to archive which objects are part of a controller (or any object) u...
Definition: vrfObjectReference.h:305
A DtSimCommand subclass which specifies a change to the time of day settings in the simulation engine...
Definition: changeTimeOfDayCommand.h:20
Abstract base class for classes that set new environmental state to the environmental state simulator...
Definition: environmentalStateSetter.h:29
DtManagedObjectListConstPtr myIlluminationObjects
Definition: environmentalStateManager.h:606
DtRwVrfObjectReferenceList myWeatherObjects
Definition: environmentalStateManager.h:594
DtSharedVrfObjectReference myGlobalEnvironmentObject
Definition: environmentalStateManager.h:593
double myNormalizedPrecipitationRate
The (rain) precipitation rate that corresponds to a value of 1.0 in a weather object or the return va...
Definition: environmentalStateManager.h:650

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)