日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OCCT示例学习笔记3--Modeling项目

發(fā)布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OCCT示例学习笔记3--Modeling项目 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

OCCT的版本是7.6.0. Modeling項目,代碼學習記錄。

OCCT示例學習筆記3--Modeling項目

      • 1、點鏡像
      • 2、軸鏡像
      • 3、旋轉效果
      • 4、縮放效果
      • 5、移動效果
      • 6、軸坐標位移效果
      • 7、移動效果
      • 8、各種基礎模型顯示
      • 9、各種元素的旋轉建模
      • 10、pipe的建模
      • 11、thru的建模
      • 12、進化形狀的建模
      • 13、錐形變換
      • 14、布爾運算
      • 15、截面運算
      • 16、平面的截面運算
      • 17、倒角運算
      • 18、復雜倒角的建模
      • 19、倒直角的建模
      • 20、草圖拉伸
      • 21、拔模棱鏡的建模
      • 22、旋轉的建模
      • 23、管道的建模
      • 24、肋或凹槽的建模
      • 25、局部粘合的建模
      • 26、局部切割的建模
      • 27、局部抽殼的建模
      • 28、偏移的建模
      • 29、vertex的建模
      • 30、edge的建模
      • 31、wire的建模
      • 32、Face的建模
      • 33、Shell的建模
      • 34、Compound的建模
      • 35、縫合的建模
      • 36、手動的建模
      • 37、基本幾何建模
      • 38、子圖形顯示
      • 39、檢查形狀是否“正確”
      • 40、曲線長度、質心和慣性矩陣
      • 41、曲面的面積、質心和慣性矩陣
      • 42、實體的體積、質心和慣性矩陣
      • 43、edge修補建模(有點難懂。暫時略)
      • 44、OnFillwithtang建模(有點難懂。暫時略)

1、點鏡像

在void CModelingDoc::OnMirror() 函數(shù)中。
顯示效果如下:

應用的類如下:

  • BRepPrimAPI_MakeWedge類;上圖顯示的綠色梯形
  • Geom_CartesianPoint類;點Geom_Point的實現(xiàn)類。
  • AIS_Point類,顯示點的類,上圖中間的黃色十字。
  • gp_Trsf類,設置鏡像移動。
  • BRepBuilderAPI_Transform類;移動變換。

2、軸鏡像

在void CModelingDoc::OnMirroraxis()函數(shù)中。
顯示效果如下:

應用的類如下:

  • gp_Ax1類,描述軸的類
  • Geom_Axis1Placement類;描述 3D 空間中的軸。
  • AIS_Axis類,顯示軸的類。

3、旋轉效果

在void CModelingDoc::OnRotate()函數(shù)中。
顯示效果如下:

應用的類如下:
上面都有了。略

4、縮放效果

在void CModelingDoc::OnScale()函數(shù)中。
顯示效果如下:

應用的類如下:
上面都有了。略

5、移動效果

在void CModelingDoc::OnTranslation()函數(shù)中。
顯示效果如下:

應用的類如下:
ISession_Direction類,AIS_InteractiveObject類的子類,顯示移動軸。

6、軸坐標位移效果

在void CModelingDoc::OnDisplacement()函數(shù)中。
顯示效果如下:

應用的類如下:
通過設置軸來設置位移效果。

gp_Ax3 ax3_1(gp_Pnt(0,0,0),gp_Dir(0,0,1));gp_Ax3 ax3_2(gp_Pnt(60,60,60),gp_Dir(1,1,1));gp_Trsf theTransformation;theTransformation.SetDisplacement(ax3_1, ax3_2);

7、移動效果

在void CModelingDoc::OnDeform()函數(shù)中。
顯示效果如下:

應用的類如下:

  • BRepBuilderAPI_GTransform類
  • gp_GTrsf類,定義 3D 空間中的非持久變換
  • gp_Mat類
gp_GTrsf theTransformation;gp_Mat rot(5, 0, 0, 0, 3, 0, 0, 0, 1);theTransformation.SetTranslationPart(gp_XYZ(5, 5, 5));//平移和縮放的位置前后沒有變換theTransformation.SetVectorialPart(rot);//這個是不同軸向的縮放

8、各種基礎模型顯示

在void CModelingDoc::OnBox() 函數(shù)中。顯示效果如下:

在void CModelingDoc::OnCylinder() 函數(shù)中。顯示效果如下:

在void CModelingDoc::OnCone() 函數(shù)中。顯示效果如下:

在void CModelingDoc::OnSphere()函數(shù)中。顯示效果如下:

在CModelingDoc::OnTorus()函數(shù)中。顯示效果如下:

在CModelingDoc::OnWedge()函數(shù)中。顯示效果如下:

在CModelingDoc::OnPrism()函數(shù)中。顯示效果如下:(拉伸功能)

應用的類如下:

  • BRepPrimAPI_MakeBox類
  • BRepPrimAPI_MakeCylinder類
  • BRepPrimAPI_MakeCone類
  • BRepPrimAPI_MakeSphere類
  • BRepPrimAPI_MakeTorus類
  • BRepPrimAPI_MakeWedge類
  • BRepPrimAPI_MakePrism
  • BRepBuilderAPI_MakeVertex
  • BRepBuilderAPI_MakeEdge
  • BRepBuilderAPI_MakeWire
  • BRepBuilderAPI_MakeFace
  • BRepPrimAPI_MakePrism

9、各種元素的旋轉建模

在void CModelingDoc::OnRevol()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepPrimAPI_MakeRevol類,制作旋轉掃描拓撲的類。
  • Geom_Axis1Placement類,描述 3D 空間中的軸。
  • AIS_Axis類,顯示 3D 空間中的軸。

10、pipe的建模

在void CModelingDoc::OnPipe()函數(shù)中。顯示效果如下:


應用的類如下:

  • TColgp_Array1OfPnt類,是gp_Pnt 的容器。
  • gp_Pnt類,三維描述一個點。
  • Geom_BezierCurve類,描述有理或非有理貝塞爾曲線。(不懂)
  • gp_Circ類,描述三維的一個圓。
  • BRepOffsetAPI_MakePipe類,描述構建管道的函數(shù)。管道通過掃掠沿線(稱為脊柱)構建基本形狀(稱為輪廓)。輪廓不得包含實體。

主要代碼如下:

TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve);TopoDS_Wire wire = BRepBuilderAPI_MakeWire(E);gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(0.,0.,0.),gp_Dir(0.,1.,0.)),10.);TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec); TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::ZOX()),Wc);TopoDS_Shape S = BRepOffsetAPI_MakePipe(wire,F);

11、thru的建模

在void CModelingDoc::OnThru()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepOffsetAPI_ThruSections類,這是一個殼或實體以給定的順序通過一組部分。通常部分是連線,但第一個和最后一個部分可能是頂點。上圖就是該類的兩個創(chuàng)建效果一個是平滑化的建模。

主要代碼如下:

BRepOffsetAPI_ThruSections generator(Standard_False,Standard_True);generator.AddWire(W1);generator.AddWire(W3);generator.AddWire(W4);generator.AddWire(W2);generator.Build();TopoDS_Shape S1 = generator.Shape();

12、進化形狀的建模

在void CModelingDoc::OnEvolved()函數(shù)中。顯示效果如下:

GeomAbs_Arc類型的效果圖。

應用的類如下:

  • BRepBuilderAPI_MakePolygon類,描述構建多邊形線的函數(shù)。
  • BRepOffsetAPI_MakeEvolved類,描述構建進化形狀的函數(shù)。演化的形狀由平面脊(面或線)和輪廓(線)構建而成。

主要代碼如下:

BRepBuilderAPI_MakePolygon P;P.Add(gp_Pnt(0.,0.,0.));P.Add(gp_Pnt(200.,0.,0.));P.Add(gp_Pnt(200.,200.,0.));P.Add(gp_Pnt(0.,200.,0.));P.Add(gp_Pnt(0.,0.,0.));TopoDS_Wire W = P.Wire();TopoDS_Wire wprof = BRepBuilderAPI_MakePolygon(gp_Pnt(0.,0.,0.),gp_Pnt(-60.,-60.,-200.));TopoDS_Shape S = BRepOffsetAPI_MakeEvolved(W,wprof,GeomAbs_Arc,Standard_True,Standard_False,Standard_True,0.0001);Handle(AIS_Shape) ais3 = new AIS_Shape(wprof);myAISContext->Display(ais3,Standard_False);

13、錐形變換

在void CModelingDoc::OnDraft()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepOffsetAPI_DraftAngle類,形狀上的錐形添加變換。

主要代碼如下:

BRepOffsetAPI_DraftAngle adraft(S);int i =1;TopExp_Explorer Ex;for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) {TopoDS_Face F = TopoDS::Face(Ex.Current());Handle(Geom_Plane) surf = Handle(Geom_Plane)::DownCast(BRep_Tool::Surface(F));gp_Pln apln = surf->Pln();gp_Dir dirF = apln.Axis().Direction();if (dirF.IsNormal(gp_Dir(0.,0.,1.),Precision::Angular()))adraft.Add(F, gp_Dir(0.,0.,1.), 15.0*M_PI/180, gp_Pln(gp::XOY()));}ais1->Set(adraft.Shape());myAISContext->Redisplay(ais1,Standard_False);

14、布爾運算

在void CModelingDoc::OnCut()函數(shù)中。顯示效果如下:

在void CModelingDoc::OnFuse()函數(shù)中。顯示效果如下:

在void CModelingDoc::OnCommon()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepAlgoAPI_Cut類,布爾減運算。
  • BRepAlgoAPI_Fuse類,布爾加運算。
  • BRepAlgoAPI_Common類,布爾交集運算。

主要代碼如下:

TopoDS_Shape FusedShape = BRepAlgoAPI_Fuse(theBox1, theBox2);TopoDS_Shape ShapeCut = BRepAlgoAPI_Cut(theSphere, theBox);TopoDS_Shape theCommonSurface = BRepAlgoAPI_Common(theBox, theWedge);

15、截面運算

在void CModelingDoc::OnSection()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepPrimAPI_MakeTorus類,構建圓環(huán)形狀類。
  • BRepPrimAPI_MakeSphere類,構建球體形狀類。
  • BRepAlgoAPI_Section類,是在參數(shù)和工具之間建立一個截面算法。Section運算的結果由頂點和邊組成。

主要代碼如下:

BRepAlgoAPI_Section section(atorus, asphere, PerformNow);section.ComputePCurveOn1(Standard_True);section.Approximation(TopOpeBRepTool_APPROX);section.Build();Handle(AIS_Shape) asection = new AIS_Shape(section.Shape());myAISContext->SetDisplayMode(asection, 0, Standard_False);

16、平面的截面運算

在void CModelingDoc::OnPsection()函數(shù)中。顯示效果如下:

應用的類如下:

  • gp_Pln類,描述 3D 空間中的平面。
  • Geom_Plane類,描述 3D 空間中的平面。
  • gce_MakePln類,實現(xiàn)了以下用于從 gp 創(chuàng)建平面的算法。
  • gp_Pln類,Geom_Plane類和gce_MakePln類,都是描述三維空間中的平面,他們是不同包中的不同算法,每個類里面有一些不同的算法。
  • AIS_Plane類,構造用于顯示復合形狀的平面基準。
  • BRepAlgoAPI_Section類,是在參數(shù)和工具之間建立一個截面算法。Section運算的結果由頂點和邊組成。

主要代碼如下:

BRepAlgoAPI_Section section(atorus, asphere, PerformNow);section.ComputePCurveOn1(Standard_True);section.Approximation(TopOpeBRepTool_APPROX);section.Build();Handle(AIS_Shape) asection = new AIS_Shape(section.Shape());myAISContext->SetDisplayMode(asection, 0, Standard_False);

17、倒角運算

在void CModelingDoc::OnBlend()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFilletAPI_MakeFillet類,倒角運算。
  • TopExp_Explorer類,遍歷模型中面、線、邊和點的類。
  • TopoDS類,類型轉換類。
  • BRepAlgoAPI_Fuse類,布爾加類。

主要代碼如下:

BRepFilletAPI_MakeFillet fillet(Box);for (TopExp_Explorer ex(Box, TopAbs_EDGE); ex.More(); ex.Next()){TopoDS_Edge Edge = TopoDS::Edge(ex.Current());fillet.Add(20, Edge);}TopoDS_Shape blendedBox = fillet.Shape();

18、復雜倒角的建模

在void CModelingDoc::OnEvolvedblend()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFilletAPI_MakeFillet類,add函數(shù)的多態(tài)使用。用不同的算法。

主要代碼如下:

BRepFilletAPI_MakeFillet afillet(theBox2);TColgp_Array1OfPnt2d TabPoint(1, 6);gp_Pnt2d P1(0., 8.);gp_Pnt2d P2(0.2, 16.);gp_Pnt2d P3(0.4, 25.);gp_Pnt2d P4(0.6, 55.);gp_Pnt2d P5(0.8, 28.);gp_Pnt2d P6(1., 20.);TabPoint.SetValue(1, P1);TabPoint.SetValue(2, P2);TabPoint.SetValue(3, P3);TabPoint.SetValue(4, P4);TabPoint.SetValue(5, P5);TabPoint.SetValue(6, P6);TopExp_Explorer exp(theBox2, TopAbs_EDGE);exp.Next();exp.Next();exp.Next();exp.Next();afillet.Add(TabPoint, TopoDS::Edge(exp.Current()));afillet.Build();if (afillet.IsDone())TopoDS_Shape LawevolvedBox = afillet.Shape();

19、倒直角的建模

在void CModelingDoc::OnChamf()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFilletAPI_MakeChamfer類,倒直角運算。

主要代碼如下:

BRepFilletAPI_MakeChamfer MC(theBox);// add all the edges to chamferTopTools_IndexedDataMapOfShapeListOfShape M;TopExp::MapShapesAndAncestors(theBox, TopAbs_EDGE, TopAbs_FACE, M);for (Standard_Integer i = 1; i <= M.Extent(); i++){TopoDS_Edge E = TopoDS::Edge(M.FindKey(i));TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First());MC.Add(5, 5, E, F);}TopoDS_Shape ChanfrenedBox = MC.Shape();

20、草圖拉伸

在void CModelingDoc::OnPrismLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepAlgoAPI_Cut類,布爾減運算
  • gp_Pnt2d類,GCE2d_MakeLine類,Geom2d_Curve類
  • BRepBuilderAPI_MakeEdge 類,應用的是
  • BRepLib::BuildCurves3d()函數(shù)。
  • BRepFeat_MakePrism類,拉伸命令。

主要代碼如下:

TopoDS_Face FP2; {gp_Pnt2d p1 = gp_Pnt2d(100., 100.);gp_Pnt2d p2 = gp_Pnt2d(200., 100.);gp_Pnt2d p3 = gp_Pnt2d(150., 200.);Handle(Geom2d_Curve) aline1 = GCE2d_MakeLine(p1, p2).Value();Handle(Geom2d_Curve) aline2 = GCE2d_MakeLine(p2, p3).Value();Handle(Geom2d_Curve) aline3 = GCE2d_MakeLine(p3, p1).Value();TopoDS_Edge e1 = BRepBuilderAPI_MakeEdge(aline1, surf, 0., p1.Distance(p2));TopoDS_Edge e2 = BRepBuilderAPI_MakeEdge(aline2, surf, 0., p2.Distance(p3));TopoDS_Edge e3 = BRepBuilderAPI_MakeEdge(aline3, surf, 0., p3.Distance(p1));BRepBuilderAPI_MakeWire MW2;MW2.Add(e1);MW2.Add(e2);MW2.Add(e3);TopoDS_Wire wire3E = MW2.Wire();BRepBuilderAPI_MakeFace MKF2;MKF2.Init(surf, Standard_False, Precision::Confusion());MKF2.Add(wire3E);FP2 = MKF2.Face();BRepLib::BuildCurves3d(FP2);//計算 <S> 的所有邊的 3d 曲線}BRepFeat_MakePrism MKP2(res1, FP2, F2, D, 1, Standard_True);MKP2.Perform(100.);TopoDS_Shape res2 = MKP2.Shape();ais1->Set(res2);myAISContext->Redisplay(ais1, Standard_False);//更新顯示模型myAISContext->SetSelected(anIO1, Standard_False);//設置為選中Fit();

具體代碼分析:

const Handle(Geom_Surface)& S 參數(shù)指定了三維表面。
BRepBuilderAPI_MakeEdge是將二維的曲線(const Handle(Geom2d_Curve)& L)在指定三維平面上創(chuàng)建三維邊。
比如上圖中:草圖是二維平面上的曲線。在某個指定平面上繪制草圖,再進行拉伸操作。這里就是,在某個指定平面上通過二維曲線創(chuàng)建三維邊。
這里創(chuàng)建的三維邊沒有對應的三維曲線,如果后續(xù)用到三維曲線,就需要**BRepLib::BuildCurves3d()**函數(shù)對最后的三維模型進行三維曲線的構建。

BRepBuilderAPI_MakeFace類,也有類似的使用,見代碼。

**Redisplay()**函數(shù)用于顯示的時候更新模型,還有設置成選中狀態(tài)。

21、拔模棱鏡的建模

在void CModelingDoc::OnDprismLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFeat_MakeDPrism類,描述從基本形狀表面構建拔模棱鏡拓撲的函數(shù)。
  • gp_Circ2d類和Geom2d_Curve類,二維曲線圓。

主要代碼如下:

//描述從基本形狀表面構建拔模棱鏡拓撲的函數(shù)。BRepFeat_MakeDPrism MKDP(S,FP,F,10*M_PI/180,1,Standard_True);MKDP.Perform(200);TopoDS_Shape res1 = MKDP.Shape();

22、旋轉的建模

在void CModelingDoc::OnRevolLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFeat_MakeRevol類,描述從基本形狀構建旋轉殼的函數(shù)。

主要代碼如下:

BRepFeat_MakeRevol MKrev(S,FP,F1, gp::OX(),1,Standard_True);//描述從基本形狀構建旋轉殼的函數(shù)//。。。TopoDS_Face F2 = TopoDS::Face(Ex.Current());MKrev.Perform(F2);TopoDS_Shape res1 = MKrev.Shape();

23、管道的建模

在void CModelingDoc::OnPipeLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFeat_MakePipe類,構造具有管道特征的復合形狀。

主要代碼如下:

BRepFeat_MakePipe MKPipe(S,FP,F1,W,1,Standard_True);MKPipe.Perform();TopoDS_Shape res1 = MKPipe.Shape();ais1->Set(res1);

24、肋或凹槽的建模

在void CModelingDoc::OnLinearLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFeat_MakeLinearForm類,沿著可展開的平面構建肋或凹槽。。

主要代碼如下:

TopoDS_Wire W = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(pt1,pt2)); gp_Pnt pt3(50., 45., 150.);gp_Dir dir(0,1,0);Handle(Geom_Plane) aplane = new Geom_Plane(pt3,dir);//沿著可展開的平面構建肋或凹槽。BRepFeat_MakeLinearForm aform(S, W, aplane, gp_Vec(0.,10.,0.), gp_Vec(0.,0.,0.),1, Standard_True);aform.Perform(/*10.*/); // new in 2.0TopoDS_Shape res = aform.Shape();

25、局部粘合的建模

在void CModelingDoc::OnGlueLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepFeat_Gluer類,用于局部粘合。Package BRepFeat包中的類。
    這個類最重要的功能是使用本地操作而不是全局操作。在本地操作中,您可以使用正在創(chuàng)建特征的形狀的各個方面來指定特征構造的域。這些語義是根據(jù)基礎形狀的成員形狀來表達的,從該形狀中添加或刪除物質。

主要代碼如下:

//如圖左邊的模型,只有face重合TopoDS_Face F2 = TopoDS::Face(Ex2.Current());BRepFeat_Gluer glue(S2,S1);//粘合的shapeglue.Bind(F2,F1);//粘合的faceTopoDS_Shape res1 = glue.Shape(); //如圖右邊的模型,有face重合,而且face里面有邊重合。BRepFeat_Gluer glue2(S4,S3);glue2.Bind(F4,F3);LocOpe_FindEdges CommonEdges(F4,F3);for (CommonEdges.InitIterator(); CommonEdges.More(); CommonEdges.Next()) glue2.Bind(CommonEdges.EdgeFrom(),CommonEdges.EdgeTo());TopoDS_Shape res2 = glue2.Shape();

26、局部切割的建模

在void CModelingDoc::OnSplitLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepAlgoAPI_Section類,切割,獲得界面的edge。
  • BRepFeat_SplitShape類,基準形狀中面的線或邊,用作特征的一部分,用于切割并投影到基礎形狀外部或內部的平面。通過重建結合工具的邊緣和面的初始形狀,可以構造突起或凹陷特征。

主要代碼如下:

BRepAlgoAPI_Section asect(S, gp_Pln(1,2,1,-15),Standard_False);asect.ComputePCurveOn1(Standard_True);asect.Approximation(Standard_True);asect.Build();TopoDS_Shape R = asect.Shape();BRepFeat_SplitShape asplit(S); for (TopExp_Explorer Ex(R,TopAbs_EDGE); Ex.More(); Ex.Next()) {TopoDS_Shape anEdge = Ex.Current();TopoDS_Shape aFace;if (asect.HasAncestorFaceOn1(anEdge,aFace)) //獲得切割邊anEdge所在的face。{TopoDS_Face F = TopoDS::Face(aFace);TopoDS_Edge E = TopoDS::Edge(anEdge);asplit.Add(E,F);}}asplit.Build();TopoDS_Shape Result = asplit.Shape();

27、局部抽殼的建模

在void CModelingDoc::OnThickLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepOffsetAPI_MakeThickSolid類,描述構建空心實體的函數(shù)。

主要代碼如下:

BRepOffsetAPI_MakeThickSolid aSolidMaker;aSolidMaker.MakeThickSolidByJoin(S1,aList,10,0.01);TopoDS_Shape aThickSolid = aSolidMaker.Shape();

28、偏移的建模

在void CModelingDoc::OnOffsetLocal()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepOffsetAPI_MakeOffsetShape類,描述用形狀構建殼的函數(shù)。

主要代碼如下:

//左邊的模型BRepOffsetAPI_MakeOffsetShape aShapeMaker1;aShapeMaker1.PerformByJoin(S1,40,0.01);TopoDS_Shape anOffsetShape1 = aShapeMaker1.Shape();//右邊的模型BRepOffsetAPI_MakeOffsetShape aShapeMaker2;aShapeMaker2.PerformByJoin(S2,-40,0.01,BRepOffset_Skin,Standard_False,Standard_False,GeomAbs_Arc);TopoDS_Shape anOffsetShape2 = aShapeMaker2.Shape();

29、vertex的建模

在void CModelingDoc::OnVertex()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepBuilderAPI_MakeVertex類,描述直接從 3D 幾何點構建 BRepBuilder 頂點的函數(shù)。

主要代碼如下:

TopoDS_Vertex V1,V2,V3;V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(0,0,0));V2 = BRepBuilderAPI_MakeVertex(gp_Pnt(10,7,25));gp_Pnt P(-12,8,-4);BRepBuilderAPI_MakeVertex MV(P);V3 = MV.Vertex();Handle(AIS_Shape) Point1 = new AIS_Shape(V1);myAISContext->Display(Point1,Standard_False);

30、edge的建模

在void CModelingDoc::OnEdge()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepBuilderAPI_MakeEdge類,提供構建邊緣的方法。
  • gp_Lin類。
  • gp_Elips類。
  • Geom_BezierCurve類。

主要代碼如下:

TopoDS_Edge BlueEdge,YellowEdge,WhiteEdge,RedEdge,GreenEdge;TopoDS_Vertex V1,V2,V3,V4;/The blue edgeBlueEdge = BRepBuilderAPI_MakeEdge(gp_Pnt(-80,-50,-20),gp_Pnt(-30,-60,-60));/The yellow edgeV1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-20,10,-30));V2 = BRepBuilderAPI_MakeVertex(gp_Pnt(10,7,-25));YellowEdge = BRepBuilderAPI_MakeEdge(V1,V2);/The white edgegp_Lin line(gp_Ax1(gp_Pnt(10,10,10),gp_Dir(1,0,0)));WhiteEdge = BRepBuilderAPI_MakeEdge(line,-20,10);//The red edgegp_Elips Elips(gp_Ax2(gp_Pnt(10,0,0),gp_Dir(1,1,1)),60,30);RedEdge = BRepBuilderAPI_MakeEdge(Elips,0,M_PI/2);/The green edge and the both extreme vertexgp_Pnt P1(-15,200,10);gp_Pnt P2(5,204,0);gp_Pnt P3(15,200,0);gp_Pnt P4(-15,20,15);gp_Pnt P5(-5,20,0);gp_Pnt P6(15,20,0);gp_Pnt P7(24,120,0);gp_Pnt P8(-24,120,12.5);TColgp_Array1OfPnt array(1,8);array.SetValue(1,P1);array.SetValue(2,P2);array.SetValue(3,P3); array.SetValue(4,P4); array.SetValue(5,P5); array.SetValue(6,P6); array.SetValue(7,P7); array.SetValue(8,P8); Handle (Geom_BezierCurve) curve = new Geom_BezierCurve(array);BRepBuilderAPI_MakeEdge ME (curve);GreenEdge = ME;V3 = ME.Vertex1();V4 = ME.Vertex2();

31、wire的建模

在void CModelingDoc::OnWire()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepBuilderAPI_MakeWire類。
  • gp_Circ類
  • gp_Elips類。

主要代碼如下:

The red wire is build from a single edgegp_Elips Elips(gp_Ax2(gp_Pnt(250,0,0),gp_Dir(1,1,1)),160,90);Edge1 = BRepBuilderAPI_MakeEdge(Elips,0,M_PI/2);RedWire = BRepBuilderAPI_MakeWire(Edge1); ///the yellow wire is build from an existing wire and an edgegp_Circ circle(gp_Ax2(gp_Pnt(-300,0,0),gp_Dir(1,0,0)),80);Edge2 = BRepBuilderAPI_MakeEdge(circle,0,M_PI);ExistingWire = BRepBuilderAPI_MakeWire(Edge2);Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(-300,0,-80),gp_Pnt(-90,20,-30));BRepBuilderAPI_MakeWire MW1(ExistingWire,Edge3);if (MW1.IsDone()) {YellowWire = MW1;} BRepBuilderAPI_MakeWire MW;MW.Add(ExistingWire2);MW.Add(Edge5);MW.Add(Edge6);MW.Add(Edge7);if (MW.IsDone()) {WhiteWire = MW.Wire();LastEdge = MW.Edge();LastVertex = MW.Vertex();}

32、Face的建模

在void CModelingDoc::OnFace()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepBuilderAPI_MakeFace類。
  • gp_Sphere類。
  • GeomAPI_PointsToBSplineSurface類。
  • Geom2d_Line類。

主要代碼如下:

/P1.SetCoord(35,-200,40);P2.SetCoord(50,-204,30);P3.SetCoord(65,-200,30);P4.SetCoord(35,-20,45);P5.SetCoord(45,-20,30);P6.SetCoord(65,-20,65);TColgp_Array2OfPnt array2(1,3,1,2);array2.SetValue(1,1,P1);array2.SetValue(2,1,P2);array2.SetValue(3,1,P3); array2.SetValue(1,2,P4); array2.SetValue(2,2,P5); array2.SetValue(3,2,P6);Handle (Geom_BSplineSurface) BSplineSurf = GeomAPI_PointsToBSplineSurface(array2,3,8,GeomAbs_C2,0.001);TopoDS_Face aFace = BRepBuilderAPI_MakeFace(BSplineSurf, Precision::Confusion());//2d linesgp_Pnt2d P12d(0.9,0.1);gp_Pnt2d P22d(0.2,0.7);gp_Pnt2d P32d(0.02,0.1);Handle (Geom2d_Line) line1 = new Geom2d_Line(P12d,gp_Dir2d((0.2-0.9),(0.7-0.1)));Handle (Geom2d_Line) line2 = new Geom2d_Line(P22d,gp_Dir2d((0.02-0.2),(0.1-0.7)));Handle (Geom2d_Line) line3 = new Geom2d_Line(P32d,gp_Dir2d((0.9-0.02),(0.1-0.1)));//Edges are on the BSpline surfaceEdge1 = BRepBuilderAPI_MakeEdge(line1,BSplineSurf,0,P12d.Distance(P22d));Edge2 = BRepBuilderAPI_MakeEdge(line2,BSplineSurf,0,P22d.Distance(P32d));Edge3 = BRepBuilderAPI_MakeEdge(line3,BSplineSurf,0,P32d.Distance(P12d));Wire1 = BRepBuilderAPI_MakeWire(Edge1,Edge2,Edge3);Wire1.Reverse();PinkFace = BRepBuilderAPI_MakeFace(aFace,Wire1);BRepLib::BuildCurves3d(PinkFace);

33、Shell的建模

在void CModelingDoc::OnShell()函數(shù)中。顯示效果如下:

應用的類如下:

  • Geom_BSplineSurface類。
  • BRepBuilderAPI_MakeShell類。

主要代碼如下:

34、Compound的建模

在void CModelingDoc::OnCompound()函數(shù)中。顯示效果如下:

應用的類如下:

  • TopoDS_Compound類。
  • BRep_Builder類。

主要代碼如下:

BRep_Builder builder;TopoDS_Compound Comp;builder.MakeCompound(Comp);TopoDS_Vertex aVertex = BRepBuilderAPI_MakeVertex(gp_Pnt(-20,10,-30));builder.Add(Comp,aVertex);gp_Lin line(gp_Ax1(gp_Pnt(10,10,10),gp_Dir(1,0,0)));TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge(line,-20,10);builder.Add(Comp,anEdge);gp_Sphere sphere (gp_Ax3(gp_Pnt(-80,0,0),gp_Dir(1,0,0)),150);TopoDS_Face aFace = BRepBuilderAPI_MakeFace(sphere,0.1,0.7,0.2,0.9);builder.Add(Comp,aFace);TopoDS_Shape aBox = BRepPrimAPI_MakeBox(gp_Pnt(-60, 0, 0), 30, 60, 40).Shape();builder.Add(Comp,aBox);Handle(AIS_Shape) white = new AIS_Shape(Comp);myAISContext->SetDisplayMode (white, 0, Standard_False);myAISContext->Display(white,Standard_False);

35、縫合的建模

在void CModelingDoc::OnSewing()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepOffsetAPI_Sewing類,沿著它們的共同邊緣縫合形狀。
  • Geom_Plane類,描述 3D 空間中的平面。
  • Geom_RectangularTrimmedSurface類,描述由 u 參數(shù)方向上的兩個 u 參數(shù)值和 v 參數(shù)方向上的兩個 v 參數(shù)值限制的曲面部分(面片)。
  • GeomAPI_PointsToBSplineSurface類,用于近似或內插通過點 Array2 的 BSplineSurface。
  • Geom_BSplineSurface類,描述 BSpline 曲面。

主要代碼如下:

BRepOffsetAPI_Sewing aMethod;aMethod.Add(FirstShape); aMethod.Add(SecondShape);aMethod.Perform();TopoDS_Shape sewedShape = aMethod.SewedShape();

36、手動的建模

在void CModelingDoc::OnBuilder()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRep_Builder類,提供高級公差控制的框架。它用于構建形狀。
  • Geom_CylindricalSurface類。
  • Geom2d_Line類。
  • Geom2d_Circle類。
  • Geom_Plane類。

這個示例是從Vertex到Edge,Edge到wire等順序由代碼建立的模型的拓撲結構。

主要代碼如下:

TopoDS_Vertex V000, V001, V010, V011, V100, V101, V110, V111;B.MakeVertex(V000,gp_Pnt(0,0,0),precision);B.MakeVertex(V001,gp_Pnt(0,0,100),precision);B.MakeVertex(V010,gp_Pnt(0,150,0),precision);//。。。TopoDS_Edge EX00, EX01, EX10, EX11;Handle (Geom_Line) L;//Edge X00L = new Geom_Line(gp_Pnt(0,0,0),gp_Dir(1,0,0));B.MakeEdge(EX00,L,precision);V000.Orientation(TopAbs_FORWARD);V100.Orientation(TopAbs_REVERSED);B.Add(EX00,V000);B.Add(EX00,V100);//ParametersB.UpdateVertex(V000,0,EX00,precision);B.UpdateVertex(V100,200,EX00,precision);//。。。//Circular EdgesHandle (Geom_Circle) C;//Standard_Real R = 100;//Edge EX01C = new Geom_Circle(gp_Ax2(gp_Pnt(100,0,100),gp_Dir(0,1,0),gp_Dir(-1,0,0)),100);B.MakeEdge(EX01,C,precision);V001.Orientation(TopAbs_FORWARD);V101.Orientation(TopAbs_REVERSED);B.Add(EX01,V001);B.Add(EX01,V101);//ParametersB.UpdateVertex(V001,0,EX01,precision);B.UpdateVertex(V101,M_PI,EX01,precision);

37、基本幾何建模

在void CModelingDoc::OnGeometrie()函數(shù)中。顯示效果如下:

就是點線面和線段4個幾何模型的建立和顯示。

應用的類如下:
略。

主要代碼如下:
略。

38、子圖形顯示

在void CModelingDoc::OnExplorer()函數(shù)中。顯示效果如下:

應用的類如下:

  • AIS_ColoredShape類,自定義指定子形狀的屬性。如果它不是主形狀的子形狀,該形狀將被存儲在地圖中但被忽略。此方法可用于標記具有可自定義屬性的子形狀。
  • AIS_ColoredDrawer類,可定制的屬性。
  • Prs3d_ShadingAspect 類,定義陰影顯示的框架。
  • AIS_ConnectedInteractive類,創(chuàng)建另一個交互對象的任意位置實例,用作參考。這允許您使用連接的交互式對象,而無需重新計算演示、選擇或圖形結構。這些是從您的參考對象推導出來的。連接的交互對象與其源之間的關系一般是一種幾何變換。
  • Geom_Transformation類,描述平移、旋轉、縮放的基本變換。

主要代碼如下:
這里做了一個動畫效果,具體用每幀移動更新的效果實現(xiàn)的。

//一個動畫每幀位置的更新效果。for (Standard_Integer i=1;i<=90;i++){theMove->SetTranslation(move*i);if (orient==TopAbs_FORWARD) myAISContext->SetLocation(theTransformedDisplay,TopLoc_Location(theMove->Trsf()));else myAISContext->SetLocation(theTransformedDisplay,TopLoc_Location(theMove->Inverted()->Trsf()));myAISContext->Redisplay(theTransformedDisplay,true);} //Build an AIS_Shape with a new colorHandle(AIS_Shape) theMovingFace = new AIS_Shape(aCurrentFace);Quantity_NameOfColor aCurrentColor = (Quantity_NameOfColor)j;myAISContext->SetColor(theMovingFace,aCurrentColor,Standard_False);myAISContext->SetMaterial(theMovingFace,Graphic3d_NOM_PLASTIC,Standard_False); //Find the normal vector of each faceTopLoc_Location aLocation;Handle (AIS_ConnectedInteractive) theTransformedDisplay = new AIS_ConnectedInteractive();theTransformedDisplay->Connect(theMovingFace, aLocation);Handle (Geom_Transformation) theMove = new Geom_Transformation(aLocation.Transformation());myAISContext->Display(theTransformedDisplay,Standard_False);myAISContext->UpdateCurrentViewer();Sleep (500);

39、檢查形狀是否“正確”

在void CModelingDoc::OnValid()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepAlgo::IsValid()函數(shù),檢查形狀是否“正確”。

主要代碼如下:

Standard_Boolean theShapeIsValid = BRepAlgo::IsValid(S);//檢查形狀是否“正確”。

40、曲線長度、質心和慣性矩陣

在void CModelingDoc::OnLinear()函數(shù)中。顯示效果如下:

應用的類如下:

  • GeomAPI_PointsToBSpline類,描述用于構建近似一組點的 3D BSpline 曲線的函數(shù)。

  • Geom_BSplineCurve類,B 樣條曲線的定義。

  • GProp_GProps類,實現(xiàn)一種通用機制,通過組合“基本幾何實體”(例如曲線、曲面、實體、點集)的全局屬性來計算 3d 空間中“復合幾何系統(tǒng)”的全局屬性。

  • BRepGProp::LinearProperties()函數(shù),如果 LProps 的當前系統(tǒng)是空的,它的全局屬性變得等于 S 的線性全局屬性。所以,這里是獲得了S的全局屬性。


  • GProp_GProps類,計算的全局屬性是:

    • 尺寸(長度、面積或體積)
    • 質量,
    • 質心,
    • 慣性力矩(靜態(tài)力矩和二次力矩),
    • 繞軸的力矩,
    • 繞軸線的回轉半徑,
    • 慣性的主要性質:(另見PrincipalProps類)。主力矩,慣性主軸。主回轉半徑,

主要代碼如下:

TColgp_Array1OfPnt Points1(1,4);Points1.SetValue(1,gp_Pnt(0,0,0));Points1.SetValue(2,gp_Pnt(2,1,0));Points1.SetValue(3,gp_Pnt(4,0,0));Points1.SetValue(4,gp_Pnt(6,2,0));GeomAPI_PointsToBSpline PTBS1(Points1);Handle(Geom_BSplineCurve) BSC1 = PTBS1.Curve();TopoDS_Edge S = BRepBuilderAPI_MakeEdge(BSC1).Edge();GProp_GProps System;BRepGProp::LinearProperties(S,System);gp_Pnt G = System.CentreOfMass ();//質心Standard_Real Length = System.Mass();//邊長gp_Mat I = System.MatrixOfInertia();//慣性矩陣

41、曲面的面積、質心和慣性矩陣

在void CModelingDoc::OnSurface()函數(shù)中。顯示效果如下:

應用的類如下:

  • GProp_GProps 類,實現(xiàn)一種通用機制,通過組合“基本幾何實體”(例如曲線、曲面、實體、點集)的全局屬性來計算 3d 空間中“復合幾何系統(tǒng)”的全局屬性。
  • GeomAPI_PointsToBSpline類,描述用于構建近似一組點的 3D BSpline 曲線的函數(shù)。
  • Geom_BSplineCurve類,B 樣條曲線的定義。
  • GeomFill_BSplineCurves類,一種用于構造 BSpline 曲面的算法,該曲面由形成其邊界的連續(xù) BSpline 曲線填充。
  • Geom_BSplineSurface類,描述 BSpline 曲面。
  • BRepGProp::SurfaceProperties()函數(shù),如果 SProps 的當前系統(tǒng)為空,則其全局屬性將等于 S 的表面全局屬性。所以,這里是獲得了S的全局屬性。
    **GProp_GProps類,計算的全局屬性是:**具體見前面。

主要代碼如下:

GProp_GProps System;BRepGProp::SurfaceProperties(S,System);//獲得了S的全局屬性。gp_Pnt G = System.CentreOfMass ();//質心Standard_Real Area = System.Mass();//face的面積gp_Mat I = System.MatrixOfInertia();//慣性矩陣

42、實體的體積、質心和慣性矩陣

在void CModelingDoc::OnVolume()函數(shù)中。顯示效果如下:

應用的類如下:

  • BRepGProp::SurfaceProperties()函數(shù),如果當前的 VProps 系統(tǒng)是空的,它的全局屬性就等于 S 的全局屬性。所以,這里是獲得了S的全局屬性。
  • 其他參考前面兩個的內容。

主要代碼如下:

GProp_GProps System;BRepGProp::VolumeProperties(S,System);gp_Pnt G = System.CentreOfMass ();Standard_Real Volume = System.Mass();//體積gp_Mat I = System.MatrixOfInertia();

43、edge修補建模(有點難懂。暫時略)

在void CModelingDoc::OnButtonFill()函數(shù)和CModelingDoc::OnStopStop()函數(shù)實現(xiàn)一個功能。顯示效果大概是將選中的edge組成face。有點難懂。暫時略了。

應用的類如下:

  • TopExp::MapShapesAndAncestors()函數(shù),將 TS 類型的 s 的所有子形狀存儲在映射 M 中,每個子形狀都將 TA 類型的所有唯一祖先添加到列表中。
  • BRepAdaptor_Surface類,使用看起來像 3D 表面的 BRep 拓撲的面。
  • GeomAdaptor_Surface類,由 Geom 包中的任何表面提供的服務與使用它的算法所需的表面之間的接口。
  • BRepAdaptor_Curve2d類,BRepAdaptor 的 Curve2d 。位于 Geom 包中的曲面上的曲線提供的服務與使用該曲線的算法所需的服務之間的接口。在F上使用E的 pcurve 創(chuàng)建。
  • Adaptor3d_CurveOnSurface類,位于 Geom 包中的曲面上的曲線提供的服務與使用該曲線的算法所需的服務之間的接口。
  • GeomPlate_BuildPlateSurface類,提供了一種算法,用于構造符合給定曲線和/或點約束的板表面。該算法接受或構造一個初始表面,并尋找滿足約束條件和最小化能量輸入的變形。對象提供了一個框架。
  • GeomPlate_MakeApprox類,允許您將 GeomPlate 曲面轉換為 BSpline。
  • Geom_BSplineSurface類。
  • BRepTopAdaptor_FClass2d類。

44、OnFillwithtang建模(有點難懂。暫時略)

在void CModelingDoc::OnFillwithtang()函數(shù)中。

———Modeling項目。完。———

總結

以上是生活随笔為你收集整理的OCCT示例学习笔记3--Modeling项目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲视频中文字幕在线观看 | 第一页在线视频 | 丰满孕妇性春猛交xx大陆 | 亚洲第一色网站 | 射综合网| 高h av| 国产床上视频 | 丰满雪白极品少妇流白浆 | a级一级黄色片 | 亚洲av无码国产精品久久不卡 | 五月精品| 丁香六月激情 | 日本黄色大片免费看 | 日产久久视频 | 黑巨茎大战欧美白妞 | 日韩黄色在线观看 | 欧美少妇一区 | 黄色欧美一级片 | 在线播放小视频 | 国产欧美日韩在线播放 | 无码一区二区 | 熟妇女人妻丰满少妇中文字幕 | 免费的黄色大片 | 娇妻第一次尝试交换的后果 | 青青草手机在线视频 | 日韩一区二区三区电影 | 国产又爽又猛又粗的视频a片 | 亚洲自拍偷拍一区 | 亚洲91在线 | 日韩r级在线观看 | 美女网站黄频 | 小早川怜子一区二区三区 | 裸体一区二区 | 18pao国产成视频永久免费 | 欧美激情在线免费观看 | 91国内在线| youjizz日韩 | www.欧美com | 91超碰人人 | japanese24hdxxxx日韩| 国外成人免费视频 | 1024精品一区二区三区日韩 | 午夜免费剧场 | 中文在线a√在线 | 乱色视频 | 成人a级片| 欧美成人免费高清视频 | 亚洲无色| 久久人人爽人人爽人人片 | 韩国三级做爰视频 | caoporn人人| 精品黑人一区二区三区国语馆 | 欧美三级特黄 | 中文字幕无线精品亚洲乱码一区 | 精品黑人一区二区三区国语馆 | 亚洲涩涩网 | 日韩欧美一区视频 | 美女精品网站 | 韩日午夜在线资源一区二区 | 秋霞av鲁丝片一区二区 | 91婷婷射| 91人妻一区二区 | 在线观看免费高清 | 国产欧美精品一区 | 女警白嫩翘臀呻吟迎合 | 欧美黑人添添高潮a片www | 最近中文字幕免费 | 国产福利在线 | 老局长的粗大高h | 亚洲欧美999 | 日韩成人av在线播放 | 日本精品一区二区三区视频 | 午夜网页 | 国产精品夜夜爽张柏芝 | 午夜三级福利 | 自拍亚洲一区 | 激情开心站 | 亚洲啪啪 | 视频国产在线 | 国产成人精品a视频一区 | 亚洲免费黄色 | 69视频污 | 超色视频 | 在线免费观看你懂的 | 17c国产精品| 久操青青| 久久久天堂国产精品女人 | 国产女人高潮的av毛片 | 久久精品综合视频 | 日韩八区 | 成人国产精品一区二区 | 精品欧美一区二区在线观看 | 欧美日韩亚洲国产 | 久久亚洲第一 | 亚洲国产成人在线观看 | 天天干天天色综合 | 五月婷婷伊人网 | 日韩 国产 在线 | 欧美中文字幕在线播放 |