イズミビジョンラボ合同会社 >
技術資料 >
CADデータの入力、出力
OpenCascadeで入出力可能なファイル形式を紹介します。
1.仕様
- STEP(入力、出力)
- BRep(入力、出力)
- IGES(入力、出力)
- STL(入力、出力)
- VRML(出力)
2.STEP入力
//aISContext AIS_InteractiveContextクラスのインスタンスハンドル
//fileName 読み込むするファイル名
//ColorStep 色付きSTEPデータかどうか
//update 描写の更新をするかどうか
bool ImportStep(Handle(AIS_InteractiveContext) aISContext, std::string fileName,
bool colorStep, bool update)
{
std::filesystem::path path = fileName;
STEPControl_Reader aReader;
IFSelect_ReturnStatus aStatus = aReader.ReadFile(fileName.c_str());
if (aStatus == IFSelect_RetDone)
{
if (!std::filesystem::is_regular_file(fileName))
return false;
aISContext->SetDisplayMode(AIS_Shaded, Standard_False);
bool isFailsonly = false;
aReader.PrintCheckLoad(isFailsonly, IFSelect_ItemsByEntity);
int aNbRoot = aReader.NbRootsForTransfer();
aReader.PrintCheckTransfer(isFailsonly, IFSelect_ItemsByEntity);
for (Standard_Integer n = 1; n <= aNbRoot; n++)
{
Standard_Boolean ok = aReader.TransferRoot(n);
int aNbShape = aReader.NbShapes();
if (aNbShape > 0)
{
for (int i = 1; i <= aNbShape; i++)
{
TopoDS_Shape aShape = aReader.Shape(i);
if (!colorStep)
newObj = new AIS_Shape(aShape);
else
newObj = new AIS_ColoredShape(aShape);
aISContext->Display(newObj, update);
}
}
}
aISContext->UpdateCurrentViewer();
return true;
}
else
{
return false;
}
}
3.STEP出力
//aISObject AIS_InteractiveObjectクラスのインスタンスハンドル
//fileName 出力するファイル名
bool ExportStep(Handle(AIS_InteractiveObject) aISObject, std::string fileName)
{
Handle(AIS_Shape) anIS = Handle(AIS_Shape)::DownCast(aISObject);
STEPControl_StepModelType aType = STEPControl_AsIs;
IFSelect_ReturnStatus aStatus;
STEPControl_Writer aWriter;
aStatus = aWriter.Transfer(anIS->Shape(), mode);
if (aStatus != IFSelect_RetDone)
return false;
aStatus = aWriter.Write(fileName.c_str());
if (aStatus != IFSelect_RetDone)
return false;
return true;
}
4.BRep入力
//aISContext AIS_InteractiveContextクラスのインスタンスハンドル
//fileName 読み込むするファイル名
//update 描写の更新をするかどうか
bool ImportBrep(Handle(AIS_InteractiveContext) aISContext, std::string fileName,
bool update)
{
TopoDS_Shape aShape;
BRep_Builder aBuilder;
Standard_Boolean isResult = ;
if (BRepTools::Read(aShape, fileName.c_str(), aBuilder)){
aISContext->Display(new AIS_Shape(aShape), update);
return true;
}
else{
return false;
}
}
5.BRep出力
//aISObject AIS_InteractiveObjectクラスのインスタンスハンドル
//fileName 出力するファイル名
bool ExportBRep(Handle(AIS_InteractiveObject) aISObject, std::string fileName)
{
Handle(AIS_Shape) anIS = Handle(AIS_Shape)::DownCast(aISObject);
return BRepTools::Write(anIS->Shape(), fileName.c_str()) != Standard_False;
}
6.IGES入力
//aISContext AIS_InteractiveContextクラスのインスタンスハンドル
//fileName 読み込むするファイル名
//update 描写の更新をするかどうか
bool ImportIges(Handle(AIS_InteractiveContext) aISContext, std::string fileName,
bool update)
{
IGESControl_Reader aReader;
int aStatus = aReader.ReadFile(fileName.c_str());
if (aStatus == IFSelect_RetDone)
{
aReader.TransferRoots();
TopoDS_Shape aShape = aReader.OneShape();
aISContext->Display(new AIS_Shape(aShape), Standard_True);
return true;
}
else
{
return false;
}
}
7.IGES出力
//aISObject AIS_InteractiveObjectクラスのインスタンスハンドル
//fileName 出力するファイル名
bool ExportIges(Handle(AIS_InteractiveObject) aISObject, std::string fileName)
{
IGESControl_Controller::Init();
IGESControl_Writer aWriter(Interface_Static::CVal("XSTEP.iges.unit"),
Interface_Static::IVal("XSTEP.iges.writebrep.mode"));
Handle(AIS_Shape) anIS = Handle(AIS_Shape)::DownCast(aISObject);
TopoDS_Shape aShape = anIS->Shape();
if (!aWriter.AddShape(aShape))
return false;
aWriter.ComputeModel();
return aWriter.Write(fileName.c_str()) != false;
}
8.STL入力
//aISContext AIS_InteractiveContextクラスのインスタンスハンドル
//fileName 読み込むするファイル名
//update 描写の更新をするかどうか
bool ImportStl(Handle(AIS_InteractiveContext) aISContext, std::string fileName,
bool update)
{
StlAPI_Reader aReader;
TopoDS_Shape aShape;
if (aReader.Read(aShape, fileName.c_str()))
{
aISContext->Display(new AIS_Shape(aShape), update);
return true;
}
else
{
return false;
}
}
9.STL出力
//aISObject AIS_InteractiveObjectクラスのインスタンスハンドル
//fileName 出力するファイル名
bool ExportStl(Handle(AIS_InteractiveObject) aISObject, std::string fileName)
{
TopoDS_Compound aComp;
BRep_Builder aBuilder;
aBuilder.MakeCompound(aComp);
Handle(AIS_Shape) anIS = Handle(AIS_Shape)::DownCast(aISObject);
TopoDS_Shape aShape = anIS->Shape();
if (aShape.IsNull())
{
return false;
}
aBuilder.Add(aComp, aShape);
StlAPI_Writer aWriter;
aWriter.Write(aComp, fileName.c_str());
return true;
}
10.Vrml出力
//aISObject AIS_InteractiveObjectクラスのインスタンスハンドル
//fileName 出力するファイル名
bool ExportVrml(Handle(AIS_InteractiveObject) aISObject, std::string fileName)
{
TopoDS_Compound aRes;
BRep_Builder aBuilder;
aBuilder.MakeCompound(aRes);
Handle(AIS_Shape) anIS = Handle(AIS_Shape)::DownCast(aISObject);
TopoDS_Shape aShape = anIS->Shape();
if (aShape.IsNull())
{
return false;
}
aBuilder.Add(aRes, aShape);
VrmlAPI_Writer aWriter;
aWriter.Write(aRes, fileName.c_str());
return true;
}