VR-Forces 4.1.1 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>
18 #include <vrvCore/DtUniqueID.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 
41  {
42  protected:
44  typedef boost::function< void ( DtEnvironmentStateView* )> ProcessEnvStateFunction;
45 
46  public:
48  {
49  Mouse = 0,
52  ObjectOrigin
53  };
54 
55  public:
56 
59 
62 
64  bool creatingObject() const;
65 
67  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
68 
69  public:
70 
72  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
73 
76  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
77  virtual void removeObjectManipulationHandler(const DtEntityType&);
78 
80  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
81 
83  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
84 
86  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
87 
90  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
91  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
92 
96  virtual bool isEditable(const makVrv::DtUniqueID&) const;
97  virtual void setEditable(const makVrv::DtUniqueID&, bool);
98 
100  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
101 
103  virtual bool isEditingOrCreating() const;
104 
105  protected:
106 
108  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
109 
111  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
112 
113  virtual void slot_onCreateObject(const DtEntityType&, std::string, int, const std::vector<DtVector>&,double entityHeading, bool clamp, bool isAggregated, std::string userData );
114 
116  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
117 
119  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&) const;
120  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
121 
122  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
123 
124  virtual void cleanup();
125 
127  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
128 
130  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
131 
132  public:
141  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
142  const std::string& keywords = "");
143 
145  virtual void setLocation(const DtVector& loc);
146 
148  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
149 
151  virtual void stop();
152 
153  public:
154  boost::signal<void ()> signal_stopped;
155  boost::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
156  boost::signal<void (const DtEntityType&, std::string, int, const std::vector<DtVector>&,double,bool, bool, std::string )> signal_createObject;
157 
158  boost::signal<void ()> signal_creatingTerrainProp;
159  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
160 
161  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
162  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
163 
164  //Sent by event processor when an item is double clicked that does not have an object type to edit
165  boost::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
166  public:
167 
168  bool editingObjects() const;
169  void setAllowEditing(bool b);
170  bool allowEditing() const;
171 
175  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
176  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
177 
179  virtual void deleteSelected();
180  virtual void deleteProp(makVrv::DtUniqueID id);
181 
182  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
183  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
184  const DtVector& dbLocation );
185 
186  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
187 
188  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
189  const DtVector& dbLocation );
190 
191  virtual void addVertexBeforeSelected();
192 
193  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
194 
195  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
196  const DtVector& dbLocation );
197 
198  virtual void addVertexAfterSelected();
199 
201  virtual int indexOfVertex( DtEnvironmentStateView* shapeStateView,
202  const DtVector& dbVtxLocation ) const;
203 
206  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
207  DtVector& dbLocation ) const;
208 
214  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
215  ProcessEnvStateFunction* processor );
216 
218  virtual void setWaitTimeAfterComplete(double);
219  virtual double waitTimeAfterComplete() const;
220 
221  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
222  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
223 
224  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
225  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
226 
227  boost::signal<void ()> signal_editStopped;
228  boost::signal<void ()> signal_editingNotAllowed;
229 
230  protected:
231 
232  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
233 
234  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
235  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
236 
237  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
238  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
239 
240  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
241  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
242 
243  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
244 
245  virtual void slot_onTick();
246 
247  virtual void slot_onAttributesChanged(
248  const makVrv::DtElementData::EntryAttributesList& signalList );
249 
250  virtual bool isOnIdList( makVrv::DtUniqueID id,
251  const makVrv::DtSelectionManager::IdSet& list );
252 
253  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
254 
255  public:
256  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
257  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
258  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
259 
260  protected:
265 
268 
269  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
271 
272  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
274 
275  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
277 
279 
280  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
281  };
282 
285  {
286 
287  public:
290  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
291 
293  static void registerInstance( makVrv::DtDe& de,
295 
297  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
298  };
299 }

Document ID: Generated on Mon Apr 8 19:24:01 EDT 2013 from SVN revision 125877
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)