开源项目Hopsan代码梳理、流程分析
? ? ? ?Hosan開源項目是液壓、電力等行業的仿真開源軟件,由瑞典林平大學開發,可以仿真電力、液壓等。更具體的了解,請參考:《Hopsan -- 液壓、電力等行業的仿真開源軟件》。
? ? ??Hosan開源項目編譯參考:《Hopsan完全編譯構建指南》、《Hopsan的源碼編譯》。
代碼梳理、流程分析如下:
(1):HopsanEssentials的構造函數
在HopsanGUI/CoreAccess.cpp文件的頂部聲明了一個hopsan::HopsanEssentials類型的全局變量gHopsanCore,本工程啟動時,首先就會調用HopsanEssentials的構造函數,流程如下:
(1.1)ClassFactory類
ClassFactory類是一個模板類,如下:
template <typename _Key, typename _Base, typename _Predicator = std::less<_Key> >class ClassFactory { }說明:
- _Base 是創出函數的返回值,即1節中6步驟中提到的registerCreatorFunction函數第2個參數表示的函數指針的返回值。
- Key是區分創建組件的關鍵字,本項目一般是字符串類型,如:“NodeSignal”字符串表示NodeSignal類的組件、DummyComponent表示DummyComponent類的組件等等。
- _Predicator是map的排序準則,默認是按第一個參數key小寫排序。
NodeFactory、ComponentFactory都是ClassFactory模板類的實例,如下:
typedef ClassFactory<HString, Node> NodeFactory; typedef ClassFactory<HString, Component> ComponentFactory;(1.2)registerCreatorFunction?
ClassFactory模板類的registerCreatorFunction功能如下:
- 將以key為鍵,創建組件的構造器也即函數指針為值的鍵值對, 插入名為mFactoryMap的map中,方便以后查找。
- 將key為鍵,創建組件的構造器也即函數指針為值構成的pair插入語 mRegStatusVector,以便在構造函數提示信息,參見1節中的步驟7。
(1.3)類的繼承關系
(2)執行流程?
(2.1)界面啟動流程
流程如下:
(2.2)?initializeWorkspace
流程如下:
?../componentLibraries/defaultLibrary/defaultComponentLibrary.xml配置文件中的組件。
? ? 3 調用LibraryHandler類的loadLibrary 函數加載如下目錄下的組件:
../componentLibraries/autoLibs/
? ? 4 調用LibraryHandler類的loadLibrary 函數加載
?graphics/builtinCAF/visible/builtin_visible.xml配置文件中的組件。
? ? 5 加載以前創建的外部庫(在元件樹)
? ? 6 創建plot widget對象gpPlotWidget,并隱藏。
? ? ?7 創建FindWidget對象,并隱藏。
? ? 8 處理命令行中參數包含.hmf的參數,認為此參數就是模型文件,并加載該模型到視圖。
? ? ?9 調整元件樹窗體部件、向閃屏界面發送加載組件完成信息。
(2.3)LibraryHandler類的loadLibrary函數(第1個參數是表示路徑的字符串)
流程如下:
(2.4) LibraryHandler類的loadLibrary函數(第1個參數是SharedComponentLibraryPtrT類型)
(2.5)CoreLibraryAccess類的loadComponentLib
?流程如下:
(2.6)組件注冊文件的生成
?子目錄下的后綴名為.cci的文件內容如下:
pComponentFactory->registerCreatorFunction("SignalFirstOrderFilter",SignalFirstOrderFilter::Creator);這些組件注冊代碼是由generateLibraryFiles.py通過python生成的
總結
以上是生活随笔為你收集整理的开源项目Hopsan代码梳理、流程分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用3D MAX怎么制作漂亮的水晶杯
- 下一篇: 反走样和OpenGL多重采样