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>
18 #include <vrvCore/DtUniqueID.h>
20 #include <vrvCore/DtElementEntry.h>
22 
23 namespace makVrv
24 {
25  class DtDe;
26  class DtInputDriver;
27  class DtMouseEvent;
28  class DtChannel;
29  class DtKeyEvent;
30  class DtObserver;
31 }
32 
33 #define DtMultipleObjectEditorManipulationHandlerType DtEntityType(300, 300, 300, 300, 300, 300, 300)
34 
35 namespace makVrf
36 {
37  class DtVrfObjectManipulationHandlerBaseClass;
38  class DtVrfEditManagerEventProcessor;
39 
40  static DtEntityType DtEditingMultipleObjectsType(256, 256, 256, 256, 256, 256, 256);
41 
48  {
49  protected:
52  typedef boost::function< void ( DtSimObjectReference )> ProcessEnvStateFunction;
53 
54  public:
55 
57  {
58  AllowNone = 0,
59  AllowLocalObjects = 0x00000001,
60  AllowPublishedObjects = 0x00000002,
61  AllowAll = AllowLocalObjects | AllowPublishedObjects
62  };
63 
64  public:
65 
68 
70  virtual ~DtVrfObjectManipulationManager() override;
71 
73  bool creatingObject() const;
74 
76  DtVrfObjectManipulationHandlerBaseClass* currentObjectManipulationHandler();
77 
78  public:
80  virtual void setAlwaysCreateLocal(bool);
81  virtual bool alwaysCreateLocal() const;
82 
84  static DtVrfObjectManipulationManager& instance(makVrv::DtDe& de);
85 
88  virtual void addObjectManipulationHandler(const DtEntityType&, DtVrfObjectManipulationHandlerCreatorInterface*);
89  virtual void removeObjectManipulationHandler(const DtEntityType&);
90 
92  virtual makVrv::DtElementEntry::ElementType mapKindToType(int) const;
93 
95  virtual void addKindToTypeMapping(int, const makVrv::DtElementEntry::ElementType&);
96 
98  virtual bool hasTypeToKindMapping(const makVrv::DtElementEntry::ElementType&) const;
99 
102  virtual void addObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&, DtVrfObjectManipulationHandlerCreatorInterface*);
103  virtual void removeObjectManipulationHandler(const makVrv::DtElementEntry::ElementType&);
104 
108  virtual bool isEditable(const makVrv::DtUniqueID&, const std::string& keywordsToCheck = "") const;
109  virtual void setEditable(const makVrv::DtUniqueID&, bool);
110 
112  virtual bool hasKeyword(const std::string& keyword, makVrv::DtUniqueID id) const;
113 
115  virtual std::vector<DtVector> convertToLocal(const std::vector<DtVector>& geocentric) const;
116 
118  virtual bool isEditingOrCreating() const;
120  virtual bool isBoxObject(const DtEntityType&, const std::string& keywords) const;
121 
122 
126  virtual void createValidSelection(makVrv::DtSelectionManager::IdSet&, bool& changed) const;
127 
131  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const DtEntityType&, const std::string& keywords) const;
132  virtual DtVrfObjectManipulationHandlerBaseClass* manipulationHandlerFor(const makVrv::DtElementEntry::ElementType&) const;
133 
135  virtual bool isCreatingProp() const;
136 
139  virtual bool isDestroyingProp() const;
140  virtual void setIsDestroyingProp(bool);
141 
143  virtual bool hasObjectFacade(makVrv::DtUniqueID) const;
144 
145  protected:
146 
148  virtual void slot_onCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
149 
151  virtual void slot_onEventProcessorRemoved(DtVrfObjectManipulationHandlerBaseClass*);
152 
154  virtual void slot_onTerrainPropCreationStopped(DtVrfObjectManipulationHandlerBaseClass*);
155 
156  virtual void slot_onCreateObject(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&);
157 
159  virtual void slot_onCreateTerrainProp(const DtString& propType, const DtString& propModelDef);
160 
161  virtual void onInputDriverToBeDestroyed( makVrv::DtInputDriver* inputDriver );
162 
163  virtual void cleanup();
164 
166  virtual void onObjectFacadeCreated(DtVrfObjectFacadeInterface*, bool editing);
167 
169  virtual void onObjectFacadeAboutToBeRemoved(DtVrfObjectFacadeInterface*);
170 
171  public:
172 
174  virtual void mapEntityTypeToVertexEditingType(const DtEntityType& from, const DtEntityType& to);
175  virtual DtEntityType mapToVertexEditingType(const DtEntityType& from) const;
176  virtual void removeToVertexEditingType(const DtEntityType& from);
177 
186  virtual void createObject(const DtEntityType&, int force,DtCreationSignalType creationSignal = DtNoCreationSignal,
187  const std::string& keywords = "");
188 
190  virtual void setLocation(const DtVector& loc);
191 
193  virtual void createTerrainProp(const DtString& propType, const DtString& propModelDef);
194 
196  virtual void stop();
197 
198  public:
200  boost::signals2::signal<void (bool&)> signal_deleteSelected;
201 
203  boost::signals2::signal<void ()> signal_selectionRestored;
204 
206  boost::signals2::signal<void (int, DtSimObjectReference, DtVector)> signal_aboutToDeletePoint;
207 
209  boost::signals2::signal<void (int, DtSimObjectReference, DtVector&)> signal_aboutToAddPoint;
210 
211  boost::signals2::signal<void ()> signal_stopped;
212  boost::signals2::signal<void (const DtEntityType&, int, makVrf::DtCreationSignalType)> signal_creatingObject;
213  boost::signals2::signal<void (const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData&)> signal_createObject;
214 
215  boost::signals2::signal<void ()> signal_creatingTerrainProp;
216  boost::signals2::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
217 
218  boost::signals2::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
219  boost::signals2::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
220 
221  //Sent by event processor when an item is double clicked that does not have an object type to edit
222  boost::signals2::signal<void (makVrv::DtElementID)> signal_unhandledEdit;
223 
224  boost::signals2::signal<void ()> signal_eventProcessorRemoved;
225 
226  public:
227 
229 
230  virtual void setAllowEditing(bool b);
231  virtual void setAllowEditingOf(AllowEditingOf);
232 
233  virtual bool allowEditing() const;
234  virtual bool allowLocalObjectsEditing() const;
235  virtual bool allowPublishedObjectsEditing() const;
236 
237  AllowEditingOf allowEditingOf() const { return myAllowEditingOf; };
238 
242  virtual void editSelectedObjects( const makVrv::DtUniqueID& principalID,
243  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
244 
251  virtual void editSelectedObjects( const makVrv::DtSelectionManager::IdSet& objects,
252  makVrv::DtChannel& initiatingChannel, const DtEditingType& edtype=Mouse );
253 
257  virtual void setEditStartedByDoubleClick(bool);
258 
260  virtual void setCreationEndedWithDoubleClick(bool creationEndedWithDoubleClick);
261 
264  virtual bool isDoubleClickSupportedForCurrentObject() const;
265 
267  virtual bool isCurrentObjectValidForCreation();
268 
270  virtual void deleteSelected();
271  virtual void deleteProp(makVrv::DtUniqueID id);
272 
273  virtual void deleteVertex( const makVrv::DtUniqueID& vertexId );
274  virtual void deleteVertex( const makVrv::DtUniqueID& shapeId,
275  const DtVector& dbLocation );
276 
277  virtual void addVertexBefore( const makVrv::DtUniqueID& vertexId );
278 
279  virtual void addVertexBefore( const makVrv::DtUniqueID& shapeId,
280  const DtVector& dbLocation );
281 
282  virtual void addVertexBeforeSelected();
283 
284  virtual void addVertexAfter( const makVrv::DtUniqueID& vertexId );
285 
286  virtual void addVertexAfter( const makVrv::DtUniqueID& shapeId,
287  const DtVector& dbLocation );
288 
289  virtual void addVertexAfterSelected();
290 
292  virtual int indexOfVertex( DtSimObjectReference shapeStateView,
293  const DtVector& dbVtxLocation ) const;
294 
297  virtual bool getVertexLocation( const makVrv::DtUniqueID& vertexId,
298  DtVector& dbLocation ) const;
299 
305  virtual void requestAndProcessEnvState( const makVrv::DtUniqueID& sceneId,
306  ProcessEnvStateFunction* processor );
307 
309  virtual void setWaitTimeAfterComplete(double);
310  virtual double waitTimeAfterComplete() const;
311 
313  virtual void setLocalWaitTimeAfterComplete(double);
314  virtual double localWaitTimeAfterComplete() const;
315 
317  virtual double waitTimeAfterComplete(makVrv::DtUniqueID) const;
318 
320  virtual bool isEditing(makVrv::DtUniqueID id) const;
321 
322  virtual DtVrfObjectManipulationHandlerBaseClass* vertexEditingHandler(makVrv::DtUniqueID principalID) const;
323  virtual DtVrfObjectManipulationHandlerBaseClass* editingHandlerFor(makVrv::DtUniqueID principalID) const;
324 
325  boost::signals2::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingObject;
326  boost::signals2::signal<void (DtEntityType, DtEditingType)> signal_editingObjectByEntityType;
327  boost::signals2::signal<void (const makVrv::DtUniqueID&, DtEditingType)> signal_editingTerrainProp;
328 
329  boost::signals2::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingObjects;
330  boost::signals2::signal<void (const makVrv::DtSelectionManager::IdSet&, DtEditingType)> signal_editingTerrainProps;
331 
332  boost::signals2::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_editStopped;
333  boost::signals2::signal<void ()> signal_editingNotAllowed;
334 
335  protected:
336 
337  virtual void slot_editStopped( DtVrfObjectManipulationHandlerBaseClass* );
338 
339  virtual void slot_stateReturned( DtSimObjectReference shapeStateView,
340  const makVrv::DtUniqueID& shapeId, ProcessEnvStateFunction* processor );
341 
342  virtual void deleteVertexUsingState( DtSimObjectReference shapeStateView,
343  const DtVector& dbVtxLocation );
344 
345  virtual void addVertexUsingState( DtSimObjectReference shapeStateView,
346  const DtVector& dbVtxLocation, bool before );
347 
348  virtual void sessionStatusChanged(int);
349 
350  virtual void restoreSelectionState( DtVrfObjectManipulationHandlerBaseClass* handler );
351 
352  virtual void slot_onTick();
353 
354  virtual void slot_onAttributesChanged(
356 
357  virtual bool isOnIdList( makVrv::DtUniqueID id,
358  const makVrv::DtSelectionManager::IdSet& list );
359 
360  virtual void addHandlerToBeCleanedUp(DtVrfObjectManipulationHandlerBaseClass*);
361 
362  virtual void cacheVisibleObjects(const makVrv::DtSelectionManager::IdSet&);
363 
364  public:
365  virtual bool canDeleteAPoint( DtSimObjectReference shapeStateView ) const;
366  virtual bool shapeAtMinimum( DtSimObjectReference shapeStateView ) const;
367  virtual bool shapeAtMaximum( DtSimObjectReference shapeStateView ) const;
368 
370  virtual bool canEditVertex(const DtEntityType& t, makVrv::DtUniqueID parentID, makVrv::DtUniqueID vertexID) const;
371 
372  protected:
379 
384 
385  typedef boost::unordered_map<makVrv::DtUniqueID, bool> EditableMap;
387 
388  typedef boost::unordered_map<int, makVrv::DtElementEntry::ElementType> KindToTypeMap;
390 
391  typedef boost::unordered_map<makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface*> TypeCreatorMap;
393 
396 
397  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myHandlersToBeCleanedUp;
398 
400 
403  };
404 
407  {
408 
409  public:
412  static DtVrfObjectManipulationManagerCreator& instance( makVrv::DtDe& de );
413 
415  static void registerInstance( makVrv::DtDe& de,
417 
419  virtual DtVrfObjectManipulationManager* create( makVrv::DtDe& de );
420  };
421 }
AllowEditingOf myAllowEditingOf
Definition: vrfObjectManipulationManager.h:399
bool myAlwaysCreateLocal
Definition: vrfObjectManipulationManager.h:378
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:222
boost::signals2::signal< void(const makVrv::DtUniqueID &, DtEditingType)> signal_editingObject
Definition: vrfObjectManipulationManager.h:325
TypeCreatorMap myTypeCreators
Definition: vrfObjectManipulationManager.h:392
boost::signals2::signal< void(const makVrv::DtUniqueID &, DtEditingType)> signal_editingTerrainProp
Definition: vrfObjectManipulationManager.h:327
makVrv::DtDe & myDe
Definition: vrfObjectManipulationManager.h:373
double myWaitTimeAfterComplete
Definition: vrfObjectManipulationManager.h:394
boost::unordered_map< int, makVrv::DtElementEntry::ElementType > KindToTypeMap
Definition: vrfObjectManipulationManager.h:388
Contains makVrv:DtSelectionManager class.
Definition: vrfObjectManipulationManager.h:405
KindToTypeMap myKindToTypeMap
Definition: vrfObjectManipulationManager.h:389
makVrv::DtSelectionManager::IdSet myRemainingSavedSelections
Definition: vrfObjectManipulationManager.h:381
bool myIsDestroyingProp
Definition: vrfObjectManipulationManager.h:402
DtEditingType
Definition: vrfObjectManipulationHandlerBaseClass.h:42
boost::signals2::signal< void(int, DtSimObjectReference, DtVector)> signal_aboutToDeletePoint
About to delete the point for the given state view at the given index.
Definition: vrfObjectManipulationManager.h:206
DtVrfEditManagerEventProcessor * myEventProcessor
Definition: vrfObjectManipulationManager.h:377
VertexEditingTypeMap myVertexEditingTypeMap
Definition: vrfObjectManipulationManager.h:375
boost::signals2::signal< void()> signal_eventProcessorRemoved
Definition: vrfObjectManipulationManager.h:224
#define DT_DLL_VRFGUICORE
Contains DLL export macros.
Definition: vrfGuiCore.h:25
Definition: vrfObjectManipulationManager.h:47
The abstract Channel Class.
Definition: DtChannel.h:35
boost::signals2::signal< void(const makVrv::DtSelectionManager::IdSet &, DtEditingType)> signal_editingTerrainProps
Definition: vrfObjectManipulationManager.h:330
boost::signals2::signal< void()> signal_selectionRestored
Signal when the selection has been restored to what it was before creation.
Definition: vrfObjectManipulationManager.h:203
boost::signals2::signal< void(int, DtSimObjectReference, 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:209
boost::function< void(DtSimObjectReference)> ProcessEnvStateFunction
Definition: vrfObjectManipulationManager.h:52
makVrv::DtSelectionManager::IdSet mySavedSelectionState
Definition: vrfObjectManipulationManager.h:380
DtOrderedEntityTypeList< DtEntityType * > VertexEditingTypeMap
Definition: vrfObjectManipulationManager.h:51
boost::unordered_map< makVrv::DtElementEntry::ElementType, DtVrfObjectManipulationHandlerCreatorInterface * > TypeCreatorMap
Definition: vrfObjectManipulationManager.h:391
Contains makVrv::DtVirtualBaseClass class.
makVrv::DtSelectionManager::IdSet myObjectsEditing
Definition: vrfObjectManipulationManager.h:382
boost::signals2::signal< void()> signal_editingNotAllowed
Definition: vrfObjectManipulationManager.h:333
makVrv::DtSignalConnectionManager myAnnouncerSignals
Definition: vrfObjectManipulationManager.h:401
Definition: vrfObjectFacadeInterface.h:53
Definition: vrfObjectManipulationHandlerBaseClass.h:75
Definition: vrfObjectManipulationHandlerBaseClass.h:44
static DtEntityType DtEditingMultipleObjectsType(256, 256, 256, 256, 256, 256, 256)
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:200
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:385
boost::signals2::signal< void(DtEntityType, DtEditingType)> signal_editingObjectByEntityType
Definition: vrfObjectManipulationManager.h:326
VrfObjectManipulationCreators myManipulationHandlers
Definition: vrfObjectManipulationManager.h:374
ElementType
Definition: DtElementEntry.h:26
Definition: vrfObjectManipulationHandlerBaseClass.h:833
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
boost::signals2::signal< void(DtVrfObjectFacadeInterface *)> signal_objectFacadeAboutToBeRemoved
Definition: vrfObjectManipulationManager.h:219
AllowEditingOf allowEditingOf() const
Definition: vrfObjectManipulationManager.h:237
boost::signals2::signal< void(const makVrv::DtSelectionManager::IdSet &, DtEditingType)> signal_editingObjects
Definition: vrfObjectManipulationManager.h:329
Definition: vrfObjectManipulationHandlerBaseClass.h:503
DtOrderedEntityTypeList< DtVrfObjectManipulationHandlerCreatorInterface * > VrfObjectManipulationCreators
Definition: vrfObjectManipulationManager.h:50
boost::signals2::signal< void(const DtVrfObjectManipulationHandlerBaseClass::ObjectManipulationData &)> signal_createObject
Definition: vrfObjectManipulationManager.h:213
AllowEditingOf
Definition: vrfObjectManipulationManager.h:56
Base class to provide boost signal/slot management.
boost::signals2::signal< void()> signal_creatingTerrainProp
Definition: vrfObjectManipulationManager.h:215
boost::signals2::signal< void()> signal_stopped
Definition: vrfObjectManipulationManager.h:211
makVrv::DtSelectionManager::IdSet myVisibleObjects
Definition: vrfObjectManipulationManager.h:383
boost::signals2::signal< void(const DtEntityType &, int, makVrf::DtCreationSignalType)> signal_creatingObject
Definition: vrfObjectManipulationManager.h:212
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:76
std::vector< DtVrfObjectManipulationHandlerBaseClass * > myHandlersToBeCleanedUp
Definition: vrfObjectManipulationManager.h:397
boost::signals2::signal< void(DtVrfObjectManipulationHandlerBaseClass *)> signal_editStopped
Definition: vrfObjectManipulationManager.h:332
double myLocalWaitTimeAfterComplete
Definition: vrfObjectManipulationManager.h:395
EditableMap myEditableMap
Definition: vrfObjectManipulationManager.h:386
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:216
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:218
DtVrfObjectManipulationHandlerBaseClass * myCurrentObjectManipulationHandler
Definition: vrfObjectManipulationManager.h:376

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)