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