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 
276  virtual void tickPublisherOnly();
277 
282  virtual bool createRepository(DtVrfObjectParameters* parameterEntry);
283  virtual bool createTaskManager();
284  virtual bool createScriptInterfaceHandler();
285  virtual bool createComponentManager();
288  virtual bool createVrfObjectPlanManager();
289  virtual bool createRadio();
290  virtual bool createNavigationInterfaceManager();
291 
293  virtual DtSharedVrfObjectReference sharedReference();
294  virtual DtSharedVrfObjectReference sharedReference() const;
295 
298  virtual double illumination() const;
299 
301  virtual DtVrfObject* weather() const;
302 
304  virtual MAKVRinTerra::DtFeatureGeometry featureGeometry() const;
305 
307  virtual void updateIllumination();
308 
310  virtual void updateWeather();
311 
313  virtual void setRangeRingsParametersPublisherTickRange(double d);
314 
316  virtual void createAndInitializeRangeRingsParameterPublisher();
317 
320  virtual bool needsIlluminationUpdate();
321 
324  virtual bool isOnTopOf(const DtVrfObject*) const;
325  virtual bool isOnTopOf(const DtVrfObject*, double d) const;
326 
328  virtual bool intersect(const DtChord&, DtChordIntersectionRecord* record = 0) const;
329 
331  virtual bool hasHighFidelityObjectGeometryModel() const;
332 
334  virtual bool hasValidObjectGeometry() const;
335 
339  virtual bool needsWeatherAreaUpdate();
340 
342  virtual bool isGlobalPlan() const;
343 
345  virtual const DtSimManager* simManager() const;
346  virtual DtSimManager* simManager();
347 
349  virtual DtSimTaskManager* taskManager() const;
350  virtual DtScriptInterfaceHandler* scriptInterfaceHandler() const;
351  virtual DtSimComponentManager* componentManager() const;
352  virtual DtVrfObjectPlanManager* vrfObjectPlanManager() const;
353  virtual DtSimRadio* radio() const;
354 
355  virtual DtVrfObjectStateRepository* vrfState() const;
356 
365  virtual DtExtent extent() const;
366 
368  const DtVrfObjectParameters* parameterEntry() const;
369 
374  virtual void expandExtent(DtExtent& extent) const;
375 
379  virtual void sendVrfObjectCreated(unsigned long requestId = 0, bool requestCreated = true);
380 
382  virtual void setupFromMessageContent(DtIfModifyVrfObject* ifModVrfObject);
383 
386  virtual bool isVrfSimulatedObject();
387  virtual void setIsVrfSimulatedObject(bool b);
388 
390  virtual const DtAttachedTerrain& objectGeometryModel() const;
391 
399  virtual bool isSimulatingComponents() const;
400 
402  virtual void save(std::string&);
403 
405  virtual void putSelf(std::string& fp, int indentLevel = 0, bool writeUnspecified = true,
406  const DtFilename& path = DtReaderWriter::appPath());
407 
409  virtual void getSelf(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
410  const DtVariableBindingsList& variableBindings);
411 
412  virtual bool validNameLength(const DtString& name) const;
413 
421  virtual bool setMarkingText(const DtString & name, bool rename = true);
422 
436  virtual void addVrfObjectChangedCallback(
437  DtVrfObjectCallbackFunction function, void* userData);
438  virtual void removeVrfObjectChangedCallback(
439  DtVrfObjectCallbackFunction function, void* userData);
440 
447  virtual void addVerticesChangedCallback(
448  DtVrfObjectCallbackFunction function, void* userData);
449  virtual void removeVerticesChangedCallback(
450  DtVrfObjectCallbackFunction function, void* userData);
452 
458  virtual void addRelativeVerticesChangedCallback(
459  DtVrfObjectCallbackFunction function, void* userData);
460  virtual void removeRelativeVerticesChangedCallback(
461  DtVrfObjectCallbackFunction function, void* userData);
463 
466  virtual void addVrfObjectPredicateCallback(
468  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
469  void* userData = 0);
470  virtual void removeVrfObjectPredicateCallback(
472  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
473  void* userData = 0);
474 
477  virtual int predicateCallbackCount() const;
478 
483  virtual void invokeVrfObjectPredicateCallbacks();
484 
487  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
488 
489  virtual const DtVrfObjectManager* simObjectManager() const;
490  virtual DtVrfObjectManager* simObjectManager();
491  virtual void setSimObjectManager(DtVrfObjectManager* simObjectManager);
492 
493  virtual bool createNetInterface();
494 
499  virtual void setGlobalId(const DtGlobalObjectDesignator & id);
500  virtual const DtGlobalObjectDesignator & globalId() const;
501 
504  virtual const DtString & globalIdString() const;
505 
510  virtual bool baseSetMarkingText(const DtString & name);
511  virtual const DtString& markingText() const;
512 
517  virtual const DtString& objectName() const;
518 
521  virtual void addNameAlias(const DtString& name);
522 
525  virtual void unregisterAliases();
526 
528  virtual void setUUID(const DtUUID&);
529 
531  virtual const DtUUID& uuid() const;
532 
534  virtual const DtString & objectLabel() const;
535  virtual void setObjectLabel(const DtString & objectLabel);
536 
538  virtual const DtString & overlayParent() const;
539  virtual void setOverlayParent(const DtString & overlayParent);
540 
542  virtual DtStateRepository* netState();
543  virtual const DtStateRepository* netState() const;
544 
546  virtual DtSimObjectNetInterface* netInterface();
547  virtual const DtSimObjectNetInterface* netInterface() const;
548  virtual void setNetInterface(DtSimObjectNetInterface* netInterface);
549 
551  virtual void setObjectIdentifier(const DtEntityIdentifier & objectId);
552  virtual const DtEntityIdentifier & objectIdentifier() const;
553 
556  virtual const DtString & objectIdentifierString() const;
557 
560  virtual bool isLocal() const;
561 
565 
566  virtual void setPublishObject(bool publishObject);
567  virtual bool publishObject() const;
569 
571  virtual DtString type() const;
572 
573  virtual DtString objectClassType() const;
574  virtual void setObjectClassType(const DtString & objectClassType);
575 
578  virtual void clearVerticesChangedCallbacks();
579 
582  virtual void clearRelativeVerticesChangedCallbacks();
583 
586  virtual void clearPredicateCallbacks();
587 
588  static void addSimObjectCreatorFcn(const DtString & type,
590 
591  static void objectAboutToBeRemoved(DtVrfObject * msg, void * usr);
592  virtual void processObjectAboutToBeRemoved(DtVrfObject*);
593 
598  static DtSimObjectFactory* factory();
599  static void setFactory(DtSimObjectFactory* factory);
600 
601  virtual DtSimObjectStateRepository* simState();
602  virtual const DtSimObjectStateRepository* simState() const;
603  virtual void setSimState(DtVrfObjectStateRepository* simState);
604 
605  void setEntityType(const DtEntityType & entityType);
606  const DtEntityType & entityType() const;
607 
608  void setDestroyed(bool destroyed);
609  bool isDestroyed() const;
610 
622  virtual void place(const DtVector& location, bool* dataAvailable = 0,
623  bool requireAllData = false);
624 
636  virtual void place(const DtReal heading, bool* dataAvailable = 0,
637  bool requireAllData = false);
638 
651  virtual void place(const DtVector& location, const DtReal heading,
652  bool* dataAvailable = 0, bool requireAllData = false);
653 
654  const DtString & echelonIdString() const;
655 
656  virtual DtSharedVrfObjectReference leadEntity() const;
657 
658  virtual DtSharedVrfObjectReference firstSubordinate() const;
659 
660  virtual DtSharedVrfObjectReference lastSubordinate() const;
661 
663  virtual DtSharedVrfObjectReference firstHealthySubordinate() const;
664 
665  virtual void echelonIdChanged() {}
666 
667  virtual const DtObjectId & objectId() const;
668  virtual const DtObjectType& objectType() const;
669 
671  virtual bool isEmbarked() const;
672 
675  virtual DtVector locationRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
676 
679  virtual DtVector velocityRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
680 
683  virtual DtVector accelerationRelativeTo(const DtVector&, DtVrfObject* relativeTo) const;
684 
687  virtual DtTaitBryan orientationRelativeTo(const DtTaitBryan&, DtVrfObject* relativeTo) const;
688 
690  virtual DtVrfObject* embarkedOn() const;
691 
694  virtual bool isEmbarkedOn(const DtUUID& parent) const;
695 
696  DtAttachedTerrain* terrainAttachedTo();
697  const DtAttachedTerrain* terrainAttachedTo() const;
698 
699  virtual const DtPhysicalWorld* physicalWorld() const;
700  virtual DtPhysicalWorld* physicalWorld();
701 
703  void setAboutToBeRemoved(bool);
704  bool aboutToBeRemoved() const;
705 
708  virtual DtOutputStream& objectConsoleDebug(const DtString& channel = "") const;
709  virtual DtOutputStream& objectConsoleVerbose(const DtString& channel = "") const;
710  virtual DtOutputStream& objectConsoleInfo(const DtString& channel = "") const;
711  virtual DtOutputStream& objectConsoleWarn(const DtString& channel = "") const;
712  virtual DtOutputStream& objectConsoleError(const DtString& channel = "") const;
714 
717  virtual DtObjectConsole* objectConsole();
718  virtual const DtObjectConsole* objectConsole() const;
720 
725  virtual DtSetDataManager* setDataManager();
726  virtual const DtSetDataManager* setDataManager() const;
727 
732  virtual DtVrfObjectCommunicationInterface* communicationInterface();
733 
737  virtual DtVrfObjectNavInterface* navInterface();
738 
742  virtual DtVrfObjectTerrainPreloadManager* terrainPreloadManager();
743 
746  DtVrfObjectSubComponentTypes* vrfSubComponentTypes() const;
747 
750  virtual bool hasPlan() const;
751 
753  virtual bool executingPlan() const;
754 
756  virtual bool isCurrentlyTasked() const;
757 
763  virtual void addPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn,
764  void* usr);
765  virtual void removePostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn,
766  void* usr);
768 
773  virtual DtU8 getNextEmitterSystemId();
774 
776  static void setDefaultNotifyLevel(DtNotifyLevelType level);
778  static DtNotifyLevelType defaultNotifyLevel();
779 
783  virtual void addScriptExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
785  virtual void removeScriptExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
787  virtual const ScriptInterfaceExtensions& scriptExtensions() const;
788 
791  virtual void regenerateUUIDForImport();
792 
793 public:
794 
797  static DtVrfObject* creator(
798  const DtObjectType& objectType,
799  DtVrfObjectManager* simObjectManager,
800  bool createLocalObject = true,
801  bool publishLocalObject = true,
802  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
803  const DtGlobalObjectDesignator* globalId = 0,
804  DtReflectedObject* reflectedObject = 0,
805  const DtString & objectName = DtString::nullString(),
806  const DtString & objectLabel = DtString::nullString(),
807  DtForceType forceType = DtForceOther,
808  const DtList* vertices = 0,
809  const DtTaitBryan* orientation = 0,
810  bool projection = false,
811  bool closedFigure = false,
812  const DtAppearance& appearance = DtAppearance::nullAppearance(),
813  const DtString & readerWriterName = DtString::nullString(),
814  DtReaderWriterRegistry* parentRegistry = 0,
815  const DtUUID& uuid = DtUUID::nullUUID(),
816  bool connectToRadioNetowrk = true);
817 
819  static DtVrfObject* createObject(
820  const DtObjectType& objectType,
821  DtVrfObjectManager* vrfObjectManager,
822  const DtString & classType,
823  bool createLocalObject = true,
824  bool publishLocalObject = true,
825  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
826  const DtGlobalObjectDesignator* globalId = 0,
827  DtReflectedObject* reflectedObject = 0,
828  const DtString & objectName = DtString::nullString(),
829  const DtString & objectLabel = DtString::nullString(),
830  DtForceType forceType = DtForceOther,
831  const DtList* vertices = 0,
832  const DtTaitBryan* orientation = 0,
833  bool projection = false,
834  bool closedFigure = false,
835  const DtAppearance& appearance = DtAppearance::nullAppearance(),
836  const DtString & readerWriterName = DtString::nullString(),
837  DtReaderWriterRegistry* parentRegistry = 0,
838  const DtUUID& initialUUID = DtUUID::nullUUID(),
839  bool connectToRadioNetowrk = true);
840 
842  static DtVrfObject* createObject(
843  const DtObjectType & objectType,
844  DtVrfObjectManager* vrfObjectManager,
845  const DtString & classType,
846  bool createLocalObject = true,
847  bool publishLocalObject = true,
848  const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(),
849  const DtGlobalObjectDesignator* globalId = 0,
850  DtReflectedObject* reflectedObject = 0,
851  const DtString & objectName = DtString::nullString(),
852  const DtString & objectLabel = DtString::nullString(),
853  DtForceType forceType = DtForceOther,
854  const DtVector& location = DtVector::zero(),
855  const DtTaitBryan* orientation = 0,
856  bool projection = false,
857  bool closedFigure = false,
858  const DtAppearance& appearance = DtAppearance::nullAppearance(),
859  const DtString & readerWriterName = DtString::nullString(),
860  DtReaderWriterRegistry* parentRegistry = 0,
861  const DtUUID& uuid = DtUUID::nullUUID(),
862  bool connectToRadioNetowrk = true);
863 
865  static DtVrfObject* createAndInit(
866  DtVrfObjectManager* vrfObjectManager, DtlObjPtr mtlStream);
867 
871  static DtVrfObject* createAndInitForSimulationObjectGroup(
872  DtVrfObjectManager* vrfObjectManager, DtlObjPtr mtlStream, int flags, int force, const DtVector& geocentricOffsetLocation,
873  double offsetRotation = 0.);
874 
878  static void verticesChangedCallback(DtVrfObject* obj,
879  DtVrfObjectPredicateEvaluator* predicateEval, void* userData);
880 
882  static void relativeVerticesChangedCallback(DtVrfObject* obj,
883  DtVrfObjectPredicateEvaluator* predicateEval, void* userData);
884 
888  static void postInitFromParamsCallback(DtVrfObjectStateRepository& stateRepository, void* usr);
889 
892 
893  static void readDRThresholdSettingsCallback(
894  const DtSettingsObject* settings, void* usr);
895  virtual void processReadDRThresholdSettings(const DtSettingsObject* settings);
897 
899  virtual void addedToObjectManager();
900 
902 
903  virtual void addObjectAboutToBeRemovedCallback(
905  virtual void removeObjectAboutToBeRemovedCallback(
907  virtual void invokeVrfObjectAboutToBeRemovedCallbacks();
909 
912 
913  virtual void addNewSensorContactCallback(
915  virtual void removeNewSensorContactCallback(
917  virtual void invokeNewSensorContactCallbacks();
919 
921 
922  virtual void addSetLocationCompleteCallback(
924  virtual void removeSetLocationCompleteCallback(
926  virtual void invokeSetLocationCompleteCallbacks();
928 
930  virtual DtVrfUnderwaterAcoustics* underwaterAcoustics();
931 
932  virtual DtVrfObjectDeletionHandle objectDeletionHandle();
933 
934 protected:
935 
937  DtVrfObject(const DtVrfObject& orig);
938 
940  DtVrfObject& operator=(const DtVrfObject& orig);
941 
943  virtual bool initializeNetInterface();
944 
946  virtual void setupStateRepository();
947 
949  virtual void setupNetInterface();
950 
952  void emptyVertexList();
953 
955  void copyVertexList(const DtList& orig);
956 
959  virtual void validateObjectType();
960 
962  virtual void processPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn, void* usr);
963 
966  virtual void initializeCommunicationInterfaceCallbacks();
967  static void setOverlayLayerTaskCallback(const DtVrfObjectMessage* msg, void* usr);
968  virtual void processSetOverlayLayerTask(const DtVrfObjectMessage* msg);
969 
972  virtual void updateBoundingVolumeBasedOnPosture();
973 
975  virtual DtExtent computeExtent() const;
976 
978  virtual void initializeObjectGeometryModel();
979 
980 protected:
981  mutable DtExtent myExtent;
982  mutable bool myExtentInvalid;
983 
985 
987 
990 
993 
997 
998  DtGlobalObjectDesignator myGlobalId;
1000 
1002 
1004 
1006 
1008 
1013 
1017 
1021  DtForceType myForceType;
1022  DtList myVertices;
1023  DtTaitBryan myOrientation;
1026  DtAppearance myAppearance;
1027 
1030 
1032 
1038 
1048 
1055 
1059 
1063 
1067 
1069 
1072 
1074 
1076 
1078 
1080 
1082 
1084 
1086 
1091 
1093 
1098 
1103 
1106 
1108  std::set<DtString> myNameAliasList;
1110  mutable bool myWarnedObjectName;
1113 
1117 };
1118 
1120 {
1121  myAboutToBeRemoved = b;
1122 }
1123 
1125 {
1126  return myAboutToBeRemoved;
1127 }
1128 

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)