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) 2023 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 
31 namespace makVrv
32 {
33  class DtOsgArticulatedModel;
34  class DtTaxiwaySignParser;
35  class DtTextureAtlasIndexParser;
36  class DtRunwayData;
37  class DtSceneObject;
38  class DtCoordinateSystem;
39 
41  {
42  public:
43 
44  typedef std::vector<DtTaxiwaySignLetter> TaxiwaySignSide;
45 
47  {
49  SIDED_DOUBLE
50  };
51 
53  {
55  PLACEMENT_RIGHT
56  };
57 
59  static DtTaxiwaySignManager& instance(DtDe& anIG);
60 
62  virtual ~DtTaxiwaySignManager();
63 
65  DtTaxiwaySignManager() = delete;
67  DtTaxiwaySignManager(const DtTaxiwaySignManager& rhs) = delete;
69  DtTaxiwaySignManager& operator=(const DtTaxiwaySignManager& rhs) = delete;
70  public:
71 
73  virtual void slot_TaxiwaySignCreated(DtTaxiwaySignData& signData);
74 
76  virtual void slot_TaxiwaySignDestroyed(DtTaxiwaySignData& signData);
77 
80  virtual void slot_RunwayCreated(DtRunwayData& runwayData);
81 
84  virtual void slot_RunwayDestroyed(DtRunwayData& runwayData);
85 
87  virtual std::size_t hashPos(DtVector& pos) const;
88 
90  virtual std::size_t hashRunwayData(DtRunwayData& data) const;
91 
94  virtual void setTaxiwayDesignator(DtOsgArticulatedModel* taxiwaySign,
95  const std::string& atlasFileName, const std::string& text);
96 
99  virtual void setModelDefinitionForSize(unsigned int size, const std::string& modelDef);
100 
103  virtual void clearModelDefinitionForSize(unsigned int size);
104 
106  // default is SignTaxiwaySign
107  virtual void setDefaultModelDefinition(const std::string& modelDef);
108 
113  virtual void setSignMaxSegments(unsigned int maxSegments);
114 
116  virtual void setSignCharactersPerSegment(unsigned int charsPerSegment);
117 
120  virtual void setTaxiwaySignUVOffsets(
121  DtOsgArticulatedModel* taxiwaySign, TaxiwaySignSide& sign,
122  unsigned int numChars);
123 
127  virtual bool setMaxSignLimits(unsigned int& numSegments, unsigned int& numChars);
128 
131  virtual void updateTaxiwaySignManager(const float budget);
132 
135  virtual void createTaxiwaySign(DtTaxiwaySignData& signData);
136 
139  virtual void createRunwaySigns(DtRunwayData& runwayData,
140  const RunwaySignType signType, const RunwaySignPlacement signPlacement);
141 
142  virtual void createAndPlaceHalfwayRunwayDistanceSign(
143  const DtRunwayData &runwayData, const double signWidthOffset,
144  const RunwaySignPlacement signPlacement, DtUniqueID runwayID);
145 
148  virtual void extractRunwayStartAndForward(const DtRunwayData &runwayData,
149  DtVector &centerStartPoint, DtVector &forwardVector,
150  const RunwaySignPlacement signPlacement);
151 
153  virtual void generateSignLocationsAndStrings(std::vector<DtVector>& signLocations,
154  std::vector<std::string>& signLabels, const double signSpacing,
155  const double signOffset, RunwaySignType signType,
156  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
157 
160  virtual DtVector generateRightVectorAtPos(const DtVector& currPos,
161  const double headingDeg);
162 
164  virtual void createAndPlaceRunwayDistanceSign(const DtVector& signLoc,
165  const std::string& label, const RunwaySignPlacement signPlacement,
166  const double heading, const unsigned int signSize, DtUniqueID runwayID);
167 
170  virtual std::string generateSignLabel(unsigned int signNum);
171 
173  virtual DtVector calcRunwayHalfwaySignPos(const double signOffset,
174  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
175 
178  virtual double offsetForDistanceSignSize(unsigned int size);
179 
181  virtual DtVector geodeticToCig(const DtVector& pos) const;
182 
183  public:
184 
185  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignDeleted;
186  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignCreated;
187 
188  protected:
190  virtual void slot_coordinateSystemChanged();
191  protected:
192 
194 
197  DtTaxiwaySignParser* mySignParser = nullptr;
198  DtTextureAtlasIndexParser* myTaxiwaySignTextureAtlasParser = nullptr;
199 
200  // For creating DtOsgArticulated models on the main thread
201  tbb::concurrent_queue<DtTaxiwaySignData> myTaxiSignCreateQueue;
202  tbb::concurrent_queue<DtTaxiwaySignData> myTaxiSignDeleteQueue;
203 
204  tbb::concurrent_queue<DtRunwayData> myRunwayDataCreateQueue;
205  tbb::concurrent_queue<DtRunwayData> myRunwayDataDeleteQueue;
206 
207  std::unordered_map<DtUniqueID, DtOsgArticulatedModel* > myTaxiwaySigns;
208  // Each runway has a vector of signs that are generated around it for
209  // end of runway distance markers
210  // They are created when the runway is created and deleted when the runway
211  // is deleted
212  std::unordered_map < DtUniqueID, std::vector<DtOsgArticulatedModel*>> myRunwaySigns;
213  // The signs are DtOsgArticulatedModels, they are put under a DtSceneObject
214  // so that they work when instancing is off
215  // The DtSceneObject doesn't have the transform, the articulated model does
216  std::unordered_map<DtUniqueID, DtSceneObject* > mySceneObjs;
217 
218  std::map<unsigned int, std::string> myTaxiwaySignModelDefinitions;
222 
225  DtCoordinateSystem* myCoordinateSystem = nullptr;
226  private:
227  void destroy(DtTaxiwaySignData& signData);
228  void destroy(DtRunwayData& runwayData);
229 };
230 }
Definition: DtTaxiwaySignManager.h:54
Definition: DtTaxiwaySignManager.h:40
Contains makVrv::DtAerodromeNode class.
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:44
std::map< unsigned int, std::string > myTaxiwaySignModelDefinitions
Definition: DtTaxiwaySignManager.h:218
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
tbb::concurrent_queue< DtTaxiwaySignData > myTaxiSignDeleteQueue
Definition: DtTaxiwaySignManager.h:202
std::string myDefaultTaxiwaySignModelDefinition
Definition: DtTaxiwaySignManager.h:219
tbb::concurrent_queue< DtTaxiwaySignData > myTaxiSignCreateQueue
Definition: DtTaxiwaySignManager.h:201
voidpf void uLong size
Definition: ioapi.h:39
unsigned int myTaxiwaySignModelMaxSegments
Definition: DtTaxiwaySignManager.h:220
Definition: DtTextureAtlasIndexParser.h:33
RunwaySignPlacement
Definition: DtTaxiwaySignManager.h:52
DtDe & myDe
Definition: DtTaxiwaySignManager.h:195
tbb::concurrent_queue< DtRunwayData > myRunwayDataCreateQueue
Definition: DtTaxiwaySignManager.h:204
Contains makVrv::DtDe class.
unsigned int myTaxiwaySignModelLettersPerSegment
Definition: DtTaxiwaySignManager.h:221
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:205
Definition: DtTaxiwaySignParser.h:18
Contains makVrv::DtVirtualBaseClass class.
std::unordered_map< DtUniqueID, std::vector< DtOsgArticulatedModel * > > myRunwaySigns
Definition: DtTaxiwaySignManager.h:212
DtSignalConnectionManager myConnections
Definition: DtTaxiwaySignManager.h:196
Definition: DtTaxiwaySignManager.h:48
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
std::unordered_map< DtUniqueID, DtOsgArticulatedModel * > myTaxiwaySigns
Definition: DtTaxiwaySignManager.h:207
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:216
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:46
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignDeleted
Definition: DtTaxiwaySignManager.h:185
Base class to provide boost signal/slot management.
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignCreated
Definition: DtTaxiwaySignManager.h:186
Contains makVrv::DtUniqueID type.
Contains DLL export macros.
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:72
The elements that make up a taxiway sign.
Definition: DtAerodromeNode.h:112

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)