构造函数Flightgear在fgCreateSubsystems函数中创建了FGRouteMgr对象时会自动地调用FGRouteMgr的构造函数,在其构造函数中,主要进行了相关命令的绑定,使航路被编辑时动态的调用相关的函数:
SGCommandMgr::instance()->addCommand("load-flightplan",commandLoadFlightPlan);
SGCommandMgr::instance()->addCommand("save-flightplan",commandSaveFlightPlan);
SGCommandMgr::instance()->addCommand("activate-flightplan",commandActivateFlightPlan);
SGCommandMgr::instance()->addCommand("clear-flightplan",commandClearFlightPlan);
SGCommandMgr::instance()->addCommand("set-active-waypt",commandSetActiveWaypt);
SGCommandMgr::instance()->addCommand("insert-waypt", commandInsertWaypt);
SGCommandMgr::instance()->addCommand("delete-waypt", commandDeleteWaypt);
该部分功能暂且留在此处不去分析,我们来继续分析后续的处理。
初始化函数Flightgear在创建了FGRouteMgr对象后,会在后续的处理中调用FGRouteMgr的初始化函数init,在init函数中主要实现了相关属性与变量及处理函数的绑定,以及相关属性的初始化,这些属性包括:起飞、目的、备用机场和跑道,终端程序和巡航阶段的信息等。
主循环函数Flightgear在进入主循环后,会循环的调用FGRouteMgr的处理函数update,在update函数中,FGRouteMgr进行了如下的处理:
1. 根据当前轮载信号和地速,判断当前飞机是否在空中,并设置起飞和着陆时间
2. 根据当前位置和磁差,计算当前航路的待飞距、真/磁方位角、待飞时、当前航段的总长、除了当前航段的航路剩余长度。
3. 根据当前位置和磁差,计算到下一航段终止点的距离,真/磁方位角、待飞时间、航段的总长、除了下一航段的航路剩余总长。
4. 计算剩余航路的总长(也即从当前点算起到航路最后一个点的距离)、剩余航路预计需要的时间
总结前面的部分介绍了flightgear中航路管理的处理流程,但是存在有个关键的问题,在update函数中,没有任何关于当前航段切换的处理,也就是说在update函数中航段永远不会切换,如果不进行其它处理当前航段始终都是第一个航段,显然关于航段排序的处理是在其它地方进行的.关于这部分将在后续章节中会介绍.