VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
backendLineOfSightManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2018 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 #pragma once
6 
7 #include <vrvUtil/signalslib.h>
12 #include <vrvCore/DtUniqueID.h>
14 #include <vlutil/vlString.h>
15 #include <matrix/vlVector.h>
16 #include <vlutil/vlPerformanceStats.h>
18 #include <vrfutil/rwUUID.h>
19 
20 #include <vlpi/simulationAddress.h>
21 
22 namespace makVrv
23 {
24  class DtDe;
25  class DtIntervisibilityStateListener;
26  class DtIntervisibilityElement;
27 }
28 
29 class DtSimMessage;
30 
31 namespace makVrf
32 {
33  class DtVrfSimBackendManager;
34  class DtIntervisibilityOptionExtensions;
35 
38  {
39  public:
41 
42  virtual ~DtBackendLineOfSightManager();
43 
45  static DtBackendLineOfSightManager& instance(makVrv::DtDe& de);
46  static void registerInstance(makVrv::DtDe& de, DtBackendLineOfSightManager*);
47 
49  virtual bool hasRequestPending(makVrv::DtUniqueID) const;
50 
52  virtual void requestLineOfSightCheck(makVrv::DtUniqueID, const DtVector& start, const DtVector& end,
53  bool intersectTerrain = true, bool intersectEntities = false, bool intersectFeatures = true);
54 
57  {
58  LineOfSightPoint(const DtVector& s, const DtVector& e, const DtString& u = "") :
59  start(s), end(e), userData(u) {};
60  LineOfSightPoint(const LineOfSightPoint& orig) : start(orig.start), end(orig.end), userData(orig.userData) {};
61 
62  DtVector start;
65  };
66 
67  typedef std::vector<LineOfSightPoint> LineOfSightPoints;
68 
69  virtual void requestLineOfSightCheck(makVrv::DtUniqueID, const LineOfSightPoints& pts,
70  bool intersectTerrain = true, bool intersectEntities = false, bool intersectFeatures = true);
71 
74  virtual void addReference(makVrv::DtUniqueID);
75  virtual void removeReference(makVrv::DtUniqueID);
76 
78  virtual bool validBackendToCheck() const;
79 
81  boost::signal<void (makVrv::DtUniqueID, const DtIfIntersectionInformationResponse::IntersectionPairInformation&)> signal_lineOfSightResponse;
82 
84  boost::signal<void (makVrv::DtUniqueID, DtVrfExtendedIntervisibilitySettingsData::IntervisibilitySettings)> signal_extendedIntervisibilityOptionsChanged;
85 
87  virtual bool needsRequestForBackendLineOfSight(makVrv::DtUniqueID id, const DtVector& startPoint, const DtVector& endPoint,
88  double waitTimeRequest, bool intersectEntities, bool& startingTimeRequest, bool useAsTimer = false);
89 
91  virtual void setAlphaFactor(double);
92  virtual double alphaFactor() const;
93 
95 
96  virtual void adjustAlpha(makVrv::DtUniqueID, double alpha);
97  virtual void adjustColor(makVrv::DtUniqueID, const Color& visible, const Color& blocked);
98 
99  virtual bool itemIsSelected(makVrv::DtUniqueID) const;
100 
101  protected:
102  virtual void checkWaitingForColor();
103 
104  virtual void slot_visibleColorChanged(makVrv::DtUniqueID, float, float, float, float);
105  virtual void slot_blockedColorChanged(makVrv::DtUniqueID, float, float, float, float);
106 
107  virtual void slot_extendedIntervisibilityOptionsChanged(makVrv::DtUniqueID id, DtVrfExtendedIntervisibilitySettingsData::IntervisibilitySettings);
108 
109  virtual DtVrfSimBackendManager& backendManager() const;
110  virtual void removeRequestId(makVrv::DtUniqueID);
111  virtual void processIntersectionResponse(DtSimMessage*);
112 
115  virtual void resetColor(makVrv::DtUniqueID, const Color& visibleColor, const Color& blockedColor);
116 
117  virtual void slot_onCurrentSelectionChanged(const makVrv::DtSelectionManager::IdSet& deselected);
118 
119  virtual void setupConnectionsForListener(makVrv::DtIntervisibilityStateListener*, makVrv::DtSignalConnectionManager*);
120 
121  virtual void slot_elementToBeDestroyed(makVrv::DtIntervisibilityElement*);
122 
123  protected:
126 
127  std::map<makVrv::DtUniqueID, unsigned long> myKeyToRequestMap;
128  std::map<unsigned long, std::pair<makVrv::DtUniqueID, DtSimulationAddress> > myRequestToKeyMap;
129 
131  {
132  UpdateCheckState() : timingBackendRequest(false), elapsedTimeCheck(0.), refCount(0), listener(0),
133  lengthOfTimeForBackendResponse(0.), connections(0), optExt(0), alphaFactor(1.0)
134  {
135  }
136 
137  UpdateCheckState(const UpdateCheckState& orig) : timingBackendRequest(orig.timingBackendRequest), elapsedTimeCheck(orig.elapsedTimeCheck),
138  startPoint(orig.startPoint), endPoint(orig.endPoint), refCount(orig.refCount), listener(orig.listener),
139  lengthOfTimeForBackendResponse(orig.lengthOfTimeForBackendResponse),
140  connections(orig.connections), optExt(orig.optExt), blockedColor(orig.blockedColor), visibleColor(orig.visibleColor),
141  currentBlockedColor(orig.currentBlockedColor), currentVisibleColor(orig.currentVisibleColor), alphaFactor(orig.alphaFactor)
142  {
143  }
144 
145  virtual ~UpdateCheckState()
146  {
147  delete connections;
148  }
149 
153  DtTimedSection timedSection;
156  int refCount;
159 
162  double alphaFactor;
163 
166 
167  DtTimedSection backendRequestTimer;
169  };
170 
171  std::map<makVrv::DtUniqueID, UpdateCheckState> myUpdateCheckState;
173  boost::signalslib::connection mySelectionChangedConnection;
174 
176 
177  struct ColorWait
178  {
179  ColorWait() {};
180  ColorWait(const Color& v, const Color& b) : visibleColor(v), blockedColor(b) {};
181  ColorWait(const ColorWait& orig) : visibleColor(orig.visibleColor), blockedColor(orig.blockedColor) {};
182 
183  Color visibleColor, blockedColor;
184  };
185 
186  std::map<makVrv::DtUniqueID, ColorWait> myWaitForSelectionChange;
187  };
188 }

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)