VR-Forces Development_Version 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 
233  virtual bool create(bool createNetworkInterface = true);
234 
237  virtual bool finalizeObjectCreation();
238 
241  virtual void setSimulationCapable(bool);
242  virtual bool simulationCapable() const;
243 
246  virtual void createCommunicationsInterface();
247 
250  virtual void createCommunicationsInterface(const DtRadioDescriptorList& descList);
251 
254  virtual void createSetDataManager();
255 
258  virtual int vrfSessionId() const;
259 
262  virtual bool init();
263 
265 
269  virtual void tick();
270 
271  virtual void startTick();
272  virtual void tickComponents();
273  virtual void endTick();
274 
279  virtual bool createRepository(DtVrfObjectParameters* parameterEntry);
280  virtual bool createTaskManager();
281  virtual bool createScriptInterfaceHandler();
282  virtual bool createComponentManager();
285  virtual bool createVrfObjectPlanManager();
286  virtual bool createRadio();
287  virtual bool createNavigationInterfaceManager();
288 
290  virtual DtSharedVrfObjectReference sharedReference();
291  virtual DtSharedVrfObjectReference sharedReference() const;
292 
295  virtual double illumination() const;
296 
298  virtual DtVrfObject* weather() const;
299 
301  virtual MAKVRinTerra::DtFeatureGeometry featureGeometry() const;
302 
304  virtual void updateIllumination();
305 
307  virtual void updateWeather();
308 
310  virtual void setRangeRingsParametersPublisherTickRange(double d);
311 
313  virtual void createAndInitializeRangeRingsParameterPublisher();
314 
317  virtual bool needsIlluminationUpdate();
318 
321  virtual bool isOnTopOf(const DtVrfObject*) const;
322  virtual bool isOnTopOf(const DtVrfObject*, double d) const;
323 
325  virtual bool intersect(const DtChord&, DtChordIntersectionRecord* record = 0) const;
326 
328  virtual bool hasHighFidelityObjectGeometryModel() const;
329 
331  virtual bool hasValidObjectGeometry() const;
332 
336  virtual bool needsWeatherAreaUpdate();
337 
339  virtual bool isGlobalPlan() const;
340 
342  virtual const DtSimManager* simManager() const;
343  virtual DtSimManager* simManager();
344 
346  virtual DtSimTaskManager* taskManager() const;
347  virtual DtScriptInterfaceHandler* scriptInterfaceHandler() const;
348  virtual DtSimComponentManager* componentManager() const;
349  virtual DtVrfObjectPlanManager* vrfObjectPlanManager() const;
350  virtual DtSimRadio* radio() const;
351 
352  virtual DtVrfObjectStateRepository* vrfState() const;
353 
362  virtual DtExtent extent() const;
363 
365  const DtVrfObjectParameters* parameterEntry() const;
366 
371  virtual void expandExtent(DtExtent& extent) const;
372 
376  virtual void sendVrfObjectCreated(unsigned long requestId = 0, bool requestCreated = true);
377 
379  virtual void setupFromMessageContent(DtIfModifyVrfObject* ifModVrfObject);
380 
383  virtual bool isVrfSimulatedObject();
384  virtual void setIsVrfSimulatedObject(bool b);
385 
387  virtual const DtAttachedTerrain& objectGeometryModel() const;
388 
396  virtual bool isSimulatingComponents() const;
397 
399  virtual void putSelf(FILE* fp, int indentLevel = 0, bool writeUnspecified = true,
400  const DtFilename& path = DtReaderWriter::appPath());
401 
403  virtual void getSelf(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
404  const DtVariableBindingsList& variableBindings);
405 
406  virtual bool validNameLength(const DtString& name) const;
407 
415  virtual bool setMarkingText(const DtString & name, bool rename = true);
416 
430  virtual void addVrfObjectChangedCallback(
431  DtVrfObjectCallbackFunction function, void* userData);
432  virtual void removeVrfObjectChangedCallback(
433  DtVrfObjectCallbackFunction function, void* userData);
434 
441  virtual void addVerticesChangedCallback(
442  DtVrfObjectCallbackFunction function, void* userData);
443  virtual void removeVerticesChangedCallback(
444  DtVrfObjectCallbackFunction function, void* userData);
446 
452  virtual void addRelativeVerticesChangedCallback(
453  DtVrfObjectCallbackFunction function, void* userData);
454  virtual void removeRelativeVerticesChangedCallback(
455  DtVrfObjectCallbackFunction function, void* userData);
457 
460  virtual void addVrfObjectPredicateCallback(
462  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
463  void* userData = 0);
464  virtual void removeVrfObjectPredicateCallback(
466  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
467  void* userData = 0);
468 
471  virtual int predicateCallbackCount() const;
472 
477  virtual void invokeVrfObjectPredicateCallbacks();
478 
481  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
482 
483  virtual const DtVrfObjectManager* simObjectManager() const;
484  virtual DtVrfObjectManager* simObjectManager();
485  virtual void setSimObjectManager(DtVrfObjectManager* simObjectManager);
486 
487  virtual bool createNetInterface();
488 
493  virtual void setGlobalId(const DtGlobalObjectDesignator & id);
494  virtual const DtGlobalObjectDesignator & globalId() const;
495 
500  virtual bool baseSetMarkingText(const DtString & name);
501  virtual const DtString& markingText() const;
502 
507  virtual const DtString& objectName() const;
508 
511  virtual void addNameAlias(const DtString& name);
512 
515  virtual void unregisterAliases();
516 
518  virtual void setUUID(const DtUUID&);
519 
521  virtual const DtUUID& uuid() const;
522 
524  virtual const DtString & objectLabel() const;
525  virtual void setObjectLabel(const DtString & objectLabel);
526 
528  virtual const DtString & overlayParent() const;
529  virtual void setOverlayParent(const DtString & overlayParent);
530 
532  virtual DtStateRepository* netState();
533  virtual const DtStateRepository* netState() const;
534 
536  virtual DtSimObjectNetInterface* netInterface();
537  virtual const DtSimObjectNetInterface* netInterface() const;
538  virtual void setNetInterface(DtSimObjectNetInterface* netInterface);
539 
541  virtual void setObjectIdentifier(const DtEntityIdentifier & objectId);
542  virtual const DtEntityIdentifier & objectIdentifier() const;
543 
546  virtual bool isLocal() const;
547 
551 
552  virtual void setPublishObject(bool publishObject);
553  virtual bool publishObject() const;
555 
557  virtual DtString type() const;
558 
559  virtual DtString objectClassType() const;
560  virtual void setObjectClassType(const DtString & objectClassType);
561 
564  virtual void clearVerticesChangedCallbacks();
565 
568  virtual void clearRelativeVerticesChangedCallbacks();
569 
572  virtual void clearPredicateCallbacks();
573 
574  static void addSimObjectCreatorFcn(const DtString & type,
576 
577  static void objectAboutToBeRemoved(DtVrfObject * msg, void * usr);
578  virtual void processObjectAboutToBeRemoved(DtVrfObject*);
579 
584  static DtSimObjectFactory* factory();
585  static void setFactory(DtSimObjectFactory* factory);
586 
587  virtual DtSimObjectStateRepository* simState();
588  virtual const DtSimObjectStateRepository* simState() const;
589  virtual void setSimState(DtVrfObjectStateRepository* simState);
590 
591  void setEntityType(const DtEntityType & entityType);
592  const DtEntityType & entityType() const;
593 
594  void setDestroyed(bool destroyed);
595  bool isDestroyed() const;
596 
608  virtual void place(const DtVector& location, bool* dataAvailable = 0,
609  bool requireAllData = false);
610 
622  virtual void place(const DtReal heading, bool* dataAvailable = 0,
623  bool requireAllData = false);
624 
637  virtual void place(const DtVector& location, const DtReal heading,
638  bool* dataAvailable = 0, bool requireAllData = false);
639 
640  const DtString & echelonIdString() const;
641 
642  virtual DtSharedVrfObjectReference leadEntity() const;
643 
644  virtual DtSharedVrfObjectReference firstSubordinate() const;
645 
646  virtual DtSharedVrfObjectReference lastSubordinate() const;
647 
649  virtual DtSharedVrfObjectReference firstHealthySubordinate() const;
650 
651  virtual void echelonIdChanged() {}
652 
653  virtual const DtObjectId & objectId() const;
654  virtual const DtObjectType& objectType() const;
655 
657  virtual bool isEmbarked() const;
658 
661  virtual DtVector locationRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
662 
665  virtual DtVector velocityRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
666 
669  virtual DtVector accelerationRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
670 
673  virtual DtTaitBryan orientationRelativeTo(const DtTaitBryan&, DtVrfObject* relativeTo) const;
674 
676  virtual DtVrfObject* embarkedOn() const;
677 
680  virtual bool isEmbarkedOn(const DtUUID& parent) const;
681 
682  DtAttachedTerrain* terrainAttachedTo();
683  const DtAttachedTerrain* terrainAttachedTo() const;
684 
685  virtual const DtPhysicalWorld* physicalWorld() const;
686  virtual DtPhysicalWorld* physicalWorld();
687 
689  void setAboutToBeRemoved(bool);
690  bool aboutToBeRemoved() const;
691 
694  virtual DtOutputStream& objectConsoleDebug(const DtString& channel = "") const;
695  virtual DtOutputStream& objectConsoleVerbose(const DtString& channel = "") const;
696  virtual DtOutputStream& objectConsoleInfo(const DtString& channel = "") const;
697  virtual DtOutputStream& objectConsoleWarn(const DtString& channel = "") const;
698  virtual DtOutputStream& objectConsoleError(const DtString& channel = "") const;
700 
703  virtual DtObjectConsole* objectConsole();
704  virtual const DtObjectConsole* objectConsole() const;
706 
711  virtual DtSetDataManager* setDataManager();
712  virtual const DtSetDataManager* setDataManager() const;
713 
718  virtual DtVrfObjectCommunicationInterface* communicationInterface();
719 
723  virtual DtVrfObjectNavInterface* navInterface();
724 
728  virtual DtVrfObjectTerrainPreloadManager* terrainPreloadManager();
729 
732  DtVrfObjectSubComponentTypes* vrfSubComponentTypes() const;
733 
736  virtual bool hasPlan() const;
737 
739  virtual bool executingPlan() const;
740 
742  virtual bool isCurrentlyTasked() const;
743 
749  virtual void addPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn,
750  void* usr);
751  virtual void removePostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn,
752  void* usr);
754 
759  virtual DtU8 getNextEmitterSystemId();
760 
762  static void setDefaultNotifyLevel(DtNotifyLevelType level);
764  static DtNotifyLevelType defaultNotifyLevel();
765 
769  virtual void addScriptExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
771  virtual void removeScriptExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
773  virtual const ScriptInterfaceExtensions& scriptExtensions() const;
774 
777  virtual void regenerateUUIDForImport();
778 
779 public:
780 
783  static DtVrfObject* creator(
784  const DtObjectType& objectType,
785  DtVrfObjectManager* simObjectManager,
786  bool createLocalObject = true,
787  bool publishLocalObject = true,
788  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
789  const DtGlobalObjectDesignator* globalId = 0,
790  DtReflectedObject* reflectedObject = 0,
791  const DtString & objectName = DtString::nullString(),
792  const DtString & objectLabel = DtString::nullString(),
793  DtForceType forceType = DtForceOther,
794  const DtList* vertices = 0,
795  const DtTaitBryan* orientation = 0,
796  bool projection = false,
797  bool closedFigure = false,
798  const DtAppearance& appearance = DtAppearance::nullAppearance(),
799  const DtString & readerWriterName = DtString::nullString(),
800  DtReaderWriterRegistry* parentRegistry = 0,
801  const DtUUID& uuid = DtUUID::nullUUID(),
802  bool connectToRadioNetowrk = true);
803 
805  static DtVrfObject* createObject(
806  const DtObjectType& objectType,
807  DtVrfObjectManager* vrfObjectManager,
808  const DtString & classType,
809  bool createLocalObject = true,
810  bool publishLocalObject = true,
811  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
812  const DtGlobalObjectDesignator* globalId = 0,
813  DtReflectedObject* reflectedObject = 0,
814  const DtString & objectName = DtString::nullString(),
815  const DtString & objectLabel = DtString::nullString(),
816  DtForceType forceType = DtForceOther,
817  const DtList* vertices = 0,
818  const DtTaitBryan* orientation = 0,
819  bool projection = false,
820  bool closedFigure = false,
821  const DtAppearance& appearance = DtAppearance::nullAppearance(),
822  const DtString & readerWriterName = DtString::nullString(),
823  DtReaderWriterRegistry* parentRegistry = 0,
824  const DtUUID& initialUUID = DtUUID::nullUUID(),
825  bool connectToRadioNetowrk = true);
826 
828  static DtVrfObject* createObject(
829  const DtObjectType & objectType,
830  DtVrfObjectManager* vrfObjectManager,
831  const DtString & classType,
832  bool createLocalObject = true,
833  bool publishLocalObject = true,
834  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
835  const DtGlobalObjectDesignator* globalId = 0,
836  DtReflectedObject* reflectedObject = 0,
837  const DtString & objectName = DtString::nullString(),
838  const DtString & objectLabel = DtString::nullString(),
839  DtForceType forceType = DtForceOther,
840  const DtVector& location = DtVector::zero(),
841  const DtTaitBryan* orientation = 0,
842  bool projection = false,
843  bool closedFigure = false,
844  const DtAppearance& appearance = DtAppearance::nullAppearance(),
845  const DtString & readerWriterName = DtString::nullString(),
846  DtReaderWriterRegistry* parentRegistry = 0,
847  const DtUUID& uuid = DtUUID::nullUUID(),
848  bool connectToRadioNetowrk = true);
849 
851  static DtVrfObject* createAndInit(
852  DtVrfObjectManager* vrfObjectManager, DtlObjPtr mtlStream);
853 
857  static DtVrfObject* createAndInitForSimulationObjectGroup(
858  DtVrfObjectManager* vrfObjectManager, DtlObjPtr mtlStream, int flags, int force, const DtVector& geocentricOffsetLocation,
859  double offsetRotation = 0.);
860 
864  static void verticesChangedCallback(DtVrfObject* obj,
865  DtVrfObjectPredicateEvaluator* predicateEval, void* userData);
866 
868  static void relativeVerticesChangedCallback(DtVrfObject* obj,
869  DtVrfObjectPredicateEvaluator* predicateEval, void* userData);
870 
874  static void postInitFromParamsCallback(DtVrfObjectStateRepository& stateRepository, void* usr);
875 
878 
879  static void readDRThresholdSettingsCallback(
880  const DtSettingsObject* settings, void* usr);
881  virtual void processReadDRThresholdSettings(const DtSettingsObject* settings);
883 
885  virtual void addedToObjectManager();
886 
888 
889  virtual void addObjectAboutToBeRemovedCallback(
891  virtual void removeObjectAboutToBeRemovedCallback(
893  virtual void invokeVrfObjectAboutToBeRemovedCallbacks();
895 
898 
899  virtual void addNewSensorContactCallback(
901  virtual void removeNewSensorContactCallback(
903  virtual void invokeNewSensorContactCallbacks();
905 
907 
908  virtual void addSetLocationCompleteCallback(
910  virtual void removeSetLocationCompleteCallback(
912  virtual void invokeSetLocationCompleteCallbacks();
914 
916  virtual DtVrfUnderwaterAcoustics* underwaterAcoustics();
917 
918  virtual DtVrfObjectDeletionHandle objectDeletionHandle();
919 
920 protected:
921 
923  DtVrfObject(const DtVrfObject& orig);
924 
926  DtVrfObject& operator=(const DtVrfObject& orig);
927 
929  virtual bool initializeNetInterface();
930 
932  virtual void setupStateRepository();
933 
935  virtual void setupNetInterface();
936 
938  void emptyVertexList();
939 
941  void copyVertexList(const DtList& orig);
942 
945  virtual void validateObjectType();
946 
948  virtual void processPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn, void* usr);
949 
952  virtual void initializeCommunicationInterfaceCallbacks();
953  static void setOverlayLayerTaskCallback(const DtVrfObjectMessage* msg, void* usr);
954  virtual void processSetOverlayLayerTask(const DtVrfObjectMessage* msg);
955 
958  virtual void updateBoundingVolumeBasedOnPosture();
959 
961  virtual DtExtent computeExtent() const;
962 
964  virtual void initializeObjectGeometryModel();
965 
966 protected:
967  mutable DtExtent myExtent;
968  mutable bool myExtentInvalid;
969 
971 
973 
975 
978 
982 
983  DtGlobalObjectDesignator myGlobalId;
984 
986 
988 
990 
992 
997 
1001 
1005  DtForceType myForceType;
1006  DtList myVertices;
1007  DtTaitBryan myOrientation;
1010  DtAppearance myAppearance;
1011 
1014 
1016 
1022 
1032 
1039 
1043 
1047 
1051 
1053 
1056 
1058 
1060 
1062 
1064 
1066 
1068 
1070 
1075 
1077 
1082 
1087 
1090 
1092  std::set<DtString> myNameAliasList;
1094  mutable bool myWarnedObjectName;
1097 
1101 };
1102 
1104 {
1105  myAboutToBeRemoved = b;
1106 }
1107 
1109 {
1110  return myAboutToBeRemoved;
1111 }
1112 

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)