VR-Forces 4.3 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 
120  protected:
121 
123  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
124 
126  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
127 
128  virtual void slot_onCreateObject(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
129 
131  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
132 
136  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&, const std::string& keywords) const;
137  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
138 
139  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
140 
141  virtual void cleanup();
142 
144  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
145 
147  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
148 
149  public:
158  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
159  const std::string& keywords = "");
160 
162  virtual void setLocation(const DtVector& loc);
163 
165  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
166 
168  virtual void stop();
169 
170  public:
172  boost::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToDeletePoint;
173 
175  boost::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToAddPoint;
176 
177  boost::signal<void ()> signal_stopped;
178  boost::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
179  boost::signal<void (const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&)> signal_createObject;
180 
181  boost::signal<void ()> signal_creatingTerrainProp;
182  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
183 
184  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
185  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
186 
187  //Sent by event processor when an item is double clicked that does not have an object type to edit
188  boost::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
189  public:
190 
192 
193  virtual void setAllowEditing(bool b);
194  virtual void setAllowEditingOf(AllowEditingOf);
195 
196  virtual bool allowEditing() const;
197  virtual bool allowLocalObjectsEditing() const;
198  virtual bool allowPublishedObjectsEditing() const;
199 
203  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
204  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
205 
212  virtual void editSelectedObjects( const makVrv::DtSelectionManager::IdSet& objects,
213  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
214 
216  virtual void deleteSelected();
217  virtual void deleteProp(makVrv::DtUniqueID id);
218 
219  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
220  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
221  const DtVector& dbLocation );
222 
223  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
224 
225  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
226  const DtVector& dbLocation );
227 
228  virtual void addVertexBeforeSelected();
229 
230  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
231 
232  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
233  const DtVector& dbLocation );
234 
235  virtual void addVertexAfterSelected();
236 
238  virtual int indexOfVertex( DtEnvironmentStateView* shapeStateView,
239  const DtVector& dbVtxLocation ) const;
240 
243  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
244  DtVector& dbLocation ) const;
245 
251  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
252  ProcessEnvStateFunction* processor );
253 
255  virtual void setWaitTimeAfterComplete(double);
256  virtual double waitTimeAfterComplete() const;
257 
258  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
259  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
260 
261  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
262  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
263 
264  boost::signal<void ()> signal_editStopped;
265  boost::signal<void ()> signal_editingNotAllowed;
266 
267  protected:
268 
269  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
270 
271  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
272  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
273 
274  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
275  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
276 
277  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
278  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
279 
280  virtual void sessionStatusChanged(int);
281 
282  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
283 
284  virtual void slot_onTick();
285 
286  virtual void slot_onAttributesChanged(
287  const makVrv::DtElementData::EntryAttributesList& signalList );
288 
289  virtual bool isOnIdList( makVrv::DtUniqueID id,
290  const makVrv::DtSelectionManager::IdSet& list );
291 
292  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
293 
294  virtual DtVrfObjectManipulationHandlerBaseClass* vertexEditingHandler(makVrv::DtUniqueID principalID) const;
295  virtual DtVrfObjectManipulationHandlerBaseClass* editingHandlerFor(makVrv::DtUniqueID principalID) const;
296 
297  public:
298  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
299  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
300  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
301 
303  virtual bool canEditVertex(const DtEntityType& t, makVrv::DtUniqueID parentID, makVrv::DtUniqueID vertexID) const;
304 
305  protected:
311 
314 
315  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
317 
318  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
320 
321  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
323 
325 
326  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
327 
329 
331  };
332 
335  {
336 
337  public:
340  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
341 
343  static void registerInstance( makVrv::DtDe& de,
345 
347  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
348  };
349 }

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)