OCCT示例学习笔记3--Modeling项目
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() 函數中。
顯示效果如下:
應用的類如下:
- BRepPrimAPI_MakeWedge類;上圖顯示的綠色梯形
- Geom_CartesianPoint類;點Geom_Point的實現類。
- AIS_Point類,顯示點的類,上圖中間的黃色十字。
- gp_Trsf類,設置鏡像移動。
- BRepBuilderAPI_Transform類;移動變換。
2、軸鏡像
在void CModelingDoc::OnMirroraxis()函數中。
顯示效果如下:
應用的類如下:
- gp_Ax1類,描述軸的類
- Geom_Axis1Placement類;描述 3D 空間中的軸。
- AIS_Axis類,顯示軸的類。
3、旋轉效果
在void CModelingDoc::OnRotate()函數中。
顯示效果如下:
應用的類如下:
上面都有了。略
4、縮放效果
在void CModelingDoc::OnScale()函數中。
顯示效果如下:
應用的類如下:
上面都有了。略
5、移動效果
在void CModelingDoc::OnTranslation()函數中。
顯示效果如下:
應用的類如下:
ISession_Direction類,AIS_InteractiveObject類的子類,顯示移動軸。
6、軸坐標位移效果
在void CModelingDoc::OnDisplacement()函數中。
顯示效果如下:
應用的類如下:
通過設置軸來設置位移效果。
7、移動效果
在void CModelingDoc::OnDeform()函數中。
顯示效果如下:
應用的類如下:
- BRepBuilderAPI_GTransform類
- gp_GTrsf類,定義 3D 空間中的非持久變換
- gp_Mat類
8、各種基礎模型顯示
在void CModelingDoc::OnBox() 函數中。顯示效果如下:
在void CModelingDoc::OnCylinder() 函數中。顯示效果如下:
在void CModelingDoc::OnCone() 函數中。顯示效果如下:
在void CModelingDoc::OnSphere()函數中。顯示效果如下:
在CModelingDoc::OnTorus()函數中。顯示效果如下:
在CModelingDoc::OnWedge()函數中。顯示效果如下:
在CModelingDoc::OnPrism()函數中。顯示效果如下:(拉伸功能)
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- BRepPrimAPI_MakeRevol類,制作旋轉掃描拓撲的類。
- Geom_Axis1Placement類,描述 3D 空間中的軸。
- AIS_Axis類,顯示 3D 空間中的軸。
10、pipe的建模
在void CModelingDoc::OnPipe()函數中。顯示效果如下:
應用的類如下:
- TColgp_Array1OfPnt類,是gp_Pnt 的容器。
- gp_Pnt類,三維描述一個點。
- Geom_BezierCurve類,描述有理或非有理貝塞爾曲線。(不懂)
- gp_Circ類,描述三維的一個圓。
- BRepOffsetAPI_MakePipe類,描述構建管道的函數。管道通過掃掠沿線(稱為脊柱)構建基本形狀(稱為輪廓)。輪廓不得包含實體。
主要代碼如下:
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()函數中。顯示效果如下:
應用的類如下:
- BRepOffsetAPI_ThruSections類,這是一個殼或實體以給定的順序通過一組部分。通常部分是連線,但第一個和最后一個部分可能是頂點。上圖就是該類的兩個創建效果一個是平滑化的建模。
主要代碼如下:
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()函數中。顯示效果如下:
GeomAbs_Arc類型的效果圖。
應用的類如下:
- BRepBuilderAPI_MakePolygon類,描述構建多邊形線的函數。
- BRepOffsetAPI_MakeEvolved類,描述構建進化形狀的函數。演化的形狀由平面脊(面或線)和輪廓(線)構建而成。
主要代碼如下:
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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
在void CModelingDoc::OnFuse()函數中。顯示效果如下:
在void CModelingDoc::OnCommon()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- BRepPrimAPI_MakeTorus類,構建圓環形狀類。
- BRepPrimAPI_MakeSphere類,構建球體形狀類。
- BRepAlgoAPI_Section類,是在參數和工具之間建立一個截面算法。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()函數中。顯示效果如下:
應用的類如下:
- gp_Pln類,描述 3D 空間中的平面。
- Geom_Plane類,描述 3D 空間中的平面。
- gce_MakePln類,實現了以下用于從 gp 創建平面的算法。
- gp_Pln類,Geom_Plane類和gce_MakePln類,都是描述三維空間中的平面,他們是不同包中的不同算法,每個類里面有一些不同的算法。
- AIS_Plane類,構造用于顯示復合形狀的平面基準。
- BRepAlgoAPI_Section類,是在參數和工具之間建立一個截面算法。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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- BRepFilletAPI_MakeFillet類,add函數的多態使用。用不同的算法。
主要代碼如下:
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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- BRepAlgoAPI_Cut類,布爾減運算
- gp_Pnt2d類,GCE2d_MakeLine類,Geom2d_Curve類
- BRepBuilderAPI_MakeEdge 類,應用的是
- BRepLib::BuildCurves3d()函數。
- 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 參數指定了三維表面。
BRepBuilderAPI_MakeEdge是將二維的曲線(const Handle(Geom2d_Curve)& L)在指定三維平面上創建三維邊。
比如上圖中:草圖是二維平面上的曲線。在某個指定平面上繪制草圖,再進行拉伸操作。這里就是,在某個指定平面上通過二維曲線創建三維邊。
這里創建的三維邊沒有對應的三維曲線,如果后續用到三維曲線,就需要**BRepLib::BuildCurves3d()**函數對最后的三維模型進行三維曲線的構建。
BRepBuilderAPI_MakeFace類,也有類似的使用,見代碼。
**Redisplay()**函數用于顯示的時候更新模型,還有設置成選中狀態。
21、拔模棱鏡的建模
在void CModelingDoc::OnDprismLocal()函數中。顯示效果如下:
應用的類如下:
- BRepFeat_MakeDPrism類,描述從基本形狀表面構建拔模棱鏡拓撲的函數。
- gp_Circ2d類和Geom2d_Curve類,二維曲線圓。
主要代碼如下:
//描述從基本形狀表面構建拔模棱鏡拓撲的函數。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()函數中。顯示效果如下:
應用的類如下:
- BRepFeat_MakeRevol類,描述從基本形狀構建旋轉殼的函數。
主要代碼如下:
BRepFeat_MakeRevol MKrev(S,FP,F1, gp::OX(),1,Standard_True);//描述從基本形狀構建旋轉殼的函數//。。。TopoDS_Face F2 = TopoDS::Face(Ex.Current());MKrev.Perform(F2);TopoDS_Shape res1 = MKrev.Shape();23、管道的建模
在void CModelingDoc::OnPipeLocal()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- BRepFeat_Gluer類,用于局部粘合。Package BRepFeat包中的類。
這個類最重要的功能是使用本地操作而不是全局操作。在本地操作中,您可以使用正在創建特征的形狀的各個方面來指定特征構造的域。這些語義是根據基礎形狀的成員形狀來表達的,從該形狀中添加或刪除物質。
主要代碼如下:
//如圖左邊的模型,只有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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- BRepOffsetAPI_MakeThickSolid類,描述構建空心實體的函數。
主要代碼如下:
BRepOffsetAPI_MakeThickSolid aSolidMaker;aSolidMaker.MakeThickSolidByJoin(S1,aList,10,0.01);TopoDS_Shape aThickSolid = aSolidMaker.Shape();28、偏移的建模
在void CModelingDoc::OnOffsetLocal()函數中。顯示效果如下:
應用的類如下:
- BRepOffsetAPI_MakeOffsetShape類,描述用形狀構建殼的函數。
主要代碼如下:
//左邊的模型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()函數中。顯示效果如下:
應用的類如下:
- BRepBuilderAPI_MakeVertex類,描述直接從 3D 幾何點構建 BRepBuilder 頂點的函數。
主要代碼如下:
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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- Geom_BSplineSurface類。
- BRepBuilderAPI_MakeShell類。
主要代碼如下:
34、Compound的建模
在void CModelingDoc::OnCompound()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
應用的類如下:
- BRepOffsetAPI_Sewing類,沿著它們的共同邊緣縫合形狀。
- Geom_Plane類,描述 3D 空間中的平面。
- Geom_RectangularTrimmedSurface類,描述由 u 參數方向上的兩個 u 參數值和 v 參數方向上的兩個 v 參數值限制的曲面部分(面片)。
- 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()函數中。顯示效果如下:
應用的類如下:
- 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()函數中。顯示效果如下:
就是點線面和線段4個幾何模型的建立和顯示。
應用的類如下:
略。
主要代碼如下:
略。
38、子圖形顯示
在void CModelingDoc::OnExplorer()函數中。顯示效果如下:
應用的類如下:
- AIS_ColoredShape類,自定義指定子形狀的屬性。如果它不是主形狀的子形狀,該形狀將被存儲在地圖中但被忽略。此方法可用于標記具有可自定義屬性的子形狀。
- AIS_ColoredDrawer類,可定制的屬性。
- Prs3d_ShadingAspect 類,定義陰影顯示的框架。
- AIS_ConnectedInteractive類,創建另一個交互對象的任意位置實例,用作參考。這允許您使用連接的交互式對象,而無需重新計算演示、選擇或圖形結構。這些是從您的參考對象推導出來的。連接的交互對象與其源之間的關系一般是一種幾何變換。
- Geom_Transformation類,描述平移、旋轉、縮放的基本變換。
主要代碼如下:
這里做了一個動畫效果,具體用每幀移動更新的效果實現的。
39、檢查形狀是否“正確”
在void CModelingDoc::OnValid()函數中。顯示效果如下:
應用的類如下:
- BRepAlgo::IsValid()函數,檢查形狀是否“正確”。
主要代碼如下:
Standard_Boolean theShapeIsValid = BRepAlgo::IsValid(S);//檢查形狀是否“正確”。40、曲線長度、質心和慣性矩陣
在void CModelingDoc::OnLinear()函數中。顯示效果如下:
應用的類如下:
-
GeomAPI_PointsToBSpline類,描述用于構建近似一組點的 3D BSpline 曲線的函數。
-
Geom_BSplineCurve類,B 樣條曲線的定義。
-
GProp_GProps類,實現一種通用機制,通過組合“基本幾何實體”(例如曲線、曲面、實體、點集)的全局屬性來計算 3d 空間中“復合幾何系統”的全局屬性。
-
BRepGProp::LinearProperties()函數,如果 LProps 的當前系統是空的,它的全局屬性變得等于 S 的線性全局屬性。所以,這里是獲得了S的全局屬性。
-
GProp_GProps類,計算的全局屬性是:- 尺寸(長度、面積或體積)
- 質量,
- 質心,
- 慣性力矩(靜態力矩和二次力矩),
- 繞軸的力矩,
- 繞軸線的回轉半徑,
- 慣性的主要性質:(另見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()函數中。顯示效果如下:
應用的類如下:
- GProp_GProps 類,實現一種通用機制,通過組合“基本幾何實體”(例如曲線、曲面、實體、點集)的全局屬性來計算 3d 空間中“復合幾何系統”的全局屬性。
- GeomAPI_PointsToBSpline類,描述用于構建近似一組點的 3D BSpline 曲線的函數。
- Geom_BSplineCurve類,B 樣條曲線的定義。
- GeomFill_BSplineCurves類,一種用于構造 BSpline 曲面的算法,該曲面由形成其邊界的連續 BSpline 曲線填充。
- Geom_BSplineSurface類,描述 BSpline 曲面。
- BRepGProp::SurfaceProperties()函數,如果 SProps 的當前系統為空,則其全局屬性將等于 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()函數中。顯示效果如下:
應用的類如下:
- BRepGProp::SurfaceProperties()函數,如果當前的 VProps 系統是空的,它的全局屬性就等于 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()函數和CModelingDoc::OnStopStop()函數實現一個功能。顯示效果大概是將選中的edge組成face。有點難懂。暫時略了。
應用的類如下:
- TopExp::MapShapesAndAncestors()函數,將 TS 類型的 s 的所有子形狀存儲在映射 M 中,每個子形狀都將 TA 類型的所有唯一祖先添加到列表中。
- BRepAdaptor_Surface類,使用看起來像 3D 表面的 BRep 拓撲的面。
- GeomAdaptor_Surface類,由 Geom 包中的任何表面提供的服務與使用它的算法所需的表面之間的接口。
- BRepAdaptor_Curve2d類,BRepAdaptor 的 Curve2d 。位于 Geom 包中的曲面上的曲線提供的服務與使用該曲線的算法所需的服務之間的接口。在F上使用E的 pcurve 創建。
- Adaptor3d_CurveOnSurface類,位于 Geom 包中的曲面上的曲線提供的服務與使用該曲線的算法所需的服務之間的接口。
- GeomPlate_BuildPlateSurface類,提供了一種算法,用于構造符合給定曲線和/或點約束的板表面。該算法接受或構造一個初始表面,并尋找滿足約束條件和最小化能量輸入的變形。對象提供了一個框架。
- GeomPlate_MakeApprox類,允許您將 GeomPlate 曲面轉換為 BSpline。
- Geom_BSplineSurface類。
- BRepTopAdaptor_FClass2d類。
44、OnFillwithtang建模(有點難懂。暫時略)
在void CModelingDoc::OnFillwithtang()函數中。
———Modeling項目。完。———
總結
以上是生活随笔為你收集整理的OCCT示例学习笔记3--Modeling项目的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Glassfish的安装与使用
- 下一篇: 未转变者服务器bug,未转变者攻略 un