VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtTaxiwaySignManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 #include <vrvOsg/vrvOsg.h>
12 
13 #include <vrvOsg/DtAerodromeNode.h>
14 
15 #include <vrvCore/DtDe.h>
17 #include <vrvCore/DtUniqueID.h>
18 
22 
23 #include <matrix/vlVector.h>
24 
25 #include <osg/Group>
26 
27 #include <tbb/concurrent_queue.h>
28 
29 #include <unordered_map>
30 #include <map>
31 
32 namespace makVrv
33 {
34  class DtOsgArticulatedModel;
35  class DtTaxiwaySignParser;
36  class DtTextureAtlasIndexParser;
37  class DtRunwayData;
38  class DtSceneObject;
39  class DtCoordinateSystem;
40 
42  {
43  public:
44 
45  typedef std::vector<DtTaxiwaySignLetter> TaxiwaySignSide;
46 
48  {
50  SIDED_DOUBLE
51  };
52 
54  {
56  PLACEMENT_RIGHT
57  };
58 
59  // Internal class to hold data needed about a distance to go sign that will be
60  // needed when attempting to figure out what runway the sign belongs to
62  {
63  public:
64  std::string myAirportName;
65  DtVector myLocation;
66  double myTrueHeading;
68  };
69 
70  // Internal class to hold data needed about a runway that will be
71  // needed when attempting to figure out what runway a distance to go sign belongs to
73  {
74  public:
76  DtVector start;
77  DtVector end;
78  };
79 
81  static DtTaxiwaySignManager& instance(DtDe& anIG);
82 
84  virtual ~DtTaxiwaySignManager();
85 
87  DtTaxiwaySignManager() = delete;
89  DtTaxiwaySignManager(const DtTaxiwaySignManager& rhs) = delete;
91  DtTaxiwaySignManager& operator=(const DtTaxiwaySignManager& rhs) = delete;
92  public:
93 
95  virtual void slot_TaxiwaySignCreated(DtTaxiwaySignData& signData);
96 
98  virtual void slot_TaxiwaySignDestroyed(DtTaxiwaySignData& signData);
99 
102  virtual void slot_RunwayCreated(DtRunwayData& runwayData);
103 
106  virtual void slot_RunwayDestroyed(DtRunwayData& runwayData);
107 
111  virtual void determineSignTypeAndCreate(DtTaxiwaySignData& signData);
112 
114  virtual std::size_t hashPos(DtVector& pos) const;
115 
117  virtual std::size_t hashRunwayData(DtRunwayData& data) const;
118 
121  virtual void setTaxiwayDesignator(DtOsgArticulatedModel* taxiwaySign,
122  const std::string& atlasFileName, const std::string& text);
123 
127  virtual void setTaxiwayDesignator(DtOsgArticulatedModel* taxiwaySign, const std::string& atlasFileName, DtTaxiwaySignManager::TaxiwaySignSide& frontSide,
129 
132  virtual void setModelDefinitionForSize(unsigned int size, const std::string& modelDef);
133 
136  virtual void clearModelDefinitionForSize(unsigned int size);
137 
139  // default is SignTaxiwaySign
140  virtual void setDefaultModelDefinition(const std::string& modelDef);
141 
146  virtual void setSignMaxSegments(unsigned int maxSegments);
147 
149  virtual void setSignCharactersPerSegment(unsigned int charsPerSegment);
150 
153  virtual void setTaxiwaySignUVOffsets(
154  DtOsgArticulatedModel* taxiwaySign, TaxiwaySignSide& sign,
155  unsigned int numChars);
156 
160  virtual bool setMaxSignLimits(unsigned int& numSegments, unsigned int& numChars);
161 
164  virtual void updateTaxiwaySignManager(const float budget);
165 
167  virtual DtUniqueID createTaxiwaySign(DtTaxiwaySignData& signData, const DtVector& signLocation, TaxiwaySignSide& frontSide, TaxiwaySignSide& backSide,
168  double heading, const std::string& groupName);
169 
172  virtual void createRunwaySigns(DtRunwayData& runwayData,
173  const RunwaySignType signType, const RunwaySignPlacement signPlacement);
174 
175  virtual void createAndPlaceHalfwayRunwayDistanceSign(
176  const DtRunwayData &runwayData, const double signWidthOffset,
177  const RunwaySignPlacement signPlacement, DtUniqueID runwayID);
178 
181  virtual void extractRunwayStartAndForward(const DtRunwayData &runwayData,
182  DtVector &centerStartPoint, DtVector &forwardVector,
183  const RunwaySignPlacement signPlacement);
184 
186  virtual void generateSignLocationsAndStrings(std::vector<DtVector>& signLocations,
187  std::vector<std::string>& signLabels, const double signSpacing,
188  const double signOffset, RunwaySignType signType,
189  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
190 
193  virtual DtVector generateRightVectorAtPos(const DtVector& currPos,
194  const double headingDeg);
195 
198  virtual DtVector generateFrontVectorAtPos(const DtVector& currPos,
199  const double headingDeg);
200 
202  virtual void createAndPlaceRunwayDistanceSign(const DtVector& signLoc,
203  const std::string& label, const RunwaySignPlacement signPlacement,
204  const double heading, const unsigned int signSize, DtUniqueID runwayID);
205 
208  virtual std::string generateSignLabel(unsigned int signNum);
209 
211  virtual DtVector calcRunwayHalfwaySignPos(const double signOffset,
212  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
213 
216  virtual double offsetForDistanceSignSize(unsigned int size);
217 
219  virtual DtVector geodeticToCig(const DtVector& pos) const;
220 
221  public:
222 
223  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignDeleted;
224  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignCreated;
225 
226  protected:
228  virtual void slot_coordinateSystemChanged();
229 
234  virtual std::string findRunwayForDtgSign(DtDtgSignData* signData);
235 
238  virtual bool isRunwayClosestToSignSoFar(const DtDtgRunwayData& runway, DtDtgSignData& sign);
239 
242  virtual bool isRunwayDtgHeadingCandidate(double signHeading, double runwayHeading);
243 
246  virtual bool isCloser(DtDtgSignData& signData, const DtVector& runwayStart, const DtVector& runwayEnd);
247 
250  virtual std::string pickRunwayNameForSignBasedOnHeading(const DtDtgRunwayData& runway, DtDtgSignData& sign);
251 
252  protected:
253 
255 
258  DtTaxiwaySignParser* mySignParser = nullptr;
259  DtTextureAtlasIndexParser* myTaxiwaySignTextureAtlasParser = nullptr;
260 
261  // For creating DtOsgArticulated models on the main thread
262  tbb::concurrent_queue<DtTaxiwaySignData> myTaxiSignCreateQueue;
263  tbb::concurrent_queue<DtTaxiwaySignData> myTaxiSignDeleteQueue;
264 
265  tbb::concurrent_queue<DtRunwayData> myRunwayDataCreateQueue;
266  tbb::concurrent_queue<DtRunwayData> myRunwayDataDeleteQueue;
267 
268  // Used to discover what runway goes with each DTG sign
269  std::multimap<std::string, class DtDtgRunwayData> myRunways;
270 
271  std::unordered_map<DtUniqueID, DtOsgArticulatedModel* > myTaxiwaySigns;
272 
273  // Each runway has a vector of signs that are generated around it for
274  // end of runway distance markers
275  // They are created when the runway is created and deleted when the runway
276  // is deleted
277  std::unordered_map <DtUniqueID, std::vector<DtOsgArticulatedModel*>> myRunwaySigns;
278 
279  // The signs are DtOsgArticulatedModels, they are put under a DtSceneObject
280  // so that they work when instancing is off
281  // The DtSceneObject doesn't have the transform, the articulated model does
282  std::unordered_map<DtUniqueID, DtSceneObject* > mySceneObjs;
283 
284  std::map<unsigned int, std::string> myTaxiwaySignModelDefinitions;
288 
289  // UniqueID of the DtOsgAticulatedModel associated with this data / pointer to our DistanceToGo sign data
290  std::map<DtUniqueID, DtDtgSignData> myDtgSigns;
291 
292  // The key is a hash of a position; the second is the DtUniqueID assigned
293  // the the DtOsgArticulatedModel implenting the sign. Given a sign position, all
294  // models at that position can be looked up in myTaxiwaySigns map.
295  std::multimap<std::size_t, DtUniqueID> mySignLocatorMap;
296 
299  DtCoordinateSystem* myCoordinateSystem = nullptr;
300 
301  private:
302  void destroy(DtTaxiwaySignData& signData);
303  void destroy(DtRunwayData& runwayData);
304 };
305 }
Definition: DtTaxiwaySignManager.h:55
Definition: DtTaxiwaySignManager.h:41
Contains makVrv::DtAerodromeNode class.
DtVector myLocation
Definition: DtTaxiwaySignManager.h:65
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
Contains makVrv::DtTaxiwaySignLetter class.
std::vector< DtTaxiwaySignLetter > TaxiwaySignSide
Definition: DtTaxiwaySignManager.h:45
std::map< unsigned int, std::string > myTaxiwaySignModelDefinitions
Definition: DtTaxiwaySignManager.h:284
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
tbb::concurrent_queue< DtTaxiwaySignData > myTaxiSignDeleteQueue
Definition: DtTaxiwaySignManager.h:263
std::string myDefaultTaxiwaySignModelDefinition
Definition: DtTaxiwaySignManager.h:285
tbb::concurrent_queue< DtTaxiwaySignData > myTaxiSignCreateQueue
Definition: DtTaxiwaySignManager.h:262
DtVector end
Definition: DtTaxiwaySignManager.h:77
std::multimap< std::size_t, DtUniqueID > mySignLocatorMap
Definition: DtTaxiwaySignManager.h:295
double myClosestRunwayDistance
Definition: DtTaxiwaySignManager.h:67
std::unordered_map< DtUniqueID, std::vector< DtOsgArticulatedModel * > > myRunwaySigns
Definition: DtTaxiwaySignManager.h:277
voidpf void uLong size
Definition: ioapi.h:39
unsigned int myTaxiwaySignModelMaxSegments
Definition: DtTaxiwaySignManager.h:286
Definition: DtTextureAtlasIndexParser.h:33
RunwaySignPlacement
Definition: DtTaxiwaySignManager.h:53
DtDe & myDe
Definition: DtTaxiwaySignManager.h:256
tbb::concurrent_queue< DtRunwayData > myRunwayDataCreateQueue
Definition: DtTaxiwaySignManager.h:265
Contains makVrv::DtDe class.
DtRunwayData baseRunwayData
Definition: DtTaxiwaySignManager.h:75
unsigned int myTaxiwaySignModelLettersPerSegment
Definition: DtTaxiwaySignManager.h:287
An articulated model manipulator for controlling an articulated model. Supports indirect rendering of...
Definition: DtOsgArticulatedModel.h:67
tbb::concurrent_queue< DtRunwayData > myRunwayDataDeleteQueue
Definition: DtTaxiwaySignManager.h:266
double myTrueHeading
Definition: DtTaxiwaySignManager.h:66
Definition: DtTaxiwaySignParser.h:19
Contains makVrv::DtVirtualBaseClass class.
DtSignalConnectionManager myConnections
Definition: DtTaxiwaySignManager.h:257
Definition: DtTaxiwaySignManager.h:49
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
std::unordered_map< DtUniqueID, DtOsgArticulatedModel * > myTaxiwaySigns
Definition: DtTaxiwaySignManager.h:271
DtRunwayData is the data collected from paged Aerodrome data and used for creating runway markings...
Definition: DtRunwayData.h:23
std::unordered_map< DtUniqueID, DtSceneObject * > mySceneObjs
Definition: DtTaxiwaySignManager.h:282
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
RunwaySignType
Definition: DtTaxiwaySignManager.h:47
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignDeleted
Definition: DtTaxiwaySignManager.h:223
Base class to provide boost signal/slot management.
Definition: DtTaxiwaySignManager.h:72
DtVector start
Definition: DtTaxiwaySignManager.h:76
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignCreated
Definition: DtTaxiwaySignManager.h:224
Contains makVrv::DtUniqueID type.
Contains DLL export macros.
Definition: DtTaxiwaySignManager.h:61
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
std::string myAirportName
Definition: DtTaxiwaySignManager.h:64
The elements that make up a taxiway sign.
Definition: DtAerodromeNode.h:112
std::multimap< std::string, class DtDtgRunwayData > myRunways
Definition: DtTaxiwaySignManager.h:269
std::map< DtUniqueID, DtDtgSignData > myDtgSigns
Definition: DtTaxiwaySignManager.h:290

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)