Release Notes for FreeFlyer 6.5

Top  Previous  Next

New Features in FreeFlyer 6.5

Integrated Debugger


Step in/out/over


Debugger Log



Provides the ability to call into compiled code from FreeFlyer script

Call into existing code / libraries

Define custom objects

Define custom forces

For more information, see FreeFlyer Extensions


Help File Enhancements

New Guides on fundamental FreeFlyer topics

In-depth discussion of the Spacecraft object

Completely rewritten help for each FreeFlyer command

Color-coded syntax examples throughout


Visualization Enhancements

Night Lights texture

Specular Reflection

Optional display of Sun terminator on 2D map

Optional enforcement of 2:1 aspect ratio in 2D map

Ability to display a 2D Map for any CelestialObject

Ability to generate bitmap-based movies (WMV & AVI)

Screen capture of Mission View windows

Improved 3ds support


Workspace Management

Create workspaces on demand

Move windows between workspaces

Use the same workspace for multiple runs (ie. legacy FreeFlyer 5.6 style)


Object Lists

Support for Lists of any object type

List<Spacecraft> leoAssets; 
List<GroundStation> dsnNetwork;


Indexing into / iteration over elements of a list of objects

For i = 0 to leoAssets.Count - 1 step 1;
     Step leoAssests[i];


Dynamic resizing of objects lists

leoAssets.Count = GetNumberOfNoradState("myTLE.tle");


Formation object as a special case of List<Spacecraft>

Additional properties / methods for initializing and displaying a Formation


New Script Parsing Engine

Generalized string/numeric/object expression evaluation.

oAnywhere a numeric value is used, any valid numeric expression can be used.

For i = 0 to myArray.Dimension - 1 step 1;


oAnywhere a string value is used, any valid string expression can be used.

Watch "The Spacecraft's Epoch is: " + mySpacecraft.Epoch.ToString();


oAnywhere an object is used, any valid object expression can be used.

Step mySpacecraftList[i] to ( mySpacecraftList[i].Epoch == 21434 );
mySpacecraft.Propagator.StepSize = 60;


Object Constructor syntax

ReportInterface myReportInterface("myReportFilename.txt");


'Create' optional when defining object types

Variable myVariable;
Array myArray[5];


Shorter Spacecraft creation syntax option - creates default ForceModel and Propagator automatically

Spacecraft Spacecraft1;


Improved syntax error messages

Object and Object Array properties

Access to child objects through the parent object

mySpacecraft.Propagator.StepSize = 60; 

mySpacecraft.Tanks[2].TankMass = 2000;


String concatenation using the plus operator

myString = myOtherString + "blah" + sc1.Name + " " + variable.ToString();


ToString available on properties / numeric expressions

myString = sc1.A.ToString();
myString = array1[0].ToString();
myString = (sc1.TotalMass - 100).ToString();


Stricter handling of potentially invalid syntax


Exposed Object Hierarchy

Object type inheritance is accessible from FreeFlyer script

The ability to pass any generic Propagator type to a procedure.

Define Procedure SetStepSize(Propagator prop, Variable val); 
      prop.StepSize = val; 


IsType operator to check an object type

AsType operator for casting to higher object types.

If (prop IsType RK89then
      (prop AsType RK89).Tolerance = 1e-9; 



Miscellaneous Enhancements

MatlabInterface Enhancements

oAbility to pass Variables

oAbility to pass Strings

oAbility to pass the same expression as input and output

Ability to model Solid Earth Tides in Force Model

Ability to read DE418 and DE421

Improved interpolation when stepping between vectors of an Ephemeris


oAbility to view and manually filter Tracking Data prior to processing it in the Orbit Determination process

A command line option for passing data into an executing MissionPlan

Probability of Collision (Pc) method

Ability to load canned Objects Presets from existing object files



Migrating to FreeFlyer 6.5

While we always strive to maintain 100% backwards compatibility in our new releases, our efforts to make FreeFlyer scripting more flexible and consistent in FreeFlyer 6.5 and higher have necessitated a few changes which may require user intervention when migrating your existing Mission Plans. These changes are outlined below.


Variable to String assignments are no longer supported


In FreeFlyer 6.0 and earlier, the following syntax was allowed:


Create Variable myVariable;

Create String myString;


myVariable = 5;

myString = myVariable;


The behavior would result in myString containing the value "5". In 6.5 and higher, this script would result in a syntax error. The way to accomplish the same result in 6.5 is to use the ToString method:


Create Variable myVariable;

Create String myString;


myVariable = 5;

myString = myVariable.ToString();



The use of parentheses to index array properties is deprecated


In FreeFlyer 6.0 and earlier, the following syntax was standard:


Create Array myArray[5];


myArray.Element(0) = 1;


While this parenthetical syntax still works, it is deprecated and will generate a warning. The preferred syntax in 6.5 and higher is as follows:


Create Array myArray[5];


myArray.Element[0] = 1;



Object declarations inside of block statements are no longer valid


In FreeFlyer 6.0 and earlier, the following script was valid:


Create Variable v1;


If(v1 == 0);

  Create Variable v2;

  v2 = 5;



In 6.5 and higher this will generate an error. You can fix the error by changing the script to the following:


Create Variable v1;

Create Variable v2;


If(v1 == 0);

   v2 = 5;




Boolean expressions now follow standard order of operations


Consider the following script:


Create Variable v = 0;


If(v == 0 or v == 0 and v == 1) then;

  Watch v;



In FreeFlyer 6.0 and earlier, Boolean expressions evaluated left to right. In the script above, this leads to a grouping like:


(v == 0 or v == 0) and v == 1


In 6.5 and higher, the and operator takes precedence over the or operator leading to a grouping like:


v == 0 or (v == 0 and v == 1)


In the example given, the expression evaluates to true in 6.5, but false in previous versions. In 6.5 and higher, you can also use parentheses to group expressions and explicitly specify the order of evaluation you desire.



The TrackDataMonitor declaration syntax has changed


Assuming the existence of a Spacecraft named sc1, the previous syntax was:


Create GroundStation g;


Create TrackDataMonitor tdm using sc1 from g("");


The new syntax is:


Create GroundStation g;


Create TrackDataMonitor tdm using sc1 from g<"">;


In other words, when specifying the tracking data files associated with a GroundStation object, use angle brackets instead of parentheses.



Some forms of the Close command are no longer available


The following permutations of the Close command are no longer valid:


Close myString;

Close "aFile.txt";

Close aFile.txt;


Instead of closing the file name, close the object with which the file is associated (for example, a ReportInterface object).



The Report command now requires quotes around literal file names


In FreeFlyer 6.0 and earlier, the following syntax was valid:


Create Variable v;


Report v to abc.txt;


Now, quotes around the file name are required:


Create Variable v;


Report v to "abc.txt";



The Report command "as XML" option has been removed


The following syntax for the Report command is no longer valid:


Report as XML Spacecraft1.A to "report.txt";



ThreeDModel Group names must be accessed with their fully qualified name


In FreeFlyer 6.0 and earlier, the following was valid:


Create ThreeDModel myModel;



myModel.CreateGroup("KuAntenna", "KuBoom");

myModel.CreateGroup("KuBoom",   "KuDish");


myModel.SetGroupOrientation("KuDish", quatArray);


In 6.5 and higher, Node/Group/Object hierarchy contained in the file is preserved, so the above form may be ambiguous. Therefore, the Group paths must be fully qualified as:


Create ThreeDModel myModel;



myModel.CreateGroup("KuAntenna", "KuBoom");

myModel.CreateGroup("KuAntenna/KuBoom",   "KuDish");


myModel.SetGroupOrientation("/KuAntenna/KuBoom/KuDish", quatArray);



The syntax for accessing properties of the NoradSGP4 propagator has changed


Note: In all previous and current versions of FreeFlyer, the NoradSGP4 DLLs must be installed in order to gain access to the NoradSGP4 propagator.


Assuming the existence of a Spacecraft named mySpacecraft, in FreeFlyer 6.0 and earlier, you accessed properties of the NoradSGP4 propagator in the following way:


mySpacecraft.NoradSGP4_MeanMotion = 1;


Where MeanMotion is the name of the property you are trying to access. In 6.5 and higher, the syntax is as follows:


mySpacecraft.NoradSGP4State.MeanMotion = 1;



See Also

Release History