本發(fā)明主要涉及圖形化編程技術(shù)領(lǐng)域,具體涉及圖形化編程控件布局的自動優(yōu)化方法。
背景技術(shù):
著互聯(lián)網(wǎng)技術(shù)和社會不斷的發(fā)展,互聯(lián)網(wǎng)逐漸在我們的生活里起到越發(fā)重要的作用。與此同時,隨著互聯(lián)網(wǎng)的普及,編程教育逐漸被人們所重視。早在2012年,美國總統(tǒng)奧巴馬已經(jīng)提出倡議全民學(xué)習(xí)編程,全國開展“編程一小時”的推廣公益活動,并且號召全美中小學(xué)生學(xué)習(xí)編程。少年兒童編程的教育顯得越發(fā)重要。在蘋果之父喬布斯生前接受的一次采訪中,他曾經(jīng)說過這樣一句話:這個國家的每一個人都應(yīng)該學(xué)習(xí)編程,因為它教你如何思考。誠如所言,同時比爾·蓋茨、馬克·扎克伯格、杰克·多西在內(nèi)的眾多名人,都來呼吁讓少年兒童參與到計算機編程中去。正是因為這種觀念深入人心,科技巨頭們也都參與到針對少年兒童的編程教育中去。于是圖形化編程語言應(yīng)運而生,圖形化編程的操作簡便,理解容易,使用者只需要對編程模塊進行拖拽、組合、連線,便可得到一定的模型,從而達到某種特定效果。圖形化編程軟件能夠很大程度地讓兒童發(fā)揮想象力和創(chuàng)造力,培養(yǎng)他們的基本編程邏輯和思維。目前市場上的圖形化編程的軟件基本都是每個圖形對象都是代碼塊或者對應(yīng)的控制器,使用者可以將它們拼接起來,創(chuàng)造出簡單功能,然后將一個個簡單功能組合起來,然后將其轉(zhuǎn)化成某種高級語言傳輸至控制器,由控制器中編譯器對目標代碼進行解析。在圖形化編程的期間,當編程控件數(shù)量上升到一定規(guī)模的時候,布局會變得異?;靵y,控件間相互重疊,使用者編程使用起來會變得更加地困難。針對上述問題,本發(fā)明的目的在于對圖形化編程的控件布局進行自動優(yōu)化,避免出現(xiàn)布局混亂,控件重疊等情況。布局的自動優(yōu)化方法也能使編程界面變得更加友好以及易于操作,很大程度地提升了編程效率。
技術(shù)實現(xiàn)要素:
本發(fā)明針對當前圖形化編程領(lǐng)域中在復(fù)雜的編程程序下,隨著編程控件數(shù)量的增加,編程界面容易出現(xiàn)布局混亂、控件間相互重疊等情況。本發(fā)明的目的在于對圖形化編程的控件布局進行自動優(yōu)化,避免出現(xiàn)布局混亂,控件重疊等情況。
本發(fā)明的目的至少通過如下技術(shù)方案之一實現(xiàn)。
圖形化編程控件布局的自動優(yōu)化方法,其包括以下步驟:
(a)定義編程模塊鏈;
(b)確定基于步驟(a)中定義的模塊鏈中的基準模塊鏈;
(c)判斷模塊鏈的重疊情況;
(d)計算模塊鏈移動距離;
(e)計算模塊鏈移動方向,輸出優(yōu)化后的布局結(jié)構(gòu)。
進一步地,步驟(a)中的定義模塊鏈方法是基于控件間的數(shù)據(jù)結(jié)構(gòu)以及控件之間的相連情況,把有父子關(guān)系并且無相連關(guān)系的控件定義為模塊鏈,在對所有的編程控件進行遍歷后,可得到n條模塊鏈:
module(polygon1,polygon2,…,polygonn),polygoni={(xi,j,yi,j)|j=1,2,…,mi},i=1,2,…,n,其中i表示模塊鏈編號,j表示模塊鏈中的模塊編號,xi,j,yi,j表示在第i個模塊鏈中的第j個模塊的橫坐標與縱坐標;
而在圖形化編程的拖拽操作后形成的新模塊鏈則作為:
polygon={(xj,yj)|j=1,2,…,t},其中j表示模塊鏈中的模塊編號,xj,yj表示該模塊鏈中的第j個模塊的橫坐標與縱坐標,t表示該模塊鏈的模塊數(shù)量;每條模塊鏈在自動優(yōu)化的布局處理中作為一個整體處理。
進一步地,步驟(b)中,對步驟(a)得到的模塊鏈進行分類,把模塊鏈分為不可移動模塊鏈與可移動模塊鏈,不可移動模塊鏈指所述新模塊鏈,以不可移動模塊鏈作為基準,其他可移動模塊鏈圍繞基準模塊鏈進行相應(yīng)的移動。
進一步地,步驟(c)中,模塊鏈之間相交定義成:
進一步地,步驟(d)中,對所有的polygoni∈module′,module'指除不可移動模塊鏈的其他模塊集,求polygoni向四個方向移動的最小距離,即保證
進一步地,步驟(e)中,在上一步中,對于所有的polygoni∈module′,都有一個移動的方向,四個方向中,每個方向都有若干個polygoni,其中有若干個是向上移動即向y值變小的方向移動的,在所有的polygoni∈module′中,我們選取y值最大的模塊鏈polygonymax,對所有的polygoni∈module,判斷y值是否小于polygonymax的y值,如果滿足條件,則該模塊鏈需要向上移動,移動的距離由上一步求出;對于向下、向左、向右采用與向上同樣的方法確定移動的距離。
與現(xiàn)有技術(shù)相比,本發(fā)明具有如下優(yōu)點和技術(shù)效果:
現(xiàn)在的可視化編程軟件,大都能處理好編程控件間相互連接的關(guān)系,但是對于控件間的布局并沒有很好地進行優(yōu)化,當編程控件數(shù)量上升到一定規(guī)模的時候,布局會變得異?;靵y,控件間相互重疊,使用者編程使用起來會變得更加地困難。針對上述問題,本發(fā)明的目的在于對圖形化編程的控件布局進行自動優(yōu)化,避免出現(xiàn)布局混亂,控件重疊等情況。布局的自動優(yōu)化方法也能使編程界面變得更加友好以及易于操作,很大程度地提升了編程效率。
附圖說明
圖1為實施方式中圖形化編程控件布局的自動優(yōu)化方法的流程圖。
具體實施方式
以下結(jié)合附圖對本發(fā)明的實施方式作進一步說明,但本發(fā)明的實施不限于此。
如圖1,圖形化編程控件布局的自動化優(yōu)化方法主要流程包括以下步驟:
(a)定義模塊鏈;
(b)確定基于步驟(a)中定義的模塊鏈中的基準模塊鏈;
(c)判斷模塊鏈的重疊情況;
(d)計算模塊鏈移動距離;
(e)計算模塊鏈移動方向,輸出優(yōu)化后的布局結(jié)構(gòu)。
步驟(a)中,定義模塊鏈方法是基于控件間的數(shù)據(jù)結(jié)構(gòu)以及控件之間的相連情況,把有父子關(guān)系并且無相連關(guān)系的控件定義為模塊鏈,在對所有的編程控件進行遍歷后,可得到n條模塊鏈:
module(polygon1,polygon2,…,polygonn),polygoni={(xi,j,yi,j)|j=1,2,…,mi}(i=1,2,…,n),
(i表示模塊鏈編號,j表示模塊鏈中的模塊編號,xi,j,yi,j表示在第i個模塊鏈中的第j個模塊的橫坐標與縱坐標)
而新加入的模塊鏈則作為:polygon={(xi,yi)|i=1,2,…,t},
(其中j表示模塊鏈中的模塊編號,xj,yj表示該模塊鏈中的第j個模塊的橫坐標與縱坐標,t表示該模塊鏈的模塊數(shù)量),每條模塊鏈在自動優(yōu)化的布局處理中作為一個整體處理。
步驟(b)中,對所述模塊鏈進行分類,把模塊鏈分為不可移動模塊鏈與可移動模塊鏈,以不可移動模塊鏈作為基準,其他可移動模塊鏈圍繞基準模塊鏈進行相應(yīng)的移動。
步驟(c)中,模塊鏈之間相交定義成:
步驟(d)中,對所有的polygoni∈module′,求polygoni向四個方向移動的最小距離(保證
步驟(e)中,在上一步中,對于所有的polygoni∈module′,都有一個移動的方向,四個方向中,每個方向都有若干個polygoni,其中有若干個是向上移動(向y值變小的方向移動)的,在這些模塊鏈中,我們選取y值最大的模塊鏈polygonymax,對所有的polygoni∈module,判斷y值是否小于polygonymax的y值,如果滿足條件,則該模塊鏈需要向上移動,移動的距離由上一步求出;其中有若干個是向下移動(向y值變大的方向移動)的,在這些模塊鏈中,我們選取y值最小的模塊鏈polygonymin,對所有的polygoni∈module,判斷y值是否大于polygonymin的y值,如果滿足條件,則該模塊鏈需要向下移動,移動的距離由上一步求出;其中有若干個是向左移動(向x值變小的方向移動)的,在這些模塊鏈中,我們選取x值最大的模塊鏈polygonxmax,對所有的polygoni∈module,判斷x值是否大于polygonxmax的x值,如果滿足條件,則該模塊鏈需要向左移動,移動的距離由上一步求出;其中有若干個是向右移動(向x值變大的方向移動)的,在這些模塊鏈中,我們選取x值最小的模塊鏈polygonxmin,對所有的polygoni∈module,判斷x值是否小于polygonxmin的x值,如果滿足條件,則該模塊鏈需要向右移動,移動的距離由上一步求出。最后輸出優(yōu)化后的布局結(jié)構(gòu)。