VR-Forces 4.6 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfObjectManipulationHandlerBaseClass.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 #include <vrfGuiCore/vrfGuiCore.h>
15 #include <vrvCore/DtDe.h>
16 #include <vrvCore/DtEntityState.h>
17 #include <vrvCore/DtUniqueID.h>
20 #include <vlutil/vlPerformanceStats.h>
22 
23 #include <matrix/vlVector.h>
24 #include <matrix/geodeticCoord.h>
25 #include <vlpi/entityType.h>
26 
27 #include <boost/signal.hpp>
28 
29 namespace makVrv
30 {
31  class DtDe;
32  class DtChannel;
33  class DtSimObjectEntry;
34 }
35 
36 class DtEntityType;
37 class DtString;
40 
41 namespace makVrf
42 {
44  {
45  Mouse = 0,
50  };
51 
53  {
54  Box,
66  User_Base = 100
67  };
68 
70  {
77  };
78 
80 
82 
87  {
88  public:
89  typedef std::vector<DtVrfObjectFacadeInterface*> VrfObjectEditFacadeList;
90  typedef std::map<std::string, DtSimInterfaceContent*> ContentMessages;
91 
92  public:
95 
96  public:
97 
102  virtual bool createObject(const DtEntityType& entType, int force,
103  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
104 
106  virtual bool createObject(const DtString& key, const DtString& associatedData,
107  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
108 
112  virtual void editSelectedObjects( const makVrv::DtUniqueID& editId,
113  makVrv::DtChannel& initiatingChannel, double waitTimeAfterComplete = 0.,
115 
118  virtual bool canSetActivationTime() const;
119 
121  virtual void setForce(int);
122  int force() const;
123 
125  virtual void setEventProcessingEnabled( bool value );
126 
128  virtual bool embarkationAllowed() const;
129  virtual void setEmbarkationAllowed(bool);
130 
134  virtual bool canEmbark() const;
135 
137  virtual void setCanEmbark(bool);
138 
140  virtual void setDoNotClamp(bool);
141  bool doNotClamp() const;
142 
144  virtual bool needsEmbarkOnCheck() const;
145 
147  virtual void setIgnoreNextLeftButtonRelease(bool b);
148  virtual void setEditStartedByDoubleClick(bool);
149 
150  virtual makVrv::DtIntersector::IntersectProperties intersectorPickMask() const;
151 
153  virtual DtUUID uuid() const;
154 
157  virtual void setInterfaceContentMessage(const std::string& name, const DtSimInterfaceContent&);
158  virtual void removeInterfaceContentMessage(const std::string&);
159  const ContentMessages& contentMessages() const
160  {
161  return myContentMessages;
162  }
163 
165  virtual HandlerType type() const = 0;
166 
167  virtual std::list<DtSimInterfaceContent*> contentMessagesToList() const;
168 
169  virtual void sendContentMessages();
170 
172  virtual VrfObjectEditFacadeList objectFacades() const;
173 
175  virtual void setAllowCreationOnMouseClick(bool flag);
176 
178  virtual void setLabel(const std::string&);
179  virtual std::string label() const;
180 
182  virtual bool allowCreationOnMouseClick() const;
183 
186  virtual void setEventProcessor(DtVrfObjectManipulationEventProcessor*);
187 
189  virtual DtVector clampToGround(const DtVector&) const;
190  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&) const;
191 
193  virtual void setAttachObjectToMouse(bool);
194 
196  virtual bool attachObjectToMouse() const;
197 
199  virtual void setHeading(double value);
200  virtual double heading() const;
201 
203  virtual void setLocation(const DtVector& loc);
204  virtual void setLocation(const DtVector& loc, double altAboveGround);
205 
207  virtual void stop();
208 
210  virtual void deferredStop();
211 
213  virtual int objectCount() const;
214 
216  virtual bool createVrfObject();
217  virtual bool createVrfObject(DtVrfObjectFacadeInterface* objectImage);
218 
220  virtual bool modifyVrfObjects();
221  virtual bool modifyVrfObject(DtVrfObjectFacadeInterface* objectImage);
222 
225  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0);
226  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0) = 0;
227 
229  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
230  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView);
231  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
232  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView) = 0;
233 
235  virtual void initializeEventProcessor();
236 
238  virtual void setOverlay(const std::string& name);
239  virtual const std::string& overlay() const;
240  virtual std::string defaultOverlayForCreatingObject() const;
241 
243  virtual std::string getNextCreatingName(bool includeCurrent = false);
244 
246  virtual void setAltitudeAboveGL( double alt, bool setInProcessor = true );
247 
249  virtual void setAltitudeAboveSL( double alt, bool setInProcessor = true );
250 
251  virtual void setAltitudeClampType( DtAltitudeClampType type );
252 
253  void setCreating(bool b)
254  {
255  myCreating = b;
256  }
257 
258  bool creating() const
259  {
260  return myCreating;
261  }
262 
263  virtual DtVrfObjectFacadeInterface* principalObjectImage() const;
264  virtual makVrv::DtUniqueID principalObjectID() const;
265 
266  virtual void setUserData(const std::string& userData);
267  virtual const std::string& userData() const;
268 
269  virtual void setExtendedLabels(const std::map<int, DtString>&);
270  virtual const std::map<int, DtString>& extendedLabels() const;
271 
272  virtual void setExtendedDataMap(const std::map<std::string, std::string>& extendedData);
273  virtual void setExtendedDataMap(const std::map<DtString, DtString>& extendedData);
274  virtual const std::map<std::string, std::string>& extendedDataMap() const;
275  virtual void setExtendedData(const std::string& key, const std::string& value);
276  virtual void removeExtendedData(const std::string& key);
277  virtual std::string extendedData(const std::string& key) const;
278 
279  virtual void slot_onComplete();
280  virtual void slot_onPlace(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
281  virtual void slot_onEditComplete(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
282  virtual void slot_onLocationChanged( const DtVector& location, double altAboveGround );
283  virtual void slot_onAltitudeIsDragging(bool);
284 
285  virtual void hideObject( const makVrv::DtUniqueID& id, bool hide );
286 
288  virtual void setPublishObject(bool);
289  virtual bool publishObject() const;
290 
292  virtual void setObjectName(const std::string& name);
293 
295  virtual void setUUIDForCreation(const DtUUID&);
296  virtual const DtUUID& uuidForCreation() const;
297 
299  virtual bool isUniqueName() const;
300 
304  virtual double groundHeight( const DtVector& localPosition, DtVector* localGround = 0,
305  const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>()) const;
306 
307  virtual void setAltitudeAllowed(bool);
308  bool altitudeAllowed() const;
309 
310  virtual const std::string& objectName() const;
311 
314  virtual bool anchorMouseToOrigin() const;
315 
317  virtual bool anchorPositionIsMouse() const;
318 
320  virtual void setAnchorPosition(const DtGeodeticCoord&);
321 
323  virtual DtVector localLocation();
324 
325  virtual DtVector convertGeocentricToGround(const DtVector& geoc, double& altitude) const;
326 
327  virtual void setShowPropertiesDialogBeforeCreate(bool);
328  virtual bool showPropertiesDialogBeforeCreate() const;
329 
331  virtual bool keywordsContain(const std::string&) const;
332  virtual std::string keyword(const std::string&) const;
333  virtual std::string value(const std::string&) const;
334  virtual void addKeyword(const std::string&);
335  virtual void removeKeyword(const std::string&);
336 
337  virtual bool waitingToStop() const;
338 
339  virtual void setEditingType(DtEditingType);
340  DtEditingType editingType() const
341  {
342  return myEditingType;
343  }
344 
347  virtual void setEmbarkationInformation(makVrv::DtUniqueID, bool);
348  virtual makVrv::DtUniqueID embarkedOn() const;
349 
351  virtual std::vector<makVrv::DtElementID> ignoreList() const;
352 
355  virtual void setOverrideIdsToIgnore(const std::vector<makVrv::DtUniqueID>& overrideIgnore);
356 
358  virtual const std::vector<makVrv::DtElementID>& unifiedIgnoreList() const;
359 
360  virtual void slot_onAltitudeChanged(const DtVector&, double);
361 
363  virtual void cancel();
364 
366  virtual void setFacadesVisible(bool);
367 
369  virtual bool noStyle() const;
370 
371  virtual void slot_onHeadingChanged( double heading );
372 
374  virtual void setHeadingOffset(double d);
375 
377  virtual void disconnectPlacement();
378 
381  virtual void setGroundClampOnPlacement(bool);
382  virtual bool groundClampOnPlacement() const;
383 
385  virtual void notifyOnFinalFacade(DtVrfObjectManipulationHandlerBaseClass*);
386  virtual void removeNotifyOnFinalFacade(DtVrfObjectManipulationHandlerBaseClass*);
387 
389  virtual void connectPlacement();
390 
392  virtual DtVector centerOfMass() const;
393 
396  virtual DtVector sumOfAllLocations() const;
397 
399  virtual void updateOffsetsBasedOnMousePosition(const DtVector& centerOfMass, const DtGeodeticCoord&,
400  bool usImagePoints = false);
401 
403  virtual void setSignalOnMultiSelectionComplete(bool);
404 
406  virtual void setKeywords(const std::string&);
407 
410  virtual void setSelectionCount(int);
412  virtual void parseKeywords(const std::string&);
413 
414  virtual bool warpMouseToOrigin() const;
415  virtual void setWarpMouseToOrigin(bool);
416 
418  boost::signal<void (bool)> signal_embarkationAllowedChanged;
419 
424  boost::signal<void (bool)> signal_showPropertiesDialog;
425 
427  boost::signal<void (bool)> signal_attachObjectToMouse;
428 
430  boost::signal<void (DtVrfObjectFacadeInterface*, DtVrlinkSimulatedBaseStateView* editStateView)> signal_preVisualization;
431 
434  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
435 
437  boost::signal<void (const DtEntityType&, int)> signal_started;
438 
440  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_multiSelectonCreationComplete;
441 
443  {
444  ObjectManipulationData() : myOwnsContentMessages(false), color(0), appearance(0), projected(false),
445  physicalLineHeight(0.), physicalLineWidth(0.), isClosedFigure(false) , embarkId(0), useSlotIfAvailable(false), initialUUID(DtUUID::nullUUID()) {};
446 
448  entityType(omd.entityType)
449  , createdEntityType(omd.createdEntityType)
450  , objectName(omd.objectName)
451  , force(omd.force)
452  , positions(omd.positions)
453  , heading(omd.heading)
454  , isClosedFigure(omd.isClosedFigure)
455  , clamped(omd.clamped)
456  , isAggregated(omd.isAggregated)
457  , userData(omd.userData)
458  , isPublished(omd.isPublished)
459  , extendedData(omd.extendedData)
460  , extendedLabels(omd.extendedLabels)
461  , myOwnsContentMessages(true)
462  , color(omd.color)
463  , appearance(omd.appearance)
464  , overlay(omd.overlay)
465  , projected(omd.projected)
466  , physicalLineHeight(omd.physicalLineHeight)
467  , physicalLineWidth(omd.physicalLineWidth)
468  , embarkId(omd.embarkId)
469  , useSlotIfAvailable(omd.useSlotIfAvailable)
470  , initialUUID(omd.initialUUID)
471  {
472  setContentMessages(omd.myContentMessages);
473  }
474 
476  {
477  if (myOwnsContentMessages)
478  {
479  deleteContentMessages();
480  }
481  }
482 
483  void deleteContentMessages()
484  {
485  std::list<DtSimInterfaceContent*>::iterator iter = myContentMessages.begin();
486  while (iter != myContentMessages.end())
487  {
488  delete *iter;
489  ++iter;
490  }
491 
492  myContentMessages.clear();
493  myOwnsContentMessages = false;
494  }
495 
496  void setContentMessages(const ContentMessages& messages)
497  {
498  if (myOwnsContentMessages)
499  {
500  deleteContentMessages();
501  }
502 
503  ContentMessages::const_iterator iter = messages.begin();
504  while (iter != messages.end())
505  {
506  myContentMessages.push_back(iter->second->clone());
507  ++iter;
508  }
509  }
510 
511  void setContentMessages(const std::list<DtSimInterfaceContent*>& messages)
512  {
513  if (myOwnsContentMessages)
514  {
515  deleteContentMessages();
516  }
517 
518  std::list<DtSimInterfaceContent*>::const_iterator iter = messages.begin();
519  while (iter != messages.end())
520  {
521  myContentMessages.push_back((*iter)->clone());
522  ++iter;
523  }
524  }
525 
527  DtEntityType entityType;
528  DtEntityType createdEntityType;
529  std::string objectName;
530  int force;
531  std::vector<DtVector> positions;
532  double heading;
533  bool clamped;
535  std::string userData;
537  unsigned int color;
538  unsigned int appearance;
539  bool projected;
543  std::map<std::string, std::string> extendedData;
544  std::map<int, DtString> extendedLabels;
545  std::list<DtSimInterfaceContent*> myContentMessages;
547  std::string overlay;
551  };
552 
554  boost::signal<void (bool)> signal_altitudeAllowedChanged;
555 
557  boost::signal<void ( const ObjectManipulationData& )> signal_createObject;
558 
560  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
561 
563  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_stopped;
564 
566  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_eventProcessorRemoved;
567 
569  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_complete;
570 
572  boost::signal<void (const DtVector& )> signal_locationChanged;
573 
575  boost::signal<void (double)> signal_headingChanged;
576 
578  boost::signal<void (double)> signal_altitudeChanged;
579 
581  boost::signal<void (const DtVector&)> signal_placement;
582 
585  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_restoreSelectionState;
586 
588  boost::signal<void (const makVrv::DtUniqueID&)> signal_principalStateViewUpdated;
589 
591  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
592 
594  boost::signal<void (int)> signal_forceChanged;
595 
596  protected:
597  virtual void clearConnections();
598 
600  virtual void slot_simObjectEntryToBeRemoved(const makVrv::DtSimObjectEntry&);
601 
603  virtual bool typeIsValidForEditingByHandler(const makVrv::DtElementEntry::ElementType&, const DtEntityType&) const;
604 
605  virtual void slot_onCancel(bool escPressed);
606 
607  virtual std::string stripNumbers(const std::string& base) const;
608 
609  virtual double defaultAltitudeOffsetFor(DtVrfObjectFacadeInterface* i) const;
610 
611  virtual void warpMouseToLocation( makVrv::DtChannel* channel, const DtVector& location ) const ;
612 
615  virtual void initializeEdit();
616 
617  virtual void slot_onPrincipalStateViewUpdated(DtVrlinkSimulatedBaseStateView* principalStateView,
618  const makVrv::DtUniqueID& principalSceneObjectId );
619 
620  virtual void slot_onStateViewUpdated( DtVrlinkSimulatedBaseStateView* editStateView, makVrv::DtUniqueID sceneObjectId,
621  DtVrlinkSimulatedBaseStateView* principalStateView);
622 
624  virtual void initializeLocationChangeConnections();
625 
628  virtual bool centerOn(const makVrv::DtUniqueID& id, DtVector* centerPos = 0, const DtVector* centerHere = 0,
629  bool centerOnOnlyIfMousePositionIsOffWindow = true) const;
630 
631  virtual void setObjectImageAsAnchor(DtVrfObjectFacadeInterface* objectImage, const DtVector& geocLocation,
632  bool resetOrigin = false);
633 
634  virtual void setHeading(DtVrfObjectFacadeInterface* objectImage, double heading);
635  virtual std::string defaultOverlayFor(const DtRwNLengthStringVector&) const;
636 
637  virtual bool continueWithHandlerCancelOnLastObjectRemoval();
638  virtual bool isOkToStopEditing();
639  virtual void handlerDisabled();
640 
641  virtual void setObjectImageRelativeToPrincipal(DtVrfObjectFacadeInterface* objectImage,
642  const DtVector& thisGeocLocation, const DtTaitBryan& thisGeocOrientation,
643  const DtVector& prGeocLocation, const DtTaitBryan& prGeocOrientation);
644 
646  virtual void setObjectImageRelativeTo(DtVrfObjectFacadeInterface* objectImage,
647  const DtVector& thisGeocLocation, const DtVector& prGeocLocation, bool relativeOnly = false);
648 
650  virtual void setObjectImageRelativeToAltitudeOnly(DtVrfObjectFacadeInterface* objectImage,
651  const DtVector& thisGeocLocation, const DtVector& prGeocLocation);
652 
653  virtual void initializeInterfaceForEdit(DtVrfObjectFacadeInterface*, makVrv::DtUniqueID,
654  const makVrv::DtVrlinkSimulatedBaseState&, const DtVector& principalLocation, const DtTaitBryan& principalOrientation);
655  virtual void calculateAnchor(const DtVector& localAnchor);
656  virtual void calculateAnchorBasedOnMousePosition(makVrv::DtChannel& channel);
657 
658  virtual void initializeAltitudeAboveTerrainForEdit(double curAlt, const DtVector& curPos,
660 
661  virtual void postCreateInitialize(DtVrfObjectFacadeInterface*);
662 
664  virtual bool clampOnPlacement() const;
665 
667  virtual bool clampAtClosestPolygonOnPlacement() const;
668 
670  virtual void updateOffsetsBasedOnMousePosition();
671 
672  virtual bool setupIgnoreLists();
673 
674  virtual void removeObjectBecauseOfDeletion(DtVrfObjectFacadeInterface*);
675 
676  protected:
679  int myForce;
683  std::string myObjectName;
684  std::string myOverlay;
685 
691 
692  std::string myUserData;
693  std::map<std::string, std::string> myExtendedData;
694  std::map<int, DtString> myExtendedLabels;
695 
696  std::string myKey;
697  std::string myKeyData;
699 
701 
703 
705  DtReferenceEllipsoid* myReferenceForConversion;
707 
711  DtGeodeticCoord myAnchorPosition;
712  DtTimedSection* myDeferredStopTimer;
716 
718  std::vector<std::string> myKeywords;
719 
723 
726 
729 
731 
732  typedef std::map<DtVrlinkSimulatedBaseStateView*, makVrv::DtSignalConnectionManager*> StateViewConnections;
738 
741 
742  mutable bool myCheckedEmbark;
743  mutable bool myCanEmbark;
745 
746  mutable std::vector<makVrv::DtElementID> myUnifiedIgnoreList;
747  mutable std::set<makVrv::DtUniqueID> myDIGuyIdsIgnored;
748  mutable std::vector<makVrv::DtUniqueID> myModelIds;
749 
750  std::vector<makVrv::DtElementID> myOverrideIdsToIgnore;
751  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myNotifyOnFinalFacade;
752  };
753 
755  {
756  public:
757  virtual DtVrfObjectManipulationHandlerBaseClass* create() const = 0;
758  };
759 
760  template <typename T>
762  {
763  public:
765  : myDe(de)
766  {
767  }
768 
770  {
771  }
772 
774  {
775  return new T(myDe);
776  }
777 
778  protected:
780  };
781 
782 }

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)