VR-Vantage API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtObserver.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright (c) 2015 MAK Technologies, Inc.
3  * All rights reserved.
4  ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/vrvCore.h>
13 #include <vrvCore/DtElementData.h>
14 #include <vrvCore/DtUniqueID.h>
17 
20 
21 #include <boost/signals.hpp>
22 
23 #include <string>
24 #include <vector>
25 
26 class DtTaitBryan;
27 class DtVector;
28 
29 namespace makVrv
30 {
31  class DtObserverObjectAgent;
32  class DtDe;
33  class DtAgentManagerInterface;
34  class DtObserverConfiguration;
35  class DtSensor;
36  class DtOceanLayer;
37 
41  {
42  public:
43 
44  typedef std::vector<DtElementID> ElementList;
45 
47  DtObserver(DtDe& de, DtAgentManagerInterface& sceneInterface,
48  const DtObserverConfiguration& config );
49 
51  virtual ~DtObserver();
52 
54  inline DtDe& de()
55  {
56  return myDe;
57  }
58 
60  DtObserverObjectAgent& agent();
61 
63  const DtObserverObjectAgent& agent() const;
64 
66  bool getRecord(makArchives::DtObserverStateRecord& recOut) const;
67 
69  void setFromRecord(const makArchives::DtObserverStateRecord& rec);
70 
72  bool getRecord(makArchives::DtObserverSettingsRecord& recOut) const;
73 
75  void setFromRecord(const makArchives::DtObserverSettingsRecord& rec);
76 
81  makArchives::DtObserverStateRecord getCachedObserverStateRecord() const;
82 
85  bool hasInitialLocation() const;
86 
88  const std::string& name() const;
89  void setName( const std::string& name );
90 
95 
96  int observerMode() const;
97  void setObserverMode( int observerMode );
99 
101  double viewResolution() const;
102 
104  void setViewResolution( double resolution );
105 
107  double viewMagnification() const;
108 
110  void setViewMagnification( double magnficationFactor );
111 
112  DtObserverConfiguration& configuration();
113  const DtObserverConfiguration& configuration() const;
114 
116  bool inUse( const std::string& channelKeyToIgnore = "" ) const;
117 
118  //@name Attachment functions.
120 
122  void attachToNextElement();
123 
125  void attachToPreviousElement();
126 
128  bool isAttached(DtElementID) const;
129 
131  bool isPrimaryAttached(DtElementID) const;
132 
134  bool isSecondaryAttached(DtElementID) const;
135 
139  void setPrimaryAttachment( const ElementList& element );
140 
145  void setSecondaryAttachment( const ElementList& objects );
146 
150  void setPartAttachment(int partId);
151 
153  int partAttachment() const;
154 
156  void detach();
157 
159  bool attached() const;
160 
162  bool tracking() const;
163 
165  const ElementList& primaryAttachments() const;
166 
168  const ElementList& secondaryAttachments() const;
169 
170  void setHideModelOnAttach( bool hide );
171  bool hideModelOnAttach() const;
172 
176 
177  void setAttachmentHas3DCockpit( bool cockpit);
178  bool attachmentHas3DCockpit() const;
180 
181  void setAttachType( DtObserverObject::AttachType type );
182  DtObserverObject::AttachType attachType() const;
183 
184  void setOrientToTargetConstraint( bool orient );
185  bool orientToTargetConstraint() const;
186 
189  DtElementID lastSingleAttached() const;
190 
192  bool haveLastSingleAttached() const;
193 
195 
196  //@name Movement functions
198 
201  void reset();
202 
205  void setAllowReset(bool b);
206 
208  bool allowReset() const;
209 
211  void setAllowAttach(bool b);
212 
214  bool allowAttach() const;
215 
217  void setAllowDetach(bool b);
218 
220  bool allowDetach() const;
221 
223  void centerOnTerrain();
224 
226  void centerOnTerrain( const DtUniqueID& terrainPatch );
227 
230  void suppressConstrainToTerrain( bool trueFalse );
231 
233  void setConstrainToCenter( bool trueFalse );
234  void toggleConstrainToCenter();
235  bool constrainToCenter() const;
236 
238  void getLocation( double &x, double &y, double& z ) const;
239 
241  DtVector location() const;
242 
244  void setLocation( double x, double y, double z );
245 
247  void getOrientation( double& psi, double& theta, double& phi ) const;
248 
250  void getTopographicOrientation( double& psi, double& theta, double& phi ) const;
251 
253  void setOrientation( double psi, double theta, double phi );
254 
256  void setTopographicOrientation( double psi, double theta, double phi );
257 
259  void getOrientation( double& x, double& y, double& z, double& w ) const;
260 
262  void setOrientation( double x, double y, double z, double w );
263 
266  void moveUnit(const DtVector& direction);
267 
270  void rotateUnit(const DtTaitBryan& rotation);
271 
273  void getLinearVelocity(double &x, double &y, double &z) const;
274 
276  void getRotationalVelocity( double& x, double& y, double& z ) const;
277 
279  bool observerObjectMoving() const;
280 
282  double observerAltitude() const;
284 
285  //@name Attached Movement functions
287 
290  void setAttachedLocation( double x, double y, double z );
291 
294  void setAttachedOrientation( double psi, double theta, double phi );
295 
298  void setLocalModelScalingEnabled( bool enabled );
299 
302  void setLocalModelScalingAmount( float amount );
303 
305 
306  //@name Speed functions
308 
310  void setOrbitSpeedGain( int gain, bool forwardToObserverModeManager = true );
311 
313  int orbitSpeedGain() const;
314 
316  int orbitSpeedGainFromSpeed( double speed ) const;
317 
318  void setRotationSpeedGain( int gain, bool forwardToObserverModeManager = true );
319  int rotationSpeedGain() const;
320 
322  void setLinearSpeedGain( int gain );
323  int linearSpeedGain() const;
324 
325  void setLinearScaledSpeedGain( int gain, bool forwardToObserverModeManager = true );
326  int linearScaledSpeedGain() const;
327 
328  void setLinearUnscaledSpeedGain( int gain, bool forwardToObserverModeManager = true );
329  int linearUnscaledSpeedGain() const;
330 
331  void setGainPrecision( int amt, bool forwardToObserverModeManager = true );
332  int gainPrecision() const;
333 
334  void setModelScaleFactor( double modelScaleFactor, bool forwardToObserverModeManager = true );
335  double modelScaleFactor() const;
336 
337  void setModelScaleType( DtObserverObject::ScaleType modelScaleType,
338  bool forwardToObserverModeManager = true );
339  DtObserverObject::ScaleType modelScaleType() const;
340 
341  void setSpeedScalingMode( DtObserverObject::SpeedScalingMode mode,
342  bool forwardToObserverModeManager = true );
343  DtObserverObject::SpeedScalingMode speedScalingMode() const;
344 
345  void setSpeedScalingAslModeOffset( double offset,
346  bool forwardToObserverModeManager = true );
347  double speedScalingAslModeOffset() const;
348 
349 
350  void setOrbitSpeed( double speed );
351  double orbitSpeed() const;
352 
353  void setRotationSpeed( double speed );
354  double rotationSpeed() const;
355 
356  void setLinearSpeed( double speed );
357  double linearSpeed() const;
358 
360 
362  virtual void toggleFlashlight();
363 
364  //@name Sensor functions
366 
367  virtual void setSensor(const std::string& sensorName);
368 
370  virtual std::string findSensor();
371 
373  virtual void disableSensor();
374 
376  virtual void slot_sensorRemoved(DtSensor* sensor);
378 
379  // Called by the input driver before any mouse or keyboard input is processed for the
380  // frame, to sync local and remote observers.
381  virtual void synchronize();
382 
384  boost::signal<void(const std::string&, DtUniqueID)> signal_objectAttached;
385 
387  boost::signal<void(const std::string&)> signal_objectsDetached;
388 
390  boost::signal<void(DtObserver*, int)> signal_observerModeChanged;
391 
393  boost::signal<void(DtObserver*, int)> signal_linearScaledSpeedGainChanged;
394 
396  boost::signal<void(DtObserver*, int)> signal_linearUnscaledSpeedGainChanged;
397 
399  boost::signal<void(DtObserver*, int)> signal_rotationSpeedGainChanged;
400 
402  boost::signal<void(DtObserver*, int)> signal_orbitSpeedGainChanged;
403 
405  boost::signal<void(DtObserver*, int)> signal_gainPrecisionChanged;
406 
408  boost::signal<void(DtObserver*, double)> signal_modelScaleFactorChanged;
409 
411  boost::signal<void(DtObserver*, DtObserverObject::ScaleType)> signal_modelScaleTypeChanged;
412 
414  boost::signal<void(DtObserver*, double)> signal_viewMagnificationChanged;
415 
416 
418  boost::signal<void (DtObserver*,
421 
424  boost::signal<void (DtObserver*, double offset)>
426 
430  boost::signal<void (DtSensor*)> signal_sensorChanged;
431 
434  boost::signal<void ()> signal_terrainChanged;
435 
436  protected:
437 
439  void slot_terrainCleared();
440  void slot_oceanLayerAdded(const DtOceanLayer&);
441  void slot_oceanLayerToBeDeleted(const DtOceanLayer&);
442 
443  void updateGlobalTerrainFlag(bool flag);
444 
445  double calcLinearSpeed() const;
446  double calcRotationSpeed() const;
447  double calcOrbitSpeed() const;
448 
449  void getObserverOffsetVector( double& x, double& y, double& z ) const;
450  void setObserverOffsetVector( double x, double y, double z );
451 
452  void getObserverRotationOffset( double& x, double& y, double& z, double& w ) const;
453  void setObserverRotationOffset( double x, double y, double z, double w );
454 
455  void getDisplayNamesFromUniqueIds(const std::vector<DtUniqueID>& idsIn,
456  std::set<std::string>& displayNamesOut) const;
457  bool getUniqueIdsFromDisplayNames(const std::set<std::string>& displayNamesIn,
458  std::vector<DtUniqueID>& idsOut) const;
459 
460  makArchives::DtObserverSettingsRecord::AttachType convertObserverAttachType(
462  DtObserverObject::AttachType convertObserverSettingsAttachType(
464 
465  void connectToElementDataSignals();
466  void disconnectFromElementDataSignals();
467 
468  void setModeSpecificObserverObjectData();
469 
471  virtual void slot_onElementsAdded( const DtElementData::ElementList& elements );
472 
474  virtual void slot_onElementAttributesChanged(
475  const DtElementData::EntryAttributesList& attributes );
476 
477  void slot_observerModeModelSetChanged( int observerMode );
478  void slot_observerModeSensorChanged( int observerMode );
479  void slot_observerModeIs2DChanged( int observerMode );
480  void slot_observerModeKeyMapChanged( int observerMode );
481  void slot_observerModeGainPrecisionChanged( int observerMode );
482  void slot_observerModeOrbitSpeedGainChanged( int observerMode );
483  void slot_observerModeRotationSpeedGainChanged( int observerMode );
484  void slot_observerModeLinearScaledSpeedGainChanged( int observerMode );
485  void slot_observerModeLinearUnscaledSpeedGainChanged( int observerMode );
486  void slot_observerModeModelScaleFactorChanged( int observerMode );
487  void slot_observerModeModelScaleTypeChanged( int observerMode );
488  void slot_observerModeSpeedScalingModeChanged( int observerMode );
489  void slot_observerModeSpeedScalingAslModeOffsetChanged( int observerMode );
490  void slot_observerModeSettingChanged( int observerMode, int settingKey );
491  void slot_observerModeAdded( int observerMode );
492 
494  void attachTo( bool afterTrue );
495 
496  protected:
497 
498  static const double theMoveStepSize;
499 
512  std::vector<DtUniqueID> myCurrentAttachments;
513  std::vector<DtUniqueID> mySecondaryAttachments;
515  unsigned int myPartId;
526  };
527 }


Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)