INCLUDES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-#include <FGFDMExec.h>
-#include <FGJSBBase.h>
-#include <math/FGMatrix33.h>
-#include <math/FGColumnVector3.h>
+#include "FGFDMExec.h"
+#include "FGJSBBase.h"
+#include "math/FGMatrix33.h"
+#include "math/FGColumnVector3.h"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-#define ID_FORCE "$Id$"
+#define ID_FORCE "$Id: FGForce.h,v 1.17 2012/04/01 17:05:51 bcoconni Exp $"
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FORWARD DECLARATIONS
<p>Retrieval of the computed forces and moments is done as detailed above.</p>
<br>
-<blockquote>
+<pre>
<p><i>CAVEAT: If the custom system is used to compute
the wind-to-body transform, then the sign of the sideslip
angle must be reversed when calling SetAnglesToBody().
hand rule. Using the custom transform type this way
should not be necessary, as it is already provided as a built
in type (and the sign differences are correctly accounted for).</i>
- <br></p>
-</blockquote>
+ </p>
+</pre>
<h4>Use as a Base Type</h4>
<br><br></p>
@author Tony Peden
- @version $Id$
+ @version $Id: FGForce.h,v 1.17 2012/04/01 17:05:51 bcoconni Exp $
*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
public:
/// Constructor
FGForce(FGFDMExec *FDMExec);
+ FGForce(const FGForce& force) {
+ vFn = force.vFn;
+ vXYZn = force.vXYZn;
+ ttype = force.ttype;
+ fdmex = force.fdmex;
+ }
/// Destructor
~FGForce();
enum TransformType { tNone, tWindBody, tLocalBody, tCustom };
- FGColumnVector3& GetBodyForces(void);
+ virtual const FGColumnVector3& GetBodyForces(void);
- inline FGColumnVector3& GetMoments(void) { return vM; }
+ inline double GetBodyXForce(void) const { return vFb(eX); }
+ inline double GetBodyYForce(void) const { return vFb(eY); }
+ inline double GetBodyZForce(void) const { return vFb(eZ); }
+ inline const FGColumnVector3& GetMoments(void) const { return vM; }
// Normal point of application, JSBsim structural coords
// (inches, x +back, y +right, z +up)
inline double SetActingLocationX(double x) {vActingXYZn(eX) = x; return x;}
inline double SetActingLocationY(double y) {vActingXYZn(eY) = y; return y;}
inline double SetActingLocationZ(double z) {vActingXYZn(eZ) = z; return z;}
- inline void SetLocation(FGColumnVector3 vv) { vXYZn = vv; SetActingLocation(vv);}
- inline void SetActingLocation(FGColumnVector3 vv) { vActingXYZn = vv; }
-
- inline double GetLocationX( void ) { return vXYZn(eX);}
- inline double GetLocationY( void ) { return vXYZn(eY);}
- inline double GetLocationZ( void ) { return vXYZn(eZ);}
- inline double GetActingLocationX( void ) { return vActingXYZn(eX);}
- inline double GetActingLocationY( void ) { return vActingXYZn(eY);}
- inline double GetActingLocationZ( void ) { return vActingXYZn(eZ);}
- FGColumnVector3& GetLocation(void) { return vXYZn; }
- FGColumnVector3& GetActingLocation(void) { return vActingXYZn; }
+ inline void SetLocation(const FGColumnVector3& vv) { vXYZn = vv; SetActingLocation(vv);}
+ inline void SetActingLocation(const FGColumnVector3& vv) { vActingXYZn = vv; }
+
+ inline double GetLocationX( void ) const { return vXYZn(eX);}
+ inline double GetLocationY( void ) const { return vXYZn(eY);}
+ inline double GetLocationZ( void ) const { return vXYZn(eZ);}
+ inline double GetActingLocationX( void ) const { return vActingXYZn(eX);}
+ inline double GetActingLocationY( void ) const { return vActingXYZn(eY);}
+ inline double GetActingLocationZ( void ) const { return vActingXYZn(eZ);}
+ const FGColumnVector3& GetLocation(void) const { return vXYZn; }
+ const FGColumnVector3& GetActingLocation(void) const { return vActingXYZn; }
//these angles are relative to body axes, not earth!!!!!
//I'm using these because pitch, roll, and yaw are easy to visualize,
//They are in radians.
void SetAnglesToBody(double broll, double bpitch, double byaw);
- inline void SetAnglesToBody(FGColumnVector3 vv) {
+ inline void SetAnglesToBody(const FGColumnVector3& vv) {
SetAnglesToBody(vv(eRoll), vv(ePitch), vv(eYaw));
}
double GetPitch(void) const {return vOrient(ePitch);}
double GetYaw(void) const {return vOrient(eYaw);}
- inline FGColumnVector3& GetAnglesToBody(void) {return vOrient;}
- inline double GetAnglesToBody(int axis) {return vOrient(axis);}
+ inline const FGColumnVector3& GetAnglesToBody(void) const {return vOrient;}
+ inline double GetAnglesToBody(int axis) const {return vOrient(axis);}
inline void SetTransformType(TransformType ii) { ttype=ii; }
- inline TransformType GetTransformType(void) { return ttype; }
+ inline TransformType GetTransformType(void) const { return ttype; }
- FGMatrix33 Transform(void);
+ const FGMatrix33& Transform(void) const;
protected:
FGFDMExec *fdmex;
TransformType ttype;
FGColumnVector3 vXYZn;
FGColumnVector3 vActingXYZn;
+ FGMatrix33 mT;
private:
FGColumnVector3 vFb;
FGColumnVector3 vM;
FGColumnVector3 vDXYZ;
- FGMatrix33 mT;
-
void Debug(int from);
};
}