![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2001 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00006 #pragma once 00007 00010 00012 00013 00014 #include "vrfobjcore/objFactory.h" 00015 #include "vrfobjcore/simObjCbInfo.h" 00016 #include "vrfobjcore/obsAreaCompat.h" 00017 #include "vrfobjcore/vrfObjPredCbInfo.h" 00018 00019 #include "geometry/tdbextent.h" 00020 00021 #include "vrfutil/rdrWritr.h" 00022 #include "vrfutil/rwString.h" 00023 #include "vrfutil/rwObjType.h" 00024 #include "vrfutil/rwBoolean.h" 00025 #include "vrfutil/lclVtxList.h" 00026 #include "vrfutil/rwVector.h" 00027 #include "vrfutil/callbackList.h" 00028 00030 #include <vl/hostStructs.h> 00031 #include <vlpi/appearance.h> 00032 #include <vlutil/vlList.h> 00033 00034 class DtVrfObjectStateRepository; 00035 class DtSimObjectStateRepository; 00036 class DtSimObjectNetInterface; 00037 class DtStateRepository; 00038 class DtVrfObjectParameters; 00039 class DtVrfObjectSubComponentTypes; 00040 class DtSimObjectCallbackInfo; 00041 class DtVrfObjectMessage; 00042 class DtVrfObjectManager; 00043 class DtSimManager; 00044 class DtVrfObjectSubComponentTypes; 00045 class DtSimTaskManager; 00046 class DtSimBaseRadio; 00047 class DtSimComponentManager; 00048 class DtVrfObjectPlanManager; 00049 class DtIfCreateVrfObject; 00050 class DtIfModifyVrfObject; 00051 class DtIfVrfObjectCreated; 00052 class DtReflectedEntity; 00053 class DtReflectedExtAggregate; 00054 class DtReflectedEnvironmentProcess; 00055 class DtVrfObject; 00056 class DtVrfObjectPredicate; 00057 class DtLclVerticesNotEqualPredicate; 00058 class Coordinate_System; 00059 class DtAttachedTerrain; 00060 class DtPhysicalWorld; 00061 class DtObjectConsole; 00062 class DtSetDataManager; 00063 class DtVrfObjectCommunicationInterface; 00064 class DtRadioDescriptorList; 00065 class DtSettingsObject; 00066 class DtVrfObjectTerrainPreloadManager; 00067 00070 typedef void (*DtVrfObjectCallbackFunction)(DtVrfObject* obj, void* userData); 00071 00072 typedef DtCallbackList<DtVrfObject*> DtVrfObjectCallbackList; 00073 00086 #include "vrfobjcore/vrfobjcoreDefines.h" 00087 class DT_DLL_vrfobjcore DtVrfObject : public DtReaderWriter 00088 { 00089 public: 00090 00094 typedef std::pair<DtVrfObjectCallbackFunction, void*> DtVrfObjectCallbackDataPair; 00095 typedef std::pair<DtVrfObject*, DtVrfObjectCallbackDataPair> DtVrfObjectCallbackDataPair2; 00097 00098 protected: 00099 00101 DtVrfObject(); 00102 00103 public: 00104 00105 DtVrfObject( 00106 const DtObjectType & objectType, 00107 DtVrfObjectManager* vrfObjectManager, 00108 bool createLocalObject = true, 00109 bool publishLocalObject = true, 00110 const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(), 00111 const DtGlobalObjectDesignator* globalId = 0, 00112 DtReflectedObject* reflectedObject = 0, 00113 const DtString & objectName = DtString::nullString(), 00114 const DtString & objectLabel = DtString::nullString(), 00115 DtForceType forceType = DtForceOther, 00116 const DtList* vertices = 0, 00117 const DtTaitBryan* orientation = 0, 00118 bool projection = false, 00119 bool closedFigure = false, 00120 const DtAppearance& appearance = DtAppearance::nullAppearance(), 00121 const DtString & readerWriterName = "vrf-object", 00122 DtReaderWriterRegistry* parentRegistry = 0); 00123 00125 virtual ~DtVrfObject(); 00126 00129 virtual bool create(); 00132 virtual void createCommunicationsInterface(); 00133 00136 virtual void createCommunicationsInterface(const DtRadioDescriptorList& descList); 00137 00140 virtual void createSetDataManager(); 00141 00144 virtual bool init(); 00145 00147 00151 virtual void tick(); 00156 virtual bool createRepository(DtVrfObjectParameters* parameterEntry); 00157 virtual bool createTaskManager(); 00158 virtual bool createComponentManager(); 00161 virtual bool createVrfObjectPlanManager(); 00162 virtual bool createRadio(); 00163 00165 virtual const DtSimManager* simManager() const; 00166 virtual DtSimManager* simManager(); 00167 00169 virtual DtSimTaskManager* taskManager() const; 00170 virtual DtSimComponentManager* componentManager() const; 00171 virtual DtVrfObjectPlanManager* vrfObjectPlanManager() const; 00172 virtual DtSimBaseRadio* radio() const; 00173 00174 virtual DtVrfObjectStateRepository* vrfState() const; 00175 00184 virtual DtExtent extent() const; 00185 00190 virtual void expandExtent(DtExtent& extent) const; 00191 00195 virtual void sendVrfObjectCreated(unsigned long requestId = 0); 00196 00198 virtual void setupFromMessageContent(DtIfModifyVrfObject* ifModVrfObject); 00199 00202 virtual bool isVrfSimulatedObject(); 00203 virtual void setIsVrfSimulatedObject(bool b); 00204 00212 virtual bool isSimulatingComponents() const; 00213 00215 virtual void putSelf(FILE* fp, int indentLevel = 0, bool writeUnspecified = true, 00216 const DtFilename& path = DtReaderWriter::appPath()); 00217 00219 virtual void getSelf(DtlObjPtr args, const DtFilename& searchPath, 00220 const DtVariableBindingsList& variableBindings); 00221 00229 virtual bool setObjectName(const DtString & name, bool rename = true); 00230 00233 virtual void addNameAlias(const DtString& name); 00234 00237 virtual void unregisterAliases(); 00238 00252 virtual void addVrfObjectChangedCallback( 00253 DtVrfObjectCallbackFunction function, void* userData); 00254 virtual void removeVrfObjectChangedCallback( 00255 DtVrfObjectCallbackFunction function, void* userData); 00256 00263 virtual void addVerticesChangedCallback( 00264 DtVrfObjectCallbackFunction function, void* userData); 00265 virtual void removeVerticesChangedCallback( 00266 DtVrfObjectCallbackFunction function, void* userData); 00268 00274 virtual void addRelativeVerticesChangedCallback( 00275 DtVrfObjectCallbackFunction function, void* userData); 00276 virtual void removeRelativeVerticesChangedCallback( 00277 DtVrfObjectCallbackFunction function, void* userData); 00279 00282 virtual void addVrfObjectPredicateCallback( 00283 DtVrfObjectPredicateCallbackFunction function, 00284 const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0, 00285 void* userData = 0); 00286 virtual void removeVrfObjectPredicateCallback( 00287 DtVrfObjectPredicateCallbackFunction function, 00288 const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0, 00289 void* userData = 0); 00290 00293 virtual int predicateCallbackCount() const; 00294 00299 virtual void invokeVrfObjectPredicateCallbacks(); 00300 00303 virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem); 00304 00305 virtual const DtVrfObjectManager* simObjectManager() const; 00306 virtual DtVrfObjectManager* simObjectManager(); 00307 virtual void setSimObjectManager(DtVrfObjectManager* simObjectManager); 00308 00309 virtual bool createNetInterface(); 00310 00315 virtual void setGlobalId(const DtGlobalObjectDesignator & id); 00316 virtual const DtGlobalObjectDesignator & globalId() const; 00317 00322 virtual bool baseSetObjectName(const DtString & name); 00323 virtual const DtString & objectName() const; 00324 00326 virtual const DtString & objectLabel() const; 00327 virtual void setObjectLabel(const DtString & objectLabel); 00328 00330 virtual const DtString & overlayParent() const; 00331 virtual void setOverlayParent(const DtString & overlayParent); 00332 00334 virtual DtStateRepository* netState(); 00335 virtual const DtStateRepository* netState() const; 00336 00338 virtual DtSimObjectNetInterface* netInterface(); 00339 virtual const DtSimObjectNetInterface* netInterface() const; 00340 virtual void setNetInterface(DtSimObjectNetInterface* netInterface); 00341 00343 virtual void setObjectIdentifier(const DtEntityIdentifier & objectId); 00344 virtual const DtEntityIdentifier & objectIdentifier() const; 00345 00348 virtual bool isLocal() const; 00349 00353 00354 virtual void setPublishObject(bool publishObject); 00355 virtual bool publishObject() const; 00357 00359 virtual DtString type() const; 00360 00361 virtual DtString objectClassType() const; 00362 virtual void setObjectClassType(const DtString & objectClassType); 00363 00366 virtual void clearVerticesChangedCallbacks(); 00367 00370 virtual void clearRelativeVerticesChangedCallbacks(); 00371 00374 virtual void clearPredicateCallbacks(); 00375 00376 static void addSimObjectCreatorFcn(const DtString & type, 00377 DtSimObjectCreatorFcn fcn); 00378 00383 static DtSimObjectFactory* factory(); 00384 static void setFactory(DtSimObjectFactory* factory); 00385 00386 virtual DtSimObjectStateRepository* simState(); 00387 virtual const DtSimObjectStateRepository* simState() const; 00388 virtual void setSimState(DtVrfObjectStateRepository* simState); 00389 00390 void setEntityType(const DtEntityType & entityType); 00391 const DtEntityType & entityType() const; 00392 00393 void setDestroyed(bool destroyed); 00394 bool isDestroyed() const; 00395 00407 virtual void place(const DtVector& location, bool* dataAvailable = 0, 00408 bool requireAllData = false); 00409 00421 virtual void place(const DtReal heading, bool* dataAvailable = 0, 00422 bool requireAllData = false); 00423 00436 virtual void place(const DtVector& location, const DtReal heading, 00437 bool* dataAvailable = 0, bool requireAllData = false); 00438 00439 const DtString & echelonIdString() const; 00440 00441 virtual DtVrfObject* leadEntity() const; 00442 00443 virtual const DtString& firstSubordinate() const; 00444 00445 virtual const DtString& lastSubordinate() const; 00446 00448 virtual const DtString& firstHealthySubordinate() const; 00449 00450 virtual void echelonIdChanged() {} 00451 00452 virtual const DtObjectId & objectId() const; 00453 virtual const DtObjectType& objectType() const; 00454 00456 virtual bool isEmbarked() const; 00457 00460 virtual bool isEmbarkedOn(const DtString& parent) const; 00461 00462 DtAttachedTerrain* terrainAttachedTo(); 00463 const DtAttachedTerrain* terrainAttachedTo() const; 00464 00465 virtual const DtPhysicalWorld* physicalWorld() const; 00466 virtual DtPhysicalWorld* physicalWorld(); 00467 00469 void setAboutToBeRemoved(bool); 00470 bool aboutToBeRemoved() const; 00471 00474 virtual DtOutputStream& objectConsoleDebug() const; 00475 virtual DtOutputStream& objectConsoleVerbose() const; 00476 virtual DtOutputStream& objectConsoleInfo() const; 00477 virtual DtOutputStream& objectConsoleWarn() const; 00478 virtual DtOutputStream& objectConsoleError() const; 00480 00483 virtual DtObjectConsole* objectConsole(); 00484 virtual const DtObjectConsole* objectConsole() const; 00486 00491 virtual DtSetDataManager* setDataManager(); 00492 00497 virtual DtVrfObjectCommunicationInterface* communicationInterface(); 00498 00502 virtual DtVrfObjectTerrainPreloadManager* terrainPreloadManager(); 00503 00506 DtVrfObjectSubComponentTypes* vrfSubComponentTypes() const; 00507 00510 virtual bool hasPlan() const; 00511 00513 virtual bool executingPlan() const; 00514 00516 virtual bool isCurrentlyTasked() const; 00517 00523 virtual void addPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn, 00524 void* usr); 00525 virtual void removePostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn, 00526 void* usr); 00528 00533 virtual DtU8 getNextEmitterSystemId(); 00534 00536 static void setDefaultNotifyLevel(DtNotifyLevelType level); 00538 static DtNotifyLevelType defaultNotifyLevel(); 00539 00540 public: 00541 00544 static DtVrfObject* creator( 00545 const DtObjectType& objectType, 00546 DtVrfObjectManager* simObjectManager, 00547 bool createLocalObject = true, 00548 bool publishLocalObject = true, 00549 const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(), 00550 const DtGlobalObjectDesignator* globalId = 0, 00551 DtReflectedObject* reflectedObject = 0, 00552 const DtString & objectName = DtString::nullString(), 00553 const DtString & objectLabel = DtString::nullString(), 00554 DtForceType forceType = DtForceOther, 00555 const DtList* vertices = 0, 00556 const DtTaitBryan* orientation = 0, 00557 bool projection = false, 00558 bool closedFigure = false, 00559 const DtAppearance& appearance = DtAppearance::nullAppearance(), 00560 const DtString & readerWriterName = DtString::nullString(), 00561 DtReaderWriterRegistry* parentRegistry = 0); 00562 00564 static DtVrfObject* createObject( 00565 const DtObjectType& objectType, 00566 DtVrfObjectManager* vrfObjectManager, 00567 const DtString & classType, 00568 bool createLocalObject = true, 00569 bool publishLocalObject = true, 00570 const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(), 00571 const DtGlobalObjectDesignator* globalId = 0, 00572 DtReflectedObject* reflectedObject = 0, 00573 const DtString & objectName = DtString::nullString(), 00574 const DtString & objectLabel = DtString::nullString(), 00575 DtForceType forceType = DtForceOther, 00576 const DtList* vertices = 0, 00577 const DtTaitBryan* orientation = 0, 00578 bool projection = false, 00579 bool closedFigure = false, 00580 const DtAppearance& appearance = DtAppearance::nullAppearance(), 00581 const DtString & readerWriterName = DtString::nullString(), 00582 DtReaderWriterRegistry* parentRegistry = 0); 00583 00585 static DtVrfObject* createObject( 00586 const DtObjectType & objectType, 00587 DtVrfObjectManager* vrfObjectManager, 00588 const DtString & classType, 00589 bool createLocalObject = true, 00590 bool publishLocalObject = true, 00591 const DtEntityIdentifier& objectIdentifier = DtEntityIdentifier::nullId(), 00592 const DtGlobalObjectDesignator* globalId = 0, 00593 DtReflectedObject* reflectedObject = 0, 00594 const DtString & objectName = DtString::nullString(), 00595 const DtString & objectLabel = DtString::nullString(), 00596 DtForceType forceType = DtForceOther, 00597 const DtVector& location = DtVector::zero(), 00598 const DtTaitBryan* orientation = 0, 00599 bool projection = false, 00600 bool closedFigure = false, 00601 const DtAppearance& appearance = DtAppearance::nullAppearance(), 00602 const DtString & readerWriterName = DtString::nullString(), 00603 DtReaderWriterRegistry* parentRegistry = 0); 00604 00606 static DtVrfObject* createAndInit( 00607 DtVrfObjectManager* vrfObjectManager, DtlObjPtr mtlStream); 00608 00612 static void verticesChangedCallback(DtVrfObject* obj, 00613 DtVrfObjectPredicateEvaluator* predicateEval, void* userData); 00614 00616 static void relativeVerticesChangedCallback(DtVrfObject* obj, 00617 DtVrfObjectPredicateEvaluator* predicateEval, void* userData); 00618 00622 static void postInitFromParamsCallback(DtVrfObjectStateRepository& stateRepository, void* usr); 00623 00626 00627 static void readDRThresholdSettingsCallback( 00628 const DtSettingsObject* settings, void* usr); 00629 virtual void processReadDRThresholdSettings(const DtSettingsObject* settings); 00631 00633 00634 virtual void addObjectAboutToBeRemovedCallback( 00635 DtVrfObjectCallbackList::DtCallbackFunctionType fcn, void* usr); 00636 virtual void removeObjectAboutToBeRemovedCallback( 00637 DtVrfObjectCallbackList::DtCallbackFunctionType fcn, void* usr); 00638 virtual void invokeVrfObjectAboutToBeRemovedCallbacks(); 00640 00641 protected: 00642 00644 DtVrfObject(const DtVrfObject& orig); 00645 00647 DtVrfObject& operator=(const DtVrfObject& orig); 00648 00649 00651 virtual void setupStateRepository(); 00652 00654 virtual void setupNetInterface(); 00655 00657 void emptyVertexList(); 00658 00660 void copyVertexList(const DtList& orig); 00661 00664 virtual void validateObjectType(); 00665 00667 virtual void processPostInitFromParamsCallback(DtVrfObjectCallbackFunction fcn, void* usr); 00668 00671 virtual void initializeCommunicationInterfaceCallbacks(); 00672 static void setOverlayLayerTaskCallback(const DtVrfObjectMessage* msg, void* usr); 00673 virtual void processSetOverlayLayerTask(const DtVrfObjectMessage* msg); 00674 00675 protected: 00676 00677 DtRwString myObjectClassType; 00678 00679 static DtSimObjectFactory* theFactory; 00680 00681 DtEntityIdentifier myObjectIdentifier; 00682 00684 DtRwObjectType myObjectType; 00685 00686 DtRwString myObjectName; 00687 DtRwString myObjectLabel; 00688 DtRwString myOverlayParent; 00689 00690 DtGlobalObjectDesignator myGlobalId; 00691 00692 DtVrfObjectManager* mySimObjectManager; 00693 00694 DtVrfObjectStateRepository* mySimState; 00695 00696 DtSimObjectNetInterface* myNetInterface; 00697 00698 DtRwBoolean myPublishObject; 00699 00703 bool myCreateLocalObject; 00704 00707 bool myIsVrfSimulatedObject; 00708 00711 DtReflectedObject* myReflectedObject; 00712 DtForceType myForceType; 00713 DtList myVertices; 00714 DtTaitBryan myOrientation; 00715 bool myProjection; 00716 bool myClosedFigure; 00717 DtAppearance myAppearance; 00718 00720 DtVrfObjectSubComponentTypes* mySubComponentTypes; 00721 00722 DtSimManager* mySimManager; 00723 00724 DtSimTaskManager* myTaskManager; 00725 DtSimBaseRadio* myRadio; 00726 DtSimComponentManager* myComponentManager; 00727 DtVrfObjectPlanManager* myVrfObjectPlanManager; 00728 00732 DtLocalVertexList myOvlVertices; 00733 DtRwVector myOvlTargetLocation; 00734 DtRwVector myOvlStartPoint; 00735 DtRwVector myOvlEndPoint; 00736 DtObstacleAreaCompatilibility myOvlObstacleArea; 00737 DtRwBoolean myOvlObstacleIsBreached; 00738 00744 DtList myPredicateCallbackList; 00745 00748 DtList myVerticesChangedCallbackList; 00749 00752 DtList myRelativeVerticesChangedCallbackList; 00753 00754 DtVrfObjectCallbackList myAboutToBeRemovedCallbackList; 00755 00756 DtList myNameAliasList; 00757 00759 bool myAboutToBeRemoved; 00760 00761 DtObjectConsole* myObjectConsole; 00762 00763 DtSetDataManager* mySetDataManager; 00764 00765 DtVrfObjectCommunicationInterface* myCommunicationInterface; 00766 00767 DtU8 myNextEmitterSystemId; 00768 00769 DtVrfObjectTerrainPreloadManager* myTerrainPreloadManager; 00770 00771 static int theDefaultNotifyLevel; 00772 }; 00773 00774 inline void DtVrfObject::setAboutToBeRemoved(bool b) 00775 { 00776 myAboutToBeRemoved = b; 00777 } 00778 00779 inline bool DtVrfObject::aboutToBeRemoved() const 00780 { 00781 return myAboutToBeRemoved; 00782 }