summaryrefslogtreecommitdiffhomepage
path: root/StarsEx/RLoc.h
blob: 97d69764ce9986c04070bcdc51d152f858afd8da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*  Starshatter: The Open Source Project
    Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors
    Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors
    Copyright (c) 1997-2006, Destroyer Studios LLC.

    AUTHOR:       John DiCamillo


    OVERVIEW
    ========
    Relative Location (RLoc) class declaration
*/

#ifndef RLoc_h
#define RLoc_h

#include "Types.h"
#include "Geometry.h"

// +--------------------------------------------------------------------+

class RLoc
{
public:
    RLoc();
    RLoc(const Point& loc, double d, double dv=5e3);
    RLoc(RLoc* rloc, double d, double dv=5e3);
    RLoc(const RLoc& r);
    ~RLoc();

    // accessors:
    const Point&      Location();
    const Point&      BaseLocation()          const { return base_loc;   }
    RLoc*             ReferenceLoc()          const { return rloc;       }
    double            Distance()              const { return dex;        }
    double            DistanceVar()           const { return dex_var;    }
    double            Azimuth()               const { return az;         }
    double            AzimuthVar()            const { return az_var;     }
    double            Elevation()             const { return el;         }
    double            ElevationVar()          const { return el_var;     }

    void              Resolve();

    // mutators:
    void              SetBaseLocation(const Point& l);
    void              SetReferenceLoc(RLoc* r)         { rloc = r;             }
    void              SetDistance(double d)            { dex = (float) d;      }
    void              SetDistanceVar(double dv)        { dex_var = (float) dv; }
    void              SetAzimuth(double a)             { az = (float) a;       }
    void              SetAzimuthVar(double av)         { az_var = (float) av;  }
    void              SetElevation(double e)           { el = (float) e;       }
    void              SetElevationVar(double ev)       { el_var = (float) ev;  }

private:
    Point             loc;
    Point             base_loc;
    RLoc*             rloc;

    float             dex;
    float             dex_var;
    float             az;
    float             az_var;
    float             el;
    float             el_var;
};

// +--------------------------------------------------------------------+

#endif  // RLoc_h