NETGeographicLib  1.38
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Pages
MagneticCircle.h
Go to the documentation of this file.
1 #pragma once
2 /**
3  * \file NETGeographicLib/MagneticCircle.h
4  * \brief Header for NETGeographicLib::MagneticCircle class
5  *
6  * NETGeographicLib is copyright (c) Scott Heiman (2013)
7  * GeographicLib is Copyright (c) Charles Karney (2010-2012)
8  * <charles@karney.com> and licensed under the MIT/X11 License.
9  * For more information, see
10  * http://geographiclib.sourceforge.net/
11  **********************************************************************/
12 
13 namespace NETGeographicLib
14 {
15  /**
16  * \brief .NET wrapper for GeographicLib::MagneticCircle.
17  *
18  * This class allows .NET applications to access GeographicLib::MagneticCircle.
19  *
20  * Evaluate the earth's magnetic field on a circle of constant height and
21  * latitude. This uses a CircularEngine to pre-evaluate the inner sum of the
22  * spherical harmonic sum, allowing the values of the field at several
23  * different longitudes to be evaluated rapidly.
24  *
25  * Use MagneticModel::Circle to create a MagneticCircle object. (The
26  * constructor for this class is for internal use only.)
27  *
28  * C# Example:
29  * \include example-MagneticCircle.cs
30  * Managed C++ Example:
31  * \include example-MagneticCircle.cpp
32  * Visual Basic Example:
33  * \include example-MagneticCircle.vb
34  *
35  * <B>INTERFACE DIFFERENCES:</B><BR>
36  * The () operator has been replaced with Field.
37  *
38  * The following functions are implemented as properties:
39  * Init, MajorRadius, Flattening, Latitude, Height, and Time.
40  **********************************************************************/
41  public ref class MagneticCircle
42  {
43  private:
44  // pointer to the unmanaged GeographicLib::MagneticCircle.
45  const GeographicLib::MagneticCircle* m_pMagneticCircle;
46 
47  // the finalizer frees the unmanaged memory when the object is destroyed.
48  !MagneticCircle(void);
49  public:
50 
51  /**
52  * %brief A constructor that is initialized from an unmanaged
53  * GeographicLib::MagneticCircle. This is for internal use only.
54  *
55  * Developers should use MagneticModel::Circle to create a
56  * MagneticCircle.
57  **********************************************************************/
59 
60  /**
61  * %brief The destructor calls the finalizer.
62  **********************************************************************/
64  { this->!MagneticCircle(); }
65 
66  /** \name Compute the magnetic field
67  **********************************************************************/
68  ///@{
69  /**
70  * %brief Evaluate the components of the geomagnetic field at a
71  * particular longitude.
72  *
73  * @param[in] lon longitude of the point (degrees).
74  * @param[out] Bx the easterly component of the magnetic field (nanotesla).
75  * @param[out] By the northerly component of the magnetic field (nanotesla).
76  * @param[out] Bz the vertical (up) component of the magnetic field
77  * (nanotesla).
78  **********************************************************************/
79  void Field(double lon,
80  [System::Runtime::InteropServices::Out] double% Bx,
81  [System::Runtime::InteropServices::Out] double% By,
82  [System::Runtime::InteropServices::Out] double% Bz);
83 
84  /**
85  * Evaluate the components of the geomagnetic field and their time
86  * derivatives at a particular longitude.
87  *
88  * @param[in] lon longitude of the point (degrees).
89  * @param[out] Bx the easterly component of the magnetic field (nanotesla).
90  * @param[out] By the northerly component of the magnetic field (nanotesla).
91  * @param[out] Bz the vertical (up) component of the magnetic field
92  * (nanotesla).
93  * @param[out] Bxt the rate of change of \e Bx (nT/yr).
94  * @param[out] Byt the rate of change of \e By (nT/yr).
95  * @param[out] Bzt the rate of change of \e Bz (nT/yr).
96  **********************************************************************/
97  void Field(double lon,
98  [System::Runtime::InteropServices::Out] double% Bx,
99  [System::Runtime::InteropServices::Out] double% By,
100  [System::Runtime::InteropServices::Out] double% Bz,
101  [System::Runtime::InteropServices::Out] double% Bxt,
102  [System::Runtime::InteropServices::Out] double% Byt,
103  [System::Runtime::InteropServices::Out] double% Bzt);
104  ///@}
105 
106  /** \name Inspector functions
107  **********************************************************************/
108  ///@{
109  /**
110  * @return true if the object has been initialized.
111  **********************************************************************/
112  property bool Init { bool get(); }
113  /**
114  * @return \e a the equatorial radius of the ellipsoid (meters). This is
115  * the value inherited from the MagneticModel object used in the
116  * constructor. This property throws a GeographicErr exception if
117  * the object is not initialized.
118  **********************************************************************/
119  property double MajorRadius { double get(); }
120  /**
121  * @return \e f the flattening of the ellipsoid. This is the value
122  * inherited from the MagneticModel object used in the constructor.
123  * This property throws a GeographicErr exception if the object is
124  * not initialized.
125  **********************************************************************/
126  property double Flattening { double get(); }
127  /**
128  * @return the latitude of the circle (degrees).
129  * This property throws a GeographicErr exception if the object is
130  * not initialized.
131  **********************************************************************/
132  property double Latitude { double get(); }
133  /**
134  * @return the height of the circle (meters).
135  * This property throws a GeographicErr exception if the object is
136  * not initialized.
137  **********************************************************************/
138  property double Height { double get(); }
139  /**
140  * @return the time (fractional years).
141  * This property throws a GeographicErr exception if the object is
142  * not initialized.
143  **********************************************************************/
144  property double Time { double get(); }
145  ///@}
146  };
147 } //namespace NETGeographicLib