VR-Forces 4.6 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) 2017 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/DtDe.h>
13 #include <vrvOsg/vrvOsg.h>
15 
16 #include <osgEarthAerodrome/AerodromeCatalog>
17 #include <osgEarthAerodrome/AerodromeFactory>
18 
19 #include <boost/unordered_map.hpp>
20 #include <OpenThreads/Mutex>
21 
22 namespace makVrv
23 {
24  class DtRunwayDesignatorNode;
25  class DtRunwayMarkingNode;
26  class DtTextureAtlasIndexParser;
27  class DtTaxiwaySignSignaler;
28 
29  class DT_DLL_VRVOSG DtAerodromeRenderer : public osgEarth::Aerodrome::AerodromeRenderer
30  {
31  public:
32 
33  typedef struct RunwayPolygonData
34  {
36  : myWidth(0.0f)
37  , myLength(0.0f)
38  , centerlineStartOffset_ft(0.0f)
39  , hasCenterline(false) // important! (see memory leak defect 58836)
40  , myFowardVector(osg::Vec3(1, 0, 0))
41  , myThreshold(osg::Vec3(0, 0, 0))
42  , useableThreshold(osg::Vec3(0, 0, 0))
43  {
44  }
45 
46  float myWidth;
47  float myLength;
50 
51  osg::Vec3 myFowardVector;
52  osg::Vec3 myThreshold;
53  osg::Vec3 useableThreshold;
54  };
55 
56  typedef boost::unordered_map<std::string, RunwayPolygonData> RunwayPolygonMap;
57 
58  typedef struct DtAerodromeData
59  {
60  std::vector<std::string> rwy1;
61  std::vector<std::string> rwy2;
62 
65  };
66 
67  typedef boost::unordered_map<std::string, DtAerodromeData> DtAerodromeDataMap;
68 
69 
71 
72  virtual ~DtAerodromeRenderer();
73 
74  virtual void apply(osgEarth::Aerodrome::AerodromeNode& node);
75 
76  virtual void apply(osgEarth::Aerodrome::RunwayNode& node);
77 
78  virtual void apply(osgEarth::Aerodrome::RunwayThresholdNode& node);
79 
80  virtual void apply(osgEarth::Aerodrome::TaxiwaySignNode& node);
81 
82  virtual void apply(osgEarth::Aerodrome::LightIndicatorNode& node);
83 
84  virtual void apply(osgEarth::Aerodrome::RunwayThresholdGroup& group);
85 
86  virtual void parseTaxiwaySignNode(osgEarth::Aerodrome::TaxiwaySignNode &node);
87 
88  virtual void parseRunwayNode(osgEarth::Aerodrome::AerodromeFeatureNode& node);
89 
90  virtual void parseRunwayThresholdNode(osgEarth::Aerodrome::AerodromeFeatureNode& node);
91 
92  virtual void parseLightIndicatorNode(osgEarth::Aerodrome::AerodromeFeatureNode& node);
93 
94  virtual void printFeatureAttributes(osgEarth::Aerodrome::AerodromeFeatureNode& node);
95 
96  virtual void addRunwayDesignator(const std::string& icao, const std::string& designator, const std::string& tag,
97  const osg::Vec3& threshold, float offset, float centerOffset = 0.0f);
98 
99  virtual void addRunwayMarking(const std::string& icao, const std::string& designator, const std::string& tag,
100  const osg::Vec3& threshold, float offset, float length, float width, float lateralSpacing);
101 
102  virtual void addRunwayThresholdBar(const std::string& icao, const std::string& designator, const osg::Vec3& threshold);
103 
104  virtual void addRunwayEdgeMarking(const std::string& icao, const std::string& designator, const osg::Vec3& threshold);
105 
106  virtual void addCenterlineMarking(const std::string& icao, const std::string& designator1, const std::string& designator);
107 
108  virtual void addDesignator(const std::string& icao, const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
109 
110  virtual void addMarking(const std::string& icao, const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
111 
112  protected:
113 
114 
115  //These three functions should be the only way that myDtAerodromeData is accessed
116  // They protect any access with a mutex.
117 
118  //Don't call initializeAerodromeData anywhere else unless you really know what you are doing.
119  //The Aerodrome data map only contains data for aerodromes that are in the
120  // process of being built.
121 
122  //add a new aerodrome data to the map of aerodrome data
123  void initializeAerodromeData(const std::string &icao, makVrv::DtRunwayMarkingNode *markingNode);
124 
125  //find the aerodrome data associated with the icao
126  DtAerodromeData *findAerodromeData(const std::string &icao);
127 
128  //remove the aerodrome data from the map
129  virtual void removeAerodromeFromMap(const std::string& icao);
130 
131 
132  protected:
133 
135 
138 
139 
141 
142  RunwayPolygonData* getRunwayPolygonData(const std::string& icao, const std::string& designator);
143 
145 
147  };
148 
149  class DT_DLL_VRVOSG DtRunwayMarkingNode : public osg::Node
150  {
151  public:
152 
153  DtRunwayMarkingNode(DtDe& de, DtAerodromeRenderer& renderer, const std::string& icao);
154 
155  virtual ~DtRunwayMarkingNode();
156 
157  virtual osg::ref_ptr<osg::Geode> buildMarkingDrawable();
158  virtual osg::ref_ptr<osg::Geode> buildDesignatorDrawable();
159 
160  virtual void addMarking(const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
161  virtual void addDesignator(const osg::Vec3Array& verts, const osg::Vec2Array& texCoords);
162 
163  virtual void setTerrainCleared(bool flag);
164 
165  virtual bool terrainCleared();
166 
167  protected:
168 
170 
171  std::string icao;
173 
174  osg::ref_ptr<osg::Vec3Array> myMarkingVerts;
175  osg::ref_ptr<osg::Vec2Array> myMarkingTexCoords;
176 
177  osg::ref_ptr<osg::Vec3Array> myDesignatorVerts;
178  osg::ref_ptr<osg::Vec2Array> myDesignatorTexCoords;
179 
181 
182  };
183 }

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)