OpenCascadeでモデル形状のプロパティを取得する。
今回はソリッドモデルの面を選択し、面を構成するエッジの情報を取得するコードを紹介します。Brep_Tool::Curve
関数でTopoDS_Face
オブジェクトからGeom_Curve
オブジェクトへの変換をし、エッジ構成点の情報を取得します。

参考コード
今回はエッジの情報を格納するEdgeInfo
を定義し、そちらにエッジ情報を格納します。
(説明用なので簡単なプロパティのみです)
class EdgeInfo
{
public:
Standard_Real startX = 0; // 開始点のX座標を格納
Standard_Real startY = 0; // 開始点のY座標を格納
Standard_Real startZ = 0; // 開始点のZ座標を格納
Standard_Real endX = 0; // 終了点のX座標を格納
Standard_Real endY = 0; // 終了点のY座標を格納
Standard_Real endZ = 0; // 終了点のZ座標を格納
std::string type = ""; // 曲線の種類(Line, Circle等)
};
forループにより選択面に含まれるエッジを走査し、取得したTopoDS_Edge
オブジェクトを変換し各種情報を取得します。
std::vector<EdgeInfo> edges(0)
m_AISContext->InitSelected();
TopoDS_Shape aShape = m_AISContext->SelectedShape();
if (aShape.IsNull())
return;
if (TopAbs_FACE != aShape.ShapeType())
return;
// イテレータにより選択面に含まれるエッジを抽出します。
for (TopExp_Explorer eExpl(aShape, TopAbs_EDGE); eExpl.More(); eExpl.Next())
{
const TopoDS_Edge& curEdge = static_cast <const TopoDS_Edge&> (eExpl.Current());
if (curEdge.IsNull())
continue;
Standard_Real first; // 開始点を表すパラメータ
Standard_Real last; // 終了点を表すパラメータ
// Brep_Tool::Curve関数により幾何形状(Geom_Curve)を取り出します。
const Handle(Geom_Curve) curve = BRep_Tool::Curve(curEdge, first, last);
EdgeInfo edgeInfo;
// Geom_Curve::Value()によりエッジ構成点の情報が取得できる。
// 引数にfirstで開始点、lastで終了点
edgeInfo.startX = curve->Value(first).X();
edgeInfo.startY = curve->Value(first).Y();
edgeInfo.startZ = curve->Value(first).Z();
edgeInfo.endX = curve->Value(last).X();
edgeInfo.endY = curve->Value(last).Y();
edgeInfo.endZ = curve->Value(last).Z();
// 曲線の種類については BRepAdaptor_Curveへ変換し取得します。
BRepAdaptor_Curve bCurve = BRepAdaptor_Curve(curEdge);
GeomAbs_CurveType cType = bCurve.GetType();
if (cType == GeomAbs_CurveType::GeomAbs_Line)
edgeInfo.type = "Line";
else if (cType == GeomAbs_CurveType::GeomAbs_Circle)
edgeInfo.type = "Circle";
else
edgeInfo.type = "Other";
edges.push_back(edgeInfo);
}
// 取り出した情報を処理
今回はエッジの情報を取得しましたが、同様に面の情報や頂点の情報も取得できます。
実行結果
