VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/vrfObject.h
Go to the documentation of this file.
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 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)