7#include "Displacement.h"
10#include "IException.h"
12#include "SpecialPixel.h"
47 if(displacementUnit ==
Pixels)
63 double pixelsPerMeter) {
131 double pixelsPerMeter) {
156 IString msg =
"Displacement has not been initialized, you must initialize "
157 "it first before comparing with another displacement using [>]";
158 throw IException(IException::Programmer, msg, _FILEINFO_);
175 IString msg =
"Displacement has not been initialized, you must initialize "
176 "it first before comparing with another displacement using [<]";
177 throw IException(IException::Programmer, msg, _FILEINFO_);
222 -(
const Distance &distanceToSub)
const {
330 if(!
isValid() || IsSpecial(valueToDiv))
343 if(!
isValid() || IsSpecial(valueToMult))
360 double resultingDisplacement = Null;
364 switch(displacementUnit) {
366 resultingDisplacement = displacementInMeters;
370 resultingDisplacement = displacementInMeters / 1000.0;
374 IString msg =
"Cannot call displacement with pixels, ask for another "
376 throw IException(IException::Programmer, msg, _FILEINFO_);
380 if(resultingDisplacement == Null) {
381 IString msg =
"Displacement does not understand the enumerated value [" +
382 IString(displacementUnit) +
"] as a unit";
383 throw IException(IException::Programmer, msg, _FILEINFO_);
386 return resultingDisplacement;
401 double displacementInMeters = Null;
408 switch(displacementUnit) {
418 IString msg =
"Cannot setDisplacement with pixels, must convert to "
419 "another unit first";
420 throw IException(IException::Programmer, msg, _FILEINFO_);
424 if(displacementInMeters == Null) {
425 IString msg =
"Displacement does not understand the enumerated value [" +
426 IString(displacementUnit) +
"] as a unit";
427 throw IException(IException::Programmer, msg, _FILEINFO_);
double pixels(double pixelsPerMeter=1.0) const
Get the displacement in pixels using the given conversion ratio.
void setDisplacement(const double &displacement, Units displacementUnit)
This is a helper method to set displacements in a universal manner with uniform error checking.
void operator/=(const double &valueToDiv)
Divide this displacement by a value and assign the result to ourself.
double kilometers() const
Get the displacement in kilometers.
bool isValid() const
Test if this displacement has been initialized or not.
Displacement()
This initializes the displacement to an invalid state.
double operator/(const Displacement &displacementToDiv) const
Divide another displacement into this displacement (5m / 1m = 5).
void setMeters(double displacementInMeters)
Set the displacement in meters.
bool operator>(const Displacement &otherDisplacement) const
Get the displacement in meters.
Units
This is a list of available units to access and store Distances in.
@ Pixels
The distance is being specified in pixels.
@ Kilometers
The distance is being specified in kilometers.
@ Meters
The distance is being specified in meters.
double m_displacementInMeters
This is the displacement value that this class is encapsulating, always stored in meters.
void setPixels(double distanceInPixels, double pixelsPerMeter=1.0)
Set the displacement in pixels.
Displacement operator*(const double &valueToMult) const
Multiply this displacement by a value (5m * 2 = 10m).
void operator-=(const Displacement &displacementToSub)
Subtract the given displacement from ourself and assign.
void operator+=(const Displacement &displacementToAdd)
Add and assign the given displacement to ourselves.
void setKilometers(double displacementInKilometers)
Set the displacement in kilometers.
bool operator<(const Displacement &otherDisplacement) const
Compare two displacements with the less than operator.
void operator*=(const double &valueToMult)
Multiply this displacement by a value and assign the result to ourself.
double displacement(Units displacementUnit) const
This is a helper method to access displacements in a universal manner with uniform error checking.
double meters() const
Get the displacement in meters.
Distance measurement, usually in meters.
bool isValid() const
Test if this distance has been initialized or not.
double meters() const
Get the distance in meters.
This is free and unencumbered software released into the public domain.
Angle operator*(double mult, Angle angle)
Multiply this angle by a double and return the resulting angle.