实现打开*.step;*.iges;*.stl;*.brep等格式文件。
这段代码定义了一个名为Open_File的函数,该函数接受一个QString类型的参数filename,并返回一个TopoDS_Shape类型的对象。
函数首先创建一个空的TopoDS_Shape对象shape,然后根据文件名的后缀名调用不同的读取器来读取文件内容,并将读取到的形状数据存储在shape中。
如果文件名以"step"结尾,则使用STEPControl_Reader类来读取文件内容。如果读取失败(即stat不等于IFSelect_RetDone),则函数直接返回一个空的TopoDS_Shape对象。否则,调用TransferRoots()方法和OneShape()方法获取读取到的形状数据,并将其存储在shape中。
如果文件名以"iges"结尾,则使用IGESControl_Reader类来读取文件内容。同样地,如果读取失败,则函数直接返回一个空的TopoDS_Shape对象。否则,调用TransferRoots()方法和OneShape()方法获取读取到的形状数据,并将其存储在shape中。
如果文件名以"stl"结尾,则使用StlAPI_Reader类来读取文件内容。调用Read()方法将读取到的形状数据存储在shape中。
如果文件名以"brep"结尾,则使用BRep_Builder类和BRepTools::Read()函数来读取文件内容。调用Read()方法将读取到的形状数据存储在shape中。
最后,函数返回shape对象。
cpp
TopoDS_Shape Open_File(const QString filename)
{
TopoDS_Shape shape;
if (filename.endsWith("step"))
{
STEPControl_Reader reader;
IFSelect_ReturnStatus stat = reader.ReadFile(filename.toUtf8().data());
if (stat != IFSelect_RetDone)
{
//return;
}
reader.TransferRoots();
shape = reader.OneShape();
}
else if (filename.endsWith("iges"))
{
IGESControl_Reader reader;
reader.ReadFile(filename.toUtf8().data());
reader.TransferRoots();
shape = reader.OneShape();
}
else if (filename.endsWith("stl"))
{
StlAPI_Reader reader;
reader.Read(shape, filename.toUtf8().data());
}
else if (filename.endsWith("brep"))
{
BRep_Builder builder_Brep;
BRepTools::Read(shape, filename.toUtf8().data(), builder_Brep);
}
return shape;
}