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

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)