![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2008 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: disaggregator.h,v $ $Revision: 1.5 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #ifndef disaggregator_H_ 00016 #define disaggregator_H_ 00017 00018 #include "vrfobjcore/vrfObject.h" 00019 #include "vrfobjcore/orgManager.h" 00020 #include "vrfobjcore/organizationChangeSet.h" 00021 #include "vrfobjcore/vrfObjMgr.h" 00022 #include "vrfcore/simMgr.h" 00023 00024 class DtSubordinateObjectsList; 00025 class DtOrganizationChangeSet; 00026 class DtSubordinateEntry; 00027 class DtAggregateObjectParameters; 00028 00029 typedef void (*DtDisaggregationCompleteCallbackFcn)(void* usr); 00030 00036 #include "vrfmodel/vrfmodelDefines.h" 00037 class DT_DLL_vrfmodel DtDisaggregator 00038 { 00039 public: 00040 00042 DtDisaggregator(DtVrfObjectManager& vrfObjectManager); 00043 00045 virtual ~DtDisaggregator(); 00046 00058 virtual bool disaggregate(const DtVrfObject& aggregate, 00059 const DtSubordinateObjectsList& subordinateObjectsList, 00060 DtDisaggregationCompleteCallbackFcn completionCallback, 00061 void* userData); 00062 00063 static void orgMgrChangeSetCompleteCallback(void* usr); 00064 00065 protected: 00066 00071 virtual void createAndInitSubordinates(const DtVrfObject& parent); 00072 00073 virtual void createAndInitSubordinates(const DtVrfObject& parent, 00074 const DtSubordinateObjectsList& subordinateObjectsList); 00075 00077 DtDisaggregator(const DtDisaggregator& orig); 00078 00080 DtDisaggregator& operator=( 00081 const DtDisaggregator& orig); 00082 00097 virtual DtVrfObject* buildVrfObject( const DtObjectType& objectType, 00098 DtForceType forceType, 00099 const DtVector& geocentricPosition, 00100 const DtTaitBryan* orientation, 00101 bool publishLocalObject, 00102 bool createSubObjects, 00103 DtVrfObjectManager::DtAggregateCreationMode initialAggregateState, 00104 const DtString& formationName); 00105 00106 virtual void setDisaggregationCompleteCallbackInfo( 00107 DtDisaggregationCompleteCallbackFcn fcn, void* usr); 00108 00109 virtual void clearDisaggregationCompleteCallbackInfo(); 00110 00111 virtual void onOrgMgrChangeSetComplete(); 00112 00113 virtual bool shouldCreate(const DtSubordinateEntry& subordinateDescriptor) const; 00114 00115 virtual bool computeSubordinatePositions(int numSubordinates, 00116 const DtString& formationName, 00117 const DtAggregateObjectParameters& aggregateParams, 00118 const DtVector& parentPosition, 00119 const DtDcm& parentOrientation, 00120 std::list<DtVector>& subordinateBodyPositions) const; 00121 00122 virtual int numSubordinatesToCreate(const DtSubordinateObjectsList& psrSubordObjList) const; 00123 00124 public: 00125 00129 // const DtPseudoAggregateBuilder& builder); 00130 00131 protected: 00132 DtVrfObjectManager& myVrfObjectManager; 00133 DtOrganizationChangeSet myOrganizationChangeSet; 00134 int myChangeSetRequestId; 00135 00136 typedef std::pair<DtDisaggregationCompleteCallbackFcn, void*> 00137 DtDisaggregationCompleteCallbackInfoType; 00138 DtDisaggregationCompleteCallbackInfoType myDisaggregationCompleteCallbackInfo; 00139 }; 00140 00141 #endif 00142 00143