VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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,
65  User_Base = 100
66  };
67 
69  {
75  };
76 
78 
80 
85  {
86  public:
87  typedef std::vector<DtVrfObjectFacadeInterface*> VrfObjectEditFacadeList;
88  typedef std::map<std::string, DtSimInterfaceContent*> ContentMessages;
89 
90  public:
93 
94  public:
95 
100  virtual bool createObject(const DtEntityType& entType, int force,
101  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
102 
104  virtual bool createObject(const DtString& key, const DtString& associatedData,
105  DtCreationSignalType creationSignal=DtNoCreationSignal, const std::string& keywords = "");
106 
110  virtual void editSelectedObjects( const makVrv::DtUniqueID& editId,
111  makVrv::DtChannel& initiatingChannel, double waitTimeAfterComplete = 0.,
113 
116  virtual bool canSetActivationTime() const;
117 
119  virtual void setForce(int);
120  int force() const;
121 
123  virtual void setEventProcessingEnabled( bool value );
124 
126  virtual bool embarkationAllowed() const;
127  virtual void setEmbarkationAllowed(bool);
128 
132  virtual bool canEmbark() const;
133 
135  virtual void setCanEmbark(bool);
136 
138  virtual bool needsEmbarkOnCheck() const;
139 
141  virtual void setIgnoreNextLeftButtonRelease(bool b);
142  virtual void setEditStartedByDoubleClick(bool);
143 
144  virtual makVrv::DtIntersector::IntersectProperties intersectorPickMask() const;
145 
147  virtual DtUUID uuid() const;
148 
151  virtual void setInterfaceContentMessage(const std::string& name, const DtSimInterfaceContent&);
152  virtual void removeInterfaceContentMessage(const std::string&);
153  const ContentMessages& contentMessages() const
154  {
155  return myContentMessages;
156  }
157 
159  virtual HandlerType type() const = 0;
160 
161  virtual std::list<DtSimInterfaceContent*> contentMessagesToList() const;
162 
163  virtual void sendContentMessages();
164 
166  virtual VrfObjectEditFacadeList objectFacades() const;
167 
169  virtual void setAllowCreationOnMouseClick(bool flag);
170 
172  virtual void setLabel(const std::string&);
173  virtual std::string label() const;
174 
176  virtual bool allowCreationOnMouseClick() const;
177 
180  virtual void setEventProcessor(DtVrfObjectManipulationEventProcessor*);
181 
183  virtual DtVector clampToGround(const DtVector&) const;
184  virtual DtGeodeticCoord clampToGround(const DtGeodeticCoord&) const;
185 
187  virtual void setAttachObjectToMouse(bool);
188 
190  virtual bool attachObjectToMouse() const;
191 
193  virtual void setHeading(double value);
194  virtual double heading() const;
195 
197  virtual void setLocation(const DtVector& loc);
198  virtual void setLocation(const DtVector& loc, double altAboveGround);
199 
201  virtual void stop();
202 
204  virtual void deferredStop();
205 
207  virtual int objectCount() const;
208 
210  virtual bool createVrfObject();
211  virtual bool createVrfObject(DtVrfObjectFacadeInterface* objectImage);
212 
214  virtual bool modifyVrfObjects();
215  virtual bool modifyVrfObject(DtVrfObjectFacadeInterface* objectImage);
216 
219  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0);
220  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView = 0) = 0;
221 
223  virtual DtVrfObjectFacadeInterface* createAndAddLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
224  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView);
225  virtual DtVrfObjectFacadeInterface* createLocalRepresentation(DtVrlinkSimulatedBaseStateView* editStateView,
226  makVrv::DtUniqueID sceneObjectId, DtVrlinkSimulatedBaseStateView* principalStateView) = 0;
227 
229  virtual void initializeEventProcessor();
230 
232  virtual void setOverlay(const std::string& name);
233  virtual const std::string& overlay() const;
234  virtual std::string defaultOverlayForCreatingObject() const;
235 
237  virtual std::string getNextCreatingName(bool includeCurrent = false);
238 
240  virtual void setAltitudeAboveGL( double alt, bool setInProcessor = true );
241 
243  virtual void setAltitudeAboveSL( double alt, bool setInProcessor = true );
244 
245  virtual void setAltitudeClampType( DtAltitudeClampType type );
246 
247  void setCreating(bool b)
248  {
249  myCreating = b;
250  }
251 
252  bool creating() const
253  {
254  return myCreating;
255  }
256 
257  virtual DtVrfObjectFacadeInterface* principalObjectImage() const;
258  virtual makVrv::DtUniqueID principalObjectID() const;
259 
260  virtual void setUserData(const std::string& userData);
261  virtual const std::string& userData() const;
262 
263  virtual void setExtendedLabels(const std::map<int, DtString>&);
264  virtual const std::map<int, DtString>& extendedLabels() const;
265 
266  virtual void setExtendedDataMap(const std::map<std::string, std::string>& extendedData);
267  virtual void setExtendedDataMap(const std::map<DtString, DtString>& extendedData);
268  virtual const std::map<std::string, std::string>& extendedDataMap() const;
269  virtual void setExtendedData(const std::string& key, const std::string& value);
270  virtual void removeExtendedData(const std::string& key);
271  virtual std::string extendedData(const std::string& key) const;
272 
273  virtual void slot_onComplete();
274  virtual void slot_onPlace(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
275  virtual void slot_onEditComplete(makVrv::DtUniqueID, const DtVector&, double altAboveGround);
276  virtual void slot_onLocationChanged( const DtVector& location, double altAboveGround );
277  virtual void slot_onAltitudeIsDragging(bool);
278 
279  virtual void hideObject( const makVrv::DtUniqueID& id, bool hide );
280 
282  virtual void setPublishObject(bool);
283  virtual bool publishObject() const;
284 
286  virtual void setObjectName(const std::string& name);
287 
289  virtual bool isUniqueName() const;
290 
294  virtual double groundHeight( const DtVector& localPosition, DtVector* localGround = 0,
295  const std::vector<makVrv::DtUniqueID>& ignore = std::vector<makVrv::DtUniqueID>()) const;
296 
297  virtual void setAltitudeAllowed(bool);
298  bool altitudeAllowed() const;
299 
300  virtual const std::string& objectName() const;
301 
304  virtual bool anchorMouseToOrigin() const;
305 
307  virtual bool anchorPositionIsMouse() const;
308 
310  virtual DtVector localLocation();
311 
312  virtual DtVector convertGeocentricToGround(const DtVector& geoc, double& altitude) const;
313 
314  virtual void setShowPropertiesDialogBeforeCreate(bool);
315  virtual bool showPropertiesDialogBeforeCreate() const;
316 
318  virtual bool keywordsContain(const std::string&) const;
319  virtual std::string keyword(const std::string&) const;
320  virtual std::string value(const std::string&) const;
321  virtual void addKeyword(const std::string&);
322  virtual void removeKeyword(const std::string&);
323 
324  virtual bool waitingToStop() const;
325 
326  virtual void setEditingType(DtEditingType);
327  DtEditingType editingType() const
328  {
329  return myEditingType;
330  }
331 
334  virtual void setEmbarkationInformation(makVrv::DtUniqueID, bool);
335  virtual makVrv::DtUniqueID embarkedOn() const;
336 
338  virtual std::vector<makVrv::DtElementID> ignoreList() const;
339 
341  virtual std::vector<makVrv::DtElementID> unifiedIgnoreList() const;
342 
343  virtual void slot_onAltitudeChanged(const DtVector&, double);
344 
346  virtual void cancel();
347 
349  virtual void setFacadesVisible(bool);
350 
352  virtual bool noStyle() const;
353 
354  virtual void slot_onHeadingChanged( double heading );
355 
357  virtual void setHeadingOffset(double d);
358 
360  virtual void disconnectPlacement();
361 
364  virtual void setGroundClampOnPlacement(bool);
365  virtual bool groundClampOnPlacement() const;
366 
368  virtual void connectPlacement();
369 
371  virtual DtVector centerOfMass() const;
372 
375  virtual DtVector sumOfAllLocations() const;
376 
378  virtual void updateOffsetsBasedOnMousePosition(const DtVector& centerOfMass, const DtGeodeticCoord&,
379  bool usImagePoints = false);
380 
382  virtual void setSignalOnMultiSelectionComplete(bool);
383 
385  virtual void setKeywords(const std::string&);
386 
389  virtual void setSelectionCount(int);
391  virtual void parseKeywords(const std::string&);
392 
393  virtual bool warpMouseToOrigin() const;
394  virtual void setWarpMouseToOrigin(bool);
395 
397  boost::signal<void (bool)> signal_embarkationAllowedChanged;
398 
403  boost::signal<void (bool)> signal_showPropertiesDialog;
404 
406  boost::signal<void (bool)> signal_attachObjectToMouse;
407 
409  boost::signal<void (DtVrfObjectFacadeInterface*, DtVrlinkSimulatedBaseStateView* editStateView)> signal_preVisualization;
410 
413  boost::signal<void (DtVrfObjectFacadeInterface*, bool)> signal_objectFacadeCreated;
414 
416  boost::signal<void (const DtEntityType&, int)> signal_started;
417 
419  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_multiSelectonCreationComplete;
420 
422  {
423  ObjectManipulationData() : myOwnsContentMessages(false), color(0), appearance(0), projected(false),
424  physicalLineHeight(0.), physicalLineWidth(0.), isClosedFigure(false) , embarkId(0), useSlotIfAvailable(false) {};
425 
427  entityType(omd.entityType)
428  , objectName(omd.objectName)
429  , force(omd.force)
430  , positions(omd.positions)
431  , heading(omd.heading)
432  , isClosedFigure(omd.isClosedFigure)
433  , clamped(omd.clamped)
434  , isAggregated(omd.isAggregated)
435  , userData(omd.userData)
436  , isPublished(omd.isPublished)
437  , extendedData(omd.extendedData)
438  , extendedLabels(omd.extendedLabels)
439  , myOwnsContentMessages(true)
440  , color(omd.color)
441  , appearance(omd.appearance)
442  , overlay(omd.overlay)
443  , projected(omd.projected)
444  , physicalLineHeight(omd.physicalLineHeight)
445  , physicalLineWidth(omd.physicalLineWidth)
446  , embarkId(omd.embarkId)
447  , useSlotIfAvailable(omd.useSlotIfAvailable)
448  {
449  setContentMessages(omd.myContentMessages);
450  }
451 
453  {
454  if (myOwnsContentMessages)
455  {
456  deleteContentMessages();
457  }
458  }
459 
460  void deleteContentMessages()
461  {
462  std::list<DtSimInterfaceContent*>::iterator iter = myContentMessages.begin();
463  while (iter != myContentMessages.end())
464  {
465  delete *iter;
466  ++iter;
467  }
468 
469  myContentMessages.clear();
470  myOwnsContentMessages = false;
471  }
472 
473  void setContentMessages(const ContentMessages& messages)
474  {
475  if (myOwnsContentMessages)
476  {
477  deleteContentMessages();
478  }
479 
480  ContentMessages::const_iterator iter = messages.begin();
481  while (iter != messages.end())
482  {
483  myContentMessages.push_back(iter->second->clone());
484  ++iter;
485  }
486  }
487 
488  void setContentMessages(const std::list<DtSimInterfaceContent*>& messages)
489  {
490  if (myOwnsContentMessages)
491  {
492  deleteContentMessages();
493  }
494 
495  std::list<DtSimInterfaceContent*>::const_iterator iter = messages.begin();
496  while (iter != messages.end())
497  {
498  myContentMessages.push_back((*iter)->clone());
499  ++iter;
500  }
501  }
502 
504  DtEntityType entityType;
505  std::string objectName;
506  int force;
507  std::vector<DtVector> positions;
508  double heading;
509  bool clamped;
511  std::string userData;
513  unsigned int color;
514  unsigned int appearance;
515  bool projected;
519  std::map<std::string, std::string> extendedData;
520  std::map<int, DtString> extendedLabels;
521  std::list<DtSimInterfaceContent*> myContentMessages;
523  std::string overlay;
526  };
527 
529  boost::signal<void (bool)> signal_altitudeAllowedChanged;
530 
532  boost::signal<void ( const ObjectManipulationData& )> signal_createObject;
533 
535  boost::signal<void (const DtString&, const DtString&)> signal_createTerrainProp;
536 
538  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_stopped;
539 
541  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_complete;
542 
544  boost::signal<void (const DtVector& )> signal_locationChanged;
545 
547  boost::signal<void (double)> signal_headingChanged;
548 
550  boost::signal<void (double)> signal_altitudeChanged;
551 
553  boost::signal<void (const DtVector&)> signal_placement;
554 
557  boost::signal<void (DtVrfObjectManipulationHandlerBaseClass*)> signal_restoreSelectionState;
558 
560  boost::signal<void (const makVrv::DtUniqueID&)> signal_principalStateViewUpdated;
561 
563  boost::signal<void (DtVrfObjectFacadeInterface*)> signal_objectFacadeAboutToBeRemoved;
564 
565  protected:
567  virtual void slot_simObjectEntryToBeRemoved(const makVrv::DtSimObjectEntry&);
568 
570  virtual bool typeIsValidForEditingByHandler(const makVrv::DtElementEntry::ElementType&, const DtEntityType&) const;
571 
572  virtual void slot_onCancel(bool escPressed);
573 
574  virtual std::string stripNumbers(const std::string& base) const;
575 
576  virtual double defaultAltitudeOffsetFor(DtVrfObjectFacadeInterface* i) const;
577 
578  virtual void warpMouseToLocation( makVrv::DtChannel* channel, const DtVector& location ) const ;
579 
582  virtual void initializeEdit();
583 
584  virtual void slot_onPrincipalStateViewUpdated(DtVrlinkSimulatedBaseStateView* principalStateView,
585  const makVrv::DtUniqueID& principalSceneObjectId );
586 
587  virtual void slot_onStateViewUpdated( DtVrlinkSimulatedBaseStateView* editStateView, makVrv::DtUniqueID sceneObjectId,
588  DtVrlinkSimulatedBaseStateView* principalStateView);
589 
592  virtual bool centerOn(const makVrv::DtUniqueID& id, DtVector* centerPos = 0, const DtVector* centerHere = 0,
593  bool centerOnOnlyIfMousePositionIsOffWindow = true) const;
594 
595  virtual void setObjectImageAsAnchor(DtVrfObjectFacadeInterface* objectImage, const DtVector& geocLocation,
596  bool resetOrigin = false);
597 
598  virtual void setHeading(DtVrfObjectFacadeInterface* objectImage, double heading);
599  virtual std::string defaultOverlayFor(const DtRwNLengthStringVector&) const;
600 
601  virtual void setObjectImageRelativeToPrincipal(DtVrfObjectFacadeInterface* objectImage,
602  const DtVector& thisGeocLocation, const DtTaitBryan& thisGeocOrientation,
603  const DtVector& prGeocLocation, const DtTaitBryan& prGeocOrientation);
604 
606  virtual void setObjectImageRelativeTo(DtVrfObjectFacadeInterface* objectImage,
607  const DtVector& thisGeocLocation, const DtVector& prGeocLocation, bool relativeOnly = false);
608 
610  virtual void setObjectImageRelativeToAltitudeOnly(DtVrfObjectFacadeInterface* objectImage,
611  const DtVector& thisGeocLocation, const DtVector& prGeocLocation);
612 
613  virtual void initializeInterfaceForEdit(DtVrfObjectFacadeInterface*, makVrv::DtUniqueID,
614  const makVrv::DtVrlinkSimulatedBaseState&, const DtVector& principalLocation, const DtTaitBryan& principalOrientation);
615  virtual void calculateAnchor(const DtVector& localAnchor);
616  virtual void calculateAnchorBasedOnMousePosition(makVrv::DtChannel& channel);
617 
618  virtual void initializeAltitudeAboveTerrainForEdit(double curAlt, const DtVector& curPos,
620 
621  virtual void postCreateInitialize(DtVrfObjectFacadeInterface*);
622 
624  virtual bool clampOnPlacement() const;
625 
627  virtual bool clampAtClosestPolygonOnPlacement() const;
628 
630  virtual void updateOffsetsBasedOnMousePosition();
631 
632  protected:
635  int myForce;
639  std::string myObjectName;
640  std::string myOverlay;
641 
647 
648  std::string myUserData;
649  std::map<std::string, std::string> myExtendedData;
650  std::map<int, DtString> myExtendedLabels;
651 
652  std::string myKey;
653  std::string myKeyData;
655 
657 
659 
661  DtReferenceEllipsoid* myReferenceForConversion;
663 
667  DtGeodeticCoord myAnchorPosition;
668  DtTimedSection* myDeferredStopTimer;
672 
674  std::vector<std::string> myKeywords;
675 
679 
682 
685 
686  typedef std::map<DtVrlinkSimulatedBaseStateView*, makVrv::DtSignalConnectionManager*> StateViewConnections;
692 
695 
696  mutable bool myCheckedEmbark;
697  mutable bool myCanEmbark;
698  };
699 
701  {
702  public:
703  virtual DtVrfObjectManipulationHandlerBaseClass* create() const = 0;
704  };
705 
706  template <typename T>
708  {
709  public:
711  : myDe(de)
712  {
713  }
714 
716  {
717  }
718 
720  {
721  return new T(myDe);
722  }
723 
724  protected:
726  };
727 
728 }

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)