VR-Forces 4.7 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 <vrvUtil/signalslib.h>
14 #include <vrfGuiCore/vrfGuiCore.h>
16 #include <vrvCore/DtDe.h>
17 #include <vrvCore/DtEntityState.h>
18 #include <vrvCore/DtUniqueID.h>
21 #include <vlutil/vlPerformanceStats.h>
23 
24 #include <matrix/vlVector.h>
25 #include <matrix/geodeticCoord.h>
26 #include <vlpi/entityType.h>
27 
28 #include <boost/signal.hpp>
29 
30 namespace makVrv
31 {
32  class DtDe;
33  class DtChannel;
34  class DtSimObjectEntry;
35 }
36 
37 class DtEntityType;
38 class DtString;
41 class DtModelSetEntry;
42 
43 namespace makVrf
44 {
46  {
47  Mouse = 0,
52  };
53 
55  {
56  Box,
69  User_Base = 100
70  };
71 
73  {
80  };
81 
83 
85 
90  {
91  public:
92  typedef std::vector<DtVrfObjectFacadeInterface*> VrfObjectEditFacadeList;
93  typedef std::map<std::string, DtSimInterfaceContent*> ContentMessages;
94 
95  public:
98 
99  public:
100 
105  virtual bool createObject(const DtEntityType& entType, int force,
106  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
107 
109  virtual bool createObject(const DtString& key, const DtString& associatedData,
110  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
111 
115  virtual void editSelectedObjects( const makVrv::DtUniqueID& editId,
116  makVrv::DtChannel& initiatingChannel, double waitTimeAfterComplete = 0.,
118 
121  virtual bool canSetActivationTime() const;
122 
124  virtual void setForce(int);
125  int force() const;
126 
128  virtual void monitorObjectRemoval(bool);
129 
131  virtual void setEventProcessingEnabled( bool value );
132 
134  virtual bool embarkationAllowed() const;
135  virtual void setEmbarkationAllowed(bool);
136 
140  virtual bool canEmbark() const;
141 
143  virtual void setCanEmbark(bool);
144 
146  virtual void setDoNotClamp(bool);
147  bool doNotClamp() const;
148 
150  virtual bool needsEmbarkOnCheck() const;
151 
153  virtual void setIgnoreNextLeftButtonRelease(bool b);
154  virtual void setEditStartedByDoubleClick(bool);
155 
156  virtual makVrv::DtIntersector::IntersectProperties intersectorPickMask() const;
157 
159  virtual DtUUID uuid() const;
160 
163  virtual void setInterfaceContentMessage(const std::string& name, const DtSimInterfaceContent&);
164  virtual void removeInterfaceContentMessage(const std::string&);
165  const ContentMessages& contentMessages() const
166  {
167  return myContentMessages;
168  }
169 
171  virtual HandlerType type() const = 0;
172 
173  virtual std::list<DtSimInterfaceContent*> contentMessagesToList() const;
174 
175  virtual void sendContentMessages();
176 
178  virtual VrfObjectEditFacadeList objectFacades() const;
179 
181  virtual void setAllowCreationOnMouseClick(bool flag);
182 
184  virtual void setLabel(const std::string&);
185  virtual std::string label() const;
186 
188  virtual bool allowCreationOnMouseClick() const;
189 
192  virtual void setEventProcessor(DtVrfObjectManipulationEventProcessor*);
193 
195  virtual DtVector clampToGround(const DtVector&) const;
196  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&) const;
197 
199  virtual void setAttachObjectToMouse(bool);
200 
202  virtual bool attachObjectToMouse() const;
203 
205  virtual void setHeading(double value);
206  virtual double heading() const;
207 
209  virtual void setLocation(const DtVector& loc);
210  virtual void setLocation(const DtVector& loc, double altAboveGround);
211 
213  virtual void stop();
214 
216  virtual void deferredStop();
217 
219  virtual int objectCount() const;
220 
222  virtual bool createVrfObject();
223  virtual bool createVrfObject(DtVrfObjectFacadeInterface* objectImage);
224 
226  virtual bool modifyVrfObjects();
227  virtual bool modifyVrfObject(DtVrfObjectFacadeInterface* objectImage);
228 
231  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0);
232  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0) = 0;
233 
235  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
236  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView);
237  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
238  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView) = 0;
239 
241  virtual void initializeEventProcessor();
242 
244  virtual void setOverlay(const std::string& name);
245  virtual const std::string& overlay() const;
246  virtual std::string defaultOverlayForCreatingObject() const;
247 
249  virtual std::string getNextCreatingName(bool includeCurrent = false);
250 
252  virtual void setAltitudeAboveGL( double alt, bool setInProcessor = true );
253 
255  virtual void setAltitudeAboveSL( double alt, bool setInProcessor = true );
256 
257  virtual void setAltitudeClampType( DtAltitudeClampType type );
258  DtAltitudeClampType altitudeClampType() const
259  {
260  return myAltitudeClampType;
261  }
262 
263  void setCreating(bool b)
264  {
265  myCreating = b;
266  }
267 
268  bool creating() const
269  {
270  return myCreating;
271  }
272 
273  virtual DtVrfObjectFacadeInterface* principalObjectImage() const;
274  virtual makVrv::DtUniqueID principalObjectID() const;
275 
276  virtual void setUserData(const std::string& userData);
277  virtual const std::string& userData() const;
278 
279  virtual void setExtendedLabels(const std::map<int, DtString>&);
280  virtual const std::map<int, DtString>& extendedLabels() const;
281 
282  virtual void setExtendedDataMap(const std::map<std::string, std::string>& extendedData);
283  virtual void setExtendedDataMap(const std::map<DtString, DtString>& extendedData);
284  virtual const std::map<std::string, std::string>& extendedDataMap() const;
285  virtual void setExtendedData(const std::string& key, const std::string& value);
286  virtual void removeExtendedData(const std::string& key);
287  virtual std::string extendedData(const std::string& key) const;
288 
289  virtual void slot_onComplete();
290  virtual void slot_onPlace(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
291  virtual void slot_onEditComplete(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
292  virtual void slot_onLocationChanged( const DtVector& location, double altAboveGround );
293  virtual void slot_onAltitudeIsDragging(bool);
294 
295  virtual void hideObject( const makVrv::DtUniqueID& id, bool hide );
296 
298  virtual void setPublishObject(bool);
299  virtual bool publishObject() const;
300 
302  virtual void setObjectName(const std::string& name);
303 
305  virtual void setUUIDForCreation(const DtUUID&);
306  virtual const DtUUID& uuidForCreation() const;
307 
309  virtual bool isUniqueName() const;
310 
314  virtual double groundHeight( const DtVector& localPosition, DtVector* localGround = 0,
315  const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>()) const;
316 
317  virtual void setAltitudeAllowed(bool);
318  bool altitudeAllowed() const;
319 
320  virtual const std::string& objectName() const;
321 
324  virtual bool anchorMouseToOrigin() const;
325 
327  virtual bool anchorPositionIsMouse() const;
328 
330  virtual void setAnchorPosition(const DtGeodeticCoord&);
331 
333  virtual DtVector localLocation();
334 
335  virtual DtVector convertGeocentricToGround(const DtVector& geoc, double& altitude) const;
336 
337  virtual void setShowPropertiesDialogBeforeCreate(bool);
338  virtual bool showPropertiesDialogBeforeCreate() const;
339 
341  virtual bool keywordsContain(const std::string&) const;
342  virtual std::string keyword(const std::string&) const;
343  virtual std::string value(const std::string&) const;
344  virtual void addKeyword(const std::string&);
345  virtual void removeKeyword(const std::string&);
346 
347  virtual bool waitingToStop() const;
348 
349  virtual void setEditingType(DtEditingType);
350  DtEditingType editingType() const
351  {
352  return myEditingType;
353  }
354 
357  virtual void setEmbarkationInformation(makVrv::DtUniqueID, bool);
358  virtual makVrv::DtUniqueID embarkedOn() const;
359 
361  virtual std::vector<makVrv::DtElementID> ignoreList() const;
362 
365  virtual void setOverrideIdsToIgnore(const std::vector<makVrv::DtUniqueID>& overrideIgnore);
366 
368  virtual const std::vector<makVrv::DtElementID>& unifiedIgnoreList() const;
369 
370  virtual void slot_onAltitudeChanged(const DtVector&, double);
371 
373  virtual void cancel();
374 
376  virtual void setFacadesVisible(bool);
377 
379  virtual bool noStyle() const;
380 
381  virtual void slot_onHeadingChanged( double heading );
382 
384  virtual void setHeadingOffset(double d);
385 
387  virtual void disconnectPlacement();
388 
391  virtual void setGroundClampOnPlacement(bool);
392  virtual bool groundClampOnPlacement() const;
393 
395  virtual void notifyOnFinalFacade(DtVrfObjectManipulationHandlerBaseClass*);
396  virtual void removeNotifyOnFinalFacade(DtVrfObjectManipulationHandlerBaseClass*);
397 
399  virtual void connectPlacement();
400 
402  virtual DtVector centerOfMass() const;
403 
406  virtual DtVector sumOfAllLocations() const;
407 
409  virtual void updateOffsetsBasedOnMousePosition(const DtVector& centerOfMass, const DtGeodeticCoord&,
410  bool usImagePoints = false);
411 
413  virtual void setSignalOnMultiSelectionComplete(bool);
414 
416  virtual void setKeywords(const std::string&);
417 
420  virtual void setSelectionCount(int);
422  virtual void parseKeywords(const std::string&);
423 
424  virtual bool warpMouseToOrigin() const;
425  virtual void setWarpMouseToOrigin(bool);
426 
428  boost::signal<void (bool)> signal_embarkationAllowedChanged;
429 
434  boost::signal<void (bool)> signal_showPropertiesDialog;
435 
437  boost::signal<void (bool)> signal_attachObjectToMouse;
438 
440  boost::signal<void (DtVrfObjectFacadeInterface*, DtVrlinkSimulatedBaseStateView* editStateView)> signal_preVisualization;
441 
444  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
445 
447  boost::signal<void (const DtEntityType&, int)> signal_started;
448 
450  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_multiSelectonCreationComplete;
451 
453  {
454  ObjectManipulationData() : myOwnsContentMessages(false), color(0), appearance(0), projected(false),
455  physicalLineHeight(0.), physicalLineWidth(0.), isClosedFigure(false) , isProjected(false), embarkId(0), useSlotIfAvailable(false), initialUUID(DtUUID::nullUUID()) {};
456 
458  entityType(omd.entityType)
459  , createdEntityType(omd.createdEntityType)
460  , objectName(omd.objectName)
461  , force(omd.force)
462  , positions(omd.positions)
463  , heading(omd.heading)
464  , isProjected(omd.isProjected)
465  , isClosedFigure(omd.isClosedFigure)
466  , clamped(omd.clamped)
467  , isAggregated(omd.isAggregated)
468  , userData(omd.userData)
469  , isPublished(omd.isPublished)
470  , extendedData(omd.extendedData)
471  , extendedLabels(omd.extendedLabels)
472  , myOwnsContentMessages(true)
473  , color(omd.color)
474  , appearance(omd.appearance)
475  , overlay(omd.overlay)
476  , projected(omd.projected)
477  , physicalLineHeight(omd.physicalLineHeight)
478  , physicalLineWidth(omd.physicalLineWidth)
479  , embarkId(omd.embarkId)
480  , useSlotIfAvailable(omd.useSlotIfAvailable)
481  , initialUUID(omd.initialUUID)
482  {
483  setContentMessages(omd.myContentMessages);
484  }
485 
487  {
488  if (myOwnsContentMessages)
489  {
490  deleteContentMessages();
491  }
492  }
493 
494  void deleteContentMessages()
495  {
496  std::list<DtSimInterfaceContent*>::iterator iter = myContentMessages.begin();
497  while (iter != myContentMessages.end())
498  {
499  delete *iter;
500  ++iter;
501  }
502 
503  myContentMessages.clear();
504  myOwnsContentMessages = false;
505  }
506 
507  void setContentMessages(const ContentMessages& messages)
508  {
509  if (myOwnsContentMessages)
510  {
511  deleteContentMessages();
512  }
513 
514  ContentMessages::const_iterator iter = messages.begin();
515  while (iter != messages.end())
516  {
517  myContentMessages.push_back(iter->second->clone());
518  ++iter;
519  }
520  }
521 
522  void setContentMessages(const std::list<DtSimInterfaceContent*>& messages)
523  {
524  if (myOwnsContentMessages)
525  {
526  deleteContentMessages();
527  }
528 
529  std::list<DtSimInterfaceContent*>::const_iterator iter = messages.begin();
530  while (iter != messages.end())
531  {
532  myContentMessages.push_back((*iter)->clone());
533  ++iter;
534  }
535  }
536 
538  DtEntityType entityType;
539  DtEntityType createdEntityType;
540  std::string objectName;
541  int force;
542  std::vector<DtVector> positions;
543  double heading;
544  bool clamped;
547  std::string userData;
549  unsigned int color;
550  unsigned int appearance;
551  bool projected;
555  std::map<std::string, std::string> extendedData;
556  std::map<int, DtString> extendedLabels;
557  std::list<DtSimInterfaceContent*> myContentMessages;
559  std::string overlay;
563  };
564 
566  boost::signal<void (bool)> signal_altitudeAllowedChanged;
567 
569  boost::signal<void ( const ObjectManipulationData& )> signal_createObject;
570 
572  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
573 
575  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_stopped;
576 
578  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_eventProcessorRemoved;
579 
581  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_complete;
582 
584  boost::signal<void (const DtVector& )> signal_locationChanged;
585 
587  boost::signal<void (double)> signal_headingChanged;
588 
590  boost::signal<void (double)> signal_altitudeChanged;
591 
593  boost::signal<void (const DtVector&)> signal_placement;
594 
597  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_restoreSelectionState;
598 
600  boost::signal<void (const makVrv::DtUniqueID&)> signal_principalStateViewUpdated;
601 
603  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
604 
606  boost::signal<void (int)> signal_forceChanged;
607 
608  protected:
609  virtual void clearConnections();
610 
612  virtual void slot_simObjectEntryToBeRemoved(const makVrv::DtSimObjectEntry&);
613 
615  virtual bool typeIsValidForEditingByHandler(const makVrv::DtElementEntry::ElementType&, const DtEntityType&) const;
616 
617  virtual void slot_onCancel(bool escPressed);
618 
619  virtual std::string stripNumbers(const std::string& base) const;
620 
621  virtual double defaultAltitudeOffsetFor(DtVrfObjectFacadeInterface* i) const;
622 
623  virtual void warpMouseToLocation( makVrv::DtChannel* channel, const DtVector& location ) const ;
624 
627  virtual void initializeEdit();
628 
629  virtual void slot_onPrincipalStateViewUpdated(DtVrlinkSimulatedBaseStateView* principalStateView,
630  const makVrv::DtUniqueID& principalSceneObjectId );
631 
632  virtual void slot_onStateViewUpdated( DtVrlinkSimulatedBaseStateView* editStateView, makVrv::DtUniqueID sceneObjectId,
633  DtVrlinkSimulatedBaseStateView* principalStateView);
634 
636  virtual void initializeLocationChangeConnections();
637 
640  virtual bool centerOn(const makVrv::DtUniqueID& id, DtVector* centerPos = 0, const DtVector* centerHere = 0,
641  bool centerOnOnlyIfMousePositionIsOffWindow = true) const;
642 
643  virtual void setObjectImageAsAnchor(DtVrfObjectFacadeInterface* objectImage, const DtVector& geocLocation,
644  bool resetOrigin = false);
645 
646  virtual void setHeading(DtVrfObjectFacadeInterface* objectImage, double heading);
647  virtual std::string defaultOverlayFor(const DtRwNLengthStringVector&) const;
648  virtual std::string defaultOverlayFor(const DtModelSetEntry* e) const;
649 
650  virtual bool continueWithHandlerCancelOnLastObjectRemoval();
651  virtual bool isOkToStopEditing();
652  virtual void handlerDisabled();
653 
654  virtual void setObjectImageRelativeToPrincipal(DtVrfObjectFacadeInterface* objectImage,
655  const DtVector& thisGeocLocation, const DtTaitBryan& thisGeocOrientation,
656  const DtVector& prGeocLocation, const DtTaitBryan& prGeocOrientation);
657 
659  virtual void setObjectImageRelativeTo(DtVrfObjectFacadeInterface* objectImage,
660  const DtVector& thisGeocLocation, const DtVector& prGeocLocation, bool relativeOnly = false);
661 
663  virtual void setObjectImageRelativeToAltitudeOnly(DtVrfObjectFacadeInterface* objectImage,
664  const DtVector& thisGeocLocation, const DtVector& prGeocLocation);
665 
666  virtual void initializeInterfaceForEdit(DtVrfObjectFacadeInterface*, makVrv::DtUniqueID,
667  const makVrv::DtVrlinkSimulatedBaseState&, const DtVector& principalLocation, const DtTaitBryan& principalOrientation);
668  virtual void calculateAnchor(const DtVector& localAnchor);
669  virtual void calculateAnchorBasedOnMousePosition(makVrv::DtChannel& channel);
670 
671  virtual void initializeAltitudeAboveTerrainForEdit(double curAlt, const DtVector& curPos,
673 
674  virtual void postCreateInitialize(DtVrfObjectFacadeInterface*);
675 
677  virtual bool clampOnPlacement() const;
678 
680  virtual bool clampAtClosestPolygonOnPlacement() const;
681 
683  virtual void updateOffsetsBasedOnMousePosition();
684 
685  virtual bool setupIgnoreLists();
686 
687  virtual void removeObjectBecauseOfDeletion(DtVrfObjectFacadeInterface*);
688 
689  protected:
692  int myForce;
696  std::string myObjectName;
697  std::string myOverlay;
698 
704 
705  std::string myUserData;
706  std::map<std::string, std::string> myExtendedData;
707  std::map<int, DtString> myExtendedLabels;
708 
709  std::string myKey;
710  std::string myKeyData;
712 
714 
716 
717  boost::signalslib::connection myObjectRemovalConnection;
718 
720  DtReferenceEllipsoid* myReferenceForConversion;
722 
726  DtGeodeticCoord myAnchorPosition;
727  DtTimedSection* myDeferredStopTimer;
731 
733  std::vector<std::string> myKeywords;
734 
738 
741 
744 
746 
747  typedef std::map<DtVrlinkSimulatedBaseStateView*, makVrv::DtSignalConnectionManager*> StateViewConnections;
753 
756 
757  mutable bool myCheckedEmbark;
758  mutable bool myCanEmbark;
760 
761  mutable std::vector<makVrv::DtElementID> myUnifiedIgnoreList;
762  mutable std::set<makVrv::DtUniqueID> myDIGuyIdsIgnored;
763  mutable std::vector<makVrv::DtUniqueID> myModelIds;
764 
765  std::vector<makVrv::DtElementID> myOverrideIdsToIgnore;
766  std::vector<DtVrfObjectManipulationHandlerBaseClass*> myNotifyOnFinalFacade;
767  };
768 
770  {
771  public:
772  virtual DtVrfObjectManipulationHandlerBaseClass* create() const = 0;
773  };
774 
775  template <typename T>
777  {
778  public:
780  : myDe(de)
781  {
782  }
783 
785  {
786  }
787 
789  {
790  return new T(myDe);
791  }
792 
793  protected:
795  };
796 
797 }

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)