VR-Forces 4.1 Class Documentation
DtVrfObjectManipulationManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2011 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 /******************************************************************************
6 ** $RCSfile: DtVrfObjectManipulationManager.h,v $ $Revision: 1.4 $ $State: Exp $
7 ******************************************************************************/
8 
11 
13 
14 #pragma once
15 
16 #include <vrfGuiCore/vrfGuiCore.h>
21 #include <vrvCore/DtUniqueID.h>
23 #include <vrvCore/DtElementEntry.h>
24 
25 #include <boost/signal.hpp>
26 
27 namespace makVrv
28 {
29  class DtDe;
30  class DtInputDriver;
31  class DtMouseEvent;
32  class DtChannel;
33  class DtKeyEvent;
34  class DtObserver;
35 }
36 
37 namespace makVrf
38 {
39  class DtVrfObjectManipulationHandlerBaseClass;
40  class DtVrfEditManagerEventProcessor;
41 
44  {
45  protected:
47  typedef boost::function< void ( DtEnvironmentStateView* )> ProcessEnvStateFunction;
48 
49  public:
51  {
52  Mouse = 0,
54  MousePositionOrigin
55  };
56 
57  public:
58 
61 
64 
66  bool creatingObject() const;
67 
69  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
70 
71  public:
72 
74  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
75 
78  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
79  virtual void removeObjectManipulationHandler(const DtEntityType&);
80 
82  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
83 
85  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
86 
88  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
89 
92  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
93  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
94 
98  virtual bool isEditable(const makVrv::DtUniqueID&) const;
99  virtual void setEditable(const makVrv::DtUniqueID&, bool);
100 
102  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
103 
105  virtual bool isEditingOrCreating() const;
106 
107  protected:
108 
110  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
111 
113  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
114 
115  virtual void slot_onCreateObject(const DtEntityType&, std::string, int, const std::vector<DtVector>&,double entityHeading, bool clamp, bool isAggregated, std::string userData );
116 
118  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
119 
121  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&) const;
122  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
123 
124  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
125 
126  virtual void cleanup();
127 
129  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
130 
132  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
133 
134  public:
143  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
144  const std::string& keywords = "");
145 
147  virtual void setLocation(const DtVector& loc);
148 
150  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
151 
153  virtual void stop();
154 
155  public:
156  boost::signal<void ()> signal_stopped;
157  boost::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
158  boost::signal<void (const DtEntityType&, std::string, int, const std::vector<DtVector>&,double,bool, bool, std::string )> signal_createObject;
159 
160  boost::signal<void ()> signal_creatingTerrainProp;
161  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
162 
163  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
164  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
165 
166  //Sent by event processor when an item is double clicked that does not have an object type to edit
167  boost::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
168  public:
169 
170  bool editingObjects() const;
171  void setAllowEditing(bool b);
172  bool allowEditing() const;
173 
177  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
178  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
179 
181  virtual void deleteSelected();
182  virtual void deleteProp(makVrv::DtUniqueID id);
183 
184  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
185  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
186  const DtVector& dbLocation );
187 
188  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
189 
190  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
191  const DtVector& dbLocation );
192 
193  virtual void addVertexBeforeSelected();
194 
195  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
196 
197  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
198  const DtVector& dbLocation );
199 
200  virtual void addVertexAfterSelected();
201 
203  virtual int indexOfVertex( DtEnvironmentStateView* shapeStateView,
204  const DtVector& dbVtxLocation ) const;
205 
208  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
209  DtVector& dbLocation ) const;
210 
216  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
217  ProcessEnvStateFunction* processor );
218 
220  virtual void setWaitTimeAfterComplete(double);
221  virtual double waitTimeAfterComplete() const;
222 
223  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
224  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
225 
226  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
227  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
228 
229  boost::signal<void ()> signal_editStopped;
230  boost::signal<void ()> signal_editingNotAllowed;
231 
232  protected:
233 
234  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
235 
236  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
237  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
238 
239  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
240  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
241 
242  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
243  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
244 
245  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
246 
247  virtual void slot_onTick();
248 
249  virtual void slot_onAttributesChanged(
250  const makVrv::DtElementData::EntryAttributesList& signalList );
251 
252  virtual bool isOnIdList( makVrv::DtUniqueID id,
253  const makVrv::DtSelectionManager::IdSet& list );
254 
255  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
256 
257  public:
258  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
259  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
260  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
261 
262  protected:
267 
270 
271  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
273 
274  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
276 
277  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
279 
281 
282  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
283  };
284 
287  {
288 
289  public:
292  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
293 
295  static void registerInstance( makVrv::DtDe& de,
297 
299  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
300  };
301 }

Document ID: Generated on Tue Jan 29 18:21:16 EST 2013 from SVN revision 123193
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)