VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtAerodromeRenderer.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2019 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/DtDe.h>
13 
14 #include <vrvOsg/vrvOsg.h>
15 
17 
18 #include <osgEarthAerodromes/AerodromeCatalog>
19 #include <osgEarthAerodromes/AerodromeFactory>
20 
21 #include <boost/unordered_map.hpp>
22 
23 #include <OpenThreads/Mutex>
24 
25 namespace makVrv
26 {
27  class DtRunwayDesignatorNode;
28  class DtRunwayMarkingNode;
29  class DtTextureAtlasIndexParser;
30  class DtTaxiwaySignSignaler;
31  class DtRunwaySignaler;
32  class DtLightIndicatorSignaler;
33 
35  {
36  public:
37 
39  {
41  : myWidth(0.0f)
42  , myLength(0.0f)
43  , centerlineStartOffset_ft(0.0f)
44  , hasCenterline(false) // important! (see memory leak defect 58836)
45  , myFowardVector(osg::Vec3(1, 0, 0))
46  , myThreshold(osg::Vec3(0, 0, 0))
47  , useableThreshold(osg::Vec3(0, 0, 0))
48  {
49  }
50 
51  float myWidth;
52  float myLength;
55 
56  osg::Vec3 myFowardVector;
57  osg::Vec3 myThreshold;
58  osg::Vec3 useableThreshold;
59  };
60 
61  typedef boost::unordered_map<std::string, RunwayPolygonData> RunwayPolygonMap;
62 
64  {
65  std::vector<std::string> rwy1;
66  std::vector<std::string> rwy2;
67 
70  };
71 
72  typedef boost::unordered_map<std::string, DtAerodromeData> DtAerodromeDataMap;
73 
74 
76 
77  virtual ~DtAerodromeRenderer();
78 
79  virtual void apply(osgEarth::Aerodrome::AerodromeNode& node);
80 
81  virtual void apply(osgEarth::Aerodrome::RunwayNode& node);
82 
83  virtual void apply(osgEarth::Aerodrome::RunwayThresholdNode& node);
84 
85  virtual void apply(osgEarth::Aerodrome::TaxiwaySignNode& node);
86 
87  virtual void apply(osgEarth::Aerodrome::LightIndicatorNode& node);
88 
89  virtual void apply(osgEarth::Aerodrome::RunwayThresholdGroup& group);
90 
91  virtual void parseTaxiwaySignNode(osgEarth::Aerodrome::TaxiwaySignNode& node);
92 
93  virtual void parseRunwayNode(osgEarth::Aerodrome::AerodromeFeatureNode& node);
94 
95  virtual void parseRunwayThresholdNode(osgEarth::Aerodrome::AerodromeFeatureNode& node);
96 
97  virtual void parseLightIndicatorNode(osgEarth::Aerodrome::AerodromeFeatureNode& node);
98 
99  virtual void printFeatureAttributes(osgEarth::Aerodrome::AerodromeFeatureNode& node);
100 
101  virtual void addRunwayDesignator(const std::string& icao, const std::string& designator, const std::string& tag,
102  const osg::Vec3& threshold, float offset, float centerOffset = 0.0f);
103 
104  virtual void addRunwayMarking(const std::string& icao, const std::string& designator, const std::string& tag,
105  const osg::Vec3& threshold, float offset, float length, float width, float lateralSpacing);
106 
107  virtual void addRunwayThresholdBar(const std::string& icao, const std::string& designator, const osg::Vec3& threshold);
108 
109  virtual void addRunwayEdgeMarking(const std::string& icao, const std::string& designator, const osg::Vec3& threshold);
110 
111  virtual void addCenterlineMarking(const std::string& icao, const std::string& designator1, const std::string& designator);
112 
113  virtual void addDesignator(const std::string& icao, const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
114 
115  virtual void addMarking(const std::string& icao, const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
116 
117  protected:
118 
119 
120  //These three functions should be the only way that myDtAerodromeData is accessed
121  // They protect any access with a mutex.
122 
123  //Don't call initializeAerodromeData anywhere else unless you really know what you are doing.
124  //The Aerodrome data map only contains data for aerodromes that are in the
125  // process of being built.
126 
127  //add a new aerodrome data to the map of aerodrome data
128  void initializeAerodromeData(const std::string& icao, makVrv::DtRunwayMarkingNode* markingNode);
129 
130  //find the aerodrome data associated with the icao
131  DtAerodromeData* findAerodromeData(const std::string& icao);
132 
133  //remove the aerodrome data from the map
134  virtual void removeAerodromeFromMap(const std::string& icao);
135 
136 
137  protected:
138 
140 
143 
144 
146 
147  RunwayPolygonData* getRunwayPolygonData(const std::string& icao, const std::string& designator);
148 
150 
152 
154 
156 
157  };
158 
159  class DT_DLL_VRVOSG DtRunwayMarkingNode : public osg::Node
160  {
161  public:
162 
163  DtRunwayMarkingNode(DtDe& de, DtAerodromeRenderer& renderer, const std::string& icao);
164 
165  virtual ~DtRunwayMarkingNode();
166 
167  virtual osg::ref_ptr<osg::Geode> buildMarkingDrawable();
168  virtual osg::ref_ptr<osg::Geode> buildDesignatorDrawable();
169 
170  virtual void addMarking(const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
171  virtual void addDesignator(const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
172 
173  virtual void setTerrainCleared(bool flag);
174 
175  virtual bool terrainCleared();
176 
177  protected:
178 
180 
181  std::string icao;
183 
186 
189 
191 
192  };
193 }
osg::Vec3 myThreshold
Definition: DtAerodromeRenderer.h:57
osg::Vec3 useableThreshold
Definition: DtAerodromeRenderer.h:58
A class which contains the signals used by the DtLightIndicatorManager classes.
Definition: DtLightIndicatorManager.h:55
std::vector< std::string > rwy1
Definition: DtAerodromeRenderer.h:65
bool hasCenterline
Definition: DtAerodromeRenderer.h:54
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
A class which contains the signals used by the DtTaxiwaySignManager classes.
Definition: DtTaxiwaySignManager.h:62
Definition: DtTextureAtlasIndexParser.h:23
osg::ref_ptr< osg::Vec3Array > myDesignatorVerts
Definition: DtAerodromeRenderer.h:187
Contains makVrv::DtDe class.
DtRunwaySignaler & myRunwaySignaler
Definition: DtAerodromeRenderer.h:153
DtAerodromeDataMap myDtAerodromeData
Definition: DtAerodromeRenderer.h:141
osg::ref_ptr< osg::Vec2Array > myDesignatorTexCoords
Definition: DtAerodromeRenderer.h:188
DtDe & myDe
Definition: DtAerodromeRenderer.h:139
std::vector< std::string > rwy2
Definition: DtAerodromeRenderer.h:66
DtRunwayMarkingNode * myRunwayMarkingNode
Definition: DtAerodromeRenderer.h:69
osg::Vec3 myFowardVector
Definition: DtAerodromeRenderer.h:56
Definition: DtAerodromeRenderer.h:34
float myWidth
Definition: DtAerodromeRenderer.h:51
DtSignalConnectionManager myConnections
Definition: DtAerodromeRenderer.h:151
RunwayPolygonData()
Definition: DtAerodromeRenderer.h:40
DtTextureAtlasIndexParser * myTextureAtlasIndexParser
Definition: DtAerodromeRenderer.h:145
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
Definition: DtAerodromeRenderer.h:38
Definition: DtAerodromeRenderer.h:159
OpenThreads::Mutex Mutex
Definition: DtOsgThreadingUtils.h:12
boost::unordered_map< std::string, DtAerodromeData > DtAerodromeDataMap
Definition: DtAerodromeRenderer.h:72
boost::unordered_map< std::string, RunwayPolygonData > RunwayPolygonMap
Definition: DtAerodromeRenderer.h:61
float myLength
Definition: DtAerodromeRenderer.h:52
DtAerodromeRenderer & myRenderer
Definition: DtAerodromeRenderer.h:182
Definition: DtAerodromeRenderer.h:63
float centerlineStartOffset_ft
Definition: DtAerodromeRenderer.h:53
DtTaxiwaySignSignaler & myTaxiwaySignSignaler
Definition: DtAerodromeRenderer.h:149
Base class to provide boost signal/slot management.
bool myTerrainCleared
Definition: DtAerodromeRenderer.h:190
Definition: DtRunwayMarkingManager.h:124
Contains DLL export macros.
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
voidpf uLong offset
Definition: ioapi.h:42
RunwayPolygonMap myRunwayPolygonMap
Definition: DtAerodromeRenderer.h:68
osg::ref_ptr< osg::Vec3Array > myMarkingVerts
Definition: DtAerodromeRenderer.h:184
osg::ref_ptr< osg::Vec2Array > myMarkingTexCoords
Definition: DtAerodromeRenderer.h:185
std::string icao
Definition: DtAerodromeRenderer.h:181
DtDe & myDe
Definition: DtAerodromeRenderer.h:179
DtLightIndicatorSignaler & myLightIndicatorSignaler
Definition: DtAerodromeRenderer.h:155
OpenThreads::Mutex myAerodromeDataMapMutex
Definition: DtAerodromeRenderer.h:142

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)