![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00009 00010 #pragma once 00011 00012 #include <vrvVrl/vrvVrl.h> 00013 #include <vrvCore/DtDriver.h> 00014 #include <vrvUtil/DtLockedBufferedQueue.h> 00015 #include <vrvCore/DtSelectionManager.h> 00016 #include <vrvUtil/DtSignalConnectionManager.h> 00017 #include <vrvCore/DtViewStateProcessor.h> 00018 00019 #include <vlutil/vlRunnable.h> 00020 00021 #include <string> 00022 #include <boost/function.hpp> 00023 #include <boost/signal.hpp> 00024 00025 class DtThread; 00026 class DtThreadStart; 00027 class DtEntityType; 00028 00029 namespace makVrv 00030 { 00031 class DtAsynchronousEventQueue; 00032 class DtAsynchronousAgentManager; 00033 class DtConnection; 00034 class DtEntityTypeMapper; 00035 class DtObserver; 00036 class DtSelectionManager; 00037 class DtMouseState; 00038 00041 class DT_DLL_VRVVRL DtVrlinkDriver : public DtDriver, 00042 protected DtRunnable 00043 { 00044 public: 00045 00047 DtVrlinkDriver(DtAgentManager& agentManager, 00048 const std::string& uniqueName, const std::string& className); 00049 00051 virtual ~DtVrlinkDriver(); 00052 00054 virtual const std::string& className() const; 00055 00057 virtual bool observersPublished() const; 00058 00060 virtual void setObserversPublished(bool isPublished); 00061 00063 virtual bool viewControlEnabled() const; 00064 00066 virtual void setViewControlEnabled(bool enabled); 00067 00069 virtual void queueSimulationFunction(const boost::function<void ()>& function); 00070 00072 bool useThreadFlag() const 00073 { 00074 return myUseThreadFlag; 00075 } 00076 00077 DtConnection* connection() 00078 { 00079 return myConnection; 00080 } 00081 00083 boost::signal<void (DtConnection*)> signal_simulationCreated; 00084 00086 boost::signal<void (DtConnection*)> signal_simulationAboutToBeDestroyed; 00087 00088 protected: 00089 00091 virtual DtConnection* createConnection() = 0; 00092 00095 virtual bool onStart(); 00096 00099 virtual bool onStop(); 00100 00102 virtual void run(); 00103 00105 void startPublishingObservers(); 00106 00108 void stopPublishingObservers(); 00109 00112 virtual bool onTick(); 00113 00116 void startThread(); 00117 00120 void stopThread(); 00121 00123 void setConnectionState( bool state ); 00124 00126 virtual void slot_displayEngineAdded( const DtDeRecord& igRecord ); 00127 00129 00131 virtual void connectToDynamicSignals(); 00132 00135 virtual void disconnectFromDynamicSignals(); 00136 00137 virtual void slot_onViewChanged( 00138 DtViewStateProcessor::ObserverAction& action); 00139 00140 virtual void slot_onCurrentSelectionChanged( 00141 const DtSelectionManager::IdSet& selected, 00142 const DtSelectionManager::IdSet& deselected); 00143 00144 virtual void slot_onVertexSelected( const DtUniqueID& selected, 00145 const DtUniqueID& parentOfSelected); 00146 00147 virtual void slot_onVertexDeselected( const DtUniqueID& deselected, 00148 const DtUniqueID& parentOfDeselected); 00149 00150 virtual void slot_onEntityInfoToggled( 00151 const DtSelectionManager::IdSet& entityIds); 00152 00155 virtual void slot_onEntityIndicatorMouseDown(DtMouseState& mouseState, 00156 const DtUniqueID& id, const std::string& displayEngineName, 00157 const std::string& windowName, const std::string& channelName); 00158 00159 virtual void slot_onEntityIndicatorMouseUp(DtMouseState& mouseState, 00160 const DtUniqueID& id, const std::string& displayEngineName, 00161 const std::string& windowName, const std::string& channelName); 00162 00163 virtual void slot_onEntityIndicatorMouseDblClick(DtMouseState& mouseState, 00164 const DtUniqueID& id, const std::string& displayEngineName, 00165 const std::string& windowName, const std::string& channelName); 00166 00169 virtual void slot_onTacticalGraphicIndicatorMouseDown( 00170 DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName, 00171 const std::string& windowName, 00172 const std::string& channelName); 00173 00174 virtual void slot_onTacticalGraphicIndicatorMouseUp( 00175 DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName, 00176 const std::string& windowName, 00177 const std::string& channelName); 00178 00179 virtual void slot_onTacticalGraphicIndicatorMouseDblClick( 00180 DtMouseState& mouseState, const DtUniqueID& id, const std::string& displayEngineName, 00181 const std::string& windowName, 00182 const std::string& channelName); 00183 00185 virtual void slot_onCoordinateSystemChanged( 00186 const std::string& coordinateSystem, 00187 const std::string& coordinateParameters ); 00188 00190 virtual void slot_onObserverObjectAttached( 00191 const std::string& observerName, DtUniqueID id); 00192 00194 virtual void slot_onObserverDetached(const std::string& observerName); 00195 00197 virtual void attachObserverObject(const std::string& observerName, 00198 DtUniqueID id); 00199 00201 virtual void toggleEntitySelected(const DtUniqueID& id); 00202 00203 virtual void performObserverAction( 00204 DtViewStateProcessor::ObserverAction& action); 00205 00207 00208 virtual void slot_onObserverDestroyed(DtObserver* observer); 00209 00210 virtual void slot_onObserverCreated(DtObserver* observer); 00211 00213 virtual void startPublishingObserver( DtObserver* observer ); 00214 00216 virtual void stopPublishingObserver( DtObserver* observer ); 00217 00219 virtual void updateObservers(); 00220 00221 void indicatorMouseDown(DtMouseState& mouseState, 00222 const DtUniqueID& id, const std::string& displayEngineName, 00223 const std::string& windowName, const std::string& channelName); 00224 00225 void indicatorMouseUp(DtMouseState& mouseState, 00226 const DtUniqueID& id, const std::string& displayEngineName, 00227 const std::string& windowName, const std::string& channelName); 00228 00229 void indicatorMouseDblClick(DtMouseState& mouseState, 00230 const DtUniqueID& id, const std::string& displayEngineName, 00231 const std::string& windowName, const std::string& channelName); 00232 00233 typedef DtLockedBufferedQueue<boost::function<void ()> > FunctionCallQueue; 00234 typedef std::vector<boost::function<void ()> > FunctionCallList; 00235 00236 enum FunctionType {Create, Update, Destroy}; 00237 00239 virtual void runFunctionQueue(FunctionCallQueue& queue); 00240 00241 protected: 00242 00243 //Main thread variables. 00244 std::string myClassName; 00245 00247 //Cross thread variables. They are used between the two threads for 00248 //communication. 00249 bool myUseThreadFlag; 00250 DtThreadStart* myStart; 00251 DtThread* myThread; 00252 00253 FunctionCallQueue mySimulationThreadFunctions; 00254 FunctionCallQueue myDriverThreadFunctions; 00255 DtAsynchronousAgentManager* myAsynchronousInterface; 00257 00258 DtConnection* myConnection; 00259 DtAsynchronousEventQueue* myAsynchronousEventQueue; 00260 bool myConnectionState; 00261 00262 DtSignalConnectionManager myDynamicSignals; 00263 00264 double myObserverUpdateTimeInterval; 00265 double myLastObserverUpdateTime; 00266 bool myObserversPublished; 00267 bool myViewControlEnabled; 00268 00269 DtSelectionManager& mySelectionManager; 00270 00271 }; 00272 }