VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vrfObject.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
11 
20 #include "geometry/extent.h"
22 
23 #include "vrfutil/readerWriter.h"
24 #include "vrfutil/rwString.h"
26 #include "vrfutil/rwUUID.h"
27 #include "vrfutil/rwObjectType.h"
28 #include "vrfutil/rwBoolean.h"
30 #include "vrfutil/rwVector.h"
32 #include "vl/globalObjectDesignator.h"
33 #include <vlpi/entityIdentifier.h>
34 
36 #include <vl/hostStructs.h>
37 #include <vlpi/appearance.h>
38 #include <vlutil/vlList.h>
39 #include <matrix/geodeticCoord.h>
40 
41 #include <boost/smart_ptr/shared_ptr.hpp>
42 
48 class DtStateRepository;
52 class DtVrfObjectMessage;
53 class DtVrfObjectManager;
54 class DtSimManager;
56 class DtSimTaskManager;
57 class DtSimRadio;
63 class DtReflectedEntity;
66 class DtVrfObject;
69 class Coordinate_System;
70 class DtAttachedTerrain;
71 class DtReflectedObject;
72 class DtPhysicalWorld;
73 class DtObjectConsole;
74 class DtSetDataManager;
77 class DtSettingsObject;
84 class DtCriticalSection;
85 
88 typedef void (*DtVrfObjectCallbackFunction)(DtVrfObject* obj, void* userData);
89 
91 
92 class DtVrfObject;
94 
98 {
99 public:
100 
102  : mySimObject(simObject)
103  {
104 
105  }
106 
107  virtual DtVrfObject* object() { return mySimObject; }
108  virtual bool objectValid() { return mySimObject != NULL; }
109  virtual void invalidateObject() { mySimObject = NULL; }
110 
111 protected:
112 
114 };
115 
116 typedef boost::shared_ptr<DtVrfObjectDeletionTracker> DtVrfObjectDeletionHandle;
117 
123 {
124 public:
126  DtRwVrfObjectName(const DtString& name, DtReaderWriterRegistry* const parentRegistry);
127  DtRwVrfObjectName(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry);
128 
130 
131  virtual void setVrfObject(DtVrfObject*);
132 
133  virtual DtlObjPtr getData(DtlObjPtr args, const SearchPaths& searchPaths,
134  const DtVariableBindingsList& variableBindings);
135 
136 protected:
138 };
139 
143 {
144 public:
145  DtVrfObjectUUID(const DtString& name, DtReaderWriterRegistry* const parentRegistry);
146  DtVrfObjectUUID(const DtSymbolString& name, DtReaderWriterRegistry* const parentRegistry);
147 
149 
150  virtual void setVrfObject(DtVrfObject*);
151 
153  virtual void setRecreateUUIDOnLoad(bool);
154 
156  virtual void setResolved(bool);
157 
158  virtual DtlObjPtr getData(DtlObjPtr args, const SearchPaths& searchPaths,
159  const DtVariableBindingsList& variableBindings);
160 
161 protected:
163  virtual void noRwValueSpecified();
164 
165 protected:
169 };
170 
186  , public DtObjectDebugger<DtVrfObject>
187 {
188 public:
189 
193  typedef std::pair<DtVrfObjectCallbackFunction, void*> DtVrfObjectCallbackDataPair;
194  typedef std::pair<DtVrfObject*, DtVrfObjectCallbackDataPair> DtVrfObjectCallbackDataPair2;
196  typedef std::list<DtLuaScriptInterfaceExtension::CreatorUserPair> ScriptInterfaceExtensions;
197 
198 protected:
199 
201  DtVrfObject();
202 
203 public:
204 
205  DtVrfObject(
206  const DtObjectType & objectType,
207  DtVrfObjectManager* vrfObjectManager,
208  bool createLocalObject = true,
209  bool publishLocalObject = true,
210  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
211  const DtGlobalObjectDesignator* globalId = 0,
212  DtReflectedObject* reflectedObject = 0,
213  const DtString & objectName = DtString::nullString(),
214  const DtString & objectLabel = DtString::nullString(),
215  DtForceType forceType = DtForceOther,
216  const DtList* vertices = 0,
217  const DtTaitBryan* orientation = 0,
218  bool projection = false,
219  bool closedFigure = false,
220  const DtAppearance& appearance = DtAppearance::nullAppearance(),
221  const DtString & readerWriterName = "vrf-object",
222  DtReaderWriterRegistry* parentRegistry = 0,
223  const DtUUID& uuid = DtUUID::nullUUID(),
224  bool connectToRadioNetowrk = true);
225 
227  virtual ~DtVrfObject();
228 
231  static void enableSingleObjectMode();
233  static bool singleObjectModeActive();
234 
239  virtual bool create(bool createNetworkInterface = true);
240 
243  virtual bool finalizeObjectCreation();
244 
246  virtual void finalizeObjectRead();
247 
250  virtual void setSimulationCapable(bool);
251  virtual bool simulationCapable() const;
252 
255  virtual void createCommunicationsInterface();
256 
259  virtual void createCommunicationsInterface(const DtRadioDescriptorList& descList);
260 
263  virtual void createSetDataManager();
264 
267  virtual int vrfSessionId() const;
268 
271  virtual bool init();
272 
274 
278  virtual void tick();
279 
280  virtual void startTick();
281  virtual void tickComponents();
282  virtual void endTick();
283 
285  virtual void tickPublisherOnly();
286 
291  virtual bool createRepository(DtVrfObjectParameters* parameterEntry);
292  virtual bool createTaskManager();
293  virtual bool createScriptInterfaceHandler();
294  virtual bool createComponentManager();
297  virtual bool createVrfObjectPlanManager();
298  virtual bool createRadio();
299  virtual bool createNavigationInterfaceManager();
300 
302  virtual int scenarioRunId() const;
303 
305  virtual double timeOfDay() const;
306 
308  virtual double dateAndTimeOfDay() const;
309 
311  virtual DtSharedVrfObjectReference sharedReference();
312  virtual DtSharedVrfObjectReference sharedReference() const;
313 
316  virtual double illumination() const;
317 
319  virtual DtVrfObject* weather() const;
320 
322  virtual MAKVRinTerra::DtFeatureGeometry featureGeometry() const;
323 
325  virtual void updateIllumination();
326 
328  virtual void updateWeather();
329 
331  virtual void setRangeRingsParametersPublisherTickRange(double d);
332 
334  virtual void createAndInitializeRangeRingsParameterPublisher();
335 
338  virtual bool needsIlluminationUpdate();
339 
342  virtual bool isOnTopOf(const DtVrfObject*) const;
343  virtual bool isOnTopOf(const DtVrfObject*, double d) const;
344 
346  virtual bool isSimulationObject() const;
347  virtual bool isEntity() const;
348  virtual bool isUnit() const;
349 
351  virtual bool intersect(const DtChord&, DtVrfChordIntersectionRecord* record = 0) const;
352 
354  virtual bool checkAndDisembarkIfEmbarked(const DtVector& localPosition);
355 
358  virtual bool checkIfMoveOntoEmbarked(const DtVector& localPosition, DtVrfObject*& hit, const std::list<DtUUID>& additionalIgnore = std::list<DtUUID>());
359 
361  virtual bool hasHighFidelityObjectGeometryModel() const;
362 
364  virtual bool hasValidObjectGeometry() const;
365 
369  virtual bool needsWeatherAreaUpdate();
370 
372  virtual bool isGlobalPlan() const;
373 
375  virtual const DtSimManager* simManager() const;
376  virtual DtSimManager* simManager();
377 
379  virtual DtSimTaskManager* taskManager() const;
380  virtual DtScriptInterfaceHandler* scriptInterfaceHandler() const;
381  virtual DtSimComponentManager* componentManager() const;
382  virtual DtVrfObjectPlanManager* vrfObjectPlanManager() const;
383  virtual DtSimRadio* radio() const;
384 
385  virtual DtVrfObjectStateRepository* vrfState() const;
386 
395  virtual DtExtent extent() const;
396 
398  const DtVrfObjectParameters* parameterEntry() const;
399 
404  virtual void expandExtent(DtExtent& extent) const;
405 
409  virtual void sendVrfObjectCreated(unsigned long requestId = 0, bool requestCreated = true);
410 
412  virtual void setupFromMessageContent(DtIfModifyVrfObject* ifModVrfObject);
413 
416  virtual bool isVrfSimulatedObject();
417  virtual void setIsVrfSimulatedObject(bool b);
418 
420  virtual const DtAttachedTerrain& objectGeometryModel() const;
421 
429  virtual bool isSimulatingComponents() const;
430 
432  virtual void save(std::string&);
433 
435  virtual void putSelf(std::string& fp, int indentLevel = 0, bool writeUnspecified = true,
436  const DtFilename& path = DtReaderWriter::appPath());
437 
439  virtual void getSelf(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
440  const DtVariableBindingsList& variableBindings);
441 
442  virtual bool validNameLength(const DtString& name) const;
443 
451  virtual bool setMarkingText(const DtString & name, bool rename = true);
452 
466  virtual void addVrfObjectChangedCallback(
467  DtVrfObjectCallbackFunction function, void* userData);
468  virtual void removeVrfObjectChangedCallback(
469  DtVrfObjectCallbackFunction function, void* userData);
470 
477  virtual void addVerticesChangedCallback(
478  DtVrfObjectCallbackFunction function, void* userData);
479  virtual void removeVerticesChangedCallback(
480  DtVrfObjectCallbackFunction function, void* userData);
482 
488  virtual void addRelativeVerticesChangedCallback(
489  DtVrfObjectCallbackFunction function, void* userData);
490  virtual void removeRelativeVerticesChangedCallback(
491  DtVrfObjectCallbackFunction function, void* userData);
493 
496  virtual void addVrfObjectPredicateCallback(
498  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
499  void* userData = 0);
500  virtual void removeVrfObjectPredicateCallback(
502  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
503  void* userData = 0);
504 
507  virtual int predicateCallbackCount() const;
508 
513  virtual void invokeVrfObjectPredicateCallbacks();
514 
517  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
518 
519  virtual const DtVrfObjectManager* simObjectManager() const;
520  virtual DtVrfObjectManager* simObjectManager();
521  virtual void setSimObjectManager(DtVrfObjectManager* simObjectManager);
522 
523  virtual bool createNetInterface();
524 
529  virtual void setGlobalId(const DtGlobalObjectDesignator & id);
530  virtual const DtGlobalObjectDesignator & globalId() const;
531 
534  virtual const DtString & globalIdString() const;
535 
540  virtual bool baseSetMarkingText(const DtString & name);
541  virtual const DtString& markingText() const;
542 
547  virtual const DtString& objectName() const;
548 
551  virtual void addNameAlias(const DtString& name);
552 
555  virtual void unregisterAliases();
556 
558  virtual void setUUID(const DtUUID&);
559 
561  virtual const DtUUID& uuid() const;
562 
564  virtual const DtString & objectLabel() const;
565  virtual void setObjectLabel(const DtString & objectLabel);
566 
568  virtual const DtString & overlayParent() const;
569  virtual void setOverlayParent(const DtString & overlayParent);
570 
572  virtual DtStateRepository* netState();
573  virtual const DtStateRepository* netState() const;
574 
576  virtual DtSimObjectNetInterface* netInterface();
577  virtual const DtSimObjectNetInterface* netInterface() const;
578  virtual void setNetInterface(DtSimObjectNetInterface* netInterface);
579 
581  virtual void setObjectIdentifier(const DtEntityIdentifier & objectId);
582  virtual const DtEntityIdentifier & objectIdentifier() const;
583 
586  virtual const DtString & objectIdentifierString() const;
587 
590  virtual bool isLocal() const;
591 
595 
596  virtual void setPublishObject(bool publishObject);
597  virtual bool publishObject() const;
599 
601  virtual DtString type() const;
602 
603  virtual DtString objectClassType() const;
604  virtual void setObjectClassType(const DtString & objectClassType);
605 
608  virtual void clearVerticesChangedCallbacks();
609 
612  virtual void clearRelativeVerticesChangedCallbacks();
613 
616  virtual void clearPredicateCallbacks();
617 
618  static void addSimObjectCreatorFcn(const DtString & type,
620 
621  static void objectAboutToBeRemoved(DtVrfObject * msg, void * usr);
622  virtual void processObjectAboutToBeRemoved(DtVrfObject*);
623 
628  static DtSimObjectFactory* factory();
629  static void setFactory(DtSimObjectFactory* factory);
630 
631  virtual DtSimObjectStateRepository* simState();
632  virtual const DtSimObjectStateRepository* simState() const;
633  virtual void setSimState(DtVrfObjectStateRepository* simState);
634 
635  void setEntityType(const DtEntityType & entityType);
636  const DtEntityType & entityType() const;
637 
638  void setDestroyed(bool destroyed);
639  bool isDestroyed() const;
640 
652  virtual void place(const DtVector& location, bool* dataAvailable = 0,
653  bool requireAllData = false);
654 
666  virtual void place(const DtReal heading, bool* dataAvailable = 0,
667  bool requireAllData = false);
668 
681  virtual void place(const DtVector& location, const DtReal heading,
682  bool* dataAvailable = 0, bool requireAllData = false);
683 
684  const DtString & echelonIdString() const;
685 
686  virtual DtSharedVrfObjectReference leadEntity() const;
687 
688  virtual DtSharedVrfObjectReference firstSubordinate() const;
689 
690  virtual DtSharedVrfObjectReference lastSubordinate() const;
691 
693  virtual DtSharedVrfObjectReference firstHealthySubordinate() const;
694 
695  virtual void echelonIdChanged() {}
696 
697  virtual const DtObjectId & objectId() const;
698  virtual const DtObjectType& objectType() const;
699 
701  virtual bool isEmbarked() const;
702 
705  virtual DtVector locationRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
706 
709  virtual DtVector velocityRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
710 
713  virtual DtVector accelerationRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
714 
717  virtual DtTaitBryan orientationRelativeTo(const DtTaitBryan&, DtVrfObject* relativeTo) const;
718 
720  virtual DtVrfObject* embarkedOn() const;
721 
724  virtual bool isEmbarkedOn(const DtUUID& parent) const;
725 
726  DtAttachedTerrain* terrainAttachedTo();
727  const DtAttachedTerrain* terrainAttachedTo() const;
728 
729  virtual const DtPhysicalWorld* physicalWorld() const;
730  virtual DtPhysicalWorld* physicalWorld();
731 
733  void setAboutToBeRemoved(bool);
734  bool aboutToBeRemoved() const;
735 
738  virtual DtOutputStream& objectConsoleDebug(const DtString& channel = "") const;
739  virtual DtOutputStream& objectConsoleVerbose(const DtString& channel = "") const;
740  virtual DtOutputStream& objectConsoleInfo(const DtString& channel = "") const;
741  virtual DtOutputStream& objectConsoleWarn(const DtString& channel = "") const;
742  virtual DtOutputStream& objectConsoleError(const DtString& channel = "") const;
744 
747  virtual DtObjectConsole* objectConsole();
748  virtual const DtObjectConsole* objectConsole() const;
750 
755  virtual DtSetDataManager* setDataManager();
756  virtual const DtSetDataManager* setDataManager() const;
757 
762  virtual DtVrfObjectCommunicationInterface* communicationInterface();
763 
767  virtual DtVrfObjectNavInterface* navInterface();
768 
772  virtual DtVrfObjectTerrainPreloadManager* terrainPreloadManager();
773 
776  DtVrfObjectSubComponentTypes* vrfSubComponentTypes() const;
777 
780  virtual void duplicateVrfSubComponentTypes();
781 
783  virtual void restoreDuplicatedVrfSubComponentTypes();
784 
787  virtual bool hasPlan() const;
788 
790  virtual bool executingPlan() const;
791 
793  virtual bool isCurrentlyTasked() const;
794 
796  virtual bool isEllipsoid() const;
797 
803  virtual void addPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn,
804  void* usr);
805  virtual void removePostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn,
806  void* usr);
808 
813  virtual DtU8 getNextEmitterSystemId();
814 
816  static void setDefaultNotifyLevel(DtNotifyLevelType level);
818  static DtNotifyLevelType defaultNotifyLevel();
819 
823  virtual void addScriptExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
825  virtual void removeScriptExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
827  virtual const ScriptInterfaceExtensions& scriptExtensions() const;
828 
831  virtual void regenerateUUIDForImport();
832 
833 public:
834 
837  static DtVrfObject* creator(
838  const DtObjectType& objectType,
839  DtVrfObjectManager* simObjectManager,
840  bool createLocalObject = true,
841  bool publishLocalObject = true,
842  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
843  const DtGlobalObjectDesignator* globalId = 0,
844  DtReflectedObject* reflectedObject = 0,
845  const DtString & objectName = DtString::nullString(),
846  const DtString & objectLabel = DtString::nullString(),
847  DtForceType forceType = DtForceOther,
848  const DtList* vertices = 0,
849  const DtTaitBryan* orientation = 0,
850  bool projection = false,
851  bool closedFigure = false,
852  const DtAppearance& appearance = DtAppearance::nullAppearance(),
853  const DtString & readerWriterName = DtString::nullString(),
854  DtReaderWriterRegistry* parentRegistry = 0,
855  const DtUUID& uuid = DtUUID::nullUUID(),
856  bool connectToRadioNetowrk = true);
857 
859  static DtVrfObject* createObject(
860  const DtObjectType& objectType,
861  DtVrfObjectManager* vrfObjectManager,
862  const DtString & classType,
863  bool createLocalObject = true,
864  bool publishLocalObject = true,
865  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
866  const DtGlobalObjectDesignator* globalId = 0,
867  DtReflectedObject* reflectedObject = 0,
868  const DtString & objectName = DtString::nullString(),
869  const DtString & objectLabel = DtString::nullString(),
870  DtForceType forceType = DtForceOther,
871  const DtList* vertices = 0,
872  const DtTaitBryan* orientation = 0,
873  bool projection = false,
874  bool closedFigure = false,
875  const DtAppearance& appearance = DtAppearance::nullAppearance(),
876  const DtString & readerWriterName = DtString::nullString(),
877  DtReaderWriterRegistry* parentRegistry = 0,
878  const DtUUID& initialUUID = DtUUID::nullUUID(),
879  bool connectToRadioNetowrk = true);
880 
882  static DtVrfObject* createObject(
883  const DtObjectType & objectType,
884  DtVrfObjectManager* vrfObjectManager,
885  const DtString & classType,
886  bool createLocalObject = true,
887  bool publishLocalObject = true,
888  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
889  const DtGlobalObjectDesignator* globalId = 0,
890  DtReflectedObject* reflectedObject = 0,
891  const DtString & objectName = DtString::nullString(),
892  const DtString & objectLabel = DtString::nullString(),
893  DtForceType forceType = DtForceOther,
894  const DtVector& location = DtVector::zero(),
895  const DtTaitBryan* orientation = 0,
896  bool projection = false,
897  bool closedFigure = false,
898  const DtAppearance& appearance = DtAppearance::nullAppearance(),
899  const DtString & readerWriterName = DtString::nullString(),
900  DtReaderWriterRegistry* parentRegistry = 0,
901  const DtUUID& uuid = DtUUID::nullUUID(),
902  bool connectToRadioNetowrk = true);
903 
905  static DtVrfObject* createAndInit(
906  DtVrfObjectManager* vrfObjectManager, DtlObjPtr mtlStream);
907 
911  static DtVrfObject* createAndInitForSimulationObjectGroup(
912  DtVrfObjectManager* vrfObjectManager, DtlObjPtr mtlStream, int flags, int force, const DtVector& geocentricOffsetLocation,
913  double offsetRotation = 0.);
914 
918  static void verticesChangedCallback(DtVrfObject* obj,
919  DtVrfObjectPredicateEvaluator* predicateEval, void* userData);
920 
922  static void relativeVerticesChangedCallback(DtVrfObject* obj,
923  DtVrfObjectPredicateEvaluator* predicateEval, void* userData);
924 
928  static void postInitFromParamsCallback(DtVrfObjectStateRepository& stateRepository, void* usr);
929 
932 
933  static void readDRThresholdSettingsCallback(
934  const DtSettingsObject* settings, void* usr);
935  virtual void processReadDRThresholdSettings(const DtSettingsObject* settings);
937 
939  virtual void addedToObjectManager();
940 
942 
943  virtual void addObjectAboutToBeRemovedCallback(
945  virtual void removeObjectAboutToBeRemovedCallback(
947  virtual void invokeVrfObjectAboutToBeRemovedCallbacks();
949 
952 
953  virtual void addNewSensorContactCallback(
955  virtual void removeNewSensorContactCallback(
957  virtual void invokeNewSensorContactCallbacks();
959 
961 
962  virtual void addSetLocationCompleteCallback(
964  virtual void removeSetLocationCompleteCallback(
966  virtual void invokeSetLocationCompleteCallbacks();
968 
970  virtual DtVrfUnderwaterAcoustics* underwaterAcoustics();
971 
972  virtual DtVrfObjectDeletionHandle objectDeletionHandle();
973 
974 protected:
975 
977  DtVrfObject(const DtVrfObject& orig);
978 
980  DtVrfObject& operator=(const DtVrfObject& orig);
981 
983  virtual bool initializeNetInterface();
984 
986  virtual void setupStateRepository();
987 
989  virtual void setupNetInterface();
990 
992  void emptyVertexList();
993 
995  void copyVertexList(const DtList& orig);
996 
999  virtual void validateObjectType();
1000 
1002  virtual void processPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn, void* usr);
1003 
1006  virtual void initializeCommunicationInterfaceCallbacks();
1007  static void setOverlayLayerTaskCallback(const DtVrfObjectMessage* msg, void* usr);
1008  virtual void processSetOverlayLayerTask(const DtVrfObjectMessage* msg);
1009 
1012  virtual void updateBoundingVolumeBasedOnPosture();
1013 
1015  virtual DtExtent computeExtent() const;
1016 
1018  virtual void initializeObjectGeometryModel();
1019 
1020 protected:
1021  mutable DtExtent myExtent;
1022  mutable bool myExtentInvalid;
1023 
1025 
1027 
1030 
1033 
1037 
1040 
1042 
1044 
1046 
1048 
1053 
1057 
1061  DtForceType myForceType;
1062  DtList myVertices;
1063  DtTaitBryan myOrientation;
1066  DtAppearance myAppearance;
1067 
1070 
1072 
1078 
1088 
1095 
1099 
1103 
1107 
1109 
1112 
1114 
1116 
1118 
1120 
1122 
1124 
1126 
1131 
1133 
1138 
1143 
1146 
1148  std::set<DtString> myNameAliasList;
1150  mutable bool myWarnedObjectName;
1153 
1157 
1160 };
1161 
1163 {
1164  myAboutToBeRemoved = b;
1165 }
1166 
1168 {
1169  return myAboutToBeRemoved;
1170 }
1171 

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)