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

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 BRep 格式描述之一

Posted on 2013-07-20 17:48 eryar 閱讀(8004) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE4.AVEVA Solution

OpenCascade BRep Format Description

eryar@163.com

摘要Abstract:本文結(jié)合OpenCascade的BRep格式描述文檔和源程序,對BRep格式進(jìn)行分析,詳細(xì)說明BRep的數(shù)據(jù)組織形式。結(jié)合源程序,可以對OpenCascade中Modeling Data模塊中的模型數(shù)據(jù)結(jié)構(gòu)進(jìn)行理解。

關(guān)鍵字Key Words:OpenCascade, BRep Format, ModelingData

 

一、引言 Introduction

OpenCascade中的BRep格式主要用來存儲3D模型,也可用來存儲由下列元素組成的模型:vertices, edges, wires, faces, shells, solids, compsolids, compounds, edge triangulations, face triangulations, polylines on triangulations, space location and orientation.

本格式的目的就是為了便于理解,也使用了類似BNF的定義方式。以下章節(jié)都是按下面的格式組織的:

l 該部分的示例;

l 該部分的類BNF定義;

l 該部分的詳細(xì)說明;

l 該部分的源程序片段。

 

二、通用結(jié)構(gòu) Format Common Structure

BRep格式文件的讀寫采用了ASCII的編碼方式,該格式的數(shù)據(jù)都是文本形式存儲。

BRep格式使用了下面的BNF術(shù)語:

1) <\n>:換行;

2) <_\n>:

3) <_>:空格;

4) <flag>:標(biāo)志位:0和1;

5) <int>:整數(shù),范圍-231到231-1;

6) <real>:實數(shù),范圍-1.7976931348623159X10308到1.7976931348623158X10308;

7) <2D point>:二維點,兩個實數(shù);

8) <3D point>:三維點,三個實數(shù);

9) <2D direction>:二維方向矢量,兩個實數(shù),平方和為1,即為單位方向矢量;

10) <3D direction>:三維方向矢量,三個實數(shù),平方和為1,即為單位方向矢量;

11) <+>

BRep格式包含以下部分:

1) <content type>

2) <version>

3) <locations>

4) <geometry>

5) <shapes>

<content type>部分:

wps_clip_image-24015

<content type>也可以有其它的值。

<version>部分:

wps_clip_image-31719

不同版本之間的區(qū)別將會在本文檔中說明。

 

三、<locations>部分 Section <locations>

示例:

wps_clip_image-17080

BNF 定義:

wps_clip_image-6051

詳細(xì)說明:

<location data 1>定義了3X4的矩陣Q,描述了三維空間的線性變換,并滿足如下約定:

wps_clip_image-14009

矩陣Q是線性變換矩陣,它可以通過矩陣乘法將一個點(x, y, z)變換成另外一點(u, v, w):

wps_clip_image-29220

Q也可能是以下基本變換矩陣的組合:

1) 平移變換矩陣:

wps_clip_image-24401

2) 繞任意軸旋轉(zhuǎn)的變換矩陣,軸的方向為D(Dx, Dy, Dz),旋轉(zhuǎn)角度ψ:

wps_clip_image-15666

3) 縮放變換矩陣:

wps_clip_image-26692

4) 中心對稱變換矩陣:

wps_clip_image-14876

5) 軸對稱變換矩陣:

wps_clip_image-10205

6) 平面對稱變換矩陣:

wps_clip_image-24425

<location data 2>解釋為組合變換的冪。<location data 2>是整數(shù)對li, pi的序列。這個序列將被解釋為:

wps_clip_image-30280

Lli是<location record>部分的變換矩陣。

讀取<locations>部分的類為TopTools_LocationSet,程序代碼如下所示:

 1 //=======================================================================
 2 //function : Read
 3 //purpose  : 
 4 //=======================================================================
 5 void  TopTools_LocationSet::Read(Standard_IStream& IS)
 6 {
 7   myMap.Clear();
 8 
 9   char buffer[255];
10   Standard_Integer l1,p;
11 
12   IS >> buffer;
13   if (strcmp(buffer,"Locations")) {
14     cout << "Not a location table "<<endl;
15     return;
16   }
17 
18   Standard_Integer i, nbLoc;
19   IS >> nbLoc;
20   
21   TopLoc_Location L;
22   gp_Trsf T;
23     
24   //OCC19559
25   Message_ProgressSentry PS(GetProgress(), "Locations"0, nbLoc, 1);
26   for (i = 1; i <= nbLoc&& PS.More(); i++, PS.Next()) {
27     if ( !GetProgress().IsNull() ) 
28       GetProgress()->Show();
29 
30     Standard_Integer typLoc;
31     IS >> typLoc;
32     
33     if (typLoc == 1) {
34       ReadTrsf(T,IS);
35       L = T;
36     }
37 
38     else if (typLoc == 2) {
39       L = TopLoc_Location();
40       IS >> l1;
41       while (l1 != 0) { 
42     IS >> p;
43     TopLoc_Location L1 = myMap(l1);
44     L = L1.Powered(p) *L;
45     IS >> l1;
46       }
47     }
48     
49     if (!L.IsIdentity()) myMap.Add(L);
50   }
51 }


雖然代碼風(fēng)格不好,縮進(jìn)、括號什么的都不工整,看起來很吃力,但是結(jié)合源程序,對上面的詳細(xì)說明的理解還是很有幫助的。

其中變量nbLoc是<location record count>的值,成員變量myMap是TopLoc_Location的一個map。當(dāng)是<location record 1>時把<location data 1>都放到TopLoc_Location的map中。當(dāng)是<location record 2>時將li的變換矩陣TopLoc_Location乘pi次方。<flag>0表示<location data 2>的結(jié)束。

 

四、<geometry>部分

<geometry>包含以下子部分:

1.<2D curves>

2.<3D curves>

3.<3D polygons>

4.<polygons on triangulations>

5.<surfaces>

6.<triangulations>

讀取<geometry>部分的類為BRepTools_ShapeSet,程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadGeometry
 3 //purpose  : 
 4 //=======================================================================
 5 void  BRepTools_ShapeSet::ReadGeometry(Standard_IStream& IS)
 6 {
 7   //OCC19559
 8   myCurves2d.SetProgress(GetProgress());
 9   myCurves.SetProgress(GetProgress());
10   mySurfaces.SetProgress(GetProgress());
11 
12   if ( !GetProgress().IsNull()) {
13     if( GetProgress()->UserBreak() ) return;
14     GetProgress()->NewScope ( 15"2D Curves" );
15   }
16   myCurves2d.Read(IS);
17 
18   if ( !GetProgress().IsNull()) {
19     if( GetProgress()->UserBreak() ) return;
20     GetProgress()->EndScope();
21     GetProgress()->Show();
22     
23     GetProgress()->NewScope ( 15"3D Curves" );
24   }
25   myCurves.Read(IS);
26 
27   if ( !GetProgress().IsNull()) {
28     if( GetProgress()->UserBreak() ) return;
29     GetProgress()->EndScope();
30     GetProgress()->Show();
31     
32     GetProgress()->NewScope ( 10"3D Polygons" );
33   }
34   ReadPolygon3D(IS);
35   if ( !GetProgress().IsNull() ) {
36     if( GetProgress()->UserBreak() ) return;
37     GetProgress()->EndScope();
38     GetProgress()->Show();
39 
40     GetProgress()->NewScope ( 10"Polygons On Triangulation" );
41   }
42   ReadPolygonOnTriangulation(IS);
43   if ( !GetProgress().IsNull()) {
44     if( GetProgress()->UserBreak() ) return;
45     GetProgress()->EndScope();
46     GetProgress()->Show();
47     
48     GetProgress()->NewScope ( 10"Surfaces" );
49   }
50   mySurfaces.Read(IS);
51   if ( !GetProgress().IsNull() ) {
52     if( GetProgress()->UserBreak() ) return;
53     GetProgress()->EndScope();
54     GetProgress()->Show();
55 
56     GetProgress()->NewScope ( 15"Triangulations" );
57   }
58   ReadTriangulation(IS);
59   if ( !GetProgress().IsNull()) {
60     if( GetProgress()->UserBreak() ) return;
61     GetProgress()->EndScope();
62     GetProgress()->Show();
63   }
64 }


4.1 子部分<3D curves>

示例:

wps_clip_image-31062

BNF定義:

wps_clip_image-22688

詳細(xì)說明:

由Curves開始,后面是曲線的數(shù)量,再下面是每條曲線的具體數(shù)據(jù)。

讀取<curves>部分的類為GeomTools_CurveSet,程序代碼如下所示:

  1 #define LINE      1
  2 #define CIRCLE    2
  3 #define ELLIPSE   3
  4 #define PARABOLA  4
  5 #define HYPERBOLA 5
  6 #define BEZIER    6
  7 #define BSPLINE   7
  8 #define TRIMMED   8
  9 #define OFFSET    9
 10 //=======================================================================
 11 //function : ReadCurve
 12 //purpose  : 
 13 //=======================================================================
 14 Standard_IStream& GeomTools_CurveSet::ReadCurve(Standard_IStream& IS,
 15                         Handle(Geom_Curve)& C)
 16 {
 17   Standard_Integer ctype;
 18 
 19   try {
 20     OCC_CATCH_SIGNALS
 21     IS >> ctype;
 22     switch (ctype) {
 23 
 24     case LINE :
 25       {
 26         Handle(Geom_Line) CC;
 27         IS >> CC;
 28         C = CC;
 29       }
 30       break;
 31 
 32     case CIRCLE :
 33       {
 34         Handle(Geom_Circle) CC;
 35         IS >> CC;
 36         C = CC;
 37       }
 38       break;
 39 
 40     case ELLIPSE :
 41       {
 42         Handle(Geom_Ellipse) CC;
 43         IS >> CC;
 44         C = CC;
 45       }
 46       break;
 47 
 48     case PARABOLA :
 49       {
 50         Handle(Geom_Parabola) CC;
 51         IS >> CC;
 52         C = CC;
 53       }
 54       break;
 55 
 56     case HYPERBOLA :
 57       {
 58         Handle(Geom_Hyperbola) CC;
 59         IS >> CC;
 60         C = CC;
 61       }
 62       break;
 63 
 64     case BEZIER :
 65       {
 66         Handle(Geom_BezierCurve) CC;
 67         IS >> CC;
 68         C = CC;
 69       }
 70       break;
 71 
 72     case BSPLINE :
 73       {
 74         Handle(Geom_BSplineCurve) CC;
 75         IS >> CC;
 76         C = CC;
 77       }
 78       break;
 79 
 80     case TRIMMED :
 81       {
 82         Handle(Geom_TrimmedCurve) CC;
 83         IS >> CC;
 84         C = CC;
 85       }
 86       break;
 87 
 88     case OFFSET :
 89       {
 90         Handle(Geom_OffsetCurve) CC;
 91         IS >> CC;
 92         C = CC;
 93       }
 94       break;
 95       
 96     default:
 97       {
 98         Handle(Geom_Curve) CC;
 99         GeomTools::GetUndefinedTypeHandler()->ReadCurve(ctype,IS,CC);
100         C = CC;
101       }
102     }
103   }
104   catch(Standard_Failure) {
105 #ifdef DEB
106     Handle(Standard_Failure) anExc = Standard_Failure::Caught();
107     cout <<"EXCEPTION in GeomTools_CurveSet::ReadCurve(..)!!!" << endl;
108     cout << anExc << endl;
109 #endif
110     C = NULL;
111   }
112   return IS;
113 }


因為重載了操作符>>,使不同的類調(diào)用了不同的處理函數(shù)。

因為讀取點和方向用得很頻繁,所以將讀取點和方向的函數(shù)程序先列出如下所示:

 1 //=======================================================================
 2 //function : ReadPnt
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS, gp_Pnt& P)
 6 {
 7   Standard_Real X=0.,Y=0.,Z=0.;
 8   IS >> X >> Y >> Z;
 9   P.SetCoord(X,Y,Z);
10   return IS;
11 }
12 
13 //=======================================================================
14 //function : ReadDir
15 //purpose  : 
16 //=======================================================================
17 static Standard_IStream& operator>>(Standard_IStream& IS, gp_Dir& D)
18 {
19   Standard_Real X=0.,Y=0.,Z=0.;
20   IS >> X >> Y >> Z;
21   D.SetCoord(X,Y,Z);
22   return IS;
23 }


4.1.1 <3D curve record 1>-Line

示例:

wps_clip_image-789

BNF定義:

wps_clip_image-26031

詳細(xì)說明:

<3D curve record 1>定義了直線。直線數(shù)據(jù)由一個三維點P和一個三維方向矢量D組成。通過點P且方向為D的直線由下面的參數(shù)方程來定義:

wps_clip_image-10018

示例數(shù)據(jù)表示的直線為通過點P(1,0,3),方向D(0,1,0),得到的參數(shù)方程為:

wps_clip_image-14708

讀取直線部分的程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_Line)& L)
 7 {
 8   gp_Pnt P(0.,0.,0.);
 9   gp_Dir AX(1.,0.,0.);
10   IS >> P >> AX;
11   L = new Geom_Line(P,AX);
12   return IS;
13 }


 

4.1.2 <3D curve record 2>-Circle

示例:

wps_clip_image-1840

BNF定義:

wps_clip_image-13786

詳細(xì)說明:

<3D curve record 2>定義了圓。圓的數(shù)據(jù)包含一個三維點P,一個正交坐標(biāo)系的三個軸的方向N,Dx,Dy,還有一個非負(fù)的實數(shù)r。其中點P為圓心坐標(biāo),圓位于平面的法向量為N的平面上,圓的半徑為r。圓的參數(shù)方程如下所示:

wps_clip_image-24018

示例數(shù)據(jù)表示的圓為:圓心P(1,2,3),位于平面的法向量N(0,0,1),圓的方向Dx=(1,0,-0),Dy=(-0,1,0),半徑r=4,其參數(shù)方向為:

wps_clip_image-9700

讀取圓部分的程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_Circle)& C)
 7 {
 8   gp_Pnt P(0.,0.,0.);
 9   gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
10   Standard_Real R=0.;
11   IS >> P >> A >> AX >> AY >> R;
12   C = new Geom_Circle(gp_Ax2(P,A,AX),R);
13   return IS;
14 }

 

4.1.3 <3D curve record 3>-Ellipse

示例:

wps_clip_image-2176

BNF定義:

wps_clip_image-30115

詳細(xì)說明:

<3D curve record 3>定義了橢圓。橢圓的數(shù)據(jù)包含三維點P,三維正交坐標(biāo)系N、Dmaj、Dmin和兩個非負(fù)實數(shù)rmaj和rmin,且rmin<=rmaj。橢圓位于中心點P,法向量為N的平面上,且長軸、短軸的方向分別為Dmaj, Dmin,長軸、短軸上的半徑分別為rmaj, rmin。橢圓的參數(shù)方程定義如下所示:

wps_clip_image-24324

示例數(shù)據(jù)表示的橢圓的中心點P=(1,2,3),平面的法向量N=(0,0,1),長軸方向Dmaj=(1,0,-0),短軸方向Dmin=(-0,1,0),長軸半徑為5,短軸半徑為4,

wps_clip_image-378

讀取橢圓部分的程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_Ellipse)& E)
 7 {
 8   gp_Pnt P(0.,0.,0.);
 9   gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
10   Standard_Real R1=0.,R2=0.;
11   IS >> P >> A >> AX >> AY >> R1 >> R2;
12   E = new Geom_Ellipse(gp_Ax2(P,A,AX),R1,R2);
13   return IS;
14 }

 

4.1.4 <3D curve record 4>-Parabola

示例:

wps_clip_image-27513

BNF定義:

wps_clip_image-12739

詳細(xì)說明:

<3D curve record 4>定義了拋物線。拋物線數(shù)據(jù)包含三維點P,三維正交坐標(biāo)系坐標(biāo)軸方向N,Dx,Dy和一個非負(fù)的實數(shù)f。拋物線通過點P,且位于法向量為N的平面上,焦點長度為f,其參數(shù)方程如下所示:

wps_clip_image-10435

示例數(shù)據(jù)表示的拋物線過點P=(1,2,3),位于平面的法向N=(0,0,1),拋物線的另兩個軸方向Dx=(1,0,-0),Dy=(-0,1,0),焦點長度f=16。參數(shù)方程為:

wps_clip_image-8728

讀取拋物線部分的程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_Parabola)& C)
 7 {
 8   gp_Pnt P(0.,0.,0.);
 9   gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
10   Standard_Real R1=0.;
11   IS >> P >> A >> AX >> AY >> R1;
12   C = new Geom_Parabola(gp_Ax2(P,A,AX),R1);
13   return IS;
14 }

 

4.1.5 <3D curve record 5>-Hyperbola

示例:

wps_clip_image-10057

BNF定義:

wps_clip_image-24469

詳細(xì)說明:

<3D curve record 5>定義了雙曲線。雙曲線定義數(shù)據(jù)有三維點P,三維正交坐標(biāo)系坐標(biāo)軸方向為N,Dx,Dy和兩個非負(fù)實數(shù)Kx,Ky。雙曲線過P點且法向量為N的平面上,其參數(shù)方程如下所示:

wps_clip_image-19650

示例數(shù)據(jù)表示的雙曲線過點P=(1,2,3)且位于的平面的法向N=(0,0,1),其它的數(shù)據(jù)Dx=(1,0,-0),Dy=(-0,1,0),Kx=5和Ky=4。其參數(shù)方程為:

wps_clip_image-14840

讀取雙曲線部分的程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_Hyperbola)& H)
 7 {
 8   gp_Pnt P(0.,0.,0.);
 9   gp_Dir A(1.,0.,0.),AX(1.,0.,0.),AY(1.,0.,0.);
10   Standard_Real R1=0.,R2=0.;
11   IS >> P >> A >> AX >> AY >> R1 >> R2;
12   H = new Geom_Hyperbola(gp_Ax2(P,A,AX),R1,R2);
13   return IS;
14 }

 

4.1.6 <3D curve record 6>-Bezier Curve

示例:

wps_clip_image-12112

BNF定義:

wps_clip_image-18127

詳細(xì)說明:

<3D curve record 6>定義了Bezier曲線。Bezier曲線數(shù)據(jù)包含有理標(biāo)志r,曲線的次數(shù)m(degree m <= 25查看源代碼可知OpenCascade可處理的B樣條次數(shù)不超過25)和帶權(quán)的控制點(weight poles)。當(dāng)有理標(biāo)志位r=0時,weight poles就是m+1個三維點:B0,B1...Bn;當(dāng)有理標(biāo)志位r=1時,weight poles就是帶權(quán)的控制點B0 h0... Bm hm。Bi是三維點,hi是[0,m]正實數(shù),即權(quán)因子。當(dāng)有理標(biāo)志位r=0時,即不是有理Bezier曲線時,hi=1。Bezier曲線參數(shù)方程如下所示:

wps_clip_image-20081

示例數(shù)據(jù)表示的Bezier曲線是有理Bezier曲線,因其有理標(biāo)志位r=1,次數(shù)m=2,帶權(quán)控制點及權(quán)因子分別為:B0=(0,1,0),h0=4,B1=(1,-2,0),h1=5,B2=(2,3,0),h2=6。Bezier曲線的參數(shù)方程如下所示:

wps_clip_image-28443

讀取Bezier曲線部分的程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_BezierCurve)& B)
 7 {
 8   Standard_Boolean rational=Standard_False;
 9   IS >> rational;
10 
11   // poles and weights
12   Standard_Integer i=0,degree=0;
13   IS >> degree;
14 
15   TColgp_Array1OfPnt poles(1,degree+1);
16   TColStd_Array1OfReal weights(1,degree+1);
17   
18   for (i = 1; i <= degree+1; i++) {
19     IS >> poles(i);
20     if (rational)
21       IS >> weights(i);
22   }
23 
24   if (rational)
25     B = new Geom_BezierCurve(poles,weights);
26   else
27     B = new Geom_BezierCurve(poles);
28 
29   return IS;
30 }

 

4.1.7 <3D curve record 7>-B-Spline curve

示例:

wps_clip_image-16538

BNF定義:

wps_clip_image-25364

詳細(xì)說明:

<3D curve record 7>定義了B-Spline曲線。B-Spline曲線包含了有理標(biāo)志位r,曲線次數(shù)m<=25,控制點數(shù)n>=2,重節(jié)點數(shù)k,帶權(quán)控制點wieght poles和重節(jié)點multiplicity knots。

當(dāng)有理標(biāo)志位r=0時,是非有理B樣條曲線,weight poles有n個三維點B1,...,Bn;當(dāng)有理標(biāo)志位r=1時,是有理B樣條曲線,weight poles是n個帶權(quán)控制點對:B1, h1, .... Bn, hn。這里Bi表示一個三維點,hi表示一個[0,1]正實數(shù)。當(dāng)有理標(biāo)志位r=0時,hi=1。

重節(jié)點有k對u1, q1, ... uk, qk。這里ui是重復(fù)度為qi>=1的節(jié)點。

wps_clip_image-25201

B-Spline曲線的參數(shù)方程如下所示:

wps_clip_image-27883

其中Ni,j有如下的遞歸定義:

wps_clip_image-15612

wps_clip_image-8893

示例數(shù)據(jù)表示的B樣條曲線為:有理標(biāo)志位r=1,次數(shù)m=1,控制點數(shù)n=3,重節(jié)點數(shù)k=5,帶權(quán)控制點:B1=(0,1,0),h1=4,B2=(1,-2,0),h2=5,B3=(2,3,0),h3=6;重節(jié)點u1=0,q1=1,u2=0.25,q2=1,u3=0.5,q3=1,u4=0.75,q4=1,u5=1,q5=1。B-Spline曲線的參數(shù)方程如下所示:

wps_clip_image-16971

讀取B-Spline曲線部分的程序代碼如下所示:

 

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_BSplineCurve)& B)
 7 {
 8 
 9   Standard_Boolean rational=Standard_False,periodic=Standard_False;
10   IS >> rational >> periodic;
11 
12   // poles and weights
13   Standard_Integer i=0,degree=0,nbpoles=0,nbknots=0;
14   IS >> degree >> nbpoles >> nbknots;
15 
16   TColgp_Array1OfPnt poles(1,nbpoles);
17   TColStd_Array1OfReal weights(1,nbpoles);
18   
19   for (i = 1; i <= nbpoles; i++) {
20     IS >> poles(i);
21     if (rational)
22       IS >> weights(i);
23   }
24 
25   TColStd_Array1OfReal knots(1,nbknots);
26   TColStd_Array1OfInteger mults(1,nbknots);
27 
28   for (i = 1; i <= nbknots; i++) {
29     IS >> knots(i) >> mults(i);
30   }
31 
32   if (rational)
33     B = new Geom_BSplineCurve(poles,weights,knots,mults,degree,periodic);
34   else
35     B = new Geom_BSplineCurve(poles,knots,mults,degree,periodic);
36   
37   return IS;
38 }


4.1.8 <3D curve record 8>-Trimmed Curve

示例:

wps_clip_image-14622

BNF定義:

wps_clip_image-15456

詳細(xì)說明:

<3D curve record 8>定義了裁剪曲線(trimmed curve)。裁剪曲線數(shù)據(jù)包含:兩個實數(shù)umin,umax和<3D curve record>,且umin<umax。裁剪曲線是將<3D curve record>描述的曲線B限制在[umin,umax]。裁剪曲線的參數(shù)方程如下所示:

wps_clip_image-729

示例數(shù)據(jù)表示的裁剪曲線為:umin=-4,umax=5,曲線B(u)=(1,2,3)+u(1,0,0)。裁剪曲線的參數(shù)方程如下所示:

wps_clip_image-26721

讀取裁剪曲線部分的程序代碼如下所示:

 

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 
 6 static Standard_IStream& operator>>(Standard_IStream& IS,
 7                     Handle(Geom_TrimmedCurve)& C)
 8 {
 9   Standard_Real p1=0.,p2=0.;
10   IS >> p1 >> p2;
11   Handle(Geom_Curve) BC;
12   GeomTools_CurveSet::ReadCurve(IS,BC);
13   C = new Geom_TrimmedCurve(BC,p1,p2);
14   return IS;
15 }


4.1.9 <3D curve record 9>-Offset Curve

示例:

wps_clip_image-20445

BNF定義:

wps_clip_image-18525

詳細(xì)說明:

<3D curve record 9>定義了偏移曲線(offset curve)。偏移曲線的數(shù)據(jù)包含偏移距離d,偏移方向D和曲線數(shù)據(jù)<3D curve record>。偏移曲線是將<3D curve record>描述的曲線沿矢量wps_clip_image-11378偏移距離d后的結(jié)果。偏移曲線的參數(shù)方程如下所示:

wps_clip_image-18469

示例數(shù)據(jù)表示的偏移曲線為偏移距離d=2,方向D=(0,1,0),基曲線B(u)=(1,2,3)+u(1,0,0),其參數(shù)方程如下所示:

wps_clip_image-19238

讀取偏移曲線部分程序代碼如下所示:

 1 //=======================================================================
 2 //function : ReadCurve
 3 //purpose  : 
 4 //=======================================================================
 5 static Standard_IStream& operator>>(Standard_IStream& IS,
 6                     Handle(Geom_OffsetCurve)& C)
 7 {
 8   Standard_Real p=0.;
 9   IS >> p;
10   gp_Dir D(1.,0.,0.);
11   IS >> D;
12   Handle(Geom_Curve) BC;
13   GeomTools_CurveSet::ReadCurve(IS,BC);
14   C = new Geom_OffsetCurve(BC,p,D);
15   return IS;
16 }

 


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品一区视频网站| 国产视频亚洲精品| 久久久久久久久综合| 国产精品第13页| 香港久久久电影| 一区二区欧美在线| 亚洲国产精品成人精品 | 一本色道久久综合亚洲精品婷婷| 亚洲欧美变态国产另类| 日韩视频免费在线| 欧美激情亚洲国产| 91久久国产综合久久| 黄色精品免费| 国产精品护士白丝一区av| 久久精品主播| 久久国产成人| 久久久久久久综合| 免费国产一区二区| 欧美a级理论片| 亚洲国产欧美另类丝袜| 欧美一级在线播放| 亚洲欧美国产另类| 国产精品盗摄一区二区三区| 91久久精品国产91性色tv| 国产精品国产三级国产aⅴ浪潮| 久久精品亚洲精品国产欧美kt∨| 亚洲自拍偷拍色片视频| 亚洲精品一区二区三区99| 美日韩精品视频| 欧美高清视频一区二区| 久久偷窥视频| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲制服欧美中文字幕中文字幕| 亚洲免费av电影| 国产精品hd| 美女露胸一区二区三区| 久久精品亚洲一区| 国产精品乱码久久久久久| 亚洲电影免费| 久久国产精品久久精品国产| 欧美中文字幕视频| 亚洲国产成人久久综合一区| 亚洲人成7777| 国产精品av免费在线观看| 亚洲午夜av| 久久另类ts人妖一区二区| 一区二区免费看| 国产婷婷97碰碰久久人人蜜臀| 午夜在线视频观看日韩17c| 久久国产主播精品| 亚洲小说春色综合另类电影| 美女视频黄a大片欧美| 亚洲黄色一区| 欧美在线影院在线视频| 欧美日韩免费视频| 制服丝袜亚洲播放| 国产综合网站| 久久久亚洲国产天美传媒修理工| 亚洲精品一区二区三区四区高清| 欧美在线免费视屏| 欧美一区二区免费观在线| 欧美激情一区在线| 欧美国产日本韩| 久久蜜桃资源一区二区老牛 | 国产精品成人一区二区三区吃奶 | 久久se精品一区二区| 欧美成人免费在线| 亚洲第一久久影院| 亚洲欧洲av一区二区| 午夜精品视频在线观看一区二区| 一区二区三区精密机械公司| 麻豆成人在线| 91久久香蕉国产日韩欧美9色| 韩日成人av| 久久影视三级福利片| 欧美激情精品久久久六区热门 | 欧美伊久线香蕉线新在线| 你懂的视频一区二区| 久久精品一区蜜桃臀影院| 国产欧美精品在线播放| 性做久久久久久久久| 亚洲欧美日韩视频二区| 国产精品剧情在线亚洲| 欧美一激情一区二区三区| 欧美成人蜜桃| 久久精品日产第一区二区三区| 最新亚洲电影| 国产一区二区主播在线| 欧美1区2区| 欧美在线免费| 日韩午夜在线电影| 亚洲国产精品福利| 国产日产亚洲精品| 欧美成人69| 亚洲综合国产精品| 久久综合九九| 亚洲欧美不卡| 亚洲视频播放| 亚洲久色影视| 亚洲观看高清完整版在线观看| 噜噜噜噜噜久久久久久91| av不卡在线| 亚洲狠狠婷婷| 久久亚洲二区| 久久丁香综合五月国产三级网站| 亚洲欧美日韩在线综合| 亚洲最新在线| 日韩亚洲欧美在线观看| 亚洲美女诱惑| 亚洲视频欧美在线| 性欧美精品高清| 久久精品国产精品| 乱人伦精品视频在线观看| 久久中文在线| 国产免费观看久久黄| 亚洲第一在线综合网站| 亚洲欧洲一区二区在线播放| 久久av在线| 欧美岛国激情| 亚洲另类在线视频| 国模吧视频一区| 在线亚洲免费| 欧美成人一区二区三区在线观看 | 久久久久九九九九| 裸体一区二区| 国产精品丝袜白浆摸在线| 一区二区亚洲| 欧美影院精品一区| 亚洲国产日韩欧美在线图片| 宅男精品导航| 欧美日韩免费一区二区三区| 国产性猛交xxxx免费看久久| 一本综合精品| 亚洲国产精品一区二区www| 欧美一区亚洲一区| 国产精品第2页| 亚洲综合好骚| 亚洲乱码国产乱码精品精可以看 | 国产精品视频精品| 亚洲永久视频| 亚洲一区视频在线观看视频| 性做久久久久久久免费看| 亚洲国产成人高清精品| 欧美主播一区二区三区| 国产欧美欧洲在线观看| 久久久久国产精品厨房| 免费成人av在线| 亚洲人成毛片在线播放| 亚洲经典三级| 国产精品网红福利| 久久视频在线免费观看| 国产精品久久久爽爽爽麻豆色哟哟 | 亚洲一区二区三区视频播放| 久久激情一区| 亚洲伊人伊色伊影伊综合网| 欧美激情欧美狂野欧美精品 | 久久国产视频网| 国产伦精品一区二区三区照片91 | 一区二区三区日韩欧美| 一区二区三区**美女毛片| 欧美激情在线狂野欧美精品| 亚洲国产成人精品视频| 亚洲国产一二三| 欧美精品在线视频| 99成人免费视频| 性欧美暴力猛交69hd| 好吊日精品视频| 老色鬼精品视频在线观看播放| 免费观看成人| 一区二区av| 国产精品私人影院| 久久久之久亚州精品露出| 亚洲国产高清自拍| 亚洲综合99| 在线日韩中文字幕| 免费人成网站在线观看欧美高清| 亚洲日本中文| 久久精品国产2020观看福利| 黄色一区二区在线| 欧美日韩中文在线| 久久精品女人天堂| 亚洲精品一区二区网址 | 亚洲国产精品高清久久久| 亚洲欧美日韩一区在线观看| 激情伊人五月天久久综合| 欧美日韩一区二区欧美激情| 亚洲欧美日韩国产精品| 另类专区欧美制服同性| 亚洲一区二区三区在线视频| 国产真实久久| 欧美日韩精品免费观看视一区二区 | 欧美一区二区三区免费视| 伊人男人综合视频网| 欧美日韩在线观看视频| 另类专区欧美制服同性| 亚洲视频axxx| 亚洲国产另类久久精品| 久久久噜噜噜久久| 午夜影视日本亚洲欧洲精品| 一区二区三区 在线观看视频|