押し出し形状の作成方法

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);

実行結果

参照サイト