VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtWeatherArea.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/DtUniqueID.h>
13 #include <vrvCore/DtDe.h>
14 #include <vrvCore/DtSkyObject.h>
15 
17 
18 #include <vrvOsg/vrvOsg.h>
19 #include <vrvOsg/DtWeatherLayer.h>
20 
22 
23 #include <matrix/vlVector.h>
24 
25 #include <osg/Matrixd>
26 #include <osg/Vec3d>
27 #include <osg/Vec4d>
28 
29 #include <boost/unordered_map.hpp>
30 #include <vector>
31 
32 
33 namespace makVrv
34 {
35  // Forward declarations.
36  class DtJobSplitter;
37  class DtWeatherAreaCreator;
38  class DtIntersector;
39 
57  {
58  friend class DtWeatherAreaFactory;
59 
60  public:
61 
63  virtual ~DtWeatherArea();
64 
66  DtWeatherArea() = delete;
67 
69  DtWeatherArea(const DtWeatherArea &other) = delete;
70 
72  DtWeatherArea &operator=(const DtWeatherArea &other) = delete;
73 
74  protected:
75 
78 
79  public:
82  virtual void setEnabled(bool enabled);
83 
85  virtual bool enabled() const;
86 
90  virtual bool culled() const;
91 
95  virtual void setBounds(const DtVector& bounds, float cornerRadius);
96 
101  virtual void setTransform(const DtVector& position, float orientation, bool relativeToCamera = false);
102 
104  virtual const osg::Vec3d& position() const;
105 
107  virtual const osg::Matrixd& rotation() const;
108 
110  virtual float boundsX() const;
111 
113  virtual float boundsY() const;
114 
116  virtual float boundsZ() const;
117 
119  virtual float boundsCornerRadius() const;
120 
124  virtual const unsigned int* packedData(int& sizeX, int& sizeY) const;
125 
132  virtual void cullUpdate(const osg::Vec3d& camPos,
133  const Frustum_64& frustum, DtJobSplitter* jobSplitter,
134  const osg::Camera* camera);
135 
138  virtual void drawWeatherLayerEffects(DtWeatherEffect::DrawData& drawData);
139 
146  static float computeBoundsDistance2d(const osg::Vec3d& position,
147  const osg::Vec4d& bounds, const osg::Vec3d& boundsPosition,
148  const osg::Matrixd& boundsRotation);
149 
156  static float computeBoundsDistance3d(const osg::Vec3d& position,
157  const osg::Vec4d& bounds, const osg::Vec3d& boundsPosition,
158  const osg::Matrixd& boundsRotation);
159 
167  static float computeBoundsDistance2dAndTop(const osg::Vec3d& position,
168  const osg::Vec4d& bounds, const osg::Vec3d& boundsPosition,
169  const osg::Matrixd& boundsRotation);
170 
174  virtual float computeBoundsDistance2d(const osg::Vec3d& position);
175 
179  virtual float computeBoundsDistance3d(const osg::Vec3d& position);
180 
185  virtual float computeBoundsDistance2dAndTop(const osg::Vec3d& position);
186 
189  virtual void setPrecipitationIntensity(const float intensity);
190 
192  virtual const float precipitationIntensity() const;
193 
196  virtual void setPrecipitationType(const DtSkyObject::PrecipitationType type);
197 
199  virtual const DtSkyObject::PrecipitationType precipitationType() const;
200 
203  virtual void setGroundRainAccumulation(const float depth);
204 
206  virtual const float groundRainAccumulation() const;
207 
210  virtual void setFogColor(const DtVector& color);
211 
213  virtual const DtVector& fogColor() const;
214 
217  virtual void setVisibilityDistance(const float distance);
218 
220  virtual const float visibilityDistance() const;
221 
224  virtual void setOvercast(const float overcast);
225 
227  virtual const float overcast() const;
228 
232  virtual void setGlobalWind(const float windDirectionRad,
233  const float windSpeedMps);
234 
238  virtual void setWind(const float windDirectionRad,
239  const float windSpeedMps);
240 
243  virtual void setLightningEnabled(const bool enabled);
244 
246  virtual const bool lightningEnabled() const;
247 
251  virtual void cloudLayerAdded(DtCloudLayerId layerId, int cloudType);
252 
255  virtual void cloudLayerRemoved(DtCloudLayerId layerId);
256 
262  virtual bool computeLocalPrecipitation(const osg::Vec3d& location,
263  int& type, float& intensity);
264 
270  virtual bool computeLocalGroundRainAccumulation(const osg::Vec3d& location,
271  float& depth, float& blend);
272 
276  virtual void addWeatherLayer(DtWeatherLayer::LayerType layerType);
277 
281  virtual void removeWeatherLayer(DtWeatherLayer::LayerType layerType);
282 
283  protected:
284 
286  virtual void updateTransform();
287 
291  virtual void computeBasis(const osg::Vec3d& inGeocentricPos, osg::Matrixd& rotOut) const;
292 
297  virtual bool clampPositionToTerrain(osg::Vec3d& position, float clampDistance) const;
298 
301  virtual bool isPositionBelowSealevel(const DtVector& position) const;
302 
303  protected:
304 
306 
307  bool myEnabled;
308  bool myCulled;
309 
310  DtVector mySetPosition;
313 
314  osg::Vec3d myPosition; // computed world position
315  osg::Matrixd myRotation; // computed world rotation
316 
317  float myBoundsX;
318  float myBoundsY;
319  float myBoundsZ;
321 
325 
327 
329 
330  DtVector myFogColor;
332  float myOvercast;
333 
336 
337  std::vector<DtWeatherLayer*> myWeatherLayers;
338 
339  DtIntersector* myIntersector = nullptr;
340  };
341 
342 
343 
347  {
348  public:
349 
352  enum AreaType
353  {
358  AreaTypeEnvironmental
359  };
360 
363 
365  virtual ~DtWeatherAreaFactory();
366 
368  DtWeatherAreaFactory() = delete;
369 
371  DtWeatherAreaFactory(const DtWeatherAreaFactory &other) = delete;
372 
374  DtWeatherAreaFactory &operator=(const DtWeatherAreaFactory &other) = delete;
375 
378  static DtWeatherAreaFactory& instance(DtDe& de);
379 
381  static const std::string& theClassName();
382 
384  virtual DtWeatherArea* create(AreaType areaType) const;
385 
386  protected:
387 
389  };
390 
391 }
392 
393 
394 
395 
DtSkyObject::PrecipitationType myPrecipitationType
Definition: DtWeatherArea.h:324
AreaType
brief Weather area type enumerations. Used for identifying specific areas.
Definition: DtWeatherArea.h:352
Contains makVrv::DtWeatherLayer class.
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
osg::Vec3d myPosition
Definition: DtWeatherArea.h:314
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
DtIntersector is an abstract class that provides the interface for requesting intersections with the ...
Definition: DtIntersector.h:25
float myWindSpeedMps
Definition: DtWeatherArea.h:335
DtDe & myDe
Definition: DtWeatherArea.h:388
float myBoundsZ
Definition: DtWeatherArea.h:319
Factory that is used to create weather areas.
Definition: DtWeatherArea.h:346
Contains makVrv::DtDe class.
this class is used to split work up between threads.
Definition: DtJobSplitter.h:64
float myGroundRainAccumulation
Definition: DtWeatherArea.h:326
Definition: DtWeatherArea.h:354
float myBoundsCornerRadius
Definition: DtWeatherArea.h:320
bool myLightningEnabled
Definition: DtWeatherArea.h:328
Camera forward declarations.
Contains makVrv::DtSkyObject class.
A structure used to hold data for drawing.
Definition: DtWeatherEffect.h:72
bool myEnabled
Definition: DtWeatherArea.h:307
float myOvercast
Definition: DtWeatherArea.h:332
Contains makVrv::DtVirtualBaseClass class.
osg::Matrixd myRotation
Definition: DtWeatherArea.h:315
DT_DLL_VRVCORE double distance(const makVrv::DtCoordinateSystem &, const DtVector &from, const DtVector &to)
Returns the distance from the two points. Coordinates are in local database coordinates The coordinat...
DtVector myFogColor
Definition: DtWeatherArea.h:330
DtVector mySetPosition
Definition: DtWeatherArea.h:310
float myPrecipitationIntensity
Definition: DtWeatherArea.h:323
bool myCulled
Definition: DtWeatherArea.h:308
float myWindDirectionRad
Definition: DtWeatherArea.h:334
float myVisibilityDistance
Definition: DtWeatherArea.h:331
std::vector< DtWeatherLayer * > myWeatherLayers
Definition: DtWeatherArea.h:337
bool mySetRelativeToCamera
Definition: DtWeatherArea.h:312
long long DtCloudLayerId
Definition: DtCloudLayer.h:26
Contains makVrv::DtUniqueID type.
Contains DLL export macros.
PrecipitationType
Precipitation types.
Definition: DtSkyObject.h:74
DtDe & myDe
Definition: DtWeatherArea.h:305
float mySetOrientation
Definition: DtWeatherArea.h:311
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
float myBoundsX
Definition: DtWeatherArea.h:317
float myBoundsY
Definition: DtWeatherArea.h:318
float myPrecipitationBoundsScale
Definition: DtWeatherArea.h:322
A weather area represents localized environmental conditions such as blowing dust, blowing sand, or blowing snow. The default (base class) weather area is mainly used as a bounds for localized environmental information such as precipitation intensity. AreaTypeBlowingDust, AreaTypeBlowingSand, AreaTypeBlowingSnow are specialized weather areas that represent 1 specific environmental condition.
Definition: DtWeatherArea.h:56
LayerType
brief Layer type enumerations. Layer types help with descibing the layer for tying layer to areas...
Definition: DtWeatherLayer.h:53

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)