VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vrfObjectManipulationManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2014 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 #include <vrfGuiCore/vrfGuiCore.h>
19 #include <vrvCore/DtUniqueID.h>
21 #include <vrvCore/DtElementEntry.h>
22 
23 #include <boost/signal.hpp>
24 
25 namespace makVrv
26 {
27  class DtDe;
28  class DtInputDriver;
29  class DtMouseEvent;
30  class DtChannel;
31  class DtKeyEvent;
32  class DtObserver;
33 }
34 
35 #define DtMultipleObjectEditorManipulationHandlerType DtEntityType(300, 300, 300, 300, 300, 300, 300)
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:
50 
52  {
53  AllowNone = 0,
54  AllowLocalObjects = 0x00000001,
55  AllowPublishedObjects = 0x00000002,
56  AllowAll = AllowLocalObjects | AllowPublishedObjects
57  };
58 
59  public:
60 
63 
66 
68  bool creatingObject() const;
69 
71  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
72 
73  public:
75  virtual void setAlwaysCreateLocal(bool);
76  virtual bool alwaysCreateLocal() const;
77 
79  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
80 
83  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
84  virtual void removeObjectManipulationHandler(const DtEntityType&);
85 
87  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
88 
90  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
91 
93  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
94 
97  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
98  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
99 
103  virtual bool isEditable(const makVrv::DtUniqueID&) const;
104  virtual void setEditable(const makVrv::DtUniqueID&, bool);
105 
107  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
108 
110  virtual bool isEditingOrCreating() const;
111 
113  virtual bool isBoxObject(const DtEntityType&, const std::string& keywords) const;
114 
118  virtual void createValidSelection(makVrv::DtSelectionManager::IdSet&, bool& changed) const;
119 
123  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&, const std::string& keywords) const;
124  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
125 
127  virtual bool isCreatingProp() const;
128 
131  virtual bool isDestroyingProp() const;
132  virtual void setIsDestroyingProp(bool);
133 
134  protected:
135 
137  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
138 
140  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
141 
142  virtual void slot_onCreateObject(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
143 
145  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
146 
147  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
148 
149  virtual void cleanup();
150 
152  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
153 
155  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
156 
157  public:
166  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
167  const std::string& keywords = "");
168 
170  virtual void setLocation(const DtVector& loc);
171 
173  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
174 
176  virtual void stop();
177 
178  public:
180  boost::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToDeletePoint;
181 
183  boost::signal<void (int, DtEnvironmentStateView*, DtVector&)> signal_aboutToAddPoint;
184 
185  boost::signal<void ()> signal_stopped;
186  boost::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
187  boost::signal<void (const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&)> signal_createObject;
188 
189  boost::signal<void ()> signal_creatingTerrainProp;
190  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
191 
192  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
193  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
194 
195  //Sent by event processor when an item is double clicked that does not have an object type to edit
196  boost::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
197  public:
198 
200 
201  virtual void setAllowEditing(bool b);
202  virtual void setAllowEditingOf(AllowEditingOf);
203 
204  virtual bool allowEditing() const;
205  virtual bool allowLocalObjectsEditing() const;
206  virtual bool allowPublishedObjectsEditing() const;
207 
211  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
212  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
213 
220  virtual void editSelectedObjects( const makVrv::DtSelectionManager::IdSet& objects,
221  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
222 
226  virtual void setEditStartedByDoubleClick(bool);
227 
229  virtual void deleteSelected();
230  virtual void deleteProp(makVrv::DtUniqueID id);
231 
232  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
233  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
234  const DtVector& dbLocation );
235 
236  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
237 
238  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
239  const DtVector& dbLocation );
240 
241  virtual void addVertexBeforeSelected();
242 
243  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
244 
245  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
246  const DtVector& dbLocation );
247 
248  virtual void addVertexAfterSelected();
249 
251  virtual int indexOfVertex( DtEnvironmentStateView* shapeStateView,
252  const DtVector& dbVtxLocation ) const;
253 
256  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
257  DtVector& dbLocation ) const;
258 
264  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
265  ProcessEnvStateFunction* processor );
266 
268  virtual void setWaitTimeAfterComplete(double);
269  virtual double waitTimeAfterComplete() const;
270 
272  virtual bool isEditing(makVrv::DtUniqueID id) const;
273 
274  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
275  boost::signal<void (DtEntityType, DtEditingType)> signal_editingObjectByEntityType;
276  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
277 
278  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
279  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
280 
281  boost::signal<void ()> signal_editStopped;
282  boost::signal<void ()> signal_editingNotAllowed;
283 
284  protected:
285 
286  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
287 
288  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
289  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
290 
291  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
292  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
293 
294  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
295  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
296 
297  virtual void sessionStatusChanged(int);
298 
299  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
300 
301  virtual void slot_onTick();
302 
303  virtual void slot_onAttributesChanged(
304  const makVrv::DtElementData::EntryAttributesList& signalList );
305 
306  virtual bool isOnIdList( makVrv::DtUniqueID id,
307  const makVrv::DtSelectionManager::IdSet& list );
308 
309  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
310 
311  virtual DtVrfObjectManipulationHandlerBaseClass* vertexEditingHandler(makVrv::DtUniqueID principalID) const;
312  virtual DtVrfObjectManipulationHandlerBaseClass* editingHandlerFor(makVrv::DtUniqueID principalID) const;
313 
314  public:
315  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
316  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
317  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
318 
320  virtual bool canEditVertex(const DtEntityType& t, makVrv::DtUniqueID parentID, makVrv::DtUniqueID vertexID) const;
321 
322  protected:
328 
332 
333  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
335 
336  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
338 
339  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
341 
343 
344  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
345 
347 
350  };
351 
354  {
355 
356  public:
359  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
360 
362  static void registerInstance( makVrv::DtDe& de,
364 
366  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
367  };
368 }

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)