VR-Forces 4.0.4 Class Documentation
include/vrfGuiCore/DtVrfObjectManipulationManager.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2011 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 /******************************************************************************
00006 ** $RCSfile: DtVrfObjectManipulationManager.h,v $ $Revision: 1.4 $ $State: Exp $
00007 ******************************************************************************/
00008 
00011 
00013 
00014 #pragma once
00015 
00016 #include <vrfGuiCore/vrfGuiCore.h>
00017 #include <vrfGuiCore/DtEnvironmentState.h>
00018 #include <vrfGuiCore/DtOrderedEntityTypeList.h>
00019 #include <vrfGuiCore/DtVrfObjectManipulationHandlerBaseClass.h>
00020 #include <vrvUtil/DtVirtualBaseClass.h>
00021 #include <vrvCore/DtUniqueID.h>
00022 #include <vrvCore/DtSelectionManager.h>
00023 #include <vrvCore/DtElementEntry.h>
00024 
00025 #include <boost/signal.hpp>
00026 
00027 namespace makVrv
00028 {
00029    class DtDe;
00030    class DtInputDriver;
00031    class DtMouseEvent;
00032    class DtChannel;
00033    class DtKeyEvent;
00034    class DtObserver;
00035 }
00036 
00037 namespace makVrf
00038 {
00039    class DtVrfObjectManipulationHandlerBaseClass;
00040    class DtVrfEditManagerEventProcessor;
00041 
00043    class DT_DLL_VRFGUICORE DtVrfObjectManipulationManager : public makVrv::DtVirtualBaseClass
00044    {
00045    protected:
00046       typedef DtOrderedEntityTypeList<DtVrfObjectManipulationHandlerCreatorInterface*>  VrfObjectManipulationCreators;
00047         typedef boost::function< void ( DtEnvironmentStateView* )> ProcessEnvStateFunction;
00048 
00049    public:
00050       enum DtEditingType 
00051       {
00052          Mouse = 0,
00053          Context,
00054          MousePositionOrigin
00055       };
00056 
00057    public:
00058 
00060       DtVrfObjectManipulationManager(makVrv::DtDe&);
00061 
00063       virtual ~DtVrfObjectManipulationManager();
00064 
00066       bool creatingObject() const;      
00067 
00069       DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
00070 
00071    public:
00072 
00074       static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
00075 
00078       virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
00079       virtual void removeObjectManipulationHandler(const DtEntityType&);
00080 
00082       virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
00083 
00085       virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
00086 
00088       virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
00089 
00092       virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
00093       virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
00094 
00098       virtual bool isEditable(const makVrv::DtUniqueID&) const;
00099       virtual void setEditable(const makVrv::DtUniqueID&, bool);
00100 
00102       virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
00103 
00105       virtual bool isEditingOrCreating() const;
00106 
00107    protected:
00108 
00110       virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
00111 
00113       virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
00114 
00115       virtual void slot_onCreateObject(const DtEntityType&, std::string, int, const std::vector<DtVector>&,double entityHeading, bool clamp, bool isAggregated, std::string userData );
00116 
00118       virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
00119 
00121       virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&) const;
00122       virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
00123 
00124       virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
00125 
00126       virtual void cleanup();
00127 
00129       virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
00130 
00132       virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
00133 
00134    public:
00138       virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal);
00139 
00141       virtual void setLocation(const DtVector& loc);
00142 
00144       virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
00145 
00147       virtual void stop();
00148 
00149    public:
00150       boost::signal<void ()> signal_stopped;
00151       boost::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
00152       boost::signal<void (const DtEntityType&, std::string, int, const std::vector<DtVector>&,double,bool, bool, std::string )> signal_createObject;
00153 
00154       boost::signal<void ()> signal_creatingTerrainProp;
00155       boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
00156        
00157       boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
00158       boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
00159 
00160       //Sent by event processor when an item is double clicked that does not have an object type to edit
00161       boost::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
00162     public:
00163 
00164       bool editingObjects() const;
00165       void setAllowEditing(bool b);
00166       bool allowEditing() const;
00167        
00171       virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
00172          makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
00173          
00175       virtual void deleteSelected();  
00176       virtual void deleteProp(makVrv::DtUniqueID id);
00177       
00178       virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
00179       virtual void deleteVertex( const makVrv::DtUniqueID& shapeId, 
00180          const DtVector& dbLocation );
00181       
00182       virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
00183       
00184       virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId, 
00185          const DtVector& dbLocation );
00186          
00187       virtual void addVertexBeforeSelected();
00188       
00189       virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
00190     
00191       virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId, 
00192          const DtVector& dbLocation );
00193          
00194       virtual void addVertexAfterSelected();
00195       
00197       virtual int indexOfVertex( DtEnvironmentStateView* shapeStateView, 
00198          const DtVector& dbVtxLocation ) const;
00199       
00202       virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId, 
00203          DtVector& dbLocation ) const;
00204          
00210       virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
00211        ProcessEnvStateFunction* processor );
00212          
00214       virtual void setWaitTimeAfterComplete(double);
00215       virtual double waitTimeAfterComplete() const;
00216 
00217       boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
00218       boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
00219          
00220       boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
00221       boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
00222 
00223       boost::signal<void ()> signal_editStopped;
00224       boost::signal<void ()> signal_editingNotAllowed;
00225 
00226    protected:
00227       
00228       virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
00229       
00230       virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView, 
00231          const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor  );
00232       
00233       virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView, 
00234          const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
00235          
00236       virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView, 
00237          const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
00238          
00239       virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler ); 
00240       
00241       virtual void slot_onTick();
00242       
00243       virtual void slot_onAttributesChanged( 
00244          const makVrv::DtElementData::EntryAttributesList& signalList );
00245          
00246       bool isOnIdList( makVrv::DtUniqueID id, 
00247          const makVrv::DtSelectionManager::IdSet& list );
00248 
00249       virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
00250 
00251    public:
00252       bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
00253       bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
00254       
00255    protected:
00256       makVrv::DtDe& myDe;
00257       VrfObjectManipulationCreators myManipulationHandlers;
00258       DtVrfObjectManipulationHandlerBaseClass* myCurrentObjectManipulationHandler;
00259       DtVrfEditManagerEventProcessor* myEventProcessor;
00260 
00261       makVrv::DtSelectionManager::IdSet mySavedSelectionState;
00262       makVrv::DtSelectionManager::IdSet myRemainingSavedSelections;
00263 
00264       typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
00265       EditableMap myEditableMap;
00266 
00267       typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
00268       KindToTypeMap myKindToTypeMap;
00269 
00270       typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
00271       TypeCreatorMap myTypeCreators;
00272 
00273       double myWaitTimeAfterComplete;
00274 
00275       std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
00276    };
00277 
00278    class DT_DLL_VRFGUICORE DtVrfObjectManipulationManagerCreator : 
00279       public makVrv::DtVirtualBaseClass
00280    {
00281 
00282    public:
00285       static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
00286 
00288       static void registerInstance( makVrv::DtDe& de, 
00289          DtVrfObjectManipulationManagerCreator* instance);     
00290       
00292       virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
00293    };
00294 }

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)