モデル構成要素の情報取得方法

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

// 取り出した情報を処理

今回はエッジの情報を取得しましたが、同様に面の情報や頂点の情報も取得できます。

実行結果

参照サイト