VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtTaxiwaySignManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 #include <vrvCore/DtDe.h>
13 #include <vrvCore/DtUniqueID.h>
14 #include <vrvOsg/vrvOsg.h>
18 #include <matrix/vlVector.h>
19 #include <osg/Group>
20 #include <boost/unordered_map.hpp>
21 
22 namespace makVrv
23 {
24  class DtOsgArticulatedModel;
25  class DtTaxiwaySignParser;
26  class DtTextureAtlasIndexParser;
27  struct DtRunwayData;
28  class DtSceneObject;
29  class DtTaxiwaySignSignaler;
30 
33  {
34  std::string apt_icao;
35  int size;
36  std::string text;
37  double heading;
39  };
40 
42  // via DtTaxiwaySignSignaler
43  class DT_DLL_VRVOSG DtTaxiwaySignNode : public osg::Group
44  {
45  public:
46  DtTaxiwaySignNode(DtDe& de, DtTaxiwaySignData& signData, DtTaxiwaySignSignaler& taxiwaySignSignaler);
47 
49 
50  public:
54  };
55 
59  {
60  public:
62  static DtTaxiwaySignSignaler& instance(DtDe& anIG);
63 
65  virtual ~DtTaxiwaySignSignaler();
66 
68  boost::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignCreated;
69 
71  boost::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignDeleted;
72 
75  boost::signal<void ( DtRunwayData& )> signal_RunwayCreated;
76 
79  boost::signal<void ( DtRunwayData& )> signal_RunwayDestroyed;
80 
81  protected:
82 
84 
85  };
86 
88  {
89  public:
90 
91  typedef std::vector<DtTaxiwaySignLetter> TaxiwaySignSide;
92 
93  typedef boost::unordered_map<DtUniqueID, DtOsgArticulatedModel* >
95 
96  typedef boost::unordered_map<DtUniqueID, std::vector<DtOsgArticulatedModel*> >
98 
99  typedef boost::unordered_map<DtUniqueID, DtSceneObject* >
101 
103  {
105  SIDED_DOUBLE
106  };
107 
109  {
111  PLACEMENT_RIGHT
112  };
113 
115  static DtTaxiwaySignManager& instance(DtDe& anIG);
116 
118  virtual ~DtTaxiwaySignManager();
119 
121  virtual void slot_TaxiwaySignCreated(DtTaxiwaySignData& signData);
122 
124  virtual void slot_TaxiwaySignDestroyed(DtTaxiwaySignData& signData);
125 
128  virtual void slot_RunwayCreated(DtRunwayData& runwayData);
129 
132  virtual void slot_RunwayDestroyed(DtRunwayData& runwayData);
133 
135  virtual std::size_t hashPos(DtVector& pos);
136 
138  virtual std::size_t hashRunwayData(DtRunwayData& data);
139 
142  virtual void setTaxiwayDesignator(DtOsgArticulatedModel* taxiwaySign,
143  const std::string& atlasFileName, const std::string& text);
144 
147  virtual void setModelDefinitionForSize(unsigned int size, const std::string& modelDef);
148 
151  virtual void clearModelDefinitionForSize(unsigned int size);
152 
154  // default is SignTaxiwaySign
155  virtual void setDefaultModelDefinition(const std::string& modelDef);
156 
161  virtual void setSignMaxSegments(unsigned int maxSegments);
162 
164  virtual void setSignCharactersPerSegment(unsigned int charsPerSegment);
165 
168  virtual void setTaxiwaySignUVOffsets(
169  DtOsgArticulatedModel* taxiwaySign, TaxiwaySignSide& sign,
170  unsigned int numChars);
171 
175  virtual bool setMaxSignLimits(unsigned int& numSegments, unsigned int& numChars);
176 
179  virtual void updateTaxiwaySignManager();
180 
183  virtual void createTaxiwaySign(DtTaxiwaySignData& signData);
184 
187  virtual void createRunwaySigns(DtRunwayData& runwayData,
188  const RunwaySignType signType, const RunwaySignPlacement signPlacement);
189 
190  virtual void createAndPlaceHalfwayRunwayDistanceSign(
191  const DtRunwayData &runwayData, const double signWidthOffset,
192  const RunwaySignPlacement signPlacement, DtUniqueID runwayID);
193 
196  virtual void extractRunwayStartAndForward(const DtRunwayData &runwayData,
197  DtVector &centerStartPoint, DtVector &forwardVector,
198  const RunwaySignPlacement signPlacement);
199 
201  virtual void generateSignLocationsAndStrings(std::vector<DtVector>& signLocations,
202  std::vector<std::string>& signLabels, const double signSpacing,
203  const double signOffset, RunwaySignType signType,
204  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
205 
208  virtual DtVector generateRightVectorAtPos(const DtVector& currPos,
209  const double headingDeg);
210 
212  virtual void createAndPlaceRunwayDistanceSign(const DtVector& signLoc,
213  const std::string& label, const RunwaySignPlacement signPlacement,
214  const double heading, const unsigned int signSize, DtUniqueID runwayID);
215 
218  virtual std::string generateSignLabel(unsigned int signNum);
219 
221  virtual DtVector calcRunwayHalfwaySignPos(const double signOffset,
222  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
223 
226  double offsetForDistanceSignSize(unsigned int size);
227 
229  DtVector geodeticToCig(const DtVector& pos) const;
230 
231  public:
232 
233  boost::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignDeleted;
234  boost::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignCreated;
235 
236  protected:
237 
239 
244  // For creating DtOsgArticulated models on the main thread
247 
249  // Each runway has a vector of signs that are generated around it for
250  // end of runway distance markers
251  // They are created when the runway is created and deleted when the runway
252  // is deleted
254  // The signs are DtOsgArticulatedModels, they are put under a DtSceneObject
255  // so that they work when instancing is off
256  // The DtSceneObject doesn't have the transform, the articulated model does
258 
259  std::map<unsigned int, std::string> myTaxiwaySignModelDefinitions;
263  };
264 }

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)