VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfGuiSimObjectManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2023 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
10 
12 
15 #include <vrvCore/DtUniqueID.h>
17 #include <tbb/spin_rw_mutex.h>
18 
19 #include <unordered_map>
20 #include <unordered_set>
21 #include <boost/signals2.hpp>
22 
23 namespace makVrv
24 {
25  class DtCoordinateSystem;
26 }
27 
28 namespace makVrf
29 {
31 
32  typedef boost::function<int (const DtEntityType&)> DtMaxMarkingTextLengthFunction;
33 
37  {
38  public:
40  class GuiSimObjectManager : public DtSimObjectManagerTemplate<DtGuiSimObject>
41  {
42  public:
44  const SimObjects& simObjects() const
45  {
46  return mySimObjects;
47  }
48 
49  virtual DtSimObjectReference addReference(DtGuiLocalObject&);
50  virtual void removeReference(makVrv::DtUniqueID);
51 
52  virtual void addVantageReference(DtSimObjectReference);
53  virtual void removeVantageReference(DtSimObjectReference);
54 
55  protected:
56  virtual DtStateDataWrapper* createSimObject(DtStateData*) const override;
57  virtual DtStateDataWrapper* createSimObject(const DtUUID& uuid) const override;
58  virtual DtStateDataWrapper* createSimObject(const DtEntityIdentifier& entid) const override;
59 
60  protected:
62  };
63 
64  public:
66  virtual ~DtVrfGuiSimObjectManager() override;
67 
69  static DtVrfGuiSimObjectManager& instance(makVrv::DtDe&);
71 
73  virtual DtSimObjectReference lookup(makVrv::DtUniqueID) const;
74  DtSimObjectReference findStateView(makVrv::DtUniqueID id) const { return lookup(id); };
75 
76  virtual DtSimObjectReference lookup(const DtUUID&) const;
77  DtSimObjectReference findStateView(const DtUUID& id) const { return lookup(id); };
78 
79  const std::map<DtUUID, DtGuiLocalObject*>& localObjects() const
80  {
81  return myLocalObjects;
82  }
83 
86  virtual bool has(const DtUUID&) const;
87  virtual bool has(unsigned long long) const;
88 
92  virtual DtVector locationOf(makVrv::DtUniqueID id);
93 
94  virtual bool stateDataExists(makVrv::DtUniqueID) const;
95  virtual makVrv::DtUniqueID uniqueIdFromUUID(const DtUUID&) const;
96  virtual std::string lookupNameById(makVrv::DtUniqueID) const;
97  virtual std::vector<DtSimObjectReference> lookup(const makVrv::DtSelectionManager::IdSet&) const;
98 
99  virtual makVrv::DtUniqueID elementIdFromUUID(const DtUUID&) const;
100 
101  typedef std::unordered_map<DtUUID, DtSimObjectReference> SimObjectsByUUID;
104  {
105  return mySimObjectsByUUID;
106  }
107 
109  virtual DtUUID objectUUID(makVrv::DtUniqueID) const;
110 
111  virtual void slot_tick();
112 
113  virtual makVrv::DtUniqueID displayIdFromSimId(const makVrv::DtUniqueID& id, makVrv::DtModelSetId modelSet = makVrv::DtModelSetId::Unspecified) const;
115 
117  virtual makVrv::DtUniqueID simIdFromDisplayId(const makVrv::DtUniqueID& id) const;
118 
120  virtual makVrv::DtElementEntry::ElementType elementType(const makVrv::DtElementID&) const;
121 
125  virtual const std::set<makVrv::DtUniqueID>& dIGuyIds();
126  virtual const std::set<makVrv::DtUniqueID>& tacticalGraphicElements() const;
127 
128  virtual const DtString& entityName(makVrv::DtElementID) const;
129  virtual DtVector centerOfMass(const std::set<DtUUID>& uuids, bool ignoreEmbarked = true) const;
130  virtual makVrv::DtUniqueID parentId( const makVrv::DtUniqueID& id ) const;
131  virtual std::string overlayName(const makVrv::DtUniqueID simId) const;
132 
134  virtual bool clearing() const;
135 
138  virtual void signalWhenAllObjectsDiscovered(const std::map<short, int>&);
139 
140  typedef boost::signals2::signal<void (DtSimObjectReference, DtStateComponent::StateComponentType)> StateComponentSignal;
142  {
144  : signal_stateComponentAdded(new StateComponentSignal)
145  , signal_stateComponentRemoved(new StateComponentSignal)
146  {};
147 
149  : signal_stateComponentAdded(orig.signal_stateComponentAdded)
150  , signal_stateComponentRemoved(orig.signal_stateComponentRemoved)
151  , connections(orig.connections)
152  {};
153 
155  {
156  signal_stateComponentAdded = rhs.signal_stateComponentAdded;
157  signal_stateComponentRemoved = rhs.signal_stateComponentRemoved;
158  connections = rhs.connections;
159 
160  return *this;
161  }
162 
163  std::shared_ptr<makVrv::DtSignalConnectionManager> connections;
164  std::shared_ptr<StateComponentSignal> signal_stateComponentAdded;
165  std::shared_ptr<StateComponentSignal> signal_stateComponentRemoved;
166  };
167 
168  virtual void resizeContainer(unsigned);
169 
170  template <typename T_Component>
172  {
173  resizeContainer(T_Component::ComponentType());
174  return *(myStateComponentSignals[T_Component::ComponentType()].signal_stateComponentAdded);
175  }
176 
177  template <typename T_Component>
179  {
180  resizeContainer(T_Component::ComponentType());
181  return *(myStateComponentSignals[T_Component::ComponentType()].signal_stateComponentRemoved);
182  }
183 
184  boost::signals2::signal<void (DtSimObjectReference)> signal_objectAdded;
185  boost::signals2::signal<void (DtSimObjectReference)> signal_objectDeleted;
186  boost::signals2::signal<void (const DtUUID&, const DtUUID&, DtSimObjectReference)> signal_uuidChanged;
187  boost::signals2::signal<void (const DtString&, const DtString&, DtSimObjectReference)> signal_objectRenamed;
188 
191  boost::signals2::signal <void ()> signal_allObjectsDiscovered;
192  boost::signals2::signal <void ()> signal_cleared;
193 
197  virtual int maxMarkingTextLengthFor(const DtEntityType&) const;
198  virtual void setMaxMarkingTextLengthFunction(DtMaxMarkingTextLengthFunction);
199  virtual DtMaxMarkingTextLengthFunction maxMarkingTextLengthFunction() const;
200 
201  virtual int defaultMaxMarkingTextLengthFunction(const DtEntityType&);
202 
204  virtual void uniqueEntityTypes(makVrv::DtUniqueID, std::vector<DtEntityType>& entityTypes);
205 
207  const std::set<makVrv::DtUniqueID>& stealthStates() const
208  {
209  return myStealthStates;
210  }
211 
212  protected:
214 
217  virtual DtGuiLocalObject* createStaticData(const DtEntityType&, const DtUUID& uuid = DtUUID::nullUUID());
218 
221  virtual DtGuiLocalObject* createSharedData(const DtEntityType&, makVrv::DtUniqueID id = 0, const DtUUID& uuid = DtUUID::nullUUID());
222 
223  protected:
224  virtual void slot_objectAdded(DtSimObjectReference);
225  virtual void slot_objectDeleted(DtSimObjectReference);
226  virtual void slot_uuidChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
227  virtual void slot_objectRenamed(DtSimObjectReference ref, const DtString& oldName, const DtString& newName);
228  virtual void slot_stateDataModified(DtSimObjectReference);
229  virtual void uniqueEntityTypes(makVrv::DtUniqueID, std::vector<DtEntityType>& entityTypes, std::set<std::string>& typesChecked);
230  virtual void slot_guiLocalObjectDeleted(DtGuiLocalObject*);
231  virtual void slot_gateUnlocked();
232  virtual void slot_gateLocked();
233  virtual void slot_modelSetLoaded();
234  virtual void completeDeletion(DtSimObjectReference o);
235  virtual void slot_stateComponentAdded(DtStateComponent*);
236  virtual void slot_stateComponentRemoved(DtStateComponent*);
237  virtual void setupComponentModifiedConnections();
238  virtual void slot_onCoordinateSystemChanged(const std::string& coordinateSystem, const std::string& coordinateParameters);
239 
240  protected:
242  friend class DtVrfConnectionHelper;
243  virtual void setStateDataManager(DtStateDataManager*);
244 
245  protected:
246  tbb::spin_rw_mutex myComponentMutex;
247  typedef std::map<DtUUID, std::set<int>> ComponentsAddedRemoved;
248 
251 
252  std::set<makVrv::DtUniqueID> myStealthStates;
253  DtEntityType myStealthType;
255  DtStateDataManager* myStateDataManager = nullptr;
256  GuiSimObjectManager* mySimObjectManager = nullptr;
257  boost::signals2::connection myTickConnection;
259  tbb::spin_mutex myUpdatedMutex;
260  std::map<int, std::set<DtSimObjectReference>> myComponentsUpdated;
261  std::set<DtSimObjectReference> myObjectsUpdated;
262  std::set<DtSimObjectReference> myObjectsDeleted;
263 
264  std::set<makVrv::DtUniqueID> myTacticalGraphicElements;
265  std::set<makVrv::DtUniqueID> myDIGuyIds;
266  std::unordered_set<makVrv::DtUniqueID> myIdsToCheckForDIGuy;
268  std::map<short, int> myWaitingForDiscovery;
269 
270  boost::signals2::scoped_connection myGateLockedConnection;
271  boost::signals2::scoped_connection myGateUnlockedConnection;
272 
274  DtStateDataManager* myGuiStateDataManager = nullptr;
276 
277  std::map<DtUUID, DtGuiLocalObject*> myLocalObjects;
278 
279  typedef std::vector<StateComponent> StateComponentSignals;
281 
283 
284  typedef std::unordered_map<DtUUID, unsigned long long> IdsByUUID;
286 
287  std::map<DtUUID, DtUUID> myUUIDChanged;
288  tbb::spin_rw_mutex myUUIDChangedMutex;
289  tbb::spin_mutex myAdvanceFrameMutex;
290 
291  makVrv::DtCoordinateSystem* myCoordinateSystem = nullptr;
292  bool myClearing = false;
293  };
294 
295  DT_DLL_VRFGUICORE std::vector<DtUUID> convertMarkingTextVectorToUUIDVector(const std::vector<DtString>& v);
296  DT_DLL_VRFGUICORE std::vector<DtUUID> convertMarkingTextVectorToUUIDVector(const std::vector<std::string>& v);
297 
299  DT_DLL_VRFGUICORE std::vector<std::string> convertUUIDVectorToUUIDStringVector(const std::vector<DtUUID>& v);
300 
302  DT_DLL_VRFGUICORE std::vector<std::string> convertUUIDVectorToMarkingTextVector(const std::vector<DtUUID>& v);
303 }
std::set< DtSimObjectReference > myObjectsUpdated
Definition: vrfGuiSimObjectManager.h:261
UUID is a unique ID wrapper class.
Definition: uuid.h:59
makVrv::DtDe & myDe
Definition: vrfGuiSimObjectManager.h:254
std::map< int, std::set< DtSimObjectReference > > myComponentsUpdated
Definition: vrfGuiSimObjectManager.h:260
SimObjectsByUUID SimObjects
Definition: vrfGuiSimObjectManager.h:102
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
DT_DLL_VRFGUICORE std::vector< DtUUID > convertMarkingTextVectorToUUIDVector(const std::vector< DtString > &v)
Helper code for connectors. Does not exist in it&#39;s own project but is included by all projects that u...
Definition: vrfConnectionHelper.h:130
DT_DLL_VRFGUICORE std::vector< std::string > convertUUIDVectorToMarkingTextVector(const std::vector< DtUUID > &v)
Returns a vector of objectName() from UUID.
boost::signals2::signal< void(const DtUUID &, const DtUUID &, DtSimObjectReference)> signal_uuidChanged
Definition: vrfGuiSimObjectManager.h:186
StateComponent(const StateComponent &orig)
Definition: vrfGuiSimObjectManager.h:148
ComponentsAddedRemoved myComponentsRemoved
Definition: vrfGuiSimObjectManager.h:250
Contains makVrv:DtSelectionManager class.
Definition: vrfGuiSimObjectManager.h:141
std::set< makVrv::DtUniqueID > myStealthStates
Definition: vrfGuiSimObjectManager.h:252
std::map< DtUUID, DtGuiLocalObject * > myLocalObjects
Definition: vrfGuiSimObjectManager.h:277
const SimObjectsByUUID & simObjects() const
Definition: vrfGuiSimObjectManager.h:103
StateComponent()
Definition: vrfGuiSimObjectManager.h:143
SimObjectsByUUID mySimObjectsByUUID
Definition: vrfGuiSimObjectManager.h:282
std::unordered_set< makVrv::DtUniqueID > myIdsToCheckForDIGuy
Definition: vrfGuiSimObjectManager.h:266
DtMaxMarkingTextLengthFunction myMaxMarkingTextLengthFunction
Definition: vrfGuiSimObjectManager.h:267
std::map< short, int > myWaitingForDiscovery
Definition: vrfGuiSimObjectManager.h:268
ComponentsAddedRemoved myComponentsAdded
Definition: vrfGuiSimObjectManager.h:249
#define DT_DLL_VRFGUICORE
Contains DLL export macros.
Definition: vrfGuiCore.h:25
DtUniqueID DtElementID
The ElementID is a specific type of unique ID used to represent VR-Vantage uniquely defined elements...
Definition: DtUniqueID.h:23
boost::signals2::connection myTickConnection
Definition: vrfGuiSimObjectManager.h:257
makVrv::DtDe & myDe
Definition: vrfGuiSimObjectManager.h:61
StateComponentSignal & signalWhenStateComponentRemoved()
Definition: vrfGuiSimObjectManager.h:178
makVrv::DtSignalConnectionManager myConnections
Definition: vrfGuiSimObjectManager.h:275
static const DtUUID & nullUUID()
tbb::spin_mutex myUpdatedMutex
Definition: vrfGuiSimObjectManager.h:259
const std::map< DtUUID, DtGuiLocalObject * > & localObjects() const
Definition: vrfGuiSimObjectManager.h:79
Contains makVrv::DtVirtualBaseClass class.
The overall structure of the DtStateData mechanism is: The DtStateData contains a list of double buff...
Definition: stateData.h:398
boost::signals2::signal< void()> signal_cleared
Definition: vrfGuiSimObjectManager.h:192
std::set< makVrv::DtUniqueID > myTacticalGraphicElements
Definition: vrfGuiSimObjectManager.h:264
const SimObjects & simObjects() const
Definition: vrfGuiSimObjectManager.h:44
boost::signals2::signal< void(DtSimObjectReference)> signal_objectAdded
Definition: vrfGuiSimObjectManager.h:184
boost::signals2::signal< void()> signal_allObjectsDiscovered
If set up for it, a signal sent when the object counts map has had all the objects of all kind/domain...
Definition: vrfGuiSimObjectManager.h:191
std::vector< DtUniqueID > SceneObjectIdList
Public Type Definitions.
Definition: DtElementData.h:38
boost::signals2::scoped_connection myGateUnlockedConnection
Definition: vrfGuiSimObjectManager.h:271
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
This class is the central access point for all current-frame state of all objects in the simulation i...
Definition: simObjectManagerTemplate.h:39
DtSimObjectReference findStateView(makVrv::DtUniqueID id) const
Definition: vrfGuiSimObjectManager.h:74
std::set< DtSimObjectReference > myObjectsDeleted
Definition: vrfGuiSimObjectManager.h:262
std::unordered_map< DtUUID, DtSimObjectReference > SimObjectsByUUID
Definition: vrfGuiSimObjectManager.h:101
ElementType
Definition: DtElementEntry.h:26
StateComponent & operator=(const StateComponent &rhs)
Definition: vrfGuiSimObjectManager.h:154
StateComponentSignals myStateComponentSignals
Definition: vrfGuiSimObjectManager.h:280
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
boost::signals2::signal< void(const DtString &, const DtString &, DtSimObjectReference)> signal_objectRenamed
Definition: vrfGuiSimObjectManager.h:187
IdsByUUID myIdsByUUID
Definition: vrfGuiSimObjectManager.h:285
std::map< DtUUID, DtUUID > myUUIDChanged
Definition: vrfGuiSimObjectManager.h:287
Definition: guiLocalObject.h:18
std::map< unsigned long long, DtSimObjectReferenceTemplate< DtGuiSimObject >> SimObjects
Definition: simObjectManagerTemplate.h:93
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
Definition: stateComponent.h:52
const std::set< makVrv::DtUniqueID > & stealthStates() const
Returns all the current stealth states. myEntityId is the site/app id of the stealth.
Definition: vrfGuiSimObjectManager.h:207
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: stateDataWrapper.h:49
std::map< DtUUID, std::set< int > > ComponentsAddedRemoved
Definition: vrfGuiSimObjectManager.h:247
StateComponentSignal & signalWhenStateComponentAdded()
Definition: vrfGuiSimObjectManager.h:171
Base class to provide boost signal/slot management.
The DtVrfGuiSimObjectManager class is a wrapper around the DtStateDataManager created in the network ...
Definition: vrfGuiSimObjectManager.h:36
The DtGuiLocalObjectManager is the interface to be used when creating objects that are not to be publ...
Definition: guiLocalObjectManager.h:393
std::shared_ptr< StateComponentSignal > signal_stateComponentRemoved
Definition: vrfGuiSimObjectManager.h:165
std::set< makVrv::DtUniqueID > myDIGuyIds
Definition: vrfGuiSimObjectManager.h:265
std::vector< StateComponent > StateComponentSignals
Definition: vrfGuiSimObjectManager.h:279
Contains makVrv::DtUniqueID type.
std::shared_ptr< StateComponentSignal > signal_stateComponentAdded
Definition: vrfGuiSimObjectManager.h:164
boost::signals2::signal< void(DtSimObjectReference, DtStateComponent::StateComponentType)> StateComponentSignal
Definition: vrfGuiSimObjectManager.h:140
boost::signals2::signal< void(DtSimObjectReference)> signal_objectDeleted
Definition: vrfGuiSimObjectManager.h:185
boost::function< int(const DtEntityType &)> DtMaxMarkingTextLengthFunction
Definition: vrfGuiSimObjectManager.h:30
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
boost::signals2::scoped_connection myGateLockedConnection
Definition: vrfGuiSimObjectManager.h:270
DtModelSetId
Definition: DtModelSetEnums.h:19
tbb::spin_mutex myAdvanceFrameMutex
Definition: vrfGuiSimObjectManager.h:289
tbb::spin_rw_mutex myUUIDChangedMutex
Definition: vrfGuiSimObjectManager.h:288
std::shared_ptr< makVrv::DtSignalConnectionManager > connections
Definition: vrfGuiSimObjectManager.h:163
std::set< DtUniqueID > IdSet
Definition: DtSelectionManager.h:32
The GuiSimObjectManager will hold instances of DtGuiLocalObject.
Definition: vrfGuiSimObjectManager.h:40
DT_DLL_VRFGUICORE std::vector< std::string > convertUUIDVectorToUUIDStringVector(const std::vector< DtUUID > &v)
Returns a vector of uuidString.
std::unordered_map< DtUUID, unsigned long long > IdsByUUID
Definition: vrfGuiSimObjectManager.h:284
makVrv::DtSignalConnectionManager myConnectionManager
Definition: vrfGuiSimObjectManager.h:258
DtEntityType myStealthType
Definition: vrfGuiSimObjectManager.h:253
DtSimObjectReference findStateView(const DtUUID &id) const
Definition: vrfGuiSimObjectManager.h:77
tbb::spin_rw_mutex myComponentMutex
Definition: vrfGuiSimObjectManager.h:246
This class holds the state data that represents each simulation object in the system.
Definition: stateDataManager.h:73

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)