OpenCascadeでプロファイルを押し出してソリッドモデルを作成する
今回は下図のようなプロファイルを押し出してソリッドモデルを作成します。BRepPrimAPI_MakePrism(TopoDS_Face, gp_Vec)
関数を使用します。

プロファイルの作成
GC_MakeSegment
関数やGC_MakeArcOfCircle
関数で直線または曲線を作成し、BRepBuilderAPI_MakeEdge
関数でエッジ化(トポロジーオブジェクト作成)します。BRepBuilderAPI_MakeWire
でワイヤートポロジーオブジェクトを作成。
gp_Pnt p1(-100, 0, 0);
gp_Pnt p2(100, 0, 0);
gp_Pnt p3(100, 75, 0);
gp_Pnt p5(-100, 150, 0);
gp_Pnt p4(0, 130, 0);
// ジオメトリックオブジェクト(直線)の作成
Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(p1, p2);
Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(p2, p3);
Handle(Geom_TrimmedCurve) aSegment4 = GC_MakeSegment(p5, p1);
// ジオメトリックオブジェクト(円弧)の作成
Handle(Geom_TrimmedCurve) aSegment3 = GC_MakeArcOfCircle(p3, p4, p5);
// ジオメトリックオブジェクトからトポロジーオブジェクトへ変換
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);
TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(aSegment2);
TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(aSegment3);
TopoDS_Edge anEdge4 = BRepBuilderAPI_MakeEdge(aSegment4);
// トポロジーオブジェクト(ワイヤー)の作成
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(anEdge1, anEdge2, anEdge3, anEdge4);
直線のエッジについてはBRepBuilderAPI_MakeEdge
関数で作成することも可能。
TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(p1, p2);
押し出しソリッドモデルの作成
ワイヤーオブジェクトから面オブジェクトを作成。(BRepBuilderAPI_MakeFace
関数)BRepPrimAPI_MakePrism
関数で押し出しモデルを作成。第1引数に面オブジェクトを置くとソリッドモデルが作成され、ワイヤーオブジェクトを入れると上下面のないサーファスモデルが作成されます。
// ワイヤートポロジーオブジェクトから面トポロジーオブジェクトを作成
TopoDS_Face myFaceProfile = BRepBuilderAPI_MakeFace(aWire);
// 押し出しパスの作成
gp_Vec aPrismVec(0, 0, 400);
// 押し出し形状の作成
TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile, aPrismVec);
// メンバー変数 Handle(AIS_InteractiveContext) m_AISContext;
m_AISContext->Display(new AIS_Shape(myBody), true);
実行結果
