FreeCAD的Application和Document都分为App和Gui两层。
1.App::Application功能
- App层的Application主要包含两个功能:管理文件和管理配置。
- 分析App::Application的成员变量。
App::Application具有一个存储文档对象的容器DocMap以及其他管理文档用到的变量。另外App::Application还定义了一系列的接口用于创建、销毁、操作文档。
2.创建文档的流程
①获取一个有效的文档名
②创建文档
③引出文档事件到Application内(将各个文档的事件连接到Application中,然后Application统一产生事件,各个组件响应Application的事件)
④设置Python层属性,发出新建文件事件
App::Application还还包含成员变量:
这些变量都是与软件配置相关的参数,定义了软件的一些行为。App::Application还有许多方法用来读取和设置这些配置参数。
从以上可以看出,App::application主要功能就是管理文档和管理配置。另外该类还提供了一些初始化接口,用于程序启动时初始化程序环境。
3.App::Document功能
分析其成员变量:
以上这些变量都是文档本身的属性,用于文件名、路径、创建者、创建日期等等信息。
以上变量是与文档的撤销重做功能有关的成员变量,从这里可以看出,FreeCAD的撤销重做栈是以文档为单位的。
以上变量是Document的主要数据内容的存储容器,可以看出,Document是由一些列的DocumentObject对象构成的。
4.Gui::Application功能
分析其成员变量:
该类只有两个变量:ApplicationP和_pcWorkbenchDictionary。其中
_pcWorkbenchDictionary是存储“工作台Workbench”的python词典,可以看出,FreeCAD Workbench的概念只存在于Gui层。
ApplicationP中保存着一系列的Gui::Document以及App::Document和Gui::Document的对应关系,同时包含宏管理器macroMngr和命令管理器commandManager。可以看出,FreeCAD的命令体系和宏脚本体系都是建立在Gui层上的。
分析其成员函数:
从以上成员函数可以看出,Gui::Application主要实现了操作文档、发送文档事件到视图、响应和转发文档操作时间等接口。
Gui层的Application除了是Gui::Document的容器之外,还负责连接视图与文档、转发文档事件、保持App层和Gui层的Document的对应关系的功能,并管理程序的命令及工作台。
5.Gui::Document功能
分析其成员变量:
从以上可以看出,Gui::Document主要数据内容为一系列的
ViewProviderDocumentObject,可以认为Gui::Document就是一系列的ViewProviderDocumentObject的集合,但是其中并没有撤销重做相关的事宜,所以对于Gui层属性的改变并不能被撤回。
此外,Gui::Document还存储了一系列相关的view视图,用于将这些数据进行可视化显示;还存储了一些用于连接连接组件信号的Connection,用于控制组件之间信号的连接状态。
分析Gui::Document的成员函数:
以上成员函数的功能主要是响应App层的Document的操作事件、产生Gui层的Document的操作事件。
以上成员函数主要处理Document视图相关的内容。
6.总结
通过以上分析可以看出,App层的Document主要存储实质性的数据DocumentObject,而App层的Application用来存储和管理App层的Document。Gui层的Document主要存储App层的Document所对应的显示数据,Gui层的Application则管理Gui层的Document以及工作台、命令管理器等Gui层的内容。