scxml 圖像展現器 (基於C++ MFC GDI tinyxpath的實現)

之前的時候學習新東西沒有總結的習慣,週末把之前研究的東西翻了翻,稍微總結下。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,包含了並行、多層的嵌套關係

 

相關文章
相關標籤/搜索