VR-Forces 4.2 Class Documentation
DtVrfObjectManipulationManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 #include <vrfGuiCore/vrfGuiCore.h>
17 #include <vrvUtil/DtVirtualBaseClass.h>
18 #include <vrvCore/DtUniqueID.h>
19 #include <vrvCore/DtSelectionManager.h>
20 #include <vrvCore/DtElementEntry.h>
21 
22 #include <boost/signal.hpp>
23 
24 namespace makVrv
25 {
26  class DtDe;
27  class DtInputDriver;
28  class DtMouseEvent;
29  class DtChannel;
30  class DtKeyEvent;
31  class DtObserver;
32 }
33 
34 namespace makVrf
35 {
36  class DtVrfObjectManipulationHandlerBaseClass;
37  class DtVrfEditManagerEventProcessor;
38 
40  class DT_DLL_VRFGUICORE DtVrfObjectManipulationManager : public makVrv::DtVirtualBaseClass
41  {
42  protected:
44  typedef boost::function< void ( DtEnvironmentStateView* )> ProcessEnvStateFunction;
45 
46  public:
48  {
49  Mouse = 0,
52  ObjectOrigin
53  };
54 
55  public:
56 
58  DtVrfObjectManipulationManager(makVrv::DtDe&);
59 
62 
64  bool creatingObject() const;
65 
67  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
68 
69  public:
71  virtual void setAlwaysCreateLocal(bool);
72  virtual bool alwaysCreateLocal() const;
73 
75  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
76 
79  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
80  virtual void removeObjectManipulationHandler(const DtEntityType&);
81 
83  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
84 
86  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
87 
89  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
90 
93  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
94  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
95 
99  virtual bool isEditable(const makVrv::DtUniqueID&) const;
100  virtual void setEditable(const makVrv::DtUniqueID&, bool);
101 
103  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
104 
106  virtual bool isEditingOrCreating() const;
107 
108  protected:
109 
111  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
112 
114  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
115 
116  virtual void slot_onCreateObject(const DtEntityType&, std::string, int, const std::vector<DtVector>&,double entityHeading, bool clamp, bool isAggregated, std::string userData );
117 
119  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
120 
122  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&) const;
123  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
124 
125  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
126 
127  virtual void cleanup();
128 
130  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
131 
133  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
134 
135  public:
144  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
145  const std::string& keywords = "");
146 
148  virtual void setLocation(const DtVector& loc);
149 
151  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
152 
154  virtual void stop();
155 
156  public:
158  boost::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToDeletePoint;
159 
161  boost::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToAddPoint;
162 
163  boost::signal<void ()> signal_stopped;
164  boost::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
165  boost::signal<void (const DtEntityType&, std::string, int, const std::vector<DtVector>&,double,bool, bool, std::string )> signal_createObject;
166 
167  boost::signal<void ()> signal_creatingTerrainProp;
168  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
169 
170  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
171  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
172 
173  //Sent by event processor when an item is double clicked that does not have an object type to edit
174  boost::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
175  public:
176 
177  bool editingObjects() const;
178  void setAllowEditing(bool b);
179  bool allowEditing() const;
180 
184  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
185  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
186 
188  virtual void deleteSelected();
189  virtual void deleteProp(makVrv::DtUniqueID id);
190 
191  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
192  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
193  const DtVector& dbLocation );
194 
195  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
196 
197  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
198  const DtVector& dbLocation );
199 
200  virtual void addVertexBeforeSelected();
201 
202  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
203 
204  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
205  const DtVector& dbLocation );
206 
207  virtual void addVertexAfterSelected();
208 
210  virtual int indexOfVertex( DtEnvironmentStateView* shapeStateView,
211  const DtVector& dbVtxLocation ) const;
212 
215  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
216  DtVector& dbLocation ) const;
217 
223  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
224  ProcessEnvStateFunction* processor );
225 
227  virtual void setWaitTimeAfterComplete(double);
228  virtual double waitTimeAfterComplete() const;
229 
230  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
231  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
232 
233  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
234  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
235 
236  boost::signal<void ()> signal_editStopped;
237  boost::signal<void ()> signal_editingNotAllowed;
238 
239  protected:
240 
241  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
242 
243  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
244  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
245 
246  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
247  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
248 
249  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
250  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
251 
252  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
253 
254  virtual void slot_onTick();
255 
256  virtual void slot_onAttributesChanged(
257  const makVrv::DtElementData::EntryAttributesList& signalList );
258 
259  virtual bool isOnIdList( makVrv::DtUniqueID id,
260  const makVrv::DtSelectionManager::IdSet& list );
261 
262  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
263 
264  public:
265  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
266  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
267  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
268 
269  protected:
270  makVrv::DtDe& myDe;
275 
276  makVrv::DtSelectionManager::IdSet mySavedSelectionState;
277  makVrv::DtSelectionManager::IdSet myRemainingSavedSelections;
278 
279  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
281 
282  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
284 
285  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
287 
289 
290  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
291  };
292 
294  public makVrv::DtVirtualBaseClass
295  {
296 
297  public:
300  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
301 
303  static void registerInstance( makVrv::DtDe& de,
305 
307  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
308  };
309 }

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)