![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00010 00011 #pragma once 00012 00013 #include <vrfGuiCore/vrfGuiCore.h> 00014 #include <vrfGuiCore/DtVrfObjectFacadeInterface.h> 00015 #include <vrvCore/DtDe.h> 00016 #include <vrvCore/DtEntityState.h> 00017 #include <vrvCore/DtUniqueID.h> 00018 #include <vlutil/vlPerformanceStats.h> 00019 00020 #include <matrix/vlVector.h> 00021 #include <matrix/geodCoord.h> 00022 #include <vlpi/entityType.h> 00023 00024 #include <boost/signal.hpp> 00025 00026 namespace makVrv 00027 { 00028 class DtDe; 00029 class DtChannel; 00030 } 00031 00032 class DtEntityType; 00033 class DtString; 00034 00035 namespace makVrf 00036 { 00037 enum DtCreationSignalType 00038 { 00039 DtNoCreationSignal = 0, 00040 DtSignalCreationAndStop, 00041 DtSignalCreationAndContinue 00042 }; 00043 00044 class DtVrfObjectManipulationEventProcessor; 00045 00046 typedef makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState> DtVrlinkSimulatedBaseStateView; 00047 00051 class DT_DLL_VRFGUICORE DtVrfObjectManipulationHandlerBaseClass 00052 { 00053 public: 00054 typedef std::vector<DtVrfObjectFacadeInterface*> VrfObjectEditFacadeList; 00055 00056 public: 00057 DtVrfObjectManipulationHandlerBaseClass(makVrv::DtDe&); 00058 virtual ~DtVrfObjectManipulationHandlerBaseClass(); 00059 00060 public: 00061 00066 virtual bool createObject(const DtEntityType& entType, int force, 00067 DtCreationSignalType creationSignal=DtNoCreationSignal); 00068 00070 virtual bool createObject(const DtString& key, const DtString& associatedData, 00071 DtCreationSignalType creationSignal=DtNoCreationSignal); 00072 00076 virtual void editSelectedObjects( const makVrv::DtUniqueID& editId, 00077 makVrv::DtChannel& initiatingChannel, double waitTimeAfterComplete = 0. ); 00078 00080 virtual void setForce(int); 00081 int force() const; 00082 00084 virtual void setAllowCreationOnMouseClick(bool flag); 00085 00087 virtual bool allowCreationOnMouseClick() const; 00088 00090 virtual DtVector clampToGround(const DtVector&) const; 00091 virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&) const; 00092 00094 virtual void setAttachObjectToMouse(bool); 00095 00097 virtual bool attachObjectToMouse() const; 00098 00100 virtual void setHeading(double value); 00101 virtual double heading() const; 00102 00104 virtual void setLocation(const DtVector& loc); 00105 virtual void setLocation(const DtVector& loc, double altAboveGround); 00106 00108 virtual void stop(); 00109 00111 virtual void deferredStop(); 00112 00114 virtual bool createVrfObject() = 0; 00115 00117 virtual bool modifyVrfObjects() = 0; 00118 00120 virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0) = 0; 00121 00123 virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView, 00124 makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView) = 0; 00125 00127 virtual void initializeEventProcessor(); 00128 00130 virtual void setOverlay(const std::string& name); 00131 00133 virtual std::string getNextCreatingName(bool includeCurrent = false); 00134 00136 virtual void setAltitudeAboveGL( double alt ); 00137 00139 virtual void setAltitudeAboveSL( double alt ); 00140 00141 virtual void setAltitudeClampType( DtAltitudeClampType type ); 00142 00143 void setCreating(bool b) 00144 { 00145 myCreating = b; 00146 } 00147 00148 bool creating() const 00149 { 00150 return myCreating; 00151 } 00152 00153 virtual DtVrfObjectFacadeInterface* principalObjectImage() const; 00154 virtual makVrv::DtUniqueID principalObjectID() const; 00155 00156 virtual void setUserData(const std::string& userData); 00157 virtual const std::string& userData() const; 00158 00159 virtual void slot_onComplete(); 00160 virtual void slot_onPlace(makVrv::DtUniqueID, const DtVector&, double altAboveGround); 00161 virtual void slot_onEditComplete(makVrv::DtUniqueID, const DtVector&, double altAboveGround); 00162 virtual void slot_onLocationChanged( const DtVector& location, double altAboveGround ); 00163 virtual void slot_onAltitudeIsDragging(bool); 00164 00165 virtual void hideObject( const makVrv::DtUniqueID& id, bool hide ); 00166 00168 virtual void setObjectName(const std::string& name); 00169 00173 virtual double groundHeight( const DtVector& localPosition, DtVector* localGround = 0 ) const; 00174 00175 virtual void setAltitudeAllowed(bool); 00176 bool altitudeAllowed() const; 00177 00178 virtual const std::string& objectName() const; 00179 00182 virtual void setAnchorToOrigin(bool); 00183 virtual bool anchorToOrigin() const; 00184 00186 virtual DtVector localLocation(); 00187 00188 virtual DtVector convertGeocentricToGround(const DtVector& geoc, double& altitude) const; 00189 00190 virtual void setShowPropertiesDialogBeforeCreate(bool); 00191 virtual bool showPropertiesDialogBeforeCreate() const; 00192 00193 virtual bool waitingToStop() const; 00194 00196 virtual void cancel(); 00197 00202 boost::signal<void (bool)> signal_showPropertiesDialog; 00203 00205 boost::signal<void (bool)> signal_attachObjectToMouse; 00206 00208 boost::signal<void (DtVrfObjectFacadeInterface*, DtVrlinkSimulatedBaseStateView* editStateView)> signal_preVisualization; 00209 00212 boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated; 00213 00215 boost::signal<void (const DtEntityType&, int)> signal_started; 00216 00218 boost::signal<void ( const DtEntityType&, std::string, int, const std::vector<DtVector>&, double, bool, bool, std::string )> signal_createObject; 00219 00221 boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp; 00222 00224 boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_stopped; 00225 00227 boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_complete; 00228 00230 boost::signal<void (const DtVector& )> signal_locationChanged; 00231 00233 boost::signal<void (double)> signal_headingChanged; 00234 00236 boost::signal<void (double)> signal_altitudeChanged; 00237 00239 boost::signal<void (const DtVector&)> signal_placement; 00240 00243 boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_restoreSelectionState; 00244 00246 boost::signal<void ()> signal_principalStateViewUpdated; 00247 00249 boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved; 00250 00251 protected: 00252 00254 virtual bool typeIsValidForEditingByHandler(const makVrv::DtElementEntry::ElementType&, const DtEntityType&) const; 00255 00256 virtual void slot_onAltitudeChanged(const DtVector&, double); 00257 00258 virtual void slot_onHeadingChanged( double heading ); 00259 00260 virtual void slot_onCancel(); 00261 00262 virtual std::string stripNumbers(const std::string& base) const; 00263 00264 virtual void warpMouseToLocation( makVrv::DtChannel* channel, const DtVector& location ) const ; 00265 00268 virtual void initializeEdit(); 00269 00270 virtual void slot_onPrincipalStateViewUpdated(DtVrlinkSimulatedBaseStateView* principalStateView, 00271 const makVrv::DtUniqueID& principalSceneObjectId ); 00272 00273 virtual void slot_onStateViewUpdated( DtVrlinkSimulatedBaseStateView* editStateView, makVrv::DtUniqueID sceneObjectId, 00274 DtVrlinkSimulatedBaseStateView* principalStateView); 00275 00277 virtual bool centerOn(const makVrv::DtUniqueID& id, DtVector* centerPos = 0, const DtVector* centerHere = 0) const; 00278 00279 virtual void setObjectImageAsAnchor(DtVrfObjectFacadeInterface* objectImage, const DtVector& geocLocation, 00280 bool resetOrigin = false); 00281 00282 virtual void setObjectImageRelativeToPrincipal(DtVrfObjectFacadeInterface* objectImage, 00283 const DtVector& thisGeocLocation, const DtTaitBryan& thisGeocOrientation, 00284 const DtVector& prGeocLocation, const DtTaitBryan& prGeocOrientation); 00285 00286 virtual void initializeInterfaceForEdit(DtVrfObjectFacadeInterface*, makVrv::DtUniqueID, 00287 const makVrv::DtVrlinkSimulatedBaseState&, const DtVector& principalLocation, const DtTaitBryan& principalOrientation); 00288 virtual void calculateAnchor(const DtVector& localAnchor); 00289 virtual void calculateAnchorBasedOnMousePosition(makVrv::DtChannel& channel); 00290 00291 protected: 00292 bool myCreating; 00293 bool myAttachObjectToMouse; 00294 int myForce; 00295 makVrv::DtDe& myDe; 00296 bool mySignalManipulation; 00297 bool myAllowCreationOnClick; 00298 std::string myObjectName; 00299 std::string myOverlay; 00300 00301 DtVrfObjectManipulationEventProcessor* myEventProcessor; 00302 bool myAltitudeIsDragging; 00303 bool myAltitudeAllowed; 00304 makVrv::DtChannel* myHiddenChannel; 00305 00306 std::string myUserData; 00307 00308 std::string myKey; 00309 std::string myKeyData; 00310 DtCreationSignalType mySignalCreation; 00311 00312 VrfObjectEditFacadeList myObjectImages; 00313 DtReferenceEllipsoid* myReferenceForConversion; 00314 DtAltitudeClampType myAltitudeClampType; 00315 00316 bool myOverlayChanged; 00317 bool myShowPropertiesDialogBeforeCreate; 00318 DtGeodeticCoord myAnchorPosition; 00319 bool myAnchorToOrigin; 00320 DtTimedSection* myDeferredStopTimer; 00321 double myTotalTimeElapsed; 00322 double myDeferStopFor; 00323 }; 00324 00325 class DtVrfObjectManipulationHandlerCreatorInterface 00326 { 00327 public: 00328 virtual DtVrfObjectManipulationHandlerBaseClass* create() const = 0; 00329 }; 00330 00331 template <typename T> 00332 class DtVrfObjectManipulationHandlerCreator : public DtVrfObjectManipulationHandlerCreatorInterface 00333 { 00334 public: 00335 DtVrfObjectManipulationHandlerCreator(makVrv::DtDe& de) 00336 : myDe(de) 00337 { 00338 } 00339 00340 virtual ~DtVrfObjectManipulationHandlerCreator() 00341 { 00342 } 00343 00344 virtual DtVrfObjectManipulationHandlerBaseClass* create() const 00345 { 00346 return new T(myDe); 00347 } 00348 00349 protected: 00350 makVrv::DtDe& myDe; 00351 }; 00352 00353 }