之前的時候學習新東西沒有總結的習慣,週末把之前研究的東西翻了翻,稍微總結下。git
Scxml是w3c出來的基於狀態機的對話腳本語言標準,具體內容能夠谷歌到,這裏講述本身開發的一個把scxml轉化爲可交互圖形的程序。github
源代碼上傳到了git 算法
https://github.com/su6838354/scxml_exec佈局
基本原則是把具備狀態機關係的xml語言轉換爲矩形、矩形之間的線、矩形的子父級關係。學習
整個模塊由下而上分爲 5部分設計
1.Scxml 腳本xml
2.Parser 層(依賴Tinyxpath)對象
3.Model 層blog
4.Layout 層 (Model轉化爲虛擬圖形對象)接口
5.View 圖形(MFC和GDI [ Gdiplus::Graphics]實現 )
Parser層會經過tinyxpth解析scxml腳本併產出Modal對象,並對上層提供getState,getTransitions,GetFinals等接口,接口之間的參數類型就是Model層定義的;
Layout層獲取全部的state和transition,而後轉化爲虛擬圖形對象ScxmlRectangle和ScxmlLine等;
View層經過MFC實現,將虛擬圖形對象進行描繪和渲染
下面這個是包設計圖,UI從LayOut中得到圖形信息畫圖,LayOut從IGetScxmlObject得到解析信息,
Parser層經過Iread能夠讀取到scxml文件中的元素,ModelFactory將獲取的元素轉換爲自定義對象,提供IGetModel給layout
下面是layout層和parser層的用例圖,
layout用於描述自動狀態機佈局的過程,包含從scxml_parser模塊獲取對象,根據對象內容計算出整個圖形佈局
Rectangle Scxml 用於輸出圖形的中心點、寬度、高度,線條起始點等內容
GetScxmlObject 解析scxml對象,生成矩形和有向線段
Parser描述從scxml格式解析成對象的過程,以及和外部模塊之間的關係,
Read scxml 主要用於按照需求讀取scxml文件內容,其調用tinyxpath模塊執行自定義的xpath語法
create model 將讀取的內容構建成對象
Layout的類圖以下
Line 線,包含起始點和終點
Rectangle 矩形,包含中心點、寬度、高度
ScxmlLayout 包含全部矩形和線條的數據,擁有計算整個圖形佈局的方法
Layout時序圖
根據scxml對象,執行LayOut算法,生成圖形信息
調用scxml_parser模塊,獲取自定義的scxml對象,生成相應的圖形內容,執行佈局算法,輸出圖形信息
Parser 類圖以下
Xtinyxpath 調用Xpath語言查找scxml元素
ScxmlParser 調用tinyxpath獲取元素,封裝爲scxmlobject對象
Parser時序圖:
scxml文件解析過程 調用tinyxpath模塊,實如今C++中內嵌使用xpath語言,按要求獲取scxml元素,轉化成自定義的對象,用於layout畫圖
展現效果以下
下面爲一個相對複雜的scxml,包含了並行、多層的嵌套關係