]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim.cxx
Add a link library needed by Irix.
[flightgear.git] / src / FDM / JSBSim.cxx
index 901df669dbb49734b04a52978e567dfbf8de9e26..c3fa97bf123de300d7f102a030468cdee2e41ca0 100644 (file)
@@ -53,7 +53,8 @@
 #include <FDM/JSBSim/FGInitialCondition.h>
 #include <FDM/JSBSim/FGTrim.h>
 #include <FDM/JSBSim/FGAtmosphere.h>
-
+#include <FDM/JSBSim/FGMassBalance.h>
+#include <FDM/JSBSim/FGAerodynamics.h>
 #include "JSBSim.hxx"
 
 /******************************************************************************/
@@ -65,16 +66,20 @@ FGJSBsim::FGJSBsim( double dt )
    
     fdmex=new FGFDMExec;
     
-    State       = fdmex->GetState();
-    Atmosphere  = fdmex->GetAtmosphere();
-    FCS         = fdmex->GetFCS();
-    Propulsion  = fdmex->GetPropulsion();
-    Aircraft    = fdmex->GetAircraft();
-    Translation = fdmex->GetTranslation();
-    Rotation    = fdmex->GetRotation();
-    Position    = fdmex->GetPosition();
-    Auxiliary   = fdmex->GetAuxiliary();
-
+    State        = fdmex->GetState();
+    Atmosphere   = fdmex->GetAtmosphere();
+    FCS          = fdmex->GetFCS();
+    MassBalance  = fdmex->GetMassBalance();
+    Propulsion   = fdmex->GetPropulsion();
+    Aircraft     = fdmex->GetAircraft();
+    Translation  = fdmex->GetTranslation();
+    Rotation     = fdmex->GetRotation();
+    Position     = fdmex->GetPosition();
+    Auxiliary    = fdmex->GetAuxiliary();
+    Aerodynamics = fdmex->GetAerodynamics();
+    
+    Atmosphere->UseInternal();
+    
     fgic=new FGInitialCondition(fdmex);
     needTrim=true;
   
@@ -102,9 +107,15 @@ FGJSBsim::FGJSBsim( double dt )
     fgSetDouble("/fdm/trim/aileron",    FCS->GetDaCmd());
     fgSetDouble("/fdm/trim/rudder",     FCS->GetDrCmd());
 
-    trimmed = fgGetValue("/fdm/trim/trimmed",true);
+    startup_trim = fgGetNode("/sim/startup/trim", true);
+
+    trimmed = fgGetNode("/fdm/trim/trimmed", true);
     trimmed->setBoolValue(false);
 
+    pitch_trim = fgGetNode("/fdm/trim/pitch-trim", true );
+    throttle_trim = fgGetNode("/fdm/trim/throttle", true );
+    aileron_trim = fgGetNode("/fdm/trim/aileron", true );
+    rudder_trim = fgGetNode("/fdm/trim/rudder", true );
 }
 
 /******************************************************************************/
@@ -121,15 +132,12 @@ FGJSBsim::~FGJSBsim(void) {
 // each subsequent iteration through the EOM
 
 void FGJSBsim::init() {
-                // Explicitly call the superclass's
-                // init method first.
-    FGInterface::init();
-
-    bool result;
-
+    
     SG_LOG( SG_FLIGHT, SG_INFO, "Starting and initializing JSBsim" );
-
-    Atmosphere->UseInternal();
+   
+    // Explicitly call the superclass's
+    // init method first.
+    FGInterface::init();
 
     SG_LOG( SG_FLIGHT, SG_INFO, "  Initializing JSBSim with:" );
 
@@ -189,44 +197,44 @@ bool FGJSBsim::update( int multiloop ) {
 
     trimmed->setBoolValue(false);
 
-    if (needTrim && fgGetBool("/sim/startup/trim")) {
+    if ( needTrim && startup_trim->getBoolValue() ) {
 
-      //fgic->SetSeaLevelRadiusFtIC( get_Sea_level_radius() );
-      //fgic->SetTerrainAltitudeFtIC( scenery.cur_elev * SG_METER_TO_FEET );
+        //fgic->SetSeaLevelRadiusFtIC( get_Sea_level_radius() );
+        //fgic->SetTerrainAltitudeFtIC( scenery.cur_elev * SG_METER_TO_FEET );
 
-    FGTrim *fgtrim;
-    if(fgic->GetVcalibratedKtsIC() < 10 ) {
-        fgic->SetVcalibratedKtsIC(0.0);
-        fgtrim=new FGTrim(fdmex,fgic,tGround);
-    } else {
-        fgtrim=new FGTrim(fdmex,fgic,tLongitudinal);
-    }
-    if(!fgtrim->DoTrim()) {
-        fgtrim->Report();
-        fgtrim->TrimStats();
-    } else {
-        trimmed->setBoolValue(true);
-    }
-    fgtrim->ReportState();
-    delete fgtrim;
+        FGTrim *fgtrim;
+        if(fgic->GetVcalibratedKtsIC() < 10 ) {
+            fgic->SetVcalibratedKtsIC(0.0);
+            fgtrim=new FGTrim(fdmex,fgic,tGround);
+        } else {
+            fgtrim=new FGTrim(fdmex,fgic,tLongitudinal);
+        }
+        if(!fgtrim->DoTrim()) {
+            fgtrim->Report();
+            fgtrim->TrimStats();
+        } else {
+            trimmed->setBoolValue(true);
+        }
+        fgtrim->ReportState();
+        delete fgtrim;
 
-    needTrim=false;
+        needTrim=false;
 
-    fgSetDouble("/fdm/trim/pitch-trim", FCS->GetPitchTrimCmd());
-    fgSetDouble("/fdm/trim/throttle",   FCS->GetThrottleCmd(0));
-    fgSetDouble("/fdm/trim/aileron",    FCS->GetDaCmd());
-    fgSetDouble("/fdm/trim/rudder",     FCS->GetDrCmd());
+        pitch_trim->setDoubleValue( FCS->GetPitchTrimCmd() );
+        throttle_trim->setDoubleValue( FCS->GetThrottleCmd(0) );
+        aileron_trim->setDoubleValue( FCS->GetDaCmd() );
+        rudder_trim->setDoubleValue( FCS->GetDrCmd() );
 
-    controls.set_elevator_trim(FCS->GetPitchTrimCmd());
-    controls.set_elevator(FCS->GetDeCmd());
-    controls.set_throttle(FGControls::ALL_ENGINES,
-                          FCS->GetThrottleCmd(0));
+        controls.set_elevator_trim(FCS->GetPitchTrimCmd());
+        controls.set_elevator(FCS->GetDeCmd());
+        controls.set_throttle(FGControls::ALL_ENGINES,
+                              FCS->GetThrottleCmd(0));
 
-    controls.set_aileron(FCS->GetDaCmd());
-    controls.set_rudder( FCS->GetDrCmd());
+        controls.set_aileron(FCS->GetDaCmd());
+        controls.set_rudder( FCS->GetDrCmd());
     
-    SG_LOG( SG_FLIGHT, SG_INFO, "  Trim complete" );
-    }  
+        SG_LOG( SG_FLIGHT, SG_INFO, "  Trim complete" );
+    }
   
     for( i=0; i<get_num_engines(); i++ ) {
       get_engine(i)->set_RPM( Propulsion->GetThruster(i)->GetRPM() );
@@ -292,15 +300,15 @@ bool FGJSBsim::copy_to_JSBsim() {
 bool FGJSBsim::copy_from_JSBsim() {
     unsigned int i, j;
 
-    _set_Inertias( Aircraft->GetMass(),
-                   Aircraft->GetIxx(),
-                   Aircraft->GetIyy(),
-                   Aircraft->GetIzz(),
-                   Aircraft->GetIxz() );
+    _set_Inertias( MassBalance->GetMass(),
+                   MassBalance->GetIxx(),
+                   MassBalance->GetIyy(),
+                   MassBalance->GetIzz(),
+                   MassBalance->GetIxz() );
 
-    _set_CG_Position( Aircraft->GetXYZcg(1),
-                      Aircraft->GetXYZcg(2),
-                      Aircraft->GetXYZcg(3) );
+    _set_CG_Position( MassBalance->GetXYZcg(1),
+                      MassBalance->GetXYZcg(2),
+                      MassBalance->GetXYZcg(3) );
 
     _set_Accels_Body( Translation->GetUVWdot(1),
                       Translation->GetUVWdot(2),
@@ -322,7 +330,7 @@ bool FGJSBsim::copy_from_JSBsim() {
     //                         Auxiliary->GetNpilot(2),
     //                         Auxiliary->GetNpilot(3) );
 
-    _set_Nlf( Aircraft->GetNlf() );
+    _set_Nlf( Aerodynamics->GetNlf() );
 
     // Velocities