VISR  0.12.0
Versatile Interactive Scene Renderer
listener_position.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_PML_LISTENER_POSITION_HPP_INCLUDED
4 #define VISR_PML_LISTENER_POSITION_HPP_INCLUDED
5 
7 #include "export_symbols.hpp"
8 
12 
13 #include <array>
14 #include <cstdint>
15 #include <iosfwd>
16 #include <istream>
17 
18 namespace visr
19 {
20 namespace pml
21 {
22 
26 static constexpr const char* sListenerPositionParameterName = "ListenerPosition";
27 
31 class VISR_PML_LIBRARY_SYMBOL ListenerPosition: public TypedParameterBase<ListenerPosition, EmptyParameterConfig, detail::compileTimeHashFNV1(sListenerPositionParameterName) >
32 {
33 public:
38  using TimeType = std::uint64_t;
39 
44  using IdType = unsigned int;
45 
49  using Coordinate = float;
50 
55  using PositionType = std::array<Coordinate,3>;
56 
61  using OrientationType = std::array<Coordinate, 3>;
62 
69  explicit ListenerPosition( ParameterConfigBase const & config );
70 
75  explicit ListenerPosition( EmptyParameterConfig const & config = EmptyParameterConfig() );
76 
81  explicit ListenerPosition( ListenerPosition const & rhs );
82 
87 
98  Coordinate yaw = 0.0f, Coordinate pitch = 0.0f, Coordinate roll = 0.0f );
99 
105  ListenerPosition( PositionType const & position, OrientationType const & orientation );
106 
110  virtual ~ListenerPosition() override;
111 
116  ListenerPosition & operator=( ListenerPosition const & rhs );
117 
122  ListenerPosition & operator=( ListenerPosition && rhs );
123 
127  Coordinate x() const { return mPosition[0]; }
128 
132  Coordinate y() const { return mPosition[1]; }
133 
137  Coordinate z() const { return mPosition[2]; }
138 
142  PositionType const & position() const { return mPosition; }
143 
151  void set( Coordinate newX, Coordinate newY, Coordinate newZ = 0.0f );
152 
157  void setPosition( PositionType const & position );
158 
163  void setX( Coordinate newX );
164 
169  void setY( Coordinate newY );
170 
175  void setZ( Coordinate newZ );
176 
180  Coordinate yaw() const { return mOrientation[0]; }
181 
185  Coordinate pitch() const { return mOrientation[1]; }
186 
190  Coordinate roll() const { return mOrientation[2]; }
191 
196  OrientationType const & orientation() const { return mOrientation; }
197 
202  void setYaw( Coordinate yaw );
203 
208  void setPitch( Coordinate pitch );
209 
214  void setRoll( Coordinate roll );
215 
222  void setOrientation( Coordinate yaw, Coordinate pitch, Coordinate roll );
223 
228  void setOrientation( OrientationType const & orientation );
229 
234  TimeType timeNs() const { return mTimeNs; }
235 
241  void setTimeNs( TimeType timeNs );
242 
247  IdType faceID() const { return mFaceID; }
248 
254  void setFaceID( IdType faceID );
255 
256 private:
260  std::array<Coordinate, 3> mPosition;
261 
265  std::array<Coordinate,3> mOrientation;
266 
271  TimeType mTimeNs;
272 
277  IdType mFaceID;
278 };
279 
280 VISR_PML_LIBRARY_SYMBOL std::ostream & operator<<(std::ostream & stream, const ListenerPosition & pos);
281 
282 } // namespace pml
283 } // namespace visr
284 
286 
287 #endif // VISR_PML_LISTENER_POSITION_HPP_INCLUDED
OrientationType const & orientation() const
Definition: listener_position.hpp:196
TimeType timeNs() const
Definition: listener_position.hpp:234
float Coordinate
Definition: listener_position.hpp:49
std::uint64_t TimeType
Definition: listener_position.hpp:38
PositionType const & position() const
Definition: listener_position.hpp:142
unsigned int IdType
Definition: listener_position.hpp:44
Coordinate x() const
Definition: listener_position.hpp:127
Definition: options.cpp:10
Definition: parameter_factory.hpp:20
Definition: parameter_config_base.hpp:22
IdType faceID() const
Definition: listener_position.hpp:247
std::array< Coordinate, 3 > OrientationType
Definition: listener_position.hpp:61
std::ostream & operator<<(std::ostream &stream, const ListenerPosition &pos)
Definition: listener_position.cpp:110
std::array< Coordinate, 3 > PositionType
Definition: listener_position.hpp:55
#define DEFINE_PARAMETER_TYPE(ParameterClassType, ParameterId, ParameterConfigType)
Definition: parameter_type.hpp:60
Coordinate y() const
Definition: listener_position.hpp:132
Coordinate roll() const
Definition: listener_position.hpp:190
Definition: listener_position.hpp:31
Coordinate pitch() const
Definition: listener_position.hpp:185
Coordinate z() const
Definition: listener_position.hpp:137
Coordinate yaw() const
Definition: listener_position.hpp:180
Definition: empty_parameter_config.hpp:21