VR-Forces Developer's Guide
 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 namespace makVrv
25 {
26  class DtDe;
27  class DtInputDriver;
28  class DtMouseEvent;
29  class DtChannel;
30  class DtKeyEvent;
31  class DtObserver;
32 }
33 
34 #define DtMultipleObjectEditorManipulationHandlerType DtEntityType(300, 300, 300, 300, 300, 300, 300)
35 
36 namespace makVrf
37 {
38  class DtVrfObjectManipulationHandlerBaseClass;
39  class DtVrfEditManagerEventProcessor;
40 
41  static DtEntityType DtEditingMultipleObjectsType(256, 256, 256, 256, 256, 256, 256);
42 
51  {
52  protected:
55  typedef boost::function< void ( DtEnvironmentStateView* )> ProcessEnvStateFunction;
56 
57  public:
58 
60  {
61  AllowNone = 0,
62  AllowLocalObjects = 0x00000001,
63  AllowPublishedObjects = 0x00000002,
64  AllowAll = AllowLocalObjects | AllowPublishedObjects
65  };
66 
67  public:
68 
71 
74 
76  bool creatingObject() const;
77 
79  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
80 
81  public:
83  virtual void setAlwaysCreateLocal(bool);
84  virtual bool alwaysCreateLocal() const;
85 
87  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
88 
91  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
92  virtual void removeObjectManipulationHandler(const DtEntityType&);
93 
95  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
96 
98  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
99 
101  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
102 
105  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
106  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
107 
111  virtual bool isEditable(const makVrv::DtUniqueID&, const std::string& keywordsToCheck = "") const;
112  virtual void setEditable(const makVrv::DtUniqueID&, bool);
113 
115  virtual bool hasKeyword(const std::string& keyword, makVrv::DtUniqueID id) const;
116 
118  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
119 
121  virtual bool isEditingOrCreating() const;
123  virtual bool isBoxObject(const DtEntityType&, const std::string& keywords) const;
124 
125 
129  virtual void createValidSelection(makVrv::DtSelectionManager::IdSet&, bool& changed) const;
130 
134  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&, const std::string& keywords) const;
135  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
136 
138  virtual bool isCreatingProp() const;
139 
142  virtual bool isDestroyingProp() const;
143  virtual void setIsDestroyingProp(bool);
144 
146  virtual bool hasObjectFacade(makVrv::DtUniqueID) const;
147 
148  protected:
149 
151  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
152 
154  virtual void slot_onEventProcessorRemoved(DtVrfObjectManipulationHandlerBaseClass*);
155 
157  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
158 
159  virtual void slot_onCreateObject(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
160 
162  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
163 
164  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
165 
166  virtual void cleanup();
167 
169  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
170 
172  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
173 
174  public:
175 
177  virtual void mapEntityTypeToVertexEditingType(const DtEntityType& from, const DtEntityType& to);
178  virtual DtEntityType mapToVertexEditingType(const DtEntityType& from) const;
179  virtual void removeToVertexEditingType(const DtEntityType& from);
180 
189  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
190  const std::string& keywords = "");
191 
193  virtual void setLocation(const DtVector& loc);
194 
196  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
197 
199  virtual void stop();
200 
201  public:
203  boost::signals2::signal<void (bool&)> signal_deleteSelected;
204 
206  boost::signals2::signal<void ()> signal_selectionRestored;
207 
209  boost::signals2::signal<void (int, DtEnvironmentStateView*, DtVector)> signal_aboutToDeletePoint;
210 
212  boost::signals2::signal<void (int, DtEnvironmentStateView*, DtVector&)> signal_aboutToAddPoint;
213 
214  boost::signals2::signal<void ()> signal_stopped;
215  boost::signals2::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
216  boost::signals2::signal<void (const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&)> signal_createObject;
217 
218  boost::signals2::signal<void ()> signal_creatingTerrainProp;
219  boost::signals2::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
220 
221  boost::signals2::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
222  boost::signals2::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
223 
224  //Sent by event processor when an item is double clicked that does not have an object type to edit
225  boost::signals2::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
226 
227  boost::signals2::signal<void ()> signal_eventProcessorRemoved;
228 
229  public:
230 
232 
233  virtual void setAllowEditing(bool b);
234  virtual void setAllowEditingOf(AllowEditingOf);
235 
236  virtual bool allowEditing() const;
237  virtual bool allowLocalObjectsEditing() const;
238  virtual bool allowPublishedObjectsEditing() const;
239 
240  AllowEditingOf allowEditingOf() const { return myAllowEditingOf; };
241 
245  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
246  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
247 
254  virtual void editSelectedObjects( const makVrv::DtSelectionManager::IdSet& objects,
255  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
256 
260  virtual void setEditStartedByDoubleClick(bool);
261 
263  virtual void setCreationEndedWithDoubleClick(bool creationEndedWithDoubleClick);
264 
267  virtual bool isDoubleClickSupportedForCurrentObject() const;
268 
270  virtual bool isCurrentObjectValidForCreation();
271 
273  virtual void deleteSelected();
274  virtual void deleteProp(makVrv::DtUniqueID id);
275 
276  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
277  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
278  const DtVector& dbLocation );
279 
280  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
281 
282  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
283  const DtVector& dbLocation );
284 
285  virtual void addVertexBeforeSelected();
286 
287  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
288 
289  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
290  const DtVector& dbLocation );
291 
292  virtual void addVertexAfterSelected();
293 
295  virtual int indexOfVertex( const DtEnvironmentStateView* shapeStateView,
296  const DtVector& dbVtxLocation ) const;
297 
300  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
301  DtVector& dbLocation ) const;
302 
308  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
309  ProcessEnvStateFunction* processor );
310 
312  virtual void setWaitTimeAfterComplete(double);
313  virtual double waitTimeAfterComplete() const;
314 
316  virtual void setLocalWaitTimeAfterComplete(double);
317  virtual double localWaitTimeAfterComplete() const;
318 
320  virtual double waitTimeAfterComplete(makVrv::DtUniqueID) const;
321 
323  virtual bool isEditing(makVrv::DtUniqueID id) const;
324 
325  virtual DtVrfObjectManipulationHandlerBaseClass* vertexEditingHandler(makVrv::DtUniqueID principalID) const;
326  virtual DtVrfObjectManipulationHandlerBaseClass* editingHandlerFor(makVrv::DtUniqueID principalID) const;
327 
328  boost::signals2::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
329  boost::signals2::signal<void (DtEntityType, DtEditingType)> signal_editingObjectByEntityType;
330  boost::signals2::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
331 
332  boost::signals2::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
333  boost::signals2::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
334 
335  boost::signals2::signal<void ()> signal_editStopped;
336  boost::signals2::signal<void ()> signal_editingNotAllowed;
337 
338  protected:
339 
340  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
341 
342  virtual void slot_stateReturned( DtEnvironmentStateView* shapeStateView,
343  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
344 
345  virtual void deleteVertexUsingState( DtEnvironmentStateView* shapeStateView,
346  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation );
347 
348  virtual void addVertexUsingState( DtEnvironmentStateView* shapeStateView,
349  const makVrv::DtUniqueID& shapeId, const DtVector& dbVtxLocation, bool before );
350 
351  virtual void sessionStatusChanged(int);
352 
353  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
354 
355  virtual void slot_onTick();
356 
357  virtual void slot_onAttributesChanged(
359 
360  virtual bool isOnIdList( makVrv::DtUniqueID id,
361  const makVrv::DtSelectionManager::IdSet& list );
362 
363  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
364 
365  virtual void cacheVisibleObjects(const makVrv::DtSelectionManager::IdSet&);
366 
367  public:
368  virtual bool canDeleteAPoint( DtEnvironmentStateView* shapeStateView ) const;
369  virtual bool shapeAtMinimum( DtEnvironmentStateView* shapeStateView ) const;
370  virtual bool shapeAtMaximum( DtEnvironmentStateView* shapeStateView ) const;
371 
373  virtual bool canEditVertex(const DtEntityType& t, makVrv::DtUniqueID parentID, makVrv::DtUniqueID vertexID) const;
374 
375  protected:
382 
387 
388  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
390 
391  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
393 
394  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
396 
399 
400  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
401 
403 
406  };
407 
410  {
411 
412  public:
415  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
416 
418  static void registerInstance( makVrv::DtDe& de,
420 
422  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
423  };
424 }
AllowEditingOf myAllowEditingOf
Definition: vrfObjectManipulationManager.h:402
bool myAlwaysCreateLocal
Definition: vrfObjectManipulationManager.h:381
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
boost::signals2::signal< void(makVrv::DtElementID)> signal_unhandledEdit
Definition: vrfObjectManipulationManager.h:225
boost::signals2::signal< void(const makVrv::DtUniqueID &, DtEditingType)> signal_editingObject
Definition: vrfObjectManipulationManager.h:328
TypeCreatorMap myTypeCreators
Definition: vrfObjectManipulationManager.h:395
boost::signals2::signal< void(const makVrv::DtUniqueID &, DtEditingType)> signal_editingTerrainProp
Definition: vrfObjectManipulationManager.h:330
makVrv::DtDe & myDe
Definition: vrfObjectManipulationManager.h:376
boost::signals2::signal< void()> signal_editStopped
Definition: vrfObjectManipulationManager.h:335
double myWaitTimeAfterComplete
Definition: vrfObjectManipulationManager.h:397
boost::unordered_map< int, makVrv::DtElementEntry::ElementType > KindToTypeMap
Definition: vrfObjectManipulationManager.h:391
Contains makVrv:DtSelectionManager class.
Definition: vrfObjectManipulationManager.h:408
KindToTypeMap myKindToTypeMap
Definition: vrfObjectManipulationManager.h:392
makVrv::DtSelectionManager::IdSet myRemainingSavedSelections
Definition: vrfObjectManipulationManager.h:384
bool myIsDestroyingProp
Definition: vrfObjectManipulationManager.h:405
DtEditingType
Definition: vrfObjectManipulationHandlerBaseClass.h:42
DtVrfEditManagerEventProcessor * myEventProcessor
Definition: vrfObjectManipulationManager.h:380
VertexEditingTypeMap myVertexEditingTypeMap
Definition: vrfObjectManipulationManager.h:378
boost::signals2::signal< void()> signal_eventProcessorRemoved
Definition: vrfObjectManipulationManager.h:227
#define DT_DLL_VRFGUICORE
Contains DLL export macros.
Definition: vrfGuiCore.h:25
The Master Scenario Settings Dialog.
Definition: vrfObjectManipulationManager.h:50
The abstract Channel Class.
Definition: DtChannel.h:35
boost::signals2::signal< void(const makVrv::DtSelectionManager::IdSet &, DtEditingType)> signal_editingTerrainProps
Definition: vrfObjectManipulationManager.h:333
boost::signals2::signal< void()> signal_selectionRestored
Signal when the selection has been restored to what it was before creation.
Definition: vrfObjectManipulationManager.h:206
makVrv::DtSelectionManager::IdSet mySavedSelectionState
Definition: vrfObjectManipulationManager.h:383
DtOrderedEntityTypeList< DtEntityType * > VertexEditingTypeMap
Definition: vrfObjectManipulationManager.h:54
boost::unordered_map< makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface * > TypeCreatorMap
Definition: vrfObjectManipulationManager.h:394
Contains makVrv::DtVirtualBaseClass class.
makVrv::DtSelectionManager::IdSet myObjectsEditing
Definition: vrfObjectManipulationManager.h:385
boost::signals2::signal< void()> signal_editingNotAllowed
Definition: vrfObjectManipulationManager.h:336
makVrv::DtSignalConnectionManager myAnnouncerSignals
Definition: vrfObjectManipulationManager.h:404
Definition: vrfObjectFacadeInterface.h:54
Definition: vrfObjectManipulationHandlerBaseClass.h:75
Definition: vrfObjectManipulationHandlerBaseClass.h:44
static DtEntityType DtEditingMultipleObjectsType(256, 256, 256, 256, 256, 256, 256)
Definition: vrfObjectManipulationHandlerBaseClass.h:90
boost::signals2::signal< void(bool &)> signal_deleteSelected
Signal to delete the selected objects. Set handled to true if delete is handled.
Definition: vrfObjectManipulationManager.h:203
std::vector< EntryAttributes > EntryAttributesList
Define the type used to signal changes to one or more attributes for one or more elements.
Definition: DtElementAttributeManager.h:44
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:388
boost::signals2::signal< void(DtEntityType, DtEditingType)> signal_editingObjectByEntityType
Definition: vrfObjectManipulationManager.h:329
VrfObjectManipulationCreators myManipulationHandlers
Definition: vrfObjectManipulationManager.h:377
ElementType
Definition: DtElementEntry.h:26
Definition: vrfObjectManipulationHandlerBaseClass.h:840
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
boost::signals2::signal< void(DtVrfObjectFacadeInterface *)> signal_objectFacadeAboutToBeRemoved
Definition: vrfObjectManipulationManager.h:222
AllowEditingOf allowEditingOf() const
Definition: vrfObjectManipulationManager.h:240
boost::signals2::signal< void(const makVrv::DtSelectionManager::IdSet &, DtEditingType)> signal_editingObjects
Definition: vrfObjectManipulationManager.h:332
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:212
Definition: vrfObjectManipulationHandlerBaseClass.h:505
DtOrderedEntityTypeList< DtVrfObjectManipulationHandlerCreatorInterface * > VrfObjectManipulationCreators
Definition: vrfObjectManipulationManager.h:53
boost::signals2::signal< void(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData &)> signal_createObject
Definition: vrfObjectManipulationManager.h:216
AllowEditingOf
Definition: vrfObjectManipulationManager.h:59
Base class to provide boost signal/slot management.
boost::signals2::signal< void()> signal_creatingTerrainProp
Definition: vrfObjectManipulationManager.h:218
boost::signals2::signal< void()> signal_stopped
Definition: vrfObjectManipulationManager.h:214
makVrv::DtSelectionManager::IdSet myVisibleObjects
Definition: vrfObjectManipulationManager.h:386
boost::signals2::signal< void(const DtEntityType &, int, makVrf::DtCreationSignalType)> signal_creatingObject
Definition: vrfObjectManipulationManager.h:215
Contains makVrv::DtUniqueID type.
Contains the DtElementAttributeManager class declaration.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
boost::function< void(DtEnvironmentStateView *)> ProcessEnvStateFunction
Definition: vrfObjectManipulationManager.h:55
std::vector< DtVrfObjectManipulationHandlerBaseClass * > myHandlersToBeCleanedUp
Definition: vrfObjectManipulationManager.h:400
double myLocalWaitTimeAfterComplete
Definition: vrfObjectManipulationManager.h:398
EditableMap myEditableMap
Definition: vrfObjectManipulationManager.h:389
std::set< DtUniqueID > IdSet
Definition: DtSelectionManager.h:32
DtCreationSignalType
Option to supply to the createObject method.
Definition: vrfObjectManipulationHandlerBaseClass.h:73
boost::signals2::signal< void(const DtString &, const DtString &)> signal_createTerrainProp
Definition: vrfObjectManipulationManager.h:219
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:221
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:209
DtVrfObjectManipulationHandlerBaseClass * myCurrentObjectManipulationHandler
Definition: vrfObjectManipulationManager.h:379

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)