青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

OpenCascade Tcl vs. ACIS Scheme

Posted on 2014-01-19 12:57 eryar 閱讀(3795) 評論(7)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

OpenCascade Tcl vs. ACIS Scheme

eryar@163.com

摘要Abstract:本文通過OpenCascade的Tcl/Tk和ACIS的Scheme的對比來說明腳本語言在程序中的重要作用。及通過在Tcl中實現(xiàn)自定義的命令來理解Draw Test Harness的實現(xiàn),在此基礎(chǔ)上更有利于對OpenCascade的理解,其中Draw Test Harness一些命令的實現(xiàn)可以做為程序?qū)崿F(xiàn)的參考。

關(guān)鍵字Key Words:OpenCascade, Tcl/Tk, ACIS, Scheme, Test

一、引言 Introduction

解釋型的語言為程序開發(fā)提供了快速原型方法,由于是解釋型的程序開發(fā)語言,所以用它編寫的程序不需要編譯和鏈接就可以在解釋器中直接運行,用這種方式可以快速驗證一些想法,用來測試程序等。

解釋型的腳本開發(fā)語言有很多,流行的有Python、Tcl/Tk、Perl、Lua、LISP、Javascript等等。在應(yīng)用程序中嵌入這些腳本語言,方便程序的擴展,用戶可以根據(jù)需要對程序進行定制。像應(yīng)力分析軟件Abaqus中就使用了Python對其進行二次開發(fā);繪圖軟件AutoCAD中可使用AutoLISP對其進行二次開發(fā);造船軟件KCS Tribon中也使用了Python;AVEVA Marine/Plant中使用了PML;許多游戲程序中使用了Lua等等。程序有了腳本這個二次開發(fā)的強有力工具,軟件開發(fā)者只需要關(guān)注核心領(lǐng)域,其它各種客戶化的需求,可以通過這些腳本來實現(xiàn),既能滿足用戶花樣繁多的需求,也可確保程序質(zhì)量。

ACIS對Scheme的擴展為Scheme解釋器提供了調(diào)用ACIS內(nèi)部函數(shù)和訪問ACIS內(nèi)部數(shù)據(jù)的功能,其中,每個Scheme函數(shù)都調(diào)用相應(yīng)的ACIS C++函數(shù)。開發(fā)者可以利用Scheme來熟悉ACIS的基本功能、測試某些思想或者產(chǎn)生應(yīng)用程序原型。Scheme語言的初學(xué)者可以通過它來熟悉和掌握ACIS的Scheme程序開發(fā)方法。

OpenCascade中使用Tcl/Tk來實現(xiàn)的Draw Test Harness提供了交互創(chuàng)建、顯示和修改形狀的功能。可以編寫Tcl的腳本來自定義Draw或者實現(xiàn)程序的自動化測試。

本文通過OpenCascade的Tcl/Tk和ACIS的Scheme的對比來說明腳本在程序中的重要作用。及通過在Tcl中實現(xiàn)自定義的命令來理解Draw Test Harness的實現(xiàn),在此基礎(chǔ)上更有利于對OpenCascade的理解,其中一些命令的實現(xiàn)代碼可以做為程序?qū)崿F(xiàn)的參考。

二、ACIS Scheme

ACIS中的Scheme接口是一些函數(shù)的集合,基于Scheme的應(yīng)用程序可以通過這些函數(shù)調(diào)用ACIS的API、類的公共成員函數(shù)及訪問ACIS的數(shù)據(jù)。ACIS系統(tǒng)中含有一個Scheme解釋器,Scheme應(yīng)用程序就在這個解釋器上運行,所以該解釋器負責(zé)Scheme應(yīng)用程序與ACIS系統(tǒng)之間的通信。ACIS中的Scheme解釋器是按Elk版的Scheme語言規(guī)則設(shè)計的,它被用來解釋Scheme命令并調(diào)用相關(guān)的C++代碼。

wps_clip_image-23561

Figure 2.1 Scheme and ACIS

Scheme的多功能性來自解釋器語言的可擴展能力。應(yīng)用程序開發(fā)者可以快速地將Scheme語言用于自己的開發(fā)任務(wù),他們可以用C++擴展Scheme,然后就可以利用這些擴展寫可解釋執(zhí)行的Scheme過程。開發(fā)者也可以構(gòu)造特殊的Scheme數(shù)據(jù)類型和相應(yīng)的操作方法,Scheme應(yīng)用程序和C++函數(shù)可以使用這些自定義的Scheme數(shù)據(jù)類型。

wps_clip_image-2462

Figure 2.2 ACIS Scheme pipeline

與C++相比Scheme是一種快速程序設(shè)計語言。盡管C++語言有很多優(yōu)點,但是也不得承認它的復(fù)雜性,例如要用C++開發(fā)ACIS應(yīng)用程序,需要包含所需的組件頭文件并在程序中初始化這些組件,除此之外還要進行復(fù)雜的程序調(diào)試,所以使用C++開發(fā)應(yīng)用程序的速度就受到較大影響。與其相反,Scheme可以進行交互式程序開發(fā),一段程序或一個命令的執(zhí)行結(jié)果會及時反映出來,正是這種機制使我們可以利用Scheme語言進行快速的程序開發(fā)。雖然Scheme不能替代C++成為主要的軟件開發(fā)工具,但是在開發(fā)一個軟件系統(tǒng)之前可以利用它進行算法的測試。

Scheme語言與C++語言相比有三個特點:沒有指針、不需要頭文件及可進行交互式程序設(shè)計,程序員可以在解釋器中立即執(zhí)行這些程序,從這個特點來看Scheme更像Basic和Prolog等程序設(shè)計語言。

在ACIS中使用Scheme來生成一個立方體的命令如下所示:

acis>(solid:block(position -10-10-10) (position 101010)) 
# [entity 
1 0

上述命令生成一個正方體,總共調(diào)用兩個ACIS Scheme過程position和solid:block,#[entity 1 0]是該正方體的默認名稱。

wps_clip_image-7598

Figure 2.3 The block made by ACIS Scheme

三、OpenCascade Tcl

Tcl是一種用于控制和擴展應(yīng)用程序的動態(tài)語言,也稱為腳本語言。它的名字代表“工具命令語言”Tool Command Language。Tcl提供的通用編程能力可以滿足大多數(shù)應(yīng)用程序的需要。而且Tcl既是可嵌入的(embeded),也是可擴展的(extensible)。它的解釋器是一個C函數(shù)庫,可以很容易地整合到應(yīng)用程序中;而任何一個應(yīng)用程序都可以通過增加命令來擴展Tcl內(nèi)核的功能。Tcl最有用的一個擴展就是Tk,這是一個用于開發(fā)圖形用戶界面(Graphical User Interface, GUI)應(yīng)用程序的工具集。Tk擴展了Tcl內(nèi)核的功能,增加了構(gòu)建用戶界面的命令,使您可以使用Tcl腳本來構(gòu)建圖形用戶界面,而不必寫C代碼。

Tcl/Tk一起為應(yīng)用程序開發(fā)者和使用者提供了很多好處。首先是快速開發(fā)。很多有意思的程序完全可以用Tcl腳本編寫。這使您可以在比C/C++或Java更高的層次上進行開發(fā),Tk隱藏了C或Java程序員必須關(guān)心的很多細節(jié)。與低級工具相比,使用Tcl/Tk所需要學(xué)習(xí)的知識更少,需要編寫的代碼更少。通過幾個小時的學(xué)習(xí),Tcl/Tk新手用戶就可以創(chuàng)建有意思的用戶界面,很多開發(fā)人員從其他工具集轉(zhuǎn)而使用Tcl/Tk工具集后,應(yīng)用程序開發(fā)所需的代碼數(shù)量和開發(fā)時間都減少了90%。

Tcl/Tk適于快速開發(fā)的另一個原因在于Tcl是解釋型語言。使用Tcl應(yīng)用程序時,可以在運行中生成和使用新的腳本,而無需重新編譯和重啟程序。這使您可以迅速嘗試新的想法,迅速修正程序中的錯誤。因為Tcl是解釋型語言,它的運行速度比C程序慢。但是通過內(nèi)部優(yōu)化,與編譯語言相比的大部分性能差距都可以消除。例如,您可以運行有數(shù)百條Tcl命令的腳本,鼠標的每一次移動都不會有能感知的延遲。在一些特別的場合,當性能成為重要問題時,可以把Tcl腳本中影響性能的部分替換為C代碼。

Tcl的第二個好處是在于它是跨平臺的語言,它的大多數(shù)擴展包括Tk也是如此。這意味著在一個平臺(如Linux)上開發(fā)的程序,在大多數(shù)情況下可以不加改動地在另一個平臺上運行,如在Macintosh或Windows上運行。

Tcl還是第一種擁有原生Unicode支持的動態(tài)語言。因此,Tcl可以處理這個世界上幾乎所有的書面語言。Tcl無需擴展就可以處理Unicode支持的所有文本。

使用Tcl的另一個顯著優(yōu)點在于它和它的大多數(shù)擴展都是免費的開源軟件。Tcl和Tk遵循BSD授權(quán),允許所有人免費下載、查看、修改及再發(fā)布。

Tcl是一種絕妙的“膠合語言”,可以讓應(yīng)用程序很容易地擁有強大的腳本語言功能。例如,要為一個已經(jīng)存在的應(yīng)用程序添加腳本能力,只需要實現(xiàn)幾條新的Tcl命令,用來為應(yīng)用程序提供相應(yīng)的基本功能。然后再把您的新命令和Tcl庫鏈接起來生成全功能的腳本語言,該語言就包含了Tcl提供的命令(稱為Tcl內(nèi)核)和您編寫的那些命令。

Tcl還為用戶提供了方便。一旦學(xué)習(xí)了Tcl/Tk,就能為任何Tcl/Tk應(yīng)用程序編寫腳本,只需要學(xué)習(xí)該應(yīng)用程序特有的少數(shù)幾條命令即可。這使得更多的用戶有能力對應(yīng)用程序進行個性化改造和強化。

在Tcl中實現(xiàn)自定義命令很方便,只需要按Tcl的格式定義一個命令函數(shù)。基于對象的命令函數(shù)的聲明如下:

typedef int (Tcl_ObjCmdProc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, int objc, struct Tcl_Obj * CONST * objv)); 

為了能在Tcl中調(diào)用一個命令函數(shù),必須先調(diào)用Tcl_CreateObjCommand注冊它,格式如下所示:

EXTERN Tcl_Command Tcl_CreateObjCommand (Tcl_Interp * interp,  CONST char * cmdName, Tcl_ObjCmdProc * proc, ClientData clientData,  Tcl_CmdDeleteProc * deleteProc); 

這就是把Tcl中的字符串與實現(xiàn)它的C函數(shù)關(guān)聯(lián)起來“魔術(shù)”。更詳細內(nèi)容請參考:《Create New Commands in Tcl》。下面主要來分析一下Draw Test Harness代碼實現(xiàn):

首先在Draw_PInterp.hxx中將Tcl_Interp定義為*Draw_PInterp,并在類Draw_Interpretor中對Tcl解釋器進行了簡單封裝,在Init時創(chuàng)建一個新的Tcl_Interp,并可管理自定義的命令;

然后,在Draw_Main中來加載Tcl的解析器。程序代碼如下所示:

 

// Declarations of macros DRAW_MAIN to be used in executables instead of explicit main/WinMain
#ifndef WNT
// main()
#define DRAW_MAIN int main (Standard_Integer argc, char* argv[])\
{
return _main_ (argc, argv, Draw_InitAppli);}
#else
// WinMain() and main()
#define DRAW_MAIN Standard_Integer PASCAL WinMain (HINSTANCE hInstance, HINSTANCE hPrevinstance, LPSTR lpCmdLine, Standard_Integer nCmdShow)\
{
return _WinMain_ (hInstance, hPrevinstance, lpCmdLine, nCmdShow, Draw_InitAppli);}\
\
int main (int argc, char* argv[], char* envp[])\
{
return _main_ (argc, argv, envp, Draw_InitAppli);}  
#endif

自定義了main函數(shù),實現(xiàn)如下所示:

 

//=======================================================================
//function : _main_
//purpose  : 
//=======================================================================
Standard_Integer _main_ (int argc, char* argv[], char* envp[], const FDraw_InitAppli fDraw_InitAppli)
{
  Draw_IsConsoleSubsystem 
= Standard_True;
  
//return _WinMain_(::GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW, fDraw_InitAppli);
  theDraw_InitAppli = fDraw_InitAppli;
  
//ParseCommandLine(GetCommandLine());

  
// MKV 01.02.05
#if ((TCL_MAJOR_VERSION > 8) || ((TCL_MAJOR_VERSION == 8) && (TCL_MINOR_VERSION >= 4)))
  Tcl_FindExecutable(argv[
0]);
#endif

  Draw_Appli(::GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW, fDraw_InitAppli);
  
return 0;

}

Draw Test Harness中自定義的命令是通過類Draw_Commands來添加的,程序如下所示:

void Draw::Commands(Draw_Interpretor& theCommands)
{
  Draw::BasicCommands(theCommands);
  Draw::VariableCommands(theCommands);
  Draw::GraphicCommands(theCommands);
  Draw::PloadCommands(theCommands);
  Draw::UnitCommands(theCommands);
}

分別對應(yīng)的定義文件為:

l Draw_BasicCommands.cxx:基本命令;

l Draw_VariableCommands.cxx:變量命令;

l Draw_GraphicCommands.cxx:圖形命令;

l Draw_PloadCommands.cxx:加載命令;

l Draw_UnitCommands.cxx:單位命令;

如可以打開Draw_BasicCommands可以看到OpenCascade定義了哪些基本命令,我發(fā)現(xiàn)一個查看OpenCascade編譯時的配置信息的命令dversion:

wps_clip_image-25219

運行結(jié)果如下圖所示:

wps_clip_image-19115

Figure 3.1 dversion command in Draw Test Harness

由上圖可知編譯OpenCascade時的相關(guān)配置信息,如版本號、使用了哪些第三方庫、編譯器類型及版本、系統(tǒng)類型x86/AMD64、操作系統(tǒng)等等。

wps_clip_image-298

Figure 3.2 The OS OpenCascade supported

由上圖可知OpenCascade可識別的操作系統(tǒng)涵蓋發(fā)當今主流的操作系統(tǒng),如Windows、Mac OS、Android、Linux等。

最后以一個實現(xiàn)光線追蹤的腳本來演示一下使用腳本的靈活性,Tcl腳本如下所示:

 

# Script reproducing creation of bottle model as described in OCCT Tutorial
pload MODELING VISUALIZATION
puts 
"Writing \"eryar@163.com\""
box body 
0 0 0 130 20 8
# define text Courier Consolas
text2brep text2d eryar@
163.com Times-Roman 18 bold composite=0
#text2brep text2d eryar@
163.com Consolas 18 bold composite=0
#text2brep text2d eryar@
163.com Courier 18 bold composite=0
prism text text2d 
0 0 2
ttranslate text 
4 5 6

# cut operation
bcut bodytext body text
ttranslate text 
0 20 0

puts 
"Showing result"
# display result
vdisplay bodytext
vdisplay text
vzfit
vfit
vsetdispmode 
1
# set ray tracing
if { [regexp {HAVE_OPENCL} [dversion]] } {
    puts 
"Trying raytrace mode"
    
if { ! [catch {vraytrace 1}] } {
        vtextureenv on 
1
        vfit
    }
}

腳本實現(xiàn)了在一個box上cut掉文本后的光線跟蹤效果,如下圖所示:

wps_clip_image-6133

Figure 3.3 Ray Tracing Rendering by Tcl

理解了Tcl的作用之后,我認為OpenCascade提供的最快速的的開發(fā)方式應(yīng)該就是全部使用Tcl/Tk來開發(fā)程序。利用OpenCascade已經(jīng)定義好的命令,包括操作ApplicationFramework的自定義命令。在此基礎(chǔ)上,使用Tk來實現(xiàn)GUI及用戶交互操作,這樣開發(fā)程序事辦功倍,而且還可提供用戶二次開發(fā)功能,即使用Tcl/Tk來對程序進行二次開發(fā),擴展能力強。

四、結(jié)論 Conclusion

造型程序中引入腳本語言的共同優(yōu)點有:腳本語言是解釋執(zhí)行,不需要編譯鏈接,可以即時驗證一些想法。還可使用腳本來執(zhí)行自動化測試,保證算法質(zhì)量。便于擴展,提供用戶二次開發(fā)的工具。

與ACIS的Scheme相比,OpenCascade的Tcl/Tk有著明顯的優(yōu)勢。其中最明顯的就是源代碼開放,可以通過查看源程序,來完全理解腳本的實現(xiàn)。而這在ACIS中是不可能的。

理解如何在Tcl實現(xiàn)自定義的命令后,可以查看OpenCascade在Draw Test Harness中相關(guān)程序的實現(xiàn)方法,對學(xué)習(xí)一些造型算法的使用還是很有幫助的。

五、后記 Postscript

在曹金鳳《Python語言在Abaqus中的應(yīng)用》的序言一中看到這樣一段話:“我還想順便談一個體會:同50年前有限元方法出現(xiàn)的時代相比,現(xiàn)在有了大量有效的計算力學(xué)軟件。既然已經(jīng)有了大家公認的很優(yōu)秀的分析平臺,研究者不應(yīng)再奮力去開發(fā)具有競爭力的新軟件了,而應(yīng)當把精力花在基于這些平臺進行二次開發(fā)上面了。從科學(xué)技術(shù)共同體的角度去思考,這應(yīng)當是如今計算力學(xué)軟件研發(fā)的最佳策略。”——隋允康于北京工業(yè)大學(xué)。

對于這段話的大部分內(nèi)容是贊同的,即站在巨人的肩上才能看得更遠。但縱觀當今力學(xué)分析的CAE軟件優(yōu)秀的大都是國外產(chǎn)品,如ANSYS、Abaqus、COADE.CAESAR、MSC/PATRAN、ADINA等等,而國內(nèi)同類產(chǎn)品鮮有耳聞。原因可能是CAE軟件的開發(fā)涉及的知識很多,需要計算機圖形學(xué)、軟件工程、力學(xué)、數(shù)學(xué)等等多學(xué)科知識的結(jié)合,所以開發(fā)具有自主知識產(chǎn)權(quán)的CAE軟件也是國家科技實力的一個表現(xiàn)。若只是在外國人的平臺上二次開發(fā),總是會受制于人。也許有些狹隘,如今世界已然是個地球村,科學(xué)無國界。

六、參考資料 References

1. Tcl and the Tk Toolkit

2. Practical Programming in Tcl and Tk

3. Tcl/Tk A Developer’s Guide

4. http://sourceforge.net/projects/tcl/

5. http://www.tcl.tk/

6. 詹海生等, 基于ACIS的幾何造型技術(shù)與系統(tǒng)開發(fā), 清華大學(xué)出版社, 2002

7. 曹金鳳, 王旭春, 孔亮. Python語言在Abaqus中的應(yīng)用. 機械工業(yè)出版社, 2011

致謝:
    感謝王婷讓我接觸到ABAQUS這個軟件。

Feedback

# re: OpenCascade Tcl vs. ACIS Scheme  回復(fù)  更多評論   

2014-01-19 16:22 by 王婷
不明覺厲…

# re: OpenCascade Tcl vs. ACIS Scheme  回復(fù)  更多評論   

2014-02-12 02:41 by louql
博主很有毅力啊,堅持學(xué)習(xí)OpenCASCADE這么長時間,佩服!
不知博主的專業(yè)方向是做什么的,CAE?

# re: OpenCascade Tcl vs. ACIS Scheme  回復(fù)  更多評論   

2014-02-12 13:10 by eryar
@louql
過獎啦。

一是興趣,喜歡寫點代碼;
二是朋友們的交流、鼓勵,及實際應(yīng)用,可以用OpenCascade解決些實際問題,很有成就感。

本來學(xué)的是輪機工程,現(xiàn)在做造船CAD程序開發(fā)。

# re: OpenCascade Tcl vs. ACIS Scheme  回復(fù)  更多評論   

2014-10-11 17:56 by BugWang
樓主我想問問如何入手OPENCASCADE,我是想找一些關(guān)于這些類的example(示例代碼)但是找了好久沒找到,他的tutorial上面倒是有一個制作水壺的例子,但是我的任務(wù)要做的東西和tutorial差太多不知道如何下手。。好糾結(jié)啊,周圍每一個人用過這個東西,求如何入門。。

# re: OpenCascade Tcl vs. ACIS Scheme  回復(fù)  更多評論   

2014-10-11 19:00 by eryar
@BugWang
Hi Wang,

你好!

可以從最簡單的Hello World!程序入門,從而體驗一下occ的編碼風(fēng)格,再慢慢深入。

Hello World的示例程序如下:
http://m.shnenglu.com/eryar/archive/2013/08/22/202708.html

# re: OpenCascade Tcl vs. ACIS Scheme  回復(fù)  更多評論   

2015-06-29 17:34 by fast
我還想順便談一個體會:同50年前有限元方法出現(xiàn)的時代相比,現(xiàn)在有了大量有效的計算力學(xué)軟件。既然已經(jīng)有了大家公認的很優(yōu)秀的分析平臺,研究者不應(yīng)再奮力去開發(fā)具有競爭力的新軟件了,而應(yīng)當把精力花在基于這些平臺進行二次開發(fā)上面了。從科學(xué)技術(shù)共同體的角度去思考,這應(yīng)當是如今計算力學(xué)軟件研發(fā)的最佳策略。”

當年運十就是這么下馬的

# re: OpenCascade Tcl vs. ACIS Scheme  回復(fù)  更多評論   

2015-06-29 19:16 by eryar
@fast

哦,剛google運十了解了下,可惜啊!
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久理论片午夜琪琪电影网| 亚洲人成人一区二区在线观看| 亚洲一区免费网站| 欧美夫妇交换俱乐部在线观看| 欧美一区二区成人6969| 欧美一区二区三区播放老司机| 欧美亚洲一区在线| 欧美制服丝袜第一页| 羞羞色国产精品| 欧美中在线观看| 老司机午夜精品| 欧美va亚洲va日韩∨a综合色| 亚洲高清久久网| 美女精品在线观看| 91久久久亚洲精品| 亚洲午夜三级在线| 欧美伊人久久久久久午夜久久久久| 欧美诱惑福利视频| 猛男gaygay欧美视频| 欧美久久久久久久久| 国产精品嫩草99av在线| 伊人精品久久久久7777| 99在线视频精品| 久久精品国产91精品亚洲| 欧美成人自拍| 亚洲一区二区精品在线观看| 久久成人精品视频| 国产精品久久久久免费a∨大胸| 亚洲已满18点击进入久久| 欧美日韩无遮挡| 亚洲欧美在线看| 国产精品揄拍500视频| 久久伊人亚洲| 国产自产在线视频一区| 亚洲第一天堂av| 91久久精品国产91久久| 亚洲一区在线免费| 久久久精品国产免大香伊| 欧美黄色视屏| 欧美一级久久久| 欧美日韩综合视频网址| 亚洲第一精品福利| 欧美在线免费视屏| 一区二区精品在线观看| 欧美顶级大胆免费视频| 怡红院精品视频在线观看极品| 亚洲网址在线| 91久久在线播放| 久久国产精品久久国产精品| 国产精品乱码一区二区三区| 99精品国产福利在线观看免费| 久久综合国产精品| 欧美一区二区三区四区视频| 国产精品久久久久久av福利软件| 亚洲精品一区二区三区不| 久久午夜影视| 久久精品成人| 狠狠久久亚洲欧美专区| 久久久91精品国产一区二区三区| 亚洲欧美日韩国产综合| 国产精品欧美在线| 亚洲欧美日韩精品综合在线观看| 亚洲日本激情| 欧美精品一区二区三区在线看午夜| 亚洲国产日韩欧美综合久久 | 久久午夜羞羞影院免费观看| 国产精品一二三四区| 亚洲欧美www| 亚洲午夜伦理| 国产精品一区二区三区四区五区| 香蕉久久夜色精品国产| 欧美一区二区三区在线视频 | av成人免费观看| 亚洲激情网址| 欧美视频一区二区在线观看| 亚洲综合视频1区| 亚洲影院在线观看| 国产一二精品视频| 欧美风情在线观看| 欧美激情一区在线| 亚洲尤物在线视频观看| 亚洲欧美视频一区| 亚洲国产精品高清久久久| 亚洲区一区二| 国产精品毛片大码女人| 久久青草久久| 欧美精品乱人伦久久久久久| 亚洲女同在线| 久久久亚洲一区| av成人黄色| 欧美一级专区| 日韩亚洲一区二区| 亚洲人屁股眼子交8| 欧美大片一区二区三区| 欧美激情中文字幕在线| 午夜视频久久久| 久久综合色88| 先锋亚洲精品| 欧美va天堂va视频va在线| 亚洲欧美激情视频| 另类酷文…触手系列精品集v1小说| 中国女人久久久| 久久精品视频在线观看| 一本色道久久99精品综合| 久久国产色av| 亚洲一区二区欧美| 麻豆精品精华液| 亚欧成人精品| 欧美日本成人| 欧美成人精品一区| 国产日韩欧美一区二区三区四区| 亚洲国产精品热久久| 国产自产2019最新不卡| 中日韩美女免费视频网站在线观看| 在线观看日韩一区| 香蕉精品999视频一区二区| 中日韩男男gay无套| 免费观看久久久4p| 久久免费国产精品| 国产欧美日韩亚洲精品| 一本大道av伊人久久综合| 亚洲国产精品一区二区www在线| 午夜在线a亚洲v天堂网2018| 亚洲综合999| 欧美全黄视频| 亚洲日本中文字幕免费在线不卡| 伊大人香蕉综合8在线视| 午夜在线观看欧美| 午夜精品免费在线| 国产精品久久久久久超碰| 99精品福利视频| 99pao成人国产永久免费视频| 久久视频免费观看| 久久综合久久综合九色| 黑丝一区二区三区| 久久久久久精| 蜜臀av性久久久久蜜臀aⅴ四虎| 国内精品写真在线观看| 性亚洲最疯狂xxxx高清| 久久激情五月丁香伊人| 国产美女搞久久| 欧美一级免费视频| 久久天天躁狠狠躁夜夜爽蜜月| 国产一区二区激情| 久久精品一二三区| 欧美福利视频一区| 亚洲乱码视频| 欧美日韩国产首页在线观看| 一区二区三区欧美| 久久精品一区二区三区中文字幕| 国产亚洲毛片| 久久夜精品va视频免费观看| 亚洲国产精品久久人人爱蜜臀 | 欧美高清视频| 亚洲国产一区二区a毛片| 午夜久久久久久| 在线观看日产精品| 欧美一区二区三区免费观看视频 | 久久色中文字幕| 欧美激情精品久久久久久久变态| 最新日韩精品| 国产精品扒开腿做爽爽爽视频| 亚洲欧美日韩电影| 欧美激情在线| 亚洲欧美在线一区二区| 狠狠色丁香久久婷婷综合丁香| 欧美777四色影视在线| 在线视频免费在线观看一区二区| 久久久精品性| 99re亚洲国产精品| 国产三区精品| 欧美激情一区二区| 亚洲欧美日韩另类精品一区二区三区 | 午夜精品久久久久久久白皮肤 | 亚洲影音先锋| 欧美黄色免费网站| 欧美在线观看日本一区| 最新中文字幕亚洲| 国产日本欧美一区二区三区| 欧美高清视频| 欧美一区永久视频免费观看| 91久久一区二区| 久久性天堂网| 亚洲伊人伊色伊影伊综合网| 亚洲第一区色| 国产日韩一区在线| 欧美日韩免费观看一区三区| 久久精品视频免费播放| 在线视频精品一区| 最近看过的日韩成人| 狂野欧美性猛交xxxx巴西| 午夜国产精品影院在线观看 | 一本大道久久a久久综合婷婷| 国产综合视频在线观看| 国产精品人人爽人人做我的可爱| 欧美国产综合| 欧美成人精品一区二区| 久久精品国产69国产精品亚洲| 在线一区二区三区四区五区| 亚洲精品国产精品久久清纯直播 |