OCC類基礎(chǔ)參考模板_第1頁(yè)
OCC類基礎(chǔ)參考模板_第2頁(yè)
OCC類基礎(chǔ)參考模板_第3頁(yè)
OCC類基礎(chǔ)參考模板_第4頁(yè)
OCC類基礎(chǔ)參考模板_第5頁(yè)
已閱讀5頁(yè),還剩40頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一直在用OCC作項(xiàng)目,但這方面的中文資料很少,看來OCC在中國(guó)還不是十分普及;后來,項(xiàng)目中使用OCC和DirectX結(jié)合使用,取得了很好的效果; 隨著OCC6.3版本的推出,Open CASCADE在速度方面已有了很大的改變。以下為一些OCC的基礎(chǔ)知識(shí),愿與各位OCC愛好者共同學(xué)習(xí);一:OCC中的基礎(chǔ)類:gp_Pnt在OCC中,gp_Pnt表示一個(gè)頂點(diǎn),gp_Vec表示一個(gè)向量,可以用兩個(gè)頂點(diǎn)來生成一個(gè)向量。比如:gp_Pnt P1(0,0,0);           

2、60;           gp_Pnt P2(5,0,0);                       gp_Vec V1 (P1,P2);向量有一個(gè)方法.IsOpposite(),可以用來測(cè)試兩個(gè)向量的方向是相對(duì)還是平行;比如:  &

3、#160;                                     gp_Pnt P3(-5,0,2);gp_Vec V2 (P1,P3);      &

4、#160;                                   Standard_Boolean result =V1.IsOpposite(V2,Precision:Angular(); 另外向量還有一些重要方法:-Sta

5、ndard_Real Magnitude() const;計(jì)算向量的大?。?Standard_Real SquareMagnitude() const;計(jì)算向量的平方;-向量的加減乘除操作;-向量的單位化;-通過一個(gè)點(diǎn),線,面得出其鏡像的向量;-向量的旋轉(zhuǎn),平移,縮放;具體的函數(shù)名稱可以看OCC的頭文件說明; 有時(shí)需要決定一組空間點(diǎn)是位于一個(gè)點(diǎn);一條直線,或一個(gè)平面,或一個(gè)空間:OCC中提供了相應(yīng)的算法;比如:TColgp_Array1OfPnt array (1,5); / sizing array       

6、          array.SetValue(1,gp_Pnt(0,0,1);                                array.SetValue(2,

7、gp_Pnt(1,2,2);                                array.SetValue(3,gp_Pnt(2,3,3);          

8、60;                     array.SetValue(4,gp_Pnt(4,4,4);                       &#

9、160;        array.SetValue(5,gp_Pnt(5,5,5);                                1 / 45   &

10、#160;                                                 &

11、#160;           GProp_PEquation PE (array,1.5 );                                 

12、;                                                  

13、;             if (PE.IsPoint()    /是否是同一個(gè)點(diǎn)   gp_Lin L;                          

14、                             if (PE.IsLinear()   L = PE.Line();     /是否位于一條直線上;       

15、0;            if (PE.IsPlanar()      /是否在一個(gè)平面內(nèi); if (PE.IsSpace()     gp_Dir類:此類用來描述3D空間中的一個(gè)單位向量;常用方法:(1):IsEqual(const gp_Dir& Other,const Standard_Real AngularTolerance) const;兩個(gè)單位向量是否相

16、等;(2):IsNormal(const gp_Dir& Other,const Standard_Real AngularTolerance) const;兩個(gè)單位向量的夾角是否是PI/2;(3):IsOpposite(const gp_Dir& Other,const Standard_Real AngularTolerance) const;兩個(gè)單位向量是否方向相反;(4):IsParallel(const gp_Dir& Other,const Standard_Real AngularTolerance) const;兩個(gè)單位向量夾角O或PI;(5):Angl

17、e(const gp_Dir& Other) const;求兩個(gè)向量之間的夾角;(6):void CrossCross(const gp_Dir& V1,const gp_Dir& V2) ;計(jì)算三個(gè)向量之間的叉積;(7):Standard_Real Dot(const gp_Dir& Other) const;計(jì)算點(diǎn)積;(8):Standard_Real DotCross(const gp_Dir& V1,const gp_Dir& V2) const;計(jì)算叉積再點(diǎn)積;(9):gp_Dir Reversed() const;得到反方向,

18、0;在OCC中用 gp_Lin2d 類,來生成一個(gè)二維空間的直線,有它的原點(diǎn)和單位向量; gp_Ax2d 類:通過原點(diǎn)和X方向單位和Y方向單位建立一個(gè)二維坐標(biāo)系;利用sense參數(shù)可以決定是右手系還是左手系;可以利用平移、旋轉(zhuǎn)、縮放、鏡像來更改坐標(biāo)系;類似地,gp_Ax3類:用來描述一個(gè)3D空間的坐標(biāo)系。而gp_Ax2類用來表示一個(gè)二維空間坐標(biāo)系;可以為右手系,也可以是左手系; 二、曲線類GeomAPI和GeomConvert包:GeomAPI開發(fā)包提供了一個(gè)幾何體的可編程應(yīng)用程序接口;比如:求點(diǎn)P和曲線C的距離D: D = Geom

19、API_ProjectPointOnCurve(P,C);或者GeomAPI_ProjectPointOnCurve PonC(P,C);  D = PonC.LowerDistance(); GeomConvert包提供了一些全局函數(shù),可以用來實(shí)現(xiàn)轉(zhuǎn)化一個(gè)Geom曲線為BSpline曲線等;比如:Handle(Geom_BSplineSurface) aPipeSurface =               

20、60;            Handle(Geom_BSplineSurface):DownCast(aPipe.Surface();       Handle(Geom_BSplineSurface) anotherBSplineSurface =             &

21、#160;     GeomConvert:SplitBSplineSurface(aPipeSurface,1,2,3,6); OCC中三維幾何曲線的類型有:-線-園-橢圓-二次曲線-拋物線-Bezier曲線-BSpline曲線可以將一個(gè)二維的幾何曲線轉(zhuǎn)化為某個(gè)平面內(nèi)的一個(gè)三維曲線:比如:Standard_Real radius = 5;                

22、60;              gp_Ax2d ax2d(gp_Pnt2d(2,3),gp_Dir2d(1,0);             /生成一個(gè)二維園              &#

23、160;                                       Handle(Geom2d_Circle) circ2d = new Geom2d_Circle(ax2d,radius);

24、                                                  

25、                          gp_Ax2d circ2dXAxis = circ2d->XAxis();                 &

26、#160;                                                 &

27、#160;    / 然后,在這個(gè)平面里轉(zhuǎn)化為三維曲線;                 Handle(Geom_Curve) C3D = GeomAPI:To3d(circ2d,gp_Pln(gp_Ax3(gp:XOY();   Handle(Geom_Circle) C3DCircle = Handle(Geom_Circle):DownCas

28、t(C3D);                                                 

29、;                       gp_Ax1 C3DCircleXAxis = C3DCircle->XAxis();                   &

30、#160;                                               另外,可以以將一個(gè)三維曲線

31、,投影到一個(gè)平面內(nèi),從而生成一個(gè)二維曲線gp_Pln ProjectionPlane(gp_Pnt(1,1,0),gp_Dir( 1,1,1 );                                      

32、;                   Handle(Geom2d_Curve) C2D = GeomAPI:To2d(C3D,ProjectionPlane);                    

33、0;                                  Handle(Geom2d_Circle) C2DCircle =Handle(Geom2d_Circle):DownCast(C2D);    &

34、#160;           gp_Ax2d C2DCircleXAxis = C2DCircle->XAxis(); 將一個(gè)基本幾何圖形進(jìn)行空間變換可以使用它自帶的函數(shù):比如:Handle(Geom_Geometry) aRotatedEntity  = circle->Rotated(gp:OZ(),PI/4);如果想獲取圖形的類型名稱:        

35、60;   Standard_CString aRotatedEntityTypeName = aRotatedEntity->DynamicType()->Name(); gp_Parab2d類:描述一個(gè)平面內(nèi)的拋物線;示例:gp_Pnt2d P(2,3);                        

36、 gp_Dir2d D(4,5);                         gp_Ax22d A(P,D);                  

37、0;      gp_Parab2d Para(A,6); GCE2d_MakeParabola類:生成一個(gè)拋物線圖形; Geom2d_BSplineCurve類:描述樣條曲線; Geom2dAPI_Interpolate類:通過一組點(diǎn)來修改一個(gè)樣條曲線; FairCurve_Batten類:用一個(gè)常量或線性增加的值來構(gòu)造曲線;可以用來設(shè)計(jì)木紋或塑料板條;圖形為二維的,可以模擬物理樣條或板條.Geom2d_TrimmedCurve類:此類通過兩個(gè)值,定義曲線的一部分,-可以用來計(jì)算曲線

38、的參數(shù)值和點(diǎn)坐標(biāo);-可以得到曲線的一般特征,比如連續(xù)的等級(jí),封閉特點(diǎn),周期性,邊界參數(shù);-當(dāng)用一個(gè)矩陣應(yīng)用于曲線或原始曲線轉(zhuǎn)化后進(jìn)行相應(yīng)參數(shù)的改變;所有的曲線必須幾何連續(xù),曲線至少一階可導(dǎo)。一般來說,在生成一個(gè)曲線時(shí),要先檢查一下所應(yīng)用的參數(shù)是否可以生成一個(gè)光滑曲線;否則會(huì)出現(xiàn)錯(cuò)誤;另外注意一點(diǎn):不可以構(gòu)造空長(zhǎng)度的曲線或自相交的曲線;此類的基類是Geom2d_BoundedCurve類:它是一個(gè)抽象類;描述二維空間中的邊界曲線的一般行為;除了Geom2d_TrimmedCurve是它的一個(gè)派生類外,它還有二個(gè)派生類:- Geom2d_BezierCurve- Geom2d_BSplineCur

39、veGeom2d_BoundedCurve類的基類是Geom2d_Curve類:Geom2d_Curve:抽象類;此抽象類描述了2D空間的曲線的一般特征;派生出的類有多個(gè):包括直線,園,二次曲線,Bizier,BSpline曲線等;這些曲線的特點(diǎn)是可以參數(shù)化; Geom2d_Curve類的基類是Geom2d_Geometry類;此抽象類主要定義了曲線的變換,平移,旋轉(zhuǎn),縮放及拷貝等方法; Geom2d_Geometry類的基類是MMgt_TShared類;此抽象類為管理對(duì)象的基類,可以引用計(jì)數(shù),及刪除方法; Standard_Transient:此抽象類為所有類共

40、同的基類;Geom2dAPI_InterCurveCurve類:此類用來實(shí)現(xiàn)二維曲線的相交;一種情況是曲線與曲線的相交,另外一種情況是曲線自身的相交;主要方法有:-Standard_Integer NbPoints() const;相交點(diǎn)數(shù);-Standard_Integer NbSegments() const;切線相交數(shù);-void Segment(const Standard_Integer Index,Handle(Geom2d_Curve)& Curve1,Handle(Geom2d_Curve)& Curve2)const;返回其中一個(gè)線段; 下面的示例是

41、兩個(gè)曲線相交的例子:首先,生成第一個(gè)曲線,在這里,應(yīng)用點(diǎn)數(shù)組來生成一個(gè)曲線;-定義數(shù)組Handle(TColgp_HArray1OfPnt2d) harray =  new TColgp_HArray1OfPnt2d (1,5); / sizing harray              -輸入點(diǎn)數(shù)組的值harray->SetValue(1,gp_Pnt2d (0,0);     

42、                           harray->SetValue(2,gp_Pnt2d (-3,1);                

43、0;              harray->SetValue(3,gp_Pnt2d (-2,5);                             &#

44、160;  harray->SetValue(4,gp_Pnt2d (2,9);                                harray->SetValue(5,gp_Pnt2d (-4,14);  

45、0;                            -檢測(cè)一下點(diǎn)與點(diǎn)之間是否為同一點(diǎn);0.01為公差值,依實(shí)際需要可以更改此參數(shù);               &

46、#160;                                                 G

47、eom2dAPI_Interpolate anInterpolation(harray,Standard_False,0.01); -生成曲線anInterpolation.Perform();                                 

48、       Handle(Geom2d_BSplineCurve) SPL = anInterpolation.Curve();          -第二個(gè)曲線用兩點(diǎn)來生成                     &#

49、160;                                              gp_Pnt2d P1(-1,-2);g

50、p_Pnt2d P2(0,15);gp_Dir2d V1 = gp:DY2d();                                          Handle(

51、Geom2d_TrimmedCurve) TC1=  GCE2d_MakeSegment(P1,V1,P2);                                     -下面進(jìn)行曲線的求交

52、60;                                                 

53、60;              Standard_Real tolerance = Precision:Confusion();                  Geom2dAPI_InterCurveCurve ICC (SPL,TC1,tolerance); &

54、#160;-得到交點(diǎn)               Standard_Integer NbPoints =ICC.NbPoints();                          gp

55、_Pnt2d PK;                                                &#

56、160;      for (Standard_Integer k = 1;k<=NbPoints;k+)                                   

57、0;                                                 

58、0;     PK = ICC.Point(k);                                         

59、0;        / 針對(duì)每個(gè)交點(diǎn),進(jìn)行相應(yīng)處理;                                      &

60、#160;                                              Geom2d_OffsetCurve類

61、:此類用來實(shí)現(xiàn)偏移曲線;比如:-生成一個(gè)曲線TColgp_Array1OfPnt2d array (1,5); / sizing array                     array.SetValue(1,gp_Pnt2d (-4,0); array.SetValue(2,gp_Pnt2d (-7,2); array.SetValue(3,gp_Pnt2d (-6,3

62、); array.SetValue(4,gp_Pnt2d (-4,3); array.SetValue(5,gp_Pnt2d (-3,5);                                    Handle(Ge

63、om2d_BSplineCurve) SPL1 = Geom2dAPI_PointsToBSpline(array);    -生成一個(gè)偏移曲線                                  

64、0;                                  Standard_Real dist = 1;            

65、;                                   Handle(Geom2d_OffsetCurve) OC =         

66、0;                                    new Geom2d_OffsetCurve(SPL1,dist);        

67、                     Standard_Boolean result = OC->IsCN(2);  GccAna_Pnt2dBisec類此類實(shí)現(xiàn)兩點(diǎn)之間的等分線.示例:gp_Pnt2d P1(1,2);           gp_P

68、nt2d P2(4,5);           gp_Lin2d L;                 GccAna_Pnt2dBisec B(P1,P2); if (B.IsDone()          &

69、#160;   L = B.ThisSolution(); 因?yàn)樗傻臑橹本€,所以顯示時(shí)要轉(zhuǎn)化為線段:if (B.IsDone()                 Handle(Geom2d_TrimmedCurve) aLine = GCE2d_MakeSegment(L,-8,8);        Handle(ISess

70、ion2D_Curve) aCurve = new ISession2D_Curve(aLine);        aDoc->GetISessionContext()->Display(aCurve, Standard_False);      gce_MakeCirc2d類用來創(chuàng)建園:創(chuàng)建園的方法很多,主要構(gòu)造方法有:-園心和通過的一點(diǎn);-通過一個(gè)園和一個(gè)距離值,創(chuàng)建一個(gè)同心園;-三點(diǎn)決定一個(gè)園;-園心和半徑;gp_Elips2d類:可以生

71、成一個(gè)橢園,也可以生成橢園上的一段園弧;比如:Standard_Real major = 12;                                          

72、     Standard_Real minor = 4;                                         

73、      gp_Ax2d axis = gp:OX2d();                                        

74、;     gp_Elips2d EE(axis,major,minor);                                       

75、60;  Handle(Geom2d_TrimmedCurve) arc = GCE2d_MakeArcOfEllipse(EE,0.0,PI/4); 上面是利用長(zhǎng)短軸的方法構(gòu)造橢圓,也可以用二次方程的方式來構(gòu)造橢園;其中橢園類中方法可以求出焦點(diǎn)1和焦點(diǎn)2的位置,兩焦點(diǎn)之間的位置,離心率;旋轉(zhuǎn),平移,縮放等操作. 三、關(guān)于面的類gp_Pln類:定義一個(gè)平面,構(gòu)造的方法可以是點(diǎn)法式,或通過ABCD系數(shù);另外,還提供了一些常用的方法,比如:-求點(diǎn)到平面,線到平面,平面與平面的距離及平方距離;-點(diǎn)是否在平面內(nèi),線是否在平面內(nèi);-通過一個(gè)點(diǎn),一個(gè)軸的鏡像平面;-

76、平面的旋轉(zhuǎn),縮放與平移;Geom_ElementarySurface類:此類用來描述一個(gè)表面,此類的派生類有:平面;園柱面;錐面;球面;園環(huán)面;它的基類是Geom_Surface,是一個(gè)抽象類;Geom_Surface類的基類是Geom_Geometry類; Geom_RectangularTrimmedSurface類:用來生成一個(gè)有邊界的平面;比如:Handle(Geom_Plane) aProjectionPlane = GC_MakePlane(ProjectionPlane).Value();    Handle(Geom_Recta

77、ngularTrimmedSurface) aProjectionPlaneSurface=        new Geom_RectangularTrimmedSurface(aProjectionPlane,-8.,8.,-12.,12.);       DisplaySurface(aDoc,aProjectionPlaneSurface);此類的基類是Geom_BoundedSurface類;此類的兄弟類還有- Geom_BezierSu

78、rface,- Geom_BSplineSurfaceConicalSurface類:用來創(chuàng)建一個(gè)園錐表面;構(gòu)造表面的方法有:-已知一個(gè)園錐表面,和空間一點(diǎn),過此點(diǎn)的平行于已知園錐表面;-已知一個(gè)園錐表面,和一個(gè)距離,創(chuàng)建一個(gè)平行于已知園錐表面的園錐表面;-通過四個(gè)點(diǎn)構(gòu)造一個(gè)園錐表面;-通過一個(gè)軸和兩個(gè)點(diǎn);-通過兩個(gè)點(diǎn)和兩個(gè)半徑;GeomAPI_IntCS類:此類用來計(jì)算一個(gè)園弧和和一個(gè)表面的交點(diǎn)或相交線段;GeomFill_BSplineCurves類:此類用來構(gòu)造一個(gè)可以填充的BSpline表面,構(gòu)造它可以用兩個(gè)三個(gè)或四個(gè)BSpline曲線作為邊界;填充類型有三種:enum GeomFil

79、l_FillingStyle  GeomFill_StretchStyle,GeomFill_CoonsStyle,GeomFill_CurvedStyle;以下示例為用兩個(gè)樣條曲線生成一個(gè)表面:GeomFill_FillingStyle Type = GeomFill_StretchStyle;                        &#

80、160;         GeomFill_BSplineCurves aGeomFill1(SPL1,SPL2,Type);                                

81、   Handle(Geom_BSplineSurface)    aBSplineSurface1 = aGeomFill1.Surface();GeomFill_Pipe類:此類用來構(gòu)造一個(gè)pipe,沿著一個(gè)路徑sweep一個(gè)截面,這兩個(gè)都是曲線類型;一般來說,結(jié)果是一個(gè)BSpline表面;常見的有幾種方法:-給定一個(gè)路徑和一個(gè)半徑,截面是個(gè)園,位置是路徑的第一個(gè)點(diǎn),比如:GeomFill_Pipe aPipe(SPL1,1);        

82、;                              aPipe.Perform();                 &

83、#160;                                Handle(Geom_Surface) aSurface= aPipe.Surface();         &#

84、160;         Standard_CString aSurfaceEntityTypeName="Not Computed"           if (!aSurface.IsNull()               

85、                               aSurfaceEntityTypeName = aSurface->DynamicType()->Name(); -給定一個(gè)路徑和一個(gè)截面。比如:Handle(Geom_Ellipse) E = GC_M

86、akeEllipse( gp:XOY() ,3,1).Value(); GeomFill_Pipe aPipe2(SPL1,E);                                     aPipe2.P

87、erform();                                                

88、60;Handle(Geom_Surface) aSurface2= aPipe2.Surface();                  Standard_CString aSurfaceEntityTypeName2="Not Computed"          if (!aSurface2.

89、IsNull()                                             aSurfaceEntityTypeName

90、2 = aSurface2->DynamicType()->Name();       aSurface2->Translate(gp_Vec(5,0,0);   -給定一個(gè)路徑和兩個(gè)截面,中間截面為過度線;示例:Handle(Geom_TrimmedCurve) TC1 =                 &

91、#160;                     GC_MakeSegment(gp_Pnt(1,1,1),gp_Pnt(5,5,5);                  Handle(Geom_Trimme

92、dCurve) TC2 =                                       GC_MakeSegment(gp_Pnt(1,1,0),gp_Pnt(4,5,6); 

93、0;                GeomFill_Pipe aPipe3(SPL1,TC1,TC2);                            

94、;   aPipe3.Perform();                                            

95、     Handle(Geom_Surface) aSurface3 = aPipe3.Surface();                Standard_CString aSurfaceEntityTypeName3="Not Computed"          

96、;if (!aSurface3.IsNull()                                              

97、                                                  

98、               aSurfaceEntityTypeName3 = aSurface3->DynamicType()->Name();            aSurface3->Translate(gp_Vec(10,0,0);     

99、0;                                              -給定一個(gè)路徑和N個(gè)截面,中間為過渡線;一般

100、情況下,所生結(jié)果為:NURBS,但是,在一些特殊的情況下,可以生成平面,園柱,球,園錐等;參數(shù),U,沿著截面的方向,V沿著路徑方向;Geom_BezierSurface類:生成一個(gè)Bezier表面;Geom_OffsetSurface類:用來偏移一個(gè)表面;比如:Standard_Real offset = 1;                        

101、                               Handle(Geom_OffsetSurface) GOS = new Geom_OffsetSurface(aGeomSurface, offset);Geom_SweptSurface類:有兩個(gè)派生類,分別用來生成一個(gè)回轉(zhuǎn)

102、體表面和一個(gè)延展體表面; Geom_SurfaceOfLinearExtrusion:用來描述一個(gè)線性延展表面;它的基類是:Geom_Surface類比如:Handle(Geom_BSplineCurve) aCurve =GeomAPI_PointsToBSpline(array).Curve();               gp_Dir aDir(1,2,3);      

103、;                                 Handle(Geom_SurfaceOfLinearExtrusion) SOLE =new Geom_SurfaceOfLinearExtrusion(aCurve,aDir); 

104、0;     Handle(Geom_RectangularTrimmedSurface) aTrimmedSurface =new Geom_RectangularTrimmedSurface(SOLE,-10,10,false); Geom_SurfaceOfRevolution類,表示一個(gè)回轉(zhuǎn)體表面;比如:Handle(Geom_BSplineCurve) aCurve = GeomAPI_PointsToBSpline(array).Curve();      

105、60;  Handle(Geom_SurfaceOfRevolution) SOR =new Geom_SurfaceOfRevolution(aCurve,gp:OX();     1:利用一個(gè)二維數(shù)組來生成曲面的方法:TColgp_Array2OfPnt array3 (1,5,1,5);                   

106、0;      array3.SetValue(1,1,gp_Pnt (-4,-4,5);.array3.SetValue(2,1,gp_Pnt (-2,-4,4);.Handle(Geom_BSplineSurface) aSurf2 =GeomAPI_PointsToBSplineSurface(array3).Surface(); 2:GeomAPI_ExtremaSurfaceSurface類:計(jì)算兩個(gè)表面之間的極值點(diǎn);主要方法:(1):Quantity_Length LowerDistance() const;計(jì)算

107、兩個(gè)表面的最短距離;(2):Standard_EXPORT   void LowerDistanceParameters(Quantity_Parameter& U1,Quantity_Parameter& V1,Quantity_Parameter& U2,Quantity_Parameter& V2) const;得到第一個(gè)表面上的極值點(diǎn)的UV參數(shù)和第二個(gè)表面上的極值點(diǎn)的UV參數(shù);(3):void NearestPoints(gp_Pnt& P1,gp_Pnt& P2) const;得到第一個(gè)表面上的極值點(diǎn)和第二

108、個(gè)表面上的極值點(diǎn);(4): Quantity_Length Distance(const Standard_Integer Index) const;得到第N個(gè)極值點(diǎn)的距離;(5):Standard_Integer NbExtrema() const;極值的數(shù)目;.示例:GeomAPI_ExtremaSurfaceSurface ESS(aSurf1,aSurf2);Quantity_Length dist = ESS.LowerDistance();gp_Pnt P1,P2;ESS.NearestPoints(P1,P2); gp_Pnt P3,P4;Handle(Geom_Cur

109、ve) aCurve;Standard_Integer NbExtrema = ESS.NbExtrema();for(Standard_Integer k=1;k<=NbExtrema;k+)    ESS.Points(k,P3,P4);                          

110、               aCurve= GC_MakeSegment(P3,P4).Value();    DisplayCurve(aDoc,aCurve,Quantity_NOC_YELLOW3,false);一些OCC的基礎(chǔ)知識(shí),愿與各位OCC愛好者共同學(xué)習(xí);mail:tongabcd 一:關(guān)于體的類BRepBuilderAPI_MakeVertex類創(chuàng)建點(diǎn); BRepBui

111、lderAPI_MakeEdge類此類用來創(chuàng)建邊;比如,由直線生成邊:gp_Lin line(gp_Ax1(gp_Pnt(10,10,10),gp_Dir(1,0,0);       WhiteEdge = BRepBuilderAPI_MakeEdge(line,-20,10);下面為生成四分之一園邊:gp_Elips Elips(gp_Ax2(gp_Pnt(10,0,0),gp_Dir(1,1,1),60,30);       RedEdge = BR

112、epBuilderAPI_MakeEdge(Elips,0,PI/2);下面是由曲線生成邊:Handle (Geom_BezierCurve) curve = new Geom_BezierCurve(array);BRepBuilderAPI_MakeEdge ME (curve);GreenEdge = ME;V3 = ME.Vertex1();V4 = ME.Vertex2(); BRepBuilderAPI_MakeWire類用來創(chuàng)建一個(gè)Wire類; 用一個(gè)Wire和一個(gè)邊來生成一個(gè)新的Wire:ExistingWire = BRepBuilderAPI_MakeW

113、ire(Edge2);       Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(-300,0,-80),gp_Pnt(-90,20,-30);       BRepBuilderAPI_MakeWire MW1(ExistingWire,Edge3);       if (MW1.IsDone() YellowWire = MW1;用一個(gè)Wire和添加邊

114、的方法來生成Wire:BRepBuilderAPI_MakeWire MW;       MW.Add(ExistingWire2);       MW.Add(Edge5);       MW.Add(Edge6);       MW.Add(Edge7);     

115、  if (MW.IsDone()               WhiteWire = MW.Wire();              LastEdge = MW.Edge();          &

116、#160;   LastVertex = MW.Vertex();        BRepBuilderAPI_MakeFace類生成一個(gè)面;有多種生成面的方法;-通過一個(gè)封閉曲線生成面:BRepBuilderAPI_MakeFace(curve);-通過一個(gè)Wire生成面:BrownFace = BRepBuilderAPI_MakeFace(YellowWire);Bnd_Box2d類:定義一個(gè)二維空間的邊界盒,可以得出邊界盒各個(gè)點(diǎn)的值,有時(shí),在某個(gè)方向是無限大,這種情況下,稱為在

117、此方向上是開放的;示例:Bnd_Box2d aCBox;                                                   Geom2dAdaptor_Curve GACC (C);          

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論