• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    3D協(xié)作系統(tǒng)下基于DOAG的選擇性Undo/Redo研究

    2019-03-13 05:14:34高麗萍劉珊珊
    關(guān)鍵詞:子結(jié)構(gòu)意圖選擇性

    高麗萍,劉珊珊

    1(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093) 2(復(fù)旦大學(xué) 上海市數(shù)據(jù)科學(xué)重點(diǎn)實(shí)驗(yàn)室,上海 200093)

    1 引 言

    當(dāng)?shù)谝淮翁剿餍孪到y(tǒng)時(shí),用戶需要反復(fù)執(zhí)行和取消操作,以充分理解每個(gè)功能."任何具有復(fù)雜交互界面的系統(tǒng)都應(yīng)該提供Undo/Redo支持"的想法被屢次提出來(lái)[1]."沒(méi)有人會(huì)懷疑在交互系統(tǒng)中提供Undo/Redo功能的重要性"這一事實(shí)也指出了這一點(diǎn)[2].

    協(xié)同CAD系統(tǒng)是地理上分散的設(shè)計(jì)師共同工作的重要平臺(tái).作為協(xié)作系統(tǒng)中的一個(gè)重要特性,Undo/Redo可以幫助減少錯(cuò)誤消除誤解[3,4].幾種選擇性Undo/Redo方法已經(jīng)在國(guó)內(nèi)外得到廣泛研究,主要在圖形編輯器和文本編輯器[5,6]中探索了選擇性Undo/Redo,很少對(duì)3D模型進(jìn)行探究,都是通過(guò)插件的形式來(lái)實(shí)現(xiàn)選擇性Undo/Redo,針對(duì)的目標(biāo)對(duì)象也是以前所作的操作,撤銷以前的操作,使得最后編輯的效果能滿足用戶意圖.在CAD協(xié)作系統(tǒng)下,要實(shí)現(xiàn)選擇性Undo/Redo是復(fù)雜的,比單機(jī)環(huán)境下更具有挑戰(zhàn)性.

    要設(shè)計(jì)出一個(gè)復(fù)雜而有創(chuàng)意的工件,選出有意義的操作序列對(duì)快速設(shè)計(jì)出一個(gè)復(fù)雜的工品是有意義的,通過(guò)有意義的操作序列設(shè)計(jì)出滿足用戶需求的CAD模型,在進(jìn)行的一系列操作序列中,我們可以將操作之間的關(guān)系都詳細(xì)地描述出來(lái),當(dāng)選擇其中的一個(gè)操作作為撤銷目標(biāo)時(shí),依賴它的所有操作將會(huì)一起撤銷.在這種情況下,怎么更新剩下的邊界模型,當(dāng)對(duì)撤銷的目標(biāo)對(duì)象進(jìn)行重做時(shí),怎么重構(gòu)新的邊界模型,這些都應(yīng)該清楚地表示說(shuō)明出來(lái).

    一個(gè)通用的協(xié)作環(huán)境的基本正確性應(yīng)該得到滿足,例如意圖維護(hù)和一致性維護(hù).Undo/Redo的目的是消除并重新創(chuàng)建由特定的建模操作所生成的特性.操作在不同的站點(diǎn)之間是交叉的,并且在執(zhí)行了許多操作之后可以檢測(cè)到錯(cuò)誤.Undo/Redo的含義應(yīng)該被清楚地解釋.

    此次我們不同于前面人提出的一種多用戶的Undo/Redo方法,而是用于三維協(xié)作CAD中.在我們的方法中,可以在每個(gè)站點(diǎn)中唯一地標(biāo)識(shí)Undo/Redo目標(biāo).我們還研究了設(shè)計(jì)工件的復(fù)雜操作,用提出的DOAG來(lái)表示一個(gè)構(gòu)成CAD模型的操作關(guān)系圖.在此基礎(chǔ)上,闡明了特征與操作之間的依賴關(guān)系.在每次撤銷或重做時(shí),必須對(duì)邊界模型進(jìn)行更新和重構(gòu),可以通過(guò)DOAG來(lái)幫助實(shí)現(xiàn).

    這篇論文是在前人研究的基礎(chǔ)上[7-9]進(jìn)行詳細(xì)拓展的,詳細(xì)介紹了操作組合DOAG的構(gòu)造(第3部分),關(guān)于Undo/Redo的算法(第4部分)會(huì)詳細(xì)介紹,一個(gè)詳細(xì)的例子在第5部分會(huì)介紹.

    2 相關(guān)工作

    在Undo/Redo上的研究引發(fā)了Undo/Redo模型和機(jī)制,在Undo/Redo模型領(lǐng)域已經(jīng)做了大量的相關(guān)研究.最早的的的Undo/Redo是用在單機(jī)環(huán)境中,在單機(jī)環(huán)境中的Undo/Redo模型分為4類.

    1) 單步Undo/Redo模型;

    2) 線性Undo/Redo模型[10];

    3) US&R模型[11];

    4) 歷史Undo/Redo模型[12].

    然而,在多用戶協(xié)作編輯系統(tǒng)中,在不同站點(diǎn)上的操作是相互交叉的.在本地站點(diǎn)上的最后一個(gè)操作未必是其他站點(diǎn)上的最后一個(gè)操作.所以選擇性Undo/Redo模型是多數(shù)用戶選擇的Undo/Redo模型.它的靈活度受到Undo/Redo范圍的限制.AnyUndo[13]是一個(gè)將撤銷策略與撤銷機(jī)制分離的框架.它允許用戶設(shè)計(jì)一個(gè)單一的撤銷算法來(lái)支持本地和全局的Undo/Redo和多個(gè)模型.選擇性撤銷模型,第一次在COPE[14]中提出用在多用戶系統(tǒng)中.它也被Knister和Ferrié J在[15,16]介紹.選擇性撤銷這一想法在協(xié)作系統(tǒng)[17],協(xié)作編輯系統(tǒng)中[18,19]和協(xié)作圖形編輯系統(tǒng)[21]中采用.在協(xié)作編輯系統(tǒng)中的撤銷算法都屬于操作轉(zhuǎn)換.所有的3個(gè)撤銷模型,即單步撤銷,按時(shí)間先后順序的撤銷和選擇性撤銷,前兩種撤銷模式已經(jīng)被廣泛研究,后面選擇性撤銷方式在CAD中提出通過(guò)分解3D模型[22],構(gòu)造特征組合層次結(jié)構(gòu),將一個(gè)CAD模型進(jìn)行分解,基于特征組合結(jié)構(gòu),特征間的依賴關(guān)系可以清楚得表現(xiàn)出來(lái),簡(jiǎn)化了B-Rep重新評(píng)估,證明了提出的Undo/Redo重做方法滿足了協(xié)作系統(tǒng)的意圖保存和一致性維護(hù)的正確性.

    Abowd[2]和Choudhary[17]提出的多用戶Undo/Redo模型沒(méi)有考慮到操作的依賴集,但GINA[15]中的選擇性撤銷模型和任意撤銷模型[13]有考慮到這點(diǎn).在MSS[9]中,要撤銷的目標(biāo)操作不是歷史緩存中的最后一個(gè),做過(guò)的操作要重新安排,用MSS來(lái)記錄實(shí)際的操作順序,MSS是由在收到的模型操作執(zhí)行完后代表實(shí)現(xiàn)部分模型的狀態(tài)節(jié)點(diǎn)組成,每個(gè)節(jié)點(diǎn)都有相應(yīng)的拓?fù)鋵?shí)體集,相關(guān)的拓?fù)鋵?shí)體集可以分開(kāi),組合和消除,TEST在每個(gè)站點(diǎn)都有副本,它可以跟蹤拓?fù)鋵?shí)體的改變,并弄清來(lái)自原始模型和新版本的TE之間的關(guān)系,在TEST中的每個(gè)節(jié)點(diǎn)都有唯一地標(biāo)識(shí),這樣它可以指定它的創(chuàng)建操作.然而,在選擇性撤銷模型中,一個(gè)操作不能撤銷或重做,當(dāng)它與后面執(zhí)行的操作有依賴關(guān)系時(shí),在前面的兩個(gè)模型中,當(dāng)做一個(gè)重做命令時(shí),操作參數(shù)需要進(jìn)行轉(zhuǎn)換.當(dāng)面對(duì)未解決的沖突,他們采取一個(gè)多版本方法作為解決方法,在單機(jī)環(huán)境中,主要用的是多級(jí)模型和級(jí)聯(lián)選擇性撤銷模型.在操作中,相關(guān)性的解決方案是基于任務(wù)ID和任務(wù)相關(guān)性的.也就是說(shuō),當(dāng)撤銷一個(gè)操作時(shí),所有與之相關(guān)的任務(wù)都將被撤銷.

    在多用戶Undo/Redo的領(lǐng)域中,在協(xié)同CAD系統(tǒng)下實(shí)現(xiàn)多用戶Undo/Redo的研究工作很少.我們以前提出的多用戶的Undo/Redo的解決方案的仍然存在缺陷,當(dāng)發(fā)現(xiàn)操作有依賴集時(shí),會(huì)檢查每個(gè)附加的依賴集的特性是否引用了撤銷目標(biāo)所創(chuàng)建的拓?fù)鋵?shí)體.這樣撤銷目標(biāo)對(duì)象的效率非常低.其次,模型恢復(fù)在每個(gè)建模操作執(zhí)行之后通過(guò)存儲(chǔ)模型狀態(tài)來(lái)完成的.撤銷目標(biāo)的效果是首先通過(guò)執(zhí)行模型狀態(tài)并重新執(zhí)行所有有效操作來(lái)消除的.如果撤銷目標(biāo)位于歷史緩沖區(qū)的前端,并且減少了對(duì)它的處理,那么恢復(fù)效率將非常低.也有相關(guān)研究者為了表示設(shè)計(jì)工件的結(jié)構(gòu)和特性之間的相互依賴關(guān)系,采用了ACIS的邊界表示CAD模型的形狀.在ACIS中,屬性被附加到實(shí)體來(lái)描述它們的系統(tǒng)定義和用戶定義的特征.在此基礎(chǔ)上,由特定的建模操作創(chuàng)建的每一個(gè)實(shí)體都以(Create_SiteID,Create_SEQ)的形式作為其ID的輔助信息而被創(chuàng)建,每一個(gè)拓?fù)鋵?shí)體都可以獲得它的相關(guān)操作.為了方便獲得相關(guān)的拓?fù)鋵?shí)體,在協(xié)作CAD提出了FCH[22],特征組合層次是一種樹(shù)狀的數(shù)據(jù)結(jié)構(gòu),用來(lái)表示CAD模型中每個(gè)特征實(shí)體之間的關(guān)系.

    圖1 復(fù)雜模型的操作圖Fig.1 Diagram of complex model operation

    在前面的研究中,恢復(fù)模型都采用這幾種方法,一種是重新執(zhí)行歷史緩沖區(qū)中的所有有效操作.盡管計(jì)算工作量巨大,但由于硬件速度加快,這仍然是可行的.第二種方法是在相鄰的建模操作之間存儲(chǔ)臨時(shí)的幾何模型或增量式的值.該方法是由國(guó)家CAD工程中心的王教授所采用的.再一種是通過(guò)邊界模型重構(gòu)以消除目標(biāo)操作和依賴操作集的執(zhí)行效果.該發(fā)明與已有技術(shù)相比較,效果是積極明顯的.

    圖1是一個(gè)復(fù)雜模型的分解圖,由不同站點(diǎn)協(xié)同構(gòu)造該模型.以下用例子說(shuō)明在原型協(xié)同系統(tǒng)下不同站點(diǎn)上操作的執(zhí)行過(guò)程.如圖2所示,在站點(diǎn)1,6種特征模型操作O1,O2,O3,O4,O5,O6依次到達(dá)站點(diǎn)1,在站點(diǎn)2,操作O1,O2,O4,O4,O5,O6依次按順序到達(dá),每個(gè)操作所引用的拓?fù)鋵?shí)體集在執(zhí)行時(shí)都能正確地通信,在站點(diǎn)1和站點(diǎn)2都不用重新調(diào)整操作順序.在站點(diǎn)3,來(lái)到的操作順序是O1,O3,O4,O2,O5,O6,當(dāng)執(zhí)行O3時(shí),對(duì)模型上的邊進(jìn)行倒圓角,當(dāng)O4到達(dá)時(shí),對(duì)模型進(jìn)行挖圓洞,接著,O2到達(dá),在模型的中間挖凹槽,凹槽的位置大小受到了O3,O4操作的影響,O2→O4,為了保存O2的用戶意圖,必須重新調(diào)整O3,O4,O2的操作順序,由于O5→O6,也要一起撤銷O5,O6構(gòu)成的子模型,重新調(diào)整O1,O3,O4,O2,O5,O6的操作順序.

    圖2 協(xié)同站點(diǎn)上操作執(zhí)行順序圖 Fig.2 Operation sequence in collaborative site

    針對(duì)上圖的例子,我們需要調(diào)整站點(diǎn)3上的O3,O4,O2的操作順序來(lái)維護(hù)用戶意圖,但又要撤銷O5,O6操作構(gòu)成的子結(jié)構(gòu),怎樣能快速撤銷掉已經(jīng)做過(guò)的操作又重新對(duì)撤銷的操作順序進(jìn)行安排呢,又不影響其他的操作構(gòu)成的子結(jié)構(gòu).通過(guò)有意義的操作序列來(lái)快速建立起一個(gè)實(shí)體模型,效率將大大提高,雖然每個(gè)站點(diǎn)上的操作序列是不一樣的,但我們將會(huì)在每個(gè)站點(diǎn)上都存儲(chǔ)了一個(gè)有意義維護(hù)用戶意圖的操作序列,方便用戶撤銷目標(biāo)操作及關(guān)于目標(biāo)操作的子結(jié)構(gòu),而不影響其他沒(méi)有任何關(guān)系的操作.

    3 在3D協(xié)作系統(tǒng)下設(shè)計(jì)操作聚合結(jié)構(gòu)

    我們認(rèn)為一件工件的設(shè)計(jì)是多位不同用戶協(xié)同一起操作的完成的結(jié)果.作為一項(xiàng)正在進(jìn)行的研究,我們主要關(guān)注的是對(duì)于已經(jīng)做過(guò)的操作,不同站點(diǎn)的用戶如何快速地找到目標(biāo)操作及目標(biāo)操作攜帶的操作集進(jìn)行撤銷,調(diào)整操作順序來(lái)完成最終的設(shè)計(jì)意圖.通過(guò)挖掘一個(gè)有意義的設(shè)計(jì)操作序列,處理好這些有意義的操作序列,會(huì)使得選擇性撤銷的效率更加明顯,在一個(gè)協(xié)作的CAD系統(tǒng)中,每個(gè)站點(diǎn)都有操作依賴聚合結(jié)構(gòu)拓?fù)鋵?shí)體的副本.在將其發(fā)送到其他遠(yuǎn)程站點(diǎn)之前,在本地站點(diǎn)發(fā)出的操作優(yōu)先執(zhí)行.一個(gè)復(fù)雜的CAD模型可以分解成若干個(gè)不同的子結(jié)構(gòu),構(gòu)成每個(gè)子結(jié)構(gòu)的操作具有依賴關(guān)系,主要用到的操作為幾何操作和布爾操作,幾何操作是指從一個(gè)已有的實(shí)體模型中選擇拓?fù)鋵?shí)體為目標(biāo),如將一個(gè)實(shí)體的邊倒圓角,將這個(gè)實(shí)體縮小旋轉(zhuǎn)等等.布爾操作指的是聯(lián)合,減法和交叉.通過(guò)執(zhí)行布爾運(yùn)算,一個(gè)新的實(shí)體從兩個(gè)已有的實(shí)體中得到.盡管每個(gè)站點(diǎn)上的歷史緩沖區(qū)可以記錄所有建模操作的到達(dá)順序并進(jìn)行保存,但是當(dāng)要撤銷已做過(guò)的操作時(shí),通過(guò)回溯歷史緩沖區(qū),撤銷沒(méi)有任何依賴關(guān)系的操作是多余的,因此我們提出使用DOAG來(lái)找出有意義的操作集來(lái)快速獲得要撤銷的部分子結(jié)構(gòu),而不影響其他操作構(gòu)成的子結(jié)構(gòu).在DOAG中,操作間的依賴關(guān)系,分為相關(guān)依賴或?qū)傩砸蕾?,相關(guān)依賴是指先用一個(gè)操作創(chuàng)建實(shí)體,后面的操作要借助實(shí)體或在實(shí)體上執(zhí)行,比如Oa,會(huì)被后面生成的操作Ob引用,可以表示Oa→Ob;屬性依賴是指如果對(duì)某個(gè)生成操作的定義的某些參數(shù)受到前面創(chuàng)建操作的大小或位置的影響,通過(guò)利用DOAG,當(dāng)要撤銷操作時(shí),可以快速的找到目標(biāo)操作及目標(biāo)操作的子結(jié)構(gòu),也不會(huì)影響其他沒(méi)有依賴關(guān)系的操作.特定的建模操作創(chuàng)建的實(shí)體都以(CreateSiteID,CreateSeq)的形式作為其ID的輔助信息附加到相應(yīng)的建模操作屬性中,在DOAG中,我們通過(guò)ID可以快速找到這個(gè)建模操作所代表的子結(jié)構(gòu),進(jìn)行選擇性撤銷而進(jìn)行重做,而我們主要對(duì)這些要撤銷的復(fù)雜模型的操作進(jìn)行討論,而其他與要撤銷的目標(biāo)對(duì)象沒(méi)有關(guān)系的操作的執(zhí)行在各個(gè)站點(diǎn)都不會(huì)違背用戶的意圖和最后模型的一致性.

    3.1 DOAG的簡(jiǎn)單介紹

    在基于協(xié)作特征的三維CAD環(huán)境中生成的工件模型是由多個(gè)設(shè)計(jì)者共同操作的復(fù)雜對(duì)象,這些設(shè)計(jì)者迭代地添加,刪除各種類型的特征.它用B-Rep表示,其形狀由大量不同的拓?fù)鋵?shí)體組成,如拓?fù)涿?,邊和頂點(diǎn).布爾運(yùn)算(如聯(lián)合,減法和交叉)提供了一種有效的方法來(lái)將特征和實(shí)體組合一起.接下來(lái)我們介紹一個(gè)有意義的操作聚合圖[20]的基于圖形的數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)稱DOAG.

    定義1.因果順序關(guān)系"→".任意兩個(gè)操作Oa和Ob,如果Oa因于Ob之前,表示為Oa→Ob,則Oa創(chuàng)建的相應(yīng)拓?fù)鋵?shí)體由Ob引用.

    定義2.因果維護(hù)"→".任意兩個(gè)操作Oa和Ob,如果因于Ob之前,表示為Oa→Ob,則在任意站點(diǎn)上Oa總是在Ob之前執(zhí)行.

    定義3.依賴關(guān)系.給兩個(gè)操作Oa和Ob,如果Ob屬性依賴或相關(guān)依賴于Oa,則表示為Oa→Ob.

    定義4.DOAG的描述.一個(gè)DOAG=是由一組Nv個(gè)頂點(diǎn)V,Ne條邊E組成的,一條邊(Vi,Vj)表示頂點(diǎn)Vi與Vj之間有依賴關(guān)系.

    定義5.意圖維護(hù).一個(gè)模型操作O的意圖能夠得到保存當(dāng)且僅當(dāng)1)為了幾何目的與O相關(guān)的sub-DOAG不會(huì)改變或者存在CAD模型對(duì)應(yīng)的DOAG.2)與O相關(guān)的每個(gè)sub-DOAG對(duì)應(yīng)的拓?fù)鋵?shí)體一定存在.

    一個(gè)頂點(diǎn)V被定義為五元組,其形式如下.,type表示操作類型,timestamp表示為所有協(xié)作站點(diǎn)上操作的執(zhí)行順序統(tǒng)一自動(dòng)生成的整數(shù),reference_dependency表示與頂點(diǎn)Vi有相關(guān)依賴關(guān)系的代表操作的一組頂點(diǎn)(v1,v2,…,vn),attribute_dependency表示與頂點(diǎn)Vi有屬性依賴關(guān)系的代表操作的一組頂點(diǎn)(v1,v2,…,vn).

    DOAG是一種樹(shù)狀的數(shù)據(jù)結(jié)構(gòu),用來(lái)表示操作之間的聚合關(guān)系,在協(xié)作設(shè)計(jì)過(guò)程中很多操作具有很多依賴關(guān)系,將這些因依賴關(guān)系聚合在一起的操作構(gòu)成的模型稱為子結(jié)構(gòu).一個(gè)復(fù)雜的CAD模型可以分解為很多子結(jié)構(gòu).

    在一個(gè)協(xié)作CAD系統(tǒng)中創(chuàng)建的CAD模型是以一個(gè)原始模型操作而開(kāi)始創(chuàng)建的,而這個(gè)原始模型操作的依賴集在整個(gè)模型中是最大的,這個(gè)操作所構(gòu)成的模型在DOAG中相當(dāng)于中心點(diǎn)Vcentral,檢索在與當(dāng)前中心點(diǎn)的有引用依賴和屬性依賴的操作,每個(gè)操作作為子DOAG的中心點(diǎn)被自動(dòng)識(shí)別為連接到Vcentral.中心點(diǎn)按操作的時(shí)間戳來(lái)排序的,這樣整個(gè)操作序列都是連貫的,如果要檢索某個(gè)節(jié)點(diǎn)的依賴集及構(gòu)成的子結(jié)構(gòu),我們進(jìn)行了如下總結(jié):

    1) DOAG是一種描述復(fù)雜CAD模型的樹(shù)型結(jié)構(gòu),其根節(jié)點(diǎn)對(duì)應(yīng)協(xié)同站點(diǎn)上的開(kāi)始的操作,在檢索這個(gè)操作的所有DOS,所構(gòu)成的模型就是一個(gè)子結(jié)構(gòu),當(dāng)某個(gè)子結(jié)構(gòu)不滿足用戶意愿時(shí),可以再進(jìn)行分解,構(gòu)成用戶想要的子結(jié)構(gòu),而不會(huì)影響沒(méi)有任何依賴關(guān)系的操作及操作集構(gòu)成的子結(jié)構(gòu),每個(gè)子結(jié)構(gòu)和操作都由節(jié)點(diǎn)和葉子節(jié)點(diǎn)保存著;DOAG的根節(jié)點(diǎn)和每個(gè)中間節(jié)點(diǎn)使用基對(duì)象指針指向代表該復(fù)雜子結(jié)構(gòu)的基特征的節(jié)點(diǎn),并且保存了其代表的復(fù)雜子結(jié)構(gòu)分解生成的子結(jié)構(gòu)對(duì)應(yīng)的節(jié)點(diǎn)集,子節(jié)點(diǎn)使用基對(duì)象指針指向代表該原子結(jié)構(gòu)的定位特征的節(jié)點(diǎn).圖3中用虛線圈的操作可以構(gòu)成一個(gè)子結(jié)構(gòu).

    圖3 圖1中復(fù)雜模型的DOAG圖Fig.3 DOAG of complex model in Fig.1

    3.2 特征模型操作表示

    可以用下面的結(jié)構(gòu)表示一個(gè)特征操作構(gòu)成的子結(jié)構(gòu):

    Struct

    {

    long int CentralOperatin;

    long int ReferDepOpPointer;

    Long int AtrDepOpPointer;

    long int SubConf_Node;

    int SubConf_No;

    }Sub_Configuration

    Struct

    {

    long int subConfBoundaryModelPointer;

    Std..listm_listSubConfPointer;

    }3D Modeling

    通過(guò)上面兩個(gè)類,通過(guò)執(zhí)行第1個(gè)類可以獲得所有操作的操作集,第2個(gè)類可以幫助找到目標(biāo)操作.

    4 在復(fù)制式協(xié)同系統(tǒng)下的Undo/Redo方法

    在提到Undo/Redo方法之前,有必要討論一下我們?cè)趨f(xié)作CAD系統(tǒng)中采用的一致性維護(hù)機(jī)制.一個(gè)協(xié)作性的CAD系統(tǒng)需要執(zhí)行一個(gè)建模操作來(lái)滿足因果關(guān)系的保存和意圖的保存.所有副本在協(xié)作任務(wù)結(jié)束時(shí)達(dá)到收斂的狀態(tài).為了識(shí)別在一個(gè)復(fù)制的協(xié)作式CAD系統(tǒng)中協(xié)作站點(diǎn)所發(fā)布的同步操作的順序,使用基于Lamport State Vector[23]的時(shí)間戳排序技術(shù),狀態(tài)矢量是N個(gè)分量矢量,其中N代表所有協(xié)作站點(diǎn)的總數(shù),并且每個(gè)站點(diǎn)都有一個(gè)唯一的ID,范圍從0到N-1.每個(gè)站點(diǎn)都保留一個(gè)狀態(tài)向量,其中i-1組件表示站點(diǎn)中已經(jīng)執(zhí)行了多少操作.兩個(gè)狀態(tài)向量,SVi和SVj,是通過(guò)這種方式比較的,

    1) SVi=SVj當(dāng)且僅當(dāng)SVi中的值與SVj中相應(yīng)的值相等;

    2) SVi

    3) SVi>SVj,當(dāng)且僅當(dāng)SVi中的值大于SVj中的值.

    任何操作生成時(shí)或傳到其他站點(diǎn)時(shí)都會(huì)攜帶自身的狀態(tài)向量,當(dāng)SVi≤SVj時(shí),i站點(diǎn)上的操作優(yōu)先執(zhí)行,通過(guò)采用一種樂(lè)觀的序列化并發(fā)控制方法實(shí)現(xiàn)了目標(biāo)的保存.在很多協(xié)同系統(tǒng)中,為了維護(hù)用戶意圖的一致性和收斂性,都采用了狀態(tài)向量來(lái)解決出現(xiàn)的并發(fā)問(wèn)題[24,25].

    當(dāng)要撤銷一個(gè)操作時(shí),在協(xié)同CAD環(huán)境中實(shí)現(xiàn)Undo/Redo方法需要考慮到操作之間的依賴關(guān)系,結(jié)合上面提出的DOAG,我們很快檢索到任意操作所攜帶的子結(jié)構(gòu),首先要檢查相應(yīng)的操作所帶的DOS構(gòu)成的子結(jié)構(gòu),然后,所有依賴于撤銷目標(biāo)的操作都應(yīng)該全部撤銷,并且不會(huì)影響其他操作.

    當(dāng)一個(gè)撤銷命令被發(fā)布時(shí),它的意圖是將已經(jīng)做過(guò)的操作進(jìn)行撤銷掉,而不影響其他操作,需要包括:

    1)正確地找到撤銷目標(biāo)的依賴集;

    2)成功地將撤銷目標(biāo)和依賴于它的操作的效果一起撤銷,而不影響其他的子結(jié)構(gòu).

    當(dāng)一個(gè)重做命令發(fā)出時(shí),它的意圖是撤銷由同一用戶發(fā)出的最近的撤銷.在這一節(jié)中,我們提出了一個(gè)局部的Undo/Redo方法,用戶只能撤銷由他/她所發(fā)出的操作,該操作可能不是最后的操作.

    4.1 確定Undo/Redo目標(biāo)

    當(dāng)某一個(gè)有意義的操作序列在站點(diǎn)i上依次執(zhí)行,當(dāng)傳到其他站點(diǎn)時(shí),出現(xiàn)操作順序和站點(diǎn)i上的不一致,要通過(guò)局部Undo/Redo來(lái)調(diào)整操作順序,維護(hù)用戶意圖.由于網(wǎng)絡(luò)延時(shí)和基于狀態(tài)向量上的因果關(guān)系,在每個(gè)協(xié)作站點(diǎn)上的歷史操作都有以下特點(diǎn):

    1)來(lái)自同一站點(diǎn)上的操作在所有站點(diǎn)上都以相同的順序執(zhí)行.

    2)來(lái)自不同協(xié)作站點(diǎn)上的模型操作都是交叉的和在不同的站點(diǎn)以不同的順序執(zhí)行.

    因?yàn)橛脩粢蜂N的目標(biāo)對(duì)象不可能永遠(yuǎn)是最后一個(gè),當(dāng)定位到要撤銷的目標(biāo)時(shí),首先要考慮到兩種情況:

    1)定位到本地站點(diǎn)的撤銷對(duì)象;

    2)定位遠(yuǎn)程站點(diǎn)的撤銷目標(biāo)對(duì)象.

    一個(gè)建模操作在生成過(guò)后在相應(yīng)的站點(diǎn)會(huì)立即執(zhí)行,所以撤銷的目標(biāo)操作只存在本地站點(diǎn)上的執(zhí)行列表中.

    在一個(gè)協(xié)作CAD的原型系統(tǒng)中,有N個(gè)站點(diǎn),Ai,j(0

    當(dāng)一個(gè)任意的遠(yuǎn)程的站點(diǎn)Sj收到Undo要求,這個(gè)要撤銷的對(duì)象可能不是最后一個(gè)執(zhí)行的操作,所以它要撤銷的目標(biāo)操作可能在ExecutedListj和WaitListj中,為了找到要撤銷的目標(biāo),就要采用SiteId和StateVector,任意站點(diǎn)發(fā)送的操作都會(huì)攜帶狀態(tài)向量信息,當(dāng)撤銷命令發(fā)送到其他站點(diǎn)時(shí),首先在ExecutedListj搜索,然后在WaitListj中搜索,直至找到要撤銷的目標(biāo).

    當(dāng)找到要撤銷的目標(biāo)時(shí),由于每個(gè)站點(diǎn)都存儲(chǔ)了整個(gè)操作所構(gòu)成的DOAG,當(dāng)要撤銷的目標(biāo)在DOAG中進(jìn)行遍歷時(shí),就會(huì)找到相應(yīng)的該操作所攜帶的子DOAG,并和該操作一并撤銷掉,并且不影響其他的操作所構(gòu)成的模型結(jié)構(gòu),當(dāng)對(duì)撤銷的操作進(jìn)行重做時(shí),對(duì)它本身所攜帶的子DOAG進(jìn)行重做,重構(gòu)整個(gè)邊界模型.對(duì)于在本地站點(diǎn)和遠(yuǎn)程站點(diǎn)的撤銷目標(biāo)的處理,我們?cè)O(shè)計(jì)了如下幾個(gè)算法:

    算法1.對(duì)于如何獲得撤銷目標(biāo)的子DOAG的算法

    Input. the identified Undo target operation Op,current DOAG

    Output.DOAG(Op)

    1.root=root node of DOAG

    2.From root to Scan all object_nodes

    3.Op_Node=the object node of Op in DOAG

    4.DOS(Op)=Empty;

    5.SubConf_Node=Op_Node.m_listSubConfPointer[i];

    6.Temp_Node=Op_Node.next;

    7.while(Temp_Node!=SubConf_Node)

    8.if(Temp_Node->ReferDepOpPointer==Op_Node)

    9. Temp_Node is put into sub_DOAG(Op);

    10. if(Temp_Node->AtrDepOpPointer!=Op_Node)

    11. Temp_Node is put into sub_DOAG(Op);

    12. SubConf_Node=sub_DOAG(Op);

    13. CentralOperation=Op_Node;

    14. while(SubConf_Node!=NULL)

    15. if(SubConf_Node->subConfBoundaryPointer==Op_Node)

    16. Op_Node is put into sub_DOAG(Op);

    17. endif

    18. endwhile

    19. endif

    20. endif

    21.Temp_Node=Temp_Node->next

    22.endwhile

    該算法首先找到DOAG中原始的根節(jié)點(diǎn),將其設(shè)為中心點(diǎn)Vcentral,再檢索與當(dāng)前中心點(diǎn)的有引用依賴和屬性依賴關(guān)系的操作,將其存儲(chǔ)到每個(gè)中心點(diǎn)的DOAG中,每個(gè)操作作為子DOAG的中心點(diǎn)被自動(dòng)識(shí)別為連接到Vcentral,依次往下遍歷所有的操作節(jié)點(diǎn),直到所有操作遍歷完為止.

    算法2.在協(xié)同站點(diǎn)上的選擇性Undo方法算法

    Input. Undo request,history buffer HBi at Sitei,current Sub_DOAG(Op)

    Output. Re-evaluated geometry model

    1.Op= the identified undo target in history buffer;

    2.sub_DOAG(Op)=Op's dependency operation set;

    3.Op_Node=the object node of Op in the DOAG;

    4.i=Op_Node.SubConf_No;

    5.SubConf_Node=Op_Node.m_listSubConfPointer[i];

    6.Op_Node=the central node of the SubConf_Node;

    7.SubConf_Node=the base model of the Op_Node;

    8.while(Op_Node!=Temp_Node)

    9. if(Temp_Node is in sub_DOAG(Op_Node))

    10. delete Op_Node from DOAG;

    11. else

    12. SubConf_Node=SubConf_Node->subConfBoundaryModelPointer[i];

    13. endif

    14. Temp_Node=Op_Node->Next;

    15.endwhile

    16.Op_Node.m_listSubConfPointer[i]=SubConf_Node;

    17.combine all the exiting sub_configurations to obtain the re-evaluated boundary model;

    該算法從根節(jié)點(diǎn)進(jìn)行出發(fā)開(kāi)始遍歷,通過(guò)遍歷不同的子結(jié)構(gòu),找到目標(biāo)操作及目標(biāo)操作的子DOAG進(jìn)行撤銷,撤消目標(biāo)操作后對(duì)所剩的邊界模型進(jìn)行重構(gòu).

    算法3.在協(xié)同站點(diǎn)上的Redo算法

    Input.Redo request,history buffer HBiat sitei,current DOAGi

    Output. Re-evaluated geometry model

    1.if(Op_Node.RefDepOpPointer==NULL&&Op_Node.AtrDepOpPointer==NULL)

    2.Temp_Node=Op_Node->next;

    3.Op_Node=Temp_Node;

    4.Op_Node.m_listSubConfPointer[i]=NULL;

    5.SubConf_Node=the base model of Op_Node;

    6.subConfBoundaryModelPointer=the boundary model physical adreess of SubConf_Node;

    7.Op_Entity=new SubConf_Node();

    8.Ob_Entity.subConfBoundaryModelPointer[i]=SubConf_Node;

    9.endif

    10.if(Op_Node.RefDepOperationList!=NULL||Op_Node.AtrDepOperationList!==null)

    11.identity the operation creating the referenced topological entities;

    12.Temp_Node=the object nodes of the operation;

    13.Op_New=new SubConf_Node();

    14.Op_New->next=Temp_Node;

    15.SubConf_Node_New.subConfBoundaryModelPointer=pointer points to the new subconfiguration;

    16.if(the topological entities of Op.ReferenceEntityLis are from the base feature)

    17.i=m_listSubConfPointer.count();

    18.Op_Ref|Atri.the_i+1th_Configuration_Pointer=new SubConfiguration();

    19.Op_Ref|Atri.the_i+1th_Configuration_Pointer=Op_New;

    20.else

    21.Op_Ref|Arti.This_SubConfigurationPointer=Op.New;

    22.endif

    23.endif

    Undo/Redo的命令的目的是消除又重做某個(gè)特征,當(dāng)用戶要撤銷已經(jīng)做過(guò)的操作及該操作構(gòu)成的子結(jié)構(gòu)時(shí),又要對(duì)撤銷的目標(biāo)對(duì)象進(jìn)行重做,通過(guò)獲得撤銷操作的DOAG再更新一個(gè)新的DOAG子結(jié)構(gòu)來(lái)滿足用戶意圖,對(duì)更新后的DOAG子結(jié)構(gòu)進(jìn)行重做而不會(huì)影響其他的操作所構(gòu)成的邊界模型.

    5 算法正確性證明

    在這小部分,我們將證明提出關(guān)于選擇性Undo/Redo一致性解決方案的正確性.

    定理1.我們的選擇性Undo/Redo算法遵循do和undo意圖.

    證明:來(lái)自同一站點(diǎn)上的操作在所有站點(diǎn)上都是以相同順序執(zhí)行,所以(SiteID,Create_SEQ)能用來(lái)準(zhǔn)確地標(biāo)識(shí)要undo的目標(biāo),假如O是要撤銷的目標(biāo)操作,根據(jù)我們的算法,通過(guò)DOAG,遍歷所有的操作,找到要撤銷的目標(biāo)操作及目標(biāo)操作的sub-DOAG,所以在整個(gè)DOAG中就沒(méi)有O及O的sub-DOAG的影響.當(dāng)redo命令喚起時(shí),撤銷的目標(biāo)操作O及O的sub-DOAG被標(biāo)識(shí),再次重做.所以redo意圖得到了維護(hù).

    論點(diǎn)1.執(zhí)行過(guò)的操作都遵循因果關(guān)系.

    證明:為了證明這個(gè)論點(diǎn),我們只需要證明一個(gè)新來(lái)的模型操作的執(zhí)行不會(huì)違背已經(jīng)建立好的因果關(guān)系.

    舉DOAG{sub-DOAG1(O1),sub-DOAG2(Oi)...sub-DOAG(On)為一個(gè)例子,它相應(yīng)的歷史緩存為HB={O0,O1,O2,...On},假設(shè)已經(jīng)執(zhí)行過(guò)的操作都遵循因果關(guān)系,On+1是收到的最新的操作,如果On+1的執(zhí)行不違背已經(jīng)執(zhí)行過(guò)的操作的操作順序,那么On+1立即執(zhí)行,On+1的執(zhí)行不會(huì)對(duì)DOAG有影響.如果違背了相關(guān)的CAD模型的DOAG,然后通過(guò)DOAG,找到On+1的sub-DOAG.那么sub-DOAG(On+1)={Oi...Ok},0<=i<=k<=n,所以DOAG={sub-DOAG(O1),sub-DOAG(Oi)...sub-DOAG(On+1)...sub-DOAG(On)},sub-DOAG(On+1)是On+1的相應(yīng)的子結(jié)構(gòu).

    首先,On+1的執(zhí)行不會(huì)違背O0到Oi-1的因果順序,第二,On+1依賴{O0...Oi-1}中的一些操作,因?yàn)镺n+1是在它們之后而又獲得sub-DOAG(On+1)之前喚起的,因此,On+1執(zhí)行的因果維護(hù)得到了滿足,第三On+1與{Oi,...,On}中的操作沒(méi)有因果關(guān)系.所以它們是可以交換的,在{Oi,...On}之前喚起On+1不會(huì)違背因果關(guān)系,所以,論點(diǎn)1被證明是成立的.

    論點(diǎn)2.我們的選擇性Undo/Redo算法不會(huì)違背建立好的因果順序.

    證明:當(dāng)要撤銷一些操作,為了可以看到撤銷目標(biāo)操作過(guò)后的結(jié)果,主要需要兩步:獲得O執(zhí)行時(shí)的模型狀態(tài)并重新評(píng)估撤銷目標(biāo)操作及目標(biāo)操作的子結(jié)構(gòu)后的部分模型.

    第一步,通過(guò)遍歷DOAG獲得撤銷目標(biāo)之前的模型狀態(tài),所以在撤銷目標(biāo)操作O之前執(zhí)行過(guò)的操作都滿足因果依賴關(guān)系.第二步,重構(gòu)剩下的沒(méi)有任何關(guān)系的子結(jié)構(gòu)模型,撤銷完目標(biāo)操作后,此時(shí)將DOAG中目標(biāo)操作及目標(biāo)操作構(gòu)成的子結(jié)構(gòu)設(shè)為無(wú)效,其他的操作及相應(yīng)的子結(jié)狀態(tài)保持不變.

    定理2.我們的選擇性Undo/Redo算法滿足因果維護(hù).

    證明:根據(jù)論點(diǎn)1和論點(diǎn)2,選擇性Undo/Redo的執(zhí)行不會(huì)違背已設(shè)計(jì)好的DOAG,所以因果維護(hù)性質(zhì)得到滿足.

    定理3.通過(guò)選擇性Undo/Redo算法,模型一致性得到維護(hù).

    證明:通過(guò)正式的正確性標(biāo)準(zhǔn)和定理1和定理2,執(zhí)行選擇性Udo/Redo能維護(hù)所有站點(diǎn)上模型的一致性.

    5.1 實(shí)例分析

    對(duì)同一模型,用戶在不同的站點(diǎn)有不同的操作順序O0(0,POLYGON,1),O1(1,CYLINDER,1), O2(2,ROUNDHOLE,1),O3(0,SPIRAL-POLYGON,2), O4(1,SPIRAL-CYLINDER,2), O5(2,UNION,2),O1與O2,O3與O4是屬性依賴,用戶設(shè)計(jì)的DOAG如圖4所示,每個(gè)站點(diǎn)的執(zhí)行順序必須嚴(yán)格按照設(shè)計(jì)的DOAG來(lái)安排操作順序.

    每個(gè)站點(diǎn)上都保存DOAG,當(dāng)用戶要撤銷相應(yīng)的操作時(shí),通過(guò)DOAG能夠快速地找到目標(biāo)操作的子結(jié)構(gòu)一起撤銷,再重新調(diào)整操作順序,滿足用戶意圖.

    圖4 簡(jiǎn)單模型的DOAG圖 Fig.4 DOAG for the simple model

    在圖5示例中,站點(diǎn)0上O0,O1,O2,O3,O4,O5先后到達(dá),在站點(diǎn)1,當(dāng)O4,O3到達(dá)時(shí)與用戶地意圖相違背,由站點(diǎn)1發(fā)出Undo(O3)命令,撤銷O3及O3操作所帶的子結(jié)構(gòu),重新調(diào)整操作O3,O4的操作順 序.同樣在站點(diǎn)2,當(dāng)O2到達(dá)時(shí),與用戶期望的O1→o2相違背,當(dāng)O4到達(dá)時(shí)也同樣違背了用戶的意圖,因此要撤銷O1和O3及Sub-DOAG(O1)和Sub-DOAG(O3).根據(jù)每個(gè)站點(diǎn)上的DOAG,可以很快找到目標(biāo)操作的子結(jié)構(gòu),并對(duì)其一起撤銷.撤銷過(guò)后,對(duì)Sub-DOAG(O1)和Sub-DOAG(O3)中的操作順序重新調(diào)整,重構(gòu)邊界模型.過(guò)程如圖6及圖7所示.

    圖5 協(xié)同建模過(guò)程的例子Fig.5 Example of the collaborative modeling process

    圖6 站點(diǎn)1上撤銷O3后操作重做過(guò)程 Fig.6 Operation rearrangement process after Undo(O3) on site1

    5.2 實(shí)驗(yàn)結(jié)果討論

    圖7 站點(diǎn)2上撤銷O3和O1后操作重做過(guò)程 Fig.7 Operation re-arrangemen process after Undo(O3) and Undo(O1)on site2

    通過(guò)上面的例子,站點(diǎn)0,站點(diǎn)1和站點(diǎn)2同時(shí)對(duì)同一工件進(jìn)行設(shè)計(jì),首先用戶通過(guò)DOAG來(lái)描繪出構(gòu)成工件的操作關(guān)系圖,將DOAG存放在每個(gè)站點(diǎn)上,到達(dá)站點(diǎn)0上的操作順序是O1,O2,O3,O4,O5,此操作順序滿足用戶的設(shè)計(jì)意圖和用戶設(shè)計(jì)的DOAG,O1→O2,(O3→O4)→O5,其中O1,O2和O3,O4都屬于屬性依賴,O3,O4和O5屬于相關(guān)依賴.當(dāng)站點(diǎn)1收到遠(yuǎn)程站點(diǎn)發(fā)過(guò)來(lái)的O4,O3和O5操作時(shí),操作的執(zhí)行順序O4,O3,O5違背了用戶設(shè)計(jì)的DOAG,因此要撤銷已經(jīng)做過(guò)但不能滿足用戶意愿的操作,通過(guò)算法2和算法1找到要撤銷的目標(biāo)操作O3以及O3的依賴集,一起進(jìn)行撤銷,O3的依賴集O4,O5一起撤銷后,構(gòu)造出新的并滿足DOAG但又不會(huì)影響其他操作構(gòu)成的子模型,通過(guò)算法3進(jìn)行重做.同樣在站點(diǎn)2上,當(dāng)O2,O1到來(lái)時(shí),該操作順序也違背了O1→O2,根據(jù)算法2和算法1找到要撤銷的目標(biāo)操作O1及目標(biāo)操作的依賴集O2,一起撤消后并構(gòu)造出新的子結(jié)構(gòu)模型,通過(guò)算法3進(jìn)行重做,但又不影響其他的操作構(gòu)成的子結(jié)構(gòu),同樣,當(dāng)O4,O3,O5到來(lái)時(shí),該情況和站點(diǎn)1的情況相同,通過(guò)算法1找到要撤銷的目標(biāo)操作O3及O3的依賴集,通過(guò)算法2對(duì)目標(biāo)操作進(jìn)行撤銷,撤銷過(guò)后,通過(guò)算法3對(duì)撤銷的操作進(jìn)行重構(gòu),再對(duì)重構(gòu)后的子結(jié)構(gòu)進(jìn)行重做.最后所有站點(diǎn)上的操作順序都滿足了用戶預(yù)先設(shè)計(jì)的DOAG,每個(gè)站點(diǎn)上都存有如圖8的模型關(guān)系圖,圖9和圖10表示撤銷目標(biāo)操作后的模型關(guān)系圖,用戶可以根據(jù)剩余的邊界模型進(jìn)行重構(gòu),使得各個(gè)站點(diǎn)上所有的模型都能達(dá)到一致.維護(hù)了用戶的意圖,所有站點(diǎn)上的最后設(shè)計(jì)出的模型相同,也滿足了一致性.

    圖8 每個(gè)站點(diǎn)上簡(jiǎn)單模型的關(guān)系圖Fig.8 Simple model at each site after the collaborative modeling process

    6 結(jié) 論

    我們?cè)趶?fù)制的協(xié)同三維建模系統(tǒng)中提出了選擇性多用戶的Undo/Redo方法.通過(guò)Site ID和Lamport 狀態(tài)向量在本地站點(diǎn)和遠(yuǎn)程站點(diǎn)上標(biāo)識(shí)要Undo/Redo的目標(biāo)操作,通過(guò)Undo/Redo來(lái)實(shí)現(xiàn)維護(hù)用戶設(shè)計(jì)意圖.摘要提出在設(shè)計(jì)操作聚合結(jié)構(gòu)圖的輔助下,詳細(xì)地說(shuō)明了操作之間的關(guān)系.通過(guò)這種方式,依賴于撤銷目標(biāo)的子結(jié)構(gòu)很容易的獲得,并且也將消除目標(biāo)操作而不影響其他沒(méi)有任何關(guān)系的操作或子結(jié)構(gòu),對(duì)撤銷后的子結(jié)構(gòu)重做來(lái)維護(hù)用戶的設(shè)計(jì)意圖,使得最后模型的一致性得到了維護(hù).最后,我們的算法的正確性得到了驗(yàn)證,并在我們構(gòu)建的原型中執(zhí)行了實(shí)驗(yàn).

    圖9 在站點(diǎn)1上撤銷O3后的模型關(guān)系圖Fig.9 Simple model after undo(O3) command at site1

    圖10 在站點(diǎn)2上撤銷O3和O1后的模型關(guān)系圖Fig.10 Simple model after undo(O3) and undo(O2) command at site2

    猜你喜歡
    子結(jié)構(gòu)意圖選擇性
    Keys
    原始意圖、對(duì)抗主義和非解釋主義
    法律方法(2022年2期)2022-10-20 06:42:20
    陸游詩(shī)寫(xiě)意圖(國(guó)畫(huà))
    完全對(duì)換網(wǎng)絡(luò)的結(jié)構(gòu)連通度和子結(jié)構(gòu)連通度
    制定法解釋與立法意圖的反事實(shí)檢驗(yàn)
    法律方法(2021年3期)2021-03-16 05:56:58
    選擇性聽(tīng)力
    鋼框架腹板雙角鋼連接梁柱子結(jié)構(gòu)抗倒塌性能分析
    選擇性應(yīng)用固定物治療浮膝損傷的療效分析
    基于子結(jié)構(gòu)的柴油機(jī)曲軸有限元建模方法研究
    選擇性執(zhí)法的成因及對(duì)策
    日韩精品中文字幕看吧| 免费高清在线观看日韩| 高清毛片免费观看视频网站| 大香蕉久久成人网| 天堂影院成人在线观看| 久热爱精品视频在线9| 天天躁狠狠躁夜夜躁狠狠躁| 亚洲成av片中文字幕在线观看| 1024视频免费在线观看| 久久伊人香网站| 好看av亚洲va欧美ⅴa在| 悠悠久久av| 国产精品免费一区二区三区在线| 成人手机av| 中文字幕精品亚洲无线码一区 | 欧美不卡视频在线免费观看 | 国产伦人伦偷精品视频| 十分钟在线观看高清视频www| 看片在线看免费视频| 久久婷婷成人综合色麻豆| 国产精品免费一区二区三区在线| 男女视频在线观看网站免费 | 成人永久免费在线观看视频| 日日爽夜夜爽网站| 色播在线永久视频| 香蕉久久夜色| 日本成人三级电影网站| 男人舔女人的私密视频| 黄色 视频免费看| 欧美日本亚洲视频在线播放| 在线视频色国产色| av欧美777| 精品国产美女av久久久久小说| 亚洲激情在线av| 亚洲精品色激情综合| 免费高清在线观看日韩| 亚洲九九香蕉| 久久久久九九精品影院| 中文字幕人妻熟女乱码| 国产精品亚洲av一区麻豆| 高清在线国产一区| 午夜日韩欧美国产| 国产黄片美女视频| 欧美一区二区精品小视频在线| 女人高潮潮喷娇喘18禁视频| 国产欧美日韩一区二区三| 亚洲av日韩精品久久久久久密| 亚洲av第一区精品v没综合| 两性夫妻黄色片| 免费在线观看亚洲国产| 我的亚洲天堂| 欧美+亚洲+日韩+国产| 国产一区二区在线av高清观看| 国产熟女午夜一区二区三区| 国产亚洲精品综合一区在线观看 | 99精品欧美一区二区三区四区| 国产成人影院久久av| 国产精品永久免费网站| 侵犯人妻中文字幕一二三四区| 天堂影院成人在线观看| 亚洲成人免费电影在线观看| 国产精品,欧美在线| 俺也久久电影网| 日韩欧美国产在线观看| 久久久久久人人人人人| 久久人妻福利社区极品人妻图片| 色av中文字幕| 黄网站色视频无遮挡免费观看| 久久中文看片网| 午夜福利视频1000在线观看| 中文字幕高清在线视频| 此物有八面人人有两片| 精品免费久久久久久久清纯| 久久草成人影院| 日本熟妇午夜| 国产91精品成人一区二区三区| 日韩高清综合在线| 精品国内亚洲2022精品成人| 男人舔奶头视频| 亚洲av电影在线进入| 亚洲人成电影免费在线| 香蕉久久夜色| 久热这里只有精品99| 麻豆av在线久日| 日韩欧美国产在线观看| 动漫黄色视频在线观看| 91成年电影在线观看| 亚洲成a人片在线一区二区| 国产熟女xx| 亚洲欧美日韩无卡精品| 一边摸一边抽搐一进一小说| 亚洲人成网站高清观看| 午夜福利在线在线| 黄频高清免费视频| 国产激情久久老熟女| 国产精品1区2区在线观看.| 国产欧美日韩一区二区三| 欧美乱妇无乱码| 久久久久久久久免费视频了| av天堂在线播放| 国内毛片毛片毛片毛片毛片| 伦理电影免费视频| 97碰自拍视频| 日韩av在线大香蕉| 啦啦啦观看免费观看视频高清| 久久久久久九九精品二区国产 | 热99re8久久精品国产| 欧美日本视频| 男女做爰动态图高潮gif福利片| 桃红色精品国产亚洲av| 精品久久久久久久人妻蜜臀av| 午夜福利在线在线| 麻豆av在线久日| 50天的宝宝边吃奶边哭怎么回事| ponron亚洲| 亚洲狠狠婷婷综合久久图片| 色尼玛亚洲综合影院| 亚洲成人免费电影在线观看| 俄罗斯特黄特色一大片| 高清在线国产一区| 好男人电影高清在线观看| 极品教师在线免费播放| 级片在线观看| 精品人妻1区二区| 欧美成人性av电影在线观看| 人人澡人人妻人| 久久久久久九九精品二区国产 | 久久精品国产99精品国产亚洲性色| 天天一区二区日本电影三级| 中文字幕人妻丝袜一区二区| 少妇的丰满在线观看| 成人国产综合亚洲| 国产一区二区在线av高清观看| 国产日本99.免费观看| 欧美国产精品va在线观看不卡| 国产免费av片在线观看野外av| 亚洲成av人片免费观看| 国产免费男女视频| 国产精品一区二区三区四区久久 | 999久久久精品免费观看国产| 女性生殖器流出的白浆| 久久伊人香网站| 国产一级毛片七仙女欲春2 | 动漫黄色视频在线观看| 黄频高清免费视频| 精品国内亚洲2022精品成人| av欧美777| 禁无遮挡网站| 少妇熟女aⅴ在线视频| 国产蜜桃级精品一区二区三区| 一本一本综合久久| 亚洲一区中文字幕在线| av有码第一页| svipshipincom国产片| 亚洲一区二区三区色噜噜| 亚洲中文av在线| 在线av久久热| 少妇粗大呻吟视频| 午夜亚洲福利在线播放| 人妻丰满熟妇av一区二区三区| 人人妻,人人澡人人爽秒播| 99国产精品一区二区蜜桃av| 国产精品一区二区免费欧美| 搡老岳熟女国产| 一本久久中文字幕| 欧美日本视频| 亚洲成av片中文字幕在线观看| 亚洲人成伊人成综合网2020| 夜夜看夜夜爽夜夜摸| 精品久久久久久久毛片微露脸| 99热这里只有精品一区 | 日日摸夜夜添夜夜添小说| 午夜福利18| 在线观看午夜福利视频| 国产熟女xx| 久久人人精品亚洲av| 午夜福利免费观看在线| 色尼玛亚洲综合影院| 国产爱豆传媒在线观看 | 亚洲精品国产一区二区精华液| 亚洲熟女毛片儿| 欧美性猛交黑人性爽| 亚洲精品国产一区二区精华液| 亚洲精品中文字幕在线视频| 亚洲黑人精品在线| 亚洲国产欧美网| 午夜福利一区二区在线看| 一级作爱视频免费观看| 手机成人av网站| 国产成年人精品一区二区| 国产亚洲欧美98| 精品少妇一区二区三区视频日本电影| 久久久精品欧美日韩精品| 国内久久婷婷六月综合欲色啪| 一区二区三区高清视频在线| 亚洲五月天丁香| 成人欧美大片| 午夜免费观看网址| 精品欧美一区二区三区在线| 久久精品人妻少妇| 91国产中文字幕| 亚洲一区二区三区不卡视频| 一二三四社区在线视频社区8| 国产99久久九九免费精品| 亚洲欧美日韩无卡精品| 一进一出抽搐动态| 久久久久国产精品人妻aⅴ院| 国产成年人精品一区二区| 亚洲一区高清亚洲精品| 国产精品综合久久久久久久免费| 久久精品91无色码中文字幕| 美国免费a级毛片| 婷婷六月久久综合丁香| 人人妻人人澡人人看| 亚洲专区字幕在线| 一二三四社区在线视频社区8| 首页视频小说图片口味搜索| 免费在线观看影片大全网站| 亚洲黑人精品在线| 在线观看舔阴道视频| 国产av一区二区精品久久| 久99久视频精品免费| 国产精品乱码一区二三区的特点| 日韩三级视频一区二区三区| 国产成人啪精品午夜网站| 日韩欧美 国产精品| 大型av网站在线播放| 看免费av毛片| 在线永久观看黄色视频| 国产单亲对白刺激| 18禁观看日本| 这个男人来自地球电影免费观看| 老司机深夜福利视频在线观看| 亚洲av美国av| 午夜久久久在线观看| 欧美一区二区精品小视频在线| 亚洲精品中文字幕一二三四区| 人人澡人人妻人| 成人三级黄色视频| 国产精品美女特级片免费视频播放器 | 免费高清在线观看日韩| bbb黄色大片| 91老司机精品| 一二三四在线观看免费中文在| www日本黄色视频网| 亚洲精品中文字幕一二三四区| 成人国语在线视频| 曰老女人黄片| 午夜免费观看网址| 久久性视频一级片| 欧美国产日韩亚洲一区| 成年版毛片免费区| 在线免费观看的www视频| 最近在线观看免费完整版| 两个人看的免费小视频| 久久精品91蜜桃| 哪里可以看免费的av片| 人人妻人人澡人人看| 欧美乱码精品一区二区三区| 人人妻人人澡欧美一区二区| 久久中文字幕人妻熟女| 精品久久蜜臀av无| 人人妻,人人澡人人爽秒播| 给我免费播放毛片高清在线观看| 精品不卡国产一区二区三区| 亚洲黑人精品在线| 日韩精品中文字幕看吧| 18禁美女被吸乳视频| 看片在线看免费视频| 亚洲第一青青草原| 午夜成年电影在线免费观看| 一级a爱片免费观看的视频| 99久久国产精品久久久| 成人av一区二区三区在线看| 国产色视频综合| 欧美不卡视频在线免费观看 | 国产熟女午夜一区二区三区| 精品国产超薄肉色丝袜足j| 99久久无色码亚洲精品果冻| 国产精品乱码一区二三区的特点| 叶爱在线成人免费视频播放| 久久久久久久久中文| 美女高潮喷水抽搐中文字幕| 九色国产91popny在线| 在线观看一区二区三区| e午夜精品久久久久久久| 午夜两性在线视频| 色精品久久人妻99蜜桃| 欧美精品亚洲一区二区| 最近最新中文字幕大全免费视频| 美国免费a级毛片| 国产一区二区在线av高清观看| 国产aⅴ精品一区二区三区波| 午夜福利欧美成人| 老司机午夜福利在线观看视频| 欧美亚洲日本最大视频资源| 大香蕉久久成人网| 日本黄色视频三级网站网址| 99riav亚洲国产免费| 老熟妇乱子伦视频在线观看| 国产成人精品无人区| 成人精品一区二区免费| 女性生殖器流出的白浆| 一区二区三区国产精品乱码| 色综合站精品国产| 热re99久久国产66热| 男女床上黄色一级片免费看| 国产成人av激情在线播放| 一区二区日韩欧美中文字幕| 欧美中文综合在线视频| 国产主播在线观看一区二区| 日韩欧美在线二视频| 久久国产乱子伦精品免费另类| 国产极品粉嫩免费观看在线| 国产高清视频在线播放一区| 欧美日韩一级在线毛片| 欧美一区二区精品小视频在线| 国产亚洲av嫩草精品影院| 一二三四在线观看免费中文在| 国产成人精品久久二区二区91| 在线国产一区二区在线| 90打野战视频偷拍视频| 男男h啪啪无遮挡| 黄色视频不卡| 啦啦啦韩国在线观看视频| 国产一卡二卡三卡精品| 中文在线观看免费www的网站 | 在线观看午夜福利视频| 国产精品亚洲一级av第二区| 99riav亚洲国产免费| 国产精品免费视频内射| 中国美女看黄片| 欧美乱码精品一区二区三区| 免费高清在线观看日韩| 国产熟女xx| 亚洲av电影在线进入| 一级毛片高清免费大全| 91成年电影在线观看| 日日摸夜夜添夜夜添小说| 99在线人妻在线中文字幕| 人人澡人人妻人| 亚洲第一青青草原| 国产成人av激情在线播放| 欧美黄色片欧美黄色片| 久久久久久久久免费视频了| 天堂√8在线中文| 精品一区二区三区av网在线观看| 天堂√8在线中文| 精品国产乱子伦一区二区三区| 国产私拍福利视频在线观看| 国产又黄又爽又无遮挡在线| 美女高潮喷水抽搐中文字幕| 久久青草综合色| 亚洲av成人av| 丁香六月欧美| 亚洲狠狠婷婷综合久久图片| 久久精品亚洲精品国产色婷小说| 狠狠狠狠99中文字幕| 一本综合久久免费| а√天堂www在线а√下载| 一本大道久久a久久精品| 精品国产乱码久久久久久男人| 一本综合久久免费| 性色av乱码一区二区三区2| 女人爽到高潮嗷嗷叫在线视频| a级毛片a级免费在线| 国产1区2区3区精品| 国产三级黄色录像| 在线国产一区二区在线| 免费观看人在逋| 国产免费男女视频| 久久久久久久精品吃奶| 亚洲精品一卡2卡三卡4卡5卡| 最近最新免费中文字幕在线| 日韩中文字幕欧美一区二区| 麻豆成人午夜福利视频| 亚洲精品美女久久久久99蜜臀| 欧美一级a爱片免费观看看 | 国产av又大| 黄色 视频免费看| 久9热在线精品视频| 免费在线观看影片大全网站| 国产成人av教育| 亚洲av成人不卡在线观看播放网| 两人在一起打扑克的视频| 国产亚洲精品第一综合不卡| 午夜福利成人在线免费观看| 日韩欧美一区二区三区在线观看| 久久久久久久久免费视频了| 国产亚洲欧美在线一区二区| 国产激情欧美一区二区| 成在线人永久免费视频| 亚洲最大成人中文| 国产精品久久视频播放| 亚洲中文字幕一区二区三区有码在线看 | 香蕉av资源在线| 最新美女视频免费是黄的| 亚洲男人天堂网一区| 国产在线精品亚洲第一网站| 19禁男女啪啪无遮挡网站| 看黄色毛片网站| 日韩视频一区二区在线观看| 亚洲va日本ⅴa欧美va伊人久久| 日本a在线网址| 老司机在亚洲福利影院| 日本 欧美在线| 又紧又爽又黄一区二区| 精品欧美国产一区二区三| 一区二区三区高清视频在线| 亚洲成a人片在线一区二区| 美女大奶头视频| 国产精品久久电影中文字幕| 1024香蕉在线观看| 亚洲精品av麻豆狂野| 精品久久久久久久毛片微露脸| 美国免费a级毛片| 日日干狠狠操夜夜爽| 亚洲精品一卡2卡三卡4卡5卡| 十八禁人妻一区二区| 身体一侧抽搐| 久久久精品国产亚洲av高清涩受| 亚洲第一av免费看| 欧美大码av| 亚洲av成人av| 91九色精品人成在线观看| 99国产综合亚洲精品| 亚洲va日本ⅴa欧美va伊人久久| 国产精品久久久久久人妻精品电影| 国产精品免费视频内射| 最近在线观看免费完整版| 嫩草影视91久久| 亚洲免费av在线视频| 一级a爱片免费观看的视频| √禁漫天堂资源中文www| 91麻豆精品激情在线观看国产| 亚洲天堂国产精品一区在线| 美女高潮到喷水免费观看| 女人爽到高潮嗷嗷叫在线视频| 国产成人精品久久二区二区91| 日本成人三级电影网站| 欧美日韩福利视频一区二区| 男女那种视频在线观看| 亚洲熟妇熟女久久| 久久久久免费精品人妻一区二区 | 91在线观看av| 国产成人精品久久二区二区91| 在线观看66精品国产| 后天国语完整版免费观看| 午夜福利高清视频| 欧美一级毛片孕妇| 久久中文看片网| 国产激情偷乱视频一区二区| 一夜夜www| 变态另类成人亚洲欧美熟女| 久久香蕉激情| 午夜福利18| 国产精品 欧美亚洲| 亚洲国产欧洲综合997久久, | 老鸭窝网址在线观看| 欧美三级亚洲精品| aaaaa片日本免费| 精品国产一区二区三区四区第35| 欧美久久黑人一区二区| 日韩视频一区二区在线观看| 国产精品一区二区精品视频观看| 国产熟女午夜一区二区三区| 欧美av亚洲av综合av国产av| 国产aⅴ精品一区二区三区波| 女生性感内裤真人,穿戴方法视频| 搡老熟女国产l中国老女人| 久久久久久久精品吃奶| 日韩中文字幕欧美一区二区| 国内精品久久久久久久电影| 久久精品aⅴ一区二区三区四区| 久久精品国产99精品国产亚洲性色| 亚洲精品在线观看二区| 欧美成人免费av一区二区三区| 宅男免费午夜| 久久午夜综合久久蜜桃| 亚洲,欧美精品.| 免费在线观看日本一区| 欧美日韩乱码在线| 夜夜看夜夜爽夜夜摸| 久久久精品国产亚洲av高清涩受| av欧美777| 怎么达到女性高潮| 搡老妇女老女人老熟妇| 亚洲精品在线美女| 最新在线观看一区二区三区| 亚洲激情在线av| 一级毛片高清免费大全| 夜夜爽天天搞| 久久久久久人人人人人| 成人三级做爰电影| 亚洲精品美女久久av网站| 国产伦一二天堂av在线观看| 久久久久九九精品影院| 亚洲精品一区av在线观看| 成人18禁在线播放| 欧美性猛交黑人性爽| 老熟妇乱子伦视频在线观看| 精品熟女少妇八av免费久了| 国产不卡一卡二| 啦啦啦观看免费观看视频高清| 国内毛片毛片毛片毛片毛片| 午夜两性在线视频| 桃色一区二区三区在线观看| 久久天堂一区二区三区四区| 一级毛片高清免费大全| 亚洲五月天丁香| 男人舔女人的私密视频| 日韩欧美在线二视频| 国产一区二区激情短视频| 欧美激情久久久久久爽电影| 久久香蕉激情| 亚洲国产看品久久| 丁香六月欧美| 夜夜爽天天搞| 自线自在国产av| 日本三级黄在线观看| av有码第一页| 婷婷精品国产亚洲av| 18禁黄网站禁片午夜丰满| 日本 av在线| 国产激情偷乱视频一区二区| 一级片免费观看大全| 999久久久国产精品视频| 校园春色视频在线观看| 国产午夜精品久久久久久| 757午夜福利合集在线观看| 1024手机看黄色片| 18禁黄网站禁片免费观看直播| 91老司机精品| а√天堂www在线а√下载| 久久婷婷成人综合色麻豆| 91麻豆av在线| 亚洲熟妇熟女久久| 老熟妇乱子伦视频在线观看| 18禁黄网站禁片午夜丰满| 日韩欧美一区视频在线观看| 一级毛片高清免费大全| 视频在线观看一区二区三区| 欧美又色又爽又黄视频| 一本精品99久久精品77| 免费看美女性在线毛片视频| 亚洲中文字幕一区二区三区有码在线看 | 少妇裸体淫交视频免费看高清 | 午夜福利18| 国产精品一区二区免费欧美| 18禁美女被吸乳视频| 悠悠久久av| 国产激情久久老熟女| 视频区欧美日本亚洲| 亚洲欧美精品综合一区二区三区| 中文字幕精品亚洲无线码一区 | 亚洲av电影不卡..在线观看| 啦啦啦 在线观看视频| 欧美日韩瑟瑟在线播放| 国产真实乱freesex| 久久精品aⅴ一区二区三区四区| 热re99久久国产66热| 日韩大码丰满熟妇| 亚洲国产精品999在线| 久久青草综合色| 国产精品久久久久久人妻精品电影| 91字幕亚洲| 午夜久久久久精精品| 久久人妻福利社区极品人妻图片| 亚洲一区二区三区色噜噜| 一卡2卡三卡四卡精品乱码亚洲| 国产亚洲欧美在线一区二区| 久久国产精品影院| 女人被狂操c到高潮| 99在线人妻在线中文字幕| 国产精品99久久99久久久不卡| 日韩一卡2卡3卡4卡2021年| 国产精品免费一区二区三区在线| 不卡av一区二区三区| 午夜精品在线福利| 久久狼人影院| 国产成人精品久久二区二区免费| 一边摸一边抽搐一进一小说| 波多野结衣av一区二区av| 怎么达到女性高潮| 亚洲精华国产精华精| 亚洲美女黄片视频| 成人一区二区视频在线观看| 麻豆av在线久日| 天天躁狠狠躁夜夜躁狠狠躁| 中文字幕av电影在线播放| 1024视频免费在线观看| 欧美av亚洲av综合av国产av| 黄色毛片三级朝国网站| 久久久久国内视频| 国产精品久久久av美女十八| 真人做人爱边吃奶动态| 亚洲五月婷婷丁香| 99re在线观看精品视频| 国产成人精品久久二区二区免费| 久久性视频一级片| 男女视频在线观看网站免费 | 中文字幕另类日韩欧美亚洲嫩草| 每晚都被弄得嗷嗷叫到高潮| svipshipincom国产片| 精品国产乱码久久久久久男人| 午夜视频精品福利| 正在播放国产对白刺激| 亚洲av第一区精品v没综合| 成人国产一区最新在线观看| 男女那种视频在线观看| 免费搜索国产男女视频| 91成人精品电影| 成人欧美大片| 嫁个100分男人电影在线观看| 亚洲国产看品久久|