VR-Forces 5.0.3 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) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 #include <vrvCore/DtDe.h>
13 #include <vrvCore/DtUniqueID.h>
14 
15 #include <vrvOsg/vrvOsg.h>
16 
20 
22 
23 #include <matrix/vlVector.h>
24 #include <osg/Group>
25 
26 #include <unordered_map>
27 
28 namespace makVrv
29 {
30  class DtOsgArticulatedModel;
31  class DtTaxiwaySignParser;
32  class DtTextureAtlasIndexParser;
33  struct DtRunwayData;
34  class DtSceneObject;
35  class DtTaxiwaySignSignaler;
36  class DtCoordinateSystem;
37 
41  {
42  std::string apt_icao;
43  int size;
44  std::string text;
45  double heading;
47  };
48 
50  // via DtTaxiwaySignSignaler
51  class DT_DLL_VRVOSG DtTaxiwaySignNode : public osg::Group
52  {
53  public:
54  DtTaxiwaySignNode(DtDe& de, DtTaxiwaySignData& signData, DtTaxiwaySignSignaler& taxiwaySignSignaler);
55 
56  virtual ~DtTaxiwaySignNode();
57 
58  public:
62  };
63 
67  {
68  public:
70  static DtTaxiwaySignSignaler& instance(DtDe& anIG);
71 
73  virtual ~DtTaxiwaySignSignaler();
74 
76  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignCreated;
77 
79  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignDeleted;
80 
83  boost::signalslib::signal<void ( DtRunwayData& )> signal_RunwayCreated;
84 
87  boost::signalslib::signal<void ( DtRunwayData& )> signal_RunwayDestroyed;
88 
89  protected:
90 
92 
93  };
94 
96  {
97  public:
98 
99  typedef std::vector<DtTaxiwaySignLetter> TaxiwaySignSide;
100 
101  typedef std::unordered_map<DtUniqueID, DtOsgArticulatedModel* >
103 
104  typedef std::unordered_map<DtUniqueID, std::vector<DtOsgArticulatedModel*> >
106 
107  typedef std::unordered_map<DtUniqueID, DtSceneObject* >
109 
111  {
113  SIDED_DOUBLE
114  };
115 
117  {
119  PLACEMENT_RIGHT
120  };
121 
123  static DtTaxiwaySignManager& instance(DtDe& anIG);
124 
126  virtual ~DtTaxiwaySignManager();
127 
129  virtual void slot_TaxiwaySignCreated(DtTaxiwaySignData& signData);
130 
132  virtual void slot_TaxiwaySignDestroyed(DtTaxiwaySignData& signData);
133 
136  virtual void slot_RunwayCreated(DtRunwayData& runwayData);
137 
140  virtual void slot_RunwayDestroyed(DtRunwayData& runwayData);
141 
143  virtual std::size_t hashPos(DtVector& pos);
144 
146  virtual std::size_t hashRunwayData(DtRunwayData& data);
147 
150  virtual void setTaxiwayDesignator(DtOsgArticulatedModel* taxiwaySign,
151  const std::string& atlasFileName, const std::string& text);
152 
155  virtual void setModelDefinitionForSize(unsigned int size, const std::string& modelDef);
156 
159  virtual void clearModelDefinitionForSize(unsigned int size);
160 
162  // default is SignTaxiwaySign
163  virtual void setDefaultModelDefinition(const std::string& modelDef);
164 
169  virtual void setSignMaxSegments(unsigned int maxSegments);
170 
172  virtual void setSignCharactersPerSegment(unsigned int charsPerSegment);
173 
176  virtual void setTaxiwaySignUVOffsets(
177  DtOsgArticulatedModel* taxiwaySign, TaxiwaySignSide& sign,
178  unsigned int numChars);
179 
183  virtual bool setMaxSignLimits(unsigned int& numSegments, unsigned int& numChars);
184 
187  virtual void updateTaxiwaySignManager(const float budget);
188 
191  virtual void createTaxiwaySign(DtTaxiwaySignData& signData);
192 
195  virtual void createRunwaySigns(DtRunwayData& runwayData,
196  const RunwaySignType signType, const RunwaySignPlacement signPlacement);
197 
198  virtual void createAndPlaceHalfwayRunwayDistanceSign(
199  const DtRunwayData &runwayData, const double signWidthOffset,
200  const RunwaySignPlacement signPlacement, DtUniqueID runwayID);
201 
204  virtual void extractRunwayStartAndForward(const DtRunwayData &runwayData,
205  DtVector &centerStartPoint, DtVector &forwardVector,
206  const RunwaySignPlacement signPlacement);
207 
209  virtual void generateSignLocationsAndStrings(std::vector<DtVector>& signLocations,
210  std::vector<std::string>& signLabels, const double signSpacing,
211  const double signOffset, RunwaySignType signType,
212  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
213 
216  virtual DtVector generateRightVectorAtPos(const DtVector& currPos,
217  const double headingDeg);
218 
220  virtual void createAndPlaceRunwayDistanceSign(const DtVector& signLoc,
221  const std::string& label, const RunwaySignPlacement signPlacement,
222  const double heading, const unsigned int signSize, DtUniqueID runwayID);
223 
226  virtual std::string generateSignLabel(unsigned int signNum);
227 
229  virtual DtVector calcRunwayHalfwaySignPos(const double signOffset,
230  const RunwaySignPlacement signPlacement, const DtRunwayData& runwayData);
231 
234  double offsetForDistanceSignSize(unsigned int size);
235 
237  DtVector geodeticToCig(const DtVector& pos) const;
238 
239  public:
240 
241  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignDeleted;
242  boost::signalslib::signal<void ( DtTaxiwaySignData& )> signal_TaxiwaySignCreated;
243 
244  protected:
246  virtual void slot_coordinateSystemChanged();
247  protected:
248 
250 
255  // For creating DtOsgArticulated models on the main thread
258 
261 
263  // Each runway has a vector of signs that are generated around it for
264  // end of runway distance markers
265  // They are created when the runway is created and deleted when the runway
266  // is deleted
268  // The signs are DtOsgArticulatedModels, they are put under a DtSceneObject
269  // so that they work when instancing is off
270  // The DtSceneObject doesn't have the transform, the articulated model does
272 
273  std::map<unsigned int, std::string> myTaxiwaySignModelDefinitions;
277 
278  std::vector<DtTaxiwaySignData> myTaxiSignCreationVector;
279  std::vector<DtRunwayData> myRunwayCreationVector;
280 
283  DtCoordinateSystem* myCoordinateSystem = nullptr;
284 
285  private:
286 
287  void remove(DtTaxiwaySignData& signData);
288  void remove(DtRunwayData& runwayData);
289 
290 };
291 }
Definition: DtTaxiwaySignManager.h:118
Definition: DtTaxiwaySignManager.h:95
std::string text
Definition: DtTaxiwaySignManager.h:44
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
DtTextureAtlasIndexParser * myTaxiwaySignTextureAtlasParser
Definition: DtTaxiwaySignManager.h:254
Contains makVrv::DtTaxiwaySignLetter class.
int size
Definition: DtTaxiwaySignManager.h:43
std::unordered_map< DtUniqueID, DtOsgArticulatedModel * > TaxiwaySignsMap
Definition: DtTaxiwaySignManager.h:102
std::vector< DtTaxiwaySignLetter > TaxiwaySignSide
Definition: DtTaxiwaySignManager.h:99
std::map< unsigned int, std::string > myTaxiwaySignModelDefinitions
Definition: DtTaxiwaySignManager.h:273
#define DT_DLL_VRVOSG
Definition: vrvOsg.h:23
DtDe & myDe
Definition: DtTaxiwaySignManager.h:59
std::string myDefaultTaxiwaySignModelDefinition
Definition: DtTaxiwaySignManager.h:274
A class which contains the signals used by the DtTaxiwaySignManager classes.
Definition: DtTaxiwaySignManager.h:66
std::string apt_icao
Definition: DtTaxiwaySignManager.h:42
voidpf void uLong size
Definition: ioapi.h:39
unsigned int myTaxiwaySignModelMaxSegments
Definition: DtTaxiwaySignManager.h:275
Definition: DtTextureAtlasIndexParser.h:23
RunwaySignPlacement
Definition: DtTaxiwaySignManager.h:116
DtDe & myDe
Definition: DtTaxiwaySignManager.h:251
Contains makVrv::DtDe class.
unsigned int myTaxiwaySignModelLettersPerSegment
Definition: DtTaxiwaySignManager.h:276
An articulated model manipulator for controlling an articulated model. Supports indirect rendering of...
Definition: DtOsgArticulatedModel.h:69
DtLockedBufferedQueue< DtRunwayData > myRunwayDataLockedQueue
Definition: DtTaxiwaySignManager.h:257
Contains makVrv::DtLockedBufferedQueue class.
Connect DtAerodromeRenderer with the DtTaxiwaySignManager.
Definition: DtTaxiwaySignManager.h:51
SceneObjectMap mySceneObjs
Definition: DtTaxiwaySignManager.h:271
Definition: DtTaxiwaySignParser.h:18
DtTaxiwaySignParser * mySignParser
Definition: DtTaxiwaySignManager.h:253
DtLockedBufferedQueue< DtTaxiwaySignData > mySignDataLockedQueue
Definition: DtTaxiwaySignManager.h:256
A locked buffered queue which allows multiple writers and a single reader. Internally the queue is st...
Definition: DtLockedBufferedQueue.h:24
Contains makVrv::DtVirtualBaseClass class.
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignCreated
signal when the DtTaxiwaySignNode is created
Definition: DtTaxiwaySignManager.h:76
boost::signalslib::signal< void(DtRunwayData &)> signal_RunwayCreated
signal when the DtRunwayNode is created Need this for distance remaining signs
Definition: DtTaxiwaySignManager.h:83
std::unordered_map< DtUniqueID, DtSceneObject * > SceneObjectMap
Definition: DtTaxiwaySignManager.h:108
DtSignalConnectionManager myConnections
Definition: DtTaxiwaySignManager.h:252
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignDeleted
signal when the DtTaxiwaySignNode is deleted
Definition: DtTaxiwaySignManager.h:79
Definition: DtTaxiwaySignManager.h:112
DtTaxiwaySignSignaler & myTaxiwaySignSignaler
Definition: DtTaxiwaySignManager.h:61
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
DtTaxiwaySignData mySignData
Definition: DtTaxiwaySignManager.h:60
std::unordered_map< DtUniqueID, std::vector< DtOsgArticulatedModel * > > RunwaySignMap
Definition: DtTaxiwaySignManager.h:105
RunwaySignMap myRunwaySigns
Definition: DtTaxiwaySignManager.h:267
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
RunwaySignType
Definition: DtTaxiwaySignManager.h:110
std::vector< DtRunwayData > myRunwayCreationVector
Definition: DtTaxiwaySignManager.h:279
DtVector location
Definition: DtTaxiwaySignManager.h:46
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignDeleted
Definition: DtTaxiwaySignManager.h:241
Base class to provide boost signal/slot management.
DtLockedBufferedQueue< DtTaxiwaySignData > mySignDataToRemoveLockedQueue
Definition: DtTaxiwaySignManager.h:259
boost::signalslib::signal< void(DtTaxiwaySignData &)> signal_TaxiwaySignCreated
Definition: DtTaxiwaySignManager.h:242
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:70
std::vector< DtTaxiwaySignData > myTaxiSignCreationVector
Definition: DtTaxiwaySignManager.h:278
The elements that make up a taxiway sign.
Definition: DtTaxiwaySignManager.h:40
boost::signalslib::signal< void(DtRunwayData &)> signal_RunwayDestroyed
signal when the DtRunwayNode is deleted Need this for distance remaining signs
Definition: DtTaxiwaySignManager.h:87
Definition: DtRunwayMarkingManager.h:41
TaxiwaySignsMap myTaxiwaySigns
Definition: DtTaxiwaySignManager.h:262
double heading
Definition: DtTaxiwaySignManager.h:45
DtLockedBufferedQueue< DtRunwayData > myRunwayDataToRemoveLockedQueue
Definition: DtTaxiwaySignManager.h:260

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)