本發(fā)明涉及流程圖設(shè)計(jì)與布局技術(shù)領(lǐng)域,尤其涉及一種流程圖構(gòu)建方法。
背景技術(shù):
專利文獻(xiàn)1(中國專利公開號CN1137655A)公開了一種基于流程圖的過程信息管理系統(tǒng),將一個(gè)工作流準(zhǔn)備為一個(gè)流程圖,便于用戶清晰明了地掌握和選出在每個(gè)階段正確執(zhí)行的下一個(gè)步驟。該文獻(xiàn)不涉及流程圖本身的構(gòu)建、編輯和布局的問題。專利文獻(xiàn)2(中國專利公開號CN103473265A)為大數(shù)據(jù)處理提供了一種流程圖布局的分析方法,主要是處理流程圖的布局分析問題,通過節(jié)點(diǎn)的權(quán)重對節(jié)點(diǎn)進(jìn)行排序,然后優(yōu)化調(diào)整每層節(jié)點(diǎn)的坐標(biāo)。專利文獻(xiàn)3(中國專利公開號CN104462574A)公開了一種在瀏覽器環(huán)境中快速定位流程圖節(jié)點(diǎn)的方法,給定流程圖需要在當(dāng)前瀏覽器窗口可視區(qū)域內(nèi)的節(jié)點(diǎn),通過當(dāng)前節(jié)點(diǎn)在流程圖畫布中的位置和當(dāng)前瀏覽器窗口的寬度和高度計(jì)算能使當(dāng)前節(jié)點(diǎn)顯示在當(dāng)前瀏覽器窗口中的位置。專利文獻(xiàn)4(中國專利公開號CN102737108B)公開了一種繪制流程圖和修改流程圖的方法,首先創(chuàng)建流程圖,再按照預(yù)定的規(guī)則對流程圖的基本流程單元進(jìn)行分組,然后將所述分組轉(zhuǎn)化為樹狀圖并創(chuàng)建樹狀圖關(guān)系表保存樹狀圖的結(jié)構(gòu)關(guān)系信息。專利文獻(xiàn)5(中國專利公開號CN101876900A)公開了一種實(shí)現(xiàn)流程圖自動(dòng)化調(diào)整布局的方法和裝置,根據(jù)各分支信息確定主線,再根據(jù)主線確定流程圖中的所有分支的最優(yōu)組合方式,最后根據(jù)最優(yōu)組合方式調(diào)整圖元坐標(biāo)位置,本發(fā)明可以提高流程圖布局的效率。與專利文獻(xiàn)5類似,專利文獻(xiàn)6(中國專利公開號CN103473388A)公開了一種流程圖自動(dòng)布局的方法,通過對已有流程圖節(jié)點(diǎn)的邏輯關(guān)系分析,劃分節(jié)點(diǎn)的等級,對同一等級的節(jié)點(diǎn)進(jìn)行最優(yōu)化布局,采用拓?fù)漤樞虼_定優(yōu)化后的流程圖中各節(jié)點(diǎn)的坐標(biāo),實(shí)現(xiàn)快速實(shí)現(xiàn)流程圖的合理布局,保證布局的精確和業(yè)務(wù)邏輯的清晰。專利文獻(xiàn)7(中國專利公開號CN101416180B)公開了一種將圖形示圖動(dòng)態(tài)地布局成二維樹狀結(jié)構(gòu)便于用戶交互和最優(yōu)顯示的方法。專利文獻(xiàn)8(中國專利公開號CN1704934A)提供了一種將流程圖轉(zhuǎn)為等價(jià)樹狀圖的方法、將樹狀圖轉(zhuǎn)換為流程圖的方法以及驗(yàn)證重組流程圖的合法性及創(chuàng)建、編輯流程圖的方法。為快速和高效的修改、編輯和創(chuàng)建流程圖,該方法將流程圖轉(zhuǎn)為等價(jià)樹狀圖,在樹狀圖結(jié)構(gòu)中進(jìn)行流程圖的編輯和修改,然后樹狀圖轉(zhuǎn)換為等價(jià)的流程圖,避免了在流程圖上直接修改和編輯的繁瑣和復(fù)雜操作。專利文獻(xiàn)9(中國專利公開號CN103577164A)提供了一種流程圖的生成方法和裝置,通過建立節(jié)點(diǎn),在節(jié)點(diǎn)中選擇父節(jié)點(diǎn)和子節(jié)點(diǎn),并建立父子節(jié)點(diǎn)時(shí)序關(guān)系和連接關(guān)系,該方法能夠?qū)崿F(xiàn)第一目標(biāo)節(jié)點(diǎn)下的子節(jié)點(diǎn)隱藏實(shí)現(xiàn)折疊,將第二目標(biāo)節(jié)點(diǎn)下的隱藏子節(jié)點(diǎn)展開。專利文獻(xiàn)10(中國專利公開號CN103207730A)公開了一種拖拉式流程圖生成方法,通過用戶選擇節(jié)點(diǎn)顯示區(qū)域和流程圖繪制區(qū)域確定父節(jié)點(diǎn),將新節(jié)點(diǎn)拖拉至流程圖繪制區(qū)域自動(dòng)將該節(jié)點(diǎn)添加至父節(jié)點(diǎn)上。專利文獻(xiàn)11(中國專利公開號CN105786526A)公開了一種基于Web的流程圖繪制方法和系統(tǒng),主要包括了繪圖模塊、界面模塊和文件模塊。專利文獻(xiàn)12(中國專利公開號CN101256492A)公開了一種模型驅(qū)動(dòng)架構(gòu)的軟件開發(fā)方法,其中提供了業(yè)務(wù)邏輯流程圖進(jìn)行布局的屬性文件。專利文獻(xiàn)13(中國專利公開號CN103207730B)公開了一種拖拉式的流程圖生產(chǎn)方法。
通過分析,專利文獻(xiàn)2只對已創(chuàng)建的流程圖進(jìn)行分析和節(jié)點(diǎn)重排,便于分析和處理,無法創(chuàng)建和編輯流程圖。專利文獻(xiàn)3只提了一種在瀏覽器窗口中快速定位流程圖節(jié)點(diǎn)的方法,不涉及流程圖的構(gòu)建、布局等操作。專利文獻(xiàn)4公開了一種將流程圖轉(zhuǎn)為樹狀圖的方法,但沒有闡述如何對流程圖進(jìn)行動(dòng)態(tài)創(chuàng)建,無法進(jìn)行組的嵌套、全局折疊和展開等操作,樹狀圖也無法直觀地給出流程圖節(jié)點(diǎn)和組的拓?fù)潢P(guān)系。專利文獻(xiàn)5中的方法在已有流程圖結(jié)構(gòu)的基礎(chǔ)上,通過確定流程圖上的主線信息確定所有分支的最優(yōu)組合,無法處理分支嵌套、多分支的流程圖自動(dòng)布局。專利文獻(xiàn)6中的方法也是針對已有的流程圖節(jié)點(diǎn)進(jìn)行管理和布局優(yōu)化,無法處理對節(jié)點(diǎn)、組的動(dòng)態(tài)添加、刪除、復(fù)制、粘貼以及折疊和展開操作。專利文獻(xiàn)9中的方法沒有考慮分支、循環(huán)及嵌套單元的處理和操作,也沒有考慮流程圖的布局問題。專利文獻(xiàn)10中的方法只實(shí)現(xiàn)了簡單的單分支流程圖構(gòu)建方法,無法實(shí)現(xiàn)帶多分支、循環(huán)和嵌套的流程圖繪制、編輯、修改、布局及折疊展開操作。專利文獻(xiàn)11的方法中調(diào)用開源的算法庫實(shí)現(xiàn)流程圖的自動(dòng)化布局和繪制,該方法也不能實(shí)現(xiàn)流程圖的分支、折疊展開、成組、復(fù)制、粘貼等操作。專利文獻(xiàn)12公開的技術(shù)核心點(diǎn)不在流程圖方面。專利文獻(xiàn)13只能生成簡單的順序流程圖,無法實(shí)現(xiàn)分支、成組、組或節(jié)點(diǎn)的刪除、復(fù)制、粘貼以及折疊和展開操作。
在一些應(yīng)用中,需要具有完整功能的模塊構(gòu)成整體的流程圖結(jié)構(gòu),因此流程圖需要具備局部節(jié)點(diǎn)的折疊/展開功能。已有專利或文獻(xiàn)中,大部分不具備靈活的編輯功能,具有折疊/展開功能的流程圖都是將該節(jié)點(diǎn)之后的所有子節(jié)點(diǎn)全部折疊/展開,并不適用于機(jī)器視覺中具有局部模塊功能的流程圖構(gòu)建。綜上所述,面向機(jī)器視覺的流程圖構(gòu)建方法需要具有局部折疊/展開功能、可編輯、多分支嵌套、可復(fù)制、粘貼、刪除和恢復(fù)等功能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提出一種靈活的流程圖創(chuàng)建方法,通過該方法和工具能夠?yàn)闄C(jī)器視覺等應(yīng)用搭建程序執(zhí)行的流程圖結(jié)構(gòu),能夠靈活地添加、復(fù)制/粘貼、刪除/撤銷、局部折疊/展開等節(jié)點(diǎn)或組操作,克服傳統(tǒng)的流程圖創(chuàng)建方法的不足。
為達(dá)上述目的,本發(fā)明通過以下技術(shù)方案實(shí)現(xiàn):
一種靈活的流程圖創(chuàng)建方法,所述方法包括:定義基本節(jié)點(diǎn)和基本組,其中,基本節(jié)點(diǎn)包括引入連接線、引出連接線和矩形框,基本組由組頭、組尾以及中間的節(jié)點(diǎn)構(gòu)成,基本組按照結(jié)構(gòu)的不同分成了三種:一般組,分支組,循環(huán)組;
組的創(chuàng)建:在構(gòu)造流程圖時(shí)候,由開始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)連接構(gòu)成基本流程圖,然后其他的節(jié)點(diǎn)都往里面添加;具體步驟包括:S11.創(chuàng)建要插入的對象,即節(jié)點(diǎn),創(chuàng)建包括從單元列表中選擇節(jié)點(diǎn),或者在已有的流程圖中復(fù)制節(jié)點(diǎn);S12.刪除原有位置的連接線;S13.將插入對象的上一個(gè)節(jié)點(diǎn)與插入節(jié)點(diǎn)創(chuàng)建連接線;S14.再將插入對象的下個(gè)節(jié)點(diǎn)與插入節(jié)點(diǎn)創(chuàng)建連接線;S15.最后對整體流程圖進(jìn)行布局;S16.同時(shí)在撤銷堆棧中添加相應(yīng)的操作信息;S17.清空重做堆棧中的對象信息;
組的布局:流程圖的布局也屬于組布局,根據(jù)組的不同,組將布局分成:主布局、分支組布局和循環(huán)組布局;其中,
主布局的具體步驟包括:S18.首先判斷當(dāng)前節(jié)點(diǎn)類型;S19.如果是基本節(jié)點(diǎn),就直接設(shè)置下個(gè)節(jié)點(diǎn)的位置;S20.如果是組,先調(diào)用組的布局方法,算出組的高度和寬度,S21.然后設(shè)置下個(gè)節(jié)點(diǎn)的位置;S22.按照上述的步驟循環(huán)遍歷所有的節(jié)點(diǎn);直到遇到最后一個(gè)沒有后續(xù)連接節(jié)點(diǎn)的終止節(jié)點(diǎn),布局完成;
分支組布局:分支組布局是對主布局的一個(gè)拓展,分別對分支都進(jìn)行主布局,最后根據(jù)分支中高度最大的分支高度,計(jì)算組尾的位置進(jìn)行布局;
循環(huán)組布局:首先對組頭的引出連接線進(jìn)行布局;接著對循環(huán)內(nèi)部的節(jié)點(diǎn)進(jìn)行主布局;最后對折回線進(jìn)行布局,布局完成;
折疊和展開是組特有功能,流程圖和基本節(jié)點(diǎn)都不具備,當(dāng)組折疊的時(shí)候,只有組頭顯示,其他部分都隱藏,相當(dāng)于變成了一個(gè)基本節(jié)點(diǎn);組的折疊和展開有三種:一般組折疊和展開,分支組的折疊和展開,循環(huán)組的折疊和展開。
進(jìn)一步地,所述基本節(jié)點(diǎn)具有的屬性包括:坐標(biāo)、隱藏/顯示和尺寸,利用上述三個(gè)屬性對節(jié)點(diǎn)進(jìn)行布局操作。
進(jìn)一步地,分支組布局的具體步驟包括:首先對組頭的引出連接線進(jìn)行布局;接著對分支進(jìn)行主布局,直到一條分支布局完成;然后照前兩步將其他分支進(jìn)行布局;分支布局完成后,獲取高度最大的分支高度,計(jì)算組尾的位置,最后布局完成。
進(jìn)一步地,一般組的折疊過程包括:首先遍歷組內(nèi)的節(jié)點(diǎn),此處基本節(jié)點(diǎn)和組都稱為節(jié)點(diǎn),不進(jìn)入組內(nèi)部;將每個(gè)節(jié)點(diǎn)的位置和尺寸設(shè)置為組頭的位置和尺寸;除了組頭外,將其他節(jié)點(diǎn)的隱藏屬性設(shè)置為隱藏;遍歷的時(shí)候遇到是組,將組的展開屬性設(shè)置為假;然后將組頭的引出連接線隱藏,將組尾的引入連接線隱藏;最后進(jìn)行重新布局。
進(jìn)一步地,一般組的展開過程包括:首先遍歷組內(nèi)的節(jié)點(diǎn),不進(jìn)入組內(nèi)部;然后將除了組頭外,其他節(jié)點(diǎn)的隱藏屬性設(shè)置為顯示;接著將組頭的引出連接線設(shè)置為顯示,將組尾的引入連接線設(shè)置為顯示;最后進(jìn)行重新布局。
進(jìn)一步地,由于折疊和展開不涉及到節(jié)點(diǎn)的連接關(guān)系,直接使用了組的節(jié)點(diǎn)集合,所以分支組的折疊和展開和一般組相同。
進(jìn)一步地,循環(huán)組的折疊過程包括:遍歷組內(nèi)的節(jié)點(diǎn),此處基本節(jié)點(diǎn)和組都稱為節(jié)點(diǎn),不進(jìn)入組內(nèi)部;將每個(gè)節(jié)點(diǎn)的位置和尺寸設(shè)置為組頭的位置和尺寸;除了組頭外,將其他節(jié)點(diǎn)的隱藏屬性設(shè)置為隱藏;遍歷的時(shí)候遇到是組,將組的展開屬性設(shè)置為假;將組頭的引出連接線隱藏,將組尾的引入連接線隱藏,將逆向連接線隱藏;最后進(jìn)行重新布局。
進(jìn)一步地,循環(huán)組的展開過程包括:遍歷組內(nèi)的節(jié)點(diǎn),不進(jìn)入組內(nèi)部;將除了組頭外,其他節(jié)點(diǎn)的隱藏屬性設(shè)置為顯示;將組頭的引出連接線設(shè)置為顯示,將組尾的引入連接線設(shè)置為顯示,逆向連接線顯示;然后進(jìn)行重新布局。
進(jìn)一步地,復(fù)制和粘貼操作是把流程圖結(jié)構(gòu)已存在的節(jié)點(diǎn)或組復(fù)制一份再粘貼到流程圖的其他位置,以加快流程圖的構(gòu)建過程;復(fù)制操作首先選中節(jié)點(diǎn)或組,如果是組,只需要選中組頭或組尾,就能選中組;然后序列化節(jié)點(diǎn)對象;選擇節(jié)點(diǎn)或組復(fù)制后,粘貼操作首先選中需要粘貼已經(jīng)復(fù)制的節(jié)點(diǎn)的連接線;刪除原有位置的連接線;將要粘貼節(jié)點(diǎn)上一個(gè)節(jié)點(diǎn)與要粘貼節(jié)點(diǎn)創(chuàng)建連接線;將要粘貼節(jié)點(diǎn)的下個(gè)節(jié)點(diǎn)與要粘貼節(jié)點(diǎn)創(chuàng)建連接線;對整體流程圖進(jìn)行布局;在撤銷堆棧中添加相應(yīng)的操作信息,清空重做堆棧中的對象信息;
刪除是在流程圖中創(chuàng)建過程中將不需要的節(jié)點(diǎn)或組刪除,刪除操作首先選中節(jié)點(diǎn)或組,如果是組,只需要選中組頭或組尾,就能選中組;刪除當(dāng)前選中節(jié)點(diǎn)的引入連接線和引出連接線;將要?jiǎng)h除節(jié)點(diǎn)上一個(gè)節(jié)點(diǎn)與要?jiǎng)h除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)創(chuàng)建連接線,刪除完成;在撤銷堆棧中添加刪除節(jié)點(diǎn)或組信息,清空重做堆棧中的對象信息;
撤銷功能是在誤操作流程圖后,將流程圖撤銷恢復(fù)到操作前一步或前幾步的過程,從本質(zhì)來說,撤銷就是不同對象的刪除和粘貼;重做操作正好是撤銷的相反操作。
本發(fā)明還提供了一種機(jī)器視覺軟件系統(tǒng)的搭建方法,所述方法通過本發(fā)明的流程圖構(gòu)建方法將機(jī)器視覺工具模塊根據(jù)具體應(yīng)用快速搭建出解決方案。
本發(fā)明的有益效果是:本發(fā)明提供了一種靈活高效的流程圖編輯、局部折疊/展開、刪除/撤銷、粘貼復(fù)制和布局的方法。本發(fā)明可以廣泛應(yīng)用在基于流程圖的程序構(gòu)建、邏輯梳理等,本發(fā)明的一個(gè)典型應(yīng)用是在機(jī)器視覺軟件系統(tǒng)的搭建中,傳統(tǒng)的機(jī)器視覺軟件系統(tǒng)必須通過編寫代碼的方式完成,通過本發(fā)明中的流程圖構(gòu)建方法可以將機(jī)器視覺工具模塊根據(jù)具體應(yīng)用快速搭建出解決方案。
附圖說明
圖1是基本節(jié)點(diǎn)及開始結(jié)束節(jié)點(diǎn)示意圖;
圖2(a)是一般組的示意圖;
圖2(b)是分支組的示意圖;
圖2(c)是循環(huán)組的示意圖;
圖3是多分支組的示意圖;
圖4是基本節(jié)點(diǎn)與組關(guān)系示意圖;
圖5是組創(chuàng)建過程示意圖;
圖6是主布局操作流程;
圖7是分支組布局操作流程;
圖8是循環(huán)組布局操作流程;
圖9是一般組的折疊操作流程;
圖10是一般組的展開操作流程;
圖11是循環(huán)組折疊操作流程;
圖12是循環(huán)組的展開操作流程;
圖13是復(fù)制和粘貼操作流程;
圖14是初始流程圖;
圖15是加入分支組實(shí)例;;
圖16是成組展開及折疊實(shí)例;
圖17是加入循環(huán)組的流程圖示意圖;
圖18是全部折疊后的流程圖示意圖;
圖19(a)是一個(gè)簡單的機(jī)器視覺應(yīng)用中的流程圖全展開的結(jié)構(gòu)示意圖;
圖19(b)是邊緣直線檢測模塊折疊后的流程圖結(jié)構(gòu)示意圖;
圖19(c)是分支疊后的流程圖結(jié)構(gòu)示意圖。
具體實(shí)施方案
下面通過具體實(shí)施方式結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
流程圖在描述業(yè)務(wù)在系統(tǒng)內(nèi)、人員之間、作業(yè)順序等信息流向方面具有重要的作用,通過流程圖可以梳理邏輯和數(shù)據(jù)間的邏輯關(guān)系。本發(fā)明中基本節(jié)點(diǎn)是構(gòu)成流程圖的最小單元,流程圖中的所有成員都以此為基礎(chǔ),由多個(gè)節(jié)點(diǎn)構(gòu)成的組也看作是一種特殊的節(jié)點(diǎn)。
如附圖1所示,基本節(jié)點(diǎn)構(gòu)成主要包括了三個(gè)部分:引入連接線1,引出連接線2,矩形框3。引入連接線1、引出連接線2是當(dāng)前節(jié)點(diǎn)與上一個(gè)節(jié)點(diǎn)、下一個(gè)節(jié)點(diǎn)的連接關(guān)系線,通過上下連接關(guān)系線向上和向下可以找到流程圖中的所有節(jié)點(diǎn)。開始節(jié)點(diǎn)包括引入連接線2,結(jié)束節(jié)點(diǎn)包括引入連接線1。引出連接線作為向下的一個(gè)連接關(guān)系引線,本節(jié)點(diǎn)即為開始節(jié)點(diǎn);引入連接線作為向上的一個(gè)連接關(guān)系引線,本節(jié)點(diǎn)就是結(jié)束節(jié)點(diǎn)。矩形框3中包含節(jié)點(diǎn)名稱4、節(jié)點(diǎn)圖標(biāo)5、節(jié)點(diǎn)狀態(tài)圖標(biāo)6?;竟?jié)點(diǎn)具有的三個(gè)屬性包括:坐標(biāo)、隱藏/顯示和尺寸,可利用這三個(gè)屬性對節(jié)點(diǎn)進(jìn)行布局操作。沒有向上引線的節(jié)點(diǎn)為整個(gè)流程圖的開始節(jié)點(diǎn),沒有向下引出線的節(jié)點(diǎn)為整個(gè)流程圖的結(jié)束節(jié)點(diǎn)。
除基本節(jié)點(diǎn)外,本發(fā)明中的流程圖還包括組,基本組是基本節(jié)點(diǎn)的容器,包含了一個(gè)或多個(gè)基本節(jié)點(diǎn),同時(shí)還能包含基本組?;窘M也可以認(rèn)為是一個(gè)小的流程圖,基本組包含有一個(gè)組頭和組尾,和流程圖具有相同的屬性?;窘M和流程圖的異同點(diǎn)如下:相同點(diǎn)在于基本組和流程圖都包含了組頭和組尾,只是流程圖組頭稱為開始,組尾稱為結(jié)束,兩者內(nèi)部的結(jié)構(gòu)完全相同;兩者的不同之處主要在于外部表現(xiàn),基本組可以作為一個(gè)整體嵌套在其他的組內(nèi)部,并且具有上下連接線,同其他單元進(jìn)行連接,而流程圖沒有外部鏈接關(guān)系,只能獨(dú)立的存在。
基本組由組頭、組尾以及中間的節(jié)點(diǎn)(包括基本組)構(gòu)成。組頭、組尾只是一個(gè)標(biāo)記,說明組的開始和結(jié)束,不同類型基本組的組頭、組尾的構(gòu)成都不同。基本組按照結(jié)構(gòu)的不同分成了三種:一般組,分支組,循環(huán)組。
一般組:按照順序結(jié)構(gòu)來構(gòu)造,從組頭開始,按照線性順序一直串聯(lián)到組尾,如附圖2(a)所示。
分支組:是一種包含了多分支的組,分支從組頭開始,結(jié)束于組尾。分支內(nèi)部連接是一種順序結(jié)構(gòu),類似于一般組,只是所有分支都共用組頭和組尾,如附圖2(b)所示。分支組可以包括多分支10,在多分支的每個(gè)分支中可以包括基本節(jié)點(diǎn)及基本組,如附圖3所示。
循環(huán)組:是一種可以多次循環(huán)遍歷的組。結(jié)構(gòu)和一般組類似,在組尾有一條連接線引出,連接到組頭,此連接線稱為逆向連接線,如附圖2(c)所示。
由于組和基本節(jié)點(diǎn)(BaseNode)具有相同的特性,所有組和基本節(jié)點(diǎn)可以繼承于BaseNode。也就是說BaseNode是所有組和基本節(jié)點(diǎn)的基類。BaseNode主要包括了引入連接線、引出連接線、尺寸、位置信息。
基本節(jié)點(diǎn)直接繼承于BaseNode,而其他組不能直接繼承BaseNode,而是需要抽象出組的另外一個(gè)基類基本組(BaseGroup),這樣所有的組都是繼承于BaseGroup。BaseGroup主要包含了組頭(StartNode)、組尾(EndNode)、能否展開(Expandable)和是否展開(Expanded)等屬性。同時(shí)BaseGroup包含一些公用方法,比如組布局、獲取組內(nèi)部所有基本節(jié)點(diǎn)等,附圖4是幾個(gè)結(jié)構(gòu)的繼承關(guān)系。本發(fā)明中將基本節(jié)點(diǎn)和基本組統(tǒng)一稱為節(jié)點(diǎn)。
[組的創(chuàng)建(100)]
在構(gòu)造流程圖時(shí)候,由開始節(jié)點(diǎn)和結(jié)束節(jié)點(diǎn)連接構(gòu)成基本流程圖,然后其他的節(jié)點(diǎn)都往里面添加。首先創(chuàng)建要插入的對象,即節(jié)點(diǎn)(11),創(chuàng)建包括從單元列表中選擇節(jié)點(diǎn),或者在已有的流程圖中復(fù)制節(jié)點(diǎn);刪除原有位置的連接線(12);然后將插入對象的上一個(gè)節(jié)點(diǎn)與插入節(jié)點(diǎn)創(chuàng)建連接線(13);再將插入對象的下個(gè)節(jié)點(diǎn)與插入節(jié)點(diǎn)創(chuàng)建連接線(14);最后對整體流程圖進(jìn)行布局(15),同時(shí)在撤銷堆棧中添加相應(yīng)的操作信息(16),清空重做堆棧中的對象信息(17)。組的創(chuàng)建過程如附圖5所示。
[組的布局]
布局是在插入節(jié)點(diǎn)或組、刪除節(jié)點(diǎn)或組等操作后對流程圖其余節(jié)點(diǎn)的位置進(jìn)行調(diào)整和設(shè)置的過程,形成一種整潔、清晰的節(jié)點(diǎn)擺放方法,不至于導(dǎo)致流程圖及連線的混亂。整個(gè)流程圖可以看成一個(gè)組,所以流程圖的布局可以歸結(jié)為組布局。根據(jù)組的不同,可以將布局分成四大類:主布局、一般組布局、分支組布局和循環(huán)組布局。主布局就是對流程圖的布局,由于流程圖和一般組具有相同的內(nèi)部結(jié)構(gòu),主布局和流程圖布局方法也相同。最后布局只有三種:主布局、分支布局、循環(huán)布局。
(1)主布局方法(200)
如附圖6所示,首先基本框架流程(即流程圖)的布局需要將所有組都當(dāng)成一個(gè)基本節(jié)點(diǎn),然后下層在調(diào)用相應(yīng)的布局算法完成整個(gè)布局。主布局是其他所有布局的基礎(chǔ),在后面的分支組和循環(huán)組中都會(huì)用到。主布局的具體布局過程描述如下:首先判斷當(dāng)前節(jié)點(diǎn)類型(18);如果是基本節(jié)點(diǎn),就直接設(shè)置下個(gè)節(jié)點(diǎn)的位置(19);如果是組,先調(diào)用組的布局方法,算出組的高度和寬度(20),然后設(shè)置下個(gè)節(jié)點(diǎn)的位置(21);按照上述的步驟循環(huán)遍歷所有的節(jié)點(diǎn);直到遇到最后一個(gè)沒有后續(xù)連接節(jié)點(diǎn)的終止節(jié)點(diǎn)(22),布局完成。
(2)分支組布局(300)
如附圖7所示,分支組布局是對主布局的一個(gè)拓展。分別對分支都進(jìn)行主布局,最后根據(jù)分支中高度最大的分支高度,計(jì)算組尾的位置進(jìn)行布局。布局過程如下:首先對組頭的引出連接線進(jìn)行布局(23);接著對分支進(jìn)行主布局(200),直到一條分支布局完成;然后照前兩步將其他分支進(jìn)行布局;分支布局完成后(24),獲取高度最大的分支高度,計(jì)算組尾的位置(25),最后布局完成。
(3)循環(huán)組布局(400)
如附圖8所示,循環(huán)組在進(jìn)行布局時(shí),首先對組頭的引出連接線進(jìn)行布局(23);接著對循環(huán)內(nèi)部的節(jié)點(diǎn)進(jìn)行主布局(200);最后對折回線進(jìn)行布局(26),布局完成。
[組的折疊和展開]
折疊和展開是組特有功能,流程圖和基本節(jié)點(diǎn)都不具備,在流程圖編輯時(shí)可將功能類似的節(jié)點(diǎn)組成一般組,利用組折疊和展開功能能夠使大規(guī)模的流程圖變得簡潔、方便瀏覽和快速編輯。當(dāng)組折疊的時(shí)候,只有組頭顯示,其他部分都隱藏,相當(dāng)于變成了一個(gè)基本節(jié)點(diǎn)。展開過程就是撤銷組原來布局的過程。同樣的,組的折疊和展開有三種:一般組折疊和展開,分支組的折疊和展開,循環(huán)組的折疊和展開。
(1)一般組折疊和展開
如附圖9所示,一般組的折疊過程(500)描述如下:首先遍歷組內(nèi)的節(jié)點(diǎn)(此處基本節(jié)點(diǎn)和組都稱為節(jié)點(diǎn)),不進(jìn)入組內(nèi)部(27);將每個(gè)節(jié)點(diǎn)的位置和尺寸設(shè)置為組頭的位置和尺寸(28);除了組頭外,將其他節(jié)點(diǎn)的隱藏屬性設(shè)置為隱藏(29);遍歷的時(shí)候遇到是組,將組的展開屬性設(shè)置為假(保證組內(nèi)部的組都隱藏)(30);然后將組頭的引出連接線隱藏,將組尾的引入連接線隱藏(31);最后進(jìn)行重新布局(32)(只對展開的組布局,折疊組不用布局)。
如附圖10所示,一般組的展開過程(600)描述如下:首先遍歷組內(nèi)的節(jié)點(diǎn),不進(jìn)入組內(nèi)部(33);然后將除了組頭外,其他節(jié)點(diǎn)的隱藏屬性設(shè)置為顯示(34);接著將組頭的引出連接線設(shè)置為顯示,將組尾的引入連接線設(shè)置為顯示(35);最后進(jìn)行重新布局(36)。
(2)分支組的折疊和展開
由于折疊和展開不涉及到節(jié)點(diǎn)的連接關(guān)系,直接使用了組的節(jié)點(diǎn)集合,所以分支組的折疊和展開和一般組相同。
(3)循環(huán)組折疊和展開
循環(huán)組與一般組和分支組的最大區(qū)別在于組尾有一個(gè)引出線指向組頭,因此在折疊的時(shí)候不僅需要將組尾的引入線隱藏,還要將逆向連接線隱藏。如附圖11所示,循環(huán)組的折疊過程700描述如下:遍歷組內(nèi)的節(jié)點(diǎn)(此處基本節(jié)點(diǎn)和組都稱為節(jié)點(diǎn))(27),不進(jìn)入組內(nèi)部;將每個(gè)節(jié)點(diǎn)的位置和尺寸設(shè)置為組頭的位置和尺寸(28);除了組頭外,將其他節(jié)點(diǎn)的隱藏屬性設(shè)置為隱藏(29);遍歷的時(shí)候遇到是組,將組的展開屬性設(shè)置為假。(保證組內(nèi)部的組都隱藏)(30);將組頭的引出連接線隱藏,將組尾的引入連接線隱藏,將逆向連接線隱藏(37);最后進(jìn)行重新布局(只對展開的組布局,折疊組不用布局)(32)。
循環(huán)組的展開過程如下:遍歷組內(nèi)的節(jié)點(diǎn),不進(jìn)入組內(nèi)部(33);將除了組頭外,其他節(jié)點(diǎn)的隱藏屬性設(shè)置為顯示(34);將組頭的引出連接線設(shè)置為顯示,將組尾的引入連接線設(shè)置為顯示,逆向連接線顯示(38);然后進(jìn)行重新布局(36),如附圖12所示。
[復(fù)制、粘貼、刪除、撤銷及重做操作]
在流程圖的創(chuàng)建和編輯過程中,需要對節(jié)點(diǎn)或組進(jìn)行復(fù)制、粘貼、刪除、撤銷及重做。確定需要復(fù)制、粘貼、刪除、撤銷的節(jié)點(diǎn)或組與流程圖其他節(jié)點(diǎn)或組的關(guān)系后,調(diào)用節(jié)點(diǎn)或組的布局即可完成布局操作。
復(fù)制、粘貼、刪除、撤銷、重做操作本質(zhì)上就是對節(jié)點(diǎn)整體的內(nèi)存拷貝,例如復(fù)制操作,就是將一個(gè)節(jié)點(diǎn)另外拷貝一份,然后插入到指定的位置即可。因此,我們需解決的問題是節(jié)點(diǎn)關(guān)系的內(nèi)存拷貝,可以采用內(nèi)存對象的序列化方法實(shí)現(xiàn),很多語言都有自己的序列化方法,并且這方面已經(jīng)比較成熟,在此不再過多陳述具體的序列化方法。將把重點(diǎn)放在具體流程圖操作的闡述上面。
復(fù)制和粘貼操作(900)是把流程圖結(jié)構(gòu)已存在的節(jié)點(diǎn)或組復(fù)制一份再粘貼到流程圖的其他位置,以加快流程圖的構(gòu)建過程。復(fù)制操作首先選中節(jié)點(diǎn)或組(39),如果是組,只需要選中組頭或組尾,就能選中組(得到了組對象)。然后序列化節(jié)點(diǎn)對象(不包含該節(jié)點(diǎn)的引入連接線,引出連接線)(40)。選擇節(jié)點(diǎn)或組復(fù)制后,粘貼操作首先選中需要粘貼已經(jīng)復(fù)制的節(jié)點(diǎn)的連接線(41);刪除原有位置的連接線(42);將要粘貼節(jié)點(diǎn)上一個(gè)節(jié)點(diǎn)與要粘貼節(jié)點(diǎn)創(chuàng)建連接線(43);將要粘貼節(jié)點(diǎn)的下個(gè)節(jié)點(diǎn)與要粘貼節(jié)點(diǎn)創(chuàng)建連接線(44);對整體流程圖進(jìn)行布局(45)。在撤銷堆棧中添加相應(yīng)的操作信息,清空重做堆棧中的對象信息。復(fù)制和粘貼的過程如圖13所示。
刪除是在流程圖中創(chuàng)建過程中將不需要的節(jié)點(diǎn)或組刪除,刪除操作首先選中節(jié)點(diǎn)或組,如果是組,只需要選中組頭或組尾,就能選中組(得到了組對象);刪除當(dāng)前選中節(jié)點(diǎn)的引入連接線和引出連接線;將要?jiǎng)h除節(jié)點(diǎn)上一個(gè)節(jié)點(diǎn)與要?jiǎng)h除節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)創(chuàng)建連接線,刪除完成。在撤銷堆棧中添加刪除節(jié)點(diǎn)或組信息(46),清空重做堆棧中的對象信息(47)。
撤銷功能是在誤操作流程圖后,將流程圖撤銷恢復(fù)到操作前一步或前幾步的過程。從本質(zhì)來說,撤銷就是不同對象的刪除和粘貼。所以只需要將已經(jīng)操作的對象按照堆棧的方式保存下來,同時(shí)記錄下相應(yīng)的相反動(dòng)作(比如此時(shí)進(jìn)行的是刪除動(dòng)作,只需要記錄為粘貼即可)。撤銷的主要步驟如下:取撤銷堆棧最后一個(gè)對象信息,使用粘貼操作添加該節(jié)點(diǎn),在重做堆棧中記錄中該節(jié)點(diǎn)信息;撤銷插入和粘貼操作時(shí)取撤銷堆棧最后一個(gè)對象信息執(zhí)行刪除操作,同時(shí)在重做堆棧中記錄被刪除節(jié)點(diǎn)信息;撤銷成組操作時(shí)從撤銷堆棧中獲得最后一個(gè)對象信息將流程圖恢復(fù)到成組前的狀態(tài),在重做堆棧中記錄成組節(jié)點(diǎn)的信息。
重做操作正好是撤銷的相反操作,某一個(gè)操作撤銷后需要恢復(fù)時(shí)采用重做實(shí)現(xiàn)。重做的主要步驟如下:取重做堆棧最后一個(gè)對象,使用刪除操作刪除該節(jié)點(diǎn),調(diào)用布局功能重新對流程圖近布局;重做插入和粘貼操作時(shí),取重做堆棧的最后一個(gè)節(jié)點(diǎn),執(zhí)行粘貼操作,對流程圖近重新布局;重做成組操作時(shí)從重做堆棧中取最后一個(gè)對象信息執(zhí)行成組操作,并對流程圖進(jìn)行重新布局,完成重做操作。
[流程圖創(chuàng)建及編輯實(shí)例]
(1)初始流程圖如附圖14所示。
(2)加入基本節(jié)點(diǎn)和分支節(jié)點(diǎn)的流程圖如附圖15所示,分支節(jié)點(diǎn)本身可以成組,附圖15的流程圖包括3個(gè)分支。
(3)一般節(jié)點(diǎn)的成組實(shí)例,可根據(jù)需要將組折疊和展開,如附圖16所示.
(4)加入循環(huán)組的流程圖如附圖17所示。
(5)將附圖16中的所有組折疊后的效果如附圖18所示。
[流程圖構(gòu)建方法的機(jī)器視覺軟件應(yīng)用實(shí)例]
將本發(fā)明公開的流程圖應(yīng)用于基于流程圖的機(jī)器視覺系統(tǒng)開發(fā)中,能夠很好地實(shí)現(xiàn)機(jī)器視覺系統(tǒng)靈活的模塊化程序構(gòu)建。附圖19(a)~(c)描述了一個(gè)簡單的機(jī)器視覺應(yīng)用中的流程圖結(jié)構(gòu),包括兩個(gè)工位,每個(gè)工位有一個(gè)相機(jī),能夠?qū)崿F(xiàn)的功能包括目標(biāo)定位、邊緣提取、圓檢測、條碼讀取、數(shù)值計(jì)算、缺陷檢測等。邊緣直線檢測模塊相對獨(dú)立,可以單獨(dú)成組,附圖19(b)和附圖19(c)分別為折疊邊緣直線檢測模塊和分支后的流程圖結(jié)構(gòu),附圖19(a)為全部展開后的流程圖結(jié)構(gòu)。從附圖19(b)和附圖19(c)可以看出對于復(fù)雜的機(jī)器視覺系統(tǒng)創(chuàng)建大型的流程圖后,通過折疊/展開操作可以將已完成的模塊折疊,精簡流程圖視覺,便于快速編輯和瀏覽。上述機(jī)器視覺系統(tǒng)的應(yīng)用驗(yàn)證了本發(fā)明的流程圖構(gòu)建方法具有良好的適應(yīng)性。
以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。