VR-Forces 4.10 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>
23 
24 #include <vrvUtil/signalslib.h>
25 
26 namespace makVrv
27 {
28  class DtDe;
29  class DtInputDriver;
30  class DtMouseEvent;
31  class DtChannel;
32  class DtKeyEvent;
33  class DtObserver;
34 }
35 
36 #define DtMultipleObjectEditorManipulationHandlerType DtEntityType(300, 300, 300, 300, 300, 300, 300)
37 
38 namespace makVrf
39 {
40  class DtVrfObjectManipulationHandlerBaseClass;
41  class DtVrfEditManagerEventProcessor;
42 
45  {
46  protected:
49  typedef boost::function< void ( DtEnvironmentStateView* )> ProcessEnvStateFunction;
50 
51  public:
52 
54  {
55  AllowNone = 0,
56  AllowLocalObjects = 0x00000001,
57  AllowPublishedObjects = 0x00000002,
58  AllowAll = AllowLocalObjects | AllowPublishedObjects
59  };
60 
61  public:
62 
65 
68 
70  bool creatingObject() const;
71 
73  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
74 
75  public:
77  virtual void setAlwaysCreateLocal(bool);
78  virtual bool alwaysCreateLocal() const;
79 
81  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
82 
85  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
86  virtual void removeObjectManipulationHandler(const DtEntityType&);
87 
89  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
90 
92  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
93 
95  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
96 
99  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
100  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
101 
105  virtual bool isEditable(const makVrv::DtUniqueID&, const std::string& keywordsToCheck = "") const;
106  virtual void setEditable(const makVrv::DtUniqueID&, bool);
107 
109  virtual bool hasKeyword(const std::string& keyword, makVrv::DtUniqueID id) const;
110 
112  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
113 
115  virtual bool isEditingOrCreating() const;
117  virtual bool isBoxObject(const DtEntityType&, const std::string& keywords) const;
118 
119 
123  virtual void createValidSelection(makVrv::DtSelectionManager::IdSet&, bool& changed) const;
124 
128  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&, const std::string& keywords) const;
129  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
130 
132  virtual bool isCreatingProp() const;
133 
136  virtual bool isDestroyingProp() const;
137  virtual void setIsDestroyingProp(bool);
138 
140  virtual bool hasObjectFacade(makVrv::DtUniqueID) const;
141 
142  protected:
143 
145  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
146 
148  virtual void slot_onEventProcessorRemoved(DtVrfObjectManipulationHandlerBaseClass*);
149 
151  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
152 
153  virtual void slot_onCreateObject(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
154 
156  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
157 
158  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
159 
160  virtual void cleanup();
161 
163  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
164 
166  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
167 
168  public:
169 
171  virtual void mapEntityTypeToVertexEditingType(const DtEntityType& from, const DtEntityType& to);
172  virtual DtEntityType mapToVertexEditingType(const DtEntityType& from) const;
173  virtual void removeToVertexEditingType(const DtEntityType& from);
174 
183  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
184  const std::string& keywords = "");
185 
187  virtual void setLocation(const DtVector& loc);
188 
190  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
191 
193  virtual void stop();
194 
195  public:
197  boost::signals2::signal<void (bool&)> signal_deleteSelected;
198 
200  boost::signals2::signal<void ()> signal_selectionRestored;
201 
203  boost::signals2::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToDeletePoint;
204 
206  boost::signals2::signal<void (int, DtEnvironmentStateView*, DtVector&)> signal_aboutToAddPoint;
207 
208  boost::signals2::signal<void ()> signal_stopped;
209  boost::signals2::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
210  boost::signals2::signal<void (const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&)> signal_createObject;
211 
212  boost::signals2::signal<void ()> signal_creatingTerrainProp;
213  boost::signals2::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
214 
215  boost::signals2::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
216  boost::signals2::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
217 
218  //Sent by event processor when an item is double clicked that does not have an object type to edit
219  boost::signals2::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
220 
221  boost::signals2::signal<void ()> signal_eventProcessorRemoved;
222 
223  public:
224 
226 
227  virtual void setAllowEditing(bool b);
228  virtual void setAllowEditingOf(AllowEditingOf);
229 
230  virtual bool allowEditing() const;
231  virtual bool allowLocalObjectsEditing() const;
232  virtual bool allowPublishedObjectsEditing() const;
233 
234  AllowEditingOf allowEditingOf() const { return myAllowEditingOf; };
235 
239  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
240  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
241 
248  virtual void editSelectedObjects( const makVrv::DtSelectionManager::IdSet& objects,
249  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
250 
254  virtual void setEditStartedByDoubleClick(bool);
255 
257  virtual void setCreationEndedWithDoubleClick(bool creationEndedWithDoubleClick);
258 
261  virtual bool isDoubleClickSupportedForCurrentObject();
262 
264  virtual bool isCurrentObjectValidForCreation();
265 
267  virtual void deleteSelected();
268  virtual void deleteProp(makVrv::DtUniqueID id);
269 
270  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
271  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
272  const DtVector& dbLocation );
273 
274  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
275 
276  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
277  const DtVector& dbLocation );
278 
279  virtual void addVertexBeforeSelected();
280 
281  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
282 
283  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
284  const DtVector& dbLocation );
285 
286  virtual void addVertexAfterSelected();
287 
289  virtual int indexOfVertex( const DtEnvironmentStateView* shapeStateView,
290  const DtVector& dbVtxLocation ) const;
291 
294  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
295  DtVector& dbLocation ) const;
296 
302  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
303  ProcessEnvStateFunction* processor );
304 
306  virtual void setWaitTimeAfterComplete(double);
307  virtual double waitTimeAfterComplete() const;
308 
310  virtual void setLocalWaitTimeAfterComplete(double);
311  virtual double localWaitTimeAfterComplete() const;
312 
314  virtual double waitTimeAfterComplete(makVrv::DtUniqueID) const;
315 
317  virtual bool isEditing(makVrv::DtUniqueID id) const;
318 
319  virtual DtVrfObjectManipulationHandlerBaseClass* vertexEditingHandler(makVrv::DtUniqueID principalID) const;
320  virtual DtVrfObjectManipulationHandlerBaseClass* editingHandlerFor(makVrv::DtUniqueID principalID) const;
321 
322  boost::signals2::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
323  boost::signals2::signal<void (DtEntityType, DtEditingType)> signal_editingObjectByEntityType;
324  boost::signals2::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
325 
326  boost::signals2::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
327  boost::signals2::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
328 
329  boost::signals2::signal<void ()> signal_editStopped;
330  boost::signals2::signal<void ()> signal_editingNotAllowed;
331 
332  protected:
333 
334  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
335 
336  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
337  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
338 
339  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
340  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
341 
342  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
343  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
344 
345  virtual void sessionStatusChanged(int);
346 
347  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
348 
349  virtual void slot_onTick();
350 
351  virtual void slot_onAttributesChanged(
353 
354  virtual bool isOnIdList( makVrv::DtUniqueID id,
355  const makVrv::DtSelectionManager::IdSet& list );
356 
357  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
358 
359  virtual void cacheVisibleObjects(const makVrv::DtSelectionManager::IdSet&);
360 
361  public:
362  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
363  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
364  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
365 
367  virtual bool canEditVertex(const DtEntityType& t, makVrv::DtUniqueID parentID, makVrv::DtUniqueID vertexID) const;
368 
369  protected:
376 
381 
382  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
384 
385  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
387 
388  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
390 
393 
394  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
395 
397 
400  };
401 
404  {
405 
406  public:
409  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
410 
412  static void registerInstance( makVrv::DtDe& de,
414 
416  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
417  };
418 }
AllowEditingOf myAllowEditingOf
Definition: vrfObjectManipulationManager.h:396
bool myAlwaysCreateLocal
Definition: vrfObjectManipulationManager.h:375
Virtual base class.
Definition: DtVirtualBaseClass.h:19
boost::signals2::signal< void(makVrv::DtElementID)> signal_unhandledEdit
Definition: vrfObjectManipulationManager.h:219
boost::signals2::signal< void(const makVrv::DtUniqueID &, DtEditingType)> signal_editingObject
Definition: vrfObjectManipulationManager.h:322
TypeCreatorMap myTypeCreators
Definition: vrfObjectManipulationManager.h:389
boost::signals2::signal< void(const makVrv::DtUniqueID &, DtEditingType)> signal_editingTerrainProp
Definition: vrfObjectManipulationManager.h:324
makVrv::DtDe & myDe
Definition: vrfObjectManipulationManager.h:370
boost::signals2::signal< void()> signal_editStopped
Definition: vrfObjectManipulationManager.h:329
double myWaitTimeAfterComplete
Definition: vrfObjectManipulationManager.h:391
boost::unordered_map< int, makVrv::DtElementEntry::ElementType > KindToTypeMap
Definition: vrfObjectManipulationManager.h:385
Contains makVrv:DtSelectionManager class.
Definition: vrfObjectManipulationManager.h:402
KindToTypeMap myKindToTypeMap
Definition: vrfObjectManipulationManager.h:386
makVrv::DtSelectionManager::IdSet myRemainingSavedSelections
Definition: vrfObjectManipulationManager.h:378
bool myIsDestroyingProp
Definition: vrfObjectManipulationManager.h:399
DtEditingType
Definition: vrfObjectManipulationHandlerBaseClass.h:42
DtVrfEditManagerEventProcessor * myEventProcessor
Definition: vrfObjectManipulationManager.h:374
VertexEditingTypeMap myVertexEditingTypeMap
Definition: vrfObjectManipulationManager.h:372
boost::signals2::signal< void()> signal_eventProcessorRemoved
Definition: vrfObjectManipulationManager.h:221
#define DT_DLL_VRFGUICORE
Contains DLL export macros.
Definition: vrfGuiCore.h:25
The Master Scenario Settings Dialog.
Definition: vrfObjectManipulationManager.h:44
The abstract Channel Class.
Definition: DtChannel.h:30
boost::signals2::signal< void(const makVrv::DtSelectionManager::IdSet &, DtEditingType)> signal_editingTerrainProps
Definition: vrfObjectManipulationManager.h:327
boost::signals2::signal< void()> signal_selectionRestored
Signal when the selection has been restored to what it was before creation.
Definition: vrfObjectManipulationManager.h:200
makVrv::DtSelectionManager::IdSet mySavedSelectionState
Definition: vrfObjectManipulationManager.h:377
DtOrderedEntityTypeList< DtEntityType * > VertexEditingTypeMap
Definition: vrfObjectManipulationManager.h:48
boost::unordered_map< makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface * > TypeCreatorMap
Definition: vrfObjectManipulationManager.h:388
Contains makVrv::DtVirtualBaseClass class.
makVrv::DtSelectionManager::IdSet myObjectsEditing
Definition: vrfObjectManipulationManager.h:379
boost::signals2::signal< void()> signal_editingNotAllowed
Definition: vrfObjectManipulationManager.h:330
makVrv::DtSignalConnectionManager myAnnouncerSignals
Definition: vrfObjectManipulationManager.h:398
Definition: vrfObjectFacadeInterface.h:47
Definition: vrfObjectManipulationHandlerBaseClass.h:73
Definition: vrfObjectManipulationHandlerBaseClass.h:44
Definition: vrfObjectManipulationHandlerBaseClass.h:88
boost::signals2::signal< void(bool &)> signal_deleteSelected
Signal to delete the selected objects. Set handled to true if delete is handled.
Definition: vrfObjectManipulationManager.h:197
std::vector< EntryAttributes > EntryAttributesList
Definition: DtElementAttributeManager.h:43
This class&#39;s main responsibility is to handle keyboard and mouse events from OSG (Qt events are route...
Definition: DtInputDriver.h:43
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
boost::unordered_map< makVrv::DtUniqueID, bool > EditableMap
Definition: vrfObjectManipulationManager.h:382
boost::signals2::signal< void(DtEntityType, DtEditingType)> signal_editingObjectByEntityType
Definition: vrfObjectManipulationManager.h:323
VrfObjectManipulationCreators myManipulationHandlers
Definition: vrfObjectManipulationManager.h:371
ElementType
Definition: DtElementEntry.h:26
Definition: vrfObjectManipulationHandlerBaseClass.h:820
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
boost::signals2::signal< void(DtVrfObjectFacadeInterface *)> signal_objectFacadeAboutToBeRemoved
Definition: vrfObjectManipulationManager.h:216
AllowEditingOf allowEditingOf() const
Definition: vrfObjectManipulationManager.h:234
boost::signals2::signal< void(const makVrv::DtSelectionManager::IdSet &, DtEditingType)> signal_editingObjects
Definition: vrfObjectManipulationManager.h:326
boost::signals2::signal< void(int, DtEnvironmentStateView *, DtVector &)> signal_aboutToAddPoint
About to add the point at the given index for the given state view. Point is in world coordinates...
Definition: vrfObjectManipulationManager.h:206
Definition: vrfObjectManipulationHandlerBaseClass.h:485
DtOrderedEntityTypeList< DtVrfObjectManipulationHandlerCreatorInterface * > VrfObjectManipulationCreators
Definition: vrfObjectManipulationManager.h:47
boost::signals2::signal< void(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData &)> signal_createObject
Definition: vrfObjectManipulationManager.h:210
AllowEditingOf
Definition: vrfObjectManipulationManager.h:53
Base class to provide boost signal/slot management.
boost::signals2::signal< void()> signal_creatingTerrainProp
Definition: vrfObjectManipulationManager.h:212
boost::signals2::signal< void()> signal_stopped
Definition: vrfObjectManipulationManager.h:208
makVrv::DtSelectionManager::IdSet myVisibleObjects
Definition: vrfObjectManipulationManager.h:380
boost::signals2::signal< void(const DtEntityType &, int, makVrf::DtCreationSignalType)> signal_creatingObject
Definition: vrfObjectManipulationManager.h:209
Contains makVrv::DtUniqueID type.
Contains the DtElementAttributeManager class declaration.
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
boost::function< void(DtEnvironmentStateView *)> ProcessEnvStateFunction
Definition: vrfObjectManipulationManager.h:49
std::vector< DtVrfObjectManipulationHandlerBaseClass * > myHandlersToBeCleanedUp
Definition: vrfObjectManipulationManager.h:394
double myLocalWaitTimeAfterComplete
Definition: vrfObjectManipulationManager.h:392
EditableMap myEditableMap
Definition: vrfObjectManipulationManager.h:383
std::set< DtUniqueID > IdSet
Definition: DtSelectionManager.h:32
DtCreationSignalType
Definition: vrfObjectManipulationHandlerBaseClass.h:71
boost::signals2::signal< void(const DtString &, const DtString &)> signal_createTerrainProp
Definition: vrfObjectManipulationManager.h:213
Listen for double-click events on behalf of the DtVrfEditManager and initiate the edit process...
Definition: vrfEditManagerEventProcessor.h:35
Contains makVrv::DtElementEntry class.
boost::signals2::signal< void(DtVrfObjectFacadeInterface *, bool)> signal_objectFacadeCreated
Definition: vrfObjectManipulationManager.h:215
boost::signals2::signal< void(int, DtEnvironmentStateView *, DtVector)> signal_aboutToDeletePoint
About to delete the point for the given state view at the given index.
Definition: vrfObjectManipulationManager.h:203
DtVrfObjectManipulationHandlerBaseClass * myCurrentObjectManipulationHandler
Definition: vrfObjectManipulationManager.h:373

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)