VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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:
48  typedef boost::function< void ( DtEnvironmentStateView* )> ProcessEnvStateFunction;
49 
50  public:
51 
53  {
54  AllowNone = 0,
55  AllowLocalObjects = 0x00000001,
56  AllowPublishedObjects = 0x00000002,
57  AllowAll = AllowLocalObjects | AllowPublishedObjects
58  };
59 
60  public:
61 
64 
67 
69  bool creatingObject() const;
70 
72  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
73 
74  public:
76  virtual void setAlwaysCreateLocal(bool);
77  virtual bool alwaysCreateLocal() const;
78 
80  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
81 
84  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
85  virtual void removeObjectManipulationHandler(const DtEntityType&);
86 
88  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
89 
91  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
92 
94  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
95 
98  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
99  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
100 
104  virtual bool isEditable(const makVrv::DtUniqueID&, const std::string& keywordsToCheck = "noedit") const;
105  virtual void setEditable(const makVrv::DtUniqueID&, bool);
106 
108  virtual bool hasKeyword(const std::string& keyword, makVrv::DtUniqueID id) const;
109 
111  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
112 
114  virtual bool isEditingOrCreating() const;
115 
117  virtual bool isBoxObject(const DtEntityType&, const std::string& keywords) const;
118 
122  virtual void createValidSelection(makVrv::DtSelectionManager::IdSet&, bool& changed) const;
123 
127  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&, const std::string& keywords) const;
128  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
129 
131  virtual bool isCreatingProp() const;
132 
135  virtual bool isDestroyingProp() const;
136  virtual void setIsDestroyingProp(bool);
137 
138  protected:
139 
141  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
142 
144  virtual void slot_onEventProcessorRemoved(DtVrfObjectManipulationHandlerBaseClass*);
145 
147  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
148 
149  virtual void slot_onCreateObject(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
150 
152  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
153 
154  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
155 
156  virtual void cleanup();
157 
159  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
160 
162  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
163 
164  public:
165 
167  virtual void mapEntityTypeToVertexEditingType(const DtEntityType& from, const DtEntityType& to);
168  virtual DtEntityType mapToVertexEditingType(const DtEntityType& from) const;
169  virtual void removeToVertexEditingType(const DtEntityType& from);
170 
179  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
180  const std::string& keywords = "");
181 
183  virtual void setLocation(const DtVector& loc);
184 
186  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
187 
189  virtual void stop();
190 
191  public:
193  boost::signal<void (bool&)> signal_deleteSelected;
194 
196  boost::signal<void ()> signal_selectionRestored;
197 
199  boost::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToDeletePoint;
200 
202  boost::signal<void (int, DtEnvironmentStateView*, DtVector&)> signal_aboutToAddPoint;
203 
204  boost::signal<void ()> signal_stopped;
205  boost::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
206  boost::signal<void (const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&)> signal_createObject;
207 
208  boost::signal<void ()> signal_creatingTerrainProp;
209  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
210 
211  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
212  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
213 
214  //Sent by event processor when an item is double clicked that does not have an object type to edit
215  boost::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
216 
217  boost::signal<void ()> signal_eventProcessorRemoved;
218 
219  public:
220 
222 
223  virtual void setAllowEditing(bool b);
224  virtual void setAllowEditingOf(AllowEditingOf);
225 
226  virtual bool allowEditing() const;
227  virtual bool allowLocalObjectsEditing() const;
228  virtual bool allowPublishedObjectsEditing() const;
229 
230  AllowEditingOf allowEditingOf() const { return myAllowEditingOf; };
231 
235  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
236  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
237 
244  virtual void editSelectedObjects( const makVrv::DtSelectionManager::IdSet& objects,
245  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
246 
250  virtual void setEditStartedByDoubleClick(bool);
251 
253  virtual void deleteSelected();
254  virtual void deleteProp(makVrv::DtUniqueID id);
255 
256  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
257  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
258  const DtVector& dbLocation );
259 
260  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
261 
262  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
263  const DtVector& dbLocation );
264 
265  virtual void addVertexBeforeSelected();
266 
267  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
268 
269  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
270  const DtVector& dbLocation );
271 
272  virtual void addVertexAfterSelected();
273 
275  virtual int indexOfVertex( DtEnvironmentStateView* shapeStateView,
276  const DtVector& dbVtxLocation ) const;
277 
280  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
281  DtVector& dbLocation ) const;
282 
288  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
289  ProcessEnvStateFunction* processor );
290 
292  virtual void setWaitTimeAfterComplete(double);
293  virtual double waitTimeAfterComplete() const;
294 
296  virtual void setLocalWaitTimeAfterComplete(double);
297  virtual double localWaitTimeAfterComplete() const;
298 
300  virtual double waitTimeAfterComplete(makVrv::DtUniqueID) const;
301 
303  virtual bool isEditing(makVrv::DtUniqueID id) const;
304 
305  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
306  boost::signal<void (DtEntityType, DtEditingType)> signal_editingObjectByEntityType;
307  boost::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
308 
309  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
310  boost::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
311 
312  boost::signal<void ()> signal_editStopped;
313  boost::signal<void ()> signal_editingNotAllowed;
314 
315  protected:
316 
317  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
318 
319  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
320  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
321 
322  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
323  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
324 
325  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
326  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
327 
328  virtual void sessionStatusChanged(int);
329 
330  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
331 
332  virtual void slot_onTick();
333 
334  virtual void slot_onAttributesChanged(
335  const makVrv::DtElementData::EntryAttributesList& signalList );
336 
337  virtual bool isOnIdList( makVrv::DtUniqueID id,
338  const makVrv::DtSelectionManager::IdSet& list );
339 
340  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
341 
342  virtual DtVrfObjectManipulationHandlerBaseClass* vertexEditingHandler(makVrv::DtUniqueID principalID) const;
343  virtual DtVrfObjectManipulationHandlerBaseClass* editingHandlerFor(makVrv::DtUniqueID principalID) const;
344 
345  virtual void cacheVisibleObjects(const makVrv::DtSelectionManager::IdSet&);
346 
347  public:
348  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
349  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
350  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
351 
353  virtual bool canEditVertex(const DtEntityType& t, makVrv::DtUniqueID parentID, makVrv::DtUniqueID vertexID) const;
354 
355  protected:
362 
367 
368  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
370 
371  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
373 
374  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
376 
379 
380  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
381 
383 
386  };
387 
390  {
391 
392  public:
395  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
396 
398  static void registerInstance( makVrv::DtDe& de,
400 
402  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
403  };
404 }

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)