WSF
WsfEventPipeInterface.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFEVENTPIPEINTERFACE_HPP
13#define WSFEVENTPIPEINTERFACE_HPP
14
15#include <mutex>
16#include <set>
17
19
20#if _WIN32
21#include <windows.h>
22#include <UtUndefineWindows.hpp>
23#else
24#include <sys/file.h>
25#include <unistd.h>
26#endif
27
28#include "DisEntityId.hpp"
29#include "UtCallbackHolder.hpp"
30class UtCovariance;
31#include "UtPack.hpp"
32#include "UtQuaternion.hpp"
33#include "UtScriptClassDefine.hpp"
39class WsfDisEmission;
40class WsfDisInterface;
41#include "WsfDraw.hpp"
42class WsfEM_Antenna;
43#include "WsfEM_Interaction.hpp"
44#include "WsfEventPipeClasses.hpp"
47#include "WsfEventPipeInput.hpp"
50class WsfLocalTrack;
51class WsfMessage;
52class WsfMover;
53class WsfPlatform;
55class WsfPlatformPart;
56class WsfProcessor;
59class WsfSensor;
60class WsfSensorMode;
61class WsfSensorResult;
62#include "WsfStringId.hpp"
63class WsfTrack;
64class WsfTrackId;
65class WsfVisualPart;
66class WsfZone;
68
69namespace wsf
70{
71namespace comm
72{
73class Comm;
74class Result;
75} // namespace comm
76namespace eventpipe
77{
79class PartUpdateEvent;
80} // namespace eventpipe
81} // namespace wsf
82
83#define DETECTION_CHANGE_WORKAROUND_NECESSARY 1
84
85// Similar to event output, but faster, more information, configurable by platform, and more computer-readable.
87{
88public:
89 static WsfEventPipeInterface* Find(const WsfSimulation& aSimulation);
90
92 ~WsfEventPipeInterface() override;
93
94 WsfEventPipeInterface(const WsfEventPipeInterface& aPipeInterface) = delete;
95 WsfEventPipeInterface& operator=(const WsfEventPipeInterface& aPipeInterface) = delete;
96
97 void AddedToSimulation() override;
98
99 int GetEventId(const std::string& aEventName) const;
100
101 const std::string& GetOutputFileName() const;
102
103 // send a message with no dependency on a platform immediately
104 // Interface takes ownership of message.
105 void SendImmediate(double aSimTime, bool aExternal, std::unique_ptr<WsfEventPipe::MsgBase> aMessagePtr);
106 // send a message with a platform dependency when possible
107 // Interface takes ownership of message.
108 void SendDependent(double aSimTime, const WsfPlatform& aPlatform, std::unique_ptr<WsfEventPipe::MsgBase> aMessagePtr);
109
110 void SendPartStatus(double aSimTime, WsfPlatformPart* aPartPtr, int aType);
111
112 void SendModeActive(double aSimTime, WsfSensor* aSensorPtr, WsfSensorMode* aModePtr, bool aActive);
113
114 void SendVisualPartDefinition(double aSimTime, WsfVisualPart* aPartPtr, int aType);
115
116 // Returns an options object representing the union of all options currently enabled for at least one platform
117 // this set of options is useful for determining which observers need to be connected
118 const WsfEventPipeOptions& GetCombinedOptions() const { return mCombinedOptions; }
119 static std::unique_ptr<UtScriptClass> CreateScriptClass(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
120
121 void AddLogger(WsfEventPipeLogger* aLoggerPtr);
122 void RemoveLogger(WsfEventPipeLogger* aLoggerPtr);
123
124 static void Pack(WsfEventPipe::Track_Id& aData, const WsfTrackId& aId);
125 static void Pack(WsfEventPipe::Covariance& aData, const UtCovariance& aCovariance);
126 static void PackTrack(WsfEventPipe::Track& aTrackData, const WsfTrack& aTrack);
127 static void Pack(WsfEventPipe::EM_Interaction_RelativeData& aData, const WsfEM_Interaction::RelativeData& aRelative);
128 static void Pack(WsfEventPipe::EM_Interaction_BeamData& aData, const WsfEM_Interaction::BeamData& aBeam);
129 static void Pack(WsfEventPipe::EM_Interaction& aData, const WsfEM_Interaction& aInteraction);
130
131 void UpdateArticulation(double aSimTime,
132 WsfArticulatedPart* aPartPtr,
133 int aPartType,
134 double aAdditionalAz = 0.0,
135 double aAdditionalEl = 0.0);
136
137 static unsigned int Platform(const WsfPlatform& aPlatform);
138 static unsigned int Platform(size_t aPlatformIndex);
139
140 void Bookmark(double aSimTime, const std::string& aMsgType, const std::string& aMsgText);
141
142
143 WSF_DEPRECATED void Record(double aSimTime, WsfPlatform* aPlatform, const std::string& aKey, double aValue);
144
145 void RecordDouble(const WsfPlatform& aPlatform, const std::string& aKey, double aValue);
146
147 void RecordInt(const WsfPlatform& aPlatform, const std::string& aKey, int aValue);
148
149 void RecordBool(const WsfPlatform& aPlatform, const std::string& aKey, bool aValue);
150
151 void RecordString(const WsfPlatform& aPlatform, const std::string& aKey, const std::string& aValue);
152
159 double HandleScheduledEntityStateRequest(double aTime, size_t aPlatformId);
160
161 void UpdatePartArticulation(double aSimTime, size_t aPlatformId, WsfStringId& aPartNameId);
162
163private:
164 void AdvancedBehaviorTree(double aSimTime, WsfAdvancedBehaviorTree* aTreePtr);
165 void PopulateAdvancedBehaviorTreeNodeList(WsfEventPipe::BehaviorTreeNodeList& aList,
166 WsfAdvancedBehaviorTreeNode* aNodePtr) const;
167 void AdvancedBehaviorTreeState(double aSimTime, WsfAdvancedBehaviorTreeNode* aNodePtr);
168 void PopulateAdvancedBehaviorTreeStateLists(WsfEventPipe::BehaviorTreeNodeExecList& aExecList,
169 WsfEventPipe::BehaviorTreeBlackboardDataList& aBlackboardList,
170 WsfAdvancedBehaviorTreeNode* aNodePtr) const;
171 void StateMachine(double aSimTime, WsfScriptStateMachine* aStateMachinePtr);
172 void PopulateStateList(WsfEventPipe::StateList& aList, WsfScriptStateMachine* aStateMachinePtr);
173 void StateMachineState(double aSimTime,
174 WsfScriptStateMachine* aStateMachinePtr,
175 const int aOldStateIndex,
176 const int aNewStateIndex);
177
178 void OpenOutput();
179
180 void UpdateSubscriptions(const WsfEventPipeOptions& aPreviousOptions);
181
184 void SendEntityState(double aSimTime, WsfPlatform& aPlatform, bool aForce = false);
185
187 void SendAllPlatformAuxData(double aSimTime);
188
190 void SendPlatformAuxData(double aSimTime, const WsfPlatform* aPlatform);
191
195 void AuxDataAccessed(const WsfAuxDataEnabled* aSource);
196
201 void AuxDataDestroyed(const WsfAuxDataEnabled* aDestroyed);
202
206 double MoverUpdateInterval(const WsfMover& aMover) const;
207
208 void DrawUpdate(const std::string& aTarget, const std::string& aLayer, const WsfDraw::DrawEventList& aDrawList);
209
210 void Comment(double aSimTime, WsfPlatform* aPlatformPtr, const std::string& aComment);
211
212 void DisEmissionReceived(WsfDisInterface* aDisInterface, const WsfDisEmission& aEmissionPduPtr);
213
214 void LocalTrackCorrelation(double aSimTime,
215 WsfPlatform* aPlatformPtr,
216 const WsfTrackId& aLocalTrackId,
217 const WsfTrackId& aNonLocalTrackId);
218
219 void LocalTrackDecorrelation(double aSimTime,
220 WsfPlatform* aPlatformPtr,
221 const WsfTrackId& aLocalTrackId,
222 const WsfTrackId& aNonLocalTrackId);
223
224 void LocalTrackDropped(double aSimTime, WsfPlatform* aPlatformPtr, const WsfLocalTrack* aTrackPtr);
225
226 void LocalTrackInitiated(double aSimTime,
227 WsfPlatform* aPlatformPtr,
228 const WsfLocalTrack* aTrackPtr,
229 const WsfTrack* aSourcePtr);
230
231 void LocalTrackUpdated(double aSimTime, WsfPlatform* aPlatformPtr, const WsfLocalTrack* aTrackPtr, const WsfTrack* aSourcePtr);
232
233 void MessageReceived(double aSimTime,
234 wsf::comm::Comm* aXmtrPtr,
235 wsf::comm::Comm* aRcvrPtr,
236 const WsfMessage& aMessage,
237 wsf::comm::Result& aResult);
238
239 void MessageHop(double aSimTime, wsf::comm::Comm* aRcvrPtr, wsf::comm::Comm* aDestPtr, const WsfMessage& aMessage);
240
241 void MessageTransmitted(double aSimTime, wsf::comm::Comm* aXmtrPtr, const WsfMessage& aMessage);
242
243 void MoverChangedOnPlatform(WsfPlatform* aPlatformPtr);
244
245 void MoverUpdated(double aSimTime, WsfMover* aMover);
246
247 void PlatformAdded(double aSimTime, WsfPlatform* aPlatformPtr);
248
249 void PlatformAppearanceChanged(double aSimTime, WsfPlatform* aPlatformPtr, WsfObserver::AppearanceType aAppearanceType);
250
251 void PlatformDeleted(double aSimTime, WsfPlatform* aPlatformPtr);
252
253 void PlatformInitialized(double aSimTime, WsfPlatform* aPlatformPtr);
254
255 void PlatformBroken(double aSimTime, WsfPlatform* aPlatformPtr);
256
257 void PublishAntennaData(WsfEventPipe::BeamDefinition& aBeamDef,
258 WsfEM_Antenna* aAntennaPtr,
259 WsfArticulatedPart* aPartPtr,
260 WsfAntennaPattern* aPatternPtr,
261 double& aFrequency,
262 const double aBeamTilt) const;
263
264 void PublishMode(double aSimTime, WsfSensor* aSensorPtr, WsfSensorMode* aModePtr);
265
266 void RegisterZone(WsfZone* aZonePtr,
267 WsfEventPipe::CircularZoneList& aCircularList,
268 WsfEventPipe::EllipticalZoneList& aEllipticalList,
269 WsfEventPipe::SphericalZoneList& aSphericalList,
270 WsfEventPipe::PolygonalZoneList& aPolygonalList,
271 std::unique_ptr<WsfEventPipe::MsgZoneSet>& aMsgPtr);
272
273 void RouteChanged(WsfMover* aMoverPtr);
274
275 void SensorDetectionAttempt(double aSimTime, WsfSensor* aSensorPtr, WsfPlatform* aTargetPtr, WsfSensorResult& aResult);
276
277 void SensorDetectionChanged(double aSimTime, WsfSensor* aSensorPtr, size_t aTargetIndex, WsfSensorResult& aResult);
278
279 void SensorModeActivated(double aSimTime, WsfSensor* aSensorPtr, WsfSensorMode* aModePtr);
280
281 void SensorModeDeactivated(double aSimTime, WsfSensor* aSensorPtr, WsfSensorMode* aModePtr);
282
283 void SensorTrackDropped(double aSimTime, WsfSensor* aSensorPtr, const WsfTrack* aTrackPtr);
284
285 void SensorTrackInitiated(double aSimTime, WsfSensor* aSensorPtr, const WsfTrack* aTrackPtr);
286
287 void SensorTrackUpdated(double aSimTime, WsfSensor* aSensorPtr, const WsfTrack* aTrackPtr);
288
289 void SensorTurnedOff(double aSimTime, WsfSensor* aSensorPtr);
290
291 void SensorTurnedOn(double aSimTime, WsfSensor* aSensorPtr);
292
293 void SimulationStarting();
294
295 void UpdateFilters();
296
297 void VisualPartTurnedOn(double aSimTime, WsfVisualPart* aPartPtr);
298
299 void VisualPartTurnedOff(double aSimTime, WsfVisualPart* aPartPtr);
300
301 void SendExecData();
302
303 void SendScenarioData();
304
305 static void PackDrawVertex(WsfEventPipe::MsgDrawCommand_Vertex& aMsg, const WsfDraw::VertexObject& aVertex);
306
307 bool RequiresEntityStateUpdate(double aSimTime, unsigned int aPlatIdx, const UtVec3d& aLocV, const UtQuaternion& aOriV) const;
308
309 struct DisBeamAddress
310 {
311 DisBeamAddress(unsigned int aPlatformId, unsigned int aSystemId, unsigned int aBeamNumber)
312 : mPlatformId(aPlatformId)
313 , mSystemId(aSystemId)
314 , mBeamNumber(aBeamNumber)
315 {
316 }
317 bool operator<(const DisBeamAddress& aRHS) const
318 {
319 if (mPlatformId < aRHS.mPlatformId)
320 {
321 return true;
322 }
323 else if (mPlatformId > aRHS.mPlatformId)
324 {
325 return false;
326 }
327 else if (mSystemId < aRHS.mSystemId)
328 {
329 return true;
330 }
331 else if (mSystemId > aRHS.mSystemId)
332 {
333 return false;
334 }
335 else if (mBeamNumber < aRHS.mBeamNumber)
336 {
337 return true;
338 }
339 else
340 {
341 return false;
342 }
343 }
344 unsigned int mPlatformId;
345 unsigned int mSystemId;
346 unsigned int mBeamNumber;
347 };
348
349 void UpdateDisTrackJamSet(const DisBeamAddress& aAddress,
350 const std::set<DisEntityId>& aNewList,
351 std::set<DisEntityId>& aAddSet,
352 std::set<DisEntityId>& aRemSet);
353
354 const WsfEventPipeOptions& GetPlatformDetailLevel(const WsfPlatform& aPlatform);
355
356 void AddZoneSet(double aSimTime, WsfZone* aZonePtr);
357 void SendZoneMsg(bool aGlobal, WsfPlatform* aPlatform, double aSimTime, std::unique_ptr<WsfEventPipe::MsgBase> aMsg);
358 void SendZoneDefMessage(WsfZoneDefinition* aZoneDefPtr, double aSimTime);
359
360 // A reference back to the scenario extension for accessing some lesser used input data.
361 const WsfEventPipeExtension& mExtension;
362
363 UtCallbackHolder mCallbacks;
364
365 UtPackMessageStdStreamO* mStreamPtr;
366 std::unique_ptr<std::ofstream> mFileStreamPtr;
367 UtPackSerializer* mSerializerPtr;
368 UtPackSchema* mSchemaPtr;
369 wsf::eventpipe::FileWriterWorker* mWriteThreadPtr;
370
372
373 const WsfEventPipeInput mInput;
374 wsf::eventpipe::EventIds mEventIds;
376
377 using FilterMap = std::unordered_map<std::string, WsfEventPipeOptions>;
378
379 // A filter to determine if a platform belongs to a detail level
380 struct Filter
381 {
382 WsfEventPipeOptionsCriteria mCritiera;
383 unsigned int mDetailSetting;
384 };
385
386 // A detail level
387 struct DetailSettingData
388 {
389 DetailSettingData()
390 : mActivePlatformCount(0)
391 {
392 }
393 DetailSettingData(const WsfEventPipeOptions& aOptions)
394 : mOptions(aOptions)
395 , mActivePlatformCount(0)
396 {
397 }
398 WsfEventPipeOptions mOptions;
399 // the number of alive platforms which use this detail level
400 int mActivePlatformCount;
401 };
402
403 class ArticulatedPartId
404 {
405 public:
406 ArticulatedPartId(int aOwner, std::string& aName, int aType)
407 : mOwner(aOwner)
408 , mName(aName)
409 , mType(aType)
410 {
411 }
412 virtual ~ArticulatedPartId() = default;
413
414 bool operator<(const ArticulatedPartId& aRHS) const
415 {
416 return (mOwner == aRHS.mOwner) ? (mName == aRHS.mName) ? (mType < aRHS.mType) : (mName < aRHS.mName) :
417 (mOwner < aRHS.mOwner);
418 }
419
420 private:
421 int mOwner;
422 std::string mName;
423 int mType;
424 };
425
426 struct ArticulationData
427 {
428 ArticulationData() = default;
429 ArticulationData(const UtVec3d& aPos, const UtVec3d& aSlew, const UtVec3d& aCue)
430 : mPosition(aPos)
431 , mSlew(aSlew)
432 , mCue(aCue)
433 {
434 }
435 bool operator!=(const ArticulationData& aRHS) const noexcept
436 {
437 return (mPosition != aRHS.mPosition) || (mSlew != aRHS.mSlew) || (mCue != aRHS.mCue);
438 }
439 UtVec3d mPosition;
440 UtVec3d mSlew;
441 UtVec3d mCue;
442 };
443
444 template<typename OBSERVER>
445 void ConnectPartStatusCallback(OBSERVER& aObserver, WsfEventPipe::PartType::Value aType)
446 {
447 mBaseCallbacks +=
448 aObserver(&GetSimulation())
449 .Connect([this, aType](double aSimTime, WsfPlatformPart* aPart) { SendPartStatus(aSimTime, aPart, aType); });
450 }
451
452 std::map<ArticulatedPartId, ArticulationData> mArticulationTracker;
453
454 std::vector<unsigned int> mPlatformIndexToSettingIndex;
455 std::vector<Filter> mFilters;
456 std::vector<DetailSettingData> mDetailSettingsArray;
457 std::vector<WsfEventPipeLogger*> mLoggers;
458 WsfEventPipeOptions mCombinedOptions;
459 std::set<const WsfAuxDataEnabled*> mAuxDataAccessed;
460 std::mutex mAuxDataAccessedMutex;
461
462 UtCallbackHolder mDetectionChangeCallbacks;
463 UtCallbackHolder mLocalTrackEventCallbacks;
464 UtCallbackHolder mLocalTrackUpdatedCallbacks;
465 UtCallbackHolder mEntityStateCallbacks;
466 UtCallbackHolder mBaseCallbacks;
467 UtCallbackHolder mDetectionAttemptCallbacks;
468 UtCallbackHolder mDrawCallbacks;
469 UtCallbackHolder mMessageReceivedCallback;
470 UtCallbackHolder mMessageHopCallback;
471 UtCallbackHolder mMessageTransmittedCallback;
472 UtCallbackHolder mCommentCallback;
473 UtCallbackHolder mBehaviorToolCallbacks;
474 UtCallbackHolder mAuxDataCallbacks;
475 UtCallbackHolder mRouteCallbacks;
476
477 bool mTrackEventsFiltered;
478 bool mTrackUpdatesFiltered;
479 unsigned int mFilteredFlags;
480
481 std::string mOutputFileName;
482
483 using SensorModeIdentifier =
484 std::pair<unsigned int, std::string>; // identify a sensor mode with sensor unique id and mode name
485 std::set<SensorModeIdentifier> mModeSet;
486
487 std::map<unsigned int, wsf::eventpipe::PartUpdateEvent*> mPartUpdateEvents;
488 std::map<size_t, std::vector<std::unique_ptr<WsfEventPipe::MsgBase>>> mCachedMessages; // sometimes platform-related
489 // messages are received prior
490 // to platform initialization,
491 // hang on to them until they
492 // can actually be procesed
493
494#ifdef DETECTION_CHANGE_WORKAROUND_NECESSARY
495 std::map<std::pair<size_t, std::string>, std::map<size_t, int>> mDetectionList;
496#endif
497
498 // This is needed to provide a unique id for messages.
499 class MessageId
500 {
501 public:
502 MessageId(size_t aSerialNumber, std::string aSrcAddr, std::string aDstAddr)
503 : mSerialNumber(aSerialNumber)
504 , mSrcAddr(aSrcAddr)
505 , mDstAddr(aDstAddr)
506 {
507 }
508 bool operator<(const MessageId& aRHS) const;
509
510 private:
511 size_t mSerialNumber;
512 std::string mSrcAddr;
513 std::string mDstAddr;
514 };
515 // maps message serial number to previous hop data
516 std::map<MessageId, std::pair<size_t, std::string>> mMessageHopTracker;
517
518 std::map<std::string, size_t> mExternalNameMap;
519 static std::map<size_t, size_t> mExternalIdLookup;
520
521 std::map<DisBeamAddress, std::set<DisEntityId>> mCurrentTrackJamList;
522
523 class EntityStateData
524 {
525 public:
526 EntityStateData(double aSimTime,
527 const UtVec3d& aPosition,
528 const UtVec3d& aVelocity,
529 const UtVec3d& aAcceleration,
530 const UtQuaternion& aOrientation)
531 : mSimTime(aSimTime)
532 , mPosition(aPosition)
533 , mVelocity(aVelocity)
534 , mAcceleration(aAcceleration)
535 , mQuaternion(aOrientation)
536 {
537 }
538
539 UtVec3d Extrapolate(double aSimTime) const;
540 const UtQuaternion& Orientation() const { return mQuaternion; }
541 double Time() const { return mSimTime; }
542
543 private:
544 double mSimTime{0.0};
545 UtVec3d mPosition;
546 UtVec3d mVelocity;
547 UtVec3d mAcceleration;
548 UtQuaternion mQuaternion;
549 };
550
551 std::map<unsigned int, EntityStateData> mEntityStateData;
552};
553
555class WsfScriptEventPipeClass : public UtScriptClass
556{
557public:
558 WsfScriptEventPipeClass(const std::string& aClassName, UtScriptTypes* aScriptTypesPtr);
559 ~WsfScriptEventPipeClass() override = default;
560
566};
567
568#endif
bool operator!=(int aId, const WsfStringInt &aRhs)
Not equal relational operator for the case of an integer on the LHS and a StringId on the RHS.
Definition WsfStringId.hpp:75
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
Definition WsfAdvancedBehaviorTreeNode.hpp:138
Definition WsfAdvancedBehaviorTree.hpp:54
Definition WsfAntennaPattern.hpp:35
Definition WsfArticulatedPart.hpp:36
Definition WsfAuxDataEnabled.hpp:29
Definition WsfDisEmission.hpp:37
Definition WsfDisInterface.hpp:83
std::vector< DrawEvent > DrawEventList
Definition WsfDraw.hpp:132
Definition WsfEM_Antenna.hpp:49
Definition WsfEM_Interaction.hpp:68
Scenario extension for event pipe. Reads the input file.
Definition WsfEventPipe.hpp:36
Input configuration for the event pipe interface.
Definition WsfEventPipeInput.hpp:21
WsfEventPipeInterface(const WsfEventPipeInterface &aPipeInterface)=delete
void SendImmediate(double aSimTime, bool aExternal, std::unique_ptr< WsfEventPipe::MsgBase > aMessagePtr)
Definition WsfEventPipeInterface.cpp:1320
int GetEventId(const std::string &aEventName) const
Definition WsfEventPipeInterface.cpp:480
WsfEventPipeInterface(WsfEventPipeExtension &aExtension, const WsfEventPipeInput &aInput)
Definition WsfEventPipeInterface.cpp:319
void SendModeActive(double aSimTime, WsfSensor *aSensorPtr, WsfSensorMode *aModePtr, bool aActive)
Definition WsfEventPipeInterface.cpp:1647
static WsfEventPipeInterface * Find(const WsfSimulation &aSimulation)
Definition WsfEventPipeInterface.cpp:369
const WsfEventPipeOptions & GetCombinedOptions() const
Definition WsfEventPipeInterface.hpp:118
void SendVisualPartDefinition(double aSimTime, WsfVisualPart *aPartPtr, int aType)
Definition WsfEventPipeInterface.cpp:1763
void SendDependent(double aSimTime, const WsfPlatform &aPlatform, std::unique_ptr< WsfEventPipe::MsgBase > aMessagePtr)
Definition WsfEventPipeInterface.cpp:1334
WsfEventPipeInterface & operator=(const WsfEventPipeInterface &aPipeInterface)=delete
void SendPartStatus(double aSimTime, WsfPlatformPart *aPartPtr, int aType)
Definition WsfEventPipeInterface.cpp:1733
const std::string & GetOutputFileName() const
Definition WsfEventPipeInterface.cpp:485
Definition WsfEventPipeLogger.hpp:20
Definition WsfEventPipeOptions.hpp:23
Definition WsfLocalTrack.hpp:32
A base class for messages sent among simulation communication objects, processors and sensors.
Definition WsfMessage.hpp:33
Definition WsfMover.hpp:37
Definition WsfPlatformPart.hpp:61
Platforms represent a entity within the simulation.
Definition WsfPlatform.hpp:115
Definition WsfProcessor.hpp:39
UT_DECLARE_SCRIPT_METHOD(AddBookmark_2)
UT_DECLARE_SCRIPT_METHOD(Record_3)
UT_DECLARE_SCRIPT_METHOD(Record_2)
UT_DECLARE_SCRIPT_METHOD(AddBookmark_1)
UT_DECLARE_SCRIPT_METHOD(Record_1)
WsfScriptEventPipeClass(const std::string &aClassName, UtScriptTypes *aScriptTypesPtr)
Definition WsfEventPipeInterface.cpp:3830
~WsfScriptEventPipeClass() override=default
Definition WsfScriptStateMachine.hpp:47
Definition WsfSensorMode.hpp:36
Definition WsfSensorResult.hpp:27
Definition WsfSensor.hpp:92
WsfSimulation & GetSimulation() const
Definition WsfSimulationExtension.hpp:50
WsfSimulationExtension()
Definition WsfSimulationExtension.cpp:23
friend class WsfSimulation
Definition WsfSimulationExtension.hpp:43
virtual void AddedToSimulation()
Definition WsfSimulationExtension.cpp:41
Definition WsfTrackId.hpp:33
An object that represents an 'track' (perception) of something.
Definition WsfTrack.hpp:120
Definition WsfVisualPart.hpp:26
A class for defining a zone.
Definition WsfZoneDefinition.hpp:32
Definition WsfZone.hpp:63
Definition WsfComm.hpp:43
Definition WsfCommResult.hpp:34
Definition WsfEventPipeFileWriteWorker.hpp:29
Definition WsfEventPipePartUpdateEvent.hpp:30
AppearanceType
The type of data being changed in the PlatformAppearanceChanged callback.
Definition WsfPlatformObserver.hpp:31
NumericUnitaryValueT< UtTimeValue, WsfProxy::cTIME_VALUE > Time
Definition WsfPProxyBasicValues.hpp:415
Definition WsfComm.cpp:34
Definition WsfEventPipeEventIds.hpp:18
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Represents a vertex for a drawn item.
Definition WsfDraw.hpp:98
Represents the antenna gain lookup.
Definition WsfEM_Interaction.hpp:130
Definition WsfEM_Interaction.hpp:116
Copyrights Multiple, All Rights Reserved