STEP AP242形式のファイルの読み込み

OpenCascadeでSTEP AP242形式のファイルを読み込みます

STEPのファイル形式

STEPのファイル形式はAP203、AP214、AP242があります。

  • AP203… 一般的な機械設計に用いられる形式。部品やアセンブリの幾何形状、トポロジー情報を収納。
  • AP214… 自動車機械設計に用いられる形式。AP203の情報に加え色やレイヤー情報、寸法や公差情報を格納します。
  • AP242… 主に航空宇宙業界で使用される形式。AP203とAP214を統合した規格であり、PDM属性・構造、kinematicsなどを表現するためのXMLフォーマットが追加されています。

OpenCasecadeをAP242形式を読み書きする場合

  • AP242形式ではPMI情報などを扱う為、OpenCascadeではXDE(The Extended Data Exchange)機能を使用します。
  • 色、レイヤー、アセンブリの説明、検証プロパティ (重心など) などのデータ型がサポートされています。 これらのデータは、形状とともに XCAF ドキュメントに保存されます。
  • 以下にAP242形式のファイルを読み込むためのコードを記載します。OCCTバージョンは7.7.0を使用。
XCAFDocumentの初期化を行います
Handle(TDocStd_Document) aDoc;
Handle(XCAFApp_Application) anApp = XCAFApp_Application::GetApplication();
BinXCAFDrivers::DefineFormat(anApp);
XmlXCAFDrivers::DefineFormat(anApp);
anApp->NewDocument("BinXCAF", aDoc);
STEPCAFControl_Reader reader;
STEPファイルの読み込みとXCAFDocumentへの変換
try
{
  //Stepファイルの読み込み
	if (!Reader.ReadFile("Step242.step"))
	{
		std::cout << "Cannot read STEP file" << std::endl;
		return;
	}
  //Documentファイルへの変換
	if (!Reader.Transfer(aDoc))
	{
		std::cout << "Cannot transfer CAD data from STEP file to XDE" << std::endl;
		return;
	}
}
catch (...)
{
	std::cout << "Exception on reading STEP file" << std::endl;
	return;
}
形状データの寸法データの表示を行う
//myContext Handle(AIS_InteractiveContext)のインスタンス

for (XCAFPrs_DocumentExplorer aDocExp(aDoc,
	XCAFPrs_DocumentExplorerFlags_None);
	aDocExp.More(); aDocExp.Next())
{
	const XCAFPrs_DocumentNode& aNode = aDocExp.Current();
	
	Handle(XCAFDoc_ShapeTool) myAssembly = XCAFDoc_DocumentTool::ShapeTool(aNode.Label);
 //形状データの取得・表示
	TopoDS_Shape aShape = myAssembly->GetShape(aNode.Label);
	myContext->Display(new AIS_Shape(aShape), AIS_Shaded, 0, false);

  //寸法データの取得・表示
	XCAFDimTolObjects_Tool aDimTolObj(aDoc);
	XCAFDimTolObjects_DimensionObjectSequence aDimSequence;
	aDimTolObj.GetDimensions(aDimSequence);

	for (XCAFDimTolObjects_DimensionObjectSequence::Iterator itr(aDimSequence);
itr.More();itr.Next())
	{
		Handle(XCAFDimTolObjects_DimensionObject) dimObject = itr.Value();
		Handle(AIS_Shape) aShape2 = new AIS_Shape(dimObject->GetPresentation());
		aShape2->SetColor(Quantity_NOC_YELLOW);//オブジェクトの色を黄色に変更
		myContext->Display(aShape2, AIS_Shaded, 0, false);
	}
}
実行結果

参照サイト